microsoft-teamsdiscordmessengercustom-servicesmacoslinuxwindowsinboxwhatsappicloudtweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplaceoutlookemail
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
228 lines
5.7 KiB
228 lines
5.7 KiB
/** |
|
* Class to act as a bridge between the MockAjax class and Ext.data.Connection |
|
*/ |
|
var MockAjaxManager = { |
|
|
|
getXhrInstance: null, |
|
|
|
/** |
|
* Pushes methods onto the Connection prototype to make it easier to deal with |
|
*/ |
|
addMethods: function(){ |
|
var Connection = Ext.data.Connection, |
|
proto = Connection.prototype; |
|
|
|
Connection.requestId = 0; |
|
MockAjaxManager.getXhrInstance = proto.getXhrInstance; |
|
|
|
/** |
|
* Template method to create the AJAX request |
|
*/ |
|
proto.getXhrInstance = function(){ |
|
return new MockAjax(); |
|
}; |
|
|
|
/** |
|
* Method to simulate a request completing |
|
* @param {Object} response The response |
|
* @param {String} id (optional) The id of the completed request |
|
*/ |
|
proto.mockComplete = function(response, id){ |
|
this.mockGetRequestXHR(id).xhr.complete(response); |
|
}; |
|
|
|
/** |
|
* Get a particular request |
|
* @param {String} id (optional) The id of the request |
|
*/ |
|
proto.mockGetRequestXHR = function(id){ |
|
var request; |
|
|
|
if (id) { |
|
request = this.requests[id]; |
|
} else { |
|
// get the first one |
|
request = this.mockGetAllRequests()[0]; |
|
} |
|
return request ? request : null; |
|
}; |
|
|
|
/** |
|
* Gets all the requests from the Connection |
|
*/ |
|
proto.mockGetAllRequests = function(){ |
|
var requests = this.requests, |
|
id, |
|
request, |
|
out = []; |
|
|
|
for (id in requests) { |
|
if (requests.hasOwnProperty(id)) { |
|
out.push(requests[id]); |
|
} |
|
} |
|
return out; |
|
}; |
|
|
|
this.originalExtAjax = Ext.Ajax; |
|
Ext.Ajax = new Connection({autoAbort : false}); |
|
}, |
|
|
|
/** |
|
* Restore any changes made by addMethods |
|
*/ |
|
removeMethods: function(){ |
|
var proto = Ext.data.Connection.prototype; |
|
delete proto.mockComplete; |
|
delete proto.mockGetRequestXHR; |
|
proto.getXhrInstance = MockAjaxManager.getXhrInstance; |
|
Ext.Ajax = this.originalExtAjax; |
|
} |
|
}; |
|
|
|
/** |
|
* Simple Mock class to represent an XMLHttpRequest |
|
*/ |
|
var MockAjax = function(){ |
|
/** |
|
* Contains all request headers |
|
*/ |
|
this.headers = {}; |
|
|
|
/** |
|
* Contains any options specified during sending |
|
*/ |
|
this.ajaxOptions = {}; |
|
|
|
this.readyState = 0; |
|
|
|
this.status = null; |
|
|
|
this.responseText = this.responseXML = null; |
|
}; |
|
|
|
/** |
|
* Contains a default response for any synchronous request. |
|
*/ |
|
MockAjax.prototype.syncDefaults = { |
|
responseText: 'data', |
|
status: 200, |
|
statusText: '', |
|
responseXML: null, |
|
responseHeaders: {"Content-type": "application/json" } |
|
}; |
|
|
|
MockAjax.prototype.readyChange = function() { |
|
if (this.onreadystatechange) { |
|
this.onreadystatechange(); |
|
} |
|
}; |
|
|
|
/** |
|
* Simulate the XHR open method |
|
* @param {Object} method |
|
* @param {Object} url |
|
* @param {Object} async |
|
* @param {Object} username |
|
* @param {Object} password |
|
*/ |
|
MockAjax.prototype.open = function(method, url, async, username, password){ |
|
var options = this.ajaxOptions; |
|
options.method = method; |
|
options.url = url; |
|
options.async = async; |
|
options.username = username; |
|
options.password = password; |
|
this.readyState = 1; |
|
this.readyChange(); |
|
}; |
|
|
|
/** |
|
* Simulate the XHR send method |
|
* @param {Object} data |
|
*/ |
|
MockAjax.prototype.send = function(data){ |
|
this.ajaxOptions.data = data; |
|
this.readyState = 2; |
|
// if it's a synchronous request, let's just assume it's already finished |
|
if (!this.ajaxOptions.async) { |
|
this.complete(this.syncDefaults); |
|
} else { |
|
this.readyChange(); |
|
} |
|
}; |
|
|
|
/** |
|
* Simulate the XHR abort method |
|
*/ |
|
MockAjax.prototype.abort = function(){ |
|
this.readyState = 0; |
|
this.readyChange(); |
|
}; |
|
|
|
/** |
|
* Simulate the XHR setRequestHeader method |
|
* @param {Object} header |
|
* @param {Object} value |
|
*/ |
|
MockAjax.prototype.setRequestHeader = function(header, value){ |
|
this.headers[header] = value; |
|
}; |
|
|
|
/** |
|
* Simulate the XHR getAllResponseHeaders method |
|
*/ |
|
MockAjax.prototype.getAllResponseHeaders = function(){ |
|
return ''; |
|
}; |
|
|
|
/** |
|
* Simulate the XHR getResponseHeader method |
|
* @param {Object} name |
|
*/ |
|
MockAjax.prototype.getResponseHeader = function(name){ |
|
return this.headers[header]; |
|
}; |
|
|
|
/** |
|
* Simulate the XHR onreadystatechange method |
|
*/ |
|
MockAjax.prototype.onreadystatechange = function(){ |
|
}; |
|
|
|
/** |
|
* Method for triggering a response completion |
|
*/ |
|
MockAjax.prototype.complete = function(response){ |
|
this.responseText = response.responseText || ''; |
|
this.status = response.status; |
|
this.statusText = response.statusText; |
|
this.responseXML = response.responseXML || this.xmlDOM(response.responseText); |
|
this.responseHeaders = response.responseHeaders || {"Content-type": response.contentType || "application/json" }; |
|
this.readyState = 4; |
|
this.readyChange(); |
|
}; |
|
|
|
/** |
|
* Converts string to XML DOM |
|
*/ |
|
MockAjax.prototype.xmlDOM = function(xml) { |
|
// IE DOMParser support |
|
if (!window.DOMParser && window.ActiveXObject) { |
|
doc = new ActiveXObject('Microsoft.XMLDOM'); |
|
doc.async = 'false'; |
|
DOMParser = function() {}; |
|
DOMParser.prototype.parseFromString = function(xmlString) { |
|
var doc = new ActiveXObject('Microsoft.XMLDOM'); |
|
doc.async = 'false'; |
|
doc.loadXML(xmlString); |
|
return doc; |
|
}; |
|
} |
|
|
|
try { |
|
return (new DOMParser()).parseFromString(xml, "text/xml"); |
|
} catch (e) { |
|
return null; |
|
} |
|
}; |