_check: function () { if (this.fired != -1) { if (!this.silentlyCancelled) { thrownew MochiKit.Async.AlreadyCalledError(this);
} this.silentlyCancelled = false; return;
}
},
/** @id MochiKit.Async.Deferred.prototype.callback */
callback: function (res) { this._check(); if (res instanceof MochiKit.Async.Deferred) { thrownew Error("Deferred instances can only be chained if they are the result of a callback");
} this._resback(res);
},
/** @id MochiKit.Async.Deferred.prototype.errback */
errback: function (res) { this._check(); var self = MochiKit.Async; if (res instanceof self.Deferred) { thrownew Error("Deferred instances can only be chained if they are the result of a callback");
} if (!(res instanceof Error)) {
res = new self.GenericError(res);
} this._resback(res);
},
/** @id MochiKit.Async.succeed */
succeed: function (/* optional */result) { var d = new MochiKit.Async.Deferred();
d.callback.apply(d, arguments); return d;
},
/** @id MochiKit.Async.fail */
fail: function (/* optional */result) { var d = new MochiKit.Async.Deferred();
d.errback.apply(d, arguments); return d;
},
/** @id MochiKit.Async.getXMLHttpRequest */
getXMLHttpRequest: function () { var self = arguments.callee; if (!self.XMLHttpRequest) { var tryThese = [ function () { returnnew XMLHttpRequest(); }, function () { returnnew ActiveXObject('Msxml2.XMLHTTP'); }, function () { returnnew ActiveXObject('Microsoft.XMLHTTP'); }, function () { returnnew ActiveXObject('Msxml2.XMLHTTP.4.0'); }, function () { thrownew MochiKit.Async.BrowserComplianceError("Browser does not support XMLHttpRequest");
}
]; for (var i = 0; i < tryThese.length; i++) { var func = tryThese[i]; try {
self.XMLHttpRequest = func; return func();
} catch (e) { // pass
}
}
} return self.XMLHttpRequest();
},
_xhr_onreadystatechange: function (d) { // MochiKit.Logging.logDebug('this.readyState', this.readyState); var m = MochiKit.Base; if (this.readyState == 4) { // IE SUCKS try { this.onreadystatechange = null;
} catch (e) { try { this.onreadystatechange = m.noop;
} catch (e) {
}
} var status = null; try {
status = this.status; if (!status && m.isNotEmpty(this.responseText)) { // 0 or undefined seems to mean cached or local
status = 304;
}
} catch (e) { // pass // MochiKit.Logging.logDebug('error getting status?', repr(items(e)));
} // 200 is OK, 201 is CREATED, 204 is NO CONTENT // 304 is NOT MODIFIED, 1223 is apparently a bug in IE if (status == 200 || status == 201 || status == 204 ||
status == 304 || status == 1223) {
d.callback(this);
} else { var err = new MochiKit.Async.XMLHttpRequestError(this, "Request failed"); if (err.number) { // XXX: This seems to happen on page change
d.errback(err);
} else { // XXX: this seems to happen when the server is unreachable
d.errback(err);
}
}
}
},
_doXHR: function (url, opts) { var m = MochiKit.Base;
opts = m.update({
method: 'GET',
sendContent: '' /* queryString:undefined, username:undefined, password:undefined, headers:undefined, mimeType:undefined
*/
}, opts); var self = MochiKit.Async; var req = self.getXMLHttpRequest(); if (opts.queryString) { var qs = m.queryString(opts.queryString); if (qs) {
url += "?" + qs;
}
} // Safari will send undefined:undefined, so we have to check. // We can't use apply, since the function is native. if ('username' in opts) {
req.open(opts.method, url, true, opts.username, opts.password);
} else {
req.open(opts.method, url, true);
} if (req.overrideMimeType && opts.mimeType) {
req.overrideMimeType(opts.mimeType);
} if (opts.headers) { var headers = opts.headers; if (!m.isArrayLike(headers)) {
headers = m.items(headers);
} for (var i = 0; i < headers.length; i++) { var header = headers[i]; var name = header[0]; var value = header[1];
req.setRequestHeader(name, value);
}
} return self.sendXMLHttpRequest(req, opts.sendContent);
},
_buildURL: function (url/*, ...*/) { if (arguments.length > 1) { var m = MochiKit.Base; var qs = m.queryString.apply(null, m.extend(null, arguments, 1)); if (qs) { return url + "?" + qs;
}
} return url;
},
/** @id MochiKit.Async.doSimpleXMLHttpRequest */
doSimpleXMLHttpRequest: function (url/*, ...*/) { var self = MochiKit.Async;
url = self._buildURL.apply(self, arguments); return self.doXHR(url);
},
/** @id MochiKit.Async.loadJSONDoc */
loadJSONDoc: function (url/*, ...*/) { var self = MochiKit.Async;
url = self._buildURL.apply(self, arguments); var d = self.doXHR(url, { 'mimeType': 'text/plain', 'headers': [['Accept', 'application/json']]
});
d = d.addCallback(self.evalJSONRequest); return d;
},
/** @id MochiKit.Async.wait */
wait: function (seconds, /* optional */value) { var d = new MochiKit.Async.Deferred(); var m = MochiKit.Base; if (typeof(value) != 'undefined') {
d.addCallback(function () { return value; });
} var timeout = setTimeout(
m.bind("callback", d),
Math.floor(seconds * 1000));
d.canceller = function () { try {
clearTimeout(timeout);
} catch (e) { // pass
}
}; return d;
},
/** @id MochiKit.Async.callLater */
callLater: function (seconds, func) { var m = MochiKit.Base; var pfunc = m.partial.apply(m, m.extend(null, arguments, 1)); return MochiKit.Async.wait(seconds).addCallback( function (res) { return pfunc(); }
);
}
});
var cb = MochiKit.Base.bind(this._cbDeferred, this); for (var i = 0; i < list.length; i++) { var d = list[i];
resultList.push(undefined);
d.addCallback(cb, i, true);
d.addErrback(cb, i, false);
}
if (list.length === 0 && !fireOnOneCallback) { this.callback(this.resultList);
}
};
MochiKit.Async.DeferredList.prototype = new MochiKit.Async.Deferred();
/** @id MochiKit.Async.gatherResults */
MochiKit.Async.gatherResults = function (deferredList) { var d = new MochiKit.Async.DeferredList(deferredList, false, true, false);
d.addCallback(function (results) { var ret = []; for (var i = 0; i < results.length; i++) {
ret.push(results[i][1]);
} return ret;
}); return d;
};
/** @id MochiKit.Async.maybeDeferred */
MochiKit.Async.maybeDeferred = function (func) { var self = MochiKit.Async; var result; try { var r = func.apply(null, MochiKit.Base.extend([], arguments, 1)); if (r instanceof self.Deferred) {
result = r;
} elseif (r instanceof Error) {
result = self.fail(r);
} else {
result = self.succeed(r);
}
} catch (e) {
result = self.fail(e);
} return result;
};
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.