]>
Commit | Line | Data |
---|---|---|
48295db4 DM |
1 | Ext.define('PVE.MenuButton', { |
2 | extend: 'Ext.Button', | |
3 | alias: 'widget.pveMenuButton', | |
4 | ||
5 | menuPanel: undefined, | |
6 | ||
7 | createMenuPanel: function() { | |
8 | var me = this; | |
9 | ||
10 | var data = me.getMenuItems() || []; | |
11 | ||
12 | var addHide = function (fn) { | |
13 | return function () { | |
14 | if (me.menuPanel) { | |
15 | me.menuPanel.hide(); | |
16 | Ext.Viewport.remove(me.menuPanel); | |
17 | me.menuPanel.destroy(); | |
18 | me.menuPanel = undefined; | |
19 | } | |
20 | return fn.apply(this, arguments); | |
21 | }; | |
22 | }; | |
23 | ||
24 | var items = []; | |
c5e91d8e TL |
25 | |
26 | if (me.getPveStdMenu()) { | |
27 | items.push({ | |
28 | xtype: 'button', | |
29 | ui: 'plain', | |
30 | text: gettext('Datacenter'), | |
31 | handler: addHide(function() { | |
32 | PVE.Workspace.gotoPage(''); | |
33 | }) | |
34 | }); | |
35 | } | |
36 | ||
48295db4 DM |
37 | data.forEach(function(el) { |
38 | items.push(Ext.apply(el, { | |
39 | xtype: 'button', | |
40 | ui: 'plain', | |
41 | handler: addHide(el.handler) | |
42 | })); | |
43 | }); | |
44 | ||
45 | if (me.getPveStdMenu()) { | |
46 | items.push({ | |
47 | xtype: 'button', | |
48 | ui: 'plain', | |
49 | text: gettext('Logout'), | |
50 | handler: addHide(function() { | |
51 | PVE.Workspace.showLogin(); | |
52 | }) | |
53 | }); | |
54 | } | |
55 | ||
56 | me.menuPanel = Ext.create('Ext.Panel', { | |
57 | modal: true, | |
58 | hideOnMaskTap: true, | |
59 | visible: false, | |
60 | minWidth: 200, | |
61 | layout: { | |
62 | type:'vbox', | |
63 | align: 'stretch' | |
64 | }, | |
65 | items: items | |
66 | }); | |
67 | ||
68 | PVE.Workspace.history.on('change', function() { | |
69 | if (me.menuPanel) { | |
70 | Ext.Viewport.remove(me.menuPanel); | |
71 | me.menuPanel.destroy(); | |
72 | me.menuPanel = undefined; | |
73 | } | |
74 | }); | |
75 | }, | |
76 | ||
77 | config: { | |
78 | menuItems: undefined, | |
79 | pveStdMenu: false, // add LOGOUT | |
80 | handler: function() { | |
81 | var me = this; | |
82 | ||
83 | if (!me.menuPanel) { | |
84 | me.createMenuPanel(); | |
85 | } | |
86 | me.menuPanel.showBy(me, 'tr-bc?'); | |
87 | } | |
88 | }, | |
89 | ||
90 | initialize: function() { | |
91 | var me = this; | |
92 | ||
93 | this.callParent(); | |
94 | ||
95 | if (me.getPveStdMenu()) { | |
96 | me.setIconCls('more'); | |
97 | } | |
98 | ||
99 | } | |
c5e91d8e | 100 | }); |