User:SD0001/skin-pref.js

// Use timeless skin while on mobile // Make skin in url persist when links are clicked, useful for testing scripts across different skins var onMobile = /Android|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); var useskin = location.search.match(/useskin=([^&]*)/) && location.search.match(/useskin=([^&]*)/)[1]; if (useskin || onMobile) {

var skin = useskin || 'timeless';

// Insert useskin= param into every link var fixAnchor = function fixAnchor(a) { var href = a.href; var baseurl = , params = , hash = ''; var indexOfQ = href.indexOf('?'); var indexOfH = href.indexOf('#'); if (indexOfH === -1) { indexOfH = undefined; }		if (indexOfQ === -1 || (indexOfH && indexOfQ > indexOfH)) { indexOfQ = undefined; }

baseurl = href.slice(0, indexOfQ || indexOfH); if (indexOfH) { hash = href.slice(indexOfH); }		if (indexOfQ) { params = href.slice(indexOfQ, indexOfH); }

if (baseurl && !/(?:&|\?)useskin=/.test(params)) { var param = (params ? '&' : '?') + 'useskin=' + skin; a.href = hash ? a.href.replace('#', param + '#') : a.href + param; }	};

// This adds &useskin= param to the destination url on submitting a form // Doesn't work for Search and the edit page and many other places var fixForm = function fixForm(form) { $(form).append(			$(' ', { name: 'useskin', value: skin, type: 'hidden' })		); };

var observer = new MutationObserver(function(mutationsList, observer) {		for (let mutation of mutationsList) {			// console.log(mutation);			//console.log('mutation observed');			for (let addednode of mutation.addedNodes) {				// console.log('added node ' + addednode.tagName);				if (addednode.tagName === 'A') {					fixAnchor(addednode);					// console.log('a with id ' + addednode.id + ' fixed');				} else if (addednode.tagName === 'FORM' && $(addednode).attr('action') && $(addednode).attr('action').startsWith('/w/index.php')) {

fixForm(addednode); // console.log('form with id ' + addednode.id + ' fixed'); }			}		}	});	observer.observe(document, { childList: true, subtree: true });

mw.hook('wikipage.content').add(function {		$('a').each(function { fixAnchor(this); });

$("form[action^='/w/index.php']").each(function {			fixForm(this);		}); });

}