User:Superwatery/global.js

/*The back to top button hides in the tollbar, so I wanted to use the arrow that appears in the bottom right hand corner*/ window.BackToTopModern = true; window.BackToTopArrow = true; window.BackToTopSpeed = 300; window.BackToTopStart = 550; /*It's generally better to create a template for its respective namespace so that my message would make sense*/

window.AutoCreateUserPagesConfig = { content: { 2: ,       3: ,        1202: ''    },    summary: 'Automatic creation' };

// Chat link in community header mw.loader.using('mediawiki.util').then(function {   if ( !$('.wds-community-header').exists || mw.loader.getState('ext.Chat2') === null ) {      return;    }    $('.wds-community-header .wds-tabs__tab')        .has('#wds-icons-explore-tiny')        .find('.wds-list')    .append( $('', {           append: $('', { 'href': mw.util.wikiGetlink('Special:Chat'), text: 'Chat' })       })    ); });

/* I probably dob't want to use the revert button in the VSTF Wiki since accidents occurs, so I decided to disabl it, instead. Ajax Undo will suffice at the moment*/ if (wgSiteName === 'VSTF Wiki') window.RollbackWikiDisable = true;

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

var MessageBlock = { title : 'Block', message : 'You have been blocked.' };

$.getScript("//dev.wikia.com/index.php?title=MediaWiki:DiscussionsBlock.js&action=raw&ctype=text/javascript");

window.WHAMBotMe = true; window.WHAMBotReason = "Cleaning"; window.WHAMDelay = 100; window.WHAMDeleteReason = "Deleting/Cleaning Spam/Vandalism"; window.WHAMBlockReason = "Abusing multiple accounts/trolling/vandalism/spam"; /*I don't have the time to do all of this nonsense in my mobile so AjaxBlock saves the time*/ window.AjaxBlock = { expiryTimes: { '2 hours': '2 hours', '1 day': 'one day', '1 week': 'a week', '2 months': '2m', 'never': 'Never' },   blockReasons: { 'Vandalism': 'Vandalism', 'Spam': 'Spam', 'Under the legal age': 'COPPA', 'Removing information/blanking articles': 'Blanking', 'Failing to comply with the File Policy': 'File policy', 'Inserting false information': 'Inserting false information', 'Removing content from pages': 'Removing content from pages', 'Inserting nonsense/gibberish into page(s)': 'Inserting nonsense/gibberish into page(s)', 'Intimidating behavior/harassment': 'Intimidating behavior/harassment', 'Uploading inappropriate images/videos': 'Uploading inappropriate images/videos', 'Spamming comments/forum threads': 'Spamming comments/forum threads', 'ToU violation':"Violation of Fandom's Terms of Use", 'Abusing multiple accounts': 'Multiaccounts' },   check: { talk: true, autoBlock: true, override: true } }; /*Again, same here*/ QuickCommentsreason = "Adding unacceptable comments"; QuickCommentsdeletereason = "Inappropriate comments"; QuickCommentsduration = "2 weeks";

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

window.nukeDeleteReason = "Deleting 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}'); }) /*Quote configuration*/

window.nQuoteSettings = { quoteStyle: 'border-width:3px;border-style:ridge' };

window.ajaxPages = ["Some Frequently Updated Page"]; window.ajaxSpecialPages = ["Recentchanges", "WikiActivity", "Watchlist", "Log", "Contributions"]; window.ajaxIndicator = 'https://images.wikia.nocookie.net/software/images/a/a9/Indicator.gif'; window.ajaxRefresh = 12000; $.extend(true, window, {dev: {i18n: {overrides: {AjaxRC: {   'ajaxrc-refresh-text': 'AJAX',    'ajaxrc-refresh-hover': 'Enable page auto-refresh', }}}}});

