|
37 | 37 | */ |
38 | 38 | createForm: function(args) { |
39 | 39 | var $formContainer = $('<div>').addClass('form-container'); |
40 | | - var $message = $('<span>').addClass('message').appendTo($formContainer).html( |
41 | | - _l(args.form.desc) |
42 | | - ); |
43 | 40 | var $form = $('<form>').appendTo($formContainer) |
44 | | - .submit(function() { |
45 | | - $(this).closest('.ui-dialog').find('button.ok').click(); |
46 | | - |
47 | | - return false; |
48 | | - }); |
| 41 | + .submit(function() { |
| 42 | + $(this).closest('.ui-dialog').find('button.ok').click(); |
49 | 43 |
|
| 44 | + return false; |
| 45 | + }); |
50 | 46 | var createLabel = _l(args.form.createLabel); |
51 | | - var $submit = $('<input>') |
| 47 | + |
| 48 | + // Description text |
| 49 | + $('<span>').addClass('message').prependTo($formContainer).html( |
| 50 | + _l(args.form.desc) |
| 51 | + ); |
| 52 | + |
| 53 | + // Submit button |
| 54 | + $('<input>') |
52 | 55 | .attr({ |
53 | 56 | type: 'submit' |
54 | 57 | }) |
|
58 | 61 | // Render fields and events |
59 | 62 | var fields = $.map(args.form.fields, function(value, key) { |
60 | 63 | return key; |
61 | | - }) |
| 64 | + }); |
62 | 65 |
|
63 | 66 | var ret = function() { |
64 | 67 | $('.overlay').remove(); |
|
127 | 130 | var field = args.form.fields[key]; |
128 | 131 |
|
129 | 132 | var $formItem = $('<div>') |
130 | | - .addClass('form-item') |
131 | | - .attr({ |
132 | | - rel: key |
133 | | - }); |
| 133 | + .addClass('form-item') |
| 134 | + .attr({ |
| 135 | + rel: key |
| 136 | + }); |
134 | 137 |
|
135 | 138 | if (field.isHidden != null) { |
136 | 139 | if (typeof(field.isHidden) == 'boolean' && field.isHidden == true) |
|
143 | 146 |
|
144 | 147 | //Handling Escape KeyPress events |
145 | 148 | /* $('.ui-dialog').keypress(function(event) { |
146 | | - if ( event.which == 27 ) { |
147 | | - event.stopPropagation(); |
148 | | - } |
149 | | - }); |
150 | | -
|
151 | | - $(document).ready(function(){ |
152 | | - $('.ui-dialog').keydown(function(event) { |
153 | | - if(event.keyCode == 27) |
154 | | - { |
155 | | - alert("you pressed the Escape key"); |
156 | | - event.preventdefault(); |
157 | | - } |
158 | | - }) |
159 | | - }); |
160 | | -
|
161 | | - $(':ui-dialog').dialog({ |
162 | | - closeOnEscape: false |
163 | | - }); */ |
| 149 | + if ( event.which == 27 ) { |
| 150 | + event.stopPropagation(); |
| 151 | + } |
| 152 | + }); |
| 153 | +
|
| 154 | + $(document).ready(function(){ |
| 155 | + $('.ui-dialog').keydown(function(event) { |
| 156 | + if(event.keyCode == 27) |
| 157 | + { |
| 158 | + alert("you pressed the Escape key"); |
| 159 | + event.preventdefault(); |
| 160 | + } |
| 161 | + }) |
| 162 | + }); |
| 163 | +
|
| 164 | + $(':ui-dialog').dialog({ |
| 165 | + closeOnEscape: false |
| 166 | + }); */ |
164 | 167 | // Label field |
165 | 168 |
|
166 | 169 | var $name = $('<div>').addClass('name') |
167 | | - .appendTo($formItem) |
168 | | - .append( |
169 | | - $('<label>').html(_l(field.label) + ':') |
170 | | - ); |
| 170 | + .appendTo($formItem) |
| 171 | + .append( |
| 172 | + $('<label>').html(_l(field.label) + ':') |
| 173 | + ); |
171 | 174 |
|
172 | 175 | // red asterisk |
173 | 176 | var $astersikSpan = $('<span>').addClass('field-required').html('*'); |
|
186 | 189 |
|
187 | 190 | // Input area |
188 | 191 | var $value = $('<div>').addClass('value') |
189 | | - .appendTo($formItem); |
| 192 | + .appendTo($formItem); |
190 | 193 | var $input, $dependsOn, selectFn, selectArgs; |
191 | 194 | var dependsOn = field.dependsOn; |
192 | 195 |
|
193 | 196 | // Depends on fields |
194 | 197 | if (field.dependsOn) { |
195 | 198 | $formItem.attr('depends-on', dependsOn); |
196 | 199 | $dependsOn = $form.find('input, select').filter(function() { |
197 | | - return $(this).attr('name') === dependsOn; |
| 200 | + return $.isArray(dependsOn) ? |
| 201 | + $.inArray($(this).attr('name'), dependsOn) > -1 : |
| 202 | + $(this).attr('name') === dependsOn; |
198 | 203 | }); |
199 | 204 |
|
200 | 205 | if ($dependsOn.is('[type=checkbox]')) { |
|
214 | 219 | } |
215 | 220 | }); |
216 | 221 | } else if (($target.is(':unchecked') && !isReverse) || |
217 | | - ($target.is(':checked') && isReverse)) { |
| 222 | + ($target.is(':checked') && isReverse)) { |
218 | 223 | $dependent.hide(); |
219 | 224 | } |
220 | 225 |
|
|
253 | 258 | description = this.description; |
254 | 259 |
|
255 | 260 | var $option = $('<option>') |
256 | | - .appendTo($input) |
257 | | - .val(_s(id)) |
258 | | - .html(_s(description)); |
| 261 | + .appendTo($input) |
| 262 | + .val(_s(id)) |
| 263 | + .html(_s(description)); |
259 | 264 | }); |
260 | 265 |
|
261 | 266 | if (field.defaultValue) { |
|
290 | 295 |
|
291 | 296 | if (dependsOn) { |
292 | 297 | $dependsOn = $input.closest('form').find('input, select').filter(function() { |
293 | | - return $(this).attr('name') === dependsOn; |
| 298 | + return $.isArray(dependsOn) ? |
| 299 | + $.inArray($(this).attr('name'), dependsOn) > -1 : |
| 300 | + $(this).attr('name') === dependsOn; |
294 | 301 | }); |
295 | 302 |
|
296 | | - $dependsOn.bind('change', function(event) { |
297 | | - var $target = $(this); |
| 303 | + // Reload selects linked to in dependsOn |
| 304 | + $dependsOn.each(function() { |
| 305 | + var $targetDependsOn = $(this); |
298 | 306 |
|
299 | | - if (!$dependsOn.is('select')) return true; |
| 307 | + $targetDependsOn.bind('change', function(event) { |
| 308 | + var formData = cloudStack.serializeForm($form); |
| 309 | + var dependsOnLoaded; |
300 | 310 |
|
301 | | - var dependsOnArgs = {}; |
| 311 | + // Make sure all data is loaded to pass to select fn |
| 312 | + dependsOnLoaded = $.inArray( |
| 313 | + true, $dependsOn.map(function(index, item) { return $(item).find('option').size() ? true : false; }) |
| 314 | + ) > -1; |
302 | 315 |
|
303 | | - $input.find('option').remove(); |
| 316 | + if (!dependsOnLoaded) { |
| 317 | + return false; |
| 318 | + } |
304 | 319 |
|
305 | | - if (!$target.children().size()) return true; |
| 320 | + var $target = $(this); |
306 | 321 |
|
307 | | - dependsOnArgs[dependsOn] = $target.val(); |
| 322 | + if (!$target.is('select')) { |
| 323 | + return true; |
| 324 | + } |
308 | 325 |
|
309 | | - selectFn($.extend(selectArgs, dependsOnArgs)); |
| 326 | + $input.find('option').remove(); |
310 | 327 |
|
311 | | - return true; |
| 328 | + // Re-execute select |
| 329 | + selectFn($.extend(selectArgs, formData, { |
| 330 | + data: formData |
| 331 | + })); |
| 332 | + return true; |
| 333 | + }); |
312 | 334 | }); |
313 | 335 |
|
314 | 336 | if (!$dependsOn.is('select')) { |
|
325 | 347 | $.each(field.multiArray, function(itemKey, itemValue) { |
326 | 348 | $input.append( |
327 | 349 | $('<div>').addClass('item') |
328 | | - .append( |
329 | | - $.merge( |
330 | | - $('<div>').addClass('name').html(_l(itemValue.label)), |
331 | | - $('<div>').addClass('value').append( |
332 | | - $('<input>').attr({ |
333 | | - name: itemKey, |
334 | | - type: 'checkbox' |
335 | | - }).appendTo($value) |
| 350 | + .append( |
| 351 | + $.merge( |
| 352 | + $('<div>').addClass('name').html(_l(itemValue.label)), |
| 353 | + $('<div>').addClass('value').append( |
| 354 | + $('<input>').attr({ |
| 355 | + name: itemKey, |
| 356 | + type: 'checkbox' |
| 357 | + }).appendTo($value) |
| 358 | + ) |
336 | 359 | ) |
337 | 360 | ) |
338 | | - ) |
339 | 361 | ); |
340 | 362 | }); |
341 | 363 |
|
|
479 | 501 |
|
480 | 502 |
|
481 | 503 | /* $input.blur(function() { |
482 | | - console.log('tooltip remove->' + $input.attr('name')); |
483 | | - });*/ |
| 504 | + console.log('tooltip remove->' + $input.attr('name')); |
| 505 | + });*/ |
484 | 506 | }); |
485 | 507 |
|
486 | 508 |
|
|
0 commit comments