354 $(document).on('click', 'button[type="submit"], button.submit', function() { |
354 $(document).on('click', 'button[type="submit"], button.submit', function() { |
355 var button = $(this); |
355 var button = $(this); |
356 $(button.get(0).form).data('ams-submit-button', button); |
356 $(button.get(0).form).data('ams-submit-button', button); |
357 }); |
357 }); |
358 |
358 |
359 // Cancel clicks on readonly checkbox |
359 // Initialize main event handlers |
360 $(document).on('click', 'input[type="checkbox"][readonly]', function() { |
360 ams.initHandlers(document); |
361 return false; |
|
362 }); |
|
363 |
|
364 // Initialize custom click handlers |
|
365 $(document).on('click', '[data-ams-click-handler]', function(event) { |
|
366 var source = $(this); |
|
367 var handlers = source.data('ams-disabled-handlers'); |
|
368 if ((handlers === true) || (handlers === 'click') || (handlers === 'all')) { |
|
369 return; |
|
370 } |
|
371 var data = source.data(); |
|
372 if (data.amsClickHandler) { |
|
373 if ((data.amsStopPropagation === true) || (data.amsClickStopPropagation === true)) { |
|
374 event.stopPropagation(); |
|
375 } |
|
376 if (data.amsClickKeepDefault !== true) { |
|
377 event.preventDefault(); |
|
378 } |
|
379 var clickHandlers = data.amsClickHandler.split(/\s+/); |
|
380 for (var index=0; index < clickHandlers.length; index++) { |
|
381 var callback = ams.getFunctionByName(clickHandlers[index]); |
|
382 if (callback !== undefined) { |
|
383 callback.call(source, event, data.amsClickHandlerOptions); |
|
384 } |
|
385 } |
|
386 } |
|
387 }); |
|
388 |
|
389 // Initialize custom change handlers |
|
390 $(document).on('change', '[data-ams-change-handler]', function(event) { |
|
391 var source = $(this); |
|
392 // Disable change handlers for readonly inputs |
|
393 // These change handlers are activated by IE!!! |
|
394 if (source.prop('readonly')) { |
|
395 return; |
|
396 } |
|
397 var handlers = source.data('ams-disabled-handlers'); |
|
398 if ((handlers === true) || (handlers === 'change') || (handlers === 'all')) { |
|
399 return; |
|
400 } |
|
401 var data = source.data(); |
|
402 if (data.amsChangeHandler) { |
|
403 if ((data.amsStopPropagation === true) || (data.amsChangeStopPropagation === true)) { |
|
404 event.stopPropagation(); |
|
405 } |
|
406 if (data.amsChangeKeepDefault !== true) { |
|
407 event.preventDefault(); |
|
408 } |
|
409 var changeHandlers = data.amsChangeHandler.split(/\s+/); |
|
410 for (var index=0; index < changeHandlers.length; index++) { |
|
411 var callback = ams.getFunctionByName(changeHandlers[index]); |
|
412 if (callback !== undefined) { |
|
413 callback.call(source, event, data.amsChangeHandlerOptions); |
|
414 } |
|
415 } |
|
416 } |
|
417 }); |
|
418 |
361 |
419 // Submit form when CTRL+Enter key is pressed in textarea |
362 // Submit form when CTRL+Enter key is pressed in textarea |
420 $(document).on('keydown', 'textarea', function(e) { |
363 $(document).on('keydown', 'textarea', function(e) { |
421 if ((e.keyCode === 10 || e.keyCode === 13) && (e.ctrlKey || e.metaKey)) { |
364 if ((e.keyCode === 10 || e.keyCode === 13) && (e.ctrlKey || e.metaKey)) { |
422 $(this).closest('form').submit(); |
365 $(this).closest('form').submit(); |
423 } |
366 } |
424 }); |
|
425 |
|
426 // Notify reset to update Select2 widgets |
|
427 $(document).on('reset', 'form', function(e) { |
|
428 var form = $(this); |
|
429 setTimeout(function() { |
|
430 $('.alert-danger, SPAN.state-error', form).not('.persistent').remove(); |
|
431 $('LABEL.state-error', form).removeClass('state-error'); |
|
432 $('INPUT.select2[type="hidden"]', form).each(function() { |
|
433 var input = $(this); |
|
434 var select = input.data('select2'); |
|
435 var value = input.data('ams-select2-input-value'); |
|
436 if (value) { |
|
437 input.select2('val', value.split(select.opts.separator)); |
|
438 } |
|
439 }); |
|
440 form.find('.select2').trigger('change'); |
|
441 $('[data-ams-reset-callback]', form).each(function() { |
|
442 var element = $(this); |
|
443 var data = element.data(); |
|
444 var callback = ams.getFunctionByName(data.amsResetCallback); |
|
445 if (callback !== undefined) { |
|
446 callback.call(form, element, data.amsResetCallbackOptions); |
|
447 } |
|
448 }); |
|
449 }, 10); |
|
450 ams.form && ams.form.setFocus(form); |
|
451 }); |
|
452 |
|
453 // Initialize custom reset handlers |
|
454 $(document).on('reset', '[data-ams-reset-handler]', function(e) { |
|
455 var form = $(this); |
|
456 var data = form.data(); |
|
457 if (data.amsResetHandler) { |
|
458 if (data.amsResetKeepDefault !== true) { |
|
459 e.preventDefault(); |
|
460 } |
|
461 var callback = ams.getFunctionByName(data.amsResetHandler); |
|
462 if (callback !== undefined) { |
|
463 callback.call(form, data.amsResetHandlerOptions); |
|
464 } |
|
465 } |
|
466 }); |
|
467 |
|
468 // Initialize custom event on click |
|
469 $(document).on('click', '[data-ams-click-event]', function(e) { |
|
470 var source = $(this); |
|
471 $(e.target).trigger(source.data('ams-click-event'), source.data('ams-click-event-options')); |
|
472 }); |
367 }); |
473 |
368 |
474 // Handle update on file upload placeholder |
369 // Handle update on file upload placeholder |
475 $(document).on('change', 'input[type="file"]', function(e) { |
370 $(document).on('change', 'input[type="file"]', function(e) { |
476 e.preventDefault(); |
371 e.preventDefault(); |