(function () { version.extensions['revisionMacros'] = { major: 1, minor: 0, revision: 0 }; macros['cycle'] = macros['insertion'] = macros['removal'] = macros['revision'] = macros['span'] = { handler: function (g, e, f, b) { function tagcontents(starttags, desttags, endtags, k) { function tagfound(i, e) { for(var j = 0; j < e.length; j++) { if(a.indexOf(e[j],i) == i) { return e[j]; } } } var a = b.source.slice(k); var l = 0; var c = ""; var tg; for(var i = 0; i < a.length; i++) { if(tg = tagfound(i,starttags)) { l++; } else if ((tg = tagfound(i,desttags)) && l==0) { b.nextMatch = k + i + tg.length; return [c, tg]; } else if (tg = tagfound(i, endtags)) { l--; if(l < 0) { return null; } } c += a.charAt(i); } return null; } var begintags = ["<>", "<>"]; var endtags = ["<>","<>","<>","<>","<>"]; var name = f[0].replace(" ", "_"); var k = b.source.indexOf('>>', b.matchStart) + 2; var c, vsns, vsn, i, cn, vtype; vsns = []; c = tagcontents(begintags, becomes.concat(endtags), endtags, k); if(c && endtags.indexOf(c[1])==-1) { while(c) { vsns.push(c); c = tagcontents(begintags, becomes, endtags, b.nextMatch); } c = tagcontents(begintags, ["<>"], endtags, b.nextMatch); } if(!c) { throwError(g, "can't find matching end" + e); return; } vsns.push(c); i = 0; cn = 0; m = insertElement(g, "span", null, e + " " + name); if(vsns.length > 0) { h = insertElement(m, "span", null, "revision-span initial"); } else { h = m; } if(e == "insertion") { h.style.display = "none"; } h.setAttribute("data-enabled", (e != "insertion") + ""); vsn = vsns.shift(); h.tweecode = vsn[0]; while(vsns.length > 0) { i += 1; vtype = vsn[1].slice(2, -2); vsn = vsns.shift(); h = insertElement(m, "span", null, "revision-span " + vtype); h.tweecode = vsn[0]; h.setAttribute("data-enabled", "false"); h.style.display = "none"; } h=m.firstChild; new Wikifier(h, h.tweecode); } } macros['becomes'] = macros['gains'] = macros['endrevision'] = macros['endinsertion'] = macros['endremoval'] = macros['endcycle'] = { handler: function () {} } macros['revert'] = macros['revise'] = { handler: function (a, b, c) { var l, rev, rname, de; de = "data-enabled"; function disableLink(l) { l.style.display = "none"; } function enableLink(l) { l.style.display = "inline"; } function updateLink(l) { var rall = document.getElementsByClassName(rname); var cannext, canprev; for(var i = 0; i < rall.length; i++) { var r = rall[i]; if(r.classList.contains("cycle")) { cannext = canprev = true; } else { var rc = r.childNodes; var rcl = rc.length; var ins = r.classList.contains("insertion"); var rmv = r.classList.contains("removal"); var ind = -1; for(var k = 0; k < rc.length; k++) { if(rc[k].getAttribute(de) == "true") { ind = k; } } if(ind == -1 && (ins || rmv)) { (ins ? cannext = true : canprev = true); } if(ind > (ins ? -1 : 0)) { canprev = true; } if(ind>-1 && ind < (rmv ? rcl : rcl - 1)) { cannext = true; } } } var can = (l.classList.contains("revert") ? canprev : cannext); (can ? enableLink : disableLink)(l); } function reviseOnClick() { var rall, r, rc, rcl, ind, curr, next, ins, rmv, cyc; var rsp = "revision-span"; function showVer(n) { n.innerHTML = ""; new Wikifier(n,n.tweecode); n.setAttribute(de, "true"); n.style.display = "inline"; n.classList.remove(rsp+"-out"); n.classList.add(rsp+"-in"); if (n.timeout) clearTimeout(n.timeout); n.timeout = setTimeout(function () { n.classList.remove(rsp+"-in"); }, 1); } function hideVer(n) { n.setAttribute(de, "false"); n.classList.remove(rsp+"-in"); n.classList.add(rsp+"-out"); if (n.timeout) clearTimeout(n.timeout); n.timeout = setTimeout(function () { if(n.getAttribute(de) == "false") { n.classList.remove(rsp+"-out"); n.style.display = "none"; n.innerHTML = ""; } }, 1000); } function doToGainerSpans(n, fn) { for(var k = n - 1; k >= 0; k--) { if(rc[k + 1].classList.contains("gains")) { fn(rc[k]); } else break; } } rall = document.getElementsByClassName(rname); for(var i = 0; i < rall.length; i++) { r = rall[i]; rc = r.childNodes; ins = r.classList.contains("insertion"); rmv = r.classList.contains("removal"); cyc = r.classList.contains("cycle"); rcl = rc.length - 1; ind = -1; for(var k = 0; k <= rcl; k++) { if(rc[k].getAttribute(de) == "true") { ind = k; } } if(ind == -1) { if(ins) { ind = -1; curr = null; } else if(rmv) { ind = rcl + 1; curr = null; } } else { if(rev) { ind -= 1; } curr = (ind >= 0 ? rc[ind] : (cyc ? rc[rcl] : null)); } next = (ind < rcl ? rc[ind + 1] : (cyc ? rc[0] : null)); var docurr = (rev ? showVer : hideVer); var donext = (rev ? hideVer : showVer); if(curr) { if(!(next && next.classList.contains("gains"))) { docurr(curr); doToGainerSpans(ind, docurr); } } if(next) { donext(next); } ind += (rev ? -1 : 1); } var lall = document.getElementsByClassName("reviseLink_" + rname); for(i = 0; i < lall.length; i++) { updateLink(lall[i]); } } rname = c[0].replace(" ", "_"); rev = (b == "revert"); if(c.length < 2) { throwError(a, b + ' macro needs 2 parameters'); return; } l = Wikifier.createInternalLink(a, null); l.className = "internalLink reviseLink reviseLink_" + rname + " " + b; insertText(l, c[1]); l.onclick = reviseOnClick; disableLink(l); setTimeout(function(){ updateLink(l); },1); } } }());