1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/testing/mochitest/tests/MochiKit-1.4.2/MochiKit/Base.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,1489 @@ 1.4 +/*** 1.5 + 1.6 +MochiKit.Base 1.4.2 1.7 + 1.8 +See <http://mochikit.com/> for documentation, downloads, license, etc. 1.9 + 1.10 +(c) 2005 Bob Ippolito. All rights Reserved. 1.11 + 1.12 +***/ 1.13 + 1.14 +if (typeof(dojo) != 'undefined') { 1.15 + dojo.provide("MochiKit.Base"); 1.16 +} 1.17 +if (typeof(MochiKit) == 'undefined') { 1.18 + MochiKit = {}; 1.19 +} 1.20 +if (typeof(MochiKit.Base) == 'undefined') { 1.21 + MochiKit.Base = {}; 1.22 +} 1.23 +if (typeof(MochiKit.__export__) == "undefined") { 1.24 + MochiKit.__export__ = (MochiKit.__compat__ || 1.25 + (typeof(JSAN) == 'undefined' && typeof(dojo) == 'undefined') 1.26 + ); 1.27 +} 1.28 + 1.29 +MochiKit.Base.VERSION = "1.4.2"; 1.30 +MochiKit.Base.NAME = "MochiKit.Base"; 1.31 +/** @id MochiKit.Base.update */ 1.32 +MochiKit.Base.update = function (self, obj/*, ... */) { 1.33 + if (self === null || self === undefined) { 1.34 + self = {}; 1.35 + } 1.36 + for (var i = 1; i < arguments.length; i++) { 1.37 + var o = arguments[i]; 1.38 + if (typeof(o) != 'undefined' && o !== null) { 1.39 + for (var k in o) { 1.40 + self[k] = o[k]; 1.41 + } 1.42 + } 1.43 + } 1.44 + return self; 1.45 +}; 1.46 + 1.47 +MochiKit.Base.update(MochiKit.Base, { 1.48 + __repr__: function () { 1.49 + return "[" + this.NAME + " " + this.VERSION + "]"; 1.50 + }, 1.51 + 1.52 + toString: function () { 1.53 + return this.__repr__(); 1.54 + }, 1.55 + 1.56 + /** @id MochiKit.Base.camelize */ 1.57 + camelize: function (selector) { 1.58 + /* from dojo.style.toCamelCase */ 1.59 + var arr = selector.split('-'); 1.60 + var cc = arr[0]; 1.61 + for (var i = 1; i < arr.length; i++) { 1.62 + cc += arr[i].charAt(0).toUpperCase() + arr[i].substring(1); 1.63 + } 1.64 + return cc; 1.65 + }, 1.66 + 1.67 + /** @id MochiKit.Base.counter */ 1.68 + counter: function (n/* = 1 */) { 1.69 + if (arguments.length === 0) { 1.70 + n = 1; 1.71 + } 1.72 + return function () { 1.73 + return n++; 1.74 + }; 1.75 + }, 1.76 + 1.77 + /** @id MochiKit.Base.clone */ 1.78 + clone: function (obj) { 1.79 + var me = arguments.callee; 1.80 + if (arguments.length == 1) { 1.81 + me.prototype = obj; 1.82 + return new me(); 1.83 + } 1.84 + }, 1.85 + 1.86 + _deps: function(module, deps) { 1.87 + if (!(module in MochiKit)) { 1.88 + MochiKit[module] = {}; 1.89 + } 1.90 + 1.91 + if (typeof(dojo) != 'undefined') { 1.92 + dojo.provide('MochiKit.' + module); 1.93 + } 1.94 + for (var i = 0; i < deps.length; i++) { 1.95 + if (typeof(dojo) != 'undefined') { 1.96 + dojo.require('MochiKit.' + deps[i]); 1.97 + } 1.98 + if (typeof(JSAN) != 'undefined') { 1.99 + JSAN.use('MochiKit.' + deps[i], []); 1.100 + } 1.101 + if (!(deps[i] in MochiKit)) { 1.102 + throw 'MochiKit.' + module + ' depends on MochiKit.' + deps[i] + '!' 1.103 + } 1.104 + } 1.105 + }, 1.106 + 1.107 + _flattenArray: function (res, lst) { 1.108 + for (var i = 0; i < lst.length; i++) { 1.109 + var o = lst[i]; 1.110 + if (o instanceof Array) { 1.111 + arguments.callee(res, o); 1.112 + } else { 1.113 + res.push(o); 1.114 + } 1.115 + } 1.116 + return res; 1.117 + }, 1.118 + 1.119 + /** @id MochiKit.Base.flattenArray */ 1.120 + flattenArray: function (lst) { 1.121 + return MochiKit.Base._flattenArray([], lst); 1.122 + }, 1.123 + 1.124 + /** @id MochiKit.Base.flattenArguments */ 1.125 + flattenArguments: function (lst/* ...*/) { 1.126 + var res = []; 1.127 + var m = MochiKit.Base; 1.128 + var args = m.extend(null, arguments); 1.129 + while (args.length) { 1.130 + var o = args.shift(); 1.131 + if (o && typeof(o) == "object" && typeof(o.length) == "number") { 1.132 + for (var i = o.length - 1; i >= 0; i--) { 1.133 + args.unshift(o[i]); 1.134 + } 1.135 + } else { 1.136 + res.push(o); 1.137 + } 1.138 + } 1.139 + return res; 1.140 + }, 1.141 + 1.142 + /** @id MochiKit.Base.extend */ 1.143 + extend: function (self, obj, /* optional */skip) { 1.144 + // Extend an array with an array-like object starting 1.145 + // from the skip index 1.146 + if (!skip) { 1.147 + skip = 0; 1.148 + } 1.149 + if (obj) { 1.150 + // allow iterable fall-through, but skip the full isArrayLike 1.151 + // check for speed, this is called often. 1.152 + var l = obj.length; 1.153 + if (typeof(l) != 'number' /* !isArrayLike(obj) */) { 1.154 + if (typeof(MochiKit.Iter) != "undefined") { 1.155 + obj = MochiKit.Iter.list(obj); 1.156 + l = obj.length; 1.157 + } else { 1.158 + throw new TypeError("Argument not an array-like and MochiKit.Iter not present"); 1.159 + } 1.160 + } 1.161 + if (!self) { 1.162 + self = []; 1.163 + } 1.164 + for (var i = skip; i < l; i++) { 1.165 + self.push(obj[i]); 1.166 + } 1.167 + } 1.168 + // This mutates, but it's convenient to return because 1.169 + // it's often used like a constructor when turning some 1.170 + // ghetto array-like to a real array 1.171 + return self; 1.172 + }, 1.173 + 1.174 + 1.175 + /** @id MochiKit.Base.updatetree */ 1.176 + updatetree: function (self, obj/*, ...*/) { 1.177 + if (self === null || self === undefined) { 1.178 + self = {}; 1.179 + } 1.180 + for (var i = 1; i < arguments.length; i++) { 1.181 + var o = arguments[i]; 1.182 + if (typeof(o) != 'undefined' && o !== null) { 1.183 + for (var k in o) { 1.184 + var v = o[k]; 1.185 + if (typeof(self[k]) == 'object' && typeof(v) == 'object') { 1.186 + arguments.callee(self[k], v); 1.187 + } else { 1.188 + self[k] = v; 1.189 + } 1.190 + } 1.191 + } 1.192 + } 1.193 + return self; 1.194 + }, 1.195 + 1.196 + /** @id MochiKit.Base.setdefault */ 1.197 + setdefault: function (self, obj/*, ...*/) { 1.198 + if (self === null || self === undefined) { 1.199 + self = {}; 1.200 + } 1.201 + for (var i = 1; i < arguments.length; i++) { 1.202 + var o = arguments[i]; 1.203 + for (var k in o) { 1.204 + if (!(k in self)) { 1.205 + self[k] = o[k]; 1.206 + } 1.207 + } 1.208 + } 1.209 + return self; 1.210 + }, 1.211 + 1.212 + /** @id MochiKit.Base.keys */ 1.213 + keys: function (obj) { 1.214 + var rval = []; 1.215 + for (var prop in obj) { 1.216 + rval.push(prop); 1.217 + } 1.218 + return rval; 1.219 + }, 1.220 + 1.221 + /** @id MochiKit.Base.values */ 1.222 + values: function (obj) { 1.223 + var rval = []; 1.224 + for (var prop in obj) { 1.225 + rval.push(obj[prop]); 1.226 + } 1.227 + return rval; 1.228 + }, 1.229 + 1.230 + /** @id MochiKit.Base.items */ 1.231 + items: function (obj) { 1.232 + var rval = []; 1.233 + var e; 1.234 + for (var prop in obj) { 1.235 + var v; 1.236 + try { 1.237 + v = obj[prop]; 1.238 + } catch (e) { 1.239 + continue; 1.240 + } 1.241 + rval.push([prop, v]); 1.242 + } 1.243 + return rval; 1.244 + }, 1.245 + 1.246 + 1.247 + _newNamedError: function (module, name, func) { 1.248 + func.prototype = new MochiKit.Base.NamedError(module.NAME + "." + name); 1.249 + module[name] = func; 1.250 + }, 1.251 + 1.252 + 1.253 + /** @id MochiKit.Base.operator */ 1.254 + operator: { 1.255 + // unary logic operators 1.256 + /** @id MochiKit.Base.truth */ 1.257 + truth: function (a) { return !!a; }, 1.258 + /** @id MochiKit.Base.lognot */ 1.259 + lognot: function (a) { return !a; }, 1.260 + /** @id MochiKit.Base.identity */ 1.261 + identity: function (a) { return a; }, 1.262 + 1.263 + // bitwise unary operators 1.264 + /** @id MochiKit.Base.not */ 1.265 + not: function (a) { return ~a; }, 1.266 + /** @id MochiKit.Base.neg */ 1.267 + neg: function (a) { return -a; }, 1.268 + 1.269 + // binary operators 1.270 + /** @id MochiKit.Base.add */ 1.271 + add: function (a, b) { return a + b; }, 1.272 + /** @id MochiKit.Base.sub */ 1.273 + sub: function (a, b) { return a - b; }, 1.274 + /** @id MochiKit.Base.div */ 1.275 + div: function (a, b) { return a / b; }, 1.276 + /** @id MochiKit.Base.mod */ 1.277 + mod: function (a, b) { return a % b; }, 1.278 + /** @id MochiKit.Base.mul */ 1.279 + mul: function (a, b) { return a * b; }, 1.280 + 1.281 + // bitwise binary operators 1.282 + /** @id MochiKit.Base.and */ 1.283 + and: function (a, b) { return a & b; }, 1.284 + /** @id MochiKit.Base.or */ 1.285 + or: function (a, b) { return a | b; }, 1.286 + /** @id MochiKit.Base.xor */ 1.287 + xor: function (a, b) { return a ^ b; }, 1.288 + /** @id MochiKit.Base.lshift */ 1.289 + lshift: function (a, b) { return a << b; }, 1.290 + /** @id MochiKit.Base.rshift */ 1.291 + rshift: function (a, b) { return a >> b; }, 1.292 + /** @id MochiKit.Base.zrshift */ 1.293 + zrshift: function (a, b) { return a >>> b; }, 1.294 + 1.295 + // near-worthless built-in comparators 1.296 + /** @id MochiKit.Base.eq */ 1.297 + eq: function (a, b) { return a == b; }, 1.298 + /** @id MochiKit.Base.ne */ 1.299 + ne: function (a, b) { return a != b; }, 1.300 + /** @id MochiKit.Base.gt */ 1.301 + gt: function (a, b) { return a > b; }, 1.302 + /** @id MochiKit.Base.ge */ 1.303 + ge: function (a, b) { return a >= b; }, 1.304 + /** @id MochiKit.Base.lt */ 1.305 + lt: function (a, b) { return a < b; }, 1.306 + /** @id MochiKit.Base.le */ 1.307 + le: function (a, b) { return a <= b; }, 1.308 + 1.309 + // strict built-in comparators 1.310 + seq: function (a, b) { return a === b; }, 1.311 + sne: function (a, b) { return a !== b; }, 1.312 + 1.313 + // compare comparators 1.314 + /** @id MochiKit.Base.ceq */ 1.315 + ceq: function (a, b) { return MochiKit.Base.compare(a, b) === 0; }, 1.316 + /** @id MochiKit.Base.cne */ 1.317 + cne: function (a, b) { return MochiKit.Base.compare(a, b) !== 0; }, 1.318 + /** @id MochiKit.Base.cgt */ 1.319 + cgt: function (a, b) { return MochiKit.Base.compare(a, b) == 1; }, 1.320 + /** @id MochiKit.Base.cge */ 1.321 + cge: function (a, b) { return MochiKit.Base.compare(a, b) != -1; }, 1.322 + /** @id MochiKit.Base.clt */ 1.323 + clt: function (a, b) { return MochiKit.Base.compare(a, b) == -1; }, 1.324 + /** @id MochiKit.Base.cle */ 1.325 + cle: function (a, b) { return MochiKit.Base.compare(a, b) != 1; }, 1.326 + 1.327 + // binary logical operators 1.328 + /** @id MochiKit.Base.logand */ 1.329 + logand: function (a, b) { return a && b; }, 1.330 + /** @id MochiKit.Base.logor */ 1.331 + logor: function (a, b) { return a || b; }, 1.332 + /** @id MochiKit.Base.contains */ 1.333 + contains: function (a, b) { return b in a; } 1.334 + }, 1.335 + 1.336 + /** @id MochiKit.Base.forwardCall */ 1.337 + forwardCall: function (func) { 1.338 + return function () { 1.339 + return this[func].apply(this, arguments); 1.340 + }; 1.341 + }, 1.342 + 1.343 + /** @id MochiKit.Base.itemgetter */ 1.344 + itemgetter: function (func) { 1.345 + return function (arg) { 1.346 + return arg[func]; 1.347 + }; 1.348 + }, 1.349 + 1.350 + /** @id MochiKit.Base.typeMatcher */ 1.351 + typeMatcher: function (/* typ */) { 1.352 + var types = {}; 1.353 + for (var i = 0; i < arguments.length; i++) { 1.354 + var typ = arguments[i]; 1.355 + types[typ] = typ; 1.356 + } 1.357 + return function () { 1.358 + for (var i = 0; i < arguments.length; i++) { 1.359 + if (!(typeof(arguments[i]) in types)) { 1.360 + return false; 1.361 + } 1.362 + } 1.363 + return true; 1.364 + }; 1.365 + }, 1.366 + 1.367 + /** @id MochiKit.Base.isNull */ 1.368 + isNull: function (/* ... */) { 1.369 + for (var i = 0; i < arguments.length; i++) { 1.370 + if (arguments[i] !== null) { 1.371 + return false; 1.372 + } 1.373 + } 1.374 + return true; 1.375 + }, 1.376 + 1.377 + /** @id MochiKit.Base.isUndefinedOrNull */ 1.378 + isUndefinedOrNull: function (/* ... */) { 1.379 + for (var i = 0; i < arguments.length; i++) { 1.380 + var o = arguments[i]; 1.381 + if (!(typeof(o) == 'undefined' || o === null)) { 1.382 + return false; 1.383 + } 1.384 + } 1.385 + return true; 1.386 + }, 1.387 + 1.388 + /** @id MochiKit.Base.isEmpty */ 1.389 + isEmpty: function (obj) { 1.390 + return !MochiKit.Base.isNotEmpty.apply(this, arguments); 1.391 + }, 1.392 + 1.393 + /** @id MochiKit.Base.isNotEmpty */ 1.394 + isNotEmpty: function (obj) { 1.395 + for (var i = 0; i < arguments.length; i++) { 1.396 + var o = arguments[i]; 1.397 + if (!(o && o.length)) { 1.398 + return false; 1.399 + } 1.400 + } 1.401 + return true; 1.402 + }, 1.403 + 1.404 + /** @id MochiKit.Base.isArrayLike */ 1.405 + isArrayLike: function () { 1.406 + for (var i = 0; i < arguments.length; i++) { 1.407 + var o = arguments[i]; 1.408 + var typ = typeof(o); 1.409 + if ( 1.410 + (typ != 'object' && !(typ == 'function' && typeof(o.item) == 'function')) || 1.411 + o === null || 1.412 + typeof(o.length) != 'number' || 1.413 + o.nodeType === 3 || 1.414 + o.nodeType === 4 1.415 + ) { 1.416 + return false; 1.417 + } 1.418 + } 1.419 + return true; 1.420 + }, 1.421 + 1.422 + /** @id MochiKit.Base.isDateLike */ 1.423 + isDateLike: function () { 1.424 + for (var i = 0; i < arguments.length; i++) { 1.425 + var o = arguments[i]; 1.426 + if (typeof(o) != "object" || o === null 1.427 + || typeof(o.getTime) != 'function') { 1.428 + return false; 1.429 + } 1.430 + } 1.431 + return true; 1.432 + }, 1.433 + 1.434 + 1.435 + /** @id MochiKit.Base.xmap */ 1.436 + xmap: function (fn/*, obj... */) { 1.437 + if (fn === null) { 1.438 + return MochiKit.Base.extend(null, arguments, 1); 1.439 + } 1.440 + var rval = []; 1.441 + for (var i = 1; i < arguments.length; i++) { 1.442 + rval.push(fn(arguments[i])); 1.443 + } 1.444 + return rval; 1.445 + }, 1.446 + 1.447 + /** @id MochiKit.Base.map */ 1.448 + map: function (fn, lst/*, lst... */) { 1.449 + var m = MochiKit.Base; 1.450 + var itr = MochiKit.Iter; 1.451 + var isArrayLike = m.isArrayLike; 1.452 + if (arguments.length <= 2) { 1.453 + // allow an iterable to be passed 1.454 + if (!isArrayLike(lst)) { 1.455 + if (itr) { 1.456 + // fast path for map(null, iterable) 1.457 + lst = itr.list(lst); 1.458 + if (fn === null) { 1.459 + return lst; 1.460 + } 1.461 + } else { 1.462 + throw new TypeError("Argument not an array-like and MochiKit.Iter not present"); 1.463 + } 1.464 + } 1.465 + // fast path for map(null, lst) 1.466 + if (fn === null) { 1.467 + return m.extend(null, lst); 1.468 + } 1.469 + // disabled fast path for map(fn, lst) 1.470 + /* 1.471 + if (false && typeof(Array.prototype.map) == 'function') { 1.472 + // Mozilla fast-path 1.473 + return Array.prototype.map.call(lst, fn); 1.474 + } 1.475 + */ 1.476 + var rval = []; 1.477 + for (var i = 0; i < lst.length; i++) { 1.478 + rval.push(fn(lst[i])); 1.479 + } 1.480 + return rval; 1.481 + } else { 1.482 + // default for map(null, ...) is zip(...) 1.483 + if (fn === null) { 1.484 + fn = Array; 1.485 + } 1.486 + var length = null; 1.487 + for (i = 1; i < arguments.length; i++) { 1.488 + // allow iterables to be passed 1.489 + if (!isArrayLike(arguments[i])) { 1.490 + if (itr) { 1.491 + return itr.list(itr.imap.apply(null, arguments)); 1.492 + } else { 1.493 + throw new TypeError("Argument not an array-like and MochiKit.Iter not present"); 1.494 + } 1.495 + } 1.496 + // find the minimum length 1.497 + var l = arguments[i].length; 1.498 + if (length === null || length > l) { 1.499 + length = l; 1.500 + } 1.501 + } 1.502 + rval = []; 1.503 + for (i = 0; i < length; i++) { 1.504 + var args = []; 1.505 + for (var j = 1; j < arguments.length; j++) { 1.506 + args.push(arguments[j][i]); 1.507 + } 1.508 + rval.push(fn.apply(this, args)); 1.509 + } 1.510 + return rval; 1.511 + } 1.512 + }, 1.513 + 1.514 + /** @id MochiKit.Base.xfilter */ 1.515 + xfilter: function (fn/*, obj... */) { 1.516 + var rval = []; 1.517 + if (fn === null) { 1.518 + fn = MochiKit.Base.operator.truth; 1.519 + } 1.520 + for (var i = 1; i < arguments.length; i++) { 1.521 + var o = arguments[i]; 1.522 + if (fn(o)) { 1.523 + rval.push(o); 1.524 + } 1.525 + } 1.526 + return rval; 1.527 + }, 1.528 + 1.529 + /** @id MochiKit.Base.filter */ 1.530 + filter: function (fn, lst, self) { 1.531 + var rval = []; 1.532 + // allow an iterable to be passed 1.533 + var m = MochiKit.Base; 1.534 + if (!m.isArrayLike(lst)) { 1.535 + if (MochiKit.Iter) { 1.536 + lst = MochiKit.Iter.list(lst); 1.537 + } else { 1.538 + throw new TypeError("Argument not an array-like and MochiKit.Iter not present"); 1.539 + } 1.540 + } 1.541 + if (fn === null) { 1.542 + fn = m.operator.truth; 1.543 + } 1.544 + if (typeof(Array.prototype.filter) == 'function') { 1.545 + // Mozilla fast-path 1.546 + return Array.prototype.filter.call(lst, fn, self); 1.547 + } else if (typeof(self) == 'undefined' || self === null) { 1.548 + for (var i = 0; i < lst.length; i++) { 1.549 + var o = lst[i]; 1.550 + if (fn(o)) { 1.551 + rval.push(o); 1.552 + } 1.553 + } 1.554 + } else { 1.555 + for (i = 0; i < lst.length; i++) { 1.556 + o = lst[i]; 1.557 + if (fn.call(self, o)) { 1.558 + rval.push(o); 1.559 + } 1.560 + } 1.561 + } 1.562 + return rval; 1.563 + }, 1.564 + 1.565 + 1.566 + _wrapDumbFunction: function (func) { 1.567 + return function () { 1.568 + // fast path! 1.569 + switch (arguments.length) { 1.570 + case 0: return func(); 1.571 + case 1: return func(arguments[0]); 1.572 + case 2: return func(arguments[0], arguments[1]); 1.573 + case 3: return func(arguments[0], arguments[1], arguments[2]); 1.574 + } 1.575 + var args = []; 1.576 + for (var i = 0; i < arguments.length; i++) { 1.577 + args.push("arguments[" + i + "]"); 1.578 + } 1.579 + return eval("(func(" + args.join(",") + "))"); 1.580 + }; 1.581 + }, 1.582 + 1.583 + /** @id MochiKit.Base.methodcaller */ 1.584 + methodcaller: function (func/*, args... */) { 1.585 + var args = MochiKit.Base.extend(null, arguments, 1); 1.586 + if (typeof(func) == "function") { 1.587 + return function (obj) { 1.588 + return func.apply(obj, args); 1.589 + }; 1.590 + } else { 1.591 + return function (obj) { 1.592 + return obj[func].apply(obj, args); 1.593 + }; 1.594 + } 1.595 + }, 1.596 + 1.597 + /** @id MochiKit.Base.method */ 1.598 + method: function (self, func) { 1.599 + var m = MochiKit.Base; 1.600 + return m.bind.apply(this, m.extend([func, self], arguments, 2)); 1.601 + }, 1.602 + 1.603 + /** @id MochiKit.Base.compose */ 1.604 + compose: function (f1, f2/*, f3, ... fN */) { 1.605 + var fnlist = []; 1.606 + var m = MochiKit.Base; 1.607 + if (arguments.length === 0) { 1.608 + throw new TypeError("compose() requires at least one argument"); 1.609 + } 1.610 + for (var i = 0; i < arguments.length; i++) { 1.611 + var fn = arguments[i]; 1.612 + if (typeof(fn) != "function") { 1.613 + throw new TypeError(m.repr(fn) + " is not a function"); 1.614 + } 1.615 + fnlist.push(fn); 1.616 + } 1.617 + return function () { 1.618 + var args = arguments; 1.619 + for (var i = fnlist.length - 1; i >= 0; i--) { 1.620 + args = [fnlist[i].apply(this, args)]; 1.621 + } 1.622 + return args[0]; 1.623 + }; 1.624 + }, 1.625 + 1.626 + /** @id MochiKit.Base.bind */ 1.627 + bind: function (func, self/* args... */) { 1.628 + if (typeof(func) == "string") { 1.629 + func = self[func]; 1.630 + } 1.631 + var im_func = func.im_func; 1.632 + var im_preargs = func.im_preargs; 1.633 + var im_self = func.im_self; 1.634 + var m = MochiKit.Base; 1.635 + if (typeof(func) == "function" && typeof(func.apply) == "undefined") { 1.636 + // this is for cases where JavaScript sucks ass and gives you a 1.637 + // really dumb built-in function like alert() that doesn't have 1.638 + // an apply 1.639 + func = m._wrapDumbFunction(func); 1.640 + } 1.641 + if (typeof(im_func) != 'function') { 1.642 + im_func = func; 1.643 + } 1.644 + if (typeof(self) != 'undefined') { 1.645 + im_self = self; 1.646 + } 1.647 + if (typeof(im_preargs) == 'undefined') { 1.648 + im_preargs = []; 1.649 + } else { 1.650 + im_preargs = im_preargs.slice(); 1.651 + } 1.652 + m.extend(im_preargs, arguments, 2); 1.653 + var newfunc = function () { 1.654 + var args = arguments; 1.655 + var me = arguments.callee; 1.656 + if (me.im_preargs.length > 0) { 1.657 + args = m.concat(me.im_preargs, args); 1.658 + } 1.659 + var self = me.im_self; 1.660 + if (!self) { 1.661 + self = this; 1.662 + } 1.663 + return me.im_func.apply(self, args); 1.664 + }; 1.665 + newfunc.im_self = im_self; 1.666 + newfunc.im_func = im_func; 1.667 + newfunc.im_preargs = im_preargs; 1.668 + return newfunc; 1.669 + }, 1.670 + 1.671 + /** @id MochiKit.Base.bindLate */ 1.672 + bindLate: function (func, self/* args... */) { 1.673 + var m = MochiKit.Base; 1.674 + if (typeof(func) != "string") { 1.675 + return m.bind.apply(this, arguments); 1.676 + } 1.677 + var im_preargs = m.extend([], arguments, 2); 1.678 + var newfunc = function () { 1.679 + var args = arguments; 1.680 + var me = arguments.callee; 1.681 + if (me.im_preargs.length > 0) { 1.682 + args = m.concat(me.im_preargs, args); 1.683 + } 1.684 + var self = me.im_self; 1.685 + if (!self) { 1.686 + self = this; 1.687 + } 1.688 + return self[me.im_func].apply(self, args); 1.689 + }; 1.690 + newfunc.im_self = self; 1.691 + newfunc.im_func = func; 1.692 + newfunc.im_preargs = im_preargs; 1.693 + return newfunc; 1.694 + }, 1.695 + 1.696 + /** @id MochiKit.Base.bindMethods */ 1.697 + bindMethods: function (self) { 1.698 + var bind = MochiKit.Base.bind; 1.699 + for (var k in self) { 1.700 + var func = self[k]; 1.701 + if (typeof(func) == 'function') { 1.702 + self[k] = bind(func, self); 1.703 + } 1.704 + } 1.705 + }, 1.706 + 1.707 + /** @id MochiKit.Base.registerComparator */ 1.708 + registerComparator: function (name, check, comparator, /* optional */ override) { 1.709 + MochiKit.Base.comparatorRegistry.register(name, check, comparator, override); 1.710 + }, 1.711 + 1.712 + _primitives: {'boolean': true, 'string': true, 'number': true}, 1.713 + 1.714 + /** @id MochiKit.Base.compare */ 1.715 + compare: function (a, b) { 1.716 + if (a == b) { 1.717 + return 0; 1.718 + } 1.719 + var aIsNull = (typeof(a) == 'undefined' || a === null); 1.720 + var bIsNull = (typeof(b) == 'undefined' || b === null); 1.721 + if (aIsNull && bIsNull) { 1.722 + return 0; 1.723 + } else if (aIsNull) { 1.724 + return -1; 1.725 + } else if (bIsNull) { 1.726 + return 1; 1.727 + } 1.728 + var m = MochiKit.Base; 1.729 + // bool, number, string have meaningful comparisons 1.730 + var prim = m._primitives; 1.731 + if (!(typeof(a) in prim && typeof(b) in prim)) { 1.732 + try { 1.733 + return m.comparatorRegistry.match(a, b); 1.734 + } catch (e) { 1.735 + if (e != m.NotFound) { 1.736 + throw e; 1.737 + } 1.738 + } 1.739 + } 1.740 + if (a < b) { 1.741 + return -1; 1.742 + } else if (a > b) { 1.743 + return 1; 1.744 + } 1.745 + // These types can't be compared 1.746 + var repr = m.repr; 1.747 + throw new TypeError(repr(a) + " and " + repr(b) + " can not be compared"); 1.748 + }, 1.749 + 1.750 + /** @id MochiKit.Base.compareDateLike */ 1.751 + compareDateLike: function (a, b) { 1.752 + return MochiKit.Base.compare(a.getTime(), b.getTime()); 1.753 + }, 1.754 + 1.755 + /** @id MochiKit.Base.compareArrayLike */ 1.756 + compareArrayLike: function (a, b) { 1.757 + var compare = MochiKit.Base.compare; 1.758 + var count = a.length; 1.759 + var rval = 0; 1.760 + if (count > b.length) { 1.761 + rval = 1; 1.762 + count = b.length; 1.763 + } else if (count < b.length) { 1.764 + rval = -1; 1.765 + } 1.766 + for (var i = 0; i < count; i++) { 1.767 + var cmp = compare(a[i], b[i]); 1.768 + if (cmp) { 1.769 + return cmp; 1.770 + } 1.771 + } 1.772 + return rval; 1.773 + }, 1.774 + 1.775 + /** @id MochiKit.Base.registerRepr */ 1.776 + registerRepr: function (name, check, wrap, /* optional */override) { 1.777 + MochiKit.Base.reprRegistry.register(name, check, wrap, override); 1.778 + }, 1.779 + 1.780 + /** @id MochiKit.Base.repr */ 1.781 + repr: function (o) { 1.782 + if (typeof(o) == "undefined") { 1.783 + return "undefined"; 1.784 + } else if (o === null) { 1.785 + return "null"; 1.786 + } 1.787 + try { 1.788 + if (typeof(o.__repr__) == 'function') { 1.789 + return o.__repr__(); 1.790 + } else if (typeof(o.repr) == 'function' && o.repr != arguments.callee) { 1.791 + return o.repr(); 1.792 + } 1.793 + return MochiKit.Base.reprRegistry.match(o); 1.794 + } catch (e) { 1.795 + if (typeof(o.NAME) == 'string' && ( 1.796 + o.toString == Function.prototype.toString || 1.797 + o.toString == Object.prototype.toString 1.798 + )) { 1.799 + return o.NAME; 1.800 + } 1.801 + } 1.802 + try { 1.803 + var ostring = (o + ""); 1.804 + } catch (e) { 1.805 + return "[" + typeof(o) + "]"; 1.806 + } 1.807 + if (typeof(o) == "function") { 1.808 + ostring = ostring.replace(/^\s+/, "").replace(/\s+/g, " "); 1.809 + ostring = ostring.replace(/,(\S)/, ", $1"); 1.810 + var idx = ostring.indexOf("{"); 1.811 + if (idx != -1) { 1.812 + ostring = ostring.substr(0, idx) + "{...}"; 1.813 + } 1.814 + } 1.815 + return ostring; 1.816 + }, 1.817 + 1.818 + /** @id MochiKit.Base.reprArrayLike */ 1.819 + reprArrayLike: function (o) { 1.820 + var m = MochiKit.Base; 1.821 + return "[" + m.map(m.repr, o).join(", ") + "]"; 1.822 + }, 1.823 + 1.824 + /** @id MochiKit.Base.reprString */ 1.825 + reprString: function (o) { 1.826 + return ('"' + o.replace(/(["\\])/g, '\\$1') + '"' 1.827 + ).replace(/[\f]/g, "\\f" 1.828 + ).replace(/[\b]/g, "\\b" 1.829 + ).replace(/[\n]/g, "\\n" 1.830 + ).replace(/[\t]/g, "\\t" 1.831 + ).replace(/[\v]/g, "\\v" 1.832 + ).replace(/[\r]/g, "\\r"); 1.833 + }, 1.834 + 1.835 + /** @id MochiKit.Base.reprNumber */ 1.836 + reprNumber: function (o) { 1.837 + return o + ""; 1.838 + }, 1.839 + 1.840 + /** @id MochiKit.Base.registerJSON */ 1.841 + registerJSON: function (name, check, wrap, /* optional */override) { 1.842 + MochiKit.Base.jsonRegistry.register(name, check, wrap, override); 1.843 + }, 1.844 + 1.845 + 1.846 + /** @id MochiKit.Base.evalJSON */ 1.847 + evalJSON: function () { 1.848 + return eval("(" + MochiKit.Base._filterJSON(arguments[0]) + ")"); 1.849 + }, 1.850 + 1.851 + _filterJSON: function (s) { 1.852 + var m = s.match(/^\s*\/\*(.*)\*\/\s*$/); 1.853 + if (m) { 1.854 + return m[1]; 1.855 + } 1.856 + return s; 1.857 + }, 1.858 + 1.859 + /** @id MochiKit.Base.serializeJSON */ 1.860 + serializeJSON: function (o) { 1.861 + var objtype = typeof(o); 1.862 + if (objtype == "number" || objtype == "boolean") { 1.863 + return o + ""; 1.864 + } else if (o === null) { 1.865 + return "null"; 1.866 + } else if (objtype == "string") { 1.867 + var res = ""; 1.868 + for (var i = 0; i < o.length; i++) { 1.869 + var c = o.charAt(i); 1.870 + if (c == '\"') { 1.871 + res += '\\"'; 1.872 + } else if (c == '\\') { 1.873 + res += '\\\\'; 1.874 + } else if (c == '\b') { 1.875 + res += '\\b'; 1.876 + } else if (c == '\f') { 1.877 + res += '\\f'; 1.878 + } else if (c == '\n') { 1.879 + res += '\\n'; 1.880 + } else if (c == '\r') { 1.881 + res += '\\r'; 1.882 + } else if (c == '\t') { 1.883 + res += '\\t'; 1.884 + } else if (o.charCodeAt(i) <= 0x1F) { 1.885 + var hex = o.charCodeAt(i).toString(16); 1.886 + if (hex.length < 2) { 1.887 + hex = '0' + hex; 1.888 + } 1.889 + res += '\\u00' + hex.toUpperCase(); 1.890 + } else { 1.891 + res += c; 1.892 + } 1.893 + } 1.894 + return '"' + res + '"'; 1.895 + } 1.896 + // recurse 1.897 + var me = arguments.callee; 1.898 + // short-circuit for objects that support "json" serialization 1.899 + // if they return "self" then just pass-through... 1.900 + var newObj; 1.901 + if (typeof(o.__json__) == "function") { 1.902 + newObj = o.__json__(); 1.903 + if (o !== newObj) { 1.904 + return me(newObj); 1.905 + } 1.906 + } 1.907 + if (typeof(o.json) == "function") { 1.908 + newObj = o.json(); 1.909 + if (o !== newObj) { 1.910 + return me(newObj); 1.911 + } 1.912 + } 1.913 + // array 1.914 + if (objtype != "function" && typeof(o.length) == "number") { 1.915 + var res = []; 1.916 + for (var i = 0; i < o.length; i++) { 1.917 + var val = me(o[i]); 1.918 + if (typeof(val) != "string") { 1.919 + // skip non-serializable values 1.920 + continue; 1.921 + } 1.922 + res.push(val); 1.923 + } 1.924 + return "[" + res.join(", ") + "]"; 1.925 + } 1.926 + // look in the registry 1.927 + var m = MochiKit.Base; 1.928 + try { 1.929 + newObj = m.jsonRegistry.match(o); 1.930 + if (o !== newObj) { 1.931 + return me(newObj); 1.932 + } 1.933 + } catch (e) { 1.934 + if (e != m.NotFound) { 1.935 + // something really bad happened 1.936 + throw e; 1.937 + } 1.938 + } 1.939 + // undefined is outside of the spec 1.940 + if (objtype == "undefined") { 1.941 + throw new TypeError("undefined can not be serialized as JSON"); 1.942 + } 1.943 + // it's a function with no adapter, bad 1.944 + if (objtype == "function") { 1.945 + return null; 1.946 + } 1.947 + // generic object code path 1.948 + res = []; 1.949 + for (var k in o) { 1.950 + var useKey; 1.951 + if (typeof(k) == "number") { 1.952 + useKey = '"' + k + '"'; 1.953 + } else if (typeof(k) == "string") { 1.954 + useKey = me(k); 1.955 + } else { 1.956 + // skip non-string or number keys 1.957 + continue; 1.958 + } 1.959 + val = me(o[k]); 1.960 + if (typeof(val) != "string") { 1.961 + // skip non-serializable values 1.962 + continue; 1.963 + } 1.964 + res.push(useKey + ":" + val); 1.965 + } 1.966 + return "{" + res.join(", ") + "}"; 1.967 + }, 1.968 + 1.969 + 1.970 + /** @id MochiKit.Base.objEqual */ 1.971 + objEqual: function (a, b) { 1.972 + return (MochiKit.Base.compare(a, b) === 0); 1.973 + }, 1.974 + 1.975 + /** @id MochiKit.Base.arrayEqual */ 1.976 + arrayEqual: function (self, arr) { 1.977 + if (self.length != arr.length) { 1.978 + return false; 1.979 + } 1.980 + return (MochiKit.Base.compare(self, arr) === 0); 1.981 + }, 1.982 + 1.983 + /** @id MochiKit.Base.concat */ 1.984 + concat: function (/* lst... */) { 1.985 + var rval = []; 1.986 + var extend = MochiKit.Base.extend; 1.987 + for (var i = 0; i < arguments.length; i++) { 1.988 + extend(rval, arguments[i]); 1.989 + } 1.990 + return rval; 1.991 + }, 1.992 + 1.993 + /** @id MochiKit.Base.keyComparator */ 1.994 + keyComparator: function (key/* ... */) { 1.995 + // fast-path for single key comparisons 1.996 + var m = MochiKit.Base; 1.997 + var compare = m.compare; 1.998 + if (arguments.length == 1) { 1.999 + return function (a, b) { 1.1000 + return compare(a[key], b[key]); 1.1001 + }; 1.1002 + } 1.1003 + var compareKeys = m.extend(null, arguments); 1.1004 + return function (a, b) { 1.1005 + var rval = 0; 1.1006 + // keep comparing until something is inequal or we run out of 1.1007 + // keys to compare 1.1008 + for (var i = 0; (rval === 0) && (i < compareKeys.length); i++) { 1.1009 + var key = compareKeys[i]; 1.1010 + rval = compare(a[key], b[key]); 1.1011 + } 1.1012 + return rval; 1.1013 + }; 1.1014 + }, 1.1015 + 1.1016 + /** @id MochiKit.Base.reverseKeyComparator */ 1.1017 + reverseKeyComparator: function (key) { 1.1018 + var comparator = MochiKit.Base.keyComparator.apply(this, arguments); 1.1019 + return function (a, b) { 1.1020 + return comparator(b, a); 1.1021 + }; 1.1022 + }, 1.1023 + 1.1024 + /** @id MochiKit.Base.partial */ 1.1025 + partial: function (func) { 1.1026 + var m = MochiKit.Base; 1.1027 + return m.bind.apply(this, m.extend([func, undefined], arguments, 1)); 1.1028 + }, 1.1029 + 1.1030 + /** @id MochiKit.Base.listMinMax */ 1.1031 + listMinMax: function (which, lst) { 1.1032 + if (lst.length === 0) { 1.1033 + return null; 1.1034 + } 1.1035 + var cur = lst[0]; 1.1036 + var compare = MochiKit.Base.compare; 1.1037 + for (var i = 1; i < lst.length; i++) { 1.1038 + var o = lst[i]; 1.1039 + if (compare(o, cur) == which) { 1.1040 + cur = o; 1.1041 + } 1.1042 + } 1.1043 + return cur; 1.1044 + }, 1.1045 + 1.1046 + /** @id MochiKit.Base.objMax */ 1.1047 + objMax: function (/* obj... */) { 1.1048 + return MochiKit.Base.listMinMax(1, arguments); 1.1049 + }, 1.1050 + 1.1051 + /** @id MochiKit.Base.objMin */ 1.1052 + objMin: function (/* obj... */) { 1.1053 + return MochiKit.Base.listMinMax(-1, arguments); 1.1054 + }, 1.1055 + 1.1056 + /** @id MochiKit.Base.findIdentical */ 1.1057 + findIdentical: function (lst, value, start/* = 0 */, /* optional */end) { 1.1058 + if (typeof(end) == "undefined" || end === null) { 1.1059 + end = lst.length; 1.1060 + } 1.1061 + if (typeof(start) == "undefined" || start === null) { 1.1062 + start = 0; 1.1063 + } 1.1064 + for (var i = start; i < end; i++) { 1.1065 + if (lst[i] === value) { 1.1066 + return i; 1.1067 + } 1.1068 + } 1.1069 + return -1; 1.1070 + }, 1.1071 + 1.1072 + /** @id MochiKit.Base.mean */ 1.1073 + mean: function(/* lst... */) { 1.1074 + /* http://www.nist.gov/dads/HTML/mean.html */ 1.1075 + var sum = 0; 1.1076 + 1.1077 + var m = MochiKit.Base; 1.1078 + var args = m.extend(null, arguments); 1.1079 + var count = args.length; 1.1080 + 1.1081 + while (args.length) { 1.1082 + var o = args.shift(); 1.1083 + if (o && typeof(o) == "object" && typeof(o.length) == "number") { 1.1084 + count += o.length - 1; 1.1085 + for (var i = o.length - 1; i >= 0; i--) { 1.1086 + sum += o[i]; 1.1087 + } 1.1088 + } else { 1.1089 + sum += o; 1.1090 + } 1.1091 + } 1.1092 + 1.1093 + if (count <= 0) { 1.1094 + throw new TypeError('mean() requires at least one argument'); 1.1095 + } 1.1096 + 1.1097 + return sum/count; 1.1098 + }, 1.1099 + 1.1100 + /** @id MochiKit.Base.median */ 1.1101 + median: function(/* lst... */) { 1.1102 + /* http://www.nist.gov/dads/HTML/median.html */ 1.1103 + var data = MochiKit.Base.flattenArguments(arguments); 1.1104 + if (data.length === 0) { 1.1105 + throw new TypeError('median() requires at least one argument'); 1.1106 + } 1.1107 + data.sort(compare); 1.1108 + if (data.length % 2 == 0) { 1.1109 + var upper = data.length / 2; 1.1110 + return (data[upper] + data[upper - 1]) / 2; 1.1111 + } else { 1.1112 + return data[(data.length - 1) / 2]; 1.1113 + } 1.1114 + }, 1.1115 + 1.1116 + /** @id MochiKit.Base.findValue */ 1.1117 + findValue: function (lst, value, start/* = 0 */, /* optional */end) { 1.1118 + if (typeof(end) == "undefined" || end === null) { 1.1119 + end = lst.length; 1.1120 + } 1.1121 + if (typeof(start) == "undefined" || start === null) { 1.1122 + start = 0; 1.1123 + } 1.1124 + var cmp = MochiKit.Base.compare; 1.1125 + for (var i = start; i < end; i++) { 1.1126 + if (cmp(lst[i], value) === 0) { 1.1127 + return i; 1.1128 + } 1.1129 + } 1.1130 + return -1; 1.1131 + }, 1.1132 + 1.1133 + /** @id MochiKit.Base.nodeWalk */ 1.1134 + nodeWalk: function (node, visitor) { 1.1135 + var nodes = [node]; 1.1136 + var extend = MochiKit.Base.extend; 1.1137 + while (nodes.length) { 1.1138 + var res = visitor(nodes.shift()); 1.1139 + if (res) { 1.1140 + extend(nodes, res); 1.1141 + } 1.1142 + } 1.1143 + }, 1.1144 + 1.1145 + 1.1146 + /** @id MochiKit.Base.nameFunctions */ 1.1147 + nameFunctions: function (namespace) { 1.1148 + var base = namespace.NAME; 1.1149 + if (typeof(base) == 'undefined') { 1.1150 + base = ''; 1.1151 + } else { 1.1152 + base = base + '.'; 1.1153 + } 1.1154 + for (var name in namespace) { 1.1155 + var o = namespace[name]; 1.1156 + if (typeof(o) == 'function' && typeof(o.NAME) == 'undefined') { 1.1157 + try { 1.1158 + o.NAME = base + name; 1.1159 + } catch (e) { 1.1160 + // pass 1.1161 + } 1.1162 + } 1.1163 + } 1.1164 + }, 1.1165 + 1.1166 + 1.1167 + /** @id MochiKit.Base.queryString */ 1.1168 + queryString: function (names, values) { 1.1169 + // check to see if names is a string or a DOM element, and if 1.1170 + // MochiKit.DOM is available. If so, drop it like it's a form 1.1171 + // Ugliest conditional in MochiKit? Probably! 1.1172 + if (typeof(MochiKit.DOM) != "undefined" && arguments.length == 1 1.1173 + && (typeof(names) == "string" || ( 1.1174 + typeof(names.nodeType) != "undefined" && names.nodeType > 0 1.1175 + )) 1.1176 + ) { 1.1177 + var kv = MochiKit.DOM.formContents(names); 1.1178 + names = kv[0]; 1.1179 + values = kv[1]; 1.1180 + } else if (arguments.length == 1) { 1.1181 + // Allow the return value of formContents to be passed directly 1.1182 + if (typeof(names.length) == "number" && names.length == 2) { 1.1183 + return arguments.callee(names[0], names[1]); 1.1184 + } 1.1185 + var o = names; 1.1186 + names = []; 1.1187 + values = []; 1.1188 + for (var k in o) { 1.1189 + var v = o[k]; 1.1190 + if (typeof(v) == "function") { 1.1191 + continue; 1.1192 + } else if (MochiKit.Base.isArrayLike(v)){ 1.1193 + for (var i = 0; i < v.length; i++) { 1.1194 + names.push(k); 1.1195 + values.push(v[i]); 1.1196 + } 1.1197 + } else { 1.1198 + names.push(k); 1.1199 + values.push(v); 1.1200 + } 1.1201 + } 1.1202 + } 1.1203 + var rval = []; 1.1204 + var len = Math.min(names.length, values.length); 1.1205 + var urlEncode = MochiKit.Base.urlEncode; 1.1206 + for (var i = 0; i < len; i++) { 1.1207 + v = values[i]; 1.1208 + if (typeof(v) != 'undefined' && v !== null) { 1.1209 + rval.push(urlEncode(names[i]) + "=" + urlEncode(v)); 1.1210 + } 1.1211 + } 1.1212 + return rval.join("&"); 1.1213 + }, 1.1214 + 1.1215 + 1.1216 + /** @id MochiKit.Base.parseQueryString */ 1.1217 + parseQueryString: function (encodedString, useArrays) { 1.1218 + // strip a leading '?' from the encoded string 1.1219 + var qstr = (encodedString.charAt(0) == "?") 1.1220 + ? encodedString.substring(1) 1.1221 + : encodedString; 1.1222 + var pairs = qstr.replace(/\+/g, "%20").split(/\&\;|\&\#38\;|\&|\&/); 1.1223 + var o = {}; 1.1224 + var decode; 1.1225 + if (typeof(decodeURIComponent) != "undefined") { 1.1226 + decode = decodeURIComponent; 1.1227 + } else { 1.1228 + decode = unescape; 1.1229 + } 1.1230 + if (useArrays) { 1.1231 + for (var i = 0; i < pairs.length; i++) { 1.1232 + var pair = pairs[i].split("="); 1.1233 + var name = decode(pair.shift()); 1.1234 + if (!name) { 1.1235 + continue; 1.1236 + } 1.1237 + var arr = o[name]; 1.1238 + if (!(arr instanceof Array)) { 1.1239 + arr = []; 1.1240 + o[name] = arr; 1.1241 + } 1.1242 + arr.push(decode(pair.join("="))); 1.1243 + } 1.1244 + } else { 1.1245 + for (i = 0; i < pairs.length; i++) { 1.1246 + pair = pairs[i].split("="); 1.1247 + var name = pair.shift(); 1.1248 + if (!name) { 1.1249 + continue; 1.1250 + } 1.1251 + o[decode(name)] = decode(pair.join("=")); 1.1252 + } 1.1253 + } 1.1254 + return o; 1.1255 + } 1.1256 +}); 1.1257 + 1.1258 +/** @id MochiKit.Base.AdapterRegistry */ 1.1259 +MochiKit.Base.AdapterRegistry = function () { 1.1260 + this.pairs = []; 1.1261 +}; 1.1262 + 1.1263 +MochiKit.Base.AdapterRegistry.prototype = { 1.1264 + /** @id MochiKit.Base.AdapterRegistry.prototype.register */ 1.1265 + register: function (name, check, wrap, /* optional */ override) { 1.1266 + if (override) { 1.1267 + this.pairs.unshift([name, check, wrap]); 1.1268 + } else { 1.1269 + this.pairs.push([name, check, wrap]); 1.1270 + } 1.1271 + }, 1.1272 + 1.1273 + /** @id MochiKit.Base.AdapterRegistry.prototype.match */ 1.1274 + match: function (/* ... */) { 1.1275 + for (var i = 0; i < this.pairs.length; i++) { 1.1276 + var pair = this.pairs[i]; 1.1277 + if (pair[1].apply(this, arguments)) { 1.1278 + return pair[2].apply(this, arguments); 1.1279 + } 1.1280 + } 1.1281 + throw MochiKit.Base.NotFound; 1.1282 + }, 1.1283 + 1.1284 + /** @id MochiKit.Base.AdapterRegistry.prototype.unregister */ 1.1285 + unregister: function (name) { 1.1286 + for (var i = 0; i < this.pairs.length; i++) { 1.1287 + var pair = this.pairs[i]; 1.1288 + if (pair[0] == name) { 1.1289 + this.pairs.splice(i, 1); 1.1290 + return true; 1.1291 + } 1.1292 + } 1.1293 + return false; 1.1294 + } 1.1295 +}; 1.1296 + 1.1297 + 1.1298 +MochiKit.Base.EXPORT = [ 1.1299 + "flattenArray", 1.1300 + "noop", 1.1301 + "camelize", 1.1302 + "counter", 1.1303 + "clone", 1.1304 + "extend", 1.1305 + "update", 1.1306 + "updatetree", 1.1307 + "setdefault", 1.1308 + "keys", 1.1309 + "values", 1.1310 + "items", 1.1311 + "NamedError", 1.1312 + "operator", 1.1313 + "forwardCall", 1.1314 + "itemgetter", 1.1315 + "typeMatcher", 1.1316 + "isCallable", 1.1317 + "isUndefined", 1.1318 + "isUndefinedOrNull", 1.1319 + "isNull", 1.1320 + "isEmpty", 1.1321 + "isNotEmpty", 1.1322 + "isArrayLike", 1.1323 + "isDateLike", 1.1324 + "xmap", 1.1325 + "map", 1.1326 + "xfilter", 1.1327 + "filter", 1.1328 + "methodcaller", 1.1329 + "compose", 1.1330 + "bind", 1.1331 + "bindLate", 1.1332 + "bindMethods", 1.1333 + "NotFound", 1.1334 + "AdapterRegistry", 1.1335 + "registerComparator", 1.1336 + "compare", 1.1337 + "registerRepr", 1.1338 + "repr", 1.1339 + "objEqual", 1.1340 + "arrayEqual", 1.1341 + "concat", 1.1342 + "keyComparator", 1.1343 + "reverseKeyComparator", 1.1344 + "partial", 1.1345 + "merge", 1.1346 + "listMinMax", 1.1347 + "listMax", 1.1348 + "listMin", 1.1349 + "objMax", 1.1350 + "objMin", 1.1351 + "nodeWalk", 1.1352 + "zip", 1.1353 + "urlEncode", 1.1354 + "queryString", 1.1355 + "serializeJSON", 1.1356 + "registerJSON", 1.1357 + "evalJSON", 1.1358 + "parseQueryString", 1.1359 + "findValue", 1.1360 + "findIdentical", 1.1361 + "flattenArguments", 1.1362 + "method", 1.1363 + "average", 1.1364 + "mean", 1.1365 + "median" 1.1366 +]; 1.1367 + 1.1368 +MochiKit.Base.EXPORT_OK = [ 1.1369 + "nameFunctions", 1.1370 + "comparatorRegistry", 1.1371 + "reprRegistry", 1.1372 + "jsonRegistry", 1.1373 + "compareDateLike", 1.1374 + "compareArrayLike", 1.1375 + "reprArrayLike", 1.1376 + "reprString", 1.1377 + "reprNumber" 1.1378 +]; 1.1379 + 1.1380 +MochiKit.Base._exportSymbols = function (globals, module) { 1.1381 + if (!MochiKit.__export__) { 1.1382 + return; 1.1383 + } 1.1384 + var all = module.EXPORT_TAGS[":all"]; 1.1385 + for (var i = 0; i < all.length; i++) { 1.1386 + globals[all[i]] = module[all[i]]; 1.1387 + } 1.1388 +}; 1.1389 + 1.1390 +MochiKit.Base.__new__ = function () { 1.1391 + // A singleton raised when no suitable adapter is found 1.1392 + var m = this; 1.1393 + 1.1394 + // convenience 1.1395 + /** @id MochiKit.Base.noop */ 1.1396 + m.noop = m.operator.identity; 1.1397 + 1.1398 + // Backwards compat 1.1399 + m.forward = m.forwardCall; 1.1400 + m.find = m.findValue; 1.1401 + 1.1402 + if (typeof(encodeURIComponent) != "undefined") { 1.1403 + /** @id MochiKit.Base.urlEncode */ 1.1404 + m.urlEncode = function (unencoded) { 1.1405 + return encodeURIComponent(unencoded).replace(/\'/g, '%27'); 1.1406 + }; 1.1407 + } else { 1.1408 + m.urlEncode = function (unencoded) { 1.1409 + return escape(unencoded 1.1410 + ).replace(/\+/g, '%2B' 1.1411 + ).replace(/\"/g,'%22' 1.1412 + ).rval.replace(/\'/g, '%27'); 1.1413 + }; 1.1414 + } 1.1415 + 1.1416 + /** @id MochiKit.Base.NamedError */ 1.1417 + m.NamedError = function (name) { 1.1418 + this.message = name; 1.1419 + this.name = name; 1.1420 + }; 1.1421 + m.NamedError.prototype = new Error(); 1.1422 + m.update(m.NamedError.prototype, { 1.1423 + repr: function () { 1.1424 + if (this.message && this.message != this.name) { 1.1425 + return this.name + "(" + m.repr(this.message) + ")"; 1.1426 + } else { 1.1427 + return this.name + "()"; 1.1428 + } 1.1429 + }, 1.1430 + toString: m.forwardCall("repr") 1.1431 + }); 1.1432 + 1.1433 + /** @id MochiKit.Base.NotFound */ 1.1434 + m.NotFound = new m.NamedError("MochiKit.Base.NotFound"); 1.1435 + 1.1436 + 1.1437 + /** @id MochiKit.Base.listMax */ 1.1438 + m.listMax = m.partial(m.listMinMax, 1); 1.1439 + /** @id MochiKit.Base.listMin */ 1.1440 + m.listMin = m.partial(m.listMinMax, -1); 1.1441 + 1.1442 + /** @id MochiKit.Base.isCallable */ 1.1443 + m.isCallable = m.typeMatcher('function'); 1.1444 + /** @id MochiKit.Base.isUndefined */ 1.1445 + m.isUndefined = m.typeMatcher('undefined'); 1.1446 + 1.1447 + /** @id MochiKit.Base.merge */ 1.1448 + m.merge = m.partial(m.update, null); 1.1449 + /** @id MochiKit.Base.zip */ 1.1450 + m.zip = m.partial(m.map, null); 1.1451 + 1.1452 + /** @id MochiKit.Base.average */ 1.1453 + m.average = m.mean; 1.1454 + 1.1455 + /** @id MochiKit.Base.comparatorRegistry */ 1.1456 + m.comparatorRegistry = new m.AdapterRegistry(); 1.1457 + m.registerComparator("dateLike", m.isDateLike, m.compareDateLike); 1.1458 + m.registerComparator("arrayLike", m.isArrayLike, m.compareArrayLike); 1.1459 + 1.1460 + /** @id MochiKit.Base.reprRegistry */ 1.1461 + m.reprRegistry = new m.AdapterRegistry(); 1.1462 + m.registerRepr("arrayLike", m.isArrayLike, m.reprArrayLike); 1.1463 + m.registerRepr("string", m.typeMatcher("string"), m.reprString); 1.1464 + m.registerRepr("numbers", m.typeMatcher("number", "boolean"), m.reprNumber); 1.1465 + 1.1466 + /** @id MochiKit.Base.jsonRegistry */ 1.1467 + m.jsonRegistry = new m.AdapterRegistry(); 1.1468 + 1.1469 + var all = m.concat(m.EXPORT, m.EXPORT_OK); 1.1470 + m.EXPORT_TAGS = { 1.1471 + ":common": m.concat(m.EXPORT_OK), 1.1472 + ":all": all 1.1473 + }; 1.1474 + 1.1475 + m.nameFunctions(this); 1.1476 + 1.1477 +}; 1.1478 + 1.1479 +MochiKit.Base.__new__(); 1.1480 + 1.1481 +// 1.1482 +// XXX: Internet Explorer blows 1.1483 +// 1.1484 +if (MochiKit.__export__) { 1.1485 + compare = MochiKit.Base.compare; 1.1486 + compose = MochiKit.Base.compose; 1.1487 + serializeJSON = MochiKit.Base.serializeJSON; 1.1488 + mean = MochiKit.Base.mean; 1.1489 + median = MochiKit.Base.median; 1.1490 +} 1.1491 + 1.1492 +MochiKit.Base._exportSymbols(this, MochiKit.Base);