Advertisement
Guest User

Untitled

a guest
Mar 28th, 2013
1,073
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function (e) {
  2.     "use strict";
  3.  
  4.     function t() {
  5.         this.data = {}
  6.     }
  7.     function n() {
  8.         this.listeners = new t
  9.     }
  10.     function r(e) {
  11.         setTimeout(function () {
  12.             throw e
  13.         }, 0)
  14.     }
  15.     function i(e) {
  16.         this.type = e
  17.     }
  18.     function s(e, t) {
  19.         i.call(this, e), this.data = t.data, this.lastEventId = t.lastEventId
  20.     }
  21.     function g(e, t) {
  22.         var n = Number(e);
  23.         return (n < 1 ? 1 : n > 18e6 ? 18e6 : n) || t
  24.     }
  25.     function y(e, t, n) {
  26.         try {
  27.             typeof e[t] == "function" && e[t](n)
  28.         } catch (i) {
  29.             r(i)
  30.         }
  31.     }
  32.     function b(t, r) {
  33.         function B() {
  34.             L = d, N !== null && (N.abort(), N = null), C !== 0 && (clearTimeout(C), C = 0), S.readyState = d
  35.         }
  36.         function j(e) {
  37.             var t = L === p || L === h ? N.responseText || "" : "",
  38.                 n = null;
  39.             if (L === h) {
  40.                 var r = f ? t !== "" ? N.getResponseHeader("Content-Type") : "" : N.contentType;
  41.                 if (r && v.test(r)) {
  42.                     L = p, T = !0, x = u, S.readyState = p, n = new i("open"), S.dispatchEvent(n), y(S, "onopen", n);
  43.                     if (L === d) return
  44.                 }
  45.             }
  46.             if (L === p) {
  47.                 t.length > k && (H = !0, T = !0);
  48.                 var o = 0,
  49.                     a = t.indexOf("\r", k),
  50.                     l = t.indexOf("\n", k);
  51.                 while (a !== -1 || l !== -1) {
  52.                     a === -1 || l !== -1 && l < a ? (o = l, l = t.indexOf("\n", o + 1)) : (o = a, a = t.indexOf("\r", o + 1));
  53.                     var m = t.slice(k, o),
  54.                         B = D;
  55.                     D = t.slice(o, o + 1) === "\r", k = o + 1;
  56.                     if (!B || m.length !== 0 || D) {
  57.                         _.push(m);
  58.                         var j = _.join("");
  59.                         _.length = 0;
  60.                         if (j !== "") {
  61.                             var I = "",
  62.                                 q = j.indexOf(":", 0);
  63.                             q !== -1 && (I = j.slice(q + (j.slice(q + 1, q + 2) === " " ? 2 : 1)), j = j.slice(0, q)), j === "data" ? A.push(I) : j === "id" ? O = I : j === "event" ? M = I : j === "retry" ? (u = g(I, u), x = u, b < u && (b = u)) : j === "retryLimit" ? b = g(I, b) : j === "heartbeatTimeout" && (w = g(I, w), C !== 0 && (clearTimeout(C), C = setTimeout(R, w)))
  64.                         } else {
  65.                             if (A.length !== 0) {
  66.                                 E = O;
  67.                                 var U = M || "message";
  68.                                 n = new s(U, {
  69.                                     data: A.join("\n"),
  70.                                     lastEventId: O
  71.                                 }), S.dispatchEvent(n), U === "message" && y(S, "onmessage", n);
  72.                                 if (L === d) return
  73.                             }
  74.                             A.length = 0, M = ""
  75.                         }
  76.                     }
  77.                 }
  78.                 k !== t.length && (_.push(t.slice(k)), k = t.length)
  79.             }
  80.             H && P === 0 && (H = !1, P = setTimeout(F, 80)), L !== p && L !== h || !(e || k > 1048576 || C === 0 && !T) ? C === 0 && (T = !1, C = setTimeout(R, w)) : (L = c, N.abort(), C !== 0 && (clearTimeout(C), C = 0), x > b && (x = b), C = setTimeout(R, x), x = x * 2 + 1, S.readyState = h, n = new i("error"), S.dispatchEvent(n), y(S, "onerror", n))
  81.         }
  82.         function F() {
  83.             P = 0, j(!1)
  84.         }
  85.         function I() {
  86.             j(!1)
  87.         }
  88.         function q() {
  89.             j(!0)
  90.         }
  91.         function R() {
  92.             C = 0;
  93.             if (L !== c) {
  94.                 j(!1);
  95.                 return
  96.             }
  97.             if (navigator.onLine === !1) {
  98.                 C = setTimeout(R, 500);
  99.                 return
  100.             }
  101.             if (m && e.document && (e.document.readyState === "loading" || e.document.readyState === "interactive")) {
  102.                 C = setTimeout(R, 100);
  103.                 return
  104.             }
  105.             N.onload = N.onerror = q, N.mozAnon === undefined ? N.onprogress = I : N.onreadystatechange = I, T = !1, C = setTimeout(R, w), k = 0, L = h, A.length = 0, M = "", O = E, _.length = 0, D = !1, N.open("GET", t + ((t.indexOf("?", 0) === -1 ? "?" : "&") + "lastEventId=" + encodeURIComponent(E) + "&r=" + String(Math.random() + 1).slice(2)), !0), N.withCredentials = o, N.responseType = "text", f && N.setRequestHeader("Accept", "text/event-stream"), N.send(null)
  106.         }
  107.         t = String(t);
  108.         var o = Boolean(a && r && r.withCredentials),
  109.             u = g(r ? r.retry : NaN, 1e3),
  110.             b = g(r ? r.retryLimit : NaN, 3e5),
  111.             w = g(r ? r.heartbeatTimeout : NaN, 45e3),
  112.             E = r && r.lastEventId && String(r.lastEventId) || "",
  113.             S = this,
  114.             x = u,
  115.             T = !1,
  116.             N = new l,
  117.             C = 0,
  118.             k = 0,
  119.             L = c,
  120.             A = [],
  121.             O = "",
  122.             M = "",
  123.             _ = [],
  124.             D = !1,
  125.             P = 0,
  126.             H = !1;
  127.         r = null, n.call(this), this.close = B, this.url = t, this.readyState = h, this.withCredentials = o, R()
  128.     }
  129.     function w() {
  130.         this.CONNECTING = h, this.OPEN = p, this.CLOSED = d
  131.     }
  132.     t.prototype = {
  133.         get: function (e) {
  134.             return this.data[e + "~"]
  135.         },
  136.         set: function (e, t) {
  137.             this.data[e + "~"] = t
  138.         },
  139.         "delete": function (e) {
  140.             delete this.data[e + "~"]
  141.         }
  142.     }, n.prototype = {
  143.         dispatchEvent: function (e) {
  144.             var t = String(e.type),
  145.                 n = this.listeners,
  146.                 i = n.get(t);
  147.             if (!i) return;
  148.             var s = i.length,
  149.                 o = -1;
  150.             while (++o < s) {
  151.                 var u = i[o];
  152.                 try {
  153.                     u.call(this, e)
  154.                 } catch (a) {
  155.                     r(a)
  156.                 }
  157.             }
  158.         },
  159.         addEventListener: function (e, t) {
  160.             e = String(e);
  161.             var n = this.listeners,
  162.                 r = n.get(e);
  163.             r || n.set(e, r = []);
  164.             var i = r.length;
  165.             while (--i >= 0) if (r[i] === t) return;
  166.             r.push(t)
  167.         },
  168.         removeEventListener: function (e, t) {
  169.             e = String(e);
  170.             var n = this.listeners,
  171.                 r = n.get(e);
  172.             if (!r) return;
  173.             var i = r.length,
  174.                 s = [],
  175.                 o = -1;
  176.             while (++o < i) r[o] !== t && s.push(r[o]);
  177.             s.length === 0 ? n["delete"](e) : n.set(e, s)
  178.         }
  179.     }, s.prototype = i.prototype;
  180.     var o = e.XMLHttpRequest,
  181.         u = e.XDomainRequest,
  182.         a = Boolean(o && (new o).withCredentials !== undefined),
  183.         f = a,
  184.         l = a ? o : u,
  185.         c = -1,
  186.         h = 0,
  187.         p = 1,
  188.         d = 2,
  189.         v = /^text\/event\-stream;?(\s*charset\=utf\-8)?$/i,
  190.         m = /AppleWebKit\/5([0-2][0-9]|3[0-4])[^\d]/.test(navigator.userAgent);
  191.     w.prototype = n.prototype, b.prototype = new w, w.call(b), l && (e.EventSource = b)
  192. })(this),
  193. function () {
  194.     function e(e) {
  195.         (new Image).src = "http://xkcd.com/events/" + e
  196.     }
  197.     function t() {
  198.         location.hash == "#verbose" && console.log.apply(console, arguments)
  199.     }
  200.     try {
  201.         var n = "http://c0.xkcd.com/stream/comic/time?method=EventSource",
  202.             r = new EventSource(n);
  203.         t("connecting to event source:", n), r.addEventListener("open", function (t) {
  204.             e("connect_start")
  205.         }, !1), r.addEventListener("error", function (t) {
  206.             e("connect_error")
  207.         }, !1), r.addEventListener("loadtest", t, !1), r.addEventListener("comic/time", t, !1), r.addEventListener("comic/time", function (e) {
  208.             var n = JSON.parse(e.data),
  209.                 r = document.getElementById("comic").getElementsByTagName("img")[0],
  210.                 i = Math.round(Math.random() * n.spread);
  211.             t("waiting", i, "seconds before displaying comic", n.image), setTimeout(function () {
  212.                 r.src = "http://imgs.xkcd.com/comics/time/" + n.image
  213.             }, i * 1e3)
  214.         }, !1)
  215.     } catch (i) {
  216.         e("js_error")
  217.     }
  218. }();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement