User:Mazbel/Rollback summary.js

/** * This script lets you use a custom summary with the rollback feature * by adding a "sum" link wherever a rollback link appears. When you * click "sum" you are prompted for a custom summary, and the script * adds an additional summary parameter to the rollback URL submitting it. * * For usage and extra options, see en:User:MC10/rollbackSummary. * Borrowed from en:User:Gracenotes/rollback.js * * Linkback: User:MC10/rollbackSummary.js */ (function ($, undefined) { // Wrap with jQuery   function addSumLink {        var rbnode = [], diffnode, index = {}, gebcn = document.getElementsByClassName            ? function(a, b, c) { return a.getElementsByClassName(c) }            : getElementsByClassName;        if (typeof window.rollbackLinksDisable === 'object' && $.isArray(window.rollbackLinksDisable)) {            for (var i = 0; i < window.rollbackLinksDisable.length; i++)                index[window.rollbackLinksDisable[i]] = true;        }        if (!('user' in index) && mw.config.get("wgCanonicalSpecialPageName") === "Contributions" || !('recent' in index) && mw.config.get("wgCanonicalSpecialPageName") === "Recentchanges" || !('watchlist' in index) && mw.config.get("wgCanonicalSpecialPageName") === "Watchlist") {           rbnode = gebcn(document.getElementById("bodyContent"), "span", "mw-rollback-link");        } else if (!('history' in index) && mw.config.get("wgAction") === "history") {            rbnode = gebcn(document.getElementById("pagehistory"), "span", "mw-rollback-link");        } else if (!('diff' in index) && (diffnode = document.getElementById("mw-diff-ntitle2"))) {            rbnode = gebcn(diffnode, "span", "mw-rollback-link");        }        for (var i = 0, len = rbnode.length; i < len; i++)            addRollbackSummaryLink(rbnode[i]);    };    function confirmRollback {        var url = this.href;        var user = url.match(/[?&]from=([^&]*)/);        if (!user)            return;        user = decodeURIComponent(user[1].replace(/\+/g, " "));        var summary = prompt("Enter a summary to use for rollback.\n\nLeave blank to use the default. $user will be replaced with \"" + user + "\".",           window.rollbackSummaryDefault);        if (summary === undefined || summary === null) {            return false;        } else if (summary === "") {            return true;        }        this.href += "&summary=" + encodeURIComponent(summary.replace(/\$user/g, user));        return true;    };    function addRollbackSummaryLink(rbnode) {        var rblink = rbnode.getElementsByTagName("a")[0];        var alink = rblink.cloneNode(true);        alink.className = ""; // don't confuse other scripts        alink.firstChild.nodeValue = "sum";        alink.onclick = confirmRollback;        rbnode.insertBefore(alink, rblink.nextSibling);        rbnode.insertBefore(document.createTextNode(" | "), alink);    };    if (window.rollbackLinksDisable === undefined)        window.rollbackLinksDisable = [];    if (window.rollbackSummaryDefault === undefined) window.rollbackSummaryDefault = null; // = "" $(addSumLink); }(jQuery)) // End wrap with jQuery //