Jump to content

User:Fnlayson/rollback.js

From Wikipedia, the free encyclopedia
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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.
/* Copied from User:Gracenotes/rollback.js.  Thanks!
 *
 * How to use:
 * 
 * Add the following to [[Special:Mypage/monobook.js]] as a
 * logged-in user using the monobook skin:
 *   importScript('User:Gracenotes/rollback.js');
 *
 * On diff pages, a "summary" link will appear next to "rollback".
 * When you click on "summary", you will be prompted to enter a
 * summary. Press "Cancel" to cancel, and leave a blank summary
 * to use the default. In the summary, the text "$user" will
 * automatically be replaced with the user name you're reverting.
 * e.g., "rv edits by $user; not true"
 * 
 * "sum" link label changed to "summary" below. -Fnlayson
 * update code from User:Gracenotes's page on 1/23/2015.
 */

function addSumLink() {
    var rbnode = [], diffnode, index = {}, gebcn = document.getElementsByClassName
        ? function(a, b, c) { return a.getElementsByClassName(c) }
        : getElementsByClassName;
    if (typeof rollbackLinksDisable == 'object' && rollbackLinksDisable instanceof Array)
        for (var i = 0; i < rollbackLinksDisable.length; i++)
            index[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 + "\".",
                         rollbackSummaryDefault);
    if (summary == undefined)
        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 = "summary";
    alink.onclick = confirmRollback;
    rbnode.insertBefore(alink, rblink.nextSibling);
    rbnode.insertBefore(document.createTextNode(" | "), alink);
}
if (typeof rollbackLinksDisable == 'undefined')
    rollbackLinksDisable = [];
if (typeof rollbackSummaryDefault == 'undefined')
    rollbackSummaryDefault = "";

$(addSumLink);

/*  addOnloadHook(addSumLink);
 */