UNPKG

1.58 kBJavaScriptView Raw
1const isRenderer = process.type === 'renderer'
2const electron = require('electron')
3const Menu = isRenderer ? electron.remote.Menu : electron.Menu
4const MenuItem = isRenderer ? electron.remote.MenuItem : electron.MenuItem
5
6module.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}