1687 lines
55 KiB
JavaScript
1687 lines
55 KiB
JavaScript
/*
|
|
* (c) Copyright Ascensio System SIA 2010-2015
|
|
*
|
|
* This program is a free software product. You can redistribute it and/or
|
|
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
|
* version 3 as published by the Free Software Foundation. In accordance with
|
|
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
|
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
|
* of any third-party rights.
|
|
*
|
|
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
|
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
|
*
|
|
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
|
* EU, LV-1021.
|
|
*
|
|
* The interactive user interfaces in modified source and object code versions
|
|
* of the Program must display Appropriate Legal Notices, as required under
|
|
* Section 5 of the GNU AGPL version 3.
|
|
*
|
|
* Pursuant to Section 7(b) of the License you must retain the original Product
|
|
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
|
* grant you any rights under trademark law for use of our trademarks.
|
|
*
|
|
* All the Product's GUI elements, including illustrations and icon sets, as
|
|
* well as technical writing content are licensed under the terms of the
|
|
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
|
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
|
*
|
|
*/
|
|
var JSON;
|
|
JSON || (JSON = {}),
|
|
function () {
|
|
function str(a, b) {
|
|
var c, d, e, f, g = gap,
|
|
h, i = b[a];
|
|
i && typeof i == "object" && typeof i.toJSON == "function" && (i = i.toJSON(a)),
|
|
typeof rep == "function" && (i = rep.call(b, a, i));
|
|
switch (typeof i) {
|
|
case "string":
|
|
return quote(i);
|
|
case "number":
|
|
return isFinite(i) ? String(i) : "null";
|
|
case "boolean":
|
|
case "null":
|
|
return String(i);
|
|
case "object":
|
|
if (!i) {
|
|
return "null";
|
|
}
|
|
gap += indent,
|
|
h = [];
|
|
if (Object.prototype.toString.apply(i) === "[object Array]") {
|
|
f = i.length;
|
|
for (c = 0; c < f; c += 1) {
|
|
h[c] = str(c, i) || "null";
|
|
}
|
|
e = h.length === 0 ? "[]" : gap ? "[\n" + gap + h.join(",\n" + gap) + "\n" + g + "]" : "[" + h.join(",") + "]",
|
|
gap = g;
|
|
return e;
|
|
}
|
|
if (rep && typeof rep == "object") {
|
|
f = rep.length;
|
|
for (c = 0; c < f; c += 1) {
|
|
typeof rep[c] == "string" && (d = rep[c], e = str(d, i), e && h.push(quote(d) + (gap ? ": ": ":") + e));
|
|
}
|
|
} else {
|
|
for (d in i) {
|
|
Object.prototype.hasOwnProperty.call(i, d) && (e = str(d, i), e && h.push(quote(d) + (gap ? ": ": ":") + e));
|
|
}
|
|
}
|
|
e = h.length === 0 ? "{}" : gap ? "{\n" + gap + h.join(",\n" + gap) + "\n" + g + "}" : "{" + h.join(",") + "}",
|
|
gap = g;
|
|
return e;
|
|
}
|
|
}
|
|
function quote(a) {
|
|
escapable.lastIndex = 0;
|
|
return escapable.test(a) ? '"' + a.replace(escapable, function (a) {
|
|
var b = meta[a];
|
|
return typeof b == "string" ? b : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
|
|
}) + '"' : '"' + a + '"';
|
|
}
|
|
function f(a) {
|
|
return a < 10 ? "0" + a : a;
|
|
}
|
|
"use strict",
|
|
typeof Date.prototype.toJSON != "function" && (Date.prototype.toJSON = function (a) {
|
|
return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + f(this.getUTCMonth() + 1) + "-" + f(this.getUTCDate()) + "T" + f(this.getUTCHours()) + ":" + f(this.getUTCMinutes()) + ":" + f(this.getUTCSeconds()) + "Z": null;
|
|
},
|
|
String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function (a) {
|
|
return this.valueOf();
|
|
});
|
|
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
|
|
escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
|
|
gap, indent, meta = {
|
|
"\b": "\\b",
|
|
"\t": "\\t",
|
|
"\n": "\\n",
|
|
"\f": "\\f",
|
|
"\r": "\\r",
|
|
'"': '\\"',
|
|
"\\": "\\\\"
|
|
},
|
|
rep;
|
|
typeof JSON.stringify != "function" && (JSON.stringify = function (a, b, c) {
|
|
var d;
|
|
gap = "",
|
|
indent = "";
|
|
if (typeof c == "number") {
|
|
for (d = 0; d < c; d += 1) {
|
|
indent += " ";
|
|
}
|
|
} else {
|
|
typeof c == "string" && (indent = c);
|
|
}
|
|
rep = b;
|
|
if (!b || typeof b == "function" || typeof b == "object" && typeof b.length == "number") {
|
|
return str("", {
|
|
"": a
|
|
});
|
|
}
|
|
throw new Error("JSON.stringify");
|
|
}),
|
|
typeof JSON.parse != "function" && (JSON.parse = function (text, reviver) {
|
|
function walk(a, b) {
|
|
var c, d, e = a[b];
|
|
if (e && typeof e == "object") {
|
|
for (c in e) {
|
|
Object.prototype.hasOwnProperty.call(e, c) && (d = walk(e, c), d !== undefined ? e[c] = d : delete e[c]);
|
|
}
|
|
}
|
|
return reviver.call(a, b, e);
|
|
}
|
|
var j;
|
|
text = String(text),
|
|
cx.lastIndex = 0,
|
|
cx.test(text) && (text = text.replace(cx, function (a) {
|
|
return "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
|
|
}));
|
|
if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) {
|
|
j = eval("(" + text + ")");
|
|
return typeof reviver == "function" ? walk({
|
|
"": j
|
|
},
|
|
"") : j;
|
|
}
|
|
throw new SyntaxError("JSON.parse");
|
|
});
|
|
} ();
|
|
SockJS = function () {
|
|
var a = document,
|
|
b = window,
|
|
c = {},
|
|
d = function () {};
|
|
d.prototype.addEventListener = function (a, b) {
|
|
this._listeners || (this._listeners = {}),
|
|
a in this._listeners || (this._listeners[a] = []);
|
|
var d = this._listeners[a];
|
|
c.arrIndexOf(d, b) === -1 && d.push(b);
|
|
return;
|
|
},
|
|
d.prototype.removeEventListener = function (a, b) {
|
|
if (! (this._listeners && a in this._listeners)) {
|
|
return;
|
|
}
|
|
var d = this._listeners[a],
|
|
e = c.arrIndexOf(d, b);
|
|
if (e !== -1) {
|
|
d.length > 1 ? this._listeners[a] = d.slice(0, e).concat(d.slice(e + 1)) : delete this._listeners[a];
|
|
return;
|
|
}
|
|
return;
|
|
},
|
|
d.prototype.dispatchEvent = function (a) {
|
|
var b = a.type,
|
|
c = Array.prototype.slice.call(arguments, 0);
|
|
this["on" + b] && this["on" + b].apply(this, c);
|
|
if (this._listeners && b in this._listeners) {
|
|
for (var d = 0; d < this._listeners[b].length; d++) {
|
|
this._listeners[b][d].apply(this, c);
|
|
}
|
|
}
|
|
};
|
|
var e = function (a, b) {
|
|
this.type = a;
|
|
if (typeof b != "undefined") {
|
|
for (var c in b) {
|
|
if (!b.hasOwnProperty(c)) {
|
|
continue;
|
|
}
|
|
this[c] = b[c];
|
|
}
|
|
}
|
|
};
|
|
e.prototype.toString = function () {
|
|
var a = [];
|
|
for (var b in this) {
|
|
if (!this.hasOwnProperty(b)) {
|
|
continue;
|
|
}
|
|
var c = this[b];
|
|
typeof c == "function" && (c = "[function]"),
|
|
a.push(b + "=" + c);
|
|
}
|
|
return "SimpleEvent(" + a.join(", ") + ")";
|
|
};
|
|
var f = function (a) {
|
|
var b = this;
|
|
b._events = a || [],
|
|
b._listeners = {};
|
|
};
|
|
f.prototype.emit = function (a) {
|
|
var b = this;
|
|
b._verifyType(a);
|
|
if (b._nuked) {
|
|
return;
|
|
}
|
|
var c = Array.prototype.slice.call(arguments, 1);
|
|
b["on" + a] && b["on" + a].apply(b, c);
|
|
if (a in b._listeners) {
|
|
for (var d = 0; d < b._listeners[a].length; d++) {
|
|
b._listeners[a][d].apply(b, c);
|
|
}
|
|
}
|
|
},
|
|
f.prototype.on = function (a, b) {
|
|
var c = this;
|
|
c._verifyType(a);
|
|
if (c._nuked) {
|
|
return;
|
|
}
|
|
a in c._listeners || (c._listeners[a] = []),
|
|
c._listeners[a].push(b);
|
|
},
|
|
f.prototype._verifyType = function (a) {
|
|
var b = this;
|
|
c.arrIndexOf(b._events, a) === -1 && c.log("Event " + JSON.stringify(a) + " not listed " + JSON.stringify(b._events) + " in " + b);
|
|
},
|
|
f.prototype.nuke = function () {
|
|
var a = this;
|
|
a._nuked = !0;
|
|
for (var b = 0; b < a._events.length; b++) {
|
|
delete a[a._events[b]];
|
|
}
|
|
a._listeners = {};
|
|
};
|
|
var g = "abcdefghijklmnopqrstuvwxyz0123456789_";
|
|
c.random_string = function (a, b) {
|
|
b = b || g.length;
|
|
var c, d = [];
|
|
for (c = 0; c < a; c++) {
|
|
d.push(g.substr(Math.floor(Math.random() * b), 1));
|
|
}
|
|
return d.join("");
|
|
},
|
|
c.random_number = function (a) {
|
|
return Math.floor(Math.random() * a);
|
|
},
|
|
c.random_number_string = function (a) {
|
|
var b = ("" + (a - 1)).length,
|
|
d = Array(b + 1).join("0");
|
|
return (d + c.random_number(a)).slice(-b);
|
|
},
|
|
c.getOrigin = function (a) {
|
|
a += "/";
|
|
var b = a.split("/").slice(0, 3);
|
|
return b.join("/");
|
|
},
|
|
c.isSameOriginUrl = function (a, c) {
|
|
return c || (c = b.location.href),
|
|
a.split("/").slice(0, 3).join("/") === c.split("/").slice(0, 3).join("/");
|
|
},
|
|
c.getParentDomain = function (a) {
|
|
if (/^[0-9.]*$/.test(a)) {
|
|
return a;
|
|
}
|
|
if (/^\[/.test(a)) {
|
|
return a;
|
|
}
|
|
if (!/[.]/.test(a)) {
|
|
return a;
|
|
}
|
|
var b = a.split(".").slice(1);
|
|
return b.join(".");
|
|
},
|
|
c.objectExtend = function (a, b) {
|
|
for (var c in b) {
|
|
b.hasOwnProperty(c) && (a[c] = b[c]);
|
|
}
|
|
return a;
|
|
};
|
|
var h = "_jp";
|
|
c.polluteGlobalNamespace = function () {
|
|
h in b || (b[h] = {});
|
|
},
|
|
c.closeFrame = function (a, b) {
|
|
return "c" + JSON.stringify([a, b]);
|
|
},
|
|
c.userSetCode = function (a) {
|
|
return a === 1000 || a >= 3000 && a <= 4999;
|
|
},
|
|
c.countRTO = function (a) {
|
|
var b;
|
|
return a > 100 ? b = 3 * a : b = a + 200,
|
|
b;
|
|
},
|
|
c.log = function () {
|
|
b.console && console.log && console.log.apply && console.log.apply(console, arguments);
|
|
},
|
|
c.bind = function (a, b) {
|
|
return a.bind ? a.bind(b) : function () {
|
|
return a.apply(b, arguments);
|
|
};
|
|
},
|
|
c.flatUrl = function (a) {
|
|
return a.indexOf("?") === -1 && a.indexOf("#") === -1;
|
|
},
|
|
c.amendUrl = function (b) {
|
|
var d = a.location;
|
|
if (!b) {
|
|
throw new Error("Wrong url for SockJS");
|
|
}
|
|
if (!c.flatUrl(b)) {
|
|
throw new Error("Only basic urls are supported in SockJS");
|
|
}
|
|
return b.indexOf("//") === 0 && (b = d.protocol + b),
|
|
b.indexOf("/") === 0 && (b = d.protocol + "//" + d.host + b),
|
|
b = b.replace(/[/]+$/, ""),
|
|
b;
|
|
},
|
|
c.arrIndexOf = function (a, b) {
|
|
for (var c = 0; c < a.length; c++) {
|
|
if (a[c] === b) {
|
|
return c;
|
|
}
|
|
}
|
|
return -1;
|
|
},
|
|
c.arrSkip = function (a, b) {
|
|
var d = c.arrIndexOf(a, b);
|
|
if (d === -1) {
|
|
return a.slice();
|
|
}
|
|
var e = a.slice(0, d);
|
|
return e.concat(a.slice(d + 1));
|
|
},
|
|
c.isArray = Array.isArray ||
|
|
function (a) {
|
|
return {}.toString.call(a).indexOf("Array") >= 0;
|
|
},
|
|
c.delay = function (a, b) {
|
|
return typeof a == "function" && (b = a, a = 0),
|
|
setTimeout(b, a);
|
|
};
|
|
var i = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
|
|
j = {
|
|
"\0": "\\u0000",
|
|
"\x01": "\\u0001",
|
|
"\x02": "\\u0002",
|
|
"\x03": "\\u0003",
|
|
"\x04": "\\u0004",
|
|
"\x05": "\\u0005",
|
|
"\x06": "\\u0006",
|
|
"\x07": "\\u0007",
|
|
"\b": "\\b",
|
|
"\t": "\\t",
|
|
"\n": "\\n",
|
|
"\x0b": "\\u000b",
|
|
"\f": "\\f",
|
|
"\r": "\\r",
|
|
"\x0e": "\\u000e",
|
|
"\x0f": "\\u000f",
|
|
"\x10": "\\u0010",
|
|
"\x11": "\\u0011",
|
|
"\x12": "\\u0012",
|
|
"\x13": "\\u0013",
|
|
"\x14": "\\u0014",
|
|
"\x15": "\\u0015",
|
|
"\x16": "\\u0016",
|
|
"\x17": "\\u0017",
|
|
"\x18": "\\u0018",
|
|
"\x19": "\\u0019",
|
|
"\x1a": "\\u001a",
|
|
"\x1b": "\\u001b",
|
|
"\x1c": "\\u001c",
|
|
"\x1d": "\\u001d",
|
|
"\x1e": "\\u001e",
|
|
"\x1f": "\\u001f",
|
|
'"': '\\"',
|
|
"\\": "\\\\",
|
|
"\x7f": "\\u007f",
|
|
"\x80": "\\u0080",
|
|
"\x81": "\\u0081",
|
|
"\x82": "\\u0082",
|
|
"\x83": "\\u0083",
|
|
"\x84": "\\u0084",
|
|
"\x85": "\\u0085",
|
|
"\x86": "\\u0086",
|
|
"\x87": "\\u0087",
|
|
"\x88": "\\u0088",
|
|
"\x89": "\\u0089",
|
|
"\x8a": "\\u008a",
|
|
"\x8b": "\\u008b",
|
|
"\x8c": "\\u008c",
|
|
"\x8d": "\\u008d",
|
|
"\x8e": "\\u008e",
|
|
"\x8f": "\\u008f",
|
|
"\x90": "\\u0090",
|
|
"\x91": "\\u0091",
|
|
"\x92": "\\u0092",
|
|
"\x93": "\\u0093",
|
|
"\x94": "\\u0094",
|
|
"\x95": "\\u0095",
|
|
"\x96": "\\u0096",
|
|
"\x97": "\\u0097",
|
|
"\x98": "\\u0098",
|
|
"\x99": "\\u0099",
|
|
"\x9a": "\\u009a",
|
|
"\x9b": "\\u009b",
|
|
"\x9c": "\\u009c",
|
|
"\x9d": "\\u009d",
|
|
"\x9e": "\\u009e",
|
|
"\x9f": "\\u009f",
|
|
"\xad": "\\u00ad",
|
|
"\u0600": "\\u0600",
|
|
"\u0601": "\\u0601",
|
|
"\u0602": "\\u0602",
|
|
"\u0603": "\\u0603",
|
|
"\u0604": "\\u0604",
|
|
"\u070f": "\\u070f",
|
|
"\u17b4": "\\u17b4",
|
|
"\u17b5": "\\u17b5",
|
|
"\u200c": "\\u200c",
|
|
"\u200d": "\\u200d",
|
|
"\u200e": "\\u200e",
|
|
"\u200f": "\\u200f",
|
|
"\u2028": "\\u2028",
|
|
"\u2029": "\\u2029",
|
|
"\u202a": "\\u202a",
|
|
"\u202b": "\\u202b",
|
|
"\u202c": "\\u202c",
|
|
"\u202d": "\\u202d",
|
|
"\u202e": "\\u202e",
|
|
"\u202f": "\\u202f",
|
|
"\u2060": "\\u2060",
|
|
"\u2061": "\\u2061",
|
|
"\u2062": "\\u2062",
|
|
"\u2063": "\\u2063",
|
|
"\u2064": "\\u2064",
|
|
"\u2065": "\\u2065",
|
|
"\u2066": "\\u2066",
|
|
"\u2067": "\\u2067",
|
|
"\u2068": "\\u2068",
|
|
"\u2069": "\\u2069",
|
|
"\u206a": "\\u206a",
|
|
"\u206b": "\\u206b",
|
|
"\u206c": "\\u206c",
|
|
"\u206d": "\\u206d",
|
|
"\u206e": "\\u206e",
|
|
"\u206f": "\\u206f",
|
|
"\ufeff": "\\ufeff",
|
|
"\ufff0": "\\ufff0",
|
|
"\ufff1": "\\ufff1",
|
|
"\ufff2": "\\ufff2",
|
|
"\ufff3": "\\ufff3",
|
|
"\ufff4": "\\ufff4",
|
|
"\ufff5": "\\ufff5",
|
|
"\ufff6": "\\ufff6",
|
|
"\ufff7": "\\ufff7",
|
|
"\ufff8": "\\ufff8",
|
|
"\ufff9": "\\ufff9",
|
|
"\ufffa": "\\ufffa",
|
|
"\ufffb": "\\ufffb",
|
|
"\ufffc": "\\ufffc",
|
|
"\ufffd": "\\ufffd",
|
|
"\ufffe": "\\ufffe",
|
|
"\uffff": "\\uffff"
|
|
},
|
|
k = /[\x00-\x1f\ud800-\udfff\ufffe\uffff\u0300-\u0333\u033d-\u0346\u034a-\u034c\u0350-\u0352\u0357-\u0358\u035c-\u0362\u0374\u037e\u0387\u0591-\u05af\u05c4\u0610-\u0617\u0653-\u0654\u0657-\u065b\u065d-\u065e\u06df-\u06e2\u06eb-\u06ec\u0730\u0732-\u0733\u0735-\u0736\u073a\u073d\u073f-\u0741\u0743\u0745\u0747\u07eb-\u07f1\u0951\u0958-\u095f\u09dc-\u09dd\u09df\u0a33\u0a36\u0a59-\u0a5b\u0a5e\u0b5c-\u0b5d\u0e38-\u0e39\u0f43\u0f4d\u0f52\u0f57\u0f5c\u0f69\u0f72-\u0f76\u0f78\u0f80-\u0f83\u0f93\u0f9d\u0fa2\u0fa7\u0fac\u0fb9\u1939-\u193a\u1a17\u1b6b\u1cda-\u1cdb\u1dc0-\u1dcf\u1dfc\u1dfe\u1f71\u1f73\u1f75\u1f77\u1f79\u1f7b\u1f7d\u1fbb\u1fbe\u1fc9\u1fcb\u1fd3\u1fdb\u1fe3\u1feb\u1fee-\u1fef\u1ff9\u1ffb\u1ffd\u2000-\u2001\u20d0-\u20d1\u20d4-\u20d7\u20e7-\u20e9\u2126\u212a-\u212b\u2329-\u232a\u2adc\u302b-\u302c\uaab2-\uaab3\uf900-\ufa0d\ufa10\ufa12\ufa15-\ufa1e\ufa20\ufa22\ufa25-\ufa26\ufa2a-\ufa2d\ufa30-\ufa6d\ufa70-\ufad9\ufb1d\ufb1f\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufb4e\ufff0-\uffff]/g,
|
|
l,
|
|
m = JSON && JSON.stringify ||
|
|
function (a) {
|
|
return i.lastIndex = 0,
|
|
i.test(a) && (a = a.replace(i, function (a) {
|
|
return j[a];
|
|
})),
|
|
'"' + a + '"';
|
|
},
|
|
n = function (a) {
|
|
var b, c = {},
|
|
d = [];
|
|
for (b = 0; b < 65536; b++) {
|
|
d.push(String.fromCharCode(b));
|
|
}
|
|
return a.lastIndex = 0,
|
|
d.join("").replace(a, function (a) {
|
|
return c[a] = "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4),
|
|
"";
|
|
}),
|
|
a.lastIndex = 0,
|
|
c;
|
|
};
|
|
c.quote = function (a) {
|
|
var b = m(a);
|
|
return k.lastIndex = 0,
|
|
k.test(b) ? (l || (l = n(k)), b.replace(k, function (a) {
|
|
return l[a];
|
|
})) : b;
|
|
};
|
|
var o = ["websocket", "xdr-streaming", "xhr-streaming", "iframe-eventsource", "iframe-htmlfile", "xdr-polling", "xhr-polling", "iframe-xhr-polling", "jsonp-polling"];
|
|
c.probeProtocols = function () {
|
|
var a = {};
|
|
for (var b = 0; b < o.length; b++) {
|
|
var c = o[b];
|
|
a[c] = y[c] && y[c].enabled();
|
|
}
|
|
return a;
|
|
},
|
|
c.detectProtocols = function (a, b, c) {
|
|
var d = {},
|
|
e = [];
|
|
b || (b = o);
|
|
for (var f = 0; f < b.length; f++) {
|
|
var g = b[f];
|
|
d[g] = a[g];
|
|
}
|
|
var h = function (a) {
|
|
var b = a.shift();
|
|
d[b] ? e.push(b) : a.length > 0 && h(a);
|
|
};
|
|
return c.websocket !== !1 && h(["websocket"]),
|
|
d["xhr-streaming"] && !c.null_origin ? e.push("xhr-streaming") : d["xdr-streaming"] && !c.cookie_needed && !c.null_origin ? e.push("xdr-streaming") : h(["iframe-eventsource", "iframe-htmlfile"]),
|
|
d["xhr-polling"] && !c.null_origin ? e.push("xhr-polling") : d["xdr-polling"] && !c.cookie_needed && !c.null_origin ? e.push("xdr-polling") : h(["iframe-xhr-polling", "jsonp-polling"]),
|
|
e;
|
|
};
|
|
var p = "_sockjs_global";
|
|
c.createHook = function () {
|
|
var a = "a" + c.random_string(8);
|
|
if (! (p in b)) {
|
|
var d = {};
|
|
b[p] = function (a) {
|
|
return a in d || (d[a] = {
|
|
id: a,
|
|
del: function () {
|
|
delete d[a];
|
|
}
|
|
}),
|
|
d[a];
|
|
};
|
|
}
|
|
return b[p](a);
|
|
},
|
|
c.attachMessage = function (a) {
|
|
c.attachEvent("message", a);
|
|
},
|
|
c.attachEvent = function (c, d) {
|
|
typeof b.addEventListener != "undefined" ? b.addEventListener(c, d, !1) : (a.attachEvent("on" + c, d), b.attachEvent("on" + c, d));
|
|
},
|
|
c.detachMessage = function (a) {
|
|
c.detachEvent("message", a);
|
|
},
|
|
c.detachEvent = function (c, d) {
|
|
typeof b.addEventListener != "undefined" ? b.removeEventListener(c, d, !1) : (a.detachEvent("on" + c, d), b.detachEvent("on" + c, d));
|
|
};
|
|
var q = {},
|
|
r = !1,
|
|
s = function () {
|
|
for (var a in q) {
|
|
q[a](),
|
|
delete q[a];
|
|
}
|
|
},
|
|
t = function () {
|
|
if (r) {
|
|
return;
|
|
}
|
|
r = !0,
|
|
s();
|
|
};
|
|
c.attachEvent("unload", t),
|
|
c.unload_add = function (a) {
|
|
var b = c.random_string(8);
|
|
return q[b] = a,
|
|
r && c.delay(s),
|
|
b;
|
|
},
|
|
c.unload_del = function (a) {
|
|
a in q && delete q[a];
|
|
},
|
|
c.createIframe = function (b, d) {
|
|
var e = a.createElement("iframe"),
|
|
f,
|
|
g,
|
|
h = function () {
|
|
clearTimeout(f);
|
|
try {
|
|
e.onload = null;
|
|
} catch(a) {}
|
|
e.onerror = null;
|
|
},
|
|
i = function () {
|
|
e && (h(), setTimeout(function () {
|
|
e && e.parentNode.removeChild(e),
|
|
e = null;
|
|
},
|
|
0), c.unload_del(g));
|
|
},
|
|
j = function (a) {
|
|
e && (i(), d(a));
|
|
},
|
|
k = function (a, b) {
|
|
try {
|
|
e && e.contentWindow && e.contentWindow.postMessage(a, b);
|
|
} catch(c) {}
|
|
};
|
|
return e.src = b,
|
|
e.style.display = "none",
|
|
e.style.position = "absolute",
|
|
e.onerror = function () {
|
|
j("onerror");
|
|
},
|
|
e.onload = function () {
|
|
clearTimeout(f),
|
|
f = setTimeout(function () {
|
|
j("onload timeout");
|
|
},
|
|
2000);
|
|
},
|
|
a.body.appendChild(e),
|
|
f = setTimeout(function () {
|
|
j("timeout");
|
|
},
|
|
15000),
|
|
g = c.unload_add(i),
|
|
{
|
|
post: k,
|
|
cleanup: i,
|
|
loaded: h
|
|
};
|
|
},
|
|
c.createHtmlfile = function (a, d) {
|
|
var e = new ActiveXObject("htmlfile"),
|
|
f,
|
|
g,
|
|
i,
|
|
j = function () {
|
|
clearTimeout(f);
|
|
},
|
|
k = function () {
|
|
e && (j(), c.unload_del(g), i.parentNode.removeChild(i), i = e = null, CollectGarbage());
|
|
},
|
|
l = function (a) {
|
|
e && (k(), d(a));
|
|
},
|
|
m = function (a, b) {
|
|
try {
|
|
i && i.contentWindow && i.contentWindow.postMessage(a, b);
|
|
} catch(c) {}
|
|
};
|
|
e.open(),
|
|
e.write('<html><script>document.domain="' + document.domain + '";' + "</s" + "cript></html>"),
|
|
e.close(),
|
|
e.parentWindow[h] = b[h];
|
|
var n = e.createElement("div");
|
|
return e.body.appendChild(n),
|
|
i = e.createElement("iframe"),
|
|
n.appendChild(i),
|
|
i.src = a,
|
|
f = setTimeout(function () {
|
|
l("timeout");
|
|
},
|
|
15000),
|
|
g = c.unload_add(k),
|
|
{
|
|
post: m,
|
|
cleanup: k,
|
|
loaded: j
|
|
};
|
|
};
|
|
var u = function () {};
|
|
u.prototype = new f(["chunk", "finish"]),
|
|
u.prototype._start = function (a, d, e, f) {
|
|
var g = this;
|
|
try {
|
|
g.xhr = new XMLHttpRequest;
|
|
} catch(h) {}
|
|
if (!g.xhr) {
|
|
try {
|
|
g.xhr = new b.ActiveXObject("Microsoft.XMLHTTP");
|
|
} catch(h) {}
|
|
}
|
|
if (b.ActiveXObject || b.XDomainRequest) {
|
|
d += (d.indexOf("?") === -1 ? "?" : "&") + "t=" + +(new Date);
|
|
}
|
|
g.unload_ref = c.unload_add(function () {
|
|
g._cleanup(!0);
|
|
});
|
|
try {
|
|
g.xhr.open(a, d, !0);
|
|
} catch(i) {
|
|
g.emit("finish", 0, ""),
|
|
g._cleanup();
|
|
return;
|
|
}
|
|
if (!f || !f.no_credentials) {
|
|
g.xhr.withCredentials = "true";
|
|
}
|
|
if (f && f.headers) {
|
|
for (var j in f.headers) {
|
|
g.xhr.setRequestHeader(j, f.headers[j]);
|
|
}
|
|
}
|
|
g.xhr.onreadystatechange = function () {
|
|
if (g.xhr) {
|
|
var a = g.xhr;
|
|
switch (a.readyState) {
|
|
case 3:
|
|
try {
|
|
var b = a.status,
|
|
c = a.responseText;
|
|
} catch(a) {}
|
|
b === 1223 && (b = 204),
|
|
c && c.length > 0 && g.emit("chunk", b, c);
|
|
break;
|
|
case 4:
|
|
var b = a.status;
|
|
b === 1223 && (b = 204),
|
|
g.emit("finish", b, a.responseText),
|
|
g._cleanup(!1);
|
|
}
|
|
}
|
|
},
|
|
g.xhr.send(e);
|
|
},
|
|
u.prototype._cleanup = function (a) {
|
|
var b = this;
|
|
if (!b.xhr) {
|
|
return;
|
|
}
|
|
c.unload_del(b.unload_ref),
|
|
b.xhr.onreadystatechange = function () {};
|
|
if (a) {
|
|
try {
|
|
b.xhr.abort();
|
|
} catch(d) {}
|
|
}
|
|
b.unload_ref = b.xhr = null;
|
|
},
|
|
u.prototype.close = function () {
|
|
var a = this;
|
|
a.nuke(),
|
|
a._cleanup(!0);
|
|
};
|
|
var v = c.XHRCorsObject = function () {
|
|
var a = this,
|
|
b = arguments;
|
|
c.delay(function () {
|
|
a._start.apply(a, b);
|
|
});
|
|
};
|
|
v.prototype = new u;
|
|
var w = c.XHRLocalObject = function (a, b, d) {
|
|
var e = this;
|
|
c.delay(function () {
|
|
e._start(a, b, d, {
|
|
no_credentials: !0
|
|
});
|
|
});
|
|
};
|
|
w.prototype = new u;
|
|
var x = c.XDRObject = function (a, b, d) {
|
|
var e = this;
|
|
c.delay(function () {
|
|
e._start(a, b, d);
|
|
});
|
|
};
|
|
x.prototype = new f(["chunk", "finish"]),
|
|
x.prototype._start = function (a, b, d) {
|
|
var e = this,
|
|
f = new XDomainRequest;
|
|
b += (b.indexOf("?") === -1 ? "?" : "&") + "t=" + +(new Date);
|
|
var g = f.ontimeout = f.onerror = function () {
|
|
e.emit("finish", 0, ""),
|
|
e._cleanup(!1);
|
|
};
|
|
f.onprogress = function () {
|
|
e.emit("chunk", 200, f.responseText);
|
|
},
|
|
f.onload = function () {
|
|
e.emit("finish", 200, f.responseText),
|
|
e._cleanup(!1);
|
|
},
|
|
e.xdr = f,
|
|
e.unload_ref = c.unload_add(function () {
|
|
e._cleanup(!0);
|
|
});
|
|
try {
|
|
e.xdr.open(a, b),
|
|
e.xdr.send(d);
|
|
} catch(h) {
|
|
g();
|
|
}
|
|
},
|
|
x.prototype._cleanup = function (a) {
|
|
var b = this;
|
|
if (!b.xdr) {
|
|
return;
|
|
}
|
|
c.unload_del(b.unload_ref),
|
|
b.xdr.ontimeout = b.xdr.onerror = b.xdr.onprogress = b.xdr.onload = null;
|
|
if (a) {
|
|
try {
|
|
b.xdr.abort();
|
|
} catch(d) {}
|
|
}
|
|
b.unload_ref = b.xdr = null;
|
|
},
|
|
x.prototype.close = function () {
|
|
var a = this;
|
|
a.nuke(),
|
|
a._cleanup(!0);
|
|
},
|
|
c.isXHRCorsCapable = function () {
|
|
return b.XMLHttpRequest && "withCredentials" in new XMLHttpRequest ? 1 : b.XDomainRequest && a.domain ? 2 : L.enabled() ? 3 : 4;
|
|
};
|
|
var y = function (a, d, e) {
|
|
if (this === b) {
|
|
return new y(a, d, e);
|
|
}
|
|
var f = this,
|
|
g;
|
|
f._options = {
|
|
devel: !1,
|
|
debug: !1,
|
|
protocols_whitelist: [],
|
|
info: undefined,
|
|
rtt: undefined
|
|
},
|
|
e && c.objectExtend(f._options, e),
|
|
f._base_url = c.amendUrl(a),
|
|
f._server = f._options.server || c.random_number_string(1000),
|
|
f._options.protocols_whitelist && f._options.protocols_whitelist.length ? g = f._options.protocols_whitelist : (typeof d == "string" && d.length > 0 ? g = [d] : c.isArray(d) ? g = d : g = null, g && f._debug('Deprecated API: Use "protocols_whitelist" option instead of supplying protocol list as a second parameter to SockJS constructor.')),
|
|
f._protocols = [],
|
|
f.protocol = null,
|
|
f.readyState = y.CONNECTING,
|
|
f._ir = S(f._base_url),
|
|
f._ir.onfinish = function (a, b) {
|
|
f._ir = null,
|
|
a ? (f._options.info && (a = c.objectExtend(a, f._options.info)), f._options.rtt && (b = f._options.rtt), f._applyInfo(a, b, g), f._didClose()) : f._didClose(1002, "Can't connect to server", !0);
|
|
};
|
|
};
|
|
y.prototype = new d,
|
|
y.version = "0.3.4",
|
|
y.CONNECTING = 0,
|
|
y.OPEN = 1,
|
|
y.CLOSING = 2,
|
|
y.CLOSED = 3,
|
|
y.prototype._debug = function () {
|
|
this._options.debug && c.log.apply(c, arguments);
|
|
},
|
|
y.prototype._dispatchOpen = function () {
|
|
var a = this;
|
|
a.readyState === y.CONNECTING ? (a._transport_tref && (clearTimeout(a._transport_tref), a._transport_tref = null), a.readyState = y.OPEN, a.dispatchEvent(new e("open"))) : a._didClose(1006, "Server lost session");
|
|
},
|
|
y.prototype._dispatchMessage = function (a) {
|
|
var b = this;
|
|
if (b.readyState !== y.OPEN) {
|
|
return;
|
|
}
|
|
b.dispatchEvent(new e("message", {
|
|
data: a
|
|
}));
|
|
},
|
|
y.prototype._dispatchHeartbeat = function (a) {
|
|
var b = this;
|
|
if (b.readyState !== y.OPEN) {
|
|
return;
|
|
}
|
|
b.dispatchEvent(new e("heartbeat", {}));
|
|
},
|
|
y.prototype._didClose = function (a, b, d) {
|
|
var f = this;
|
|
if (f.readyState !== y.CONNECTING && f.readyState !== y.OPEN && f.readyState !== y.CLOSING) {
|
|
throw new Error("INVALID_STATE_ERR");
|
|
}
|
|
f._ir && (f._ir.nuke(), f._ir = null),
|
|
f._transport && (f._transport.doCleanup(), f._transport = null);
|
|
var g = new e("close", {
|
|
code: a,
|
|
reason: b,
|
|
wasClean: c.userSetCode(a)
|
|
});
|
|
if (!c.userSetCode(a) && f.readyState === y.CONNECTING && !d) {
|
|
if (f._try_next_protocol(g)) {
|
|
return;
|
|
}
|
|
g = new e("close", {
|
|
code: 2000,
|
|
reason: "All transports failed",
|
|
wasClean: !1,
|
|
last_event: g
|
|
});
|
|
}
|
|
f.readyState = y.CLOSED,
|
|
c.delay(function () {
|
|
f.dispatchEvent(g);
|
|
});
|
|
},
|
|
y.prototype._didMessage = function (a) {
|
|
var b = this,
|
|
c = a.slice(0, 1);
|
|
switch (c) {
|
|
case "o":
|
|
b._dispatchOpen();
|
|
break;
|
|
case "a":
|
|
var d = JSON.parse(a.slice(1) || "[]");
|
|
for (var e = 0; e < d.length; e++) {
|
|
b._dispatchMessage(d[e]);
|
|
}
|
|
break;
|
|
case "m":
|
|
var d = JSON.parse(a.slice(1) || "null");
|
|
b._dispatchMessage(d);
|
|
break;
|
|
case "c":
|
|
var d = JSON.parse(a.slice(1) || "[]");
|
|
b._didClose(d[0], d[1]);
|
|
break;
|
|
case "h":
|
|
b._dispatchHeartbeat();
|
|
}
|
|
},
|
|
y.prototype._try_next_protocol = function (b) {
|
|
var d = this;
|
|
d.protocol && (d._debug("Closed transport:", d.protocol, "" + b), d.protocol = null),
|
|
d._transport_tref && (clearTimeout(d._transport_tref), d._transport_tref = null);
|
|
for (;;) {
|
|
var e = d.protocol = d._protocols.shift();
|
|
if (!e) {
|
|
return !1;
|
|
}
|
|
if (y[e] && y[e].need_body === !0 && (!a.body || typeof a.readyState != "undefined" && a.readyState !== "complete")) {
|
|
return d._protocols.unshift(e),
|
|
d.protocol = "waiting-for-load",
|
|
c.attachEvent("load", function () {
|
|
d._try_next_protocol();
|
|
}),
|
|
!0;
|
|
}
|
|
if ( !! y[e] && !!y[e].enabled(d._options)) {
|
|
var f = y[e].roundTrips || 1,
|
|
g = (d._options.rto || 0) * f || 5000;
|
|
d._transport_tref = c.delay(g, function () {
|
|
d.readyState === y.CONNECTING && d._didClose(2007, "Transport timeouted");
|
|
});
|
|
var h = c.random_string(8),
|
|
i = d._base_url + "/" + d._server + "/" + h;
|
|
return d._debug("Opening transport:", e, " url:" + i, " RTO:" + d._options.rto),
|
|
d._transport = new y[e](d, i, d._base_url),
|
|
!0;
|
|
}
|
|
d._debug("Skipping transport:", e);
|
|
}
|
|
},
|
|
y.prototype.close = function (a, b) {
|
|
var d = this;
|
|
if (a && !c.userSetCode(a)) {
|
|
throw new Error("INVALID_ACCESS_ERR");
|
|
}
|
|
return d.readyState !== y.CONNECTING && d.readyState !== y.OPEN ? !1 : (d.readyState = y.CLOSING, d._didClose(a || 1000, b || "Normal closure"), !0);
|
|
},
|
|
y.prototype.send = function (a) {
|
|
var b = this;
|
|
if (b.readyState === y.CONNECTING) {
|
|
throw new Error("INVALID_STATE_ERR");
|
|
}
|
|
return b.readyState === y.OPEN && b._transport.doSend(c.quote("" + a)),
|
|
!0;
|
|
},
|
|
y.prototype._applyInfo = function (b, d, e) {
|
|
var f = this;
|
|
f._options.info = b,
|
|
f._options.rtt = d,
|
|
f._options.rto = c.countRTO(d),
|
|
f._options.info.null_origin = !a.domain;
|
|
var g = c.probeProtocols();
|
|
f._protocols = c.detectProtocols(g, e, b);
|
|
};
|
|
var z = y.websocket = function (a, d) {
|
|
var e = this,
|
|
f = d + "/websocket";
|
|
f.slice(0, 5) === "https" ? f = "wss" + f.slice(5) : f = "ws" + f.slice(4),
|
|
e.ri = a,
|
|
e.url = f;
|
|
var g = b.WebSocket || b.MozWebSocket;
|
|
e.ws = new g(e.url),
|
|
e.ws.onmessage = function (a) {
|
|
e.ri._didMessage(a.data);
|
|
},
|
|
e.unload_ref = c.unload_add(function () {
|
|
e.ws.close();
|
|
}),
|
|
e.ws.onclose = function () {
|
|
e.ri._didMessage(c.closeFrame(1006, "WebSocket connection broken"));
|
|
};
|
|
};
|
|
z.prototype.doSend = function (a) {
|
|
this.ws.send("[" + a + "]");
|
|
},
|
|
z.prototype.doCleanup = function () {
|
|
var a = this,
|
|
b = a.ws;
|
|
b && (b.onmessage = b.onclose = null, b.close(), c.unload_del(a.unload_ref), a.unload_ref = a.ri = a.ws = null);
|
|
},
|
|
z.enabled = function () {
|
|
return !! b.WebSocket || !!b.MozWebSocket;
|
|
},
|
|
z.roundTrips = 2;
|
|
var A = function () {};
|
|
A.prototype.send_constructor = function (a) {
|
|
var b = this;
|
|
b.send_buffer = [],
|
|
b.sender = a;
|
|
},
|
|
A.prototype.doSend = function (a) {
|
|
var b = this;
|
|
b.send_buffer.push(a),
|
|
b.send_stop || b.send_schedule();
|
|
},
|
|
A.prototype.send_schedule_wait = function () {
|
|
var a = this,
|
|
b;
|
|
a.send_stop = function () {
|
|
a.send_stop = null,
|
|
clearTimeout(b);
|
|
},
|
|
b = c.delay(25, function () {
|
|
a.send_stop = null,
|
|
a.send_schedule();
|
|
});
|
|
},
|
|
A.prototype.send_schedule = function () {
|
|
var a = this;
|
|
if (a.send_buffer.length > 0) {
|
|
var b = "[" + a.send_buffer.join(",") + "]";
|
|
a.send_stop = a.sender(a.trans_url, b, function (b, c) {
|
|
a.send_stop = null,
|
|
b === !1 ? a.ri._didClose(1006, "Sending error " + c) : a.send_schedule_wait();
|
|
}),
|
|
a.send_buffer = [];
|
|
}
|
|
},
|
|
A.prototype.send_destructor = function () {
|
|
var a = this;
|
|
a._send_stop && a._send_stop(),
|
|
a._send_stop = null;
|
|
};
|
|
var B = function (b, d, e) {
|
|
var f = this;
|
|
if (! ("_send_form" in f)) {
|
|
var g = f._send_form = a.createElement("form"),
|
|
h = f._send_area = a.createElement("textarea");
|
|
h.name = "d",
|
|
g.style.display = "none",
|
|
g.style.position = "absolute",
|
|
g.method = "POST",
|
|
g.enctype = "application/x-www-form-urlencoded",
|
|
g.acceptCharset = "UTF-8",
|
|
g.appendChild(h),
|
|
a.body.appendChild(g);
|
|
}
|
|
var g = f._send_form,
|
|
h = f._send_area,
|
|
i = "a" + c.random_string(8);
|
|
g.target = i,
|
|
g.action = b + "/jsonp_send?i=" + i;
|
|
var j;
|
|
try {
|
|
j = a.createElement('<iframe name="' + i + '">');
|
|
} catch(k) {
|
|
j = a.createElement("iframe"),
|
|
j.name = i;
|
|
}
|
|
j.id = i,
|
|
g.appendChild(j),
|
|
j.style.display = "none";
|
|
try {
|
|
h.value = d;
|
|
} catch(l) {
|
|
c.log("Your browser is seriously broken. Go home! " + l.message);
|
|
}
|
|
g.submit();
|
|
var m = function (a) {
|
|
if (!j.onerror) {
|
|
return;
|
|
}
|
|
j.onreadystatechange = j.onerror = j.onload = null,
|
|
c.delay(500, function () {
|
|
j.parentNode.removeChild(j),
|
|
j = null;
|
|
}),
|
|
h.value = "",
|
|
e(!0);
|
|
};
|
|
return j.onerror = j.onload = m,
|
|
j.onreadystatechange = function (a) {
|
|
j.readyState == "complete" && m();
|
|
},
|
|
m;
|
|
},
|
|
C = function (a) {
|
|
return function (b, c, d) {
|
|
var e = new a("POST", b + "/xhr_send", c);
|
|
return e.onfinish = function (a, b) {
|
|
d(a === 200 || a === 204, "http status " + a);
|
|
},
|
|
function (a) {
|
|
d(!1, a);
|
|
};
|
|
};
|
|
},
|
|
D = function (b, d) {
|
|
var e, f = a.createElement("script"),
|
|
g,
|
|
h = function (a) {
|
|
g && (g.parentNode.removeChild(g), g = null),
|
|
f && (clearTimeout(e), f.parentNode.removeChild(f), f.onreadystatechange = f.onerror = f.onload = f.onclick = null, f = null, d(a), d = null);
|
|
},
|
|
i = !1,
|
|
j = null;
|
|
f.id = "a" + c.random_string(8),
|
|
f.src = b,
|
|
f.type = "text/javascript",
|
|
f.charset = "UTF-8",
|
|
f.onerror = function (a) {
|
|
j || (j = setTimeout(function () {
|
|
i || h(c.closeFrame(1006, "JSONP script loaded abnormally (onerror)"));
|
|
},
|
|
1000));
|
|
},
|
|
f.onload = function (a) {
|
|
h(c.closeFrame(1006, "JSONP script loaded abnormally (onload)"));
|
|
},
|
|
f.onreadystatechange = function (a) {
|
|
if (/loaded|closed/.test(f.readyState)) {
|
|
if (f && f.htmlFor && f.onclick) {
|
|
i = !0;
|
|
try {
|
|
f.onclick();
|
|
} catch(b) {}
|
|
}
|
|
f && h(c.closeFrame(1006, "JSONP script loaded abnormally (onreadystatechange)"));
|
|
}
|
|
};
|
|
if (typeof f.async == "undefined" && a.attachEvent) {
|
|
if (!/opera/i.test(navigator.userAgent)) {
|
|
try {
|
|
f.htmlFor = f.id,
|
|
f.event = "onclick";
|
|
} catch(k) {}
|
|
f.async = !0;
|
|
} else {
|
|
g = a.createElement("script"),
|
|
g.text = "try{var a = document.getElementById('" + f.id + "'); if(a)a.onerror();}catch(x){};",
|
|
f.async = g.async = !1;
|
|
}
|
|
}
|
|
typeof f.async != "undefined" && (f.async = !0),
|
|
e = setTimeout(function () {
|
|
h(c.closeFrame(1006, "JSONP script loaded abnormally (timeout)"));
|
|
},
|
|
35000);
|
|
var l = a.getElementsByTagName("head")[0];
|
|
return l.insertBefore(f, l.firstChild),
|
|
g && l.insertBefore(g, l.firstChild),
|
|
h;
|
|
},
|
|
E = y["jsonp-polling"] = function (a, b) {
|
|
c.polluteGlobalNamespace();
|
|
var d = this;
|
|
d.ri = a,
|
|
d.trans_url = b,
|
|
d.send_constructor(B),
|
|
d._schedule_recv();
|
|
};
|
|
E.prototype = new A,
|
|
E.prototype._schedule_recv = function () {
|
|
var a = this,
|
|
b = function (b) {
|
|
a._recv_stop = null,
|
|
b && (a._is_closing || a.ri._didMessage(b)),
|
|
a._is_closing || a._schedule_recv();
|
|
};
|
|
a._recv_stop = F(a.trans_url + "/jsonp", D, b);
|
|
},
|
|
E.enabled = function () {
|
|
return !0;
|
|
},
|
|
E.need_body = !0,
|
|
E.prototype.doCleanup = function () {
|
|
var a = this;
|
|
a._is_closing = !0,
|
|
a._recv_stop && a._recv_stop(),
|
|
a.ri = a._recv_stop = null,
|
|
a.send_destructor();
|
|
};
|
|
var F = function (a, d, e) {
|
|
var f = "a" + c.random_string(6),
|
|
g = a + "?c=" + escape(h + "." + f),
|
|
i = 0,
|
|
j = function (a) {
|
|
switch (i) {
|
|
case 0:
|
|
delete b[h][f],
|
|
e(a);
|
|
break;
|
|
case 1:
|
|
e(a),
|
|
i = 2;
|
|
break;
|
|
case 2:
|
|
delete b[h][f];
|
|
}
|
|
},
|
|
k = d(g, j);
|
|
b[h][f] = k;
|
|
var l = function () {
|
|
b[h][f] && (i = 1, b[h][f](c.closeFrame(1000, "JSONP user aborted read")));
|
|
};
|
|
return l;
|
|
},
|
|
G = function () {};
|
|
G.prototype = new A,
|
|
G.prototype.run = function (a, b, c, d, e) {
|
|
var f = this;
|
|
f.ri = a,
|
|
f.trans_url = b,
|
|
f.send_constructor(C(e)),
|
|
f.poll = new $(a, d, b + c, e);
|
|
},
|
|
G.prototype.doCleanup = function () {
|
|
var a = this;
|
|
a.poll && (a.poll.abort(), a.poll = null);
|
|
};
|
|
var H = y["xhr-streaming"] = function (a, b) {
|
|
this.run(a, b, "/xhr_streaming", bd, c.XHRCorsObject);
|
|
};
|
|
H.prototype = new G,
|
|
H.enabled = function () {
|
|
return b.XMLHttpRequest && "withCredentials" in new XMLHttpRequest && !/opera/i.test(navigator.userAgent);
|
|
},
|
|
H.roundTrips = 2,
|
|
H.need_body = !0;
|
|
var I = y["xdr-streaming"] = function (a, b) {
|
|
this.run(a, b, "/xhr_streaming", bd, c.XDRObject);
|
|
};
|
|
I.prototype = new G,
|
|
I.enabled = function () {
|
|
return !! b.XDomainRequest;
|
|
},
|
|
I.roundTrips = 2;
|
|
var J = y["xhr-polling"] = function (a, b) {
|
|
this.run(a, b, "/xhr", bd, c.XHRCorsObject);
|
|
};
|
|
J.prototype = new G,
|
|
J.enabled = H.enabled,
|
|
J.roundTrips = 2;
|
|
var K = y["xdr-polling"] = function (a, b) {
|
|
this.run(a, b, "/xhr", bd, c.XDRObject);
|
|
};
|
|
K.prototype = new G,
|
|
K.enabled = I.enabled,
|
|
K.roundTrips = 2;
|
|
var L = function () {};
|
|
L.prototype.i_constructor = function (a, b, d) {
|
|
var e = this;
|
|
e.ri = a,
|
|
e.origin = c.getOrigin(d),
|
|
e.base_url = d,
|
|
e.trans_url = b;
|
|
var f = d + "/iframe.html";
|
|
e.ri._options.devel && (f += "?t=" + +(new Date)),
|
|
e.window_id = c.random_string(8),
|
|
f += "#" + e.window_id,
|
|
e.iframeObj = c.createIframe(f, function (a) {
|
|
e.ri._didClose(1006, "Unable to load an iframe (" + a + ")");
|
|
}),
|
|
e.onmessage_cb = c.bind(e.onmessage, e),
|
|
c.attachMessage(e.onmessage_cb);
|
|
},
|
|
L.prototype.doCleanup = function () {
|
|
var a = this;
|
|
if (a.iframeObj) {
|
|
c.detachMessage(a.onmessage_cb);
|
|
try {
|
|
a.iframeObj.iframe.contentWindow && a.postMessage("c");
|
|
} catch(b) {}
|
|
a.iframeObj.cleanup(),
|
|
a.iframeObj = null,
|
|
a.onmessage_cb = a.iframeObj = null;
|
|
}
|
|
},
|
|
L.prototype.onmessage = function (a) {
|
|
var b = this;
|
|
if (a.origin !== b.origin) {
|
|
return;
|
|
}
|
|
var c = a.data.slice(0, 8),
|
|
d = a.data.slice(8, 9),
|
|
e = a.data.slice(9);
|
|
if (c !== b.window_id) {
|
|
return;
|
|
}
|
|
switch (d) {
|
|
case "s":
|
|
b.iframeObj.loaded(),
|
|
b.postMessage("s", JSON.stringify([y.version, b.protocol, b.trans_url, b.base_url]));
|
|
break;
|
|
case "t":
|
|
b.ri._didMessage(e);
|
|
}
|
|
},
|
|
L.prototype.postMessage = function (a, b) {
|
|
var c = this;
|
|
c.iframeObj.post(c.window_id + a + (b || ""), c.origin);
|
|
},
|
|
L.prototype.doSend = function (a) {
|
|
this.postMessage("m", a);
|
|
},
|
|
L.enabled = function () {
|
|
var a = navigator && navigator.userAgent && navigator.userAgent.indexOf("Konqueror") !== -1;
|
|
return (typeof b.postMessage == "function" || typeof b.postMessage == "object") && !a;
|
|
};
|
|
var M, N = function (a, d) {
|
|
parent !== b ? parent.postMessage(M + a + (d || ""), "*") : c.log("Can't postMessage, no parent window.", a, d);
|
|
},
|
|
O = function () {};
|
|
O.prototype._didClose = function (a, b) {
|
|
N("t", c.closeFrame(a, b));
|
|
},
|
|
O.prototype._didMessage = function (a) {
|
|
N("t", a);
|
|
},
|
|
O.prototype._doSend = function (a) {
|
|
this._transport.doSend(a);
|
|
},
|
|
O.prototype._doCleanup = function () {
|
|
this._transport.doCleanup();
|
|
},
|
|
c.parent_origin = undefined,
|
|
y.bootstrap_iframe = function () {
|
|
var d;
|
|
M = a.location.hash.slice(1);
|
|
var e = function (a) {
|
|
if (a.source !== parent) {
|
|
return;
|
|
}
|
|
typeof c.parent_origin == "undefined" && (c.parent_origin = a.origin);
|
|
if (a.origin !== c.parent_origin) {
|
|
return;
|
|
}
|
|
var e = a.data.slice(0, 8),
|
|
f = a.data.slice(8, 9),
|
|
g = a.data.slice(9);
|
|
if (e !== M) {
|
|
return;
|
|
}
|
|
switch (f) {
|
|
case "s":
|
|
var h = JSON.parse(g),
|
|
i = h[0],
|
|
j = h[1],
|
|
k = h[2],
|
|
l = h[3];
|
|
i !== y.version && c.log('Incompatibile SockJS! Main site uses: "' + i + '", the iframe:' + ' "' + y.version + '".');
|
|
if (!c.flatUrl(k) || !c.flatUrl(l)) {
|
|
c.log("Only basic urls are supported in SockJS");
|
|
return;
|
|
}
|
|
if (!c.isSameOriginUrl(k) || !c.isSameOriginUrl(l)) {
|
|
c.log("Can't connect to different domain from within an iframe. (" + JSON.stringify([b.location.href, k, l]) + ")");
|
|
return;
|
|
}
|
|
d = new O,
|
|
d._transport = new O[j](d, k, l);
|
|
break;
|
|
case "m":
|
|
d._doSend(g);
|
|
break;
|
|
case "c":
|
|
d && d._doCleanup(),
|
|
d = null;
|
|
}
|
|
};
|
|
c.attachMessage(e),
|
|
N("s");
|
|
};
|
|
var P = function (a, b) {
|
|
var d = this;
|
|
c.delay(function () {
|
|
d.doXhr(a, b);
|
|
});
|
|
};
|
|
P.prototype = new f(["finish"]),
|
|
P.prototype.doXhr = function (a, b) {
|
|
var d = this,
|
|
e = (new Date).getTime(),
|
|
f = new b("GET", a + "/info"),
|
|
g = c.delay(8000, function () {
|
|
f.ontimeout();
|
|
});
|
|
f.onfinish = function (a, b) {
|
|
clearTimeout(g),
|
|
g = null;
|
|
if (a === 200) {
|
|
var c = (new Date).getTime() - e,
|
|
f = JSON.parse(b);
|
|
typeof f != "object" && (f = {}),
|
|
d.emit("finish", f, c);
|
|
} else {
|
|
d.emit("finish");
|
|
}
|
|
},
|
|
f.ontimeout = function () {
|
|
f.close(),
|
|
d.emit("finish");
|
|
};
|
|
};
|
|
var Q = function (b) {
|
|
var d = this,
|
|
e = function () {
|
|
var a = new L;
|
|
a.protocol = "w-iframe-info-receiver";
|
|
var c = function (b) {
|
|
if (typeof b == "string" && b.substr(0, 1) === "m") {
|
|
var c = JSON.parse(b.substr(1)),
|
|
e = c[0],
|
|
f = c[1];
|
|
d.emit("finish", e, f);
|
|
} else {
|
|
d.emit("finish");
|
|
}
|
|
a.doCleanup(),
|
|
a = null;
|
|
},
|
|
e = {
|
|
_options: {},
|
|
_didClose: c,
|
|
_didMessage: c
|
|
};
|
|
a.i_constructor(e, b, b);
|
|
};
|
|
a.body ? e() : c.attachEvent("load", e);
|
|
};
|
|
Q.prototype = new f(["finish"]);
|
|
var R = function () {
|
|
var a = this;
|
|
c.delay(function () {
|
|
a.emit("finish", {},
|
|
2000);
|
|
});
|
|
};
|
|
R.prototype = new f(["finish"]);
|
|
var S = function (a) {
|
|
if (c.isSameOriginUrl(a)) {
|
|
return new P(a, c.XHRLocalObject);
|
|
}
|
|
switch (c.isXHRCorsCapable()) {
|
|
case 1:
|
|
return new P(a, c.XHRLocalObject);
|
|
case 2:
|
|
return new P(a, c.XDRObject);
|
|
case 3:
|
|
return new Q(a);
|
|
default:
|
|
return new R;
|
|
}
|
|
},
|
|
T = O["w-iframe-info-receiver"] = function (a, b, d) {
|
|
var e = new P(d, c.XHRLocalObject);
|
|
e.onfinish = function (b, c) {
|
|
a._didMessage("m" + JSON.stringify([b, c])),
|
|
a._didClose();
|
|
};
|
|
};
|
|
T.prototype.doCleanup = function () {};
|
|
var U = y["iframe-eventsource"] = function () {
|
|
var a = this;
|
|
a.protocol = "w-iframe-eventsource",
|
|
a.i_constructor.apply(a, arguments);
|
|
};
|
|
U.prototype = new L,
|
|
U.enabled = function () {
|
|
return "EventSource" in b && L.enabled();
|
|
},
|
|
U.need_body = !0,
|
|
U.roundTrips = 3;
|
|
var V = O["w-iframe-eventsource"] = function (a, b) {
|
|
this.run(a, b, "/eventsource", _, c.XHRLocalObject);
|
|
};
|
|
V.prototype = new G;
|
|
var W = y["iframe-xhr-polling"] = function () {
|
|
var a = this;
|
|
a.protocol = "w-iframe-xhr-polling",
|
|
a.i_constructor.apply(a, arguments);
|
|
};
|
|
W.prototype = new L,
|
|
W.enabled = function () {
|
|
return b.XMLHttpRequest && L.enabled();
|
|
},
|
|
W.need_body = !0,
|
|
W.roundTrips = 3;
|
|
var X = O["w-iframe-xhr-polling"] = function (a, b) {
|
|
this.run(a, b, "/xhr", bd, c.XHRLocalObject);
|
|
};
|
|
X.prototype = new G;
|
|
var Y = y["iframe-htmlfile"] = function () {
|
|
var a = this;
|
|
a.protocol = "w-iframe-htmlfile",
|
|
a.i_constructor.apply(a, arguments);
|
|
};
|
|
Y.prototype = new L,
|
|
Y.enabled = function () {
|
|
return L.enabled();
|
|
},
|
|
Y.need_body = !0,
|
|
Y.roundTrips = 3;
|
|
var Z = O["w-iframe-htmlfile"] = function (a, b) {
|
|
this.run(a, b, "/htmlfile", bc, c.XHRLocalObject);
|
|
};
|
|
Z.prototype = new G;
|
|
var $ = function (a, b, c, d) {
|
|
var e = this;
|
|
e.ri = a,
|
|
e.Receiver = b,
|
|
e.recv_url = c,
|
|
e.AjaxObject = d,
|
|
e._scheduleRecv();
|
|
};
|
|
$.prototype._scheduleRecv = function () {
|
|
var a = this,
|
|
b = a.poll = new a.Receiver(a.recv_url, a.AjaxObject),
|
|
c = 0;
|
|
b.onmessage = function (b) {
|
|
c += 1,
|
|
a.ri._didMessage(b.data);
|
|
},
|
|
b.onclose = function (c) {
|
|
a.poll = b = b.onmessage = b.onclose = null,
|
|
a.poll_is_closing || (c.reason === "permanent" ? a.ri._didClose(1006, "Polling error (" + c.reason + ")") : a._scheduleRecv());
|
|
};
|
|
},
|
|
$.prototype.abort = function () {
|
|
var a = this;
|
|
a.poll_is_closing = !0,
|
|
a.poll && a.poll.abort();
|
|
};
|
|
var _ = function (a) {
|
|
var b = this,
|
|
d = new EventSource(a);
|
|
d.onmessage = function (a) {
|
|
b.dispatchEvent(new e("message", {
|
|
data: unescape(a.data)
|
|
}));
|
|
},
|
|
b.es_close = d.onerror = function (a, f) {
|
|
var g = f ? "user" : d.readyState !== 2 ? "network" : "permanent";
|
|
b.es_close = d.onmessage = d.onerror = null,
|
|
d.close(),
|
|
d = null,
|
|
c.delay(200, function () {
|
|
b.dispatchEvent(new e("close", {
|
|
reason: g
|
|
}));
|
|
});
|
|
};
|
|
};
|
|
_.prototype = new d,
|
|
_.prototype.abort = function () {
|
|
var a = this;
|
|
a.es_close && a.es_close({},
|
|
!0);
|
|
};
|
|
var ba, bb = function () {
|
|
if (ba === undefined) {
|
|
if ("ActiveXObject" in b) {
|
|
try {
|
|
ba = !!(new ActiveXObject("htmlfile"));
|
|
} catch(a) {}
|
|
} else {
|
|
ba = !1;
|
|
}
|
|
}
|
|
return ba;
|
|
},
|
|
bc = function (a) {
|
|
var d = this;
|
|
c.polluteGlobalNamespace(),
|
|
d.id = "a" + c.random_string(6, 26),
|
|
a += (a.indexOf("?") === -1 ? "?" : "&") + "c=" + escape(h + "." + d.id);
|
|
var f = bb() ? c.createHtmlfile : c.createIframe,
|
|
g;
|
|
b[h][d.id] = {
|
|
start: function () {
|
|
g.loaded();
|
|
},
|
|
message: function (a) {
|
|
d.dispatchEvent(new e("message", {
|
|
data: a
|
|
}));
|
|
},
|
|
stop: function () {
|
|
d.iframe_close({},
|
|
"network");
|
|
}
|
|
},
|
|
d.iframe_close = function (a, c) {
|
|
g.cleanup(),
|
|
d.iframe_close = g = null,
|
|
delete b[h][d.id],
|
|
d.dispatchEvent(new e("close", {
|
|
reason: c
|
|
}));
|
|
},
|
|
g = f(a, function (a) {
|
|
d.iframe_close({},
|
|
"permanent");
|
|
});
|
|
};
|
|
bc.prototype = new d,
|
|
bc.prototype.abort = function () {
|
|
var a = this;
|
|
a.iframe_close && a.iframe_close({},
|
|
"user");
|
|
};
|
|
var bd = function (a, b) {
|
|
var c = this,
|
|
d = 0;
|
|
c.xo = new b("POST", a, null),
|
|
c.xo.onchunk = function (a, b) {
|
|
if (a !== 200) {
|
|
return;
|
|
}
|
|
for (;;) {
|
|
var f = b.slice(d),
|
|
g = f.indexOf("\n");
|
|
if (g === -1) {
|
|
break;
|
|
}
|
|
d += g + 1;
|
|
var h = f.slice(0, g);
|
|
c.dispatchEvent(new e("message", {
|
|
data: h
|
|
}));
|
|
}
|
|
},
|
|
c.xo.onfinish = function (a, b) {
|
|
c.xo.onchunk(a, b),
|
|
c.xo = null;
|
|
var d = a === 200 ? "network" : "permanent";
|
|
c.dispatchEvent(new e("close", {
|
|
reason: d
|
|
}));
|
|
};
|
|
};
|
|
return bd.prototype = new d,
|
|
bd.prototype.abort = function () {
|
|
var a = this;
|
|
a.xo && (a.xo.close(), a.dispatchEvent(new e("close", {
|
|
reason: "user"
|
|
})), a.xo = null);
|
|
},
|
|
y.getUtils = function () {
|
|
return c;
|
|
},
|
|
y.getIframeTransport = function () {
|
|
return L;
|
|
},
|
|
y;
|
|
} (),
|
|
"_sockjs_onload" in window && setTimeout(_sockjs_onload, 1),
|
|
typeof define == "function" && define.amd && define("sockjs", [], function () {
|
|
return SockJS;
|
|
}); |