src/pyams_skin/resources/js/myams-core.js
changeset 536 d1742b03d5a7
parent 486 48b7cea0d903
child 555 7d7ccf92d6af
equal deleted inserted replaced
535:618ff34bcd7c 536:d1742b03d5a7
   461 				callback.call(window, false, options);
   461 				callback.call(window, false, options);
   462 			}
   462 			}
   463 		}
   463 		}
   464 	};
   464 	};
   465 
   465 
       
   466 	/**
       
   467 	 * Initialize main events handlers
       
   468 	 */
       
   469 	MyAMS.initHandlers = function(element) {
       
   470 
       
   471 		// Initialize custom click handlers
       
   472 		$(element).on('click', '[data-ams-click-handler]', function(event) {
       
   473 			var source = $(this);
       
   474 			var handlers = source.data('ams-disabled-handlers');
       
   475 			if ((handlers === true) || (handlers === 'click') || (handlers === 'all')) {
       
   476 				return;
       
   477 			}
       
   478 			var data = source.data();
       
   479 			if (data.amsClickHandler) {
       
   480 				if ((data.amsStopPropagation === true) || (data.amsClickStopPropagation === true)) {
       
   481 					event.stopPropagation();
       
   482 				}
       
   483 				if (data.amsClickKeepDefault !== true) {
       
   484 					event.preventDefault();
       
   485 				}
       
   486 				var clickHandlers = data.amsClickHandler.split(/\s+/);
       
   487 				for (var index=0; index < clickHandlers.length; index++) {
       
   488 					var callback = ams.getFunctionByName(clickHandlers[index]);
       
   489 					if (callback !== undefined) {
       
   490 						callback.call(source, event, data.amsClickHandlerOptions);
       
   491 					}
       
   492 				}
       
   493 			}
       
   494 		});
       
   495 
       
   496 		// Initialize custom change handlers
       
   497 		$(element).on('change', '[data-ams-change-handler]', function(event) {
       
   498 			var source = $(this);
       
   499 			// Disable change handlers for readonly inputs
       
   500 			// These change handlers are activated by IE!!!
       
   501 			if (source.prop('readonly')) {
       
   502 				return;
       
   503 			}
       
   504 			var handlers = source.data('ams-disabled-handlers');
       
   505 			if ((handlers === true) || (handlers === 'change') || (handlers === 'all')) {
       
   506 				return;
       
   507 			}
       
   508 			var data = source.data();
       
   509 			if (data.amsChangeHandler) {
       
   510 				if ((data.amsStopPropagation === true) || (data.amsChangeStopPropagation === true)) {
       
   511 					event.stopPropagation();
       
   512 				}
       
   513 				if (data.amsChangeKeepDefault !== true) {
       
   514 					event.preventDefault();
       
   515 				}
       
   516 				var changeHandlers = data.amsChangeHandler.split(/\s+/);
       
   517 				for (var index=0; index < changeHandlers.length; index++) {
       
   518 					var callback = ams.getFunctionByName(changeHandlers[index]);
       
   519 					if (callback !== undefined) {
       
   520 						callback.call(source, event, data.amsChangeHandlerOptions);
       
   521 					}
       
   522 				}
       
   523 			}
       
   524 		});
       
   525 
       
   526 		// Notify reset to update Select2 widgets
       
   527 		$(element).on('reset', 'form', function(e) {
       
   528 			var form = $(this);
       
   529 			setTimeout(function() {
       
   530 				$('.alert-danger, SPAN.state-error', form).not('.persistent').remove();
       
   531 				$('LABEL.state-error', form).removeClass('state-error');
       
   532 				$('INPUT.select2[type="hidden"]', form).each(function() {
       
   533 					var input = $(this);
       
   534 					var select = input.data('select2');
       
   535 					var value = input.data('ams-select2-input-value');
       
   536 					if (value) {
       
   537 						input.select2('val', value.split(select.opts.separator));
       
   538 					}
       
   539 				});
       
   540 				form.find('.select2').trigger('change');
       
   541 				$('[data-ams-reset-callback]', form).each(function() {
       
   542 					var element = $(this);
       
   543 					var data = element.data();
       
   544 					var callback = ams.getFunctionByName(data.amsResetCallback);
       
   545 					if (callback !== undefined) {
       
   546 						callback.call(form, element, data.amsResetCallbackOptions);
       
   547 					}
       
   548 				});
       
   549 			}, 10);
       
   550 			ams.form && ams.form.setFocus(form);
       
   551 		});
       
   552 
       
   553 		// Initialize custom reset handlers
       
   554 		$(element).on('reset', '[data-ams-reset-handler]', function(e) {
       
   555 			var form = $(this);
       
   556 			var data = form.data();
       
   557 			if (data.amsResetHandler) {
       
   558 				if (data.amsResetKeepDefault !== true) {
       
   559 					e.preventDefault();
       
   560 				}
       
   561 				var callback = ams.getFunctionByName(data.amsResetHandler);
       
   562 				if (callback !== undefined) {
       
   563 					callback.call(form, data.amsResetHandlerOptions);
       
   564 				}
       
   565 			}
       
   566 		});
       
   567 
       
   568 		// Initialize custom event on click
       
   569 		$(element).on('click', '[data-ams-click-event]', function(e) {
       
   570 			var source = $(this);
       
   571 			$(e.target).trigger(source.data('ams-click-event'),
       
   572 								source.data('ams-click-event-options'));
       
   573 		});
       
   574 
       
   575 		// Cancel clicks on readonly checkbox
       
   576 		$(element).on('click', 'input[type="checkbox"][readonly]', function() {
       
   577 			return false;
       
   578 		});
       
   579 	};
       
   580 
   466 })(jQuery, this);
   581 })(jQuery, this);