/** @id MochiKit.Base.camelize */
camelize: function (selector) { /* from dojo.style.toCamelCase */ var arr = selector.split('-'); var cc = arr[0]; for (var i = 1; i < arr.length; i++) {
cc += arr[i].charAt(0).toUpperCase() + arr[i].substring(1);
} return cc;
},
/** @id MochiKit.Base.counter */
counter: function (n/* = 1 */) { if (arguments.length === 0) {
n = 1;
} returnfunction () { return n++;
};
},
/** @id MochiKit.Base.clone */
clone: function (obj) { var me = arguments.callee; if (arguments.length == 1) {
me.prototype = obj; returnnew me();
}
},
_flattenArray: function (res, lst) { for (var i = 0; i < lst.length; i++) { var o = lst[i]; if (o instanceof Array) {
arguments.callee(res, o);
} else {
res.push(o);
}
} return res;
},
/** @id MochiKit.Base.flattenArguments */
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;
},
/** @id MochiKit.Base.extend */
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 { thrownew 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;
},
/** @id MochiKit.Base.updatetree */
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;
},
/** @id MochiKit.Base.setdefault */
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;
},
/** @id MochiKit.Base.keys */
keys: function (obj) { var rval = []; for (var prop in obj) {
rval.push(prop);
} return rval;
},
/** @id MochiKit.Base.values */
values: function (obj) { var rval = []; for (var prop in obj) {
rval.push(obj[prop]);
} return rval;
},
/** @id MochiKit.Base.items */
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;
},
// binary operators /** @id MochiKit.Base.add */
add: function (a, b) { return a + b; }, /** @id MochiKit.Base.sub */
sub: function (a, b) { return a - b; }, /** @id MochiKit.Base.div */
div: function (a, b) { return a / b; }, /** @id MochiKit.Base.mod */
mod: function (a, b) { return a % b; }, /** @id MochiKit.Base.mul */
mul: function (a, b) { return a * b; },
// bitwise binary operators /** @id MochiKit.Base.and */
and: function (a, b) { return a & b; }, /** @id MochiKit.Base.or */
or: function (a, b) { return a | b; }, /** @id MochiKit.Base.xor */
xor: function (a, b) { return a ^ b; }, /** @id MochiKit.Base.lshift */
lshift: function (a, b) { return a << b; }, /** @id MochiKit.Base.rshift */
rshift: function (a, b) { return a >> b; }, /** @id MochiKit.Base.zrshift */
zrshift: function (a, b) { return a >>> b; },
// near-worthless built-in comparators /** @id MochiKit.Base.eq */
eq: function (a, b) { return a == b; }, /** @id MochiKit.Base.ne */
ne: function (a, b) { return a != b; }, /** @id MochiKit.Base.gt */
gt: function (a, b) { return a > b; }, /** @id MochiKit.Base.ge */
ge: function (a, b) { return a >= b; }, /** @id MochiKit.Base.lt */
lt: function (a, b) { return a < b; }, /** @id MochiKit.Base.le */
le: function (a, b) { return a <= b; },
// strict built-in comparators
seq: function (a, b) { return a === b; },
sne: function (a, b) { return a !== b; },
// compare comparators /** @id MochiKit.Base.ceq */
ceq: function (a, b) { return MochiKit.Base.compare(a, b) === 0; }, /** @id MochiKit.Base.cne */
cne: function (a, b) { return MochiKit.Base.compare(a, b) !== 0; }, /** @id MochiKit.Base.cgt */
cgt: function (a, b) { return MochiKit.Base.compare(a, b) == 1; }, /** @id MochiKit.Base.cge */
cge: function (a, b) { return MochiKit.Base.compare(a, b) != -1; }, /** @id MochiKit.Base.clt */
clt: function (a, b) { return MochiKit.Base.compare(a, b) == -1; }, /** @id MochiKit.Base.cle */
cle: function (a, b) { return MochiKit.Base.compare(a, b) != 1; },
// binary logical operators /** @id MochiKit.Base.logand */
logand: function (a, b) { return a && b; }, /** @id MochiKit.Base.logor */
logor: function (a, b) { return a || b; }, /** @id MochiKit.Base.contains */
contains: function (a, b) { return b in a; }
},
/** @id MochiKit.Base.typeMatcher */
typeMatcher: function (/* typ */) { var types = {}; for (var i = 0; i < arguments.length; i++) { var typ = arguments[i];
types[typ] = typ;
} returnfunction () { for (var i = 0; i < arguments.length; i++) { if (!(typeof(arguments[i]) in types)) { returnfalse;
}
} returntrue;
};
},
/** @id MochiKit.Base.isNull */
isNull: function (/* ... */) { for (var i = 0; i < arguments.length; i++) { if (arguments[i] !== null) { returnfalse;
}
} returntrue;
},
/** @id MochiKit.Base.isUndefinedOrNull */
isUndefinedOrNull: function (/* ... */) { for (var i = 0; i < arguments.length; i++) { var o = arguments[i]; if (!(typeof(o) == 'undefined' || o === null)) { returnfalse;
}
} returntrue;
},
/** @id MochiKit.Base.isNotEmpty */
isNotEmpty: function (obj) { for (var i = 0; i < arguments.length; i++) { var o = arguments[i]; if (!(o && o.length)) { returnfalse;
}
} returntrue;
},
/** @id MochiKit.Base.isArrayLike */
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' ||
o.nodeType === 3
) { returnfalse;
}
} returntrue;
},
/** @id MochiKit.Base.isDateLike */
isDateLike: function () { for (var i = 0; i < arguments.length; i++) { var o = arguments[i]; if (typeof(o) != "object" || o === null
|| typeof(o.getTime) != 'function') { returnfalse;
}
} returntrue;
},
/** @id MochiKit.Base.xmap */
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;
},
/** @id MochiKit.Base.map */
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 { thrownew 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 { thrownew 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;
}
}
rval = []; for (i = 0; i < length; i++) { var args = []; for (var j = 1; j < arguments.length; j++) {
args.push(arguments[j][i]);
}
rval.push(fn.apply(this, args));
} return rval;
}
},
/** @id MochiKit.Base.xfilter */
xfilter: function (fn/*, obj... */) { var rval = []; if (fn === null) {
fn = MochiKit.Base.operator.truth;
} for (var i = 1; i < arguments.length; i++) { var o = arguments[i]; if (fn(o)) {
rval.push(o);
}
} return rval;
},
/** @id MochiKit.Base.filter */
filter: function (fn, lst, self) { var rval = []; // allow an iterable to be passed var m = MochiKit.Base; if (!m.isArrayLike(lst)) { if (MochiKit.Iter) {
lst = MochiKit.Iter.list(lst);
} else { thrownew TypeError("Argument not an array-like and MochiKit.Iter not present");
}
} if (fn === null) {
fn = m.operator.truth;
} if (typeof(Array.prototype.filter) == 'function') { // Mozilla fast-path return Array.prototype.filter.call(lst, fn, self);
} elseif (typeof(self) == 'undefined' || self === null) { for (var i = 0; i < lst.length; i++) { var o = lst[i]; if (fn(o)) {
rval.push(o);
}
}
} else { for (i = 0; i < lst.length; i++) {
o = lst[i]; if (fn.call(self, o)) {
rval.push(o);
}
}
} return rval;
},
_wrapDumbFunction: function (func) { returnfunction () { // fast path! switch (arguments.length) { case0: return func(); case1: return func(arguments[0]); case2: return func(arguments[0], arguments[1]); case3: return func(arguments[0], arguments[1], arguments[2]);
} var args = []; for (var i = 0; i < arguments.length; i++) {
args.push("arguments[" + i + "]");
} return eval("(func(" + args.join(",") + "))");
};
},
/** @id MochiKit.Base.method */
method: function (self, func) { var m = MochiKit.Base; return m.bind.apply(this, m.extend([func, self], arguments, 2));
},
/** @id MochiKit.Base.compose */
compose: function (f1, f2/*, f3, ... fN */) { var fnlist = []; var m = MochiKit.Base; if (arguments.length === 0) { thrownew TypeError("compose() requires at least one argument");
} for (var i = 0; i < arguments.length; i++) { var fn = arguments[i]; if (typeof(fn) != "function") { thrownew TypeError(m.repr(fn) + " is not a function");
}
fnlist.push(fn);
} returnfunction () { var args = arguments; for (var i = fnlist.length - 1; i >= 0; i--) {
args = [fnlist[i].apply(this, args)];
} return args[0];
};
},
/** @id MochiKit.Base.bind */
bind: function (func, self/* args... */) { if (typeof(func) == "string") {
func = self[func];
} var im_func = func.im_func; var im_preargs = func.im_preargs; var im_self = func.im_self; var m = MochiKit.Base; if (typeof(func) == "function" && typeof(func.apply) == "undefined") { // this is for cases where JavaScript sucks ass and gives you a // really dumb built-in function like alert() that doesn't have // an apply
func = m._wrapDumbFunction(func);
} if (typeof(im_func) != 'function') {
im_func = func;
} if (typeof(self) != 'undefined') {
im_self = self;
} if (typeof(im_preargs) == 'undefined') {
im_preargs = [];
} else {
im_preargs = im_preargs.slice();
}
m.extend(im_preargs, arguments, 2); var newfunc = function () { var args = arguments; var me = arguments.callee; if (me.im_preargs.length > 0) {
args = m.concat(me.im_preargs, args);
} var self = me.im_self; if (!self) {
self = this;
} return me.im_func.apply(self, args);
};
newfunc.im_self = im_self;
newfunc.im_func = im_func;
newfunc.im_preargs = im_preargs; return newfunc;
},
/** @id MochiKit.Base.bindMethods */
bindMethods: function (self) { var bind = MochiKit.Base.bind; for (var k in self) { var func = self[k]; if (typeof(func) == 'function') {
self[k] = bind(func, self);
}
}
},
/** @id MochiKit.Base.compare */
compare: function (a, b) { if (a == b) { return0;
} var aIsNull = (typeof(a) == 'undefined' || a === null); var bIsNull = (typeof(b) == 'undefined' || b === null); if (aIsNull && bIsNull) { return0;
} elseif (aIsNull) { return -1;
} elseif (bIsNull) { return1;
} var m = MochiKit.Base; // bool, number, string have meaningful comparisons var prim = m._primitives; if (!(typeof(a) in prim && typeof(b) in prim)) { try { return m.comparatorRegistry.match(a, b);
} catch (e) { if (e != m.NotFound) { throw e;
}
}
} if (a < b) { return -1;
} elseif (a > b) { return1;
} // These types can't be compared var repr = m.repr; thrownew TypeError(repr(a) + " and " + repr(b) + " can not be compared");
},
/** @id MochiKit.Base.compareDateLike */
compareDateLike: function (a, b) { return MochiKit.Base.compare(a.getTime(), b.getTime());
},
/** @id MochiKit.Base.compareArrayLike */
compareArrayLike: function (a, b) { var compare = MochiKit.Base.compare; var count = a.length; var rval = 0; if (count > b.length) {
rval = 1;
count = b.length;
} elseif (count < b.length) {
rval = -1;
} for (var i = 0; i < count; i++) { var cmp = compare(a[i], b[i]); if (cmp) { return cmp;
}
} return rval;
},
_filterJSON: function (s) { var m = s.match(/^\s*\/\*(.*)\*\/\s*$/); if (m) { return m[1];
} return s;
},
/** @id MochiKit.Base.serializeJSON */
serializeJSON: function (o) { var objtype = typeof(o); if (objtype == "number" || objtype == "boolean") { return o + "";
} elseif (o === null) { return"null";
} var m = MochiKit.Base; var reprString = m.reprString; if (objtype == "string") { return reprString(o);
} // recurse var me = arguments.callee; // short-circuit for objects that support "json" serialization // if they return "self" then just pass-through... var newObj; if (typeof(o.__json__) == "function") {
newObj = o.__json__(); if (o !== newObj) { return me(newObj);
}
} if (typeof(o.json) == "function") {
newObj = o.json(); if (o !== newObj) { return me(newObj);
}
} // array if (objtype != "function" && typeof(o.length) == "number") { var res = []; for (var i = 0; i < o.length; i++) { var val = me(o[i]); if (typeof(val) != "string") {
val = "undefined";
}
res.push(val);
} return"[" + res.join(", ") + "]";
} // look in the registry try {
newObj = m.jsonRegistry.match(o); if (o !== newObj) { return me(newObj);
}
} catch (e) { if (e != m.NotFound) { // something really bad happened throw e;
}
} // undefined is outside of the spec if (objtype == "undefined") { thrownew TypeError("undefined can not be serialized as JSON");
} // it's a function with no adapter, bad if (objtype == "function") { returnnull;
} // generic object code path
res = []; for (var k in o) { var useKey; if (typeof(k) == "number") {
useKey = '"' + k + '"';
} elseif (typeof(k) == "string") {
useKey = reprString(k);
} else { // skip non-string or number keys continue;
}
val = me(o[k]); if (typeof(val) != "string") { // skip non-serializable values continue;
}
res.push(useKey + ":" + val);
} return"{" + res.join(", ") + "}";
},
/** @id MochiKit.Base.objEqual */
objEqual: function (a, b) { return (MochiKit.Base.compare(a, b) === 0);
},
/** @id MochiKit.Base.concat */
concat: function (/* lst... */) { var rval = []; var extend = MochiKit.Base.extend; for (var i = 0; i < arguments.length; i++) {
extend(rval, arguments[i]);
} return rval;
},
/** @id MochiKit.Base.keyComparator */
keyComparator: function (key/* ... */) { // fast-path for single key comparisons var m = MochiKit.Base; var compare = m.compare; if (arguments.length == 1) { returnfunction (a, b) { return compare(a[key], b[key]);
};
} var compareKeys = m.extend(null, arguments); returnfunction (a, b) { var rval = 0; // keep comparing until something is inequal or we run out of // keys to compare for (var i = 0; (rval === 0) && (i < compareKeys.length); i++) { var key = compareKeys[i];
rval = compare(a[key], b[key]);
} return rval;
};
},
/** @id MochiKit.Base.reverseKeyComparator */
reverseKeyComparator: function (key) { var comparator = MochiKit.Base.keyComparator.apply(this, arguments); returnfunction (a, b) { return comparator(b, a);
};
},
/** @id MochiKit.Base.partial */
partial: function (func) { var m = MochiKit.Base; return m.bind.apply(this, m.extend([func, undefined], arguments, 1));
},
/** @id MochiKit.Base.listMinMax */
listMinMax: function (which, lst) { if (lst.length === 0) { returnnull;
} var cur = lst[0]; var compare = MochiKit.Base.compare; for (var i = 1; i < lst.length; i++) { var o = lst[i]; if (compare(o, cur) == which) {
cur = o;
}
} return cur;
},
var m = MochiKit.Base; var args = m.extend(null, arguments); var count = args.length;
while (args.length) { var o = args.shift(); if (o && typeof(o) == "object" && typeof(o.length) == "number") {
count += o.length - 1; for (var i = o.length - 1; i >= 0; i--) {
sum += o[i];
}
} else {
sum += o;
}
}
if (count <= 0) { thrownew TypeError('mean() requires at least one argument');
}
return sum/count;
},
/** @id MochiKit.Base.median */
median: function(/* lst... */) { /* http://www.nist.gov/dads/HTML/median.html */ var data = MochiKit.Base.flattenArguments(arguments); if (data.length === 0) { thrownew TypeError('median() requires at least one argument');
}
data.sort(compare); if (data.length % 2 == 0) { var upper = data.length / 2; return (data[upper] + data[upper - 1]) / 2;
} else { return data[(data.length - 1) / 2];
}
},
/** @id MochiKit.Base.findValue */
findValue: function (lst, value, start/* = 0 */, /* optional */end) { if (typeof(end) == "undefined" || end === null) {
end = lst.length;
} if (typeof(start) == "undefined" || start === null) {
start = 0;
} var cmp = MochiKit.Base.compare; for (var i = start; i < end; i++) { if (cmp(lst[i], value) === 0) { return i;
}
} return -1;
},
/** @id MochiKit.Base.nodeWalk */
nodeWalk: function (node, visitor) { var nodes = [node]; var extend = MochiKit.Base.extend; while (nodes.length) { var res = visitor(nodes.shift()); if (res) {
extend(nodes, res);
}
}
},
/** @id MochiKit.Base.nameFunctions */
nameFunctions: function (namespace) { var base = namespace.NAME; if (typeof(base) == 'undefined') {
base = '';
} else {
base = base + '.';
} for (var name in namespace) { var o = namespace[name]; if (typeof(o) == 'function' && typeof(o.NAME) == 'undefined') { try {
o.NAME = base + name;
} catch (e) { // pass
}
}
}
},
/** @id MochiKit.Base.queryString */
queryString: function (names, values) { // check to see if names is a string or a DOM element, and if // MochiKit.DOM is available. If so, drop it like it's a form // Ugliest conditional in MochiKit? Probably! if (typeof(MochiKit.DOM) != "undefined" && arguments.length == 1
&& (typeof(names) == "string" || ( typeof(names.nodeType) != "undefined" && names.nodeType > 0
))
) { var kv = MochiKit.DOM.formContents(names);
names = kv[0];
values = kv[1];
} elseif (arguments.length == 1) { // Allow the return value of formContents to be passed directly if (typeof(names.length) == "number" && names.length == 2) { return arguments.callee(names[0], names[1]);
} var o = names;
names = [];
values = []; for (var k in o) { var v = o[k]; if (typeof(v) == "function") { continue;
} elseif (typeof(v) != "string" && typeof(v.length) == "number") { for (var i = 0; i < v.length; i++) {
names.push(k);
values.push(v[i]);
}
} else {
names.push(k);
values.push(v);
}
}
} var rval = []; var len = Math.min(names.length, values.length); var urlEncode = MochiKit.Base.urlEncode; for (var i = 0; i < len; i++) {
v = values[i]; if (typeof(v) != 'undefined' && v !== null) {
rval.push(urlEncode(names[i]) + "=" + urlEncode(v));
}
} return rval.join("&");
},
/** @id MochiKit.Base.parseQueryString */
parseQueryString: function (encodedString, useArrays) { // strip a leading '?' from the encoded string var qstr = (encodedString.charAt(0) == "?")
? encodedString.substring(1)
: encodedString; var pairs = qstr.replace(/\+/g, "%20").split(/(\&\;|\&\#38\;|\&|\&)/); var o = {}; var decode; if (typeof(decodeURIComponent) != "undefined") {
decode = decodeURIComponent;
} else {
decode = unescape;
} if (useArrays) { for (var i = 0; i < pairs.length; i++) { var pair = pairs[i].split("="); var name = decode(pair.shift()); if (!name) { continue;
} var arr = o[name]; if (!(arr instanceof Array)) {
arr = [];
o[name] = arr;
}
arr.push(decode(pair.join("=")));
}
} else { for (i = 0; i < pairs.length; i++) {
pair = pairs[i].split("="); var name = pair.shift(); if (!name) { continue;
}
o[decode(name)] = decode(pair.join("="));
}
} return o;
}
});
MochiKit.Base._exportSymbols = function (globals, module) { if (!MochiKit.__export__) { return;
} var all = module.EXPORT_TAGS[":all"]; for (var i = 0; i < all.length; i++) {
globals[all[i]] = module[all[i]];
}
};
MochiKit.Base.__new__ = function () { // A singleton raised when no suitable adapter is found var m = this;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.