/**
* App Callback functionnality
*
* @fileoverview Defines and exports callback
*
* @author Deux Huit Huit <https://deuxhuithuit.com>
* @license MIT <https://deuxhuithuit.mit-license.org>
*
* @namespace callback
* @memberof App
* @requires App
*/
(function ($, global, undefined) {
'use strict';
/**
* Put the args value in a array if it isn't one already
* @name argsToArray
* @method
* @memberof callback
* @param {*} args
* @return {Array}
* @private
*/
var argsToArray = function (args) {
var isNull = (args === null);
var isNotUndefined = (args !== undefined);
var isNotAnArray = !$.isArray(args);
var noLength = !!args && !$.isNumeric(args.length);
var isString = $.type(args) === 'string';
var isjQuery = !!args && !!args.jquery;
if (isNull || (isNotUndefined && isNotAnArray && (noLength || isString || isjQuery))) {
// put single parameter inside an array
args = [args];
}
return args;
};
/**
* Execute the method received with the arguments received.
* Returns what the method returned.
* @name callback
* @method
* @memberof callback
* @this App
* @param {function} fx
* @param {*} args
* @return {*}
* @private
*/
var callback = function (fx, args) {
try {
args = argsToArray(args);
if ($.isFunction(fx)) {
// IE8 does not allow null/undefined args
return fx.apply(this, args || []);
} else if ($.isPlainObject(fx)) {
return fx;
}
} catch (err) {
var stack = err.stack;
var msg = (err.message || err) + '\n' + (stack || '');
App.log({args: [msg, err], fx: 'error'});
}
return undefined;
};
/** Public Interfaces **/
global.App = $.extend(true, global.App, {
/**
* Execute the method received with the arguments received
* @name this
* @method
* @memberof callback
* @this App
* @param {function} fx
* @param {*} args
* @return undefined
* @public
*/
callback: callback
});
})(jQuery, window);