--- a/src/pyams_skin/resources/js/myams.js Thu Jun 02 16:33:03 2016 +0200
+++ b/src/pyams_skin/resources/js/myams.js Thu Jun 02 16:34:29 2016 +0200
@@ -534,13 +534,20 @@
};
MyAMS.getScript = function(url, callback, options) {
+ if (typeof(callback) === 'object') {
+ options = callback;
+ callback = null;
+ }
+ if (options === undefined) {
+ options = {};
+ }
var defaults = {
dataType: 'script',
url: ams.getSource(url),
success: callback,
error: ams.error.show,
cache: !ams.devmode,
- async: typeof(callback) === 'function'
+ async: options.async === undefined ? typeof(callback) === 'function' : options.async
};
var settings = $.extend({}, defaults, options);
return $.ajax(settings);
@@ -1591,6 +1598,9 @@
success: function(result, status, request, form) {
var callback;
var button = form.data('ams-submit-button');
+ form.data('submitted', false);
+ form.removeData('ams-submit-button');
+ form.removeAttr('data-ams-form-changed');
if (button) {
callback = button.data('ams-form-submit-callback');
}
@@ -1601,9 +1611,6 @@
if (form.is(':visible') && button) {
button.button('reset');
}
- form.data('submitted', false);
- form.removeData('ams-submit-button');
- form.removeAttr('data-ams-form-changed');
},
iframe: hasUpload
});
@@ -2373,32 +2380,36 @@
var plugin;
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;
+ if (new_plugin.callback) {
+ plugin.callbacks.push(new_plugin.callback);
+ }
+ 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: new_plugin.callback ? [new_plugin.callback] : [],
+ 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() {
- function registerPlugin(name, new_plugin) {
- if (plugins.hasOwnProperty(name)) {
- var plugin = plugins[name];
- plugin.css = plugin.css || new_plugin.css;
- if (new_plugin.callback) {
- plugin.callbacks.push(new_plugin.callback);
- }
- 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: new_plugin.callback ? [new_plugin.callback] : [],
- register: new_plugin.register,
- async: new_plugin.async
- };
- }
- }
-
var source = $(this);
var ams_plugins = source.data('ams-plugins');
if (typeof(ams_plugins) === 'string') {
@@ -2412,26 +2423,25 @@
register: source.data('ams-plugin-' + name + '-register'),
async: source.data('ams-plugin-' + name + '-async')
};
- registerPlugin(name, new_plugin);
+ _registerPlugin(name, new_plugin);
}
} else {
for (name in ams_plugins) {
if (!ams_plugins.hasOwnProperty(name)) {
continue;
}
- registerPlugin(name, ams_plugins[name]);
+ _registerPlugin(name, ams_plugins[name]);
}
}
});
- // Load new plug-ins and execute async ones
for (name in plugins) {
if (ams.plugins.enabled[name] === undefined) {
plugin = plugins[name];
ams.getScript(plugin.src, function() {
var index;
var callbacks = plugin.callbacks;
- if (callbacks) {
+ if (callbacks && callbacks.length) {
for (index=0; index < callbacks.length; index++) {
var called = ams.getFunctionByName(callbacks[index]);
if (plugin.register !== false) {
@@ -2448,13 +2458,9 @@
ams.plugins.enabled[name] = null;
}
}
- var css = plugin.css;
- if (css) {
- ams.getCSS(css, name + '_css');
- }
// If running in async mode, registered plug-ins are run
// before callback is called so we call plug-in manually
- if (callbacks && (plugin.async !== false)) {
+ if (callbacks && callbacks.length && (plugin.async !== false)) {
for (index=0; index < callbacks.length; index++) {
ams.getFunctionByName(callbacks[index])(element);
}
@@ -2474,17 +2480,19 @@
continue;
}
var callbacks = ams.plugins.enabled[index];
- switch (typeof(callbacks)) {
- case 'function':
- callbacks(element);
- break;
- default:
- for (var cb_index = 0; cb_index < callbacks.length; cb_index++) {
- var callback = callbacks[cb_index];
- if (typeof(callback) === 'function') {
- callback(element);
+ if (callbacks) {
+ switch (typeof(callbacks)) {
+ case 'function':
+ callbacks(element);
+ break;
+ default:
+ for (var cb_index = 0; cb_index < callbacks.length; cb_index++) {
+ var callback = callbacks[cb_index];
+ if (typeof(callback) === 'function') {
+ callback(element);
+ }
}
- }
+ }
}
}
},
@@ -2497,12 +2505,12 @@
*/
initData: function(element) {
$('[data-ams-data]', element).each(function() {
- var handler = $(this);
- var data = handler.data('ams-data');
+ var data_element = $(this);
+ var data = data_element.data('ams-data');
if (data) {
for (var name in data) {
if (data.hasOwnProperty(name)) {
- handler.attr('data-' + name, data[name]);
+ data_element.attr('data-' + name, data[name]);
}
}
}
@@ -4182,7 +4190,7 @@
* Check notification badge
*/
checkNotification: function() {
- var badge = $('#activity > .badge');
+ var badge = $('.badge', '#user-activity >span');
if (parseInt(badge.text()) > 0) {
badge.removeClass("hidden")
.addClass("bg-color-red bounceIn animated");
@@ -4192,6 +4200,15 @@
}
},
+ refreshNotificationsPanel: function(e) {
+ var button = $(this);
+ button.addClass('disabled');
+ $('i', button).addClass('fa-spin');
+ $('input[name="activity"]:checked', '#user-activity').change();
+ $('i', button).removeClass('fa-spin');
+ button.removeClass('disabled');
+ },
+
/**
* Initialize desktop and mobile widgets
*/
@@ -4439,6 +4456,17 @@
},
/**
+ * Remove given callback from registry
+ */
+ unregisterCleanCallback: function(callback) {
+ var callbacks = ams.skin._clean_callbacks;
+ var index = callbacks.indexOf(callback);
+ if (index >= 0) {
+ callbacks.splice(index, 1);
+ }
+ },
+
+ /**
* Call registered cleaning callbacks on given container
*/
cleanContainer: function(container) {
@@ -4669,11 +4697,11 @@
});
// Activity badge
- $('#activity').click(function(e) {
- var activity = $(this);
- var dropdown = activity.next('.ajax-dropdown');
+ $('.activity-button', '#user-activity').click(function(e) {
+ var activity = $('#user-activity');
+ var dropdown = $('.ajax-dropdown', activity);
if (!dropdown.is(':visible')) {
- dropdown.css('left', activity.position().left - dropdown.innerWidth() / 2 + activity.innerWidth() / 2)
+ dropdown.css('left', - dropdown.innerWidth() + activity.innerWidth())
.fadeIn(150);
activity.addClass('active');
} else {
@@ -4693,10 +4721,23 @@
}
});
- $('input[name="activity"]').change(function() {
- var url = $(this).data('ams-url');
- var container = $('.ajax-notifications');
- ams.skin.loadURL(url, container);
+ $('input[name="activity"]').change(function(e) {
+ var href = $(this).data('ams-url');
+ if (href) {
+ e.preventDefault();
+ e.stopPropagation();
+ var href_getter = ams.getFunctionByName(href);
+ if (typeof(href_getter) === 'function') {
+ href = href_getter.call(this);
+ }
+ if (typeof(href) === 'function') {
+ // Javascript function call
+ href.call(this);
+ } else {
+ var container = $('.ajax-notifications');
+ ams.skin.loadURL(href, container);
+ }
+ }
});
// Logout button