Jump to content

User:PiRSquared17/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.
// the following scripts are from [[simple:User:PiRSquared17/MRBK.js]] and [[simple:User:Tholly/Rollback.js]], respectively

//Mass rollback function
//Written by John254
//Adapted from User:Mr.Z-man/rollbackSummary.js
//Instructions: Selecting the "rollback all" tab when viewing a user's contributions history
//will open all rollback links displayed there. (Use with caution)
// 
//EdSum copied from [[User:Tholly/Rollback.js]]
//
//  **The script below is an adaption of one from [[w:User:Gracenotes/rollback.js]]**
//           **Please read that page for more details on the script.**
//
//  The Differences:
//  -Instead of just being able to:  $user --> username
//  -Now there is:  $user --> [[User:username|username]] - (linked)
//  -Also: $talk     --> [[User talk:username|talk]] - (linked)
//  -Also: $contribs --> [[Special:Contributions/username|contributions]] - (linked)
//  -Also: $ip       --> [[Special:Contributions/username|username]] - (linked). Used especially for IPs with no userpage.
//  -Also: $rvuser   --> [[User:User to revert to|user to revert to]] - (linked).
//  -Also: $rvip     --> [[Special:Contributions/user to revert to|user to revert to]] - (linked). Used for IPs with no userpage.
//
//  -Another change is that there is already text in the summary box, defaulting to: 
//   "Reverted edits by $ip ($talk) to last version by $rvuser."
//  -Finally, the link to click on next to rollback is "summary", not "sum"
//   and there are spaces between "rollback", "|" and "summary" to match other formatting.
//
 
// 
//  Added by PiRSquared17:
//  -If you want to open the user's talk page, put "$opentalk" at the end of the input box
 
if (typeof(skin)!="undefined" && skin=="vector")
  (function() {
      var GET = document.getElementById;
      document.getElementById = function(id) {
          var g = GET.call(document, id);
          if (g) {
              return g;
          } else {
              return GET.call(document, {
                  'p-cactions': 'actions',
                  'p-personal': 'personal',
                  'p-search': 'p-navigation', // redirected to this for positioning, or to #search?
                  'p-logo': 'logo',
                  'column-one': 'panel',
                  'column-content': 'content', // since #content exists, is this ok?
                  'globalWrapper': 'content', // what should this be?
                  'lastmod': 'foot-info-lastmod'
              }[id]);
          }
      };
  })();
 
function _confirmRollback() {
    var url = document.location.href;
    var user = url.match(/Special:Contributions\/([^&]*)/);
    if (!user || user == wgUserName)
    {
        alert("error");
        return;
    }
    user = decodeURIComponent(user[1]);

    var summary = prompt("Enter a summary to use for rollback. Leave blank to use the default.\n\n- '$user' will be replaced with the link to " + user + "'s userpage,\n- '$talk' to their talk page,\n- '$contribs' to their contributions page, and\n- '$ip' to their contributions page with the link text as '" + user + "'.\n\n- $rvuser links to userpage of user reverting back to, and \n- $rvip to the contribs page of user reverting back to (link text of username).", "Reverted edits by $ip ($talk) to last version by $rvuser (Mass reversion of changes by $ip).");
    if (summary == undefined) {
        return false;
    }
    else if (summary == "") {
        return true;
    }
    var startsum = summary.replace(/\$user/g, "[[User:$2|$2]]");
    var worksum1 = startsum.replace(/\$ip/g, "[[Special:Contributions/$2|$2]]");
    var worksum2 = worksum1.replace(/\$rvuser/g, "[[User:$1|$1]]");
    var worksum3 = worksum2.replace(/\$rvip/g, "[[Special:Contributions/$1|$1]]");
    var worksum4 = worksum3.replace(/\$opentalk/g, "");
    if (worksum3 != worksum4) {
        open(wgServer + (wgArticlePath.replace(/\$1/g, "")) + "User talk:" + user);
    }
    var finsum = worksum4.replace(/\$contribs/g, "[[Special:Contributions/" + user + "|contributions]]");
    finsum = "&summary=" + encodeURIComponent(finsum.replace(/\$talk/g, "[[User talk:$2|talk]]"));
    return finsum;
}
 
