Advertisement
Guest User

xkcd time03.js

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