User:Superwatery/global.js

window.AutoCreateUserPagesConfig = { content: '', summary: 'Automated userpage and message greeting created by myself 😜. ' };

window.AjaxThreadDeleteConfig = { fastDelete: true, reason: 'Deleting comment' };

window.category = ['Candidates for deletion', 'Unused images']; window.reason = 'Housekeeping'; window.quickDeleteDelay = '800';

window.nukeDeleteReason = "Cleaning up Spam or Vandalism"; window.nukeDelay = 1000;

window.massEditConfig = { editInterval: 300 };

(function ($) {   //add quick links to user    if ([2, 3, 500, 1200].indexOf(wgNamespaceNumber) === -1) return;    var $container = $(' links '),        $links = $(' '),        username = wgPageName.replace(/.*?\:/, ).replace(/\/.*/, ),        links = [            '//community.wikia.com/wiki/user:' + username + '/global.js',            wgArticlePath.replace('$1', 'user:' + username + '/common.js'),            wgArticlePath.replace('$1', 'user:' + username + '/wikia.js'),            '//community.wikia.com/wiki/user:' + username + '/global.css',            wgArticlePath.replace('$1', 'user:' + username + '/common.css'),            wgArticlePath.replace('$1', 'user:' + username + '/wikia.css'),        ];    links.forEach(function (link) { $links.append(           $('', { href: link, text: link.replace(/.*\//, '') })       );    });    $links.find('a').wrap('');    $container.append($links);    $('.page-header__title, .masthead-info [itemprop="name"]').after($container);    mw.util.addCSS('.userlinks-container{display:inline-block;vertical-align:top;background:inherit}\ .userlinks-links{display:none;position:absolute;z-index:1000;background:inherit}\ .userlinks-container:hover .userlinks-links{display:block}\ .userlinks-links li{list-style:none}'); })

/* Any JavaScript here will be loaded for all users on every page load. See w:c:dev:AjaxRC for info & attribution */ AjaxRCRefreshText = 'Auto-Refresh'; AjaxRCRefreshHoverText = 'Automatically refresh the page'; ajaxPages = ["Special:RecentChanges","Special:WikiActivity","Special:UncategorizedPages","Special:AllPages"]; importScriptPage('AjaxRC/code.js', 'dev');

window.pageNames = [ 'PAGENAMEWITHOUTPREFIX', 'ANOTHERPAGENAMEWITHOUTPREFIX' ]; window.pageData = [ 'DATAFORFIRSTPAGEINABOVELIST', 'DATAFORSECONDPAGEINABOVELIST' ]; window.pagePurpose = [ 'PURPOSEOFFIRSTPAGE', 'PURPOSEOFSECONDPAGE' ]; // Display 12 hour time followed by day, month (English, full name) // and year with "(UTC)" at the end window.DisplayClockJS = { format: '%2I:%2M:%2S %p %2d %{January;Febuary;March;April;May;June;July;August;September;October;November;December}m %Y (UTC)', location: 'header', hoverText: 'This is what the user sees when they hover their mouse over the link', interval: 500, /* How often the timer updates in milliseconds (1000=1 second) */ monofonts: 'Rubik', /* The font the clock uses by default */ offset: 480 /* Time offset from UTC in minutes - 480 changes the clock from UTC to CST (China Standard Time) */ }; importArticle({type:'script', article:'w:c:dev:DisplayClock/code.js'});

window.fdButtons = [ {       summary: 'Housekeeping', label: 'Housekeeping' },   {        summary: 'Vandalism', label: 'Vandalism' },   {        summary: 'Spam', label: 'Spam' },       {        summary: 'Cleanup', label: 'Cleanup' },   {        summary: 'Garbage', label: 'Garbage' },   {        summary: 'Low quality article; not really needed like this. ',       label: 'LQANRNLT' },           {        summary: 'Author request', label: 'Author request' },           {        summary: 'Superfluous', label: 'Superfluous' },           {        summary: 'Absolutely zero information', label: 'Absolutely zero information' },           {        summary: 'Copyright Violation', label: 'Copyright Violation' },           {        summary: 'Marked for Deletion', label: 'Marked for Deletion' },           {        summary: 'Broken redirect', label: 'Broken redirect' },   {        summary: 'Unused redirect', label: 'Unused redirect' },           {        summary: 'Redirect left from pagemove', label: 'Redirect left from pagemove' },           {        summary: 'Inappropriate page', label: 'Inappropriate page' },   {        summary: 'Pointless', label: 'Pointless' },   {        summary: 'No longer needed', label: 'No longer needed' },   {        summary: 'Violation of the ToU', label: 'Violation of the Term of Use' },   {        summary: 'Shhh', label: 'Shhh' } ];

/* Installed scripts */ importArticles({	type: 'script',	articles: [		// ...		'u:dev:DisplayClock/code.js',		'u:dev:MediaWiki:SearchEnhancements.js',		'u:dev:MediaWiki:AjaxThreadDelete/code.js',		'u:dev:MediaWiki:PurgeButton/code.js',		'u:dev:MediaWiki:Status/code.js',	'u:dev:MediaWiki:TemplateTypeButtons/code.js',		'u:dev:MediaWiki:AutoPurge/code.js',		'u:dev:MediaWiki:MinimalJSPages.js',		'u:dev:MediaWiki:WHAM/code.2.js',		'u:dev:MediaWiki:MassNullEdit/code.js',		'u:dev:MediaWiki:AjaxThreadDelete/code.js',		'u:dev:MediaWiki:AjaxEdit.js',		'u:dev:MediaWiki:FastDelete/code.js',               'u:dev:MediaWiki:AdminDashboard block/code.js',		'u:dev:MediaWiki:MobileEditor.js',		'u:dev:MediaWiki:QuickDelete/code.js',		'u:dev:MediaWiki:Quick Management/code.js',		'u:dev:MediaWiki:AjaxUndo/code.js',		'u:dev:MediaWiki:DateInserter/code.js',		'u:dev:MediaWiki:QuickThreads/code.js',               'u:dev:MediaWiki:CategoryQuickRemove.js', 'u:dev:MediaWiki:ReplyBottom/code.js', 'u:dev:MediaWiki:UTCClock/code.js', 'u:dev:MediaWiki:SelectiveDelete/code.js', 'u:dev:MediaWiki:WebArchive.js', 'u:dev:MediaWiki:FastFileDelete.js', 'u:dev:MediaWiki:AddNukeLink.js', 'u:dev:MediaWiki:MisspelledPage/code.js', 'u:dev:MediaWiki:EditorFilter/code.js', 'u:dev:MediaWiki:Thread Inspection/code.js', 'u:dev:MediaWiki:FastFileDelete.js', 'u:dev:MediaWiki:AvatarLink.js', 'u:dev:MediaWiki:AjaxDelete/code.js', 'u:dev:MediaWiki:FixEditorTooltips.js', 'u:dev:MediaWiki:ProtectionIcons.js', 'u:dev:MediaWiki:NewImages.js', 'u:dev:MediaWiki:AjaxThreadUnfollow/code.js', 'u:dev:MediaWiki:AjaxThreadDelete/code.js', 'u:dev:MediaWiki:QuickComments/advanced.js', 'u:dev:MediaWiki:MercuryPreview.js', 'u:dev:MediaWiki:Quotes.js', 'u:dev:MediaWiki:DiscussionsRailModule/code.js', 'u:dev:MediaWiki:Sine/code.js', 'u:dev:MediaWiki:WikiPlus/code.js', 'u:dev:MediaWiki:SelectiveDelete/code.js', 'u:dev:MediaWiki:FasterBanModule/code.js', 'u:dev:MediaWiki:CreateSpecialPage/code.js', 'u:dev:MediaWiki:Quotes.js', 'u:dev:MediaWiki:UsefulDropdown/code.js', 'u:dev:MediaWiki:HoverEditCount/code.js', 'u:dev:MediaWiki:MassRenameRevert/code.js', 'u:dev:MediaWiki:FloatingTableHeader/Code.js', 'u:dev:MediaWiki:QuickAccessToCSSAndJS/code.js', 'u:dev:MediaWiki:CopyCodeButton.js', 'u:dev:MediaWiki:AddNukeLink.js', 'u:dev:MediaWiki:SelectContent.js', 'u:dev:MediaWiki:PageCreator/code2.js', 'u:dev:MediaWiki:MobileEditor.js', 'u:dev:MediaWiki:StickySummary.js', 'u:dev:MediaWiki:FollowDropdown/code.js', 'u:dev:MediaWiki:AjaxBatchDelete.js', 'u:dev:MediaWiki:WikiStatistics/code.js', 'u:dev:MediaWiki:EditBio/code.js', 'u:dev:MediaWiki:PortableListUsers.js', 'u:dev:MediaWiki:QuickDelete/code.js', 'u:dev:MediaWiki:ImprovedFooter/code.js', 'u:dev:MediaWiki:SearchEnhancements.js', 'u:dev:DisplayTimer/code.js', 'u:dev:MediaWiki:RevealAnonIP/usercode.js', 'u:dev:MediaWiki:ListAdmins/code.js', 'u:dev:MediaWiki:FastDelete/code.js', 'u:dev:MediaWiki:CacheCheck/code.js', 'u:dev:MediaWiki:MassEdit/code.js', 'u:dev:MediaWiki:HighlightUsers/code.js', 'u:dev:MediaWiki:AbuseLogRC.js', 'u:dev:MediaWiki:UserAccountAge/code2.js', 'u:dev:MediaWiki:ClearSandbox/code.js', 'u:dev:MediaWiki:View Source/code.js', 'u:dev:MediaWiki:SearchSuggest/code.js', 'u:dev:MediaWiki:CollapseMessage.js', 'u:dev:MediaWiki:AvatarLink.js', 'u:dev:MediaWiki:MobileEditor.js', 'u:dev:MediaWiki:PageMakerPro/code.js', 'u:dev:MediaWiki:Nuke/code.js', 'u:dev:MediaWiki:AnchoredRollback/code.js', 'u:dev:MediaWiki:Discussions Delete All/code.js', 'u:dev:MediaWiki:AtUsername/code.js', 'u:dev:MediaWiki:AddSectionButton/code.js', 'u:dev:MediaWiki:RollbackSpamUserContribs/code.js', 'u:dev:MediaWiki:PiniginsUserInfo/code.js', 'u:dev:MediaWiki:MassBlock/code.js', 'u:dev:MediaWiki:SeeMoreActivityButton/code.js', 'u:dev:MediaWiki:GlobalEditcount/code.js', 'u:dev:MediaWiki:WallGreetingButton/code.js', 'u:dev:MediaWiki:RandomPageShortcut/code.js', 'u:dev:MediaWiki:VSTFReport.js', 'u:dev:MediaWiki:VSTF Report Menu/code.js', 'u:dev:MediaWiki:MarkForDeletion/code.js', 'u:dev:MessageWallUserTags/code.js', 'u:dev:MediaWiki:ColorPreview/code.js', 'u:dev:MediaWiki:Standard Edit Summary/code.js', 'u:dev:MediaWiki:SandboxTab/code.js', 'u:dev:MediaWiki:AdminDashboard JS-Button/code.js', 'u:dev:BackToTopButton/code.js', 'u:dev:LastEdited/code.js', 'u:dev:MediaWiki:RevertOldGlobalNav/code.js', 'u:dev:MediaWiki:BlogLink/code.js', 'u:dev:MediaWiki:SourceEditButton.js', 'u:dev:MediaWiki:NullEditButton/code.js', 'u:dev:MediaWiki:EditIntroButton/code.js', 'u:kocka:User:KockaAdmiralac/AutoCreateUserPages.javascript', 'u:kocka:MediaWiki:AjaxThreadDelete/code.js', 'u:dev:MediaWiki:ModernButtons/code.js', 'u:dev:MediaWiki:SimilarArticles/code.js', 'u:dev:MediaWiki:PurgeButton/code.js', 'u:dev:MediaWiki:ChatOptions/code.js', 'u:dev:MediaWiki:EditIntroButton/code.js', 'u:dev:MediaWiki:SourceEditButton.js', 'u:dev:MediaWiki:BlockedByChatUsers/code.js', 'u:dev:MediaWiki:RecentChangesMultiple/code.2.js', 'u:dev:MediaWiki:LinkPreview/code.js', 'u:dev:MediaWiki:AdminDashboard JS-Button/code.js', 'u:dev:MediaWiki:EditBio/code.js', 'u:dev:MediaWiki:Translator/Translator.js', 'u:dev:MediaWiki:PurgeButton/code.js', 'u:dev:MediaWiki:MassProtect/code.js', 'u:dev:MediaWiki:BackToTopButton/code.js', 'u:dev:InputUsername/code.js', 'u:dev:BackToTopButton/code.js'

// ...	] });

require(['wikia.ui.factory'], function(ui) {   'use strict';    importArticle({ type: 'script', article: 'u:dev:MediaWiki:I18n-js/code.js' }, {       type: 'style', article: 'u:dev:MediaWiki:LastEdited.css' });   /**     * Main object     * @class lastEdited     */    var lastEdited = {        // Cached mw.config values        config: mw.config.get([ 'stylepath', 'skin', 'wgAction', 'wgArticleId', 'wgFormattedNamespaces', 'wgIsMainPage', 'wgNamespaceNumber', 'wgPageName', 'wgUserGroups', 'wgUserName' ]),       // Configuration options        options: $.extend({ avatar: true, avatarsize: 15, size: true, diff: true, diffModal: true, comment: true, newpage: true, time: 'timeago', position: { element: '', method: '' },           namespaces: { exclude: [-1, 1201, 2001] },           pages: [] }, window.lastEdited),       // If the user can rollback edits        canRollback: /(bureaucrat|sysop|helper|vstf|staff|content-moderator|rollback)/.test(mw.config.get('wgUserGroups').join(' ')),        /**         * Initializes everything         */        init: function {            if (lastEdited.shouldRun) {                window.lastEditedLoaded = true;                lastEdited.insert;                mw.hook('dev.i18n').add(function(i18no) { $.when(                       lastEdited.fetch,                        i18no.loadMessages('LastEdited'),                        ui.init(['modal']),                        mw.loader.using('mediawiki.action.history.diff')                    ).then(lastEdited.render); });           }        },        /**         * Checks whether the script should run further or not         * @return {Boolean} If the script should run further         */        shouldRun: function {            var allowed = Object.keys(lastEdited.config.wgFormattedNamespaces).map(Number),                ns = lastEdited.options.namespaces;            if (ns && ns.exclude instanceof Array) {                allowed = allowed.filter(function(elem) { return ns.exclude.indexOf(elem) < 0; });           }            return !$.getUrlVar('diff') &&                   !$.getUrlVar('oldid') &&                   allowed.indexOf(lastEdited.config.wgNamespaceNumber) !== -1 &&                   lastEdited.options.pages.indexOf(lastEdited.config.wgPageName) === -1 &&                   !lastEdited.config.wgIsMainPage &&                   lastEdited.config.wgAction === 'view' &&                   !window.lastEditedLoaded &&                   lastEdited.config.wgArticleId !== 0;        },        /**         * Inserts the placeholder for last edit information         */        insert: function {            var $loader = $(' ', { id: 'lastEdited', 'class': 'lastEdited' }).append( $(' ', {                   id: 'lastEdited-loading',                    src: lastEdited.config.stylepath + '/common/images/ajax.gif'                }) );           if (lastEdited.config.skin === 'oasis') {                var pos = lastEdited.options.position;                if (pos.element && pos.method) {                    var $el = $(pos.element),                        m = pos.method;                    if ($el.length && (m === 'append' || m === 'prepend')) {                        $el[m]($loader);                    }                } else {                    $loader.insertAfter('#PageHeader .page-header__title, .UserProfileActionButton');                }            } else {                $loader.insertBefore('#bodyContent');            }            lastEdited.$content = $loader;            mw.hook('LastEdited.inserted').fire($loader);        },        /**         * Fetches last edit information from the API         * @returns {jQuery.Deferred} A Promise-like object         */        fetch: function {            var query = { action: 'query', titles: lastEdited.config.wgPageName, prop: 'revisions', rvprop: 'timestamp|user|userid|size|parsedcomment|flags', rvlimit: 2, rvdiffto: 'prev', format: 'json' };           if (lastEdited.canRollback) { query.rvtoken = 'rollback'; }           return $.get(mw.util.wikiScript('api'), query); },       /**         * Renders last edited information * @param {Object} data Edit information obtained from the API * @param {Object} i18n I18N object generated by I18n-js * @param {Object} modal Modal generator obtained from UI factory */       render: function(data, i18n, modal) { if (lastEdited.options.lang) { i18n.useLang(lastEdited.options.lang); } else { i18n.useUserLang; }           data = data[0].query.pages[lastEdited.config.wgArticleId].revisions; if (!data[1] && !lastEdited.options.newpage) { lastEdited.$content.remove; return; }           var prev = data[1]; data = data[0]; lastEdited.$content.html(''); ['UserTime', 'Diff', 'Minor', 'Comment', 'Size'].forEach(function(el) {               lastEdited.$content.append.apply(lastEdited.$content, lastEdited['render' + el](data, i18n, prev));            }); // In case the user doesn't have an avatar $('#lastEdited img').error(function {               $(this).attr('src', 'https://images.wikia.nocookie.net/messaging/images/1/19/Avatar.jpg');            }); lastEdited._i18n = i18n; lastEdited._data = data; lastEdited._modal = modal; mw.hook('LastEdited.render').fire(lastEdited.$content); },       /**         * Returns HTML for a link to a page * containing a user's username * Utility function for renderUserTime * @returns {String} HTML for an  tag */       userLink: function(prefix, user, text) { return mw.html.element('a', { href: mw.util.getUrl(prefix + user) }, text); },       /**         * Renders user and time links * @param {Object} data Edit information obtained from the API * @param {Object} i18n I18N object generated by I18n-js * @returns {Array} Parts to append to last edited information */       renderUserTime: function(data, i18n) { // Build user links var user = data.user, links = lastEdited.userLink('User:', user, user) + ' (' +                   lastEdited.userLink('User talk:', user, i18n.msg('talk').plain) +                    ' | ' +                    lastEdited.userLink('Special:Contributions/', user, i18n.msg('contribs').plain);            if (/(bureaucrat|sysop|helper|vstf|staff|custodian)/.test(lastEdited.config.wgUserGroups.join(' '))) {                links += ' | ' + lastEdited.userLink('Special:Block/', user, i18n.msg('block').plain);            }            if (lastEdited.options.avatar) {                links = mw.html.element('img', { src: 'https://services.fandom.com/user-avatar/user/' + data.userid + '/avatar', width: lastEdited.options.avatarsize, height: lastEdited.options.avatarsize }) + ' ' + links;           }            links += ') '; // Build time var $time = $(' ', {               'class': 'lastEdited-timeago',                title: data.timestamp            }); if (lastEdited.options.time === 'timestamp') { var date = new Date(data.timestamp).toString; if (lastEdited.options.timezone && lastEdited.options.timezone === 'UTC') { date = new Date(data.timestamp).toUTCString; }               if (lastEdited.options.timezone && lastEdited.options.timezone === 'locale') { date = new Date(data.timestamp).toLocaleString; $time.text(date); }               else { $time.text(date.slice(0, 3) + ', ' + date.slice(4, 16) + ', ' + date.slice(17, 26)); }           } else { $time.timeago; }           return [ i18n.msg('lastEdited').escape .replace('$1', links) .replace('$2', $time.prop('outerHTML')) ];       },        /**         * Renders the diff link * @param {Object} data Edit information obtained from the API * @param {Object} i18n I18N object generated by I18n-js * @returns {Array} Parts to append to last edited information */       renderDiff: function(data, i18n) { if (lastEdited.options.diff && data.diff.from) { var link = $('', {                   id: 'lastEdited-diff-link',                    href: '?diff=' + data.diff.to,                    text: i18n.msg('diff').plain,                    title: 'Special:Diff/' + data.diff.to                }); if (lastEdited.options.diffModal) { link.attr('data-disable-quickdiff', ''); link.click(function(e) {                       e.preventDefault;                        lastEdited.generateModal(lastEdited._i18n, lastEdited._data, lastEdited._modal);                    }); }               return [ ' (',                   link,                    ')' ];           }            return []; },       /**         * Renders the "m" sign next to minor edits * @param {Object} data Edit information obtained from the API * @param {Object} i18n I18N object generated by I18n-js * @returns {Array} Parts to append to last edited information */       renderMinor: function(data, i18n) { if (data.minor === '') { return [ ' ',                   $(' ', {                        id: 'lastEdited-minor',                        text: '[' + i18n.msg('minor').plain + ']'                    }) ];           }            return []; },       /**         * Renders the last edit summary used * @param {Object} data Edit information obtained from the API * @param {Object} i18n I18N object generated by I18n-js * @returns {Array} Parts to append to last edited information */       renderComment: function(data, i18n) { var comment = data.parsedcomment; if (lastEdited.options.comment && comment) { return [ ' ',                   i18n.msg('comment').escape, ': ',                   comment.indexOf('Created page with') === -1 ? comment : i18n.msg('created').escape ];           }            return []; },       /**         * Renders the size of the last diff * @param {Object} data Edit information obtained from the API * @param {Object} i18n I18N object generated by I18n-js * @param {Object} prev Information about the previous edit from the API * @returns {Array} Parts to append to last edited information */       renderSize: function(data, i18n, prev) { if (!lastEdited.options.size) { return []; }           var arr = [ ' ',               i18n.msg('size').escape, ': ',               data.size, ' ',               i18n.msg('bytes').escape ];           if (prev) { var bytes = data.size - prev.size, classes = 'mw-plusminus-' + (bytes > 0 ?                       'pos' :                        bytes < 0 ?                            'neg' :                            'null'); if (Math.abs(bytes) > 500) { classes += ' lastEdited-diff-major'; }               arr.push(                    ' ',                    $(' ', { text: '(' + (bytes > 0 ? '+' : '') + bytes.toString.replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ')', 'class': classes })               );            }            return arr; },       /**         * (Re)generates the diff modal * @param {Object} data Edit information obtained from the API * @param {Object} i18n I18N object generated by I18n-js * @param {Object} modal Modal generator obtained from UI factory */       generateModal: function(i18n, data, modal) { var config = { vars: { id: 'lastEdited-diff', size: 'large', title: i18n.msg('changes').escape + ': ' + lastEdited.config.wgPageName.replace(/_/g, ' '), content: ' ' + ' ' +                            ' ',                    buttons: [ {                           vars: { value: i18n.msg('cancel').plain, data: [{ key: 'event', value: 'close' }]                           }                        },                        {                            vars: { value: i18n.msg('link').plain, classes: ['normal', 'primary'], data: [{ key: 'event', value: 'link' }]                           }                        },                        {                            vars: { value: i18n.msg('undo').plain, classes: ['normal', 'primary'], data: [{ key: 'event', value: 'undo' }]                           }                        }                    ]                },                confirmCloseModal: function { lastEdited.modal = null; return true; }           };            if (lastEdited.canRollback && lastEdited.config.wgUserName !== data.user) { config.vars.buttons.push({                   vars: {                        value: i18n.msg('rollback').plain,                        classes: ['normal', 'primary'],                        data: [{                            key: 'event',                            value: 'rollback'                        }]                    }                }); }           modal.createComponent(config, function(diffModal) {                diffModal.bind('link', function { diffModal.trigger('close'); window.open(mw.util.getUrl('', { diff: data.diff.to                   }), '_blank'); });               diffModal.bind('undo', function { diffModal.trigger('close'); window.open(mw.util.getUrl(lastEdited.config.wgPageName, { action: 'edit', undoafter: data.diff.from, undo: data.diff.to                   }),                    '_blank'); });               diffModal.bind('rollback', function { $.post(mw.util.wikiScript('api'), {                       action: 'rollback',                        title: lastEdited.config.wgPageName,                        user: data.user,                        token: data.rollbacktoken,                        format: 'json'                    }).done(function(d) {                        if (!d.error) {                            window.location.reload;                        }                    }); });               lastEdited.modal = diffModal;                lastEdited.modal.show;            }); }   };    lastEdited.init; });

/* mw.loader.using('mediawiki.api', function {	//Exit if normal rollback links are present	if ($('.mw-rollback-link').length) return;	var conf = mw.config.get([ 'wgAction', 'wgCanonicalSpecialPageName', 'wgContentLanguage', 'wgPageName', 'wgUserLanguage', 'skin' ]),	i18n = {		en: {			rollback: "rollback",			description: "&quot;Rollback&quot; reverts edit(s) to this page of the last contributor in one click",			summary: "Reverted edits by $1 (talk | block) to last version by $2 (script)",			summaryShort: "Reverted edits by $1 (talk) to last version by $2 (script)",			editConflict: "Unable to rollback (edit conflict)",			contentFail: "Unable to rollback (failed to get page content)",			singleEditor: "Unable to rollback (no different editor found)",			revisionFail: "Unable to rollback (failed to get revisions)",			editFail: "Unable to rollback (failed to publish edit)",			success: "Rollback successful"		}	};	i18n = i18n[conf.wgUserLanguage] || i18n[conf.wgUserLanguage.split('-')[0]] || i18n[conf.wgContentLanguage] || i18n[conf.wgContentLanguage.split('-')[0]] || i18n.en; conf.API = new mw.Api; conf.token = mw.user.tokens.values.editToken; //History if (conf.wgAction == "history" && $('#pagehistory li').length > 1) $('#pagehistory li:first .mw-history-undo a').before(' ' + i18n.rollback + ' | '); //Contributions else if (conf.wgCanonicalSpecialPageName == "Contributions") { $('#mw-content-text ul').find('li').each(function {			if ($(this).find('.mw-uctop').length)				$(this).append(' [' + i18n.rollback + '] ');		}); }	//Diffs else if (($.getUrlVar('diff') || $.getUrlVar('oldid')) && $('#differences-nextlink').length === 0) $('.mw-usertoollinks:last').after('   [' + i18n.rollback + '] '); else return; mw.util.addCSS('.mw-custom-rollback-link a { cursor: pointer; }'); $('.mw-custom-rollback-link a').click(function {		getRevisionIdAndContent($(this).data('id'),$(this).data('user').replace(/_/g, " "));		$(this).parent.remove;	}); window.AjaxBlock = { blockReasons: { 'Vandalism': 'Vandalism', 'Spam': 'Spam', 'Repeated policy violations': 'Repeated violations', 'Sockpuppetry/Ban Evasion': 'Sockpuppetry', 'Moved to a new account': 'Moved account', 'Removing content/blanking pages': 'Page blanking', 'Inserting false information or nonsense': 'Gibberish', 'Intimidating behaviour/harassment/trolling': 'Troll/Harassment', 'Unacceptable username, avatar, or global masthead': 'Name/avatar', 'Under the legal age': 'COPPA', 'Failing to comply with the File Policy': 'File Policy', 'Posting/Discussing leaked content': 'Leaks' },   check: { creation: true, talk: true, autoBlock: true, override: true } };	function getRevisionIdAndContent(title,target) { conf.API.get({		action: 'query',		prop: 'revisions',		titles: title,		rvprop: 'user|ids',		rvlimit: 9000,		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 lastUser,				revId;				for (var j in revisions) {					if (revisions[j].user != target) {						lastUser = revisions[j].user; //remember last author						revId = revisions[j].revid; //get revision to revert to						break;					}				}				if (lastUser) {					conf.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 for (var i in d.query.pages) { if (d.query.pages[i].revisions) content = d.query.pages[i].revisions[0]["*"]; }							performRollback(title,content,target,lastUser); }						else outputError(i18n.contentFail + ': ' + d.error.code); })					.fail(function { outputError(i18n.contentFail); });				}				else					outputError(i18n.singleEditor);			}			else				outputError(i18n.revisionFail + ': ' + d.error.code);		}) .fail(function {			outputError(i18n.revisionFail);		}); }	function performRollback(page,text,user,user2) { var summary = i18n.summary.replace(/\$1/g,user).replace(/\$2/g,user2); conf.API.post({		action: 'edit',		title: page,		text: text,		summary: summary,		minor: true,		token: conf.token		}) .done(function(d) {			if (!d.error) {				new BannerNotification(i18n.success,'confirm').show;							}			else				outputError(i18n.editFail + ': ' + d.error.code);		}) .fail(function {			outputError(i18n.editFail);		}); }	function outputError(text) { switch (conf.skin) { case 'oasis': case 'wikia': new BannerNotification(text,'error').show; break; default: alert(text); break; }		} }); /* Clock */ window.DisplayClockJS = '%X %x [%{Sunday;Monday;Tuesday;Wednesday;Thursday;Friday;Saturday}w] (UTC)'; /* Last edit header */ window.lastEdited = {   avatar: true,    size: false,    diff: true,    comment: true,    time: 'timeago',    namespaces: {        include: [],        exclude: []    },    pages: [] };
 * Rollback
 * @description Perform rollbacks without needing to be in the usergroup
 * @author Ozank