function rollbackEverythingButton() {
  var hasRollback = getElementsByClassName(document, "span", "mw-rollback-link");
  if (hasRollback[0] && (document.title.indexOf("User contributions") != -1) ) {
    mw.util.addPortletLink('p-cactions', 'javascript:rollbackEverything()', "rollback all", "ca-rollbackeverything", "rollback all edits displayed here");
    if (typeof noMRBKL == "undefined" || !noMRBKL) {
        addRemoteRollbackLinks();
    }
  }
}
var qapi = sajax_init_object();  // will use later
qapi.open('GET', wgServer + (wgArticlePath.replace(/\$1/g, 'wgPageName')), true);
qapi.onreadystatechange = __getXML;
qapi.overrideMimeType('text/xml');
qapi.send();
// handle response
function __getXML(_api) {
	if(_api.readyState==4) {
		if(_api.status==200) {
			return _api.responseXML;
		} else {
			alert('The query returned an error.');
		}
	}
}
function addRemoteRollbackLinks() {
  var usertools = document.getElementsByClassName("mw-usertoollinks");
  for (var i = 0; i < usertools.length; i++)
  {
    var usertalk = usertools[i].getElementsByTagName("a")[0];
    if (usertools[i].getElementsByTagName("a").length > 1)
        var contribs = usertools[i].getElementsByTagName("a")[1];
    else var contribs = usertools[i].getElementsByTagName("a")[0];
    var rollbackall = document.createElement("a");
    rollbackall.setAttribute("href", encodeURI(wgScript + "?title=Special:Contributions/" + (document.getElementsByClassName("mw-usertoollinks")[i].getElementsByTagName("a")[0].href.match(/User_talk:([^&]*)/)[1]) + "&rollbackall=true"));
    var txtToAdd0 = document.createTextNode(" | ");
    var txtToAdd1 = document.createTextNode("rollback all");
    rollbackall.appendChild(txtToAdd1);
    contribs.parentNode.insertBefore(txtToAdd0, contribs.nextSibling);
    txtToAdd0.parentNode.insertBefore(rollbackall, txtToAdd0.nextSibling);
  }
}
$(rollbackEverythingButton);
$( function() {
	if( document.location.href.indexOf( 'rollbackall=true' ) != -1 ) {
		rollbackEverything();
		return;
	}
});
function rollbackEverything() {
    var edsum = _confirmRollback();
    if (typeof edsum != "string") {
        return 0;
    }
    for (var i in document.links) {
      if (document.links[i].href.indexOf('action=rollback') != -1) {
        window.open(document.links[i].href + edsum);
      }
    }
}

// end script 1

//

//  **The script below is an adaption of one from [[w:User:Gracenotes/rollback.js]]**

//           **Please read that page for more details on the script.**

//

//  The Differences:

//  -Instead of just being able to:  $user --> username

//  -Now there is:  $user --> [[User:username|username]] - (linked)

//  -Also: $talk     --> [[User talk:username|talk]] - (linked)

//  -Also: $contribs --> [[Special:Contributions/username|contributions]] - (linked)

//  -Also: $ip       --> [[Special:Contributions/username|username]] - (linked). Used especially for IPs with no userpage.

//  -Also: $rvuser   --> [[User:User to revert to|user to revert to]] - (linked).

//  -Also: $rvip     --> [[Special:Contributions/user to revert to|user to revert to]] - (linked). Used for IPs with no userpage.

//

//  -Another change is that there is already text in the summary box, defaulting to: 

//   "Reverted edits by $ip ($talk) to last version by $rvuser."

//  -Finally, the link to click on next to rollback is "summary", not "sum"

//   and there are spaces between "rollback", "|" and "summary" to match other formatting.

//

 

 

function addSumLink() {

    var ntitle2 = document.getElementById("mw-diff-ntitle2")

    if (!ntitle2) return;

    var rbnode = getElementsByClassName(document.getElementById("mw-diff-ntitle2"), "span", "mw-rollback-link");

    if (rbnode.length != 0)

        addRollbackSummaryLink(rbnode[0]);

}

 

function confirmRollback() {

    var url = this.href;

    var user = url.match(/[?&]from=([^&]*)/);

    if (!user) return;

    var user = decodeURIComponent(user[1].replace("+", " "));

    var summary = prompt("Enter a summary to use for rollback. Leave blank to use the default.\n\n- '$user' will be replaced with the link to " + user + "'s userpage,\n- '$talk' to their talk page,\n- '$contribs' to their contributions page, and\n- '$ip' to their contributions page with the link text as '" + user + "'.\n\n- $rvuser links to userpage of user reverting back to, and \n- $rvip to the contribs page of user reverting back to (link text of username).", "Reverted edits by $ip ($talk) to last version by $rvuser.")

    if (summary == undefined)

        return false;

    else if (summary == "")

        return true;

    var startsum = summary.replace(/\$user/g, "[[User:" + user + "|" + user + "]]");

    var worksum1 = startsum.replace(/\$ip/g, "[[Special:Contributions/" + user + "|" + user + "]]");

    var worksum2 = worksum1.replace(/\$rvuser/g, "[[User:$1|$1]]");

    var worksum3 = worksum2.replace(/\$rvip/g, "[[Special:Contributions/$1|$1]]");

    var finsum = worksum3.replace(/\$contribs/g, "[[Special:Contributions/" + user + "|contributions]]");

    this.href += "&summary=" + encodeURIComponent(finsum.replace(/\$talk/g, "[[User talk:" + user + "|talk]]"));

 

    return true;

};

 

function addRollbackSummaryLink(rbnode) {

    var rblink = rbnode.getElementsByTagName("a")[0]

    var alink = rblink.cloneNode(true);

    alink.className = "";

    alink.firstChild.nodeValue = "summary";

    alink.onclick = confirmRollback;

    rbnode.insertBefore(alink, rblink.nextSibling);

    rbnode.insertBefore(document.createTextNode(" | "), alink);

}

 

$(addSumLink);

//  End of script