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…', |
|
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); |