diff -r 318533413200 -r a1707c607eec src/pyams_skin/resources/js/myams-plugins-loader.js --- a/src/pyams_skin/resources/js/myams-plugins-loader.js Sun Jul 19 02:02:20 2020 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,302 +0,0 @@ -/** - * MyAMS standard plug-ins loader - * - * Only basic JQuery, Bootstrap and MyAMS javascript extensions are typically loaded from main page. - * Other JQuery plug-ins may be loaded dynamically. - * Several JQuery extension plug-ins are already included and pre-configured by MyAMS. Other external - * plug-ins can be defined and loaded dynamically using simple "data" attributes. - * - * WARNING: any plug-in implicated into a form submit process (like JQuery-form or JQuery-progressbar) - * must be loaded in a synchronous way. Otherwise, if you use named buttons to submit your forms, - * dynamic hidden input fields created by JQuery-validate plug-in will be removed from the form - * before the form is submitted! - */ -(function($, globals) { - - "use strict"; - - var ams = globals.MyAMS; - - ams.plugins = { - - /** - * Container of enabled plug-ins - */ - enabled: {}, - - /** - * Initialize list of content plug-ins - */ - init: function(element) { - - // Initialize custom data attributes - ams.plugins.initData(element); - - // Check for disabled plug-ins - var disabled = []; - $('[data-ams-plugins-disabled]', element).each(function() { - var plugins = $(this).data('ams-plugins-disabled').split(/\s+/); - for (var index = 0; index < plugins.length; index++) { - disabled.push(plugins[index]); - } - }); - - // Scan new element for plug-ins - var plugins = {}; - var name; - - // Inner plug-in register function - function _registerPlugin(name, new_plugin) { - if (plugins.hasOwnProperty(name)) { - var plugin = plugins[name]; - plugin.css = plugin.css || new_plugin.css; - plugin.callbacks.push({ - callback: new_plugin.callback, - context: new_plugin.context - }); - if (new_plugin.register) { - plugin.register = true; - } - if (new_plugin.async === false) { - plugin.async = false; - } - } else { - plugins[name] = { - src: new_plugin.src, - css: new_plugin.css, - callbacks: [{ - callback: new_plugin.callback, - context: new_plugin.context - }], - register: new_plugin.register, - async: new_plugin.async - }; - } - if (new_plugin.css) { - ams.getCSS(new_plugin.css, name + '_css'); - } - } - - $('[data-ams-plugins]', element).each(function() { - - var source = $(this); - var amsPlugins = source.data('ams-plugins'); - if (typeof (amsPlugins) === 'string') { - var names = source.data('ams-plugins').split(/\s+/); - for (var index = 0; index < names.length; index++) { - name = names[index]; - var newPlugin = { - src: source.data('ams-plugin-' + name + '-src'), - css: source.data('ams-plugin-' + name + '-css'), - callback: source.data('ams-plugin-' + name + '-callback'), - context: source, - register: source.data('ams-plugin-' + name + '-register'), - async: source.data('ams-plugin-' + name + '-async') - }; - _registerPlugin(name, newPlugin); - } - } else { - for (name in amsPlugins) { - if (!amsPlugins.hasOwnProperty(name)) { - continue; - } - _registerPlugin(name, amsPlugins[name]); - } - } - }); - - // Inner plug-in loader function - var plugin; - - function _loadPlugin(reload) { - var index; - var callbacks = plugin.callbacks, - callback; - if (callbacks && callbacks.length) { - for (index = 0; index < callbacks.length; index++) { - callback = callbacks[index]; - callback.callback = ams.getFunctionByName(callback.callback); - if (plugin.register !== false) { - var enabled = ams.plugins.enabled; - if (enabled.hasOwnProperty(name)) { - enabled[name].push(callback); - } else { - enabled[name] = [callback]; - } - } - } - } else { - if (plugin.register !== false) { - ams.plugins.enabled[name] = null; - } - } - // If running in async mode, newly registered plug-ins are run - // before callback is called so we call plug-in manually - if ((reload !== true) && callbacks && callbacks.length && (plugin.async !== false)) { - for (index = 0; index < callbacks.length; index++) { - callback = callbacks[index]; - ams.executeFunctionByName(callback.callback, element, callback.context); - } - } - } - - function _checkPluginContext() { - // Update context for an already loaded plug-in - var enabled = ams.plugins.enabled[name]; - // Clean all plug-in contexts - for (index = 0; index < enabled.length; index++) { - var callback = enabled[index]; - if (callback && callback.context && !ams.isInDOM(callback.context)) { - enabled[index] = null; - } - } - } - - for (name in plugins) { - if (!plugins.hasOwnProperty(name)) { - continue; - } - plugin = plugins[name]; - if (ams.plugins.enabled[name] === undefined) { - ams.getScript(plugin.src, _loadPlugin, { - async: plugin.async === undefined ? true : plugin.async - }); - } else { - _checkPluginContext(); - _loadPlugin(true); - } - } - - // Run all enabled plug-ins - for (var index in ams.plugins.enabled) { - if (!ams.plugins.enabled.hasOwnProperty(index)) { - continue; - } - if (disabled.indexOf(index) >= 0) { - continue; - } - var callbacks = ams.plugins.enabled[index]; - if (callbacks) { - switch (typeof (callbacks)) { - case 'function': - callbacks(element); - break; - default: - for (var cbIndex = 0; cbIndex < callbacks.length; cbIndex++) { - var callback = callbacks[cbIndex]; - switch (typeof (callback)) { - case 'function': - callback(element); - break; - default: - if (callback && callback.callback) { - callback.callback(callback.context); - } - } - } - } - } - } - }, - - /** - * Data initializer - * This plug-in converts a single JSON "data-ams-data" attribute into a set of several equivalent "data-" attributes. - * This way of defining data attributes can be used with HTML templates engines which don't allow you - * to create dynamic attributes easily. - */ - initData: function(element) { - $('[data-ams-data]', element).each(function() { - var dataElement = $(this); - var data = dataElement.data('ams-data'); - if (data) { - for (var name in data) { - if (data.hasOwnProperty(name)) { - var elementData = data[name]; - if (typeof (elementData) !== 'string') { - elementData = JSON.stringify(elementData); - } - dataElement.attr('data-' + name, elementData); - } - } - } - }); - }, - - /** - * Register a new plug-in through Javascript instead of HTML data attributes - * - * @plugin: plugin function caller or object containing plug-in properties - * @name: if @plugin is a function, defines plug-in name - * @callback: a callback function which can be called after plug-in registry - */ - register: function(plugin, name, callback) { - if (typeof (name) === 'function') { - callback = name; - name = null; - } - name = name || plugin.name; - if (ams.plugins.enabled.indexOf(name) >= 0) { - if (console) { - console.warn && console.warn("Plugin " + name + " is already registered!"); - } - return; - } - if (typeof (plugin) === 'object') { - var src = plugin.src; - if (src) { - ams.ajax && ams.ajax.check(plugin.callback, src, function(first_load) { - if (first_load) { - ams.plugins.enabled[name] = ams.getFunctionByName(plugin.callback); - if (plugin.css) { - ams.getCSS(plugin.css, name + '_css'); - } - if (callback) { - ams.executeFunctionByName(callback); - } - } - }); - } else { - ams.plugins.enabled[name] = ams.getFunctionByName(plugin.callback); - if (plugin.css) { - ams.getCSS(plugin.css, name + '_css'); - } - if (callback) { - ams.executeFunctionByName(callback); - } - } - } else if (typeof (plugin) === 'function') { - ams.plugins.enabled[name] = plugin; - if (callback) { - ams.executeFunctionByName(callback); - } - } - } - }; - - ams.plugins.i18n = { - widgets: {}, - validate: {}, - datatables: {}, - fancybox: { - ERROR: "Can't load requested content.", - RETRY: "Please check URL or try again later.", - CLOSE: "Close", - NEXT: "Next", - PREVIOUS: "Previous" - }, - dndupload: { - FILES_SELECTED: '{count} files selected', - CHOOSE_FILE: 'Select file(s)', - ADD_INFO: 'to add them to current folder,', - DRAG_FILE: 'or drag and drop them here!', - UPLOAD: 'Upload', - UPLOADING: 'Uploading…', - DONE: 'Done!', - UPLOAD_MORE: 'Upload more?', - ERROR: 'Error!', - TRY_AGAIN: 'Try again?' - } - }; - -})(jQuery, this);