Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name Rollback Tool
- // @namespace http://tampermonkey.net/
- // @version 0.1
- // @description Rollback Tool
- // @author http://dev.wikia.com/wiki/Rollback
- // @match wikia.com
- // @grant none
- // @include
- // ==/UserScript==
- /* jshint -W097 */
- 'use strict';
- // Your code here...
- /*
- * Rollback
- * Perform rollbacks without needing to be in the usergroup
- * @author Ozuzanna
- */
- ;(function($, mw) {
- var main = {
- init: function() {
- if ($('.mw-rollback-link a').length) return;
- if (mw.config.get('wgAction') == "history" && $('#pagehistory li').length > 1)
- $('#pagehistory li:first .mw-history-undo a').before('<span class="mw-custom-rollback-link"><a style="cursor: pointer" title=""Rollback" reverts edit(s) to this page of the last contributor in one click" data-id="' + mw.config.get('wgPageName') + '">rollback</a></span> | ');
- else if (mw.config.get('wgCanonicalSpecialPageName') == "Contributions") {
- $('#mw-content-text ul').find('li').each(function() {
- $(this).append(' <span class="mw-custom-rollback-link">[<a style="cursor: pointer" title=""Rollback" reverts edit(s) to this page of the last contributor in one click" data-id="' + $(this).find('a:first').attr('title') + '">rollback</a>]</span>');
- });
- }
- else if ($.getUrlVar('diff') || $.getUrlVar('oldid'))
- $('.mw-usertoollinks:last').after(' <span class="mw-custom-rollback-link">[<a style="cursor: pointer" title=""Rollback" reverts edit(s) to this page of the last contributor in one click" data-id="' + mw.config.get('wgPageName') + '">rollback</a>]</span>');
- $('.mw-custom-rollback-link a').click(function() {
- main.getRevisionIdAndContent($(this).attr('data-id'));
- });
- },
- getRevisionIdAndContent: function(title) {
- var API = new mw.Api();
- API.get({
- action: 'query',
- prop: 'revisions',
- titles: title,
- rvprop: 'user|ids',
- rvlimit: 500,
- cb: new Date().getTime()
- })
- .done(function(d) {
- if (!d.error) {
- var revisions;
- for (var i in d.query.pages) {
- revisions = d.query.pages[i].revisions;
- }
- var currentUser = revisions[0].user, //current user rollbacking from
- lastUser,
- revId;
- for (var i in revisions) {
- if (revisions[i].user != currentUser) {
- lastUser = revisions[i].user; //remember last author
- revId = revisions[i].revid; //get revision to revert to
- break;
- }
- }
- if (lastUser) {
- API.get({
- action: 'query',
- prop: 'revisions',
- rvprop: 'content',
- revids: revId,
- cb: new Date().getTime()
- })
- .done(function(d) {
- if (!d.error) {
- var content = ""; //can be no content on page so initialise empty as failsafe
- for (var i in d.query.pages) {
- if (d.query.pages[i].revisions)
- content = d.query.pages[i].revisions[0]["*"];
- }
- main.performRollback(title,content,currentUser,lastUser);
- }
- else
- new BannerNotification('Unable to rollback (failed to get page content): ' + d.error.code,'error').show();
- })
- .fail(function() {
- new BannerNotification('Unable to rollback: failed to get page content!','error').show();
- });
- }
- else
- new BannerNotification('Unable to rollback: no different editor found!','error').show();
- }
- else
- new BannerNotification('Unable to rollback (failed to get revisions): ' + d.error.code,'error').show();
- })
- .fail(function() {
- new BannerNotification('Unable to rollback: failed to get revisions!','error').show();
- });
- },
- performRollback: function(page,text,user,user2) {
- var API = new mw.Api();
- API.post({
- action: 'edit',
- title: page,
- text: text,
- summary: 'Reverted edits by [[Special:Contributions/' + user + '|' + user + ']] ([[User_talk:' + user + '|talk]] | [[Special:Block/' + user + '|block]]) to last version by [[User:' + user2 + '|' + user2 + ']] ([[w:c:dev:Rollback|script]])',
- token: mw.user.tokens.values.editToken
- })
- .done(function(d) {
- if (!d.error) {
- new BannerNotification('Rollback successful!','confirm').show();
- }
- else
- new BannerNotification('Unable to rollback (failed to publish edit): ' + d.error.code,'error').show();
- })
- .fail(function() {
- new BannerNotification('Unable to rollback: failed to publish edit!','error').show();
- });
- }
- };
- main.init();
- }) (this.jQuery, this.mediaWiki);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement