User:MC10/Rollback summary.js

From Simple English Wikipedia, the free encyclopedia

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/** 
 * 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 = function(a, b, c) { return a ? a.getElementsByClassName(c) : [] };
        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
 
// [[Category:Wikipedia scripts]]