📄 engine.js
字号:
* @param data The data to be marshalled * @param name The name of the data being marshalled */DWREngine._serializeAll = function(batch, referto, data, name) { if (data == null) { batch.map[name] = "null:null"; return; } switch (typeof data) { case "boolean": batch.map[name] = "boolean:" + data; break; case "number": batch.map[name] = "number:" + data; break; case "string": batch.map[name] = "string:" + encodeURIComponent(data); break; case "object": if (data.dwrSerialize) { batch.map[name] = data.dwrSerialize(batch, referto, data, name); } else if (data.nodeName) { batch.map[name] = DWREngine._serializeXml(batch, referto, data, name); } else { if (DWREngine._warningHandler) { DWREngine._warningHandler("Object without dwrSerialize: " + typeof data + ", attempting default converter."); } batch.map[name] = "default:" + data; } break; case "function": // We just ignore functions. break; default: if (DWREngine._warningHandler) { DWREngine._warningHandler("Unexpected type: " + typeof data + ", attempting default converter."); } batch.map[name] = "default:" + data; break; }};/** @private Have we already converted this object? */DWREngine._lookup = function(referto, data, name) { var lookup; // Can't use a map: http://getahead.ltd.uk/ajax/javascript-gotchas for (var i = 0; i < referto.length; i++) { if (referto[i].data == data) { lookup = referto[i]; break; } } if (lookup) { return "reference:" + lookup.name; } referto.push({ data:data, name:name }); return null;};/** @private Marshall an object */DWREngine._serializeObject = function(batch, referto, data, name) { var ref = DWREngine._lookup(referto, this, name); if (ref) return ref; if (data.nodeName) { return DWREngine._serializeXml(batch, referto, data, name); } // treat objects as an associative arrays var reply = "Object:{"; var element; for (element in this) { if (element != "dwrSerialize") { batch.paramCount++; var childName = "c" + DWREngine._batch.map.callCount + "-e" + batch.paramCount; DWREngine._serializeAll(batch, referto, this[element], childName); reply += encodeURIComponent(element); reply += ":reference:"; reply += childName; reply += ", "; } } if (reply.substring(reply.length - 2) == ", ") { reply = reply.substring(0, reply.length - 2); } reply += "}"; return reply;};/** @private Marshall an object */DWREngine._serializeXml = function(batch, referto, data, name) { var ref = DWREngine._lookup(referto, this, name); if (ref) { return ref; } var output; if (window.XMLSerializer) { var serializer = new XMLSerializer(); output = serializer.serializeToString(data); } else { output = data.toXml; } return "XML:" + encodeURIComponent(output);};/** @private Marshall an array */DWREngine._serializeArray = function(batch, referto, data, name) { var ref = DWREngine._lookup(referto, this, name); if (ref) return ref; var reply = "Array:["; for (var i = 0; i < this.length; i++) { if (i != 0) { reply += ","; } batch.paramCount++; var childName = "c" + DWREngine._batch.map.callCount + "-e" + batch.paramCount; DWREngine._serializeAll(batch, referto, this[i], childName); reply += "reference:"; reply += childName; } reply += "]"; return reply;};/** @private Marshall a Boolean */DWREngine._serializeBoolean = function(batch, referto, data, name) { return "Boolean:" + this;};/** @private Marshall a Number */DWREngine._serializeNumber = function(batch, referto, data, name) { return "Number:" + this;};/** @private Marshall a String */DWREngine._serializeString = function(batch, referto, data, name) { return "String:" + encodeURIComponent(this);};/** @private Marshall a Date */DWREngine._serializeDate = function(batch, referto, data, name) { return "Date:" + this.getTime();};/** @private Convert an XML string into a DOM object. */DWREngine._unserializeDocument = function(xml) { var dom; if (window.DOMParser) { var parser = new DOMParser(); dom = parser.parseFromString(xml, "text/xml"); if (!dom.documentElement || dom.documentElement.tagName == "parsererror") { var message = dom.documentElement.firstChild.data; message += "\n" + dom.documentElement.firstChild.nextSibling.firstChild.data; throw message; } return dom; } else if (window.ActiveXObject) { dom = DWREngine._newActiveXObject(DWREngine._DOMDocument); dom.loadXML(xml); // What happens on parse fail with IE? return dom; } //else if (window.XMLHttpRequest) { // // Hack with XHR to get at Safari's parser // var req = new XMLHttpRequest; // var url = "data:application/xml;charset=utf-8," + encodeURIComponent(xml); // req.open("GET", url, false); // req.send(null); // return req.responseXML; //} else { var div = document.createElement('div'); div.innerHTML = xml; return div; }};/** * @private Helper to find an ActiveX object that works. * @param axarray An array of strings to attempt to create ActiveX objects from */DWREngine._newActiveXObject = function(axarray) { var returnValue; for (var i = 0; i < axarray.length; i++) { try { returnValue = new ActiveXObject(axarray[i]); break; } catch (ex) { } } return returnValue;};/** @private To make up for the lack of encodeURIComponent() on IE5.0 */if (typeof window.encodeURIComponent === 'undefined') { DWREngine._utf8 = function(wide) { wide = "" + wide; // Make sure it is a string var c; var s; var enc = ""; var i = 0; while (i < wide.length) { c = wide.charCodeAt(i++); // handle UTF-16 surrogates if (c >= 0xDC00 && c < 0xE000) continue; if (c >= 0xD800 && c < 0xDC00) { if (i >= wide.length) continue; s = wide.charCodeAt(i++); if (s < 0xDC00 || c >= 0xDE00) continue; c = ((c - 0xD800) << 10) + (s - 0xDC00) + 0x10000; } // output value if (c < 0x80) { enc += String.fromCharCode(c); } else if (c < 0x800) { enc += String.fromCharCode(0xC0 + (c >> 6), 0x80 + (c & 0x3F)); } else if (c < 0x10000) { enc += String.fromCharCode(0xE0 + (c >> 12), 0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F)); } else { enc += String.fromCharCode(0xF0 + (c >> 18), 0x80 + (c >> 12 & 0x3F), 0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F)); } } return enc; } DWREngine._hexchars = "0123456789ABCDEF"; DWREngine._toHex = function(n) { return DWREngine._hexchars.charAt(n >> 4) + DWREngine._hexchars.charAt(n & 0xF); } DWREngine._okURIchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-"; window.encodeURIComponent = function(s) { s = DWREngine._utf8(s); var c; var enc = ""; for (var i= 0; i<s.length; i++) { if (DWREngine._okURIchars.indexOf(s.charAt(i)) == -1) { enc += "%" + DWREngine._toHex(s.charCodeAt(i)); } else { enc += s.charAt(i); } } return enc; }}/** @private To make up for the lack of Array.splice() on IE5.0 */if (typeof Array.prototype.splice === 'undefined') { Array.prototype.splice = function(ind, cnt) { if (arguments.length == 0) { return ind; } if (typeof ind != "number") { ind = 0; } if (ind < 0) { ind = Math.max(0,this.length + ind); } if (ind > this.length) { if (arguments.length > 2) { ind = this.length; } else { return []; } } if (arguments.length < 2) { cnt = this.length-ind; } cnt = (typeof cnt == "number") ? Math.max(0, cnt) : 0; removeArray = this.slice(ind, ind + cnt); endArray = this.slice(ind + cnt); this.length = ind; for (var i = 2; i < arguments.length; i++) { this[this.length] = arguments[i]; } for (i = 0; i < endArray.length; i++) { this[this.length] = endArray[i]; } return removeArray; }}/** @private To make up for the lack of Array.shift() on IE5.0 */if (typeof Array.prototype.shift === 'undefined') { Array.prototype.shift = function(str) { var val = this[0]; for (var i = 1; i < this.length; ++i) { this[i - 1] = this[i]; } this.length--; return val; }}/** @private To make up for the lack of Array.unshift() on IE5.0 */if (typeof Array.prototype.unshift === 'undefined') { Array.prototype.unshift = function() { var i = unshift.arguments.length; for (var j = this.length - 1; j >= 0; --j) { this[j + i] = this[j]; } for (j = 0; j < i; ++j) { this[j] = unshift.arguments[j]; } }}/** @private To make up for the lack of Array.push() on IE5.0 */if (typeof Array.prototype.push === 'undefined') { Array.prototype.push = function() { var sub = this.length; for (var i = 0; i < push.arguments.length; ++i) { this[sub] = push.arguments[i]; sub++; } }}/** @private To make up for the lack of Array.pop() on IE5.0 */if (typeof Array.prototype.pop === 'undefined') { Array.prototype.pop = function() { var lastElement = this[this.length - 1]; this.length--; return lastElement; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -