Gebruiker:Strepulah/eindstanden-converter.js

Uit Wikipedia, de vrije encyclopedie

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!');
  
})();