static/js/dncp/util/kwargs.js
define(function (){
function kwargs(func, defaults) {
/*jshint maxlen : 200*/
var removeComments = new RegExp('(\\/\\*[\\w\\\'\\,\\(\\)\\s\\r\\n\\*]*\\*\\/)|(\\/\\/[\\w\\s\\\'][^\\n\\r]*$)|(<![\\-\\-\\s\\w\\>\\/]*>)', 'gim');
var removeWhitespc = new RegExp('\\s+', 'gim');
var matchSignature = new RegExp('function.*?\\((.*?)\\)', 'i');
// get the argument names from function source
var names = func.toString()
.replace(removeComments, '')
.replace(removeWhitespc, '')
.match(matchSignature)[1]
.split(',');
// Check the existance of default, if not create an object
if(defaults !== Object(defaults)){
defaults = {};
}
return function () {
var args = Array.prototype.slice.call(arguments);
var kwargs = args[args.length - 1];
// Check the existance of the kwargs
if (kwargs && kwargs.constructor === Object) {
args.pop();
}
else{
kwargs = {};
}
// Fill the arguments and apply them
for (var i = 0; i < names.length; i++) {
var name = names[i];
if (name in kwargs) {
args[i] = kwargs[name];
}
else if(name in defaults && args[i] == null){
args[i] = defaults[name];
}
}
return func.apply(this, args);
};
}
// As function prototype
// Function.prototype.kwargs = kwargs;
return kwargs;
});