User:Arashiryuu0/wikia.js

/** * @namespace Personal_JS */   var has = Object.prototype.hasOwnProperty, config = mw.config.get([           'wgPageName',            'wgNamespaceNumber'        ]), imports = [ {               type: 'script', articles: [ 'u:dev:GlobalEditcount/code.js', 'u:dev:MediaWiki:UI-js/code.js', 'u:dev:MediaWiki:Toasts.js', 'u:bloodborne:JSHighlightFixes.js', 'u:bloodborne:ColorConverter.js', 'u:bloodborne:DOMTools.js', 'u:bloodborne:Tooltips.js' ]           },            {                type: 'style', articles: [ 'u:bloodborne:MediaWiki:Codeblocks.css', 'u:dev:MediaWiki:FontAwesome.css', 'u:dev:MediaWiki:ModernWikiActivity.css', 'u:dev:MediaWiki:ModernProfile/Wall.css', 'u:dev:MediaWiki:ModernWikiActivity.css', 'u:dev:MediaWiki:ModernCommentsSection.css', 'u:dev:MediaWiki:ModernProfile/Masthead.css', 'u:dev:MediaWiki:FandomizedRailModules/code.css', ]           }        ];    importArticles.apply(this, imports); window.tagList = { 'True Dragon': 'Wiki Administration', 'Demon Lord': 'Wiki Administration' };   function wait { if (!has.call(window, 'DOMTools')) return setTimeout(wait, 1000); pageLoaded; }   function pageLoaded { /**        * Setup */       importArticle({            type: 'script',            article: 'u:bloodborne:Tooltips.js'        }); /**        * 0         */        ;(function {            var selectors = [                '.wds-community-header__wiki-buttons',                '.wds-button-group'            ];            var headTarget = DOMTools.query(selectors.join(''), document);            if (!headTarget) return;            $all(headTarget, [ createElement('a', {                    className: 'wds-button wds-is-squished wds-is-secondary',                    id: 'jsReturn',                    childNodes: [                        createElement('span', { className: 'jsReturn', textContent: '\u2111', })                   ],                    style: {                        fontSize: '20px',                        fontWeight: 400                    },                    href: '/wiki/User:Arashiryuu0/wikia.js',                     title: 'Return to Personal JS'                }), createElement('a', {                   className: 'wds-button wds-is-squished wds-is-secondary',                    id: 'cssReturn',                    childNodes: [                        createElement('span', { className: 'cssReturn', textContent: '\u212D', })                   ],                    style: {                        fontSize: '20px',                        fontWeight: 400                    },                    href: '/wiki/User:Arashiryuu0/wikia.css',                     title: 'Return to Personal CSS'                }), createElement('a', {                    className: 'wds-button wds-is-squished wds-is-secondary',                     id: 'purgePageButton',                    childNodes: [                        createElement('span', { className: 'purgeButton', textContent: '\u262F', })                   ],                    style: {                        fontSize: '20px',                        fontWeight: 400                    },                    href: '?action=purge',                     title: 'Purge Page'                }), createElement('a', {                    className: 'wds-button wds-is-squished wds-is-secondary',                     childNodes: [                        createElement('span', { className: 'userReturn', textContent: '↩' })                   ],                    style: {                        fontSize: '18px',                        fontWeight: 600                    },                    href: '/wiki/User:Arashiryuu0',                     title: 'Return to User Page'                }), createElement('a', {                    className: 'wds-button wds-is-squished wds-is-secondary',                     childNodes: [                        createElement('span', { className: 'randomPage', textContent: '?' })                   ],                     style: {                        fontSize: '18px',                    },                     dataset: { tracking: 'Special:Random' },                     href: '/wiki/Special:Random',                     title: 'Random Page'                }) ]);       });        /**         * 1         */        ;(function {            if (config.wgNamespaceNumber !== 0) return;            var toggle,                header = $_('.wds-community-header');            var element = {                'this': $_('.WikiaPageContentWrapper'),                '$this': $($_('.WikiaPageContentWrapper')),                'actions': {                    toggle: function(t) {                        element.$this.toggle;                        DOMTools.toggleClass(element['this'], 'hidden');                        DOMTools.text(t, this.getText);                    },                    getText: function {                        return DOMTools.hasClass(element['this'], 'hidden')                            ? 'show'                            : 'hide';                    }                }            };            function onClick {                element.actions.toggle(this); }           toggle = createElement('a', {                id: 'toggle-page',                textContent: element.actions.getText,                style: {                    position: 'relative',                    left: '2px',                    bottom: '1.3vh',                    color: 'whitesmoke',                    cursor: 'pointer',                    textTransform: 'uppercase',                    textDecoration: 'none'                },                'click.page': onClick            }); $a(header, toggle); });       /**         * 2         */        ;(function { var lang = document.documentElement.lang; var date = { obj: new Date, target: $_('.wds-community-header__local-navigation'), };           Object.defineProperty(date, 'current_day', {                writable: false,                configurable: false,                value: date.obj.toLocaleDateString(lang, { weekday: 'long' })            }); Object.defineProperty(date, 'day', {               configurable: false,                value: createElement('a', { id: 'current-day', title: 'Today', target: '_blank', textContent: date.current_day })           });            var css = { ellipse: { id: 'EllipseFixCSS', type: 'text/css', selectors: [ [                           '.WikiaSiteWrapper', '.wds-community-header', '.wds-community-header__wiki-buttons', '>',                           '.wds-dropdown', '>',                           '.wds-dropdown__content,', '.wds-dropdown.wds-is-active::after,', '.wds-dropdown.wds-is-active::before,', '.wds-dropdown:hover::after,', '.wds-dropdown:hover::before' ],                       [                            '.wds-community-header__wiki-buttons', '>',                           '.wds-dropdown', '>',                           '.wds-button:hover' ],                       [                            '.WikiaSiteWrapper', '.wds-community-header', '.wds-community-header__wiki-buttons', '>',                           '.wds-dropdown.is-open', '>',                           '.wds-dropdown__content,', '.wds-dropdown.wds-is-active.is-open::after,', '.wds-dropdown.wds-is-active.is-open::before,', '.wds-dropdown.is-open:hover::after,', '.wds-dropdown.is-open:hover::before,', '.wds-dropdown.is-open::after,', '.wds-dropdown.is-open::before' ]                   ]                },                toggle: { id: 'ToggleCSS', type: 'text/css', selectors: [ [                           '.wds-dropdown.wds-is-active:not(.wds-no-chevron)::after,', '.wds-dropdown.wds-is-active:not(.wds-no-chevron)::before,', '.wds-dropdown' + ':not(.wds-is-touch-device):not(.wds-is-not-hoverable)' + ':hover:not(.wds-no-chevron)::after,', '.wds-dropdown' + ':not(.wds-is-touch-device):not(.wds-is-not-hoverable)' + ':hover:not(.wds-no-chevron)::before,', '.wds-community-header__local-navigation', '.wds-dropdown.wds-is-active', '.wds-dropdown__content,', '.wds-community-header__local-navigation', '.wds-dropdown.wds-is-active', '.wds-dropdown__content,', '.wds-community-header__local-navigation', '.wds-dropdown' + ':not(.wds-is-touch-device):not(.wds-is-not-hoverable):hover', '.wds-dropdown__content,', '.wds-community-header__local-navigation', '.wds-dropdown:hover::after' ],                       [                            '.wds-community-header__local-navigation', '.wds-dropdown:hover', '.wds-dropdown__toggle-chevron' ],                       [                            '.wds-community-header__local-navigation', '.wds-dropdown:hover', '.wds-dropdown__toggle' ],                       [                            '.wds-dropdown.wds-is-active.is-open:not(.wds-no-chevron)::after,', '.wds-dropdown.wds-is-active.is-open:not(.wds-no-chevron)::before,', '.wds-dropdown.is-open' + ':not(.wds-is-touch-device):not(.wds-is-not-hoverable)' + ':hover:not(.wds-no-chevron)::after,', '.wds-dropdown.is-open' + ':not(.wds-is-touch-device):not(.wds-is-not-hoverable)' + ':hover:not(.wds-no-chevron)::before,', '.wds-community-header__local-navigation', '.wds-dropdown.wds-is-active.is-open', '.wds-dropdown__content,', '.wds-community-header__local-navigation', '.wds-dropdown.wds-is-active.is-open', '.wds-dropdown__content,', '.wds-community-header__local-navigation', '.wds-dropdown.is-open::before,', '.wds-community-header__local-navigation', '.wds-dropdown.is-open::after,', '.wds-community-header__local-navigation', '.wds-dropdown.is-open', '.wds-dropdown__content,', '.wds-community-header__local-navigation', '.wds-dropdown.is-open' + ':not(.wds-is-touch-device):not(.wds-is-not-hoverable):hover', '.wds-dropdown__content,', '.wds-community-header__local-navigation', '.wds-dropdown.is-open:hover::after' ]                   ]                },                target: document.head };           Object.defineProperty(css.ellipse, 'rules', {                configurable: false,                value: [                    css.ellipse.selectors[0].join(' ') + ' { display: none; }',                    css.ellipse.selectors[1].join(' ') + ' { cursor: pointer; }',                    css.ellipse.selectors[2].join(' ') + ' { display: block !important; }'                ]            }); Object.defineProperty(css.ellipse, 'stylesheet', {               configurable: false,                value: createElement('style', { id: css.ellipse.id, type: css.ellipse.type, textContent: css.ellipse.rules.join('\n') })           });            Object.defineProperty(css.toggle, 'rules', {                configurable: false,                value: [                    css.toggle.selectors[0].join(' ') + ' { display: none; }',                    css.toggle.selectors[1].join(' ') + ' { transform: none; '                    + 'transition: transform 200ms '                    + 'cubic-bezier(0.6, -0.28, 0.74, 0.05); }',                    css.toggle.selectors[2].join(' ') + ' { transform: none; }',                    css.toggle.selectors[3].join(' ') + ' { display: block !important; }'                ]            }); Object.defineProperty(css.toggle, 'stylesheet', {               configurable: false,                value: createElement('style', { id: css.toggle.id, type: css.toggle.type, textContent: css.toggle.rules.join('\n') })           });            var els = { selectors: [ [                       '.wds-community-header__local-navigation', '.wds-dropdown', '.wds-dropdown__toggle-chevron' ],                   [                        '.wds-community-header__wiki-buttons', '>',                       '.wds-dropdown', '>',                       '.wds-button' ]               ]            };            Object.defineProperties(els, {                toggles: {                    configurable: false,                    value: DOMTools.queryAll(els.selectors[0].join(' '))                },                headerButton: {                    configurable: false,                    value: $_(els.selectors[1].join(' '))                }            }); function ellipse { var root = this.parentElement, content; content = root.querySelector('.wds-dropdown__content'); $(content).toggle('fast'); DOMTools.toggleClass(root, 'is-open'); }           function chevron { var rotation = 'rotateX(180deg)', root = this.parentElement.parentElement, content, ts; content = root.querySelector('.wds-dropdown__content'); $(content).toggle('fast'); DOMTools.toggleClass(root, 'is-open'); ts = this.style.transform; DOMTools.css(this, 'transform', ts !== rotation ? rotation : 'none'); }           function addChevronListener(element) { if (!element) return; DOMTools.on(element, 'click.toggle', chevron); }           $a(date.target, date.day); DOMTools.appendAll(css.target, [               css.ellipse.stylesheet,                css.toggle.stylesheet            ]); if (els.headerButton) { els.headerButton.setAttribute('title', 'Options'); DOMTools.css(els.headerButton, 'padding', '11px 3px'); DOMTools.on(els.headerButton, 'click.toggle', ellipse); }           els.toggles.forEach(addChevronListener); });       /**         * 3         */        ;(function { if (!config.wgPageName.includes('WikiActivity')) return; var article = $_('.WikiaArticle'), options = { childList: true, subtree: true }; function iterate { var sel = DOMTools.queryAll([                   '.activity-ns-1201 > table,',                    '.activity-ns-2001 > table'                ]); function handleClass(element, index) { if (element.nodeType !== 1) return; if (DOMTools.hasClass(element, 'wallfeed')) return; DOMTools.addClass(element, 'wallfeed'); log('iteration complete: ' + index, element); }               sel.forEach(handleClass); }           function filterUpper(upper) { var i, len; if (!upper.addedNodes) return; len = upper.addedNodes.length; for (i = 0; i < len; i++) filterNode(upper.addedNodes[i]); }           function filterNode(node) { if (node.nodeType !== 1) return; if (!DOMTools.hasClass(node, 'activityfeed')) return; iterate; }           function processMutation(change) { filterUpper(change); }           function handleMutation(changes) { for (var change in changes) processMutation(changes[change]); }           var e = new MutationObserver(handleMutation); log('iterating...'); iterate; e.observe(article, options); });       /**         * 4         */        ;(function { var base = DOMTools.query('#UserProfileMasthead'); if (!base) return; function getData(user) { var url = mw.util.wikiScript('api'); url += '?action=query&list=users&usprop=registration'; url += '&ususers=' + user + '&format=json'; function cb(resolve, reject) { var xhr = new XMLHttpRequest; function load { resolve(JSON.parse(xhr.responseText)); }                   function error(e) { reject(e, xhr); }                   xhr.addEventListener('load', load); xhr.addEventListener('error', error); xhr.open('GET', url, true); xhr.send; }               return new Promise(cb); }           function appendToGlobalCount(data) { var d = DOMTools.getProp(data, 'query.users.0.registration'), date = new Date(d).toLocaleDateString('en-us', {                       day: '2-digit',                        month: 'long',                        year: 'numeric'                    }), target = DOMTools.query('.globaledit-label', base), clone; if (!target) return Promise.reject(new Error('Couldn\'t find label.')); clone = target.cloneNode(true); DOMTools.text(clone, 'global edits since account creation'); DOMTools.appendAll(clone, [                   document.createElement('br'),                    document.createTextNode(date)                ]); target.replaceWith(clone); return Promise.resolve(clone); }           function removeLinkedCSS { var links = DOMTools.queryAll('link[type="text/css"][rel="stylesheet"]'), link; function filterLinks(l) { return l.href && l.href.includes('GlobalEditcount'); }               link = links.find(filterLinks); try { link.parentElement.removeChild(link); return Promise.resolve(true); } catch(e) { return Promise.reject(e); }           }            function done(toasts) { toasts.success('Appended account creation date to global editcount.'); return Promise.resolve(dev.toasts); }           function init(values) { var GEC = values[0], toasts = values[1], ui = values[2]; return getData(GEC.user) .then(appendToGlobalCount, console.error) .then(removeLinkedCSS, console.error) .then(done.bind(null, toasts), console.error); }           function isUiLoaded { return new Promise(function(resolve, reject) {                   mw.hook('dev.ui').add(function(ui) { if (!ui) return reject(ui); resolve(ui); });               });            }            function isToastsLoaded { return new Promise(function(resolve, reject) {                   mw.hook('dev.toasts').add(function(toasts) { if (!toasts) return reject(toasts); resolve(toasts); })               });            }            function isGlobalEditcountLoaded { return new Promise(function(resolve, reject) {                   mw.hook('GlobalEditcount.loaded').add(function(GEC) { if (!GEC) return reject(GEC); resolve(GEC); });               });            }            function allLoaded { return Promise.all([                   isGlobalEditcountLoaded,                    isToastsLoaded,                    isUiLoaded                ]); }           allLoaded.then(init, console.error); });   }    addOnloadHook(wait); });
 * (function {

/** * @namespace Utility */ function log { var args = Array.prototype.slice.call(arguments), time = new Date.toUTCString; args.unshift('%c[LOG] %c%s\n\u2014', 'color: #FFCB6B;', 'color: #F78C6A;', time); console.log.apply(this, args); }

function $_(selector) { return document.querySelector(selector); }

function $$(selector) { return document.querySelectorAll(selector); }

function $a(target, element) { if (!element || !target) return; return target.appendChild(element); }

function $every(targets) { if (!targets || !Array.isArray(targets)) return; function append(list) { if (!list || !Array.isArray(list)) return; $all(list.shift, list); }   var len = targets.length, i;    for (i = 0; i < len; i++) append(targets[i]); } function $all(target, elements) { var len, i, con; if (!target) return; if (!elements || !Array.isArray(elements)) return; len = elements.length; for (i = 0; i < len; i++) $a(target, elements[i]); }

function isNil(anything) { return typeof anything === 'undefined' || anything === null; }

function createElement(type, properties) { var nodeTypes = [1, 3], element; if (typeof type !== 'string') return; if (typeof properties !== 'object') return; if (properties.constructor.name !== 'Object') return; function addStyle(element, _, styles) { var keys = Object.keys(styles), len = keys.length, style, i;       for (i = 0; i < len; i++) { style = keys[i]; DOMTools.css(element, style, styles[style]); }       return element; }   function setText(element, _, value) { element.textContent = value; return element; }   function addAttribute(element, attribute, value) { if (attribute === 'text') return setText(element, value); element.setAttribute(attribute, value); return element; }   function addEvent(element, event, callback) { DOMTools.on(element, event, callback); return element; }   function addData(element, _, data) { for (var i in data) element[_][i] = data[i]; return element; }   function addChildren(element, _, children) { for (var i = 0, len = children.length; i < len; i++) { if (!nodeTypes.includes(children[i].nodeType)) continue; $a(element, children[i]); }       return element; }   function processProps(element, props) { var keys = Object.keys(props), len = keys.length, prop, name, val, ns, i;       var actions = { 'text': setText, 'style': addStyle, 'class': addAttribute, 'dataset': addData, 'childNodes': addChildren };       for (i = 0; i < len; i++) { prop = keys[i]; val = props[prop]; if (isNil(val)) continue; name = prop.split('.')[0]; ns = prop.split('.')[1]; if (typeof actions[name] !== 'undefined') { actions[name](element, prop, val); continue; } else if (typeof ns !== 'undefined') { addEvent(element, prop, val); continue; }           element[prop] = val; }       Object.defineProperty(element, 'props', {            value: props        }); return element; }   element = document.createElement(type); return processProps(element, properties); }

/*@end@*/