Difference between revisions of "User:4D4850/common.js"

Explain xkcd: It's 'cause you're dumb.
Jump to: navigation, search
(changed to Jacky720's script)
 
Line 1: Line 1:
var cssSelectorForEditTextBox = 'textarea'
+
console.log("your JS loaded it didn't do anything");
var cssSelectorForSaveChangesButton = '#wpSave'
+
/**
var cssSelectorForMainContent = '#mw-content-text'
+
* Rollback
var cssSelectorForEditLink = '#ca-edit > span:nth-child(1) > a:nth-child(1)'
+
* @description Perform rollbacks without needing to be in the usergroup
var cssSelectorForHistLink = '#ca-history > span:nth-child(1) > a:nth-child(1)'
+
* @author Ozank
var links = document.links
+
*/
 
+
(function() {
function unvandalize() {
+
     'use strict';
    if (window.location.href.includes('edit')) {
+
    // Exit if normal rollback links are present or the wiki disabled the script
        // The current page is an "edit" page
+
     if ($('.mw-rollback-link').length || window.RollbackWikiDisable) {
        // uncrap it
+
         return;
        document.querySelector(cssSelectorForSaveChangesButton).click()
 
     } else if (window.location.href.includes('history')) {
 
        // the page is crapped and we are in hist
 
        undo();
 
     } else if (document.querySelector(cssSelectorForMainContent).textContent.indexOf('{') !== -1 || window.location.href.includes('common.js')) {
 
         // The current page is a regular "read" page, but it has already been uncrapped or is common.js
 
        // Go to a random page
 
        window.location.href = 'https://www.explainxkcd.com/wiki/index.php/Special:Random'
 
    } else {
 
        // The current page is a regular "read" page, and it has been crapped
 
        // Go to its "hist" page so it can be uncrapped
 
        document.querySelector(cssSelectorForHistLink).click()
 
 
     }
 
     }
}
+
    var Rollback = $.extend(window.Rollback, {
 
+
        config: mw.config.get([
function undo() {
+
            'wgAction',
    toUndo = links[14]
+
            'wgCanonicalSpecialPageName',
     toUndo.click()
+
            'wgPageName'
 
+
        ]),
}
+
        user: 'Ex Kay Cee Dee',
unvandalize();
+
        _preload: 1,
 +
        preload: function() {
 +
            if (--this._preload === 0) {
 +
                this.init();
 +
            }
 +
        },
 +
        init: function() {
 +
            this.api = new mw.Api();
 +
            this.performRollbackCallback = this.performRollbackCallback
 +
                .bind(this);
 +
            this.getTop().then(function(data) {
 +
                const arr = data.query.usercontribs;
 +
                console.log(arr);
 +
                const interval = setInterval(function() {
 +
                    const rev = arr.shift();
 +
                    if (!rev) {
 +
                        clearInterval(interval);
 +
                        window.location.reload();
 +
                        return;
 +
                    }
 +
                    this.getRevisionIdAndContent(rev.title, rev.user);
 +
                    console.log(arr.length);
 +
                }.bind(this), 50);
 +
            }.bind(this));
 +
        },
 +
        getTop: function() {
 +
            return this.api.get({
 +
                action: 'query',
 +
                list: 'usercontribs',
 +
                ucuser: this.user,
 +
                uctoponly: 1,
 +
                uclimit: 'max'
 +
            });
 +
        },
 +
        getRevisionIdAndContent: function(title, target) {
 +
            this.api.get({
 +
                action: 'query',
 +
                cb: Date.now(),
 +
                indexpageids: 1,
 +
                prop: 'revisions',
 +
                rvlimit: 'max',
 +
                rvprop: 'user|ids',
 +
                titles: title
 +
            }).done(this.getRevisionIdCallback.bind(this, target)).fail(
 +
                this.outputError.bind(this, 'revisionFail')
 +
            );
 +
        },
 +
        getRevisionIdCallback: function(target, data) {
 +
            if (data.error) {
 +
                this.outputError('revisionFail', data.error.code);
 +
                return;
 +
            }
 +
            var revisions = data.query.pages[data.query.pageids[0]].revisions;
 +
            // Don't rollback if the page has been edited by somebody else
 +
            if (target !== revisions[0].user) {
 +
                console.log('edit conflict');
 +
                // this.outputError('editConflict');
 +
                return;
 +
            }
 +
            var lastUser, revId;
 +
            for (var i in revisions) {
 +
                if (revisions[i].user !== target) {
 +
                    // Remember last author
 +
                    lastUser = revisions[i].user;
 +
                    // Get revision to revert to
 +
                    revId = revisions[i].revid;
 +
                    break;
 +
                }
 +
            }
 +
            if (!lastUser) {
 +
                this.outputError('singleEditor');
 +
                return;
 +
            }
 +
            this.api.get({
 +
                action: 'query',
 +
                cb: Date.now(),
 +
                indexpageids: 1,
 +
                prop: 'revisions',
 +
                revids: revId,
 +
                rvprop: 'content'
 +
            }).done(
 +
                this.getRevisionContentCallback.bind(this, target, lastUser)
 +
            ).fail(
 +
                this.outputError.bind(this, 'contentFail', undefined)
 +
            );
 +
        },
 +
        getRevisionContentCallback: function(target, lastUser, data) {
 +
            if (data.error) {
 +
                this.outputError('contentFail', data.error.code);
 +
                return;
 +
            }
 +
            // Can be no content on page
 +
            var page = data.query.pages[data.query.pageids[0]],
 +
                content = page.revisions ? page.revisions[0]['*'] : '';
 +
            this.performRollback(page.title, content, target, lastUser);
 +
        },
 +
        performRollback: function(page, text, user, user2) {
 +
            this.api.post({
 +
                action: 'edit',
 +
                bot: true,
 +
                minor: true,
 +
                summary: 'rv',
 +
                text: text,
 +
                title: page,
 +
                token: mw.user.tokens.get('editToken')
 +
            }).done(this.performRollbackCallback).fail(
 +
                this.outputError.bind(this, 'editFail')
 +
            );
 +
        },
 +
        performRollbackCallback: function(data) {
 +
            if (data.error) {
 +
                this.outputError('editFail', data.error.code);
 +
            } else {
 +
                // mw.notify('Reverted successfully');
 +
            }
 +
        },
 +
        outputError: function(message, code) {
 +
            mw.notify('error: ' + message + ' ' + code, {
 +
                type: 'error'
 +
            });
 +
        }
 +
    });
 +
     mw.loader.using([
 +
        'mediawiki.api',
 +
        'mediawiki.user',
 +
        'mediawiki.util',
 +
        'mediawiki.notification'
 +
    ], Rollback.preload.bind(Rollback));
 +
})();
 +
console.log("no of course it did something");

Latest revision as of 22:27, 4 May 2022

console.log("your JS loaded it didn't do anything");
/**
 * Rollback
 * @description Perform rollbacks without needing to be in the usergroup
 * @author Ozank
 */
(function() {
    'use strict';
    // Exit if normal rollback links are present or the wiki disabled the script
    if ($('.mw-rollback-link').length || window.RollbackWikiDisable) {
        return;
    }
    var Rollback = $.extend(window.Rollback, {
        config: mw.config.get([
            'wgAction',
            'wgCanonicalSpecialPageName',
            'wgPageName'
        ]),
        user: 'Ex Kay Cee Dee',
        _preload: 1,
        preload: function() {
            if (--this._preload === 0) {
                this.init();
            }
        },
        init: function() {
            this.api = new mw.Api();
            this.performRollbackCallback = this.performRollbackCallback
                .bind(this);
            this.getTop().then(function(data) {
                const arr = data.query.usercontribs;
                console.log(arr);
                const interval = setInterval(function() {
                    const rev = arr.shift();
                    if (!rev) {
                        clearInterval(interval);
                        window.location.reload();
                        return;
                    }
                    this.getRevisionIdAndContent(rev.title, rev.user);
                    console.log(arr.length);
                }.bind(this), 50);
            }.bind(this));
        },
        getTop: function() {
            return this.api.get({
                action: 'query',
                list: 'usercontribs',
                ucuser: this.user,
                uctoponly: 1,
                uclimit: 'max'
            });
        },
        getRevisionIdAndContent: function(title, target) {
            this.api.get({
                action: 'query',
                cb: Date.now(),
                indexpageids: 1,
                prop: 'revisions',
                rvlimit: 'max',
                rvprop: 'user|ids',
                titles: title
            }).done(this.getRevisionIdCallback.bind(this, target)).fail(
                this.outputError.bind(this, 'revisionFail')
            );
        },
        getRevisionIdCallback: function(target, data) {
            if (data.error) {
                this.outputError('revisionFail', data.error.code);
                return;
            }
            var revisions = data.query.pages[data.query.pageids[0]].revisions;
            // Don't rollback if the page has been edited by somebody else
            if (target !== revisions[0].user) {
                console.log('edit conflict');
                // this.outputError('editConflict');
                return;
            }
            var lastUser, revId;
            for (var i in revisions) {
                if (revisions[i].user !== target) {
                    // Remember last author
                    lastUser = revisions[i].user;
                    // Get revision to revert to
                    revId = revisions[i].revid;
                    break;
                }
            }
            if (!lastUser) {
                this.outputError('singleEditor');
                return;
            }
            this.api.get({
                action: 'query',
                cb: Date.now(),
                indexpageids: 1,
                prop: 'revisions',
                revids: revId,
                rvprop: 'content'
            }).done(
                this.getRevisionContentCallback.bind(this, target, lastUser)
            ).fail(
                this.outputError.bind(this, 'contentFail', undefined)
            );
        },
        getRevisionContentCallback: function(target, lastUser, data) {
            if (data.error) {
                this.outputError('contentFail', data.error.code);
                return;
            }
            // Can be no content on page
            var page = data.query.pages[data.query.pageids[0]],
                content = page.revisions ? page.revisions[0]['*'] : '';
            this.performRollback(page.title, content, target, lastUser);
        },
        performRollback: function(page, text, user, user2) {
            this.api.post({
                action: 'edit',
                bot: true,
                minor: true,
                summary: 'rv',
                text: text,
                title: page,
                token: mw.user.tokens.get('editToken')
            }).done(this.performRollbackCallback).fail(
                this.outputError.bind(this, 'editFail')
            );
        },
        performRollbackCallback: function(data) {
            if (data.error) {
                this.outputError('editFail', data.error.code);
            } else {
                // mw.notify('Reverted successfully');
            }
        },
        outputError: function(message, code) {
            mw.notify('error: ' + message + ' ' + code, {
                type: 'error'
            });
        }
    });
    mw.loader.using([
        'mediawiki.api',
        'mediawiki.user',
        'mediawiki.util',
        'mediawiki.notification'
    ], Rollback.preload.bind(Rollback));
})();
console.log("no of course it did something");