Gebruiker:Strepulah/eindstanden-converter.js
Opmerking: nadat u de wijzigingen hebt gepubliceerd is het wellicht nodig uw browsercache te legen.
- Firefox / Safari: houd Shift ingedrukt terwijl u op Vernieuwen klikt of druk op Ctrl-F5 of Ctrl-R (⌘-Shift-R op een Mac)
- Google Chrome: druk op Ctrl-Shift-R (⌘-Shift-R op een Mac)
- Internet Explorer / Edge: houd Ctrl ingedrukt terwijl u op Vernieuwen klikt of druk op Ctrl-F5
- Opera: druk op Ctrl-F5.
// ==UserScript==
// @name Eindstandengrafiekenomzetter Schotland
// @namespace Strepulah
// @version 1.0.0
// @grant none
// @description Zet een eindstandengrafiek om van kneus naar baas.
// @include https://nl.wikipedia.org/w/index.php*
// @run-at document-end
// ==/UserScript==
(function() {
function getLeagueCode(color) {
let code = '';
switch(color) {
case '#C0FFC0':
code = 'n1';
break;
case '##C0FFC0':
code = 'n2';
break;
case '#76EE00':
code = 'n3';
break;
case '#00AA00':
code = 'n4';
break;
case '#ACE1AF':
code = 'n5';
break;
default:
code = 'onbekend';
}
return code;
}
function removeHead(tekst) {
const tableHead1 = `
{| Cellpadding="0" CellSpacing="0" border="0" style="font-size:100%; border:1px solid #aaaaaa; padding:1px;"
|- valign="bottom"`;
const tableHead2 = `
{| Cellpadding="0" CellSpacing="1" style="font-size:100%; border:1px solid #a0a0a0; padding:1px; text-align:center;"
|- valign="bottom"`;
tekst = tekst.replace(tableHead1, '');
tekst = tekst.replace(tableHead2, '');
return tekst;
}
function removeTail(tekst) {
let reTail1 = /\|- align="?center"?,? style="font-size:80%;"[\s\S]+?\{\{Clearboth\}\}\n/g;
let tail1 = [...tekst.matchAll(reTail1)];
let reTail2 = /\n+\{\| class="wikitable" style="font-size:80%; [\s\S]+?\{\{Clearboth\}\}\n/g;
let tail2 = [...tekst.matchAll(reTail2)];
tekst = tail1[0] ? tekst.replace(tail1[0][0], '') : tekst;
tekst = tail2[0] ? tekst.replace(tail2[0][0], '') : tekst;
return tekst;
}
function replaceHeading(tekst) {
const h = /= *Eindklasseringen.+?=/;
return tekst.replace(h, '= Eindklasseringen =');
}
/*
** Deelt y op in een eindpositie, afdeling en alternatieve eindpositie.
*/
function parseY(y) {
if (typeof(y) == "string") {
const br = /<br *\/?>/;
y = y.replace(br, ' ');
let alt = '';
let match = y.match(/(<small>)?(\(\d+\))(<\/small>)?/, y);
if (match) {
alt = "|yOpm=" + match[2].replace(")", "e)");
y = y.replace(match[0], '');
}
let parts = y.trim().split(' ');
let pos = parts[0];
let afd = parts[1];
parts[0] = pos ? pos.replaceAll('*', '') : "";
parts[1] = afd ? "|afd=" + afd.substr(-1) : "";
parts[2] = alt;
return parts;
}
return [y, '', ''];
}
/*
** Zet eindstandengrafiek om naar sjabloon.
*/
function convertGraph() {
var box = document.getElementById('wpTextbox1');
var tekst = box.value
var reBalk = /\n\| *\{\{BalkVerticaal2\|?([^|}]*)\|?([^|}]*)\|?(#[0-9a-fA-F]+)?\}\}/g;
var balken = [...tekst.matchAll(reBalk)];
var reEersteJaar = /\n\| *([\d*][\d*]) *\|\|/g;
var eersteJaar = [...tekst.matchAll(reEersteJaar)][0][1];
var reJaar = /\|\|(\d\d|-)/g;
var jaren = [...tekst.matchAll(reJaar)];
const aantalBalken = balken.length;
for (let i = 0; i < aantalBalken; i++) {
var balk = balken[i][0];
var jaar = i == 0 ? eersteJaar : jaren[i-1][1];
var y = balken[i][2];
var afd = '';
var yOpm = '';
[y, afd, yOpm] = parseY(y);
var code = getLeagueCode(balken[i][3]);
var decenium = parseInt(jaar) <= 21 ? '20' : '19';
var begin = i == 0 ? "\n{{Eindstanden voetbalclub Schotland" : '';
var einde = i == aantalBalken - 1 ? '\n}}' : '';
var nieuw = `${begin}\n\| {{Seizoen|${decenium}${jaar}|${y.padStart(2, ' ')}|${code}${afd}${yOpm}}}${einde}`;
if (jaar == '**') nieuw = '';
tekst = tekst.replace(balken[i][0], nieuw);
}
tekst = tekst.replaceAll('| |onbekend', '');
tekst = removeHead(tekst);
tekst = removeTail(tekst);
tekst = replaceHeading(tekst);
box.value = tekst;
}
/*
** Voegt een knop toe aan de editor om het script mee te activeren.
*/
function addButton() {
var knoppenGroep = document.querySelectorAll('.group-insert')[1];
var span = document.createElement("span");
var node = document.createTextNode("⚽📊");
span.title = 'Grafiek eindstanden';
span.style.cursor = 'pointer';
span.appendChild(node);
knoppenGroep.appendChild(span);
span.addEventListener('click', convertGraph);
}
setTimeout(addButton, 2000);
console.log('Klaar!');
})();