User:Arashiryuu0/global.js

/** * Global code - affects all wikias/fandoms I use. * @namespace Global.js */ 'use strict'; var has = Object.prototype.hasOwnProperty, slice = Array.prototype.slice, toString = Object.prototype.toString, config = mw.config.get([           'wgArticlePath',            'wgIsEditPage',            'wgPageName'        ]), imports = [ {               type: 'script', articles: [ 'u:dev:MediaWiki:ConsistentModules/code.js', 'u:dev:RelatedDiscussionsModule/code.js', 'u:dev:MediaWiki:JavascriptEditor.js', 'u:dev:CodeblockLineNumbers/code.js', 'u:dev:DifferentSkinEditor/code.js', 'u:dev:MediaWiki:EmojiUserNav.js', 'u:dev:YoutubeModal/code.js', 'u:dev:PurgeButton/code.js', 'u:dev:View_Source/code.js', 'u:dev:UTCClock/code.js', 'u:dev:Message/code.js', 'u:dev:I18n-js/code.js', 'u:dev:AjaxRC/code.js', 'u:dev:CodeEditor.js', 'u:dev:Toasts.js' ]           },            {                type: 'script', articles: [ 'u:bloodborne:JSHighlightFixes.js', 'u:bloodborne:DOMTools.js' ]           },            {                type: 'style', articles: [ 'u:bloodborne:MediaWiki:CodeblockIdentifiers.css', 'u:bloodborne:MediaWiki:Codeblocks.css', 'u:dev:MediaWiki:Responsive_mobile.css' ]           }        ];    function isObject (o) { return toString.call(o) === '[object Object]'; }   window.PurgeButtonText = 'Purge'; window.AjaxRCRefreshText = 'Auto-refresh'; window.AjaxRCRefreshHoverText = 'Automatically refresh the page'; window.ajaxSpecialPages = [ 'RecentChanges', 'WikiActivity', 'AllPages', 'UncategorizedPages' ];   importArticles.apply(this, imports); function wait { if (!has.call(window, 'DOMTools')) return setTimeout(wait, 1000); codeButtons; run; }   function run  { /**        * Remove featured videos */       ;(function  {            var items;            function hasChild (target) {                return has.call(target.attributes, 'itemprop');            }            function removeChild (child) {                return child.parentElement.removeChild(child);            }            function removeChildren (children) {                children.forEach(removeChild);            }            function filterChildren (children) {                return children.filter(hasChild);            }            function handleChildren (children) {                removeChildren(filterChildren(children));            }            function mapVideos (video) {                return slice.call(video.parentElement.children);            }            items = DOMTools.queryAll('div[itemprop="video"]').map(mapVideos);            items.forEach(handleChildren);        }); /**        * LineNumbers on Codeblocks * Moved to: https://dev.wikia.com/wiki/CodeblockLineNumbers */       /**         * Cancel button for edit pages. */       ;(function  {            var button, head, url;            if (!config.wgIsEditPage || window.CancelEditLoaded) return;            head = document.querySelector('#EditPageHeader h2');            if (!head) return;            window.CancelEditLoaded = true;            url = mw.util.getUrl;            button = DOMTools.parseHTML([ '', 'Cancel', '' ].join('').trim);           head.appendChild(button);            mw.util.addCSS('#cancel-button { margin-top: -2px; }');        }); /**        * Copy Code button */       ;(function  {            var init, preinit, preload, toastHook;            init = function (i18n, toasts) {                var s = [                        'div[class*="source-"]',                        '#theme-solarized-light',                        '#theme-solarized-dark',                        'code[class]:not(.no-language)'                    ],                    targets = DOMTools.queryAll(s.join(', ')),                    addButton;                addButton = function (codeblock) {                    var button, child;                    if (DOMTools.hasClass(codeblock, 'de1')) return;                    child = codeblock.firstChild;                    button = document.createElement('button');                    button.setAttribute('id', 'CopyCodeButton');                    DOMTools.text(button, i18n.msg('copy').plain);                    DOMTools.on(button, 'click.CopyButton', function (e) { var range = document.createRange, selection, success, error; window.getSelection.removeAllRanges; range.selectNode(codeblock); codeblock.focus; selection = window.getSelection; selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges; toasts.info('Successfully copied.'); });                   if (!['hljs', 'lineNumbers', 'de1'].includes(child.className)) return;                    codeblock.prepend(button);                };                targets.forEach(addButton);            };            preload = function (toasts, i18n) {                i18n.loadMessages('CopyCodeButton').then(function (i18no) { setTimeout(function {                        init(i18no, toasts);                    }, 1000); });           };            toastHook = function (toast) {                mw.hook('dev.i18n').add(preload.bind(null, toast));            };            mw.hook('dev.toasts').add(toastHook);        }); /**        * Make light-theme Discord widget use dark-theme */       ;(function  {            var handleWidget = function (rail) {                var widget = rail.querySelector('.discord-widget-container .widget');                if (widget) widget.classList.replace('widget-theme-light', 'widget-theme-dark');                return widget;            };            mw.hook('Discord.widget').add(handleWidget);        }); /**        * Responsive Mobile * dev.fandom.com/wiki/Responsive_Mobile */       ;(function  {            var meta = document.querySelector('meta[name="viewport"]');            if (!meta) {                meta = document.createElement('meta');                meta.setAttribute('name', 'viewport');            }            meta.setAttribute('content', 'width=device-width, initial-scale=1, user-scalable=yes');        }); /**        * EmojiUserNav */       ;(function  {            var usernav = document.querySelector('.wds-global-navigation__user-menu > div > ul'), items, item;            usernav.querySelector('a[data-tracking-label="account.profile"]').textContent = '👤';            items = usernav.querySelectorAll('a[data-tracking-label="account.message-wall"], a[data-tracking-label="account.talk"]');            items.forEach(function (i) { i.textContent = '💬'; });           item = usernav.querySelector('a[data-tracking-label="account.preferences"]');            item && (item.textContent = '⚙️');            usernav.querySelector('.wds-sign-out__button').textContent = '👋';            window.dev = $.extend(true, window.dev, { i18n: { overrides: { ContribsLink: { 'contribs': '✏️' }                   }                }            });            mw.util.addCSS('.wds-global-navigation__user-menu .wds-dropdown__content > ul { display: flex; }');        }); }   function codeButtons  { 'use strict'; var page = config.wgPageName, flag = ['MediaWiki', 'User'].includes(page.split(':').shift) && (page.endsWith('.js') || page.endsWith('.css')); if (!flag) return console.log(page, flag); var container = DOMTools.parseHTML(' '), buttons = [], themes = ['material', 'vs2015', 'dracula'], target = DOMTools.query('#mw-clearyourcache'); function generateButtons { if (buttons.length) return buttons; var len = themes.length, btn, id; for (var i = 0; i < len; i++) { id = themes[i]; btn = DOMTools.parseHTML('' + id + ' '); DOMTools.on(btn, 'click.code-button', applyTheme); buttons.push(btn); }           return buttons; }       function getTheme (id) { return themes.includes(id) && id || 'material'; }       function applyTheme  { var theme = getTheme(this.getAttribute('id')), article = DOMTools.query('#WikiaArticle'); if (theme === 'material') return (article.className = 'WikiaArticle', void 0); article.className = 'WikiaArticle ' + theme; }       mw.hook('wikipage.content').add(function ($content) {            DOMTools.appendAll(container, generateButtons);            $content.find('#mw-clearyourcache').append(container);        }); }   window.addOnloadHook(wait); });
 * (function {

/** * Cookies */ function getCookies { if (!window.cookies) { Object.defineProperty(window, 'cookies', {           get: function  {                return document.cookie.split(';').reduce(function (cookies, cookie) { cookies[cookie.split('=')[0].trim] = unescape(cookie.split('=')[1]); return cookies; }, {});           }        });        return window.cookies; }   return window.cookies; }

/*@end@*/