You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
240 lines
4.8 KiB
TypeScript
240 lines
4.8 KiB
TypeScript
import { LocaleMessagesType } from './locale';
|
|
|
|
import { isString } from 'lodash';
|
|
|
|
// tslint:disable-next-line: max-func-body-length
|
|
export const createTemplate = (
|
|
options: {
|
|
openReleaseNotes: () => void;
|
|
openSupportPage: () => void;
|
|
platform: string;
|
|
showAbout: () => void;
|
|
showDebugLog: () => void;
|
|
showWindow: () => void;
|
|
},
|
|
messages: LocaleMessagesType
|
|
) => {
|
|
if (!isString(options.platform)) {
|
|
throw new TypeError('`options.platform` must be a string');
|
|
}
|
|
|
|
const {
|
|
openReleaseNotes,
|
|
openSupportPage,
|
|
platform,
|
|
showAbout,
|
|
showDebugLog,
|
|
showWindow,
|
|
} = options;
|
|
|
|
const template = [
|
|
{
|
|
label: messages.mainMenuFile,
|
|
submenu: [
|
|
{
|
|
type: 'separator',
|
|
},
|
|
{
|
|
role: 'quit',
|
|
label: messages.appMenuQuit,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: messages.mainMenuEdit,
|
|
submenu: [
|
|
{
|
|
role: 'undo',
|
|
label: messages.editMenuUndo,
|
|
},
|
|
{
|
|
role: 'redo',
|
|
label: messages.editMenuRedo,
|
|
},
|
|
{
|
|
type: 'separator',
|
|
},
|
|
{
|
|
role: 'cut',
|
|
label: messages.editMenuCut,
|
|
},
|
|
{
|
|
role: 'copy',
|
|
label: messages.editMenuCopy,
|
|
},
|
|
{
|
|
role: 'paste',
|
|
label: messages.editMenuPaste,
|
|
},
|
|
{
|
|
role: 'delete',
|
|
label: messages.delete,
|
|
},
|
|
{
|
|
role: 'selectall',
|
|
label: messages.editMenuSelectAll,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: messages.mainMenuView,
|
|
submenu: [
|
|
{
|
|
role: 'resetzoom',
|
|
label: messages.viewMenuResetZoom,
|
|
},
|
|
{
|
|
accelerator: platform === 'darwin' ? 'Command+=' : 'Control+Plus',
|
|
role: 'zoomin',
|
|
label: messages.viewMenuZoomIn,
|
|
},
|
|
{
|
|
role: 'zoomout',
|
|
label: messages.viewMenuZoomOut,
|
|
},
|
|
{
|
|
type: 'separator',
|
|
},
|
|
{
|
|
role: 'togglefullscreen',
|
|
label: messages.viewMenuToggleFullScreen,
|
|
},
|
|
{
|
|
type: 'separator',
|
|
},
|
|
{
|
|
label: messages.debugLog,
|
|
click: showDebugLog,
|
|
},
|
|
{
|
|
type: 'separator',
|
|
},
|
|
{
|
|
role: 'toggledevtools',
|
|
label: messages.viewMenuToggleDevTools,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: messages.mainMenuWindow,
|
|
role: 'window',
|
|
submenu: [
|
|
{
|
|
role: 'minimize',
|
|
label: messages.windowMenuMinimize,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: messages.mainMenuHelp,
|
|
role: 'help',
|
|
submenu: [
|
|
{
|
|
label: messages.goToReleaseNotes,
|
|
click: openReleaseNotes,
|
|
},
|
|
{
|
|
type: 'separator',
|
|
},
|
|
{
|
|
label: messages.goToSupportPage,
|
|
click: openSupportPage,
|
|
},
|
|
{
|
|
type: 'separator',
|
|
},
|
|
{
|
|
label: messages.about,
|
|
click: showAbout,
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
if (platform === 'darwin') {
|
|
return updateForMac(template, messages, {
|
|
showAbout: showAbout,
|
|
showWindow: showWindow,
|
|
});
|
|
}
|
|
|
|
return template;
|
|
};
|
|
|
|
function updateForMac(
|
|
template: any,
|
|
messages: LocaleMessagesType,
|
|
options: { showAbout: () => void; showWindow: () => void }
|
|
) {
|
|
const { showAbout, showWindow } = options;
|
|
|
|
// Remove About item and separator from Help menu, since it's on the first menu
|
|
template[4].submenu.pop();
|
|
template[4].submenu.pop();
|
|
|
|
// Remove File menu
|
|
template.shift();
|
|
|
|
// Add the OSX-specific Signal Desktop menu at the far left
|
|
template.unshift({
|
|
label: messages.sessionMessenger,
|
|
submenu: [
|
|
{
|
|
label: messages.about,
|
|
click: showAbout,
|
|
},
|
|
{
|
|
type: 'separator',
|
|
},
|
|
{
|
|
type: 'separator',
|
|
},
|
|
{
|
|
label: messages.appMenuHide,
|
|
role: 'hide',
|
|
},
|
|
{
|
|
label: messages.appMenuHideOthers,
|
|
role: 'hideothers',
|
|
},
|
|
{
|
|
label: messages.appMenuUnhide,
|
|
role: 'unhide',
|
|
},
|
|
{
|
|
type: 'separator',
|
|
},
|
|
{
|
|
label: messages.appMenuQuit,
|
|
role: 'quit',
|
|
},
|
|
],
|
|
});
|
|
|
|
// Replace Window menu
|
|
const windowMenuTemplateIndex = 3;
|
|
// eslint-disable-next-line no-param-reassign
|
|
template[windowMenuTemplateIndex].submenu = [
|
|
{
|
|
label: messages.windowMenuClose,
|
|
accelerator: 'CmdOrCtrl+W',
|
|
role: 'close',
|
|
},
|
|
{
|
|
label: messages.windowMenuMinimize,
|
|
accelerator: 'CmdOrCtrl+M',
|
|
role: 'minimize',
|
|
},
|
|
{
|
|
label: messages.windowMenuZoom,
|
|
role: 'zoom',
|
|
},
|
|
{
|
|
label: messages.show,
|
|
click: showWindow,
|
|
},
|
|
];
|
|
|
|
return template;
|
|
}
|