(function () { version.extensions['timedloopMacro'] = { major: 1, minor: 1, revision: 0 }; macros['timedloop'] = { handler: function (g, e, f, b) { function cssTimeUnit(s) { if (typeof s == "string") { if (s.slice(-2).toLowerCase() == "ms") { return Number(s.slice(0, -2)) || 0; } else if (s.slice(-1).toLowerCase() == "s") { return Number(s.slice(0, -1)) * 1000 || 0; } } throwError(g, s + " isn't a CSS time unit"); return 0; } function tagcontents(starttag, endtag, k) { var a = b.source.slice(k); var l = 0; var c = ""; for (var i = 0; i < a.length; i++) { var w = endtag.length; if (a.substr(i, w) == endtag) { if (l == 0) { b.nextMatch = k + i + w; return c; } else { l--; c += a.charAt(i); } } else { if (a.substr(i, starttag.length) == starttag) { l++; } c += a.charAt(i); } } return ""; } var tl = "<<" + e; var etl = "<>"; var k = b.source.indexOf('>>', b.matchStart) + 2; var d = tagcontents(tl, etl, k); var tm; tm = cssTimeUnit(f[0]); var h; if (d) { var m = insertElement(g, "span", null, "timedloop", null); new Wikifier(m, d); setTimeout(function to() { if (m && elexists(m)) { var oldm = m; oldm.classList.add("replacement-out"); setTimeout(function () { if (oldm) oldm.parentNode.removeChild(oldm); }, Math.min(tm, 1000)); m = insertElement(null, "span", null, "timedloop replacement-in", null); new Wikifier(m, d); setTimeout(function () { if (m) m.classList.remove("replacement-in"); }, 1); oldm.parentNode.insertBefore(m, oldm.nextSibling); scrollWindowTo(m); setTimeout(to, tm); } }, tm); } else { throwError(g, "can't find matching end" + e); return; } } } elexists = function (e) { while (e = e.parentNode) { if (e === document) return true; } } macros['endtimedloop'] = { handler: function () {} } scrollWindowTo = function (E) { var D = window.scrollY; var G = J(E); if (!G) return; var C = Math.abs(D - G); var B = 0; var I = (D > G) ? -1 : 1; var F = window.setInterval(H, 25); function H() { B += 0.1; window.scrollTo(0, D + I * (C * Math.easeInOut(B))); if (B >= 1) { window.clearInterval(F) } } function J(N) { var O = A(N); var P = O + N.offsetHeight; var L = window.innerHeight; var M = D + L; if (O >= D && P > M) { return ((N.offsetHeight < L) ? O - (L - N.offsetHeight) + 20 : O) } } function A(K) { var L = 0; while (K.offsetParent) { L += K.offsetTop; K = K.offsetParent; } return L } } }());