Jump to content

User:MC10/rollbackSummary.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
/** 
 * 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 [[User:MC10/rollbackSummary]].
 * Borrowed from [[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' && Array.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

// [[Category:Wikipedia scripts]]