src/pyams_skin/resources/js/myams-require.js
changeset 536 d1742b03d5a7
parent 489 63ea9a94bd47
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);
   467 
   582 
   468 (function($, globals) {
   583 (function($, globals) {
   469 
   584 
   470 	var ams = globals.MyAMS;
   585 	var ams = globals.MyAMS;
   557 	ams.require = function(packages, callback) {
   672 	ams.require = function(packages, callback) {
   558 		var deferred = [];
   673 		var deferred = [];
   559 		for (var index=0; index < packages.length; index++) {
   674 		for (var index=0; index < packages.length; index++) {
   560 			var package_name = packages[index];
   675 			var package_name = packages[index];
   561 			if (loaded_extensions.indexOf(package_name) < 0) {
   676 			if (loaded_extensions.indexOf(package_name) < 0) {
   562 				var source = ams.baseURL + 'myams-' + package_name + ams.devext + '.js';
   677 				if (package_name.startsWith('http://') || package_name.startsWith('https://')) {
       
   678 					var source = package_name;
       
   679 				} else {
       
   680 					source = ams.baseURL + 'myams-' + package_name + ams.devext + '.js';
       
   681 				}
   563 				deferred.push(ams.getScript(source, {async: true}, console.error));
   682 				deferred.push(ams.getScript(source, {async: true}, console.error));
   564 				loaded_extensions.push(package_name);
   683 				loaded_extensions.push(package_name);
   565 			}
   684 			}
   566 		}
   685 		}
   567 		if (deferred.length > 0) {
   686 		if (deferred.length > 0) {