diff --git a/browser/main/Detail/SnippetNoteDetail.js b/browser/main/Detail/SnippetNoteDetail.js index c65f1425..75be4798 100644 --- a/browser/main/Detail/SnippetNoteDetail.js +++ b/browser/main/Detail/SnippetNoteDetail.js @@ -32,7 +32,7 @@ import { confirmDeleteNote } from 'browser/lib/confirmDeleteNote' const electron = require('electron') const { remote } = electron -const { Menu, MenuItem, dialog } = remote +const { dialog } = remote class SnippetNoteDetail extends React.Component { constructor (props) { @@ -451,14 +451,14 @@ class SnippetNoteDetail extends React.Component { } handleModeButtonClick (e, index) { - const menu = new Menu() + const templetes = [] CodeMirror.modeInfo.sort(function (a, b) { return a.name.localeCompare(b.name) }).forEach((mode) => { - menu.append(new MenuItem({ + templetes.push({ label: mode.name, click: (e) => this.handleModeOptionClick(index, mode.name)(e) - })) + }) }) - menu.popup(remote.getCurrentWindow()) + context.popup(templetes) } handleIndentTypeButtonClick (e) { diff --git a/browser/main/NoteList/index.js b/browser/main/NoteList/index.js index 3626130d..eeb16a5f 100644 --- a/browser/main/NoteList/index.js +++ b/browser/main/NoteList/index.js @@ -21,9 +21,10 @@ import AwsMobileAnalyticsConfig from 'browser/main/lib/AwsMobileAnalyticsConfig' import Markdown from '../../lib/markdown' import i18n from 'browser/lib/i18n' import { confirmDeleteNote } from 'browser/lib/confirmDeleteNote' +import context from 'browser/lib/context' const { remote } = require('electron') -const { Menu, MenuItem, dialog } = remote +const { dialog } = remote const WP_POST_PATH = '/wp/v2/posts' function sortByCreatedAt (a, b) { @@ -491,55 +492,51 @@ class NoteList extends React.Component { const updateLabel = i18n.__('Update Blog') const openBlogLabel = i18n.__('Open Blog') - const menu = new Menu() + const templates = [] if (location.pathname.match(/\/trash/)) { - menu.append(new MenuItem({ + templates.push({ label: restoreNote, click: this.restoreNote - })) - menu.append(new MenuItem({ + }, { label: deleteLabel, click: this.deleteNote - })) + }) } else { if (!location.pathname.match(/\/starred/)) { - menu.append(new MenuItem({ + templates.push({ label: pinLabel, click: this.pinToTop - })) + }) } - menu.append(new MenuItem({ + templates.push({ label: deleteLabel, click: this.deleteNote - })) - menu.append(new MenuItem({ + }, { label: cloneNote, click: this.cloneNote.bind(this) - })) - menu.append(new MenuItem({ + }, { label: copyNoteLink, click: this.copyNoteLink(note) - })) + }) if (note.type === 'MARKDOWN_NOTE') { if (note.blog && note.blog.blogLink && note.blog.blogId) { - menu.append(new MenuItem({ + templates.push({ label: updateLabel, click: this.publishMarkdown.bind(this) - })) - menu.append(new MenuItem({ + }, { label: openBlogLabel, click: () => this.openBlog.bind(this)(note) - })) + }) } else { - menu.append(new MenuItem({ + templates.push({ label: publishLabel, click: this.publishMarkdown.bind(this) - })) + }) } } } - menu.popup() + context.popup(templates) } updateSelectedNotes (updateFunc, cleanSelection = true) { diff --git a/browser/main/SideNav/StorageItem.js b/browser/main/SideNav/StorageItem.js index 8cb0e510..d72f0a8f 100644 --- a/browser/main/SideNav/StorageItem.js +++ b/browser/main/SideNav/StorageItem.js @@ -11,9 +11,10 @@ import StorageItemChild from 'browser/components/StorageItem' import _ from 'lodash' import { SortableElement } from 'react-sortable-hoc' import i18n from 'browser/lib/i18n' +import context from 'browser/lib/context' const { remote } = require('electron') -const { Menu, dialog } = remote +const { dialog } = remote const escapeStringRegexp = require('escape-string-regexp') const path = require('path') @@ -29,7 +30,7 @@ class StorageItem extends React.Component { } handleHeaderContextMenu (e) { - const menu = Menu.buildFromTemplate([ + context.popup([ { label: i18n.__('Add Folder'), click: (e) => this.handleAddFolderButtonClick(e) @@ -42,8 +43,6 @@ class StorageItem extends React.Component { click: (e) => this.handleUnlinkStorageClick(e) } ]) - - menu.popup() } handleUnlinkStorageClick (e) { @@ -106,7 +105,7 @@ class StorageItem extends React.Component { } handleFolderButtonContextMenu (e, folder) { - const menu = Menu.buildFromTemplate([ + context.popup([ { label: i18n.__('Rename Folder'), click: (e) => this.handleRenameFolderClick(e, folder) @@ -135,8 +134,6 @@ class StorageItem extends React.Component { click: (e) => this.handleFolderDeleteClick(e, folder) } ]) - - menu.popup() } handleRenameFolderClick (e, folder) { diff --git a/browser/main/SideNav/index.js b/browser/main/SideNav/index.js index 67adf700..c4fa417b 100644 --- a/browser/main/SideNav/index.js +++ b/browser/main/SideNav/index.js @@ -1,8 +1,6 @@ import PropTypes from 'prop-types' import React from 'react' import CSSModules from 'browser/lib/CSSModules' -const { remote } = require('electron') -const { Menu } = remote import dataApi from 'browser/main/lib/dataApi' import styles from './SideNav.styl' import { openModal } from 'browser/main/lib/modal' @@ -19,6 +17,7 @@ import ListButton from './ListButton' import TagButton from './TagButton' import {SortableContainer} from 'react-sortable-hoc' import i18n from 'browser/lib/i18n' +import context from 'browser/lib/context' class SideNav extends React.Component { // TODO: should not use electron stuff v0.7 @@ -254,10 +253,9 @@ class SideNav extends React.Component { handleFilterButtonContextMenu (event) { const { data } = this.props const trashedNotes = data.trashedSet.toJS().map((uniqueKey) => data.noteMap.get(uniqueKey)) - const menu = Menu.buildFromTemplate([ + context.popup([ { label: i18n.__('Empty Trash'), click: () => this.emptyTrash(trashedNotes) } ]) - menu.popup() } render () { diff --git a/browser/main/StatusBar/index.js b/browser/main/StatusBar/index.js index e5f5ae1a..8b48e3d3 100644 --- a/browser/main/StatusBar/index.js +++ b/browser/main/StatusBar/index.js @@ -4,10 +4,11 @@ import CSSModules from 'browser/lib/CSSModules' import styles from './StatusBar.styl' import ZoomManager from 'browser/main/lib/ZoomManager' import i18n from 'browser/lib/i18n' +import context from 'browser/lib/context' const electron = require('electron') const { remote, ipcRenderer } = electron -const { Menu, MenuItem, dialog } = remote +const { dialog } = remote const zoomOptions = [0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0] @@ -26,16 +27,16 @@ class StatusBar extends React.Component { } handleZoomButtonClick (e) { - const menu = new Menu() + const templates = [] zoomOptions.forEach((zoom) => { - menu.append(new MenuItem({ + templates.push({ label: Math.floor(zoom * 100) + '%', click: () => this.handleZoomMenuItemClick(zoom) - })) + }) }) - menu.popup(remote.getCurrentWindow()) + context.popup(templates) } handleZoomMenuItemClick (zoomFactor) { diff --git a/browser/main/modals/PreferencesModal/SnippetList.js b/browser/main/modals/PreferencesModal/SnippetList.js index e2ba7708..3e892f97 100644 --- a/browser/main/modals/PreferencesModal/SnippetList.js +++ b/browser/main/modals/PreferencesModal/SnippetList.js @@ -4,8 +4,7 @@ import CSSModules from 'browser/lib/CSSModules' import dataApi from 'browser/main/lib/dataApi' import i18n from 'browser/lib/i18n' import eventEmitter from 'browser/main/lib/eventEmitter' -const { remote } = require('electron') -const { Menu, MenuItem } = remote +import context from 'browser/lib/context' class SnippetList extends React.Component { constructor (props) { @@ -28,14 +27,10 @@ class SnippetList extends React.Component { } handleSnippetContextMenu (snippet) { - const menu = new Menu() - menu.append(new MenuItem({ + context.popup([{ label: i18n.__('Delete snippet'), - click: () => { - this.deleteSnippet(snippet) - } - })) - menu.popup() + click: () => this.deleteSnippet(snippet) + }]) } deleteSnippet (snippet) {