1 | const isRenderer = process.type === 'renderer'
|
2 | const electron = require('electron')
|
3 | const Menu = isRenderer ? electron.remote.Menu : electron.Menu
|
4 | const MenuItem = isRenderer ? electron.remote.MenuItem : electron.MenuItem
|
5 |
|
6 | module.exports = function (template, model) {
|
7 | var _menu = new Menu()
|
8 | var _model = model
|
9 |
|
10 | var m = {
|
11 | getMenu: function () {
|
12 | return _menu
|
13 | },
|
14 |
|
15 | getModel: function () {
|
16 | return _model
|
17 | },
|
18 |
|
19 | update: function (model) {
|
20 | _model = model
|
21 | updateMenuItems(m.getModel(), template, m.getMenu())
|
22 | }
|
23 | }
|
24 |
|
25 | function updateMenuItems (model, tplArr, p) {
|
26 | tplArr.forEach(function (tplItem) {
|
27 | if (!tplItem._item) {
|
28 | tplItem._item = new MenuItem({
|
29 | type: tplItem.type,
|
30 | label: tplItem.label,
|
31 | accelerator: tplItem.accelerator,
|
32 | role: tplItem.role,
|
33 | selector: tplItem.selector,
|
34 | click: function (item, win) {
|
35 | tplItem.click(m.getModel(), item, win)
|
36 | },
|
37 | submenu: Array.isArray(tplItem.submenu) ? new Menu() : null
|
38 | })
|
39 |
|
40 | p.append(tplItem._item)
|
41 | }
|
42 |
|
43 | if (typeof tplItem.visible === 'function') {
|
44 | tplItem._item.visible = tplItem.visible(model, tplItem._item)
|
45 | }
|
46 |
|
47 | if (typeof tplItem.enabled === 'function') {
|
48 | tplItem._item.enabled = tplItem.enabled(model, tplItem._item)
|
49 | }
|
50 |
|
51 | if (tplItem._item.submenu) {
|
52 | updateMenuItems(model, tplItem.submenu, tplItem._item.submenu)
|
53 | }
|
54 | })
|
55 |
|
56 | return p
|
57 | }
|
58 |
|
59 | updateMenuItems(m.getModel(), template, m.getMenu())
|
60 |
|
61 | return m
|
62 | }
|