Files
mattermostest/src/browser/js/contextMenu.js
2018-08-31 07:56:47 -04:00

72 lines
2.1 KiB
JavaScript

// Copyright (c) 2015-2016 Yuya Ochiai
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {ipcRenderer} from 'electron';
import electronContextMenu from 'electron-context-menu';
function getSuggestionsMenus(win, suggestions) {
if (suggestions.length === 0) {
return [{
label: 'No Suggestions',
enabled: false,
}];
}
return suggestions.map((s) => ({
label: s,
click() {
(win.webContents || win.getWebContents()).replaceMisspelling(s);
},
}));
}
function getSpellCheckerLocaleMenus(onSelectSpellCheckerLocale) {
const currentLocale = ipcRenderer.sendSync('get-spellchecker-locale');
const locales = [
{language: 'English (US)', locale: 'en-US'},
{language: 'French', locale: 'fr-FR'},
{language: 'German', locale: 'de-DE'},
{language: 'Spanish', locale: 'es-ES'},
{language: 'Dutch', locale: 'nl-NL'},
{language: 'Portuguese', locale: 'pt-BR'},
];
return locales.map((l) => ({
label: l.language,
type: 'checkbox',
checked: l.locale === currentLocale,
click() {
if (onSelectSpellCheckerLocale) {
onSelectSpellCheckerLocale(l.locale);
}
},
}));
}
export default {
setup(win, options) {
const defaultOptions = {
useSpellChecker: false,
onSelectSpellCheckerLocale: null,
};
const actualOptions = Object.assign({}, defaultOptions, options);
electronContextMenu({
window: win,
prepend(params) {
if (actualOptions.useSpellChecker) {
const prependMenuItems = [];
if (params.isEditable && params.misspelledWord !== '') {
const suggestions = ipcRenderer.sendSync('get-spelling-suggestions', params.misspelledWord);
prependMenuItems.push(...getSuggestionsMenus(win, suggestions));
}
if (params.isEditable) {
prependMenuItems.push(
{type: 'separator'},
{label: 'Spelling Languages', submenu: getSpellCheckerLocaleMenus(actualOptions.onSelectSpellCheckerLocale)});
}
return prependMenuItems;
}
return [];
},
});
},
};