| /* |
| Copyright (c) 2004-2006, The Dojo Foundation |
| All Rights Reserved. |
| |
| Licensed under the Academic Free License version 2.1 or above OR the |
| modified BSD license. For more information on Dojo licensing, see: |
| |
| http://dojotoolkit.org/community/licensing.shtml |
| */ |
| |
| |
| |
| dojo.provide("dojo.lang.func"); |
| dojo.require("dojo.lang.common"); |
| dojo.lang.hitch = function (thisObject, method) { |
| var args = []; |
| for (var x = 2; x < arguments.length; x++) { |
| args.push(arguments[x]); |
| } |
| var fcn = (dojo.lang.isString(method) ? thisObject[method] : method) || function () { |
| }; |
| return function () { |
| var ta = args.concat([]); |
| for (var x = 0; x < arguments.length; x++) { |
| ta.push(arguments[x]); |
| } |
| return fcn.apply(thisObject, ta); |
| }; |
| }; |
| dojo.lang.anonCtr = 0; |
| dojo.lang.anon = {}; |
| dojo.lang.nameAnonFunc = function (anonFuncPtr, thisObj, searchForNames) { |
| var nso = (thisObj || dojo.lang.anon); |
| if ((searchForNames) || ((dj_global["djConfig"]) && (djConfig["slowAnonFuncLookups"] == true))) { |
| for (var x in nso) { |
| try { |
| if (nso[x] === anonFuncPtr) { |
| return x; |
| } |
| } |
| catch (e) { |
| } |
| } |
| } |
| var ret = "__" + dojo.lang.anonCtr++; |
| while (typeof nso[ret] != "undefined") { |
| ret = "__" + dojo.lang.anonCtr++; |
| } |
| nso[ret] = anonFuncPtr; |
| return ret; |
| }; |
| dojo.lang.forward = function (funcName) { |
| return function () { |
| return this[funcName].apply(this, arguments); |
| }; |
| }; |
| dojo.lang.curry = function (thisObj, func) { |
| var outerArgs = []; |
| thisObj = thisObj || dj_global; |
| if (dojo.lang.isString(func)) { |
| func = thisObj[func]; |
| } |
| for (var x = 2; x < arguments.length; x++) { |
| outerArgs.push(arguments[x]); |
| } |
| var ecount = (func["__preJoinArity"] || func.length) - outerArgs.length; |
| function gather(nextArgs, innerArgs, expected) { |
| var texpected = expected; |
| var totalArgs = innerArgs.slice(0); |
| for (var x = 0; x < nextArgs.length; x++) { |
| totalArgs.push(nextArgs[x]); |
| } |
| expected = expected - nextArgs.length; |
| if (expected <= 0) { |
| var res = func.apply(thisObj, totalArgs); |
| expected = texpected; |
| return res; |
| } else { |
| return function () { |
| return gather(arguments, totalArgs, expected); |
| }; |
| } |
| } |
| return gather([], outerArgs, ecount); |
| }; |
| dojo.lang.curryArguments = function (thisObj, func, args, offset) { |
| var targs = []; |
| var x = offset || 0; |
| for (x = offset; x < args.length; x++) { |
| targs.push(args[x]); |
| } |
| return dojo.lang.curry.apply(dojo.lang, [thisObj, func].concat(targs)); |
| }; |
| dojo.lang.tryThese = function () { |
| for (var x = 0; x < arguments.length; x++) { |
| try { |
| if (typeof arguments[x] == "function") { |
| var ret = (arguments[x]()); |
| if (ret) { |
| return ret; |
| } |
| } |
| } |
| catch (e) { |
| dojo.debug(e); |
| } |
| } |
| }; |
| dojo.lang.delayThese = function (farr, cb, delay, onend) { |
| if (!farr.length) { |
| if (typeof onend == "function") { |
| onend(); |
| } |
| return; |
| } |
| if ((typeof delay == "undefined") && (typeof cb == "number")) { |
| delay = cb; |
| cb = function () { |
| }; |
| } else { |
| if (!cb) { |
| cb = function () { |
| }; |
| if (!delay) { |
| delay = 0; |
| } |
| } |
| } |
| setTimeout(function () { |
| (farr.shift())(); |
| cb(); |
| dojo.lang.delayThese(farr, cb, delay, onend); |
| }, delay); |
| }; |
| |