]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/button/Split.js
ui: ScheduleSimulator: split date and time into two columns
[pve-manager.git] / www / manager6 / button / Split.js
1 /* Button features:
2 * - observe selection changes to enable/disable the button using enableFn()
3 * - pop up confirmation dialog using confirmMsg()
4 *
5 * does this for the button and every menu item
6 */
7 Ext.define('PVE.button.Split', {
8 extend: 'Ext.button.Split',
9 alias: 'widget.pveSplitButton',
10
11 // the selection model to observe
12 selModel: undefined,
13
14 // if 'false' handler will not be called (button disabled)
15 enableFn: function(record) {
16 // do nothing
17 },
18
19 // function(record) or text
20 confirmMsg: false,
21
22 // take special care in confirm box (select no as default).
23 dangerous: false,
24
25 handlerWrapper: function(button, event) {
26 var me = this;
27 var rec, msg;
28 if (me.selModel) {
29 rec = me.selModel.getSelection()[0];
30 if (!rec || me.enableFn(rec) === false) {
31 return;
32 }
33 }
34
35 if (me.confirmMsg) {
36 msg = me.confirmMsg;
37 // confirMsg can be boolean or function
38 if (Ext.isFunction(me.confirmMsg)) {
39 msg = me.confirmMsg(rec);
40 }
41 Ext.MessageBox.defaultButton = me.dangerous ? 2 : 1;
42 Ext.Msg.show({
43 title: gettext('Confirm'),
44 icon: me.dangerous ? Ext.Msg.WARNING : Ext.Msg.QUESTION,
45 msg: msg,
46 buttons: Ext.Msg.YESNO,
47 callback: function(btn) {
48 if (btn !== 'yes') {
49 return;
50 }
51 me.realHandler(button, event, rec);
52 },
53 });
54 } else {
55 me.realHandler(button, event, rec);
56 }
57 },
58
59 initComponent: function() {
60 var me = this;
61
62 if (me.handler) {
63 me.realHandler = me.handler;
64 me.handler = me.handlerWrapper;
65 }
66
67 if (me.menu && me.menu.items) {
68 me.menu.items.forEach(function(item) {
69 if (item.handler) {
70 item.realHandler = item.handler;
71 item.handler = me.handlerWrapper;
72 }
73
74 if (item.selModel) {
75 me.mon(item.selModel, "selectionchange", function() {
76 var rec = item.selModel.getSelection()[0];
77 if (!rec || item.enableFn(rec) === false) {
78 item.setDisabled(true);
79 } else {
80 item.setDisabled(false);
81 }
82 });
83 }
84 });
85 }
86
87 me.callParent();
88
89 if (me.selModel) {
90 me.mon(me.selModel, "selectionchange", function() {
91 var rec = me.selModel.getSelection()[0];
92 if (!rec || me.enableFn(rec) === false) {
93 me.setDisabled(true);
94 } else {
95 me.setDisabled(false);
96 }
97 });
98 }
99 },
100 });