can.construct.proxy.js | |
---|---|
/*!
* CanJS - 1.1.4 (2013-02-05)
* http://canjs.us/
* Copyright (c) 2013 Bitovi
* Licensed MIT
*/
(function (can, window, undefined) { | |
can/construct/proxy/proxy.js | var isFunction = can.isFunction,
isArray = can.isArray,
makeArray = can.makeArray,
proxy = function (funcs) { |
args that should be curried | var args = makeArray(arguments),
self; |
get the functions to callback | funcs = args.shift(); |
if there is only one function, make funcs into an array | if (!isArray(funcs)) {
funcs = [funcs];
} |
keep a reference to us in self | self = this;
return function class_cb() { |
add the arguments after the curried args | var cur = args.concat(makeArray(arguments)),
isString, length = funcs.length,
f = 0,
func; |
go through each function to call back | for (; f < length; f++) {
func = funcs[f];
if (!func) {
continue;
} |
set called with the name of the function on self (this is how this.view works) | isString = typeof func == "string"; |
call the function | cur = (isString ? self[func] : func).apply(self, cur || []); |
pass the result to the next function (if there is a next function) | if (f < length - 1) {
cur = !isArray(cur) || cur._use_call ? [cur] : cur
}
}
return cur;
}
}
can.Construct.proxy = can.Construct.prototype.proxy = proxy; |
this corrects the case where can/control loads after can/construct/proxy, so static props don't have proxy | var correctedClasses = [can.Observe, can.Control, can.Model],
i = 0;
for (; i < correctedClasses.length; i++) {
if (correctedClasses[i]) {
correctedClasses[i].proxy = proxy;
}
}
})(can, this);
|