(function(XHR) {
"use strict";
var open = XHR.prototype.open;
var send = XHR.prototype.send;
XHR.prototype.open = function(method, url, async, user, pass) {
this._url = url;
open.call(this, method, url, async, user, pass);
};
XHR.prototype.send = function(data) {
var self = this;
var oldOnReadyStateChange;
var url = this._url;
function onReadyStateChange() {
if(self.readyState == 4 /* complete */) {
/* This is where you can put code that you want to execute post-complete*/
/* URL is kept in this._url */
}
if(oldOnReadyStateChange) {
oldOnReadyStateChange();
}
}
/* Set xhr.noIntercept to true to disable the interceptor for a particular call */
if(!this.noIntercept) {
if(this.addEventListener) {
this.addEventListener("readystatechange", onReadyStateChange, false);
} else {
oldOnReadyStateChange = this.onreadystatechange;
this.onreadystatechange = onReadyStateChange;
}
}
send.call(this, data);
}
})(XMLHttpRequest);
KGZ1bmN0aW9uKFhIUikgewogICAgInVzZSBzdHJpY3QiOwoKICAgIHZhciBvcGVuID0gWEhSLnByb3RvdHlwZS5vcGVuOwogICAgdmFyIHNlbmQgPSBYSFIucHJvdG90eXBlLnNlbmQ7CgogICAgWEhSLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obWV0aG9kLCB1cmwsIGFzeW5jLCB1c2VyLCBwYXNzKSB7CiAgICAgICAgdGhpcy5fdXJsID0gdXJsOwogICAgICAgIG9wZW4uY2FsbCh0aGlzLCBtZXRob2QsIHVybCwgYXN5bmMsIHVzZXIsIHBhc3MpOwogICAgfTsKCiAgICBYSFIucHJvdG90eXBlLnNlbmQgPSBmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgIHZhciBvbGRPblJlYWR5U3RhdGVDaGFuZ2U7CiAgICAgICAgdmFyIHVybCA9IHRoaXMuX3VybDsKCiAgICAgICAgZnVuY3Rpb24gb25SZWFkeVN0YXRlQ2hhbmdlKCkgewogICAgICAgICAgICBpZihzZWxmLnJlYWR5U3RhdGUgPT0gNCAvKiBjb21wbGV0ZSAqLykgewogICAgICAgICAgICAgICAgLyogVGhpcyBpcyB3aGVyZSB5b3UgY2FuIHB1dCBjb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBwb3N0LWNvbXBsZXRlKi8KICAgICAgICAgICAgICAgIC8qIFVSTCBpcyBrZXB0IGluIHRoaXMuX3VybCAqLwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZihvbGRPblJlYWR5U3RhdGVDaGFuZ2UpIHsKICAgICAgICAgICAgICAgIG9sZE9uUmVhZHlTdGF0ZUNoYW5nZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKiBTZXQgeGhyLm5vSW50ZXJjZXB0IHRvIHRydWUgdG8gZGlzYWJsZSB0aGUgaW50ZXJjZXB0b3IgZm9yIGEgcGFydGljdWxhciBjYWxsICovCiAgICAgICAgaWYoIXRoaXMubm9JbnRlcmNlcHQpIHsgICAgICAgICAgICAKICAgICAgICAgICAgaWYodGhpcy5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgICAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLCBvblJlYWR5U3RhdGVDaGFuZ2UsIGZhbHNlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG9sZE9uUmVhZHlTdGF0ZUNoYW5nZSA9IHRoaXMub25yZWFkeXN0YXRlY2hhbmdlOyAKICAgICAgICAgICAgICAgIHRoaXMub25yZWFkeXN0YXRlY2hhbmdlID0gb25SZWFkeVN0YXRlQ2hhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBzZW5kLmNhbGwodGhpcywgZGF0YSk7CiAgICB9Cn0pKFhNTEh0dHBSZXF1ZXN0KTs=