src/pyams_skin/resources/js/myams-plugins-loader.js
changeset 489 63ea9a94bd47
parent 486 48b7cea0d903
equal deleted inserted replaced
488:efdf19b8f453 489:63ea9a94bd47
    11  * dynamic hidden input fields created by JQuery-validate plug-in will be removed from the form
    11  * dynamic hidden input fields created by JQuery-validate plug-in will be removed from the form
    12  * before the form is submitted!
    12  * before the form is submitted!
    13  */
    13  */
    14 (function($, globals) {
    14 (function($, globals) {
    15 
    15 
       
    16 	"use strict";
       
    17 
    16 	var ams = globals.MyAMS;
    18 	var ams = globals.MyAMS;
    17 
    19 
    18 	ams.plugins = {
    20 	ams.plugins = {
    19 
    21 
    20 		/**
    22 		/**
    32 
    34 
    33 			// Check for disabled plug-ins
    35 			// Check for disabled plug-ins
    34 			var disabled = [];
    36 			var disabled = [];
    35 			$('[data-ams-plugins-disabled]', element).each(function() {
    37 			$('[data-ams-plugins-disabled]', element).each(function() {
    36 				var plugins = $(this).data('ams-plugins-disabled').split(/\s+/);
    38 				var plugins = $(this).data('ams-plugins-disabled').split(/\s+/);
    37 				for (var index=0; index < plugins.length; index++) {
    39 				for (var index = 0; index < plugins.length; index++) {
    38 					disabled.push(plugins[index]);
    40 					disabled.push(plugins[index]);
    39 				}
    41 				}
    40 			});
    42 			});
    41 
    43 
    42 			// Scan new element for plug-ins
    44 			// Scan new element for plug-ins
    47 			function _registerPlugin(name, new_plugin) {
    49 			function _registerPlugin(name, new_plugin) {
    48 				if (plugins.hasOwnProperty(name)) {
    50 				if (plugins.hasOwnProperty(name)) {
    49 					var plugin = plugins[name];
    51 					var plugin = plugins[name];
    50 					plugin.css = plugin.css || new_plugin.css;
    52 					plugin.css = plugin.css || new_plugin.css;
    51 					plugin.callbacks.push({
    53 					plugin.callbacks.push({
    52 						callback: new_plugin.callback,
    54 											  callback: new_plugin.callback,
    53 						context: new_plugin.context
    55 											  context: new_plugin.context
    54 					});
    56 										  });
    55 					if (new_plugin.register) {
    57 					if (new_plugin.register) {
    56 						plugin.register = true;
    58 						plugin.register = true;
    57 					}
    59 					}
    58 					if (new_plugin.async === false) {
    60 					if (new_plugin.async === false) {
    59 						plugin.async = false;
    61 						plugin.async = false;
    77 
    79 
    78 			$('[data-ams-plugins]', element).each(function() {
    80 			$('[data-ams-plugins]', element).each(function() {
    79 
    81 
    80 				var source = $(this);
    82 				var source = $(this);
    81 				var amsPlugins = source.data('ams-plugins');
    83 				var amsPlugins = source.data('ams-plugins');
    82 				if (typeof(amsPlugins) === 'string') {
    84 				if (typeof (amsPlugins) === 'string') {
    83 					var names = source.data('ams-plugins').split(/\s+/);
    85 					var names = source.data('ams-plugins').split(/\s+/);
    84 					for (var index = 0; index < names.length; index++) {
    86 					for (var index = 0; index < names.length; index++) {
    85 						name = names[index];
    87 						name = names[index];
    86 						var newPlugin = {
    88 						var newPlugin = {
    87 							src: source.data('ams-plugin-' + name + '-src'),
    89 							src: source.data('ams-plugin-' + name + '-src'),
   109 			function _loadPlugin(reload) {
   111 			function _loadPlugin(reload) {
   110 				var index;
   112 				var index;
   111 				var callbacks = plugin.callbacks,
   113 				var callbacks = plugin.callbacks,
   112 					callback;
   114 					callback;
   113 				if (callbacks && callbacks.length) {
   115 				if (callbacks && callbacks.length) {
   114 					for (index=0; index < callbacks.length; index++) {
   116 					for (index = 0; index < callbacks.length; index++) {
   115 						callback = callbacks[index];
   117 						callback = callbacks[index];
   116 						callback.callback = ams.getFunctionByName(callback.callback);
   118 						callback.callback = ams.getFunctionByName(callback.callback);
   117 						if (plugin.register !== false) {
   119 						if (plugin.register !== false) {
   118 							var enabled = ams.plugins.enabled;
   120 							var enabled = ams.plugins.enabled;
   119 							if (enabled.hasOwnProperty(name)) {
   121 							if (enabled.hasOwnProperty(name)) {
   129 					}
   131 					}
   130 				}
   132 				}
   131 				// If running in async mode, newly registered plug-ins are run
   133 				// If running in async mode, newly registered plug-ins are run
   132 				// before callback is called so we call plug-in manually
   134 				// before callback is called so we call plug-in manually
   133 				if ((reload !== true) && callbacks && callbacks.length && (plugin.async !== false)) {
   135 				if ((reload !== true) && callbacks && callbacks.length && (plugin.async !== false)) {
   134 					for (index=0; index < callbacks.length; index++) {
   136 					for (index = 0; index < callbacks.length; index++) {
   135 						callback = callbacks[index];
   137 						callback = callbacks[index];
   136 						ams.executeFunctionByName(callback.callback, element, callback.context);
   138 						ams.executeFunctionByName(callback.callback, element, callback.context);
   137 					}
   139 					}
   138 				}
   140 				}
   139 			}
   141 			}
   140 
   142 
   141 			function _checkPluginContext() {
   143 			function _checkPluginContext() {
   142 				// Update context for an already loaded plug-in
   144 				// Update context for an already loaded plug-in
   143 				var enabled = ams.plugins.enabled[name];
   145 				var enabled = ams.plugins.enabled[name];
   144 				// Clean all plug-in contexts
   146 				// Clean all plug-in contexts
   145 				for (index=0; index < enabled.length; index++) {
   147 				for (index = 0; index < enabled.length; index++) {
   146 					var callback = enabled[index];
   148 					var callback = enabled[index];
   147 					if (callback && callback.context && !ams.isInDOM(callback.context)) {
   149 					if (callback && callback.context && !ams.isInDOM(callback.context)) {
   148 						enabled[index] = null;
   150 						enabled[index] = null;
   149 					}
   151 					}
   150 				}
   152 				}
   173 				if (disabled.indexOf(index) >= 0) {
   175 				if (disabled.indexOf(index) >= 0) {
   174 					continue;
   176 					continue;
   175 				}
   177 				}
   176 				var callbacks = ams.plugins.enabled[index];
   178 				var callbacks = ams.plugins.enabled[index];
   177 				if (callbacks) {
   179 				if (callbacks) {
   178 					switch (typeof(callbacks)) {
   180 					switch (typeof (callbacks)) {
   179 						case 'function':
   181 						case 'function':
   180 							callbacks(element);
   182 							callbacks(element);
   181 							break;
   183 							break;
   182 						default:
   184 						default:
   183 							for (var cbIndex = 0; cbIndex < callbacks.length; cbIndex++) {
   185 							for (var cbIndex = 0; cbIndex < callbacks.length; cbIndex++) {
   184 								var callback = callbacks[cbIndex];
   186 								var callback = callbacks[cbIndex];
   185 								switch (typeof(callback)) {
   187 								switch (typeof (callback)) {
   186 									case 'function':
   188 									case 'function':
   187 										callback(element);
   189 										callback(element);
   188 										break;
   190 										break;
   189 									default:
   191 									default:
   190 										if (callback && callback.callback) {
   192 										if (callback && callback.callback) {
   209 				var data = dataElement.data('ams-data');
   211 				var data = dataElement.data('ams-data');
   210 				if (data) {
   212 				if (data) {
   211 					for (var name in data) {
   213 					for (var name in data) {
   212 						if (data.hasOwnProperty(name)) {
   214 						if (data.hasOwnProperty(name)) {
   213 							var elementData = data[name];
   215 							var elementData = data[name];
   214 							if (typeof(elementData) !== 'string') {
   216 							if (typeof (elementData) !== 'string') {
   215 								elementData = JSON.stringify(elementData);
   217 								elementData = JSON.stringify(elementData);
   216 							}
   218 							}
   217 							dataElement.attr('data-' + name, elementData);
   219 							dataElement.attr('data-' + name, elementData);
   218 						}
   220 						}
   219 					}
   221 					}
   227 		 * @plugin: plugin function caller or object containing plug-in properties
   229 		 * @plugin: plugin function caller or object containing plug-in properties
   228 		 * @name: if @plugin is a function, defines plug-in name
   230 		 * @name: if @plugin is a function, defines plug-in name
   229 		 * @callback: a callback function which can be called after plug-in registry
   231 		 * @callback: a callback function which can be called after plug-in registry
   230 		 */
   232 		 */
   231 		register: function(plugin, name, callback) {
   233 		register: function(plugin, name, callback) {
   232 			if (typeof(name) === 'function') {
   234 			if (typeof (name) === 'function') {
   233 				callback = name;
   235 				callback = name;
   234 				name = null;
   236 				name = null;
   235 			}
   237 			}
   236 			name = name || plugin.name;
   238 			name = name || plugin.name;
   237 			if (ams.plugins.enabled.indexOf(name) >= 0) {
   239 			if (ams.plugins.enabled.indexOf(name) >= 0) {
   238 				if (console) {
   240 				if (console) {
   239 					console.warn && console.warn("Plugin " + name + " is already registered!");
   241 					console.warn && console.warn("Plugin " + name + " is already registered!");
   240 				}
   242 				}
   241 				return;
   243 				return;
   242 			}
   244 			}
   243 			if (typeof(plugin) === 'object') {
   245 			if (typeof (plugin) === 'object') {
   244 				var src = plugin.src;
   246 				var src = plugin.src;
   245 				if (src) {
   247 				if (src) {
   246 					ams.ajax.check(plugin.callback, src, function(first_load) {
   248 					ams.ajax && ams.ajax.check(plugin.callback, src, function(first_load) {
   247 						if (first_load) {
   249 						if (first_load) {
   248 							ams.plugins.enabled[name] = ams.getFunctionByName(plugin.callback);
   250 							ams.plugins.enabled[name] = ams.getFunctionByName(plugin.callback);
   249 							if (plugin.css) {
   251 							if (plugin.css) {
   250 								ams.getCSS(plugin.css, name + '_css');
   252 								ams.getCSS(plugin.css, name + '_css');
   251 							}
   253 							}
   261 					}
   263 					}
   262 					if (callback) {
   264 					if (callback) {
   263 						ams.executeFunctionByName(callback);
   265 						ams.executeFunctionByName(callback);
   264 					}
   266 					}
   265 				}
   267 				}
   266 			} else if (typeof(plugin) === 'function') {
   268 			} else if (typeof (plugin) === 'function') {
   267 				ams.plugins.enabled[name] = plugin;
   269 				ams.plugins.enabled[name] = plugin;
   268 				if (callback) {
   270 				if (callback) {
   269 					ams.executeFunctionByName(callback);
   271 					ams.executeFunctionByName(callback);
   270 				}
   272 				}
   271 			}
   273 			}
   272 		}
   274 		}
   273 	};
   275 	};
   274 
   276 
       
   277 	ams.plugins.i18n = {
       
   278 		widgets: {},
       
   279 		validate: {},
       
   280 		datatables: {},
       
   281 		fancybox: {
       
   282 			ERROR: "Can't load requested content.",
       
   283 			RETRY: "Please check URL or try again later.",
       
   284 			CLOSE: "Close",
       
   285 			NEXT: "Next",
       
   286 			PREVIOUS: "Previous"
       
   287 		},
       
   288 		dndupload: {
       
   289 			FILES_SELECTED: '{count} files selected',
       
   290 			CHOOSE_FILE: 'Select file(s)',
       
   291 			ADD_INFO: 'to add them to current folder,',
       
   292 			DRAG_FILE: 'or drag and drop them here!',
       
   293 			UPLOAD: 'Upload',
       
   294 			UPLOADING: 'Uploading&hellip;',
       
   295 			DONE: 'Done!',
       
   296 			UPLOAD_MORE: 'Upload more?',
       
   297 			ERROR: 'Error!',
       
   298 			TRY_AGAIN: 'Try again?'
       
   299 		}
       
   300 	};
       
   301 
   275 })(jQuery, this);
   302 })(jQuery, this);