🏠 Home 

Wikipedia skins

Restore the old Wikipedia look or choose between other available skins: Vector 2022, Vector legacy 2010, MinervaNeue, MonoBook, Timeless, Modern, Cologne Blue

// ==UserScript==
// @name           Wikipedia skins
// @name:pl        Wikipedia skins
// @description    Restore the old Wikipedia look or choose between other available skins: Vector 2022, Vector legacy 2010, MinervaNeue, MonoBook, Timeless, Modern, Cologne Blue
// @description:pl Przywróć stary wygląd Wikipedii lub wybierz spośród innych dostępnych skórek: Vector 2022, Vector legacy 2010, MinervaNeue, MonoBook, Timeless, Modern, Cologne Blue
// @version        1.3.1
// @author         Pabli
// @homepageURL    https://greasyfork.org/scripts/523252-wikipedia-skins
// @supportURL     https://greasyfork.org/scripts/523252-wikipedia-skins/feedback
// @namespace      https://github.com/pabli24
// @license        MIT
// @match          *://*.wikipedia.org/*
// @match          *://*.wiktionary.org/*
// @match          *://*.wikiquote.org/*
// @match          *://*.wikinews.org/*
// @match          *://*.wikidata.org/*
// @match          *://*.wikivoyage.org/*
// @match          *://*.wikiversity.org/*
// @match          *://*.wikifunctions.org/*
// @match          *://*.wikisource.org/*
// @match          *://*.wikibooks.org/*
// @match          *://*.wikimedia.org/*
// @match          *://*.mediawiki.org/*
// @match          *://www.google.com/search*
// @match          *://duckduckgo.com/*
// @run-at         document-start
// @icon           data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmlld0JveD0iMCAwIDk3LjggOTcuOCI+PHJlY3Qgd2lkdGg9Ijk3LjgiIGhlaWdodD0iOTcuOCIgZmlsbD0iI2ZmZiIgcng9IjQ4LjkiIHRyYW5zZm9ybT0ibWF0cml4KC45IDAgMCAuOSA0LjkgNC45KSIvPjxwYXRoIGQ9Ik00OC45IDBhNDguOSA0OC45IDAgMSAwIDAgOTcuOCA0OC45IDQ4LjkgMCAwIDAgMC05Ny44em0yOC44IDM3LjUtMTcgMzkuMWgtMS41bC04LjktMjFjLTMuNSA3LTcuNSAxNC4xLTEwLjggMjFoLTEuN2MtNS0xMi0xMC40LTIzLjktMTUuNi0zNS45LTEuMi0yLjktNS40LTcuNi04LjItNy42di0xLjVoMTcuNlYzM2MtMiAuMS01LjYgMS40LTQuNyAzLjcgMi41IDUuNCAxMS4zIDI2LjIgMTMuNyAzMS41bDguMi0xNS42Yy0xLjUtMy02LjQtMTQuNS04LTE3LjQtMS0yLTMuOS0yLjEtNi0yLjJ2LTEuNWgxNS41VjMzYy0yIDAtNCAuOC0zLjIgMi44IDIuMSA0LjQgMy4zIDcuNCA1LjMgMTEuNWw1LjItMTFjMS0yLjMtLjQtMy4yLTQuMi0zLjN2LTEuNUg2N1YzM2MtMi41IDAtNSAxLjQtNi40IDMuNEw1NCA1MGw3LjYgMTdMNzUgMzYuMmMtMS0yLjUtNC0zLTUuMi0zLjF2LTEuNWgxNHYxLjVjLTMgMC01IDEuNy02LjEgNC40eiIvPjwvc3ZnPg==
// @grant          GM_info
// @grant          GM_setValue
// @grant          GM_getValue
// @grant          GM_registerMenuCommand
// ==/UserScript==
(async () => {
'use strict';
// https://en.wikipedia.org/wiki/Wikipedia:Skin
const skin = await GM_getValue('skin', 'vector');
if (window.location.hostname !== 'www.google.com' && window.location.hostname !== 'duckduckgo.com') {
const skins = {
'vector-2022': 'Vector 2022 (default on desktop from 2022)',
vector: 'Vector legacy 2010 (default on desktop from 2010 to 2021)',
minerva: 'MinervaNeue (mobile)',
monobook: 'MonoBook (default from 2004 to 2009)',
timeless: 'Timeless',
modern: 'Modern (created in 2008 and deprecated in 2021)',
cologneblue: 'Cologne Blue (created in 2002 and deprecated in 2019)'
};
const options = {
nostalgia: {
value: await GM_getValue('nostalgia', true),
label: 'Nostalgia on the nostalgia.wikipedia.org (original skin from 2001)',
},
cleanUrl: {
value: await GM_getValue('cleanUrl', true),
label: 'Clean URL (remove ?useskin=skinname from the URL)',
},
};
Object.entries(skins).forEach(([key, label]) => {
GM_registerMenuCommand(
`${skin === key ? '◉' : '○'} ${label}`,
async () => {
await GM_setValue('skin', key);
const url = new URL(window.location.href);
url.searchParams.append('useskin', key);
window.location.href = url;
}
);
});
Object.entries(options).forEach(([key, config]) => {
GM_registerMenuCommand(
`${config.value ? '☑' : '☐'} ${config.label}`,
async () => {
options[key].value = !options[key].value;
await GM_setValue(key, options[key].value);
deleteUseskinParam()
window.location.reload();
}
);
});
if (options.nostalgia.value && window.location.hostname === 'nostalgia.wikipedia.org') return;
function deleteUseskinParam() {
const url = new URL(window.location.href);
if (!url.searchParams.has('useskin')) return;
url.searchParams.delete('useskin');
window.history.replaceState({}, '', url);
}
const url = new URL(window.location.href);
if (!url.searchParams.has('useskin') && url.pathname !== '/') {
url.searchParams.append('useskin', skin);
window.location.href = url;
} else if (options.cleanUrl.value) {
deleteUseskinParam();
let lastUrl = window.location.href;
const interval = setInterval(() => {
if (window.location.href === lastUrl) return;
deleteUseskinParam();
lastUrl = window.location.href;
}, 200);
setTimeout(() => {
clearInterval(interval);
}, 3000);
}
}
const matches = GM_info.script.matches.slice(0, -2); // Remove google, ddg
const userMatches = GM_info.script?.options?.override?.use_matches || []; // Tampermonkey only
const allMatches = [...matches, ...userMatches];
const domains = allMatches.map(url => url.replace(/^.+\:\/\/\*?\.?([^\/]+)\/.*$/, '$1'));
function linkUseskin(e) {
let link = e.target.closest('a[href]:not([href^="#"])');
if (!link || link.dataset.useskin) return;
if (!link.getAttribute('href').startsWith('/') &&
!domains.some(domain => link.hostname.endsWith(`.${domain}`) || link.hostname === domain)) return;
const url = new URL(link.href);
if (url.searchParams.has('useskin')) {
url.searchParams.delete('useskin');
}
url.searchParams.append('useskin', skin);
link.href = url.toString();
link.dataset.useskin = true;
}
document.addEventListener('mouseover', linkUseskin);
document.addEventListener('focusin', linkUseskin);
})();