--- a/src/pyams_skin/resources/js/myams-core.js Fri Jul 26 12:42:05 2019 +0200
+++ b/src/pyams_skin/resources/js/myams-core.js Fri Jul 26 12:42:35 2019 +0200
@@ -463,4 +463,119 @@
}
};
+ /**
+ * Initialize main events handlers
+ */
+ MyAMS.initHandlers = function(element) {
+
+ // Initialize custom click handlers
+ $(element).on('click', '[data-ams-click-handler]', function(event) {
+ var source = $(this);
+ var handlers = source.data('ams-disabled-handlers');
+ if ((handlers === true) || (handlers === 'click') || (handlers === 'all')) {
+ return;
+ }
+ var data = source.data();
+ if (data.amsClickHandler) {
+ if ((data.amsStopPropagation === true) || (data.amsClickStopPropagation === true)) {
+ event.stopPropagation();
+ }
+ if (data.amsClickKeepDefault !== true) {
+ event.preventDefault();
+ }
+ var clickHandlers = data.amsClickHandler.split(/\s+/);
+ for (var index=0; index < clickHandlers.length; index++) {
+ var callback = ams.getFunctionByName(clickHandlers[index]);
+ if (callback !== undefined) {
+ callback.call(source, event, data.amsClickHandlerOptions);
+ }
+ }
+ }
+ });
+
+ // Initialize custom change handlers
+ $(element).on('change', '[data-ams-change-handler]', function(event) {
+ var source = $(this);
+ // Disable change handlers for readonly inputs
+ // These change handlers are activated by IE!!!
+ if (source.prop('readonly')) {
+ return;
+ }
+ var handlers = source.data('ams-disabled-handlers');
+ if ((handlers === true) || (handlers === 'change') || (handlers === 'all')) {
+ return;
+ }
+ var data = source.data();
+ if (data.amsChangeHandler) {
+ if ((data.amsStopPropagation === true) || (data.amsChangeStopPropagation === true)) {
+ event.stopPropagation();
+ }
+ if (data.amsChangeKeepDefault !== true) {
+ event.preventDefault();
+ }
+ var changeHandlers = data.amsChangeHandler.split(/\s+/);
+ for (var index=0; index < changeHandlers.length; index++) {
+ var callback = ams.getFunctionByName(changeHandlers[index]);
+ if (callback !== undefined) {
+ callback.call(source, event, data.amsChangeHandlerOptions);
+ }
+ }
+ }
+ });
+
+ // Notify reset to update Select2 widgets
+ $(element).on('reset', 'form', function(e) {
+ var form = $(this);
+ setTimeout(function() {
+ $('.alert-danger, SPAN.state-error', form).not('.persistent').remove();
+ $('LABEL.state-error', form).removeClass('state-error');
+ $('INPUT.select2[type="hidden"]', form).each(function() {
+ var input = $(this);
+ var select = input.data('select2');
+ var value = input.data('ams-select2-input-value');
+ if (value) {
+ input.select2('val', value.split(select.opts.separator));
+ }
+ });
+ form.find('.select2').trigger('change');
+ $('[data-ams-reset-callback]', form).each(function() {
+ var element = $(this);
+ var data = element.data();
+ var callback = ams.getFunctionByName(data.amsResetCallback);
+ if (callback !== undefined) {
+ callback.call(form, element, data.amsResetCallbackOptions);
+ }
+ });
+ }, 10);
+ ams.form && ams.form.setFocus(form);
+ });
+
+ // Initialize custom reset handlers
+ $(element).on('reset', '[data-ams-reset-handler]', function(e) {
+ var form = $(this);
+ var data = form.data();
+ if (data.amsResetHandler) {
+ if (data.amsResetKeepDefault !== true) {
+ e.preventDefault();
+ }
+ var callback = ams.getFunctionByName(data.amsResetHandler);
+ if (callback !== undefined) {
+ callback.call(form, data.amsResetHandlerOptions);
+ }
+ }
+ });
+
+ // Initialize custom event on click
+ $(element).on('click', '[data-ams-click-event]', function(e) {
+ var source = $(this);
+ $(e.target).trigger(source.data('ams-click-event'),
+ source.data('ams-click-event-options'));
+ });
+
+ // Cancel clicks on readonly checkbox
+ $(element).on('click', 'input[type="checkbox"][readonly]', function() {
+ return false;
+ });
+ };
+
})(jQuery, this);