User:Arashiryuu0/global.js

/** * Global code - affects all wikias/fandoms I use. * @namespace Global.js */ (function {   importArticles({ type: 'script', articles: [ 'u:dev:RelatedDiscussionsModule/code.js', 'u:dev:CodeblockLineNumbers/code.js', 'u:dev:DifferentSkinEditor/code.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:AjaxRC/code.js' ]   });    /**     * Purge Button     */    PurgeButtonText = 'Purge';    /**     * Auto Refresh     */    AjaxRCRefreshText = 'Auto-refresh';    AjaxRCRefreshHoverText = 'Automatically refresh the page';    ajaxPages = [        'Special:RecentChanges',        'Special:WikiActivity',        'Special:AllPages',        'Special:UncategorizedPages'    ];    /**     * Material Theme SyntaxHighlight Stuff     */    (function { function loop(_, e) { var text = e.textContent, word = getWord(text), color = getColor(text); if (word && color && !$(e).hasClass(word)) { $(e).addClass(word).css(color); } else if (text.toLowerCase === 'hasownproperty') { $(e).addClass('ownProp').css('color', '#82AAFF'); }       }        function getWord(text) { if (keywords.hasOwnProperty(text)) return keywords[text]; return null; }       function getColor(text) { if (colors.hasOwnProperty(text)) return colors[text]; return null; }       var selectors = [ '.kw1', '.kw3', '.kw4', '.sy0' ],           keywords = { 'prototype': 'prote', 'typeof': 'typeof', 'this': 'this', 'new': 'new', 'in': 'in', '=>': 'aF', '$': 'jQ' },           colors = { 'prototype': { 'color':'#f78c6a' }, 'typeof': { 'color': '#89ddf3' }, 'this': { 'color':'#f95479' }, 'new': { 'color':'#89ddf3' }, 'in': { 'color': '#89ddf3' }, '=>': { 'color':'#c792ea' }, '$': { 'color':'#89ddf3' } };       var i = 0, j = 0, ren, len = selectors.length, elements; for (i; i < len; i++) { elements = $('.javascript.source-javascript ' + selectors[i]); elements.each(loop); }   });    /**     * Remove featured videos     */    (function { function hasChild(target) { return target.attributes.hasOwnProperty('itemprop'); }       var videos = document.querySelectorAll('div[itemprop="video"]'), children, len = videos.length, i;       if (!len) return; i = 0; for (i; i < len; i++) { children = Array.prototype.filter.call(videos[i].parentElement.children, hasChild); if (children.length) children[i].parentElement.removeChild(children[i]); }   });    /**     * Colour uncoloured keywords     */    (function { var codeblocks = $$('pre.javascript.source-javascript, div.javascript.source-javascript .de1'), blocks = codeblocks.length, len, child, args, arr, j, i;       var keywords = { 'br0': [ '$$',               '...',                'typeof' ],           'kw4': [ 'Error', 'Promise', 'RangeError', 'TypeError', 'SyntaxError', 'ReferenceError', 'MutationObserver' ],           'kw1': ['with'], 'kw1 this': ['arguments'] };       var cssblocks = $$('pre.css.source-css, div.css.source-css .de1'), cssHexClass = 'st0', regex = /^#(\w{3,6}|\d{3,6}|((\w{1,2}|\d{1,2})(\w{1,2}|\d{1,2})(\w{1,2}|\d{1,2})))$/i, children, ren; function getKw(text) { var keyword, val; for (keyword in keywords) { val = keywords[keyword]; if (val.includes(text)) return keyword; }           return null; }       if (cssblocks.length) { i = 0; len = cssblocks.length; for (i; i < len; i++) { children = document.querySelectorAll('.re0'); if (!children.length) continue; j = 0; ren = children.length; for (j; j < ren; j++) { child = children[j] || 0; if (!child) continue; if (regex.test(child.textContent)) child.classList.replace('re0', cssHexClass); }           }        }        if (!blocks) return; arr = [ '$',           '...',            'with', 'typeof', 'arguments', 'Error', 'Promise', 'TypeError', 'RangeError', 'SyntaxError', 'ReferenceError', 'MutationObserver' ];       function isNotJQuery(node) { return node.data === '$' && node.previousSibling && node.previousSibling.textContent === '$'; }       function isJQuery(node) { return node.data === '$' && node.previousSibling && node.previousSibling.textContent !== '$'; }       if (wgTitle.includes('Arashiryuu0') && wgTitle.endsWith('.js')) { if (!codeblocks[0].textContent) return; i = 0; len = codeblocks[0].childNodes.length; if (!len) return; for (i; i < len; i++) { child = codeblocks[0].childNodes[i] || 0; if (!child || !child.data || !arr.includes(child.data.trim)) continue; if (isNotJQuery(child)) { args = createElement('span', {                       className: getKw('$$'),                        textContent: '$$'                    }); child.previousSibling.parentElement.removeChild(child.previousSibling); child.replaceWith(args); } else if (isJQuery(child)) continue; args = createElement('span', {                   className: getKw(child.data.trim),                    textContent: child.data                }); child.replaceWith(args); }       } else { i = 0; j = 0; for (j; j < blocks; j++) { len = codeblocks[j].childNodes.length; if (!len) return; for (i; i < len; i++) { child = codeblocks[j].childNodes[i] || 0; if (!child || !child.data || !arr.includes(child.data.trim)) return; if (isNotJQuery(child)) { args = createElement('span', {                           className: getKw('$$'),                            textContent: '$$'                        }); child.previousSibling.parentElement.removeChild(child.previousSibling); child.replaceWith(args); } else if (isJQuery(child)) continue; args = createElement('span', {                       className: getKw(child.data.trim),                        textContent: child.data                    }); child.replaceWith(args); }           }        }    });    /**     * LineNumbers on Codeblocks     * Moved to: https://dev.wikia.com/wiki/CodeblockLineNumbers     */ });

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

/** * Utility */ function createElement(type, properties) { var attributes, element, events, prop, name, len, val, ev, ty, pr, i;   type = type || ''; properties = properties || {}; ty = type.constructor.name; pr = properties.constructor.name; if (ty !== 'String' || pr !== 'Object') throw new TypeError('Expected: String, Object. Received: ' + ty + ', ' + pr); element = document.createElement(type); attributes = [ 'text', 'class' ];   events = { 'click': 'onclick', 'clicks': 'ondblclick', 'context': 'oncontextmenu', 'keyup': 'onkeyup', 'keydown': 'onkeydown', 'keypress': 'onkeypress', 'mouseup': 'onmouseup', 'mousedown': 'onmousedown', 'mousemove': 'onmousemove', 'mouseover': 'onmouseover', 'mouseout': 'onmouseout', 'mouseenter': 'onmouseenter', 'mouseleave': 'onmouseleave' };   for (prop in properties) { val = properties[prop]; if (!val) continue; name = val.constructor.name; if (attributes.includes(prop)) { if (prop === 'text') { element.textContent = val; continue; }           element.setAttribute(prop, val); } else if (events.hasOwnProperty(prop) && name === 'Function') { ev = events[prop]; element[ev] = val; } else if (prop === 'dataset' && name === 'Object') { for (i in val) element[prop][i] = val[i]; } else if (prop === 'childNodes' && name === 'Array') { i = 0; len = val.length; for (i; i < len; i++) { if (![1, 3].includes(val[i].nodeType)) continue; $a(element, val[i]); }       } else { element[prop] = val; }   }    element.props = properties; return element; }

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

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

/*@end@*/