User:Jgottula/common.js

'use strict';

// NOTE: MediaWiki concatenates [user common.js + user hydradark.js] //      and then inserts that processed blob into a temporary element //      at some point during the loading process (after DOMContentLoaded, IIRC)

// NOTE: MediaWiki is retarded and does not support any JS syntax newer than ES5, //      nor provide any mechanism for translating ES6 to ES5 (e.g. Babel), //      probably because their shitty backend is written in PHP (lol) //      https://phabricator.wikimedia.org/T178356

dbg('jgottula|common.js', 'pre-script');

// get rid of stupid vertical-space-wasting site notice regarding mobile version shit // (we already hide it in CSS; here, we constantly set the cookie, so it'll GTFO even w/o user CSS enabled) $.cookie('dismissSiteNotice', mw.config.get('wgSiteNoticeId'), { path: '/', expires: 365 * 1000 });

// get rid of the needlessly-CPU-churning animated image slideshows on the main page $('body.page-Dead_Cells_Wiki div.fpbox:has(> div:contains("Featured images")):has(div[id^="sbls"])').remove;

// purpose: rewrite all MediaWiki element URL's: // - if they already have a 'format=' query parameter, leave them alone // - otherwise: add 'format=original' // this ensures that Chrome's fucking stupid 'accept:' header // won't result in MediaWiki converting nice PNG's into ugly WebP's const re_fiximageurl = /^\/deadcells_gamepedia_en\/images\/[0-9a-f]{1}\/[0-9a-f]{2}\/.+$/; function FixImageURL(elem) {   if (elem.tagName.toLowerCase != 'img') return 0;

try { var before = elem.src;

var url = new URL(elem.src); if (!re_fiximageurl.test(url.pathname)) return 0;

// get rid of /scale-to-width-down/ URL component if (elem.hasAttribute('width') && elem.hasAttribute('data-file-width')) { var width = elem.getAttribute('width'); var dfwidth = elem.getAttribute('data-file-width'); if (width == dfwidth) { url.pathname = url.pathname.replace('/scale-to-width-down/' + width, ''); }		}

// always put format=original unless there's already a format= value var query = new URLSearchParams(url.search); if (!query.has('format')) { query.append('format', 'original'); url.search = query.toString; }

elem.src = url.toString;

//console.log('[jgottula|common.js] FixImageURL: Before: ' + before); //console.log('[jgottula|common.js] FixImageURL: After: ' + elem.src); } catch (ex) { return 0; }

return 1; }

function FixAllImagesNow {	var elems = document.getElementsByTagName('img'); var n = 0; for (var i = 0; i < elems.length; ++i) { n += FixImageURL(elems[i]); }   console.log('[jgottula|common.js] FixAllImagesNow: modified '+n+'/'+elems.length+' element URLs'); }

// immediate fixup for all elements that already exist FixAllImagesNow;

// delayed fixup for all elements existing at the time of DOMContentLoaded event //document.addEventListener('DomContentLoaded', FixAllImagesNow);

// ongoing monitoring for any elements that may be added to the DOM later /*let observer = new MutationObserver((mutations, observer) => {   for (const mutation of mutations) {        if (mutation.type === 'childList') {            for (let elem of mutation.addedNodes) {                FixImageURL(elem);            }        } else if (mutation.type === 'attributes') {            if (mutation.target.tagName == 'IMG' && mutation.attributeName == 'src') {                FixImageURL(elem);            }        }    } }); observer.observe(document, {   subtree: true,    childList: true,    attributes: true });*/

// this only needs to be declared once, since common.js and hydradark.js are concatenated together function dbg(where, why) {	// continually re-check the fragment and query params in case those // happen to change later on and we're debugging persistent/latent code var url = new URL(window.location.href); if (url.hash.includes('jgdebug') || url.searchParams.has('jgdebug')) { why = (typeof why !== 'undefined' ? ': ' + why : ''); console.error('[' + where + ']: jsdebug dynamic breakpoint invoked' + why) debugger; } }