123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- 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;
- });
|