User:Hairr/monobook.js

(function {    "use strict";    var krRTRC_appVersion = 'v0.8.8-beta';    var krRTRC_appDate = '2012-02-23';    var krRTRC_APIURL = mw.util.wikiScript('api');    var krRTRC_LoaderSRC = "//upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif";    var krRTRC_BliconSRC = "//upload.wikimedia.org/wikipedia/commons/thumb/f/f7/Nuvola_apps_important.svg/18px-Nuvola_apps_important.svg.png";    var krRTRC_HelpURL = '//meta.wikimedia.org/wiki/User:Krinkle/Tools/Real-Time_Recent_Changes?uselang=' + wgUserLanguage;    var krRTRC_Disabled;    krRTRC_Disabled = false;    var krRTRC_Debug;    if (typeof krRTRC_Debug === 'undefined' || krRTRC_Debug !== 1) {        krRTRC_Debug = 0;    } else {        krRTRC_Debug = 1;    }    var krRTRC_MarkPatrolCacheMax = 20;    var krRTRC_Patrolright = false;    var krRTRC_Patroltoken = false;    var krRTRC_Delhistright = false;    var krRTRC_RCDataURL = false; var krRTRC_optLimit = "25"; var krRTRC_optFiltAnon = false; var krRTRC_optFiltPatrol = false; var krRTRC_optUser = ''; var krRTRC_optTypeEdit = true; var krRTRC_optTypeNewpage = true; var krRTRC_optPage = ''; var krRTRC_optRctype = ''; var krRTRC_optFrom = false; var krRTRC_optUntill = false; var krRTRC_optRcshow = ''; var krRTRC_optRcprop = ''; var krRTRC_optRcstart = ''; var krRTRC_optNS = ''; var krRTRC_optOrder = "desc"; var krRTRC_optRcend = ''; var krRTRC_optRInt = 3000; var krRTRC_optIRCBL = false; var krRTRC_RCTimeout = false; var krRTRC_RCEnabled = null; var krRTRC_RCLegendHTML = ''; var krRTRC_MassPatrol = false; var krRTRC_AutoDiff = false; var krRTRC_AutoDiffTop = false; var krRTRC_DayHeadPrev = false; var krRTRC_SkipDiffs = []; var krRTRC_MarkPatrolCache = []; var krRTRC_Months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var krRTRC_SkipButon = ''; var krRTRC_FeedMemHTML = ''; var krRTRC_FeedMemUidArr = []; var krRTRC_TimeDiff = 0; var krRTRC_WikiID = "unknown"; var krRTRC_Updating = false; var krRTRC_optRcdir; var krRTRC_optAutoDiff; var krRTRC_optAutoDiffTop; var krRTRC_RCNamespaceDropdown; window.$krRTRC_Tip = window.$RCOptions_submit = window.$krRTRC_Tiptext = window.$krRTRC_MassPatrol = undefined; function krLog(s, o) { if (o) { mw.log(s, o); } else { mw.log(s); }   }    if (typeof String.prototype.ucFirst === 'undefined') { String.prototype.ucFirst = function { return this.substr(0, 1).toUpperCase + this.substr(1, this.length); };   }    if (typeof String.prototype.escapeRE === 'undefined') { String.prototype.escapeRE = function { return this.replace(/([\\{}|.?*+^$\[\]])/g, "\\$1"); };   }    function krEncodeEntities(s) { return $(" ").text(s).html; }   function krDencodeEntities(s) { return $(" ").html(s).text; }   function krMsg(key) { if (krMsgs[key]) { return krMsgs[key]; } else { return key.ucFirst; }   }    function krGetUrlParam(s, url) { return mw.util.getParamValue(s, url); }   function krParseUrlParams(l) { var url = l || document.location.href; var match = url.match(/\?[^#]*/); if (match === null) { return null; }       var query = match[0]; var ret = {}; var pattern = /[&?]([^&=]*)=?([^&]*)/g; for (match = pattern.exec(query); match !== null; match = pattern.exec(query)) { var key = decodeURIComponent(match[1]); var value = decodeURIComponent(match[2]); ret[key] = value; }       return ret; }   function krEmpty(v) { var key; if (v === "" || v === 0 || v === "0" || v === null || v === false || typeof v === 'undefined') { return true; }       if (typeof v === 'object') { for (key in v) { return false; }           return true; }       return false; }   function krTrim(v) { return v.replace(/^\s*((?:[\S\s]*\S)?)\s*$/, '$1'); }   function krRTRC_leadZ(i) { if (i < 10) { i = "0" + i;       } return i;   } function krRTRC_WikiLink(s) { return mw.util.wikiGetlink(s); }   function krRTRC_APITimeConv(s) { s = s.toString; s = s.replace("-", "/").replace("-", "/").replace("T", " ").replace("Z", ""); return new Date(s); }   function krRTRC_AdjustAPIClocktime(s) { var d = krRTRC_APITimeConv(s); var msd = krRTRC_TimeDiff * 60 * 1000; d.setTime(d.getTime + msd); return krRTRC_leadZ(d.getHours) + ':' + krRTRC_leadZ(d.getMinutes); }   function krRTRC_AdjustLongTime(s) { s = s.toString; s = s.substr(0, 4) + '/' + s.substr(4, 2) + '/' + s.substr(6, 2) + ' ' + s.substr(8, 2) + ':' + s.substr(10, 2) + ':' + s.substr(12, 2); var d = new Date(s); if (d === 'Invalid Date') { krLog("krRTRC_AdjustLongTime: d-var: Invalid Date"); return false; }       var msd = krRTRC_TimeDiff * 60 * 1000; d.setTime(d.getTime - msd); return d.getFullYear +  + krRTRC_leadZ(d.getMonth + 1) +  + krRTRC_leadZ(d.getDate) +  + krRTRC_leadZ(d.getHours) +  + krRTRC_leadZ(d.getMinutes) + '' + krRTRC_leadZ(d.getSeconds); }   function krRTRC_isInt(i) { return parseInt(i, 10) === i;   } function krInArray(s, array) { var i;       for (i = 0; i < array.length; i += 1) { if (array[i] == s) { return true; }       }        return false; }   function krRTRC_RCDayHead(time) { var current = time.getDate; if (current === krRTRC_DayHeadPrev) { return ''; } else { krRTRC_DayHeadPrev = current; return ' ' + time.getDate + ' ' + krRTRC_Months[time.getMonth] + ' '; }   }    function krRTRC_BuildItem(type, title, rcid, revid, old_revid, user, timestamp, comment, patrolled, anon, oldlen, newlen) { var diffsize, usertypeClass, el; diffsize = (+newlen) - (+oldlen); patrolled = patrolled === '' ? true : false; anon = anon === '' ? true : false; var typeSymbol = " "; var itemClass = ''; var diffLink = krMsg('diff'); if (type === 'edit') { if (krRTRC_Patrolright === true && krRTRC_optFiltPatrol === 'on') { typeSymbol = ' ! ';           } else if (krRTRC_Patrolright === true && patrolled === false) { typeSymbol = ' ! ';           }            itemClass = 'rcitem'; } else if (type === 'new') { itemClass = 'rcitem'; typeSymbol = ' N '; }       comment = comment.replace(/<&#91;^>&#93;*>/g, ''); if (comment.indexOf("←") === 0) { itemClass += ' aes'; comment = comment.replace("←", "← "); }       if (anon) { usertypeClass = ' anoncontrib'; } else { usertypeClass = ' usercontrib'; }       var item = krRTRC_RCDayHead(krRTRC_APITimeConv(timestamp)); item += ''; if (type === 'edit') { diffLink = mw.util.wikiScript + "?diff=" + revid + "&oldif=" + old_revid + "&rcid=" + rcid; diffLink = '' + krMsg('diff') + ''; } else if (type === "new") { diffLink = 'new'; }       item += ' (' + diffLink + ') ' + typeSymbol + ' '; item += krRTRC_AdjustAPIClocktime(timestamp) + ' ' + title + ' '; item += ' &middot; T &middot; C &middot; ' + user + ' '; item += ' ' + krEncodeEntities(comment) + '  '; if (diffsize > 0) { el = diffsize > 399 ? "strong" : "span"; item += ' <' + el + ' class="mw-plusminus-pos">(' + diffsize + ') '; } else if (diffsize === 0) { item += ' (0)  '; } else { el = diffsize < -399 ? "strong" : "span"; item += ' <' + el + ' class="mw-plusminus-neg">(' + diffsize + ') '; }       item += ' '; return item; }   function krRTRC_GetRCOptions { krRTRC_optLimit = $("#rc-options-limit").val; krRTRC_optFiltAnon = $("#rc-options-filter-anons:checked").val; krRTRC_optRcshow = krRTRC_optFiltAnon === 'on' ? "|anon" : ''; krRTRC_optFiltPatrol = $("#rc-options-filter-unpatrolled:checked").val; if (krRTRC_optFiltPatrol === 'on') { krRTRC_optRcshow += "|!patrolled"; }       if (krRTRC_Patrolright === true) { krRTRC_optRcprop = "|patrolled"; }       krRTRC_optUser = $("#rc-options-rcuser").val === '' ? false : krTrim($("#rc-options-rcuser").val); if (!krEmpty(krRTRC_optUser)) { krRTRC_optUser = "&rcuser=" + krRTRC_optUser; } else { krRTRC_optUser = ''; }       krRTRC_optTypeEdit = $("#rc-options-type-edit:checked").val === 'on' ? true : false; krRTRC_optTypeNewpage = $("#rc-options-type-newpage:checked").val === 'on' ? true : false; krRTRC_optRctype = []; if (krRTRC_optTypeEdit) { krRTRC_optRctype.push('edit'); }       if (krRTRC_optTypeNewpage) { krRTRC_optRctype.push('new'); }       krRTRC_optRctype = krRTRC_optRctype.join("|"); if (krRTRC_optRctype === '') { $("#rc-options-type-edit").click; $("#rc-options-type-newpage").click; krRTRC_optRctype = 'edit|new'; }       krRTRC_optFrom = krEmpty(krTrim($("#rc-options-timeframe-rcfrom").val)) ? false : krTrim($("#rc-options-timeframe-rcfrom").val); krRTRC_optUntill = krEmpty(krTrim($("#rc-options-timeframe-rcuntill").val)) ? false : krTrim($("#rc-options-timeframe-rcuntill").val); if (krRTRC_optOrder === 'older') { if (krRTRC_isInt(parseInt(krRTRC_optUntill, 10)) && krRTRC_AdjustLongTime(krRTRC_optUntill)) { krRTRC_optRcstart = "&rcstart=" + krRTRC_AdjustLongTime(krRTRC_optUntill); } else { krRTRC_optRcstart = ''; }           if (krRTRC_isInt(parseInt(krRTRC_optFrom, 10)) && krRTRC_AdjustLongTime(krRTRC_optFrom)) { krRTRC_optRcend = "&rcend=" + krRTRC_AdjustLongTime(krRTRC_optFrom); } else { krRTRC_optRcend = ''; }       } else if (krRTRC_optOrder === 'newer') { if (krRTRC_isInt(parseInt(krRTRC_optFrom, 10)) && krRTRC_AdjustLongTime(krRTRC_optFrom)) { krRTRC_optRcstart = "&rcstart=" + krRTRC_AdjustLongTime(krRTRC_optFrom); } else { krRTRC_optRcstart = ''; }           if (krRTRC_isInt(parseInt(krRTRC_optUntill, 10)) && krRTRC_AdjustLongTime(krRTRC_optUntill)) { krRTRC_optRcend = "&rcend=" + krRTRC_AdjustLongTime(krRTRC_optUntill); } else { krRTRC_optRcend = ''; }       }        krRTRC_optNS = $("#rc-options-namespace").val; krRTRC_optRcdir = $("input[name='rc-options-rcdir']:checked").val; krRTRC_optOrder = krRTRC_optRcdir === 'asc' ? 'newer' : 'older'; krRTRC_optRInt = parseInt($("#rc-options-interval").val, 10) * 1000; krRTRC_optIRCBL = $("#rc-options-ircbl:checked").val === 'on' ? true : false; krRTRC_optAutoDiff = $("#rc-options-autodiff").val; krRTRC_AutoDiff = krRTRC_optAutoDiff === 'On' ? true : false; krRTRC_optAutoDiffTop = $("#rc-options-autodiff-top:checked").val; krRTRC_AutoDiffTop = krRTRC_optAutoDiffTop === 'on' ? true : false; krRTRC_RCDataURL = krRTRC_APIURL + "?action=query&format=xml&list=recentchanges" + krRTRC_optUser + '' + krRTRC_optPage + "&rctype=" + krRTRC_optRctype + "&rcshow=!bot" + krRTRC_optRcshow + "&rcprop=flags|timestamp|user|title|comment|sizes|ids" + krRTRC_optRcprop + "&rcnamespace=" + krRTRC_optNS + "&rclimit=" + krRTRC_optLimit + "&rcdir=" + krRTRC_optOrder + krRTRC_optRcstart + krRTRC_optRcend; return krRTRC_RCDataURL; }   function krRTRC_RebindElements { $("#krRTRC_RCOutput>.feed div.rcitem").each(function {            if (krInArray($(this).attr("rcid"), krRTRC_SkipDiffs)) {                $(this).addClass("skipped");            } else if (krInArray($(this).attr("rcid"), krRTRC_MarkPatrolCache)) {                $(this).addClass("patrolled");            }        }); $("#krRTRC_RCOutput>.feed div[rcid=" + window.currentDiffRcid + "]").addClass("indiff"); $('#krRTRC_DiffFrame>table.diff a[href^="http://"],#krRTRC_DiffFrame>table.diff a[href^="https://"],#krRTRC_DiffFrame>table.diff a[href^="//"]').attr("target", "_blank"); }   function krRTRC_PushFrontend { $("#krRTRC_RCOutput").removeClass("placeholder"); $("#krRTRC_RCOutput>.feed").html(krRTRC_FeedMemHTML); krRTRC_RebindElements; krRTRC_DayHeadPrev = ''; krRTRC_RCTimeout = setTimeout(krRTRC_Refresh, krRTRC_optRInt); $("#krRTRC_loader").hide; }   function krRTRC_ApplyIRCBL { if (krRTRC_Updating === true) { krRTRC_FeedMemUidArr = []; $(krRTRC_FeedMemHTML).find("div.item").each(function (index, el) {               krRTRC_FeedMemUidArr.push($(el).attr("user"));            }); krRTRC_FeedMemUidArr.shift; try { $.ajax({                   url: "//toolserver.org/~krinkle/CVN/API/?raw=0&format=json&uid=" + krRTRC_FeedMemUidArr.join("|") + "&jsoncallback=?",                    timeout: 500,                    dataType: 'json',                    success: function (data) {                        if (data.users) {                            $.each(data.users, function (i, val) { if (val.usertype === 'bl') { var tooltip = ''; if (val.reason) { tooltip += krMsg('reason') + ': ' + val.reason + ". "; } else { tooltip += krMsg('noreasonfound'); }                                   if (val.adder) { tooltip += krMsg('adder') + ": " + val.adder; } else { tooltip += krMsg('adder') + ": " + krMsg('unknown'); }                                   krRTRC_FeedMemHTML = $(" " + krRTRC_FeedMemHTML + " ").find("div.item[user=" + i + "] .user").addClass("blacklisted").prepend('').attr("title", tooltip).end.html; }                           });                        }                        krRTRC_PushFrontend;                        $("#krRTRC_RCOutput>.feed").append('<small id="krRTRC_Dumpdate">CVN DB ' + krMsg('lastupdate') + ': ' + data.dumpdate + ' (UTC) ');                        krRTRC_Updating = false;                    },                    error: function (data, txtstatus, error) {                        krRTRC_PushFrontend;                        krRTRC_Updating = false;                    }                }); } catch (e) { krRTRC_PushFrontend; krRTRC_Updating = false; }       }    }    function krRTRC_Refresh { if (krRTRC_RCEnabled === true && krRTRC_Updating === false) { $("#krRTRC_loader").show; krRTRC_Updating = true; $.ajax({               type: "GET",                url: krRTRC_RCDataURL,                dataType: "xml",                success: function (rawback) {                    var lastupdate = new Date;                    var msd = krRTRC_TimeDiff * 60 * 1000;                    lastupdate.setTime(lastupdate.getTime + msd);                    krRTRC_FeedMemHTML = '<div id="krRTRC_lastupdate">' + krMsg('lastupdate') + ': ' + lastupdate.toUTCString + ' | ' + krMsg('permalinktext') + '</a> ';                    if ($(rawback).find('error').length > 0) {                        krLog("krRTRC_GetRCData-> " + $(rawback).find('rc').length + " errors");                        $("#krRTRC_RCOutput").removeClass("placeholder");                        if ($(rawback).find('error').attr("code") === "rcpermissiondenied") {                            krRTRC_FeedMemHTML += ' Downloading recent changes failed Please untick the "Unpatrolled only"-checkbox or request the Patroller-right on ' + wgServer + '</a>'; } else { krRTRC_FeedMemHTML += ' Downloading recent changes failed Please check the settings above and try again. If you believe this is a bug, please  let me know </a>.'; }                       krRTRC_PushFrontend; krRTRC_Updating = false; } else if ($(rawback).find('rc').length > 0) { var htmloutput = '<div id="krRTRC_list">'; $(rawback).find('rc').each(function (i) {                           htmloutput += krRTRC_BuildItem($(this).attr("type"), $(this).attr("title"), $(this).attr("rcid"), $(this).attr("revid"), $(this).attr("old_revid"), $(this).attr("user"), $(this).attr("timestamp"), $(this).attr("comment"), $(this).attr("patrolled"), $(this).attr("anon"), $(this).attr("oldlen"), $(this).attr("newlen"));                        }); krRTRC_FeedMemHTML += htmloutput + " "; if (krRTRC_optIRCBL === true) { krRTRC_ApplyIRCBL; } else { krRTRC_PushFrontend; krRTRC_Updating = false; }                   } else { krRTRC_FeedMemHTML += ' ' + krMsg('nomatches') + ' '; krRTRC_PushFrontend; krRTRC_Updating = false; }                   $RCOptions_submit.removeAttr("disabled").css("opacity", "1.0"); }           });        }    }    function krRTRC_hardRefresh {        krRTRC_RCEnabled = true;        $("#krRTRC_toggleRefresh").val("Off").removeClass("button-on");        var x = krRTRC_GetRCOptions;        clearTimeout(krRTRC_RCTimeout);        krRTRC_Refresh;    }    function krRTRC_ProcesPermalink(l) {        var get = krGetUrlParam('rclimit', l);        $("#rc-options-limit option[value=" + get + "]").prop("selected", true);        get = krGetUrlParam('rcshow_anon', l);        if (get === "on") {            $("#rc-options-filter-anons").prop("checked", true);        }        get = krGetUrlParam('rcshow_patrol', l);        if (get === "on") {            $("#rc-options-filter-unpatrolled").prop("checked", true);        }        get = krGetUrlParam('rcuser', l);        $("#rc-options-rcuser").val(get);        get = krGetUrlParam('typeedit', l);        if (get === "off") { $("#rc-options-type-edit").prop("checked", false); }       get = krGetUrlParam('typenewpage', l); if (get === "off") { $("#rc-options-type-newpage").prop("checked"); }       get = krGetUrlParam('rcfrom', l); $("#rc-options-timeframe-rcfrom").val(get); get = krGetUrlParam('rcuntill', l); $("#rc-options-timeframe-rcuntill").val(get); get = krGetUrlParam('rcnamespace', l); $("#rc-options-namespace option[value=" + get + "]").attr("selected", "selected"); get = krGetUrlParam('rcdir', l); if (get === "asc") { $("#krRTRC_RCOptions input[name=rc-options-rcdir][value=asc]").prop("checked", true); $("#krRTRC_RCOptions input[name=rc-options-rcdir][value=desc]").prop("checked", false); }       get = krGetUrlParam('ajaxint', l); if (get !== "" && get !== " " && get !== null && get !== false) { $("#rc-options-interval").val(get); }       get = krGetUrlParam('ircbl', l); if (get === "on") { $("#rc-options-ircbl").prop("checked", true); }       get = krGetUrlParam('autodiff'); if (get === "on") { $("#rc-options-autodiff").val("On").addClass("button-on"); }       get = krGetUrlParam('autodiff_top', l); if (get === "on") { $("#rc-options-autodiff-top").prop("checked", true); }       get = krGetUrlParam('jumpstart', l); if (get === "on") { get = krRTRC_GetRCOptions; krRTRC_hardRefresh; window.location.hash = ''; window.location.hash = 'toggleHelp'; }   }    function krRTRC_GeneratePermalink { var a = '&rclimit=' + krRTRC_optLimit; a += krRTRC_optFiltAnon === 'on' ? '&rcshow_anon=on' : ''; a += krRTRC_optFiltPatrol === 'on' ? '&rcshow_patrol=on' : ''; a += krRTRC_optUser || ''; a += krRTRC_optTypeEdit ? '' : '&typeedit=off'; a += krRTRC_optTypeNewpage ? '' : '&typenewpage=off'; a += krRTRC_optPage || ''; a += krRTRC_optFrom === false ? '' : '&rcfrom=' + krRTRC_optFrom; a += krRTRC_optUntill === false ? '' : '&rcuntill=' + krRTRC_optUntill; a += krRTRC_optNS === '' ? '' : '&rcnamespace=' + krRTRC_optNS; a += '&rcdir='; a += krRTRC_optRcdir === 'asc' ? 'asc' : 'desc'; a += Math.round(krRTRC_optRInt / 1000) !== 3 ? '&ajaxint=' + Math.round(krRTRC_optRInt / 1000) : ''; a += krRTRC_optIRCBL ? '&ircbl=on' : ''; a += krRTRC_AutoDiff ? '&autodiff=on' : ''; a += krRTRC_AutoDiffTop ? '&autodiff_top=on' : ''; return mw.util.wikiScript + '?' + $.param({           title: wgPageName,            jumpstart: 'on'        }); }   function krRTRC_NextDiff { var $lis = $("#krRTRC_RCOutput>.feed div.rcitem:not(.indiff,.patrolled,.skipped)"); if (krRTRC_AutoDiffTop === true) { $lis.eq(0).find("a.rcitemlink").click; } else { $lis.eq($lis.length - 1).find(" a.rcitemlink").click; }   }    function krRTRC_TipIn($targetEl, uid, is_anon) { var o, links; krLog("krRTRC_TipIn"); o = $targetEl.offset; if (is_anon) { links = ' · WHOIS</a>'; } else { links = ''; }       links += ' · CrossWiki</a>'; if (krRTRC_Delhistright === true) { links += ' · DeletedContributions</a>'; }       $krRTRC_Tiptext.html('[+ filter ]</a>' + links); $krRTRC_Tip.css({           "left": o.left + "px",            "top": (o.top - 23) + "px",            "display": "block"        }).show; window.krRTRC_TipTime = setTimeout(krRTRC_TipOut, 3000); }   function krRTRC_TipOut { if (typeof krRTRC_TipTime !== 'undefined') { clearTimeout(krRTRC_TipTime); }       $krRTRC_Tip.hide; }   function krRTRC_RefreshWhois { $.ajax({           type: "GET",            url: "http://secure.grizzdesign.nl/RTRC-whoisonline.php?wiki_user=" + encodeURIComponent(mw.user.name + "@" + krRTRC_WikiID) + "&rtrc_hideme=0&rtrc_url=" + encodeURIComponent(window.location.href) + "&debug=0&jsoncallback=?",            timeout: 500,            dataType: 'json',            success: function (data) {                krLog("Whosonline data", data);                $("#krwhosonline").html(data);            }        }); }   function krRTRC_ToggleMassPatrol(b) { if (b === true) { krRTRC_MassPatrol = true; $krRTRC_MassPatrol.val("On").addClass("button-on"); if (window.currentDiff === '') { krRTRC_NextDiff; } else { $(".patrollink a").click; }       } else { krRTRC_MassPatrol = false; $krRTRC_MassPatrol.val("Off").removeClass("button-on"); }   }    function krRTRC_GetPatroltoken { $.ajax({           type: "GET",            url: krRTRC_APIURL + "?action=query&format=xml&list=recentchanges&rctoken=patrol&rclimit=1&rctype=new",            dataType: "xml",            success: function (rawback) {                krRTRC_Patroltoken = $(rawback).find('rc').attr("patroltoken");                if (krRTRC_Patroltoken) {                    krRTRC_Patroltoken = krRTRC_Patroltoken.replace("+", "%2B").replace("\\", "%5C");                } else {                    krRTRC_Patroltoken = false;                }            }        }); }   function krRTRC_init1 { krLog("Init Phase 1 started"); while (krRTRC_initFuncs.length > 0) { (krRTRC_initFuncs.shift); }       krLog("Init Phase 1 done"); }   function krRTRC_init2 { krLog("Init Phase 2 started"); while (krRTRC_initFuncs2.length > 0) { (krRTRC_initFuncs2.shift); }       krLog("Init Phase 2 done"); }   window.krRTRC_initFuncs = []; window.krRTRC_initFuncs[0] = function { $.ajax({           type: "GET",            url: krRTRC_APIURL + "?action=query&meta=userinfo&uiprop=rights&format=xml",            dataType: "xml",            success: function (rawback) {                if ($(rawback).find("r:contains('patrol')").length > 0) {                    $(rawback).find("r:contains('patrol')").each(function  { if ($(this).text === 'patrol' && krRTRC_Patrolright === false) { krRTRC_Patrolright = true; }                   });                }                if ($(rawback).find("r:contains('deletedhistory')").length > 0) {                    $(rawback).find("r:contains('deletedhistory')").each(function  { if ($(this).text === 'deletedhistory' && krRTRC_Delhistright === false) { krRTRC_Delhistright = true; }                   });                }            }        });    };    window.krRTRC_initFuncs[1] = function  { krRTRC_GetPatroltoken; };   window.krRTRC_initFuncs[2] = function  { $.ajax({           type: "GET",            url: krRTRC_APIURL + "?action=query&meta=siteinfo&format=xml",            dataType: "xml",            success: function (rawback) {                krRTRC_TimeDiff = $(rawback).find('general').attr("timeoffset");                krRTRC_WikiID = $(rawback).find('general').attr("wikiid");                document.title = "RTRC: " + krRTRC_WikiID;            }        }); };   window.krRTRC_initFuncs[3] = function  { $.getJSON(krRTRC_APIURL + "?action=query&format=json&meta=allmessages&amlang=" + wgUserLanguage + "&ammessages=show|hide|ascending abbrev|descending abbrev|markaspatrolleddiff|markedaspatrolled|markedaspatrollederror|next|diff|talkpagelinktext|contributions|recentchanges-label-legend|recentchanges-label-bot|recentchanges-label-minor|recentchanges-label-newpage|recentchanges-label-unpatrolled|recentchanges-legend-bot|recentchanges-legend-minor|recentchanges-legend-newpage|recentchanges-legend-unpatrolled|namespaces|namespacesall|blanknamespace&callback=?", function (data) {           var i;            krLog("GetIntMsgs->" + data);            krLog(data);            data = data.query.allmessages;            for (i = 0; i < data.length; i += 1) {                krMsgs[data[i].name] = data[i]['*'];            }            krRTRC_init2;        }); };   window.krRTRC_initFuncs2 = []; window.krRTRC_initFuncs2[0] = function { $("#p-namespaces>ul>li").removeClass("new").find(">a>span").eq(0).html("Tool"); $("#ca-talk").removeClass("new").find(">a").attr("href", "//meta.wikimedia.org/w/index.php?title=User_talk:Krinkle/Tools&action=edit&section=new&editintro=User_talk:Krinkle/Tools/Editnotice&preload=User_talk:Krinkle/Tools/Preload").attr("target", "_blank").find(">span").html("Feedback"); $("#footer").remove; $("#content").addClass("krRTRC_body"); krRTRC_RCLegendHTML = '<div id="krRTRC_RCLegend">' + krMsg('recentchanges-label-legend').replace("$1.", ) + ' N ' + krMsg('recentchanges-legend-newpage').replace("$1", ) + ', ! ' + krMsg('recentchanges-legend-unpatrolled').replace("$1", '') + ' Colors: ' + krMsg('markedaspatrolled') + ', ' + krMsg('currentedit') + ' , ' + krMsg('skippededit') + ' , Edit with an Automatic Edit Summary ' + krMsg('abbreviations') + ': T - ' + krMsg('talkpagelinktext') + ', C - ' + krMsg('contributions') + ' '; krRTRC_RCNamespaceDropdown = '<select id="rc-options-namespace" name="rc-options-namespace">'; krRTRC_RCNamespaceDropdown += ' ' + krMsg('namespacesall') + ' '; krRTRC_RCNamespaceDropdown += ' ' + krMsg('blanknamespace') + ' '; var fmNs = mw.config.get('wgFormattedNamespaces'), ns; for (ns in fmNs) { if (ns > 0) { krRTRC_RCNamespaceDropdown += '<option value="' + ns + '">' + fmNs[ns] + ' '; }       }        krRTRC_RCNamespaceDropdown += ' '; $("#content").html(' <div id="krRTRC_PageWrap" class="plainlinks">' + '<div id="krRTRC_Topbar">Real-Time Recent Changes (' + krRTRC_appVersion + ' as of ' + krRTRC_appDate + ') <small id="toggleHelp">[help]  [' + krMsg('mypatrollog') + '] </a> ' + '<div id="krRTRC_RCForm"><fieldset id="krRTRC_RCOptions" class="nohelp"> ' + ' <label for="rc-options-limit" class="head">' + krMsg('limit') + ' <select id="rc-options-limit" name="rc-options-limit"> 10 <option selected="" value="25">25 50  75  100  ' + ' ' + ' ' + krMsg('filter') + ' <input type="checkbox" value="on" id="rc-options-filter-anons" name="rc-options-filter-anons"><label for="rc-options-filter-anons"> ' + krMsg('anononly') + ' <input type="checkbox" value="on" id="rc-options-filter-unpatrolled" name="rc-options-filter-unpatrolled"><label for="rc-options-filter-unpatrolled"> ' + krMsg('unpatrolledonly') + '  ' + ' ' + ' <label for="rc-options-rcuser" class="head">' + krMsg('userfilter-opt') + ' <input type="text" value="" size="16" id="rc-options-rcuser" name="rc-options-rcuser" /> <input class="button" type="button" id="RCOptions_RcuserClr" value="' + krMsg('clear') + '" /> ' + ' ' + ' ' + krMsg('type') + ' <input type="checkbox" value="on" id="rc-options-type-edit" name="rc-options-type-edit" checked="checked"><label for="rc-options-type-edit"> ' + krMsg('edits') + ' <input type="checkbox" checked="checked" value="on" id="rc-options-type-newpage" name="rc-options-type-newpage"><label for="rc-options-type-newpage"> ' + krMsg('newpages') + ' ' + ' ' + ' ' + krMsg('timeframe-opt') + ' <label for="rc-options-timeframe-rcfrom">' + krMsg('from') + ': <input type="text" value="" size="14" id="rc-options-timeframe-rcfrom" name="rc-options-timeframe-rcfrom"> <label for="rc-options-timeframe-rcuntill">' + krMsg('untill') + ': <input type="text" value="" size="14" id="rc-options-timeframe-rcuntill" name="rc-options-timeframe-rcuntill"> ' + ' ' + ' <label for="rc-options-namespace" class="head">' + krMsg('namespaces') + ' ' + krRTRC_RCNamespaceDropdown + ' ' + ' ' + ' ' + krMsg('order') + ' <input type="radio" name="rc-options-rcdir" value="asc"> ' + krMsg('asc') + ' <input type="radio" name="rc-options-rcdir" value="desc" checked="checked"> ' + krMsg('desc') + ' ' + ' ' + ' <label for="rc-options-interval" class="head">R <span section="Reload_Interval" class="helpicon"> <input type="text" value="3" size="1" id="rc-options-interval" name="rc-options-interval"> ' + ' ' + ' <label class="head" for="rc-options-ircbl">IRCBL <span section="IRC_Blacklist" class="helpicon"> <input type="checkbox" value="on" size id="rc-options-ircbl" name="rc-options-ircbl" /> ' + ' ' + ' <input class="button" type="button" id="RCOptions_submit" value="' + krMsg('apply') + '" /> ' + '<hr style="clear:both" />' + ' <label for="krRTRC_MassPatrol" class="head">MassPatrol <input id="krRTRC_MassPatrol" class="button button-off" type="button" value="Off" /> ' + ' ' + ' <label for="rc-options-autodiff" class="head">AutoDiff <input type="button" class="button button-off" value="Off" id="rc-options-autodiff" /> <input type="checkbox" value="on" id="rc-options-autodiff-top" /> <label for="rc-options-autodiff-top"> ' + krMsg('loadfromtop') + ' ' + ' ' + ' <label for="krRTRC_toggleRefresh" class="head">Pause <input id="krRTRC_toggleRefresh" class="button button-off" type="button" value="Off" /> ' + ' ' + '' + '<div id="krRTRC_DiffFrame" style="display:none"> ' + '<div id="krRTRC_RCOutput" class="placeholder">' + krRTRC_RCLegendHTML + ' ' + ' ' + '<div id="krRTRC_Footer"> ' + ' ' + krMsg('documentation') + '</a> ' + 'Real-Time Recent Changes by Krinkle</a> is licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License</a>.' + ' ' + krMsg('whatsnew') + '</a> ' + '  '); $("body").append("<div id='krRTRC_Tip'><span id='krRTRC_Tiptext'> "); $("#content-inner").css("position", "relative"); $("#krRTRC_RCOutput").prepend(' <img src="' + krRTRC_LoaderSRC + '" id="krRTRC_loader" style="display:none" />'); };   window.krRTRC_initFuncs2[1] = function  { krRTRC_ProcesPermalink; };   window.krRTRC_initFuncs2[2] = function  { $RCOptions_submit = $("#RCOptions_submit"); $RCOptions_submit.click(function {            $RCOptions_submit.prop('disabled', true).css('opacity', '0.5');            var a = krRTRC_GetRCOptions;            krRTRC_hardRefresh;            return false;        }); $("#diffClose").live("click", function {            $("#krRTRC_DiffFrame").fadeOut('fast');            window.currentDiff = ;            window.currentDiffRcid = ;        }); window.currentDiff = ''; window.currentDiffRcid = ''; $("a.diff").live("click", function {            window.currentDiff = $(this).attr("diff");            window.currentDiffRcid = $(this).attr("rcid");            var title = $(this).parent.find(">a.page").text;            var href = $(this).parent.find(">a.diff").attr('href');            $("#krRTRC_DiffFrame").removeAttr('style').load(mw.util.wikiScript + '?action=render&diff=' + window.currentDiff + '&diffonly=1&uselang=' + wgUserLanguage, function  { $(this).html($(this).html.replace("diffonly=", "krinkle=").replace("diffonly=", "krinkle=")); if (krInArray(window.currentDiffRcid, krRTRC_SkipDiffs)) { krRTRC_SkipButon = ' Unskip</a> '; } else { krRTRC_SkipButon = ' <a id="diffSkip">Skip</a> '; }               $("#krRTRC_DiffFrame").fadeIn.prepend(' ' + title + ' <div id="krRTRC_DiffTools"> <a id="diffClose">X</a> <a href="' + href + '" target="_blank" id="diffNewWindow">Open in Wiki</a> ' + (krRTRC_Patroltoken ? ' <a onclick="(function{ if($(\'.patrollink a\').length){ $(\'.patrollink a\').click; } else { $(\'#diffSkip\').click; } });">[mark]</a> ' : '') + ' <a id="diffNext">' + krMsg('next').ucFirst + ' &raquo;</a> ' + krRTRC_SkipButon + ' '); if (krRTRC_MassPatrol === true) { $(".patrollink a").click; }               $("#krRTRC_RCOutput>.feed div.indiff").removeClass("indiff"); krRTRC_RebindElements; });           return false;        }); $("a.newPage").live("click", function {            window.currentDiffRcid = $(this).attr("rcid");            var title = $(this).parent.find(">a.page").text;            var href = $(this).parent.find(">a.page").attr('href');            $("#krRTRC_DiffFrame").css("max-height", "400px").load(href + '&action=render&uselang=' + wgUserLanguage, function  { if (krInArray(window.currentDiffRcid, krRTRC_SkipDiffs)) { krRTRC_SkipButon = ' <a id="diffUnskip">Unskip</a> '; } else { krRTRC_SkipButon = ' <a id="diffSkip">Skip</a> '; }               $("#krRTRC_DiffFrame").fadeIn.prepend(' ' + title + ' <div id="krRTRC_DiffTools"> <a id="diffClose">X</a> <a href="' + href + '" target="_blank" id="diffNewWindow">Open in Wiki</a> <a onclick="$(\'.patrollink a\').click">[mark]</a> <a id="diffNext">' + krMsg('next').ucFirst + ' &raquo;</a> ' + krRTRC_SkipButon + ' '); if (krRTRC_MassPatrol === true) { $(".patrollink a").click; }               $("#krRTRC_RCOutput>.feed div.indiff").removeClass("indiff"); krRTRC_RebindElements; });           return false;        }); $(".patrollink").live("click", function {            $(".patrollink>a").html(krMsg('markaspatrolleddiff') + '...');            $.ajax({ type: "POST", url: krRTRC_APIURL + '?action=patrol&format=xml&list=recentchanges&rcid=' + currentDiffRcid + '&token=' + krRTRC_Patroltoken, dataType: "xml", success: function (rawback) { if ($(rawback).find('error').length > 0) { $(".patrollink").html(' ' + krMsg('markedaspatrollederror') + ' '); krLog("PatrolError: " + $(rawback).find('error').attr("code") + "; info: " + $(rawback).find('error').attr("info")); } else { $(".patrollink").html(' ' + krMsg('markedaspatrolled') + ' '); $("#krRTRC_RCOutput>.feed div[rcid=" + window.currentDiffRcid + "]").addClass("patrolled"); krRTRC_MarkPatrolCache.push(window.currentDiffRcid); while (krRTRC_MarkPatrolCache.length > krRTRC_MarkPatrolCacheMax) { krLog('MarkPatrolCache -> Cache array is bigger then cachemax, shifting array(' + krRTRC_MarkPatrolCache.length + ' vs. ' + krRTRC_MarkPatrolCacheMax + '). Current array:'); krLog(krRTRC_MarkPatrolCache); krRTRC_MarkPatrolCache.shift; krLog('MarkPatrolCache -> Cache array is shifted. New array:'); krLog(krRTRC_MarkPatrolCache); }                       if (krRTRC_AutoDiff === true) { krRTRC_NextDiff; }                   }                },                error: function  { $(".patrollink").html(' ' + krMsg('markedaspatrollederror') + ' '); }           });            return false;        }); $("#diffNext").live("click", function {            krRTRC_NextDiff;        }); $("#diffSkip").live("click", function {            $("#krRTRC_RCOutput>.feed div[rcid=" + window.currentDiffRcid + "]").addClass("skipped");            krRTRC_SkipDiffs.push(window.currentDiffRcid);            krRTRC_NextDiff;        }); $("#diffUnskip").live("click", function {            $('#krRTRC_RCOutput>.feed div[rcid=' + window.currentDiffRcid + ']').removeClass("skipped");            krRTRC_SkipDiffs.splice(krRTRC_SkipDiffs.indexOf(window.currentDiffRcid), 1);        }); $("#toggleHelp").live("click", function {            $("#krRTRC_RCOptions").toggleClass('nohelp');        }); $("#krRTRC_RCForm .helpicon").attr("title", krMsg('clickforinfo')); $("#krRTRC_RCForm .helpicon").live("click", function {            window.open(krRTRC_HelpURL + '#' + $(this).attr("section"), "_blank");            return false;        }); $("#RCOptions_RcuserClr").live("click", function {            if (krRTRC_MassPatrol === true) {                var a = window.confirm(krMsg('masspatrol_userfilterconfirm'));                if (a) {                    $("#rc-options-rcuser").val();                    krRTRC_ToggleMassPatrol(false);                }            } else {                $("#rc-options-rcuser").val();            }            $RCOptions_submit.click;        }); $krRTRC_Tip = $("#krRTRC_Tip"); $krRTRC_Tiptext = $("#krRTRC_Tiptext"); $("#krRTRC_Tip").click(function {            krRTRC_TipOut;        }); $("#krRTRC_Tip").hover(function {            clearTimeout(window.krRTRC_TipTime);        }, function  {            window.krRTRC_TipTime = setTimeout(krRTRC_TipOut, 1000);        }); $("#krRTRC_list *").live("mouseover", function (e) {           var $hovEl = false;            krLog(e);            krLog(e.target);            if ($(e.target).is(".rcitem")) {                $hovEl = $(e.target);            } else if ($(e.target).parents(".rcitem").is(".rcitem")) {                $hovEl = $(e.target).parents(".rcitem");            }            if ($hovEl) {                krRTRC_TipIn($hovEl.find(".user"), $hovEl.find(".user").text, $hovEl.hasClass("anoncontrib"));            } else {                krRTRC_TipOut;            }        }); $(".mw-rollback-link a").live("click", function {            $(".patrollink a").click;        }); $krRTRC_MassPatrol = $("#krRTRC_MassPatrol"); $krRTRC_MassPatrol.live("click", function {            if (krRTRC_MassPatrol === true) {                krRTRC_ToggleMassPatrol(false);            } else if (krRTRC_AutoDiff === true) {                krRTRC_ToggleMassPatrol(true);            } else {                var a = window.confirm(krMsg('masspatrol_autodiffneeded'));                if (a) {                    krRTRC_AutoDiff = true;                    $("#rc-options-autodiff").val("On").addClass("button-on");                    krRTRC_ToggleMassPatrol(true);                }            }        }); $("#rc-options-autodiff").live("click", function {            if (krRTRC_AutoDiff === true) {                if (krRTRC_MassPatrol === true) {                    var a = window.confirm(krMsg('autodiff_masspatrolneeds'));                    if (a) {                        $("#rc-options-autodiff").val("Off").removeClass("button-on");                        krRTRC_AutoDiff = false;                        krRTRC_ToggleMassPatrol(false);                    }                } else {                    $(this).val("Off").removeClass("button-on");                    krRTRC_AutoDiff = false;                }            } else {                $(this).val("On").addClass("button-on");                krRTRC_AutoDiff = true;            }        }); $("#rc-options-autodiff-top").live("click", function {            if (krRTRC_AutoDiffTop === true) {                $(this).prop("checked", false);                krRTRC_AutoDiffTop = false;            } else {                $(this).prop("checked", true);                krRTRC_AutoDiffTop = true;            }        }); $("#krRTRC_toggleRefresh").live("click", function {            krLog("#krRTRC_toggleRefresh clicked");            if (krRTRC_RCEnabled === true) {                krRTRC_RCEnabled = false;                $(this).val("On").addClass("button-on");                clearTimeout(krRTRC_RCTimeout);            } else if (krRTRC_RCEnabled === false) {                krRTRC_RCEnabled = true;                $(this).val("Off").removeClass("button-on");                krRTRC_hardRefresh;            } else {                $(this).val("On").addClass("button-on");                clearTimeout(krRTRC_RCTimeout);            }            return false;        }); };   if (wgTitle === "Krinkle/RTRC" && (wgAction === 'view')) { mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Krinkle/RTRC.css&action=raw&ctype=text/css', 'text/css', true); if (typeof window.krMsgs !== 'object') { $.getScript('//toolserver.org/~krinkle/I18N/export.php?lang=' + wgUserLanguage, function {                krRTRC_Months = krMsg('months').split(',');                mw.loader.using(['mediawiki.util', 'mediawiki.action.history.diff'], function  { var browserName = $.client.profile.name; if (browserName === 'msie') { var s = "Internet Explorer is not supported. Please use a Mozilla or WebKit-based browser such as Firefox, Chrome or Safari."; $(" <p style='color:red'>" + s + " ").insertBefore("#catlinks"); return true; } else if (browserName === 'opera') { alert("Opera is currently not supported. Proceed at own risk or use a Mozilla or WebKit-based browser such as Firefox, Chrome or Safari."); }                   krRTRC_init1; });           });        }    } });