/* 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.globalNavButtons = [ // Debug // VSTF {   text: 'VSTF', url: '//vstf.fandom.com/wiki/Special:Recentchanges', isMain: true, whoIsMain: false, shortName: 'v' }, { text: 'Spam', url: '//vstf.fandom.com/wiki/Report:Spam', isMain: false, whoIsMain: 'v', shortName: 'v-s' }, {   text: 'Vandalism', url: '//vstf.fandom.com/wiki/Report:Vandalism', isMain: false, whoIsMain: 'v', shortName: 'v-v' }, {   text: 'Profiles', url: '//vstf.fandom.com/wiki/Report:User_profile_headers', isMain: false, whoIsMain: 'v', shortName: 'v-p' }, {   text: 'Wikis', url: '//vstf.fandom.com/wiki/Report:Wiki', isMain: false, whoIsMain: 'v', shortName: 'v-w' }, {   text: 'Biglist', url: '//vstf.fandom.com/wiki/Report:Spam/Biglist', isMain: false, whoIsMain: 'v', shortName: 'v-b' }];

window.fdButtons = [ {       summary: 'Housekeeping', label: 'Housekeeping' },   {        summary: 'Title misspelling', label: 'Title misspelling' },   {        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 (Arya Snow)' },           {        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: 'Oh, rats', label: 'Oh, rats' },   {        summary: 'No longer needed', label: 'No longer needed' },   {        summary: 'Violation of the ToU', label: 'Violation of the Term of Use' },   {        summary: 'Shhh', label: 'Shhh' },   {        summary: 'Abusing HTML', label: 'Abusing HTML' },   {        summary: 'A wiki is not for stuff like these', label: 'A wiki is not for stuff like these' } ];

/* Installed scripts */ importArticles({	type: 'script',	articles: [		// ...		'u:dev:DisplayClock/code.js',		'u:dev:MediaWiki:SearchEnhancements.js',		'u:dev:MediaWiki:ShowUserGroups.js',		'u:dev:MediaWiki:AjaxThreadDelete/code.js',		'u:dev:MediaWiki:ViewRemoved/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:Message/code.js',		'u:dev:MediaWiki:AjaxEdit.js',                'u:dev:MediaWiki:MassRename/code.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:LegacyWall/code.js', 'u:dev:MediaWiki:Quick Management/code.js', 'u:dev:MediaWiki:PreloadFileDescription.js', 'u:dev:MediaWiki:AjaxUndo/code.js', 'u:dev:MediaWiki:AjaxEditSection.js', 'u:dev:MediaWiki:DateInserter/code.js', 'u:dev:MediaWiki:QuickThreads/code.js', 'u:dev:MediaWiki:BotManagement.js', 'u:dev:MediaWiki:!bang/code.js', 'u:dev:MediaWiki:BlogDraft.js', 'u:dev:MediaWiki:StickySummary.js', 'u:dev:MediaWiki:CategoryQuickRemove.js', 'u:dev:MediaWiki:ReplyBottom/code.js', 'u:dev:MediaWiki:CodeLinksDropdown.js', 'u:dev:MediaWiki:MassUserRights/code.js', 'u:dev:MediaWiki:PowerDelete/code.js', 'u:dev:MediaWiki:UTCClock/code.js', 'u:dev:MediaWiki:SelectiveDelete/code.js', 'u:dev:MediaWiki:ChatQuote/code.js', 'u:dev:MediaWiki:WebArchive.js', 'u:dev:MediaWiki:FastFileDelete.js', 'u:dev:MediaWiki:RailWAM/code.js', 'u:dev:MediaWiki:SandboxLink/code.js', 'u:dev:MediaWiki:AjaxRedirect/code.js', 'u:dev:MediaWiki:AddNukeLink.js', 'u:dev:MediaWiki:MassProtect/code.js', 'u:dev:MediaWiki:ChainQuotes.js', 'u:dev:MediaWiki:QuickComments/code.js', 'u:dev:MediaWiki:MisspelledPage/code.js', 'u:dev:MediaWiki:View Raw/code.js', 'u:dev:MediaWiki:EditorFilter/code.js', 'u:dev:MediaWiki:Thread Inspection/code.js', 'u:dev:MediaWiki:Message/code.js', 'u:dev:MediaWiki:UserActivityTab/code.js', 'u:dev:MediaWiki:VisualSpellCheck/code.js', 'u:dev:MediaWiki:Quotes.js', 'u:dev:MediaWiki:ChatErrorExplanation.js', 'u:dev:MediaWiki:AvatarLink.js', 'u:dev:MediaWiki:RecentChangesModule/code.js', 'u:dev:MediaWiki:AjaxDelete/code.js', 'u:dev:MediaWiki:WorkingMoreUsersCount.js', 'u:dev:MediaWiki:GlobalChatJS.js', 'u:dev:MediaWiki:Luapreviewer/code.js', 'u:dev:MediaWiki:JWB/load.js', 'u:dev:MediaWiki:AjaxRename/code.js', 'u:dev:MediaWiki:FixEditorTooltips.js', 'u:dev:MediaWiki:CodeEditor.js', 'u:dev:MediaWiki:ModernLeaderboard.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:MassRenameRevert/code.js', 'u:dev:MediaWiki:MercuryPreview.js', 'u:dev:MediaWiki:DiscussionsRailModule/code.js', 'u:dev:MediaWiki:AjaxBlock/code.js', 'u:dev:MediaWiki:Sine/code.js', 'u:dev:MediaWiki:UserActivityLink.js', 'u:dev:MediaWiki:QuickTitle/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:UsefulDropdown/code.js', 'u:cjrichards-and-applemasterexpert:MediaWiki:Rollback/code.js', 'u:dev:MediaWiki:HoverEditCount/code.js', 'u:dev:MediaWiki:MassRenameRevert/code.js', 'u:dev:MediaWiki:MastheadGender/code.js', 'u:dev:MediaWiki:EntityConvert/code.js', 'u:dev:MediaWiki:FloatingTableHeader/Code.js', 'u:dev:MediaWiki:QuickAccessToCSSAndJS/code.js', 'u:dev:MediaWiki:CopyCodeButton.js', 'u:dev:MediaWiki:AjaxTemplate/code.js', 'u:dev:MediaWiki:NotesModule/code.js', 'u:dev:MediaWiki:SelectContent.js', 'u:dev:MediaWiki:PageCreator/code2.js', 'u:dev:MediaWiki:StickySummary.js', 'u:dev:MediaWiki:AnalyticsShortcut.js', /*Analytics Shortcut for wiki I administrate only*/ 'u:dev:MediaWiki:FollowDropdown/code.js', 'u:dev:MediaWiki:AjaxBatchDelete.js', 'u:dev:MediaWiki:WikiStatistics/code.js', 'u:dev:MediaWiki:MercuryPreview/code.js', 'u:dev:MediaWiki:EditBio/code.js', 'u:dev:MediaWiki:PortableListUsers.js', 'u:dev:MediaWiki:CodeblockLineNumbers/code.js', 'u:dev:MediaWiki:ImprovedFooter/code.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:LinkToDiscussionsProfileIfTheyDontHaveLivePosts/code.js', 'u:dev:MediaWiki:HighlightUsers/code.js', 'u:dev:MediaWiki:AbuseLogRC.js', 'u:dev:MediaWiki:UserAccountAge/code2.js', 'u:dev:MediaWiki:MassCategorization/code.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: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: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:ChatOptions/code.js', 'u:dev:MediaWiki:BlockedByChatUsers/code.js', 'u:dev:MediaWiki:WhatLinksHere/code.js', 'u:dev:MediaWiki:DisableDrafts.js', 'u:dev:MediaWiki:RecentChangesMultiple/code.2.js', 'u:dev:MediaWiki:LinkPreview/code.js', 'u:dev:MediaWiki:Translator/Translator.js', 'u:dev:MediaWiki:BackToTopButton/code.js', 'u:dev:MediaWiki:MassPatrol/code.js', 'u:cjrichards-and-applemasterexpert:MediaWiki:Cancelbutton/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; });

// /* jshint browser:true jquery:true laxbreak:true smarttabs:true */ /* global mediaWiki */ (function(window, $, mw) {   'use strict';    var config = mw.config.get([ 'wgAction', 'wgNamespaceNumber', 'wgTitle', 'wgUserGroups', 'wgUserName' ]), groups = config.wgUserGroups.join(' ');   if (config.wgNamespaceNumber === 1202) {        $('#ca-talk').remove;        return;    } else if ( config.wgTitle.indexOf('/') !== -1 || config.wgNamespaceNumber !== 1200 || !(           config.wgUserName === config.wgTitle ||            /sysop|threadmoderator|vstf|helper|staff/.test(groups)        ) || config.wgAction !== 'edit' || window.WallGreetingButtonLoaded ) {       return;    }    window.WallGreetingButtonLoaded = true;    function init(i18n) {        i18n.useUserLang;        var params = {            url: new mw.Title(config.wgTitle, 1202).getUrl,            wallUrl: new mw.Title(config.wgTitle, 1200).getUrl        };        ['editGreeting', 'history', 'wallHistory', 'delete', 'protect', 'raw'].forEach(function(el) { params[el] = i18n.msg(el).plain; });       $('#WikiaMainContentContainer').prepend(window.Mustache.render(            ' ' +                ' ' +                    ' ' +                        '' +                            '' +                                ' ' +                            ' ' +                            '  ' +                        '' +                        ' ' +                            '' +                                '' + ' ' + ' ' +                           ' ' +                            '' + '' + '</a></li>' + '</a></li>' + (                                       /sysop|content-moderator|vstf|helper|staff/.test(groups) ?                                            '</a></li>' +                                             (window.WallGreetingButtonProtect ? '</a></li>' : ) :                                                                               ) +                                     (                                        window.WallGreetingButtonRaw ?                                            '</a></li>' :                                        ''                                    ) + '</ul>' + ' ' +                       ' ' +                    ' ' +                ' ' +            ' ',            params ));   }    importArticle({        type: 'script',        article: 'u:dev:MediaWiki:I18n-js/code.js'    }); mw.hook('dev.i18n').add(function(i18no) {       $.when( i18no.loadMessages('WallGreetingButton'), mw.loader.using(['mediawiki.Title', 'wikia.mustache']) ).then(init);   }); })(window, jQuery, mediaWiki);

/* 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 + '</a> | '); //Contributions else if (conf.wgCanonicalSpecialPageName == "Contributions") { $('#mw-content-text ul').find('li').each(function {			if ($(this).find('.mw-uctop').length)				$(this).append(' [' + i18n.rollback + '</a>] ');		}); }	//Diffs else if (($.getUrlVar('diff') || $.getUrlVar('oldid')) && $('#differences-nextlink').length === 0) $('.mw-usertoollinks:last').after('   [' + i18n.rollback + '</a>] '); 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: 500000,		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; }		} });
 * Rollback
 * @description Perform rollbacks without needing to be in the usergroup
 * @author Ozank

// Talk page button // Created by Lil' Miss Rarity // MIT OS License mw.loader.using(['mediawiki.api', 'mediawiki.Title']).then(function {   var config = mw.config.get([ 'wgArticleId', 'wgNamespaceNumber', 'wgPageName' ]);   if ( (window.TalkButtonNamespaces || [0]).indexOf(config.wgNamespaceNumber) === -1 || config.wgArticleId === 0 || window.TalkButtonLoaded ) {       return;    }    window.TalkButtonLoaded = true;    var title = new mw.Title(config.wgPageName);    title.namespace += 1;    var titleText = title.getPrefixedText;    new mw.Api.get({ action: 'query', titles: titleText, prop: 'info', meta: 'allmessages', inprop: 'revcount', ammessages: 'oasis-page-header-talk' }).done(function(d) { if (d.error) { return; }       var text = d.query.allmessages[0]['*'], pages = d.query.pages; if (!pages[-1]) { text += ' (' + pages[Object.keys(pages)[0]].revcount + ')'; }       $('').append(            $('', { 'class': 'TalkButtonBubble', href: mw.util.getUrl(titleText), id: 'ca-talk', text: text })       ).appendTo('.page-header__contribution-buttons .wds-list'); }); });

users = []; $('.edited-by a:not(.subtle)').each(function(i,el) {	name = $(this).text;	users.push({nickname: name, el:el});	$.getJSON('/api.php?action=query&list=users&ususers=' + name + '&format=json',function(res) { id = res.query.users[0].userid; _.where(users,{nickname: res.query.users[0].name}).forEach(function(u) {			u.id = id;		}); $.get('https://services.wikia.com/user-attribute/user/' + id + '/attr/name', function(attr) {			userItems = _.where(users,{id: id});			userItems.forEach(function(u) { u.name = attr.value; if(!$(u.el).siblings('.user_nickname').length) { $(u.el).text(u.name).after(                       '&emsp;',                        $(' ',{class: 'user_nickname'}).css({color:'grey', 'font-weight':'normal'}).text('@' + u.nickname)                    ); }			});		});	}); });

/** * Standard edit summaries * * see https://dev.wikia.com/wiki/Standard_Edit_Summary * for documentation and examples * * Originally written by User:Sikon for Wookiepedia * Rewritten by User:Quarenon for RuneScape Wiki * Updated by User:Eladkse for Casualty Wiki * Updated to handle comments and tabindexes by User:452 * Updated to handle wide-screen mode and slightly optimized by User:Pecoes */ /*jshint jquery:true, browser:true, es5:true, devel:true, camelcase:true, curly:false, undef:true, bitwise:true, eqeqeq:true, forin:true, immed:true, latedef:true, newcap:true, noarg:true, unused:true, regexp:true, strict:true, trailing:false*/ /*global mw, importArticle */ $(function {   'use strict';    var $textarea = $('#wpSummary');    if (!$textarea.length || document.getElementById('stdSummaries')) return;    var presets = (window.dev && window.dev.editSummaries) || {},        select = presets.select || 'Template:Stdsummaries';    $textarea.attr('tabindex', '3'); //set tabindex for summaries text area    $('#wpMinoredit').attr('tabindex', '4'); //set tabindex for minor edit checkbox    $('#wpSave').attr('tabindex', '5'); //set tabindex for publish button    var $summary = $('#wpSummaryEnhanced');    if (!$summary.length) $summary = $textarea;    if ('css' in presets) {        mw.util.addCSS(presets.css);    } else {        importArticle({ type: 'style', article: 'u:dev:MediaWiki:Standard_Edit_Summary.css' });   }    var $combo = $('<select id="stdSummaries" tabindex="2"> ')    .insertAfter($textarea)    .change(function { //var val = $summary.val; //$summary.val(val + (val.length ? '; ' : '') + $(this).val); $summary.val($(this).val); });   function flatten (options, indent) {        var flattened = [];        indent = indent || ;        for (var i = 0; i < options.length; i++) {            if ($.isArray(options[i])) {                flattened = flattened.concat(flatten(options[i], '-- '));            } else {                flattened.push(indent + options[i]);            }        }        return flattened;    }    function render (lines) {        var options = , selected = ' selected',            ignore = { ':': 1, '*': 1,  '<': 1 };        for (var i = 0; i < lines.length; i++, selected = '') {            if (!lines[i].length || ignore[lines[i][0]]) {                continue; // lines beginning with these characters: : * < are ignored            }            if (lines[i].substring(0, 3) === '-- ') {                var contents = mw.html.escape( lines[i].substring(3) );                options += '<option value="' + contents + '"' + selected + '> ' + contents + ' '; } else { options += '<option value="" disabled' + selected + '>' + mw.html.escape( lines[i] ) + ' '; }       }        $combo.append(options); }   if (typeof select === 'string') { $.get(mw.util.getUrl(select, {action: 'raw'})) .done(function (data) {           render(data.split(/\r\n|\n|\r/));        }); } else if (Array.isArray(select)) { render(flatten(select)); } });

/* 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: [] };

/** * Ajax Page Rename * Allows the user to quickly rename a page without having to load Special:MovePage * https://community.wikia.com/wiki/User:Cörey */ (function($, mw) {   var config = mw.config.get([ 'wgPageName' ]),   $list = $('.page-header__contribution-buttons .wds-list');    if(!$list.find('#ca-move').exists || window.AjaxRenameLoaded) {        return;    }    window.AjaxRenameLoaded = true;    importArticle({ type: 'script', article: 'u:dev:MediaWiki:I18n-js/code.js' });   var token = mw.user.tokens.get('editToken'), i18n, api;    function init(res) {        i18n = res;        $list.append( $('').append(               $('<a>', { href: '#', id: 'ajax-rename' })               .text(i18n.msg('button').plain)                .click(renamePage)            ) );   }    function renamePage {        i18n.useContentLang;        var defaultReason = i18n.msg('default-reason').plain;        i18n.useUserLang;        var newName = prompt(i18n.msg('target-prompt').plain, '');        if (newName === null) {            return;        }        var moveReason = prompt(i18n.msg('reason-prompt').plain, defaultReason);        if (moveReason === null) {            return;        }        api.post({ action: 'move', from: config.wgPageName, to: newName, movesubpages: '', movetalk: '', reason: moveReason, token: token }).done(function(d) { if (d.error) { alert(i18n.msg('error', d.error.code).plain); } else { alert(i18n.msg('success', config.wgPageName, newName).plain); location.reload(true); }       }).fail(function { alert(i18n.msg('error', i18n.msg('ajax-error').plain).plain); });   }    mw.loader.using('mediawiki.api').then(function { api = new mw.Api; mw.hook('dev.i18n').add(function (i18no) {           i18no.loadMessages('AjaxRename').done(init);        }); }); })(this.jQuery, this.mediaWiki);