mirror of
https://github.com/bitwarden/browser
synced 2025-12-17 16:53:34 +00:00
Split jslib into multiple modules (#363)
* Split jslib into multiple modules
This commit is contained in:
229
electron/src/baseMenu.ts
Normal file
229
electron/src/baseMenu.ts
Normal file
@@ -0,0 +1,229 @@
|
||||
import {
|
||||
app,
|
||||
clipboard,
|
||||
dialog,
|
||||
Menu,
|
||||
MenuItemConstructorOptions,
|
||||
} from 'electron';
|
||||
|
||||
import { I18nService } from 'jslib-common/abstractions/i18n.service';
|
||||
import { WindowMain } from './window.main';
|
||||
|
||||
export class BaseMenu {
|
||||
protected editMenuItemOptions: MenuItemConstructorOptions;
|
||||
protected viewSubMenuItemOptions: MenuItemConstructorOptions[];
|
||||
protected windowMenuItemOptions: MenuItemConstructorOptions;
|
||||
protected macAppMenuItemOptions: MenuItemConstructorOptions[];
|
||||
protected macWindowSubmenuOptions: MenuItemConstructorOptions[];
|
||||
|
||||
constructor(protected i18nService: I18nService, protected windowMain: WindowMain) { }
|
||||
|
||||
protected initProperties() {
|
||||
this.editMenuItemOptions = {
|
||||
label: this.i18nService.t('edit'),
|
||||
submenu: [
|
||||
{
|
||||
label: this.i18nService.t('undo'),
|
||||
role: 'undo',
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t('redo'),
|
||||
role: 'redo',
|
||||
},
|
||||
{ type: 'separator' },
|
||||
{
|
||||
label: this.i18nService.t('cut'),
|
||||
role: 'cut',
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t('copy'),
|
||||
role: 'copy',
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t('paste'),
|
||||
role: 'paste',
|
||||
},
|
||||
{ type: 'separator' },
|
||||
{
|
||||
label: this.i18nService.t('selectAll'),
|
||||
role: 'selectAll',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
this.viewSubMenuItemOptions = [
|
||||
{
|
||||
label: this.i18nService.t('zoomIn'),
|
||||
role: 'zoomIn',
|
||||
accelerator: 'CmdOrCtrl+=',
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t('zoomOut'),
|
||||
role: 'zoomOut',
|
||||
accelerator: 'CmdOrCtrl+-',
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t('resetZoom'),
|
||||
role: 'resetZoom',
|
||||
accelerator: 'CmdOrCtrl+0',
|
||||
},
|
||||
{ type: 'separator' },
|
||||
{
|
||||
label: this.i18nService.t('toggleFullScreen'),
|
||||
role: 'togglefullscreen',
|
||||
},
|
||||
{ type: 'separator' },
|
||||
{
|
||||
label: this.i18nService.t('reload'),
|
||||
role: 'forceReload',
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t('toggleDevTools'),
|
||||
role: 'toggleDevTools',
|
||||
accelerator: 'F12',
|
||||
},
|
||||
];
|
||||
|
||||
this.windowMenuItemOptions = {
|
||||
label: this.i18nService.t('window'),
|
||||
role: 'window',
|
||||
submenu: [
|
||||
{
|
||||
label: this.i18nService.t('minimize'),
|
||||
role: 'minimize',
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t('close'),
|
||||
role: 'close',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
if (process.platform === 'darwin') {
|
||||
this.macAppMenuItemOptions = [
|
||||
{
|
||||
label: this.i18nService.t('services'),
|
||||
role: 'services', submenu: [],
|
||||
},
|
||||
{ type: 'separator' },
|
||||
{
|
||||
label: this.i18nService.t('hideBitwarden'),
|
||||
role: 'hide',
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t('hideOthers'),
|
||||
role: 'hideOthers',
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t('showAll'),
|
||||
role: 'unhide',
|
||||
},
|
||||
{ type: 'separator' },
|
||||
{
|
||||
label: this.i18nService.t('quitBitwarden'),
|
||||
role: 'quit',
|
||||
},
|
||||
];
|
||||
|
||||
this.macWindowSubmenuOptions = [
|
||||
{
|
||||
label: this.i18nService.t('minimize'),
|
||||
role: 'minimize',
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t('zoom'),
|
||||
role: 'zoom',
|
||||
},
|
||||
{ type: 'separator' },
|
||||
{
|
||||
label: this.i18nService.t('bringAllToFront'),
|
||||
role: 'front',
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t('close'),
|
||||
role: 'close',
|
||||
},
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
protected initContextMenu() {
|
||||
if (this.windowMain.win == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
const selectionMenu = Menu.buildFromTemplate([
|
||||
{
|
||||
label: this.i18nService.t('copy'),
|
||||
role: 'copy',
|
||||
},
|
||||
{ type: 'separator' },
|
||||
{
|
||||
label: this.i18nService.t('selectAll'),
|
||||
role: 'selectAll',
|
||||
},
|
||||
]);
|
||||
|
||||
const inputMenu = Menu.buildFromTemplate([
|
||||
{
|
||||
label: this.i18nService.t('undo'),
|
||||
role: 'undo',
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t('redo'),
|
||||
role: 'redo',
|
||||
},
|
||||
{ type: 'separator' },
|
||||
{
|
||||
label: this.i18nService.t('cut'),
|
||||
role: 'cut',
|
||||
enabled: false,
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t('copy'),
|
||||
role: 'copy',
|
||||
enabled: false,
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t('paste'),
|
||||
role: 'paste',
|
||||
},
|
||||
{ type: 'separator' },
|
||||
{
|
||||
label: this.i18nService.t('selectAll'),
|
||||
role: 'selectAll',
|
||||
},
|
||||
]);
|
||||
|
||||
const inputSelectionMenu = Menu.buildFromTemplate([
|
||||
{
|
||||
label: this.i18nService.t('cut'),
|
||||
role: 'cut',
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t('copy'),
|
||||
role: 'copy',
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t('paste'),
|
||||
role: 'paste',
|
||||
},
|
||||
{ type: 'separator' },
|
||||
{
|
||||
label: this.i18nService.t('selectAll'),
|
||||
role: 'selectAll',
|
||||
},
|
||||
]);
|
||||
|
||||
this.windowMain.win.webContents.on('context-menu', (e, props) => {
|
||||
const selected = props.selectionText && props.selectionText.trim() !== '';
|
||||
if (props.isEditable && selected) {
|
||||
inputSelectionMenu.popup({ window: this.windowMain.win });
|
||||
} else if (props.isEditable) {
|
||||
inputMenu.popup({ window: this.windowMain.win });
|
||||
} else if (selected) {
|
||||
selectionMenu.popup({ window: this.windowMain.win });
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user