Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Initial release of the new sample

  • Loading branch information...
commit 3099db583368827edbd7b6615569030edfbd8d1b 1 parent 3c4ad54
@jettro authored
View
14 office-events/app/App.groovy
@@ -0,0 +1,14 @@
+/**
+ * @author Jettro Coenradie
+ *
+ * export VERTX_MODS=/Users/jcoenradie/sources/vertx-samples/office-events/mods
+ *
+ *
+ */
+
+container.with {
+ deployModule('website')
+ deployModule('notifications')
+ deployModule('invitations')
+}
+
View
10 office-events/mods/invitations/invitation.rb
@@ -0,0 +1,10 @@
+require "vertx"
+include Vertx
+
+logger = Vertx.logger
+
+EventBus.register_handler("message.newinvitation") do |message|
+ theMessage = message.body['message'] + " (max " + message.body['maxpersons'] + " personen)"
+ logger.info theMessage
+ EventBus.send("message.send.invitation",theMessage)
+end
View
3  office-events/mods/invitations/mod.json
@@ -0,0 +1,3 @@
+{
+ "main":"invitation.rb"
+}
View
3  office-events/mods/notifications/mod.json
@@ -0,0 +1,3 @@
+{
+ "main":"notification.js"
+}
View
20 office-events/mods/notifications/notification.js
@@ -0,0 +1,20 @@
+load('vertx.js');
+
+var logger = vertx.logger;
+
+var eb = vertx.eventBus;
+
+var senderAddress = "message.send.notification";
+
+var handler = function (message) {
+ var parse = JSON.parse(message);
+ logger.info("Received a message from" + parse.message);
+ eb.send(senderAddress, parse.message);
+};
+
+var address = "notification.received";
+eb.registerHandler(address, handler);
+
+function vertxStop() {
+ eb.unregisterHandler(address, handler);
+}
View
3  office-events/mods/occasions/mod.json
@@ -0,0 +1,3 @@
+{
+ "main":"translation.js"
+}
View
56 office-events/mods/website/BasicHttpServer.groovy
@@ -0,0 +1,56 @@
+import groovy.json.JsonSlurper
+import org.vertx.groovy.core.eventbus.EventBus
+import org.vertx.groovy.core.http.RouteMatcher
+import org.vertx.groovy.core.http.impl.DefaultHttpServer
+
+/**
+ * @author Jettro Coenradie
+ */
+def log = container.logger
+EventBus eventBus = vertx.eventBus
+def slurper = new JsonSlurper()
+
+eventBus.registerHandler("message.send.notification") {message ->
+ sendMessageToEventBus(message.body, "notification", log, slurper, eventBus)
+}
+
+eventBus.registerHandler("message.send.invitation") {message ->
+ sendMessageToEventBus(message.body, "invitation", log, slurper, eventBus)
+}
+
+def sendMessageToEventBus(message, type, log, slurper, eventBus) {
+ log.info "Received a message to send to a client ${message} of type ${type}"
+ def theMessage = "{\"message\":\"${message}\",\"type\":\"${type}\"}"
+ def jsonMessage = slurper.parseText(theMessage)
+ eventBus.publish("message.forclients", jsonMessage)
+}
+
+
+RouteMatcher routeMatcher = new RouteMatcher()
+
+routeMatcher.get("/") {req ->
+ req.response.sendFile "static/index.html"
+}
+
+routeMatcher.post("/rest") {req ->
+ req.bodyHandler { body ->
+ eventBus.send("notification.received", body.toString())
+ }
+
+ req.response.putHeader("Content-Type", "application/json")
+ req.response.end("{\"status\":\"RECEIVED\"}")
+
+}
+
+routeMatcher.getWithRegEx("^\\/static\\/.*") { req ->
+ req.response.sendFile(req.path.substring(1))
+}
+
+DefaultHttpServer server = vertx.createHttpServer()
+server.requestHandler(routeMatcher.asClosure())
+
+vertx.createSockJSServer(server).bridge(prefix: '/eventbus', [[:]], [[:]])
+
+server.listen(8080)
+
+log.info "The http servers is started"
View
3  office-events/mods/website/mod.json
@@ -0,0 +1,3 @@
+{
+ "main":"BasicHttpServer.groovy"
+}
View
5,179 office-events/mods/website/static/css/bootstrap.min.css
5,179 additions, 0 deletions not shown
View
27 office-events/mods/website/static/css/style.css
@@ -0,0 +1,27 @@
+body {
+ padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */
+ background-color: #f5f5dc;
+ color: #00008b;
+}
+
+.notification {
+ border: 1px solid #ff8c00;
+ -webkit-border-radius: 10px;
+ background-color: orange;
+ color: #000;
+ max-width: 400px;
+ max-height: 100px;
+ text-align: center;
+ margin: auto;
+}
+
+.invitation {
+ border: 1px solid #00008b;
+ -webkit-border-radius: 10px;
+ background-color: #6495ed;
+ color: #000;
+ max-width: 400px;
+ max-height: 100px;
+ text-align: center;
+ margin: auto;
+}
View
BIN  office-events/mods/website/static/img/glyphicons-halflings-white.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  office-events/mods/website/static/img/glyphicons-halflings.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
93 office-events/mods/website/static/index.html
@@ -0,0 +1,93 @@
+<html>
+<head>
+ <title>Vert.x sample</title>
+ <link href="/static/css/style.css" rel="stylesheet">
+ <link href="/static/css/bootstrap.min.css" rel="stylesheet">
+
+ <script src="/static/js/jquery-1.8.2.min.js"></script>
+ <script src="/static/js/sockjs-0.2.1.min.js"></script>
+ <script src="/static/js/vertxbus-1.2.3.final.js"></script>
+</head>
+<body>
+<script>
+ var eb = null;
+
+ function publish(address, message) {
+ if (eb) {
+ eb.publish(address, message);
+ }
+ }
+
+ function subscribe(address) {
+ if (eb) {
+ eb.registerHandler(address, function (msg, replyTo) {
+ $('#messages').append("<div class=\"" + msg.type + "\">" + msg.message + "</div>");
+ });
+ }
+ }
+
+ function closeConn() {
+ if (eb) {
+ eb.close();
+ }
+ }
+
+ function openConn() {
+ if (!eb) {
+ eb = new vertx.EventBus("http://localhost:8080/eventbus");
+
+ eb.onopen = function () {
+ $("#status_info").text("Connected");
+ subscribe("message.forclients");
+ };
+
+ eb.onclose = function () {
+ $("#status_info").text("Not connected");
+ eb = null;
+ };
+ }
+ }
+
+ $(document).ready(function () {
+ $("#sendButton").click(function () {
+ var json = {message:$("#message").val(), maxpersons:$("#maxpersons").val()};
+ publish("message.newinvitation", json);
+ });
+
+ openConn();
+ });
+
+</script>
+<div class="navbar navbar-inverse navbar-fixed-top">
+ <div class="navbar-inner">
+ <div class="container">
+ <a class="brand" href="#">Vert.x sample</a>
+
+ <div id="status_info">Not Connected</div>
+ </div>
+ </div>
+</div>
+<div class="container">
+ <h1>Polyglot Message Center</h1>
+
+ <p>Shows the different message types that are send using the vert.x event bus.</p>
+
+ <div class="row">
+ <div class="span8">
+ <div id="messages">
+ <h2>Your Messages</h2>
+ </div>
+ </div>
+ <div class="span4">
+ <div id="invitationForm">
+ <form onsubmit="return false;">
+ Message : <input type="text" id="message" value="Kom je ook op mijn feestje"/><br/>
+ Max persons : <input type="text" id="maxpersons" value="10"/><br/>
+ <input type="button" id="sendButton" value="Create invitation"/>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+</body>
+</html>
View
2,370 office-events/mods/website/static/js/jquery-1.8.2.min.js
2,370 additions, 0 deletions not shown
View
927 office-events/mods/website/static/js/sockjs-0.2.1.min.js
@@ -0,0 +1,927 @@
+/* SockJS client, version 0.2.1, http://sockjs.org, MIT License
+
+ Copyright (C) 2011 VMware, Inc.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+// JSON2 by Douglas Crockford (minified).
+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) {
+ this.events = a || []
+ };
+ f.prototype.emit = function (a) {
+ var b = this, d = Array.prototype.slice.call(arguments, 1);
+ !b.nuked && b["on" + a] && b["on" + a].apply(b, d), c.arrIndexOf(b.events, a) === -1 && c.log("Event " + JSON.stringify(a) + " not listed " + JSON.stringify(b.events) + " in " + b)
+ }, f.prototype.nuke = function (a) {
+ var b = this;
+ b.nuked = !0;
+ for (var c = 0; c < b.events.length; c++)delete b[b.events[c]]
+ };
+ 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) {
+ var c = b.location.href.split("/").slice(0, 3).join("/");
+ return a.slice(0, c.length) === c
+ }, 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 === 1e3 || a >= 3e3 && 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.amendUrl = function (b) {
+ var c = a.location;
+ if (!b)throw new Error("Wrong url for SockJS");
+ return b.indexOf("//") === 0 && (b = c.protocol + b), b.indexOf("/") === 0 && (b = c.protocol + "//" + c.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] = t[c] && t[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["xdr-streaming"] && !c.cookie_needed ? e.push("xdr-streaming") : h(["xhr-streaming", "iframe-eventsource", "iframe-htmlfile"]), d["xdr-polling"] && !c.cookie_needed ? e.push("xdr-polling") : h(["xhr-polling", "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 = {};
+ c.unload_add = function (a) {
+ var b = c.random_string(8);
+ return q[b] = a, b
+ }, c.unload_del = function (a) {
+ a in q && delete q[a]
+ }, c.attachEvent("unload", function () {
+ for (var a in q)q[a]()
+ }), c.createIframe = function (b, d) {
+ var e = a.createElement("iframe"), f, g = function () {
+ clearTimeout(f);
+ try {
+ e.onload = null
+ } catch (a) {
+ }
+ e.onerror = null
+ }, h = function () {
+ e && (g(), e.src = "about:blank", setTimeout(function () {
+ e && e.parentNode.removeChild(e), e = null
+ }, 0), c.detachEvent("unload", h))
+ }, i = function (a) {
+ e && (h(), d(a))
+ };
+ return e.src = b, e.style.display = "none", e.style.position = "absolute", e.onerror = function () {
+ i("onerror")
+ }, e.onload = function () {
+ clearTimeout(f), f = setTimeout(function () {
+ i("onload timeout")
+ }, 2e3)
+ }, a.body.appendChild(e), f = setTimeout(function () {
+ i("timeout")
+ }, 5e3), c.attachEvent("unload", h), {iframe:e, cleanup:h, loaded:g}
+ }, c.createHtmlfile = function (a, d) {
+ var e = new ActiveXObject("htmlfile"), f, g, i = function () {
+ clearTimeout(f)
+ }, j = function () {
+ if (e) {
+ i(), c.detachEvent("unload", j);
+ try {
+ g.src = "about:blank"
+ } catch (a) {
+ }
+ g.parentNode.removeChild(g), g = e = null, CollectGarbage()
+ }
+ }, k = function (a) {
+ e && (j(), d(a))
+ };
+ e.open(), e.write('<html><script>document.domain="' + document.domain + '";' + "</s" + "cript></html>"), e.close(), e.parentWindow[h] = b[h];
+ var l = e.createElement("div");
+ return e.body.appendChild(l), g = e.createElement("iframe"), l.appendChild(g), g.src = a, f = setTimeout(function () {
+ k("timeout")
+ }, 5e3), c.attachEvent("unload", j), {iframe:g, cleanup:j, loaded:i}
+ };
+ var r = c.XHRObject = function (a, b, d) {
+ var e = this;
+ c.delay(function () {
+ e._start(a, b, d)
+ })
+ };
+ r.prototype = new f(["chunk", "finish"]), r.prototype._start = function (a, d, e) {
+ var f = this;
+ try {
+ f.xhr = new b.ActiveXObject("Microsoft.XMLHTTP"), d += (d.indexOf("?") === -1 ? "?" : "&") + "t=" + +(new Date)
+ } catch (g) {
+ }
+ f.xhr || (f.xhr = new XMLHttpRequest), f.unload_ref = c.unload_add(function () {
+ f._cleanup(!0)
+ });
+ try {
+ f.xhr.open(a, d, !0)
+ } catch (h) {
+ f.emit("finish", 0, ""), f._cleanup();
+ return
+ }
+ "withCredentials"in f.xhr && (f.xhr.withCredentials = "true"), f.xhr.onreadystatechange = function () {
+ if (f.xhr) {
+ var a = f.xhr;
+ switch (a.readyState) {
+ case 3:
+ try {
+ var b = a.status, c = a.responseText;
+ f.emit("chunk", b, c)
+ } catch (a) {
+ }
+ break;
+ case 4:
+ f.emit("finish", a.status, a.responseText), f._cleanup(!1)
+ }
+ }
+ }, f.xhr.send(e)
+ }, r.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
+ }, r.prototype.close = function () {
+ var a = this;
+ a.nuke(), a._cleanup(!0)
+ };
+ var s = c.XDRObject = function (a, b, d) {
+ var e = this;
+ c.delay(function () {
+ e._start(a, b, d)
+ })
+ };
+ s.prototype = new f(["chunk", "finish"]), s.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()
+ }
+ }, s.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
+ }, s.prototype.close = function () {
+ var a = this;
+ a.nuke(), a._cleanup(!0)
+ }, c.isXHRCorsCapable = function () {
+ return b.XMLHttpRequest && "withCredentials"in new XMLHttpRequest ? 1 : b.XDomainRequest ? 2 : G.enabled() ? 3 : 4
+ };
+ var t = function (a, b, d) {
+ var e = this, f;
+ e._options = {devel:!1, debug:!1, protocols_whitelist:[], info:undefined, rtt:undefined}, d && c.objectExtend(e._options, d), e._base_url = c.amendUrl(a), e._server = e._options.server || c.random_number_string(1e3), e._options.protocols_whitelist && e._options.protocols_whitelist.length ? f = e._options.protocols_whitelist : (typeof b == "string" && b.length > 0 ? f = [b] : c.isArray(b) ? f = b : f = null, f && e._debug('Deprecated API: Use "protocols_whitelist" option instead of supplying protocol list as a second parameter to SockJS constructor.')), e._protocols = [], e.protocol = null, e.readyState = t.CONNECTING;
+ var g = N(e._base_url);
+ g.onfinish = function (a, b) {
+ a ? (e._options.info && (a = c.objectExtend(a, e._options.info)), e._options.rtt && (b = e._options.rtt), e._applyInfo(a, b, f), e._didClose()) : e._didClose(1002, "Can't connect to server", !0)
+ }
+ };
+ t.prototype = new d, t.version = "0.2.1", t.CONNECTING = 0, t.OPEN = 1, t.CLOSING = 2, t.CLOSED = 3, t.prototype._debug = function () {
+ this._options.debug && c.log.apply(c, arguments)
+ }, t.prototype._dispatchOpen = function () {
+ var a = this;
+ a.readyState === t.CONNECTING ? (a._transport_tref && (clearTimeout(a._transport_tref), a._transport_tref = null), a.readyState = t.OPEN, a.dispatchEvent(new e("open"))) : a._didClose(1006, "Server lost session")
+ }, t.prototype._dispatchMessage = function (a) {
+ var b = this;
+ if (b.readyState !== t.OPEN)return;
+ b.dispatchEvent(new e("message", {data:a}))
+ }, t.prototype._dispatchHeartbeat = function (a) {
+ var b = this;
+ if (b.readyState !== t.OPEN)return;
+ b.dispatchEvent(new e("heartbeat", {}))
+ }, t.prototype._didClose = function (a, b, d) {
+ var f = this;
+ if (f.readyState !== t.CONNECTING && f.readyState !== t.OPEN && f.readyState !== t.CLOSING)throw new Error("INVALID_STATE_ERR");
+ 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 === t.CONNECTING && !d) {
+ if (f._try_next_protocol(g))return;
+ g = new e("close", {code:2e3, reason:"All transports failed", wasClean:!1, last_event:g})
+ }
+ f.readyState = t.CLOSED, c.delay(function () {
+ f.dispatchEvent(g)
+ })
+ }, t.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()
+ }
+ }, t.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 (t[e] && t[e].need_body === !0 && !a.body)return d._protocols.unshift(e), d.protocol = "waiting-for-load", c.attachEvent("load", function () {
+ d._try_next_protocol()
+ }), !0;
+ if (!!t[e] && !!t[e].enabled(d._options)) {
+ var f = t[e].roundTrips || 1, g = (d._options.rto || 0) * f || 5e3;
+ d._transport_tref = c.delay(g, function () {
+ d.readyState === t.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 t[e](d, i, d._base_url), !0
+ }
+ d._debug("Skipping transport:", e)
+ }
+ }, t.prototype.close = function (a, b) {
+ var d = this;
+ if (a && !c.userSetCode(a))throw new Error("INVALID_ACCESS_ERR");
+ return d.readyState !== t.CONNECTING && d.readyState !== t.OPEN ? !1 : (d.readyState = t.CLOSING, d._didClose(a || 1e3, b || "Normal closure"), !0)
+ }, t.prototype.send = function (a) {
+ var b = this;
+ if (b.readyState === t.CONNECTING)throw new Error("INVALID_STATE_ERR");
+ return b.readyState === t.OPEN && b._transport.doSend(c.quote("" + a)), !0
+ }, t.prototype._applyInfo = function (a, b, d) {
+ var e = this;
+ e._options.info = a, e._options.rtt = b, e._options.rto = c.countRTO(b);
+ var f = c.probeProtocols();
+ e._protocols = c.detectProtocols(f, d, a)
+ };
+ var u = t.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"))
+ }
+ };
+ u.prototype.doSend = function (a) {
+ this.ws.send(a)
+ }, u.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)
+ }, u.enabled = function () {
+ return!!b.WebSocket || !!b.MozWebSocket
+ };
+ var v = function () {
+ };
+ v.prototype.send_constructor = function (a) {
+ var b = this;
+ b.send_buffer = [], b.sender = a
+ }, v.prototype.doSend = function (a) {
+ var b = this;
+ b.send_buffer.push(a), b.send_stop || b.send_schedule()
+ }, v.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()
+ })
+ }, v.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 () {
+ a.send_stop = null, a.send_schedule_wait()
+ }), a.send_buffer = []
+ }
+ }, v.prototype.send_destructor = function () {
+ var a = this;
+ a._send_stop && a._send_stop(), a._send_stop = null
+ };
+ var w = 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) {
+ alert("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 = null, e()
+ };
+ return j.onerror = j.onload = m, j.onreadystatechange = function (a) {
+ j.readyState == "complete" && m()
+ }, m
+ }, x = function (a) {
+ return function (b, c, d) {
+ var e = new a("POST", b + "/xhr_send", c);
+ return e.onfinish = function (a, b) {
+ d(a)
+ }, function (a) {
+ d(0, a)
+ }
+ }
+ }, y = 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)"))
+ }, 1e3))
+ }, 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)"))
+ }, 35e3);
+ var l = a.getElementsByTagName("head")[0];
+ return l.insertBefore(f, l.firstChild), g && l.insertBefore(g, l.firstChild), h
+ }, z = t["jsonp-polling"] = function (a, b) {
+ c.polluteGlobalNamespace();
+ var d = this;
+ d.ri = a, d.trans_url = b, d.send_constructor(w), d._schedule_recv()
+ };
+ z.prototype = new v, z.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 = A(a.trans_url + "/jsonp", y, b)
+ }, z.enabled = function () {
+ return!0
+ }, z.need_body = !0, z.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 A = function (a, d, e) {
+ var f = "a" + c.random_string(6), g = a + "?c=" + escape(h + "." + f), i = function (a) {
+ delete b[h][f], e(a)
+ }, j = d(g, i);
+ b[h][f] = j;
+ var k = function () {
+ b[h][f] && b[h][f](c.closeFrame(1e3, "JSONP user aborted read"))
+ };
+ return k
+ }, B = function () {
+ };
+ B.prototype = new v, B.prototype.run = function (a, b, c, d, e) {
+ var f = this;
+ f.ri = a, f.trans_url = b, f.send_constructor(x(e)), f.poll = new V(a, d, b + c, e)
+ }, B.prototype.doCleanup = function () {
+ var a = this;
+ a.poll && (a.poll.abort(), a.poll = null)
+ };
+ var C = t["xhr-streaming"] = function (a, b) {
+ this.run(a, b, "/xhr_streaming", $, c.XHRObject)
+ };
+ C.prototype = new B, C.enabled = function () {
+ return b.XMLHttpRequest && "withCredentials"in new XMLHttpRequest
+ }, C.roundTrips = 2;
+ var D = t["xdr-streaming"] = function (a, b) {
+ this.run(a, b, "/xhr_streaming", $, c.XDRObject)
+ };
+ D.prototype = new B, D.enabled = function () {
+ return!!b.XDomainRequest
+ }, D.roundTrips = 2;
+ var E = t["xhr-polling"] = function (a, b) {
+ this.run(a, b, "/xhr", $, c.XHRObject)
+ };
+ E.prototype = new B, E.enabled = C.enabled, E.roundTrips = 2;
+ var F = t["xdr-polling"] = function (a, b) {
+ this.run(a, b, "/xhr", $, c.XDRObject)
+ };
+ F.prototype = new B, F.enabled = D.enabled, F.roundTrips = 2;
+ var G = function () {
+ };
+ G.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)
+ }, G.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
+ }
+ }, G.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([t.version, b.protocol, b.trans_url, b.base_url]));
+ break;
+ case"t":
+ b.ri._didMessage(e)
+ }
+ }, G.prototype.postMessage = function (a, b) {
+ var c = this;
+ c.iframeObj.iframe.contentWindow.postMessage(c.window_id + a + (b || ""), c.origin)
+ }, G.prototype.doSend = function (a) {
+ this.postMessage("m", a)
+ }, G.enabled = function () {
+ var a = navigator && navigator.userAgent && navigator.userAgent.indexOf("Konqueror") !== -1;
+ return(typeof b.postMessage == "function" || typeof b.postMessage == "object") && !a
+ };
+ var H, I = function (a, d) {
+ parent !== b ? parent.postMessage(H + a + (d || ""), "*") : c.log("Can't postMessage, no parent window.", a, d)
+ }, J = function () {
+ };
+ J.prototype._didClose = function (a, b) {
+ I("t", c.closeFrame(a, b))
+ }, J.prototype._didMessage = function (a) {
+ I("t", a)
+ }, J.prototype._doSend = function (a) {
+ this._transport.doSend(a)
+ }, J.prototype._doCleanup = function () {
+ this._transport.doCleanup()
+ }, t.bootstrap_iframe = function () {
+ var d;
+ H = a.location.hash.slice(1);
+ var e = function (a) {
+ if (a.source !== parent)return;
+ var e = a.data.slice(0, 8), f = a.data.slice(8, 9), g = a.data.slice(9);
+ if (e !== H)return;
+ switch (f) {
+ case"s":
+ var h = JSON.parse(g), i = h[0], j = h[1], k = h[2], l = h[3];
+ i !== t.version && c.log('Incompatibile SockJS! Main site uses: "' + i + '", the iframe:' + ' "' + t.version + '".');
+ 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 J, d._transport = new J[j](d, k, l);
+ break;
+ case"m":
+ d._doSend(g);
+ break;
+ case"c":
+ d && d._doCleanup(), d = null
+ }
+ };
+ c.attachMessage(e), I("s")
+ };
+ var K = function (a, b) {
+ var d = this;
+ c.delay(function () {
+ d.doXhr(a, b)
+ })
+ };
+ K.prototype = new f(["finish"]), K.prototype.doXhr = function (a, b) {
+ var d = this, e = (new Date).getTime(), f = new b("GET", a + "/info", null), g = c.delay(8e3, 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 L = function (b) {
+ var d = this, e = function () {
+ var a = new G;
+ 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)
+ };
+ L.prototype = new f(["finish"]);
+ var M = function () {
+ var a = this;
+ c.delay(function () {
+ a.emit("finish", {}, 2e3)
+ })
+ };
+ M.prototype = new f(["finish"]);
+ var N = function (a) {
+ if (c.isSameOriginUrl(a))return new K(a, c.XHRObject);
+ switch (c.isXHRCorsCapable()) {
+ case 1:
+ return new K(a, c.XHRObject);
+ case 2:
+ return new K(a, c.XDRObject);
+ case 3:
+ return new L(a);
+ default:
+ return new M
+ }
+ }, O = J["w-iframe-info-receiver"] = function (a, b, d) {
+ var e = new K(d, c.XHRObject);
+ e.onfinish = function (b, c) {
+ a._didMessage("m" + JSON.stringify([b, c])), a._didClose()
+ }
+ };
+ O.prototype.doCleanup = function () {
+ };
+ var P = t["iframe-eventsource"] = function () {
+ var a = this;
+ a.protocol = "w-iframe-eventsource", a.i_constructor.apply(a, arguments)
+ };
+ P.prototype = new G, P.enabled = function () {
+ return"EventSource"in b && G.enabled()
+ }, P.need_body = !0, P.roundTrips = 3;
+ var Q = J["w-iframe-eventsource"] = function (a, b) {
+ this.run(a, b, "/eventsource", W, c.XHRObject)
+ };
+ Q.prototype = new B;
+ var R = t["iframe-xhr-polling"] = function () {
+ var a = this;
+ a.protocol = "w-iframe-xhr-polling", a.i_constructor.apply(a, arguments)
+ };
+ R.prototype = new G, R.enabled = function () {
+ return b.XMLHttpRequest && G.enabled()
+ }, R.need_body = !0, R.roundTrips = 3;
+ var S = J["w-iframe-xhr-polling"] = function (a, b) {
+ this.run(a, b, "/xhr", $, c.XHRObject)
+ };
+ S.prototype = new B;
+ var T = t["iframe-htmlfile"] = function () {
+ var a = this;
+ a.protocol = "w-iframe-htmlfile", a.i_constructor.apply(a, arguments)
+ };
+ T.prototype = new G, T.enabled = function () {
+ return G.enabled()
+ }, T.need_body = !0, T.roundTrips = 3;
+ var U = J["w-iframe-htmlfile"] = function (a, b) {
+ this.run(a, b, "/htmlfile", Z, c.XHRObject)
+ };
+ U.prototype = new B;
+ var V = function (a, b, c, d) {
+ var e = this;
+ e.ri = a, e.Receiver = b, e.recv_url = c, e.AjaxObject = d, e._scheduleRecv()
+ };
+ V.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())
+ }
+ }, V.prototype.abort = function () {
+ var a = this;
+ a.poll_is_closing = !0, a.poll && a.poll.abort()
+ };
+ var W = 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}))
+ })
+ }
+ };
+ W.prototype = new d, W.prototype.abort = function () {
+ var a = this;
+ a.es_close && a.es_close({}, !0)
+ };
+ var X, Y = function () {
+ if (X === undefined)if ("ActiveXObject"in b)try {
+ X = !!(new ActiveXObject("htmlfile"))
+ } catch (a) {
+ } else X = !1;
+ return X
+ }, Z = 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 = Y() ? 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")
+ })
+ };
+ Z.prototype = new d, Z.prototype.abort = function () {
+ var a = this;
+ a.iframe_close && a.iframe_close({}, "user")
+ };
+ var $ = 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 $.prototype = new d, $.prototype.abort = function () {
+ var a = this;
+ a.xo && (a.xo.close(), a.dispatchEvent(new e("close", {reason:"user"})), a.xo = null)
+ }, t.getUtils = function () {
+ return c
+ }, t.getIframeTransport = function () {
+ return G
+ }, t
+}(), "_sockjs_onload"in window && setTimeout(_sockjs_onload, 1)
View
177 office-events/mods/website/static/js/vertxbus-1.2.3.final.js
@@ -0,0 +1,177 @@
+/*
+ * Copyright 2011-2012 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var vertx = vertx || {};
+
+vertx.EventBus = function (url, options) {
+
+ var that = this;
+ var sockJSConn = new SockJS(url, options);
+ var handlerMap = {};
+ var replyHandlers = {};
+ var state = vertx.EventBus.CONNECTING;
+
+ that.onopen = null;
+ that.onclose = null;
+
+ that.send = function (address, message, replyHandler) {
+ sendOrPub("send", address, message, replyHandler)
+ }
+
+ that.publish = function (address, message, replyHandler) {
+ sendOrPub("publish", address, message, replyHandler)
+ }
+
+ that.registerHandler = function (address, handler) {
+ checkSpecified("address", 'string', address);
+ checkSpecified("handler", 'function', handler);
+ checkOpen();
+ var handlers = handlerMap[address];
+ if (!handlers) {
+ handlers = [handler];
+ handlerMap[address] = handlers;
+ // First handler for this address so we should register the connection
+ var msg = { type:"register",
+ address:address };
+ sockJSConn.send(JSON.stringify(msg));
+ } else {
+ handlers[handlers.length] = handler;
+ }
+ }
+
+ that.unregisterHandler = function (address, handler) {
+ checkSpecified("address", 'string', address);
+ checkSpecified("handler", 'function', handler);
+ checkOpen();
+ var handlers = handlerMap[address];
+ if (handlers) {
+ var idx = handlers.indexOf(handler);
+ if (idx != -1) handlers.splice(idx, 1);
+ if (handlers.length == 0) {
+ // No more local handlers so we should unregister the connection
+
+ var msg = { type:"unregister",
+ address:address};
+ sockJSConn.send(JSON.stringify(msg));
+ delete handlerMap[address];
+ }
+ }
+ }
+
+ that.close = function () {
+ checkOpen();
+ state = vertx.EventBus.CLOSING;
+ sockJSConn.close();
+ }
+
+ that.readyState = function () {
+ return state;
+ }
+
+ sockJSConn.onopen = function () {
+ state = vertx.EventBus.OPEN;
+ if (that.onopen) {
+ that.onopen();
+ }
+ };
+
+ sockJSConn.onclose = function () {
+ state = vertx.EventBus.CLOSED;
+ if (that.onclose) {
+ that.onclose();
+ }
+ };
+
+ sockJSConn.onmessage = function (e) {
+ var msg = e.data;
+ var json = JSON.parse(msg);
+ var body = json.body;
+ var replyAddress = json.replyAddress;
+ var address = json.address;
+ var replyHandler;
+ if (replyAddress) {
+ replyHandler = function (reply, replyHandler) {
+ // Send back reply
+ that.send(replyAddress, reply, replyHandler);
+ };
+ }
+ var handlers = handlerMap[address];
+ if (handlers) {
+ // We make a copy since the handler might get unregistered from within the
+ // handler itself, which would screw up our iteration
+ var copy = handlers.slice(0);
+ for (var i = 0; i < copy.length; i++) {
+ copy[i](body, replyHandler);
+ }
+ } else {
+ // Might be a reply message
+ var handler = replyHandlers[address];
+ if (handler) {
+ delete replyHandlers[replyAddress];
+ handler(body, replyHandler);
+ }
+ }
+ }
+
+ function sendOrPub(sendOrPub, address, message, replyHandler) {
+ checkSpecified("address", 'string', address);
+ checkSpecified("message", 'object', message);
+ checkSpecified("replyHandler", 'function', replyHandler, true);
+ checkOpen();
+ var envelope = { type:sendOrPub,
+ address:address,
+ body:message };
+ if (replyHandler) {
+ var replyAddress = makeUUID();
+ envelope.replyAddress = replyAddress;
+ replyHandlers[replyAddress] = replyHandler;
+ }
+ var str = JSON.stringify(envelope);
+ sockJSConn.send(str);
+ }
+
+ function checkOpen() {
+ if (state != vertx.EventBus.OPEN) {
+ throw new Error('INVALID_STATE_ERR');
+ }
+ }
+
+ function checkSpecified(paramName, paramType, param, optional) {
+ if (!optional && !param) {
+ throw new Error("Parameter " + paramName + " must be specified");
+ }
+ if (param && typeof param != paramType) {
+ throw new Error("Parameter " + paramName + " must be of type " + paramType);
+ }
+ }
+
+ function isFunction(obj) {
+ return !!(obj && obj.constructor && obj.call && obj.apply);
+ }
+
+ function makeUUID() {
+ return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx"
+ .replace(/[xy]/g, function (a, b) {
+ return b = Math.random() * 16, (a == "y" ? b & 3 | 8 : b | 0).toString(16)
+ })
+ }
+
+}
+
+vertx.EventBus.CONNECTING = 0;
+vertx.EventBus.OPEN = 1;
+vertx.EventBus.CLOSING = 2;
+vertx.EventBus.CLOSED = 3;

0 comments on commit 3099db5

Please sign in to comment.
Something went wrong with that request. Please try again.