📄 base.js
字号:
/***MochiKit.Base 1.3.1See <http://mochikit.com/> for documentation, downloads, license, etc.(c) 2005 Bob Ippolito. All rights Reserved.***/if (typeof(dojo) != 'undefined') { dojo.provide("MochiKit.Base");}if (typeof(MochiKit) == 'undefined') { MochiKit = {};}if (typeof(MochiKit.Base) == 'undefined') { MochiKit.Base = {};}MochiKit.Base.VERSION = "1.3.1";MochiKit.Base.NAME = "MochiKit.Base";MochiKit.Base.update = function (self, obj/*, ... */) { if (self === null) { self = {}; } for (var i = 1; i < arguments.length; i++) { var o = arguments[i]; if (typeof(o) != 'undefined' && o !== null) { for (var k in o) { self[k] = o[k]; } } } return self;};MochiKit.Base.update(MochiKit.Base, { __repr__: function () { return "[" + this.NAME + " " + this.VERSION + "]"; }, toString: function () { return this.__repr__(); }, counter: function (n/* = 1 */) { if (arguments.length === 0) { n = 1; } return function () { return n++; }; }, clone: function (obj) { var me = arguments.callee; if (arguments.length == 1) { me.prototype = obj; return new me(); } }, flattenArguments: function (lst/* ...*/) { var res = []; var m = MochiKit.Base; var args = m.extend(null, arguments); while (args.length) { var o = args.shift(); if (o && typeof(o) == "object" && typeof(o.length) == "number") { for (var i = o.length - 1; i >= 0; i--) { args.unshift(o[i]); } } else { res.push(o); } } return res; }, extend: function (self, obj, /* optional */skip) { // Extend an array with an array-like object starting // from the skip index if (!skip) { skip = 0; } if (obj) { // allow iterable fall-through, but skip the full isArrayLike // check for speed, this is called often. var l = obj.length; if (typeof(l) != 'number' /* !isArrayLike(obj) */) { if (typeof(MochiKit.Iter) != "undefined") { obj = MochiKit.Iter.list(obj); l = obj.length; } else { throw new TypeError("Argument not an array-like and MochiKit.Iter not present"); } } if (!self) { self = []; } for (var i = skip; i < l; i++) { self.push(obj[i]); } } // This mutates, but it's convenient to return because // it's often used like a constructor when turning some // ghetto array-like to a real array return self; }, updatetree: function (self, obj/*, ...*/) { if (self === null) { self = {}; } for (var i = 1; i < arguments.length; i++) { var o = arguments[i]; if (typeof(o) != 'undefined' && o !== null) { for (var k in o) { var v = o[k]; if (typeof(self[k]) == 'object' && typeof(v) == 'object') { arguments.callee(self[k], v); } else { self[k] = v; } } } } return self; }, setdefault: function (self, obj/*, ...*/) { if (self === null) { self = {}; } for (var i = 1; i < arguments.length; i++) { var o = arguments[i]; for (var k in o) { if (!(k in self)) { self[k] = o[k]; } } } return self; }, keys: function (obj) { var rval = []; for (var prop in obj) { rval.push(prop); } return rval; }, items: function (obj) { var rval = []; var e; for (var prop in obj) { var v; try { v = obj[prop]; } catch (e) { continue; } rval.push([prop, v]); } return rval; }, _newNamedError: function (module, name, func) { func.prototype = new MochiKit.Base.NamedError(module.NAME + "." + name); module[name] = func; }, operator: { // unary logic operators truth: function (a) { return !!a; }, lognot: function (a) { return !a; }, identity: function (a) { return a; }, // bitwise unary operators not: function (a) { return ~a; }, neg: function (a) { return -a; }, // binary operators add: function (a, b) { return a + b; }, sub: function (a, b) { return a - b; }, div: function (a, b) { return a / b; }, mod: function (a, b) { return a % b; }, mul: function (a, b) { return a * b; }, // bitwise binary operators and: function (a, b) { return a & b; }, or: function (a, b) { return a | b; }, xor: function (a, b) { return a ^ b; }, lshift: function (a, b) { return a << b; }, rshift: function (a, b) { return a >> b; }, zrshift: function (a, b) { return a >>> b; }, // near-worthless built-in comparators eq: function (a, b) { return a == b; }, ne: function (a, b) { return a != b; }, gt: function (a, b) { return a > b; }, ge: function (a, b) { return a >= b; }, lt: function (a, b) { return a < b; }, le: function (a, b) { return a <= b; }, // compare comparators ceq: function (a, b) { return MochiKit.Base.compare(a, b) === 0; }, cne: function (a, b) { return MochiKit.Base.compare(a, b) !== 0; }, cgt: function (a, b) { return MochiKit.Base.compare(a, b) == 1; }, cge: function (a, b) { return MochiKit.Base.compare(a, b) != -1; }, clt: function (a, b) { return MochiKit.Base.compare(a, b) == -1; }, cle: function (a, b) { return MochiKit.Base.compare(a, b) != 1; }, // binary logical operators logand: function (a, b) { return a && b; }, logor: function (a, b) { return a || b; }, contains: function (a, b) { return b in a; } }, forwardCall: function (func) { return function () { return this[func].apply(this, arguments); }; }, itemgetter: function (func) { return function (arg) { return arg[func]; }; }, typeMatcher: function (/* typ */) { var types = {}; for (var i = 0; i < arguments.length; i++) { var typ = arguments[i]; types[typ] = typ; } return function () { for (var i = 0; i < arguments.length; i++) { if (!(typeof(arguments[i]) in types)) { return false; } } return true; }; }, isNull: function (/* ... */) { for (var i = 0; i < arguments.length; i++) { if (arguments[i] !== null) { return false; } } return true; }, isUndefinedOrNull: function (/* ... */) { for (var i = 0; i < arguments.length; i++) { var o = arguments[i]; if (!(typeof(o) == 'undefined' || o === null)) { return false; } } return true; }, isEmpty: function (obj) { return !MochiKit.Base.isNotEmpty.apply(this, arguments); }, isNotEmpty: function (obj) { for (var i = 0; i < arguments.length; i++) { var o = arguments[i]; if (!(o && o.length)) { return false; } } return true; }, isArrayLike: function () { for (var i = 0; i < arguments.length; i++) { var o = arguments[i]; var typ = typeof(o); if ( (typ != 'object' && !(typ == 'function' && typeof(o.item) == 'function')) || o === null || typeof(o.length) != 'number' ) { return false; } } return true; }, isDateLike: function () { for (var i = 0; i < arguments.length; i++) { var o = arguments[i]; if (typeof(o) != "object" || o === null || typeof(o.getTime) != 'function') { return false; } } return true; }, xmap: function (fn/*, obj... */) { if (fn === null) { return MochiKit.Base.extend(null, arguments, 1); } var rval = []; for (var i = 1; i < arguments.length; i++) { rval.push(fn(arguments[i])); } return rval; }, map: function (fn, lst/*, lst... */) { var m = MochiKit.Base; var itr = MochiKit.Iter; var isArrayLike = m.isArrayLike; if (arguments.length <= 2) { // allow an iterable to be passed if (!isArrayLike(lst)) { if (itr) { // fast path for map(null, iterable) lst = itr.list(lst); if (fn === null) { return lst; } } else { throw new TypeError("Argument not an array-like and MochiKit.Iter not present"); } } // fast path for map(null, lst) if (fn === null) { return m.extend(null, lst); } // disabled fast path for map(fn, lst) /* if (false && typeof(Array.prototype.map) == 'function') { // Mozilla fast-path return Array.prototype.map.call(lst, fn); } */ var rval = []; for (var i = 0; i < lst.length; i++) { rval.push(fn(lst[i])); } return rval; } else { // default for map(null, ...) is zip(...) if (fn === null) { fn = Array; } var length = null; for (i = 1; i < arguments.length; i++) { // allow iterables to be passed if (!isArrayLike(arguments[i])) { if (itr) { return itr.list(itr.imap.apply(null, arguments)); } else { throw new TypeError("Argument not an array-like and MochiKit.Iter not present"); } } // find the minimum length var l = arguments[i].length; if (length === null || length > l) { length = l; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -