# HG changeset patch # User Thierry Florac # Date 1564137755 -7200 # Node ID d1742b03d5a703de0275767d47b59b0aca4a3ed1 # Parent 618ff34bcd7c81864a31c1d4f5ee106fe3d7b1d9 Updated Javascript resources to add events handlers in MyAMS "core" script diff -r 618ff34bcd7c -r d1742b03d5a7 src/pyams_skin/resources/js/myams-core.js --- 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); diff -r 618ff34bcd7c -r d1742b03d5a7 src/pyams_skin/resources/js/myams-core.min.js --- a/src/pyams_skin/resources/js/myams-core.min.js Fri Jul 26 12:42:05 2019 +0200 +++ b/src/pyams_skin/resources/js/myams-core.min.js Fri Jul 26 12:42:35 2019 +0200 @@ -1,1 +1,1 @@ -"use strict";!function(t,e){var r=e.console;String.prototype.startsWith=function(t){var e=this.length,r=t.length;return!(e0},void 0===t.scrollbarWidth&&(t.scrollbarWidth=function(){var e=t('
').appendTo("body"),r=e.children(),n=r.innerWidth()-r.height(99).innerWidth();return e.remove(),n}),t.fn.extend({exists:function(){return t(this).length>0},objectOrParentWithClass:function(t){return this.hasClass(t)?this:this.parents("."+t)},listattr:function(e){var r=[];return this.each(function(){r.push(t(this).attr(e))}),r},style:function(t,e,r){if(void 0!==this.get(0)){var n=this.get(0).style;return void 0!==t?void 0!==e?(r=void 0!==r?r:"",n.setProperty(t,e,r),this):n.getPropertyValue(t):n}},removeClassPrefix:function(e){return this.each(function(r,n){var i=n.className.split(" ").map(function(t){return t.startsWith(e)?"":t});n.className=t.trim(i.join(" "))}),this}}),void 0===e.MyAMS&&(e.MyAMS={devmode:!0,devext:"",lang:"en",throttleDelay:350,menuSpeed:235,navbarHeight:49,ajaxNav:!0,safeMethods:["GET","HEAD","OPTIONS","TRACE"],csrfCookieName:"csrf_token",csrfHeaderName:"X-CSRF-Token",enableWidgets:!0,enableMobile:!1,enableFastclick:!1,warnOnFormChange:!1,ismobile:/iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(navigator.userAgent.toLowerCase())});var n=e.MyAMS,i=n;n.baseURL=function(){var e=t('script[src*="/myams.js"], script[src*="/myams.min.js"], script[src*="/myams-core.js"], script[src*="/myams-core.min.js"], script[src*="/myams-require.js"], script[src*="/myams-require.min.js"]').attr("src");return i.devmode=e.indexOf(".min.js")<0,i.devext=i.devmode?"":".min",e.substring(0,e.lastIndexOf("/")+1)}(),n.log=function(){r&&r.debug&&r.debug(this,arguments)},n.getQueryVar=function(t,e){if(t.indexOf("?")<0)return!1;t.endsWith("&")||(t+="&");var r=new RegExp(".*?[&\\?]"+e+"=(.*?)&.*"),n=t.replace(r,"$1");return n!==t&&n},n.rgb2hex=function(e){return"#"+t.map(e.match(/\b(\d+)\b/g),function(t){return("0"+parseInt(t).toString(16)).slice(-2)}).join("")},n.generateId=function(){function t(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return t()+t()+t()+t()},n.generateUUID=function(){var t=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var r=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"===e?r:3&r|8).toString(16)})},n.getObject=function(t,e){if(t){if("string"!=typeof t)return t;var r=t.split(".");e=void 0===e||null===e?window:e;for(var n=0;n").attr("data-ams-id",r).text('@import "'+i.getSource(e)+'";'),n)var c=setInterval(function(){try{s[0].sheet.cssRules;n.call(window,!0,o),clearInterval(c)}catch(t){}},10);s.appendTo(a)}else n&&n.call(window,!1,o)}}(jQuery,this); +"use strict";!function(t,e){var n=e.console;String.prototype.startsWith=function(t){var e=this.length,n=t.length;return!(e0},void 0===t.scrollbarWidth&&(t.scrollbarWidth=function(){var e=t('
').appendTo("body"),n=e.children(),r=n.innerWidth()-n.height(99).innerWidth();return e.remove(),r}),t.fn.extend({exists:function(){return t(this).length>0},objectOrParentWithClass:function(t){return this.hasClass(t)?this:this.parents("."+t)},listattr:function(e){var n=[];return this.each(function(){n.push(t(this).attr(e))}),n},style:function(t,e,n){if(void 0!==this.get(0)){var r=this.get(0).style;return void 0!==t?void 0!==e?(n=void 0!==n?n:"",r.setProperty(t,e,n),this):r.getPropertyValue(t):r}},removeClassPrefix:function(e){return this.each(function(n,r){var a=r.className.split(" ").map(function(t){return t.startsWith(e)?"":t});r.className=t.trim(a.join(" "))}),this}}),void 0===e.MyAMS&&(e.MyAMS={devmode:!0,devext:"",lang:"en",throttleDelay:350,menuSpeed:235,navbarHeight:49,ajaxNav:!0,safeMethods:["GET","HEAD","OPTIONS","TRACE"],csrfCookieName:"csrf_token",csrfHeaderName:"X-CSRF-Token",enableWidgets:!0,enableMobile:!1,enableFastclick:!1,warnOnFormChange:!1,ismobile:/iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(navigator.userAgent.toLowerCase())});var r=e.MyAMS,a=r;r.baseURL=function(){var e=t('script[src*="/myams.js"], script[src*="/myams.min.js"], script[src*="/myams-core.js"], script[src*="/myams-core.min.js"], script[src*="/myams-require.js"], script[src*="/myams-require.min.js"]').attr("src");return a.devmode=e.indexOf(".min.js")<0,a.devext=a.devmode?"":".min",e.substring(0,e.lastIndexOf("/")+1)}(),r.log=function(){n&&n.debug&&n.debug(this,arguments)},r.getQueryVar=function(t,e){if(t.indexOf("?")<0)return!1;t.endsWith("&")||(t+="&");var n=new RegExp(".*?[&\\?]"+e+"=(.*?)&.*"),r=t.replace(n,"$1");return r!==t&&r},r.rgb2hex=function(e){return"#"+t.map(e.match(/\b(\d+)\b/g),function(t){return("0"+parseInt(t).toString(16)).slice(-2)}).join("")},r.generateId=function(){function t(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return t()+t()+t()+t()},r.generateUUID=function(){var t=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var n=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"===e?n:3&n|8).toString(16)})},r.getObject=function(t,e){if(t){if("string"!=typeof t)return t;var n=t.split(".");e=void 0===e||null===e?window:e;for(var r=0;r").attr("data-ams-id",n).text('@import "'+a.getSource(e)+'";'),r)var c=setInterval(function(){try{s[0].sheet.cssRules;r.call(window,!0,i),clearInterval(c)}catch(t){}},10);s.appendTo(o)}else r&&r.call(window,!1,i)},r.initHandlers=function(e){t(e).on("click","[data-ams-click-handler]",function(e){var n=t(this),r=n.data("ams-disabled-handlers");if(!0!==r&&"click"!==r&&"all"!==r){var i=n.data();if(i.amsClickHandler){!0!==i.amsStopPropagation&&!0!==i.amsClickStopPropagation||e.stopPropagation(),!0!==i.amsClickKeepDefault&&e.preventDefault();for(var o=i.amsClickHandler.split(/\s+/),s=0;s "+a.i18n.LOGOUT+" "+t("#show-shortcut").text()+" ?",content:a.i18n.LOGOUT_COMMENT,buttons:a.i18n.BTN_YES_NO},function(t){t===a.i18n.BTN_YES&&(a.root.addClass("animated fadeOutUp"),setTimeout(a.skin.logout,1e3))})});var s=t("nav");t("UL",s).myams_menu({accordion:!1!==s.data("ams-menu-accordion"),speed:a.menuSpeed}),t("#hide-menu").find(">:first-child >A").click(function(t){n.toggleClass("hidden-menu"),e.localStorage&&(n.hasClass("hidden-menu")?e.localStorage.setItem("window-state","hidden-menu"):e.localStorage.setItem("window-state","")),t.preventDefault()}),t(".minifyme").click(function(a){n.toggleClass("minified"),e.localStorage&&(n.hasClass("minified")?e.localStorage.setItem("window-state","minified"):e.localStorage.setItem("window-state","")),t(this).effect("highlight",{},500),a.preventDefault()}),t("#refresh").click(function(t){a.skin&&a.skin.bigBox({title:" "+a.i18n.CLEAR_STORAGE_TITLE,content:a.i18n.CLEAR_STORAGE_CONTENT,buttons:"["+a.i18n.BTN_CANCEL+"]["+a.i18n.BTN_OK+"]"},function(t){t===a.i18n.BTN_OK&&localStorage&&(localStorage.clear(),location.reload())}),t.preventDefault()}),n.on("click",function(e){var a=t(this);a.is(e.target)||0!==a.has(e.target).length||0!==t(".popover").has(e.target).length||a.popover("hide")}),a.ajax&&a.ajax.check(t.resize,a.baseURL+"ext/jquery-resize"+a.devext+".js",function(){t("#main").resize(function(){a.skin._setPageHeight(),a.skin._checkMobileWidth()}),s.resize(function(){a.skin._setPageHeight()})}),a.ajaxNav&&(t(document).on("click",'a[href="#"]',function(t){t.preventDefault()}),t(document).on("click",'a[href!="#"]:not([data-toggle]), [data-ams-url]:not([data-toggle])',function(e){var n=t(e.currentTarget),o=n.data("ams-disabled-handlers");if(!0!==o&&"click"!==o&&"all"!==o){var i=n.attr("href")||n.data("ams-url");if(i&&!i.startsWith("javascript")&&!n.attr("target")&&!0!==n.data("ams-context-menu")){e.preventDefault(),e.stopPropagation();var s,r,c;i.indexOf("?")>=0?(r=(s=i.split("?"))[0],c=s[1].unserialize()):(r=i,c=void 0);var l=a.getFunctionByName(r);if("function"==typeof l&&(i=l.call(n,c)),"function"==typeof i)i.call(n,c);else if(i=i.replace(/\%23/,"#"),e.ctrlKey)window.open(i);else{var d=n.data("ams-target");d?"_blank"===d?window.open(i):a.form&&a.form.confirmChangedForm(d,function(){a.skin&&a.skin.loadURL(i,d,n.data("ams-link-options"),n.data("ams-link-callback"))}):a.form&&a.form.confirmChangedForm(function(){i.startsWith("#")?i!==location.hash&&(a.root.hasClass("mobile-view-activated")?(a.root.removeClass("hidden-menu"),window.setTimeout(function(){window.location.hash=i},50)):window.location.hash=i):window.location=i})}}}}),t(document).on("click",'a[target="_blank"]',function(e){e.preventDefault();var n=t(e.currentTarget);window.open(n.attr("href")),a.stats&&a.stats.logEvent(n.data("ams-stats-category")||"Navigation",n.data("ams-stats-action")||"External",n.data("ams-stats-label")||n.attr("href"))}),t(document).on("click",'a[target="_top"]',function(e){e.preventDefault(),a.form&&a.form.confirmChangedForm(function(){window.location=t(e.currentTarget).attr("href")})}),t(window).on("hashchange",a.skin&&a.skin.checkURL)),t(document).off("click.modal").on("click",'[data-toggle="modal"]',function(e){var n=t(this),o=n.data("ams-disabled-handlers");!0!==o&&"click"!==o&&"all"!==o&&!0!==n.data("ams-context-menu")&&(!0===n.data("ams-stop-propagation")&&e.stopPropagation(),e.preventDefault(),a.dialog&&a.dialog.open(n),n.parents("#shortcut").exists()&&setTimeout(a.skin._hideShortcutButtons,300))}),t(document).on("click",'button[type="submit"], button.submit',function(){var e=t(this);t(e.get(0).form).data("ams-submit-button",e)}),t(document).on("click",'input[type="checkbox"][readonly]',function(){return!1}),t(document).on("click","[data-ams-click-handler]",function(e){var n=t(this),o=n.data("ams-disabled-handlers");if(!0!==o&&"click"!==o&&"all"!==o){var i=n.data();if(i.amsClickHandler){!0!==i.amsStopPropagation&&!0!==i.amsClickStopPropagation||e.stopPropagation(),!0!==i.amsClickKeepDefault&&e.preventDefault();for(var s=i.amsClickHandler.split(/\s+/),r=0;rs&&t(window).height()-o'),a.skin&&a.skin.loadURL(o.amsUrl,n.attr("href"),{afterLoadCallback:function(){o.amsTabLoadOnce&&n.data("ams-tab-loaded",!0),t("i",n).remove()},afterErrorCallback:function(){t("i",n).remove()}})}}),t(document).on("hide.bs.modal",function(e){var n=t(e.target);a.form&&a.form.confirmChangedForm(n,function(){var t=n.data("modal")||n.data("bs.modal");return t&&(t.isShown=!0),!0},function(){return e.preventDefault(),!1})}),t(document).on("myams.refresh",function(t,e){a.executeFunctionByName(e.handler||a.skin&&a.skin.refreshContent,t.target,e)}),a.initContent(document),a.ajaxNav&&s.exists()&&a.skin&&a.skin.checkURL(),a.form&&a.form.setFocus(document),t(window).on("beforeunload",a.form&&a.form.checkBeforeUnload)},a.initContent=function(e){t(".tipsy").remove(),t("[rel=tooltip]",e).tooltip(),t("[rel=popover]",e).popover(),t("[rel=popover-hover]",e).popover({trigger:"hover"}),a.plugins&&a.plugins.init(e),a.callbacks&&a.callbacks.init(e),a.events&&a.events.init(e),a.form&&a.form.init(e),"desktop"===a.device?a.skin&&a.skin._initDesktopWidgets(e):a.skin&&a.skin._initMobileWidgets(e),a.skin&&a.skin._setPageHeight()},t(document).ready(function(){var e=(t=jQuery.noConflict())("HTML");e.removeClass("no-js").addClass("js");var n=e.attr("lang")||e.attr("xml:lang");n&&!n.startsWith("en")?(a.lang=n,a.getScript(a.baseURL+"i18n/myams_"+n.substr(0,2)+a.devext+".js",function(){a.initPage()})):a.initPage()})}(jQuery,this); +!function(t,e){var a=e.MyAMS;a.initPage=function(){var n=t("body");a.root=n,a.leftPanel=t("#left-panel"),a.shortcuts=t("#shortcuts"),a.plugins.initData(n);var o=t.ajaxSettings.xhr;t.ajaxSetup({beforeSend:function(t,n){if(a.safeMethods.indexOf(n.type)<0&&void 0!==e.Cookies){var o=Cookies.get(a.csrfCookieName);o&&t.setRequestHeader(a.csrfHeaderName,o)}},progress:a.ajax&&a.ajax.progress,progressUpload:a.ajax&&a.ajax.progress,xhr:function(){var t=o();if(t&&"function"==typeof t.addEventListener){var e=this;e&&e.progress&&t.addEventListener("progress",function(t){e.progress(t)},!1)}return t}}),t(document).ajaxStart(a.ajax&&a.ajax.start),t(document).ajaxStop(a.ajax&&a.ajax.stop),t(document).ajaxError(a.error&&a.error.ajax);var i=e.localStorage&&e.localStorage.getItem("window-state");i&&n.addClass(i),a.isMobile?(a.root.addClass("mobile-detected"),a.device="mobile",a.enableFastclick&&a.ajax&&a.ajax.check(t.fn.noClickDelay,a.baseURL+"/ext/jquery-smartclick"+a.devext+".js",function(){t("NAV UL A").noClickDelay(),t("A","#hide-menu").noClickDelay()})):(a.root.addClass("desktop-detected"),a.device="desktop"),t("#show-shortcuts").click(function(t){a.shortcuts.is(":visible")?a.skin&&a.skin._hideShortcutButtons():a.skin&&a.skin._showShortcutButtons(),t.preventDefault()}),a.shortcuts.click(function(t){a.skin&&a.skin._hideShortcutButtons()}),t(document).mouseup(function(t){a.shortcuts.is(t.target)||0!==a.shortcuts.has(t.target).length||a.skin&&a.skin._hideShortcutButtons()}),t("#search-mobile").click(function(){a.root.addClass("search-mobile")}),t("#cancel-search-js").click(function(){a.root.removeClass("search-mobile")}),t(".activity-button","#user-activity").click(function(e){var a=t("#user-activity"),n=t(".ajax-dropdown",a);n.is(":visible")?(n.fadeOut(150),a.removeClass("active")):(n.css("left",-n.innerWidth()+a.innerWidth()).fadeIn(150),a.addClass("active")),e.preventDefault()}),a.skin&&a.skin.checkNotification(),t(document).mouseup(function(e){var a=t(".ajax-dropdown");a.is(e.target)||0!==a.has(e.target).length||a.fadeOut(150).prev().removeClass("active")}),t('input[name="activity"]').change(function(e){var n=t(this).data("ams-url");if(n){e.preventDefault(),e.stopPropagation();var o=a.getFunctionByName(n);if("function"==typeof o&&(n=o.call(this)),"function"==typeof n)n.call(this);else{var i=t(".ajax-notifications");a.skin&&a.skin.loadURL(n,i)}}}),t("a","#user-menu LI.logout").click(function(e){e.preventDefault(),e.stopPropagation(),a.loginURL=t(this).attr("href"),a.skin&&a.skin.bigBox({title:" "+a.i18n.LOGOUT+" "+t("#show-shortcut").text()+" ?",content:a.i18n.LOGOUT_COMMENT,buttons:a.i18n.BTN_YES_NO},function(t){t===a.i18n.BTN_YES&&(a.root.addClass("animated fadeOutUp"),setTimeout(a.skin.logout,1e3))})});var s=t("nav");t("UL",s).myams_menu({accordion:!1!==s.data("ams-menu-accordion"),speed:a.menuSpeed}),t("#hide-menu").find(">:first-child >A").click(function(t){n.toggleClass("hidden-menu"),e.localStorage&&(n.hasClass("hidden-menu")?e.localStorage.setItem("window-state","hidden-menu"):e.localStorage.setItem("window-state","")),t.preventDefault()}),t(".minifyme").click(function(a){n.toggleClass("minified"),e.localStorage&&(n.hasClass("minified")?e.localStorage.setItem("window-state","minified"):e.localStorage.setItem("window-state","")),t(this).effect("highlight",{},500),a.preventDefault()}),t("#refresh").click(function(t){a.skin&&a.skin.bigBox({title:" "+a.i18n.CLEAR_STORAGE_TITLE,content:a.i18n.CLEAR_STORAGE_CONTENT,buttons:"["+a.i18n.BTN_CANCEL+"]["+a.i18n.BTN_OK+"]"},function(t){t===a.i18n.BTN_OK&&localStorage&&(localStorage.clear(),location.reload())}),t.preventDefault()}),n.on("click",function(e){var a=t(this);a.is(e.target)||0!==a.has(e.target).length||0!==t(".popover").has(e.target).length||a.popover("hide")}),a.ajax&&a.ajax.check(t.resize,a.baseURL+"ext/jquery-resize"+a.devext+".js",function(){t("#main").resize(function(){a.skin._setPageHeight(),a.skin._checkMobileWidth()}),s.resize(function(){a.skin._setPageHeight()})}),a.ajaxNav&&(t(document).on("click",'a[href="#"]',function(t){t.preventDefault()}),t(document).on("click",'a[href!="#"]:not([data-toggle]), [data-ams-url]:not([data-toggle])',function(e){var n=t(e.currentTarget),o=n.data("ams-disabled-handlers");if(!0!==o&&"click"!==o&&"all"!==o){var i=n.attr("href")||n.data("ams-url");if(i&&!i.startsWith("javascript")&&!n.attr("target")&&!0!==n.data("ams-context-menu")){e.preventDefault(),e.stopPropagation();var s,r,c;i.indexOf("?")>=0?(r=(s=i.split("?"))[0],c=s[1].unserialize()):(r=i,c=void 0);var l=a.getFunctionByName(r);if("function"==typeof l&&(i=l.call(n,c)),"function"==typeof i)i.call(n,c);else if(i=i.replace(/\%23/,"#"),e.ctrlKey)window.open(i);else{var d=n.data("ams-target");d?"_blank"===d?window.open(i):a.form&&a.form.confirmChangedForm(d,function(){a.skin&&a.skin.loadURL(i,d,n.data("ams-link-options"),n.data("ams-link-callback"))}):a.form&&a.form.confirmChangedForm(function(){i.startsWith("#")?i!==location.hash&&(a.root.hasClass("mobile-view-activated")?(a.root.removeClass("hidden-menu"),window.setTimeout(function(){window.location.hash=i},50)):window.location.hash=i):window.location=i})}}}}),t(document).on("click",'a[target="_blank"]',function(e){e.preventDefault();var n=t(e.currentTarget);window.open(n.attr("href")),a.stats&&a.stats.logEvent(n.data("ams-stats-category")||"Navigation",n.data("ams-stats-action")||"External",n.data("ams-stats-label")||n.attr("href"))}),t(document).on("click",'a[target="_top"]',function(e){e.preventDefault(),a.form&&a.form.confirmChangedForm(function(){window.location=t(e.currentTarget).attr("href")})}),t(window).on("hashchange",a.skin&&a.skin.checkURL)),t(document).off("click.modal").on("click",'[data-toggle="modal"]',function(e){var n=t(this),o=n.data("ams-disabled-handlers");!0!==o&&"click"!==o&&"all"!==o&&!0!==n.data("ams-context-menu")&&(!0===n.data("ams-stop-propagation")&&e.stopPropagation(),e.preventDefault(),a.dialog&&a.dialog.open(n),n.parents("#shortcut").exists()&&setTimeout(a.skin._hideShortcutButtons,300))}),t(document).on("click",'button[type="submit"], button.submit',function(){var e=t(this);t(e.get(0).form).data("ams-submit-button",e)}),a.initHandlers(document),t(document).on("keydown","textarea",function(e){10!==e.keyCode&&13!==e.keyCode||!e.ctrlKey&&!e.metaKey||t(this).closest("form").submit()}),t(document).on("change",'input[type="file"]',function(e){e.preventDefault();var a=t(this),n=a.parent(".button");n.exists()&&n.parent().hasClass("input-file")&&n.next('input[type="text"]').val(a.val())}),t(document).on("focus",'input[readonly="readonly"]',function(){t(this).blur()}),t(document).on("focusin",function(e){t(e.target).closest(".mce-window").length&&e.stopImmediatePropagation()}),t(document).on("click",".nav-tabs a[data-toggle=tab]",function(e){if(t(this).parent("li").hasClass("disabled"))return e.preventDefault(),!1}),t(document).on("show.bs.dropdown",".btn-group",function(){var e=t(this),a=e.children(".dropdown-menu"),n=e.get(0).getBoundingClientRect(),o=n.top,i=n.height,s=a.outerHeight();o>s&&t(window).height()-o'),a.skin&&a.skin.loadURL(o.amsUrl,n.attr("href"),{afterLoadCallback:function(){o.amsTabLoadOnce&&n.data("ams-tab-loaded",!0),t("i",n).remove()},afterErrorCallback:function(){t("i",n).remove()}})}}),t(document).on("hide.bs.modal",function(e){var n=t(e.target);a.form&&a.form.confirmChangedForm(n,function(){var t=n.data("modal")||n.data("bs.modal");return t&&(t.isShown=!0),!0},function(){return e.preventDefault(),!1})}),t(document).on("myams.refresh",function(t,e){a.executeFunctionByName(e.handler||a.skin&&a.skin.refreshContent,t.target,e)}),a.initContent(document),a.ajaxNav&&s.exists()&&a.skin&&a.skin.checkURL(),a.form&&a.form.setFocus(document),t(window).on("beforeunload",a.form&&a.form.checkBeforeUnload)},a.initContent=function(e){t(".tipsy").remove(),t("[rel=tooltip]",e).tooltip(),t("[rel=popover]",e).popover(),t("[rel=popover-hover]",e).popover({trigger:"hover"}),a.plugins&&a.plugins.init(e),a.callbacks&&a.callbacks.init(e),a.events&&a.events.init(e),a.form&&a.form.init(e),"desktop"===a.device?a.skin&&a.skin._initDesktopWidgets(e):a.skin&&a.skin._initMobileWidgets(e),a.skin&&a.skin._setPageHeight()},t(document).ready(function(){var e=(t=jQuery.noConflict())("HTML");e.removeClass("no-js").addClass("js");var n=e.attr("lang")||e.attr("xml:lang");n&&!n.startsWith("en")?(a.lang=n,a.getScript(a.baseURL+"i18n/myams_"+n.substr(0,2)+a.devext+".js",function(){a.initPage()})):a.initPage()})}(jQuery,this); diff -r 618ff34bcd7c -r d1742b03d5a7 src/pyams_skin/resources/js/myams-require.js --- a/src/pyams_skin/resources/js/myams-require.js Fri Jul 26 12:42:05 2019 +0200 +++ b/src/pyams_skin/resources/js/myams-require.js Fri Jul 26 12:42:35 2019 +0200 @@ -463,6 +463,121 @@ } }; + /** + * 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); (function($, globals) { @@ -559,7 +674,11 @@ for (var index=0; index < packages.length; index++) { var package_name = packages[index]; if (loaded_extensions.indexOf(package_name) < 0) { - var source = ams.baseURL + 'myams-' + package_name + ams.devext + '.js'; + if (package_name.startsWith('http://') || package_name.startsWith('https://')) { + var source = package_name; + } else { + source = ams.baseURL + 'myams-' + package_name + ams.devext + '.js'; + } deferred.push(ams.getScript(source, {async: true}, console.error)); loaded_extensions.push(package_name); } diff -r 618ff34bcd7c -r d1742b03d5a7 src/pyams_skin/resources/js/myams-require.min.js --- a/src/pyams_skin/resources/js/myams-require.min.js Fri Jul 26 12:42:05 2019 +0200 +++ b/src/pyams_skin/resources/js/myams-require.min.js Fri Jul 26 12:42:35 2019 +0200 @@ -1,1 +1,1 @@ -"use strict";!function(e,t){var r=t.console;String.prototype.startsWith=function(e){var t=this.length,r=e.length;return!(t0},void 0===e.scrollbarWidth&&(e.scrollbarWidth=function(){var t=e('
').appendTo("body"),r=t.children(),n=r.innerWidth()-r.height(99).innerWidth();return t.remove(),n}),e.fn.extend({exists:function(){return e(this).length>0},objectOrParentWithClass:function(e){return this.hasClass(e)?this:this.parents("."+e)},listattr:function(t){var r=[];return this.each(function(){r.push(e(this).attr(t))}),r},style:function(e,t,r){if(void 0!==this.get(0)){var n=this.get(0).style;return void 0!==e?void 0!==t?(r=void 0!==r?r:"",n.setProperty(e,t,r),this):n.getPropertyValue(e):n}},removeClassPrefix:function(t){return this.each(function(r,n){var o=n.className.split(" ").map(function(e){return e.startsWith(t)?"":e});n.className=e.trim(o.join(" "))}),this}}),void 0===t.MyAMS&&(t.MyAMS={devmode:!0,devext:"",lang:"en",throttleDelay:350,menuSpeed:235,navbarHeight:49,ajaxNav:!0,safeMethods:["GET","HEAD","OPTIONS","TRACE"],csrfCookieName:"csrf_token",csrfHeaderName:"X-CSRF-Token",enableWidgets:!0,enableMobile:!1,enableFastclick:!1,warnOnFormChange:!1,ismobile:/iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(navigator.userAgent.toLowerCase())});var n=t.MyAMS,o=n;n.baseURL=function(){var t=e('script[src*="/myams.js"], script[src*="/myams.min.js"], script[src*="/myams-core.js"], script[src*="/myams-core.min.js"], script[src*="/myams-require.js"], script[src*="/myams-require.min.js"]').attr("src");return o.devmode=t.indexOf(".min.js")<0,o.devext=o.devmode?"":".min",t.substring(0,t.lastIndexOf("/")+1)}(),n.log=function(){r&&r.debug&&r.debug(this,arguments)},n.getQueryVar=function(e,t){if(e.indexOf("?")<0)return!1;e.endsWith("&")||(e+="&");var r=new RegExp(".*?[&\\?]"+t+"=(.*?)&.*"),n=e.replace(r,"$1");return n!==e&&n},n.rgb2hex=function(t){return"#"+e.map(t.match(/\b(\d+)\b/g),function(e){return("0"+parseInt(e).toString(16)).slice(-2)}).join("")},n.generateId=function(){function e(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return e()+e()+e()+e()},n.generateUUID=function(){var e=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var r=(e+16*Math.random())%16|0;return e=Math.floor(e/16),("x"===t?r:3&r|8).toString(16)})},n.getObject=function(e,t){if(e){if("string"!=typeof e)return e;var r=e.split(".");t=void 0===t||null===t?window:t;for(var n=0;n").attr("data-ams-id",r).text('@import "'+o.getSource(t)+'";'),n)var c=setInterval(function(){try{s[0].sheet.cssRules;n.call(window,!0,i),clearInterval(c)}catch(e){}},10);s.appendTo(a)}else n&&n.call(window,!1,i)}}(jQuery,this),function(e,t){t.MyAMS.i18n={INFO:"Information",WARNING:"!! WARNING !!",ERROR:"ERROR: ",LOADING:"Loading...",PROGRESS:"Processing",WAIT:"Please wait!",FORM_SUBMITTED:"This form was already submitted...",NO_SERVER_RESPONSE:"No response from server!",ERROR_OCCURED:"An error occured!",ERRORS_OCCURED:"Some errors occured!",BAD_LOGIN_TITLE:"Bad login!",BAD_LOGIN_MESSAGE:"Your anthentication credentials didn't allow you to open a session; please check your credentials or contact administrator.",CONFIRM:"Confirm",CONFIRM_REMOVE:"Removing this content can't be undone. Do you confirm?",CLEAR_STORAGE_TITLE:"Clear Local Storage",CLEAR_STORAGE_CONTENT:"Would you like to RESET all your saved widgets and clear LocalStorage?",BTN_OK:"OK",BTN_CANCEL:"Cancel",BTN_OK_CANCEL:"[OK][Cancel]",BTN_YES:"Yes",BTN_NO:"No",BTN_YES_NO:"[Yes][No]",CLIPBOARD_COPY:"Copy to clipboard with Ctrl+C, and Enter",CLIPBOARD_CHARACTER_COPY_OK:"Character copied to clipboard",CLIPBOARD_TEXT_COPY_OK:"Text copied to clipboard",FORM_CHANGED_WARNING:"Some changes were not saved. These updates will be lost if you leave this page.",DELETE_WARNING:"This change can't be undone. Are you sure that you want to delete this element?",NO_UPDATE:"No changes were applied.",DATA_UPDATED:"Data successfully updated.",HOME:"Home",LOGOUT:"Logout?",LOGOUT_COMMENT:"You can improve your security further after logging out by closing this opened browser",SELECT2_PLURAL:"s",SELECT2_MATCH:"One result is available, press enter to select it.",SELECT2_MATCHES:" results are available, use up and down arrow keys to navigate.",SELECT2_NOMATCHES:"No matches found",SELECT2_SEARCHING:"Searching...",SELECT2_LOADMORE:"Loading more results...",SELECT2_INPUT_TOOSHORT:"Please enter {0} more character{1}",SELECT2_INPUT_TOOLONG:"Please delete {0} character{1}",SELECT2_SELECTION_TOOBIG:"You can only select {0} item{1}",SELECT2_FREETAG_PREFIX:"Free text: ",DT_COLUMNS:"Columns"}}(jQuery,this),function(e,t){var r=t.MyAMS,n=[];r.require=function(t,o){for(var i=[],a=0;a0?e.when.apply(e,i).then(function(){o()}):o()}}(jQuery,this); +"use strict";!function(e,t){var n=t.console;String.prototype.startsWith=function(e){var t=this.length,n=e.length;return!(t0},void 0===e.scrollbarWidth&&(e.scrollbarWidth=function(){var t=e('
').appendTo("body"),n=t.children(),r=n.innerWidth()-n.height(99).innerWidth();return t.remove(),r}),e.fn.extend({exists:function(){return e(this).length>0},objectOrParentWithClass:function(e){return this.hasClass(e)?this:this.parents("."+e)},listattr:function(t){var n=[];return this.each(function(){n.push(e(this).attr(t))}),n},style:function(e,t,n){if(void 0!==this.get(0)){var r=this.get(0).style;return void 0!==e?void 0!==t?(n=void 0!==n?n:"",r.setProperty(e,t,n),this):r.getPropertyValue(e):r}},removeClassPrefix:function(t){return this.each(function(n,r){var a=r.className.split(" ").map(function(e){return e.startsWith(t)?"":e});r.className=e.trim(a.join(" "))}),this}}),void 0===t.MyAMS&&(t.MyAMS={devmode:!0,devext:"",lang:"en",throttleDelay:350,menuSpeed:235,navbarHeight:49,ajaxNav:!0,safeMethods:["GET","HEAD","OPTIONS","TRACE"],csrfCookieName:"csrf_token",csrfHeaderName:"X-CSRF-Token",enableWidgets:!0,enableMobile:!1,enableFastclick:!1,warnOnFormChange:!1,ismobile:/iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(navigator.userAgent.toLowerCase())});var r=t.MyAMS,a=r;r.baseURL=function(){var t=e('script[src*="/myams.js"], script[src*="/myams.min.js"], script[src*="/myams-core.js"], script[src*="/myams-core.min.js"], script[src*="/myams-require.js"], script[src*="/myams-require.min.js"]').attr("src");return a.devmode=t.indexOf(".min.js")<0,a.devext=a.devmode?"":".min",t.substring(0,t.lastIndexOf("/")+1)}(),r.log=function(){n&&n.debug&&n.debug(this,arguments)},r.getQueryVar=function(e,t){if(e.indexOf("?")<0)return!1;e.endsWith("&")||(e+="&");var n=new RegExp(".*?[&\\?]"+t+"=(.*?)&.*"),r=e.replace(n,"$1");return r!==e&&r},r.rgb2hex=function(t){return"#"+e.map(t.match(/\b(\d+)\b/g),function(e){return("0"+parseInt(e).toString(16)).slice(-2)}).join("")},r.generateId=function(){function e(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return e()+e()+e()+e()},r.generateUUID=function(){var e=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var n=(e+16*Math.random())%16|0;return e=Math.floor(e/16),("x"===t?n:3&n|8).toString(16)})},r.getObject=function(e,t){if(e){if("string"!=typeof e)return e;var n=e.split(".");t=void 0===t||null===t?window:t;for(var r=0;r").attr("data-ams-id",n).text('@import "'+a.getSource(t)+'";'),r)var c=setInterval(function(){try{s[0].sheet.cssRules;r.call(window,!0,i),clearInterval(c)}catch(e){}},10);s.appendTo(o)}else r&&r.call(window,!1,i)},r.initHandlers=function(t){e(t).on("click","[data-ams-click-handler]",function(t){var n=e(this),r=n.data("ams-disabled-handlers");if(!0!==r&&"click"!==r&&"all"!==r){var i=n.data();if(i.amsClickHandler){!0!==i.amsStopPropagation&&!0!==i.amsClickStopPropagation||t.stopPropagation(),!0!==i.amsClickKeepDefault&&t.preventDefault();for(var o=i.amsClickHandler.split(/\s+/),s=0;s0?e.when.apply(e,i).then(function(){a()}):a()}}(jQuery,this); diff -r 618ff34bcd7c -r d1742b03d5a7 src/pyams_skin/resources/js/myams.js --- a/src/pyams_skin/resources/js/myams.js Fri Jul 26 12:42:05 2019 +0200 +++ b/src/pyams_skin/resources/js/myams.js Fri Jul 26 12:42:35 2019 +0200 @@ -463,6 +463,121 @@ } }; + /** + * 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); (function($, globals) { @@ -4210,8 +4325,7 @@ } : ams.getFunctionByName(data.amsFormSubmitHandler) : undefined, - invalidHandler: form.attr('data-async') !== undefined ? - data.amsFormInvalidHandler === undefined ? + invalidHandler: data.amsFormInvalidHandler === undefined ? function(event, validator) { $('.state-error', form).removeClass('state-error'); for (var index = 0; index < validator.errorList.length; index++) { @@ -4227,7 +4341,6 @@ } } : ams.getFunctionByName(data.amsFormInvalidHandler) - : undefined }; $('[data-ams-validate-rules]', form).each(function(index) { if (index === 0) { @@ -4554,7 +4667,11 @@ target = location + '/' + target; } } - ams.ajax && ams.ajax.post(target, {names: JSON.stringify(rows)}); + ams.ajax && ams.ajax.post(target, {names: JSON.stringify(rows)}, function(result, status) { + if (result.status !== 'success') { + ams.ajax.handleJSON(result); + } + }); } } finally { // Restore row click handler @@ -5278,10 +5395,10 @@ tr.remove(); } if (result.handle_json) { - ams.ajax && ams.ajax.handleJSON(result); + ams.ajax.handleJSON(result); } } else { - ams.ajax && ams.ajax.handleJSON(result); + ams.ajax.handleJSON(result); } }); } @@ -5303,10 +5420,14 @@ (cell.data('ams-attribute-switcher') || table.data('ams-attribute-switcher')), {object_name: row.data('ams-element-name')}, function(result, status) { - if (result.visible) { - $('i', source).attr('class', 'fa fa-fw fa-eye'); + if (result.status === 'success') { + if (result.visible) { + $('i', source).attr('class', 'fa fa-fw fa-eye'); + } else { + $('i', source).attr('class', 'fa fa-fw fa-eye-slash text-danger'); + } } else { - $('i', source).attr('class', 'fa fa-fw fa-eye-slash text-danger'); + ams.ajax.handleJSON(result); } }); } @@ -5327,10 +5448,14 @@ (cell.data('ams-attribute-switcher') || table.data('ams-attribute-switcher')), {object_name: row.data('ams-element-name')}, function(result, status) { - if (result[attribute] || result['on']) { - $('i', source).attr('class', table.data('ams-' + attribute + '-icon-on') || 'fa fa-fw fa-check-square-o'); + if (result.status === 'success') { + if (result[attribute] || result['on']) { + $('i', source).attr('class', table.data('ams-' + attribute + '-icon-on') || 'fa fa-fw fa-check-square-o'); + } else { + $('i', source).attr('class', table.data('ams-' + attribute + '-icon-off') || 'fa fa-fw fa-check-square txt-color-silver opacity-75'); + } } else { - $('i', source).attr('class', table.data('ams-' + attribute + '-icon-off') || 'fa fa-fw fa-check-square txt-color-silver opacity-75'); + ams.ajax.handleJSON(result); } }); } @@ -6603,65 +6728,8 @@ $(button.get(0).form).data('ams-submit-button', button); }); - // Cancel clicks on readonly checkbox - $(document).on('click', 'input[type="checkbox"][readonly]', function() { - return false; - }); - - // Initialize custom click handlers - $(document).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 - $(document).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); - } - } - } - }); + // Initialize main event handlers + ams.initHandlers(document); // Submit form when CTRL+Enter key is pressed in textarea $(document).on('keydown', 'textarea', function(e) { @@ -6670,54 +6738,6 @@ } }); - // Notify reset to update Select2 widgets - $(document).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 - $(document).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 - $(document).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')); - }); - // Handle update on file upload placeholder $(document).on('change', 'input[type="file"]', function(e) { e.preventDefault(); diff -r 618ff34bcd7c -r d1742b03d5a7 src/pyams_skin/resources/js/myams.min.js --- a/src/pyams_skin/resources/js/myams.min.js Fri Jul 26 12:42:05 2019 +0200 +++ b/src/pyams_skin/resources/js/myams.min.js Fri Jul 26 12:42:35 2019 +0200 @@ -1,1 +1,1 @@ -"use strict";!function(e,a){var t=a.console;String.prototype.startsWith=function(e){var a=this.length,t=e.length;return!(a0},void 0===e.scrollbarWidth&&(e.scrollbarWidth=function(){var a=e('
').appendTo("body"),t=a.children(),n=t.innerWidth()-t.height(99).innerWidth();return a.remove(),n}),e.fn.extend({exists:function(){return e(this).length>0},objectOrParentWithClass:function(e){return this.hasClass(e)?this:this.parents("."+e)},listattr:function(a){var t=[];return this.each(function(){t.push(e(this).attr(a))}),t},style:function(e,a,t){if(void 0!==this.get(0)){var n=this.get(0).style;return void 0!==e?void 0!==a?(t=void 0!==t?t:"",n.setProperty(e,a,t),this):n.getPropertyValue(e):n}},removeClassPrefix:function(a){return this.each(function(t,n){var s=n.className.split(" ").map(function(e){return e.startsWith(a)?"":e});n.className=e.trim(s.join(" "))}),this}}),void 0===a.MyAMS&&(a.MyAMS={devmode:!0,devext:"",lang:"en",throttleDelay:350,menuSpeed:235,navbarHeight:49,ajaxNav:!0,safeMethods:["GET","HEAD","OPTIONS","TRACE"],csrfCookieName:"csrf_token",csrfHeaderName:"X-CSRF-Token",enableWidgets:!0,enableMobile:!1,enableFastclick:!1,warnOnFormChange:!1,ismobile:/iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(navigator.userAgent.toLowerCase())});var n=a.MyAMS,s=n;n.baseURL=function(){var a=e('script[src*="/myams.js"], script[src*="/myams.min.js"], script[src*="/myams-core.js"], script[src*="/myams-core.min.js"], script[src*="/myams-require.js"], script[src*="/myams-require.min.js"]').attr("src");return s.devmode=a.indexOf(".min.js")<0,s.devext=s.devmode?"":".min",a.substring(0,a.lastIndexOf("/")+1)}(),n.log=function(){t&&t.debug&&t.debug(this,arguments)},n.getQueryVar=function(e,a){if(e.indexOf("?")<0)return!1;e.endsWith("&")||(e+="&");var t=new RegExp(".*?[&\\?]"+a+"=(.*?)&.*"),n=e.replace(t,"$1");return n!==e&&n},n.rgb2hex=function(a){return"#"+e.map(a.match(/\b(\d+)\b/g),function(e){return("0"+parseInt(e).toString(16)).slice(-2)}).join("")},n.generateId=function(){function e(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return e()+e()+e()+e()},n.generateUUID=function(){var e=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var t=(e+16*Math.random())%16|0;return e=Math.floor(e/16),("x"===a?t:3&t|8).toString(16)})},n.getObject=function(e,a){if(e){if("string"!=typeof e)return e;var t=e.split(".");a=void 0===a||null===a?window:a;for(var n=0;n").attr("data-ams-id",t).text('@import "'+s.getSource(a)+'";'),n)var c=setInterval(function(){try{o[0].sheet.cssRules;n.call(window,!0,i),clearInterval(c)}catch(e){}},10);o.appendTo(r)}else n&&n.call(window,!1,i)}}(jQuery,this),function(e,a){a.MyAMS.i18n={INFO:"Information",WARNING:"!! WARNING !!",ERROR:"ERROR: ",LOADING:"Loading...",PROGRESS:"Processing",WAIT:"Please wait!",FORM_SUBMITTED:"This form was already submitted...",NO_SERVER_RESPONSE:"No response from server!",ERROR_OCCURED:"An error occured!",ERRORS_OCCURED:"Some errors occured!",BAD_LOGIN_TITLE:"Bad login!",BAD_LOGIN_MESSAGE:"Your anthentication credentials didn't allow you to open a session; please check your credentials or contact administrator.",CONFIRM:"Confirm",CONFIRM_REMOVE:"Removing this content can't be undone. Do you confirm?",CLEAR_STORAGE_TITLE:"Clear Local Storage",CLEAR_STORAGE_CONTENT:"Would you like to RESET all your saved widgets and clear LocalStorage?",BTN_OK:"OK",BTN_CANCEL:"Cancel",BTN_OK_CANCEL:"[OK][Cancel]",BTN_YES:"Yes",BTN_NO:"No",BTN_YES_NO:"[Yes][No]",CLIPBOARD_COPY:"Copy to clipboard with Ctrl+C, and Enter",CLIPBOARD_CHARACTER_COPY_OK:"Character copied to clipboard",CLIPBOARD_TEXT_COPY_OK:"Text copied to clipboard",FORM_CHANGED_WARNING:"Some changes were not saved. These updates will be lost if you leave this page.",DELETE_WARNING:"This change can't be undone. Are you sure that you want to delete this element?",NO_UPDATE:"No changes were applied.",DATA_UPDATED:"Data successfully updated.",HOME:"Home",LOGOUT:"Logout?",LOGOUT_COMMENT:"You can improve your security further after logging out by closing this opened browser",SELECT2_PLURAL:"s",SELECT2_MATCH:"One result is available, press enter to select it.",SELECT2_MATCHES:" results are available, use up and down arrow keys to navigate.",SELECT2_NOMATCHES:"No matches found",SELECT2_SEARCHING:"Searching...",SELECT2_LOADMORE:"Loading more results...",SELECT2_INPUT_TOOSHORT:"Please enter {0} more character{1}",SELECT2_INPUT_TOOLONG:"Please delete {0} character{1}",SELECT2_SELECTION_TOOBIG:"You can only select {0} item{1}",SELECT2_FREETAG_PREFIX:"Free text: ",DT_COLUMNS:"Columns"}}(jQuery,this),jQuery.UTF8={encode:function(e){e=e.replace(/\r\n/g,"\n");for(var a="",t=0;t127&&n<2048?(a+=String.fromCharCode(n>>6|192),a+=String.fromCharCode(63&n|128)):(a+=String.fromCharCode(n>>12|224),a+=String.fromCharCode(n>>6&63|128),a+=String.fromCharCode(63&n|128))}return a},decode:function(e){for(var a="",t=0,n=0,s=0,i=0;t191&&n<224?(s=e.charCodeAt(t+1),a+=String.fromCharCode((31&n)<<6|63&s),t+=2):(s=e.charCodeAt(t+1),i=e.charCodeAt(t+2),a+=String.fromCharCode((15&n)<<12|(63&s)<<6|63&i),t+=3);return a}},function(e,a){var t=a.MyAMS;e.fn.extend({contextMenu:function(a){function n(t,n,s){var i=e(window)[n](),r=e(a.menuSelector)[n](),o=t;return t+r>i&&r',openedSign:''},a),n=e(this);n.find("LI").each(function(){var a=e(this);if(a.find("UL").size()>0){a.find("A:first").append(""+t.closedSign+"");var n=a.find("A:first");"#"===n.attr("href")&&n.click(function(){return!1})}}),n.find("LI.active").each(function(){var a=e(this).parents("UL"),n=a.parent("LI");a.slideDown(t.speed),n.find("b:first").html(t.openedSign),n.addClass("open")}),n.find("LI A").on("click",function(){var a=e(this);if(!a.hasClass("active")){var s=a.attr("href").replace(/^#/,""),i=a.parent().find("UL");if(t.accordion){var r=a.parent().parents("UL"),o=n.find("UL:visible");o.each(function(a){var n=!0;if(r.each(function(e){if(r[e]===o[a])return n=!1,!1}),n&&i!==o[a]){var c=e(o[a]);!s&&c.hasClass("active")||c.slideUp(t.speed,function(){e(this).parent("LI").removeClass("open").find("B:first").delay(t.speed).html(t.closedSign)})}})}var c=a.parent().find("UL:first");s||!c.is(":visible")||c.hasClass("active")?c.slideDown(t.speed,function(){a.parent("LI").addClass("open").find("B:first").delay(t.speed).html(t.openedSign)}):c.slideUp(t.speed,function(){a.parent("LI").removeClass("open").find("B:first").delay(t.speed).html(t.closedSign)})}})}})}(jQuery,this),function(e,a){a.MyAMS.event={stop:function(e){e||(e=window.event),e&&"string"!=typeof e&&(e.stopPropagation?(e.stopPropagation(),e.preventDefault()):(e.cancelBubble=!0,e.returnValue=!1))}}}(jQuery,this),function(e,a){var t=a.MyAMS;t.browser={getInternetExplorerVersion:function(){var e=-1;if("Microsoft Internet Explorer"===navigator.appName){var a=navigator.userAgent;null!==new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(a)&&(e=parseFloat(RegExp.$1))}return e},checkVersion:function(){var e="You're not using Windows Internet Explorer.",t=this.getInternetExplorerVersion();t>-1&&(e=t>=8?"You're using a recent copy of Windows Internet Explorer.":"You should upgrade your copy of Windows Internet Explorer."),a.alert&&a.alert(e)},isIE8orlower:function(){var e="0",a=this.getInternetExplorerVersion();return a>-1&&(e=a>=9?0:1),e},copyToClipboard:function(n){function s(n){var s=!1;if(window.clipboardData&&window.clipboardData.setData)s=clipboardData.setData("Text",n);else if(document.queryCommandSupported&&document.queryCommandSupported("copy")){var i=e("