]> git.proxmox.com Git - proxmox-widget-toolkit.git/blob - button/Button.js
button/Button.js: do not sreach for selection model if selModel === null
[proxmox-widget-toolkit.git] / button / Button.js
1 /* Button features:
2 * - observe selection changes to enable/disable the button using enableFn()
3 * - pop up confirmation dialog using confirmMsg()
4 */
5 Ext.define('Proxmox.button.Button', {
6 extend: 'Ext.button.Button',
7 alias: 'widget.proxmoxButton',
8
9 // the selection model to observe
10 selModel: undefined,
11
12 // if 'false' handler will not be called (button disabled)
13 enableFn: function(record) { },
14
15 // function(record) or text
16 confirmMsg: false,
17
18 // take special care in confirm box (select no as default).
19 dangerous: false,
20
21 initComponent: function() {
22 /*jslint confusion: true */
23
24 var me = this;
25
26 if (me.handler) {
27
28 // Note: me.realHandler may be a string (see named scopes)
29 var realHandler = me.handler;
30
31 me.handler = function(button, event) {
32 var rec, msg;
33 if (me.selModel) {
34 rec = me.selModel.getSelection()[0];
35 if (!rec || (me.enableFn(rec) === false)) {
36 return;
37 }
38 }
39
40 if (me.confirmMsg) {
41 msg = me.confirmMsg;
42 if (Ext.isFunction(me.confirmMsg)) {
43 msg = me.confirmMsg(rec);
44 }
45 Ext.MessageBox.defaultButton = me.dangerous ? 2 : 1;
46 Ext.Msg.show({
47 title: gettext('Confirm'),
48 icon: me.dangerous ? Ext.Msg.WARNING : Ext.Msg.QUESTION,
49 msg: msg,
50 buttons: Ext.Msg.YESNO,
51 callback: function(btn) {
52 if (btn !== 'yes') {
53 return;
54 }
55 Ext.callback(realHandler, me.scope, [button, event, rec], 0, me);
56 }
57 });
58 } else {
59 Ext.callback(realHandler, me.scope, [button, event, rec], 0, me);
60 }
61 };
62 }
63
64 me.callParent();
65
66 if (!me.selModel && me.selModel !== null) {
67 var grid = me.up('grid');
68 if (grid && grid.selModel) {
69 me.selModel = grid.selModel;
70 }
71 }
72
73 if (me.waitMsgTarget === true) {
74 var grid = me.up('grid');
75 if (grid) {
76 me.waitMsgTarget = grid;
77 } else {
78 throw "unable to find waitMsgTarget";
79 }
80 }
81
82 if (me.selModel) {
83
84 me.mon(me.selModel, "selectionchange", function() {
85 var rec = me.selModel.getSelection()[0];
86 if (!rec || (me.enableFn(rec) === false)) {
87 me.setDisabled(true);
88 } else {
89 me.setDisabled(false);
90 }
91 });
92 }
93 }
94 });
95
96
97 Ext.define('Proxmox.button.StdRemoveButton', {
98 extend: 'Proxmox.button.Button',
99 alias: 'widget.proxmoxStdRemoveButton',
100
101 text: gettext('Remove'),
102
103 disabled: true,
104
105 baseurl: undefined,
106
107 getUrl: function(rec) {
108 var me = this;
109
110 return me.baseurl + '/' + rec.getId();
111 },
112
113 // also works with names scopes
114 callback: function(options, success, response) {},
115
116 getRecordName: function(rec) { return rec.getId() },
117
118 confirmMsg: function (rec) {
119 var me = this;
120
121 var name = me.getRecordName(rec);
122 return Ext.String.format(
123 gettext('Are you sure you want to remove entry {0}'),
124 "'" + name + "'");
125 },
126
127 handler: function(btn, event, rec) {
128 var me = this;
129
130 Proxmox.Utils.API2Request({
131 url: me.getUrl(rec),
132 method: 'DELETE',
133 waitMsgTarget: me.waitMsgTarget,
134 callback: function(options, success, response) {
135 Ext.callback(me.callback, me.scope, [options, success, response], 0, me);
136 },
137 failure: function (response, opts) {
138 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
139 }
140 });
141 }
142 });