]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/window/Wizard.js
wizard: use fbar convenience helper for footer
[pve-manager.git] / www / manager6 / window / Wizard.js
CommitLineData
ee93ce96
DM
1Ext.define('PVE.window.Wizard', {
2 extend: 'Ext.window.Window',
f677074b
DM
3
4 activeTitle: '', // used for automated testing
ee93ce96
DM
5
6 getValues: function(dirtyOnly) {
7 var me = this;
8
9 var values = {};
10
11 var form = me.down('form').getForm();
12
13 form.getFields().each(function(field) {
14 if (!field.up('inputpanel') && (!dirtyOnly || field.isDirty())) {
e7ade592 15 Proxmox.Utils.assemble_field_data(values, field.getSubmitData());
ee93ce96
DM
16 }
17 });
18
19 Ext.Array.each(me.query('inputpanel'), function(panel) {
e7ade592 20 Proxmox.Utils.assemble_field_data(values, panel.getValues(dirtyOnly));
ee93ce96
DM
21 });
22
23 return values;
24 },
25
26 initComponent: function() {
27 var me = this;
28
29 var tabs = me.items || [];
30 delete me.items;
31
32 /*
33 * Items may have the following functions:
34 * validator(): per tab custom validation
35 * onSubmit(): submit handler
36 * onGetValues(): overwrite getValues results
37 */
38
39 Ext.Array.each(tabs, function(tab) {
40 tab.disabled = true;
41 });
42 tabs[0].disabled = false;
43
44 var check_card = function(card) {
45 var valid = true;
46 var fields = card.query('field, fieldcontainer');
47 if (card.isXType('fieldcontainer')) {
48 fields.unshift(card);
49 }
50 Ext.Array.each(fields, function(field) {
51 // Note: not all fielcontainer have isValid()
52 if (Ext.isFunction(field.isValid) && !field.isValid()) {
53 valid = false;
54 }
55 });
56
57 if (Ext.isFunction(card.validator)) {
58 return card.validator();
59 }
60
61 return valid;
62 };
63
ee93ce96
DM
64 var disable_at = function(card) {
65 var tp = me.down('#wizcontent');
66 var idx = tp.items.indexOf(card);
67 for(;idx < tp.items.getCount();idx++) {
68 var nc = tp.items.getAt(idx);
69 if (nc) {
70 nc.disable();
71 }
72 }
73 };
74
75 var tabchange = function(tp, newcard, oldcard) {
76 if (newcard.onSubmit) {
77 me.down('#next').setVisible(false);
78 me.down('#submit').setVisible(true);
79 } else {
80 me.down('#next').setVisible(true);
81 me.down('#submit').setVisible(false);
82 }
83 var valid = check_card(newcard);
84 me.down('#next').setDisabled(!valid);
85 me.down('#submit').setDisabled(!valid);
86 me.down('#back').setDisabled(tp.items.indexOf(newcard) == 0);
87
ee93ce96
DM
88 var next = tp.items.indexOf(newcard) + 1;
89 var ntab = tp.items.getAt(next);
90 if (valid && ntab && !newcard.onSubmit) {
91 ntab.enable();
92 }
93 };
94
95 if (me.subject && !me.title) {
e7ade592 96 me.title = Proxmox.Utils.dialog_title(me.subject, true, false);
ee93ce96
DM
97 }
98
60575f19 99 Ext.apply(me, {
8c054099
TL
100 width: 700,
101 height: 510,
ee93ce96
DM
102 modal: true,
103 border: false,
104 draggable: true,
105 closable: true,
106 resizable: false,
107 layout: 'border',
108 items: [
ee93ce96
DM
109 {
110 xtype: 'form',
111 region: 'center',
112 layout: 'fit',
113 border: false,
114 margins: '5 5 0 5',
115 fieldDefaults: {
116 labelWidth: 100,
117 anchor: '100%'
118 },
119 items: [{
120 itemId: 'wizcontent',
121 xtype: 'tabpanel',
122 activeItem: 0,
123 bodyPadding: 10,
124 listeners: {
125 afterrender: function(tp) {
126 var atab = this.getActiveTab();
127 tabchange(tp, atab);
128 },
129 tabchange: function(tp, newcard, oldcard) {
ee93ce96
DM
130 tabchange(tp, newcard, oldcard);
131 }
132 },
133 items: tabs
134 }]
18f4718f
TL
135 }
136 ],
137 fbar: [
138 {
139 xtype: 'proxmoxHelpButton',
140 itemId: 'help'
141 },
142 '->',
143 {
144 text: gettext('Back'),
145 disabled: true,
146 itemId: 'back',
147 minWidth: 60,
148 handler: function() {
149 var tp = me.down('#wizcontent');
150 var atab = tp.getActiveTab();
151 var prev = tp.items.indexOf(atab) - 1;
152 if (prev < 0) {
153 return;
154 }
155 var ntab = tp.items.getAt(prev);
156 if (ntab) {
157 tp.setActiveTab(ntab);
158 }
159 }
160 },
161 {
162 text: gettext('Next'),
163 disabled: true,
164 itemId: 'next',
165 minWidth: 60,
166 handler: function() {
167
168 var form = me.down('form').getForm();
169
170 var tp = me.down('#wizcontent');
171 var atab = tp.getActiveTab();
172 if (!check_card(atab)) {
173 return;
174 }
175
176 var next = tp.items.indexOf(atab) + 1;
177 var ntab = tp.items.getAt(next);
178 if (ntab) {
179 ntab.enable();
180 tp.setActiveTab(ntab);
181 }
182
183 }
ee93ce96 184 },
18f4718f
TL
185 {
186 text: gettext('Finish'),
187 minWidth: 60,
188 hidden: true,
189 itemId: 'submit',
190 handler: function() {
191 var tp = me.down('#wizcontent');
192 var atab = tp.getActiveTab();
193 atab.onSubmit();
194 }
195 }
ee93ce96
DM
196 ]
197 });
198 me.callParent();
ee93ce96
DM
199
200 Ext.Array.each(me.query('field'), function(field) {
a1304e1e 201 var validcheck = function() {
ee93ce96
DM
202 var tp = me.down('#wizcontent');
203 var atab = tp.getActiveTab();
204 var valid = check_card(atab);
205 me.down('#next').setDisabled(!valid);
206 me.down('#submit').setDisabled(!valid);
207 var next = tp.items.indexOf(atab) + 1;
208 var ntab = tp.items.getAt(next);
209 if (!valid) {
210 disable_at(ntab);
211 } else if (ntab && !atab.onSubmit) {
212 ntab.enable();
213 }
a1304e1e
DC
214 };
215 field.on('change', validcheck);
216 field.on('validitychange', validcheck);
ee93ce96
DM
217 });
218 }
219});