Gebruiker:Erik Baas/common.js

Uit Wikibooks

Hulp bij het instellen van uw voorkeurenLet op! Nadat u de veranderingen heeft opgeslagen, moet u de cache van uw browser nog legen om ze daadwerkelijk te zien. In onderstaande tabel staat aangegeven hoe u dit doet.

Mozilla reload (of ctrl-r)
IE ctrl-f5
Opera f5
Safari cmd-r
Konqueror ctrl-r
// <nowiki>

// importScript('Gebruiker:Erik Baas/markeer.js');  /* markeer & next*/

$(function () {
 automatePurgeConfirmationDialog();
 getEditCount();
 replaceObsoleteHTMLTags();
 markeerLintErrors();
 addPurgeTab();
 return;
});

function getEditCount() {
 /* Voegt edit-count toe aan koptekst op Speciaal:Bijdragen/(gebruikersnaam) */
 /* 
overbodig sinds 20230828, zie https://nl.wikibooks.org/w/index.php?title=Wikibooks:Lerarenkamer/Nieuwsbrieven_2023&oldid=382431#Tech_News:_2023-35 
 if (mw.config.get('wgRelevantPageName') == 'Speciaal:Bijdragen/' + mw.config.get('wgUserName').replace(/ /g, "_")) {
  var obj = document.getElementById('firstHeading');
  obj.innerHTML = obj.innerHTML + ' <span style="font-size: small;"> (' + mw.config.get('wgUserEditCount') + ')</span>';
 }
 */
 return;
}

function capFirst(str) {
 /* fix all-caps en camel-case */
 return str[0].toUpperCase() + str.slice(1).toLowerCase();
}

function replaceObsoleteHTMLTags() {
 var prev = '', sub='', subColor='', subFace='', subSize='', found='', text='', res='', X, Y, Z;
 var obj = document.getElementById('wpTextbox1');
 if (obj == null) return;                                           /* exit */
 if (! (mw.config.get('wgPageContentModel') == 'wikitext')) return; /* exit */
 var text = obj.value;
 if (text.search(/{{Wiu[2,3]/i) > -1) {
  alert('Stop: werk in uitvoering!');
  return;                                   /* exit */
 }

 createDebug();

 /* Linkfixes - 20220306*/
 text = text.replace(/{{HTML-standaardattributen/, "{{HTML standaardattributen");
 text = text.replace(/{{HTML tags/, "{{HTML elementen");

/* <font> */
while (true) {
 // common pt. 1
 X = /<font.*?>/i.exec(text);   // .exec: if not found: X=null, X[0] etc. = undefined !!
 if (X == null) break;  // geen font-tags
 X = X + ''; // !!
 subColor = subFace = subSize = X.replace(/(\x22|\x27)/g, "");   // - ' en "

 /* <font color> */
 if (subColor.search(/color/i) > -1) {
  subColor = /color *= *[a-z,0-9,#]*/i.exec(subColor) + '';  // !!
  if (subColor) {
   subColor = subColor.replace(/ *= */, ": ") + ";";
   subColor = subColor.toLowerCase();
  }
 }
 else {subColor = null;} // geen color-attribute

 /* <font face> */
 if (subFace.search(/face/i) > -1) {
  subFace = subFace.replace(/ *, */g, ",");
  subFace = /face *= *[a-z,0-9,\,]*/i.exec(subFace) + '';  // !!
  if (subFace) {
   subFace = subFace.replace(/,/g, ', ');
   subFace = subFace.replace(/face *= */i, 'font-family: ') + ';';
  }
 }
 else {subFace = null;} // geen face-attribute



 /* <font size> */
  // todo
  // tijdelijk: subSize = null;
 if (subSize.search(/size/i) > -1) {

  debug(subSize);  // <font color=red face=Tahoma size=3>
  subSize = /(?<=size *= *).*?(?=(\x20,'>'))/i.exec(subSize) + '';
  debug(subSize);  // 

  // subSize = subSize.replace(/.../, "...");
 }
 else {subSize = null;} // geen size-attribute

// tijdelijk: 
subSize = null;



 // common pt. 2
 Y = '<span style="';
  //debug(Y);
 if (subColor) Y += subColor;
  //debug(Y);
 if (subFace)  Y += (subColor ? ' ' : '') + subFace;
  //debug(Y);
 if (subSize)  Y += (subColor || subFace ? ' ' : '') + subSize;
  //debug(Y);
 Y += '">';
  //debug(Y);

 text = text.replace(X,Y);
 text = text.replace(/<\/font/ig, "</span");
} // while (true)

 /*
 ToDo:
 - font color/size/face !!!
 - uitzonderingen maken voor elementen tussen blockquote-, nowiki-, pre- en comment-tags !
 */


 /*** Obsolete elements:***/

 /* <big> */
 text = text.replace(/(<big>){3,6}/ig, '<span style="font-size: xx-large;">'); //xxx-large werkt niet in Chrome !
 text = text.replace(/(<big>){2}/ig, '<span style="font-size: x-large;">');
 // 20220106: x-large voor zon en water
 if (mw.config.get('wgTitle').indexOf("Leer jezelf ecologisch tuinieren") > -1) {
  text = text.replace(/(?<=\| *zon *=.*)<big>/ig, '<span style="font-size: x-large;">');
  text = text.replace(/(?<=\| *water *=.*)<big>/ig, '<span style="font-size: x-large;">');
 }
 text = text.replace(/<big/ig, '<span style="font-size: large;"');
 text = text.replace(/(<\/big *[a-z|0-9]*>){1,6}/ig, "</span>");

 /* <center> */
 text = text.replace(/<center/ig, '<div style="text-align: center;"');
 text = text.replace(/<\/center/ig, "</div");

 /* <small> */
 text = text.replace(/(<small>){3,6}/ig, '<span style="font-size: xx-small;">');
 text = text.replace(/(<small>){2}/ig, '<span style="font-size: x-small;">');
 text = text.replace(/<small/ig, '<span style="font-size: small;"');
 text = text.replace(/(<\/small *[a-z|0-9]*>){1,6}/ig, "</span>");

 /* <source> 20220116 */
 text = text.replace(/<source/ig,'<syntaxhighlight');
 text = text.replace(/<\/source/ig,'</syntaxhighlight');

 /* <strike> */
 text = text.replace(/<strike/ig, "<s");
 text = text.replace(/<\/strike/ig, "</s");

 /* <tt> */
 text = text.replace(/<tt/ig, "<code");
 text = text.replace(/<\/tt/ig, "</code");

 /*** Diversen: ***/

 /* <br> */
 text = text.replace(/\x20*<\/?br\x20?\/? ?>/ig, "<br>");

 /* <br clear=left/right/all/both> */
 text = text.replace(/\x20*<br clear ?= ?(\x22|\x27)?left(\x22|\x27)?\x20?\/?>/ig,       '<br style="clear: left;">');
 text = text.replace(/\x20*<br clear ?= ?(\x22|\x27)?right(\x22|\x27)?\x20?\/?>/ig,      '<br style="clear: right;">');
 text = text.replace(/\x20*<br clear ?= ?(\x22|\x27)?(all|both)(\x22|\x27)?\x20?\/?>/ig, '<br style="clear: both;">');

 /* <hr> */
 text = text.replace(/<\/?hr\x20?\/?>/ig, "<hr>");

 /* [[categorie */
 text = text.replace(/\[\[categorie/ig, "[[Categorie");

 /* prettytable */
 text = text.replace(/prettytable/ig, "wikitable");

 /* WSBN */
 text = text.replace(/WSBN( |-|_)?nummer/ig, "WSBN");

 text = text.replace(/.*Hier.*onderhoudsmeldingen.*\n/ig, "");

 /* . ná <ref> */
 while(true) {
  X = /(?<!\.) ?<ref>.*?<\/ref>\./.exec(text);
  if (X == null) break;
  Y = X[0].replace(/ ?<ref>/,'.<ref>');
  Y = Y.replace('</ref>.','</ref>');
  text = text.replace(X,Y);
 }

 /* sjablonen en Magic Words */
 text = text.replace(/{{{/g, "aW~d6-8Ht#yV_5");  // vervang "{{{" tijdelijk door code om varabelen te onderscheiden van sjablonen

 /* Magic Words - 20230323 */
 text = text.replace(/\{\{#categorytree:/g, "{{#Categorytree:");
 text = text.replace(/\{\{#expr:/g,      "{{#Expr:");
 text = text.replace(/\{\{\s?#if:\s?/ig, "{{#If:");
 text = text.replace(/\{\{#invoke:/g,    "{{#Invoke:");
 text = text.replace(/\{\{#pos:/g,       "{{#Pos:");
 text = text.replace(/\{\{#switch:/g,    "{{#Switch:");

 /* Magic Words met 2 hoofdletters: 20230421 */ 
 text = text.replace(/\{\{#ife/ig, "{{#IfE");

 /* oud:
 text = text.replace(/\{\{#iferror:/g,   "{{#IfError:");
 text = text.replace(/\{\{#ifexpr:/g,    "{{#IfExpr:");
 text = text.replace(/\{\{#ifexist:/g,   "{{#IfExist:");
 text = text.replace(/\{\{#ifeq:/g,      "{{#IfEq:");
 */

 /* ISBN 20230625 */
 //text = text.replace(/ISBN\s{1,3}/ig, "{{ISBN|");
 // debug ("ISBN checken!");
 // text = text.replace(/(?<=\{\{ISBN\|[0-9%s]{8,13})(( )|\.|,|\n)/ig, "}} ");  //  <-


 /* ISBN exp. 20240121 */
 text = text.replace(/ISBN\s{1,3}([0-9]\-?)*/ig, "{{$&}}");
 text = text.replace(/\{\{ISBN\s{1,3}/ig, "{{ISBN|");


 /* Sjabloonredirects vervangen 20220209 */
 text = text.replace(/{{Beg(innetje)?}}/ig, "{{Begin}}");

 text = text.replace(/{{Alleen afdrukken ?(\|\n|\n\|)/ig, '{{Alleen afdrukken inline\n|\n'); // extra \n tbv. sommige wikicodes
 text = text.replace(/{{Alleen afdrukken ?\|/ig,          '{{Alleen afdrukken inline|');
 text = text.replace(/{{Herhalen ?\|/ig,                  '{{Repeat|');
 text = text.replace(/{{Niet afdrukken ?(\|\n|\n\|)/ig,   '{{Niet afdrukken block\n|\n');    // extra \n tbv. sommige wikicodes
 text = text.replace(/{{Niet afdrukken ?\|/ig,            '{{Niet afdrukken block|');
 text = text.replace(/{{Receptmetafbeelding/ig,           "{{Recept"); // 20230312
 text = text.replace(/{{Zieook ?(\|\n|\n\|)/ig,           '{{Zie ook\n|\n');                 // extra \n tbv. sommige wikicodes
 text = text.replace(/{{Zieook ?\|/ig,                    '{{Zie ook|');
 text = text.replace(/{{StringReplace ?\|/ig,             '{{Replace|');
 text = text.replace(/{{Crd ?\|/ig,                       '{{Akkoord|');
 text = text.replace(/{{Akkoorden ?\|/ig,                 '{{Akkoord|');

 // eerst toepassen op _alle_ sjablonen, ipv. check op overbodige "|" ?


 /* sjabloonnaam met hoofdletter */
 {
  while(true){
   X = /{{[a-z]/.exec(text);
   if (X == null) break;
   Y = X[0].toUpperCase();
   text = text.replace(X,Y);
  }

 /* Idem in Sjabloon:Tl: 20230421  -- ToDo 
  while(true){
   X = /{{tl\|[A-Za-z]/i.exec(text);
   alert("X1=" + X);
   if (X == null) break;
   alert("X2=" + X);
   Y = X[0].toUpperCase();
   alert("Y=" + Y);
   text = text.replace(X, "{{Tl|" + Y);
   alert("3=" + text.replace(X, "{{Tl|" + Y));

  / alert(X + " - " Y + " - " + text.replace(X, "{{Tl|" + Y));
  }
*/

  // overbodige pipe na sjabloonnaam
  prev = text;
  text = text.replace(/(?<={{[a-z,0-9, ,-]*) *\| *\n/ig, '\n|\n');
  if (!(prev == text)) {
   debug('checken: evt. eerste sjabloonparameter(s)!'); // alert
  }
 }

 text = text.replace(/aW~d6-8Ht#yV_5/g, "{{{");     // herstel code naar "{{{"            ---------------

 /* {{Sub}} onderaan */
 X = text.search(/{{sub}}/i);
 if (X > -1 && X < 50) {text = text.replace(/{{sub}}\n?/i, '') + '{{Sub}}';}

 /* lege regels voor {{sub}} */
 text = text.replace(/\n*{{sub}}/ig,'\n{{Sub}}');

 /* <tr> |- */
 text = text.replace(/\|-+/g, "|-");

 /* overbodige laatste <tr> */
 text = text.replace(/ *\|-\x20*\n *\|}/g, "|}");

 /* wikicode hr: 4 streepjes */
 text = text.replace(/^-{5,}/g,  "----");
 text = text.replace(/\n-{5,}/g, "\n----");

 /* http:// */
 prev = text;
 text = text.replace(/http:\/\//ig, 'https://');
 if (!(prev == text)) {debug('Check externe links (https)!');}  // alert

 /* "xxe eeuw" in tekst */ {  // 20220119
  /* disabled: mag geen _links_ wijzigen ! 20220215 
   text = text.replace(/(?<=(1|2)?[0-9])e eeuw/g,'<sup>e</sup> eeuw');
   text = text.replace(/(?<=(1|2)?[0-9])e-eeuw/g,'<sup>e</sup>-eeuw');
  */
 }

 text = text.replace(/\[\[categorie:/ig, "[[Categorie:");
 text = text.replace(/\[\[:categorie:/ig, "[[:Categorie:");

 /* Afsluitende tag op Categorie: 20220124, v2 */
 if (mw.config.get('wgNamespaceNumber') == 14) {
  text = text.replace(/'''{{PAGENAME}}(?!''')/i, "'''{{PAGENAME}}'''");
 }


 /* Check op nested span tags - 20220218 */
 if (text.search(/<\/span( color)?> ?<\/span>/i) > -1 ){
  // alert('Check: nested span tags!?');
  text = text.replace(/"><span style="/ig, ' ')                    /* erg bot: alleen voor eco tuin ?? */
  text = text.replace(/<\/span( color)?> ?<\/span>/ig, '</span>'); /*  ,,  */
 }

 /* geen lege regel na kopjes - 20230724 */
 text = text.replace(/==\n\n(?!==)/g, "==\n");

 /*** Eenmalige acties ***/
 text = text.replace(/\{\{Clear\}\}/ig,           '{{Clearboth}}');
 text = text.replace(/\{\{noindex\}\}/ig,         '__NOINDEX__');
 text = text.replace(/\{\{Abc\}\}/ig,             '{{Alfabet met ankers}}');  /* 20230414 */
 text = text.replace(/\{\{TOCRechts/ig,           '{{TOC rechts');            /* 20230417 */
 text = text.replace(/\{\{TOCLinks/ig,            '{{TOC links');             /* 20230417 */
 text = text.replace(/\{\{Wikt(?=(\||\}))/ig,     '{{Wiktionary');            /* 20230514 */
 text = text.replace(/\{\{Woordenboek Index\}/ig, '{{Alfabet met links}');    /* 20230520 */
 text = text.replace(/\{\{Bladeren(2|3)/ig,       '{{Bladeren4');             /* 20230531 */
 text = text.replace(/se wikipedia/ig,            'stalige Wikipedia');       /* 20230614 */
 text = text.replace(/(?<=g)allerij/ig,           'alerij');                  /* 20230614 */

 /* tbv. lintfouten op overleg gebruiker */
 // text = text.replace(/('''|\<\/?b\>)/ig, "");                                 /* 20230627 */

 /* tbv. verkeerd geneste tags op overleg:gebruiker */
 // text = text.replace(/\<\/?span.*?\>/ig, "");                                 /* 20230627 */
 // obj.value = 'Lintfouten: Verkeerd geneste tags';

 /* test: CSS beter leesbaar maken - 20230519 */
 text = text.replace(/(?<=style\=\".*): *(?=\>)/ig, ": ");  /* too greedy; check "http(s):, /File: etc. ! */
 text = text.replace(/(?<=style\=\"); ?(?=\")/ig,           "; ");


 /* ------ oud -------------
 text = text.replace(/\[\[Categor(ie|y):Sjablonen(?=[\||\]\]])/ig, '[[Categorie:Sjablonen Wikibooks-gebruikers');
 text = text.replace(/\[\[Categor(ie|y):Sjablonen(?=[\||\]\]])/ig, '[[Categorie:Sjablonen voor een bepaald boek');
 // "xxe eeuw" in titel  {  // 20220119
  var title = mw.config.get('wgTitle');
  var pattern = /(?<=(1|2)?[0-9])e-eeuw/;
  if (text.search(/{{DISPLAYTITLE:/) == -1) {
   if (title.search(pattern) > -1) {
    text = '{{DISPLAYTITLE:' + title.replace(pattern,'<sup>e</sup>-eeuw') + '}}' j+ text;
   }
  }
  else debug('{{DISPLAYTITLE: is niet vervangen');
 }

 // tijdelijk (tbv "Lintfouten: Afsluitende tag ontbreekt")
 text = text.replace(/{{cat\|?/ig, "{{Cat");
 text = text.replace(/{{boekcat\|/ig, "{{Boekcat");
 text = text.replace("'''{{PAGENAME}}", "'''{{PAGENAME}}'''");
 */
 /* verplaatsen naar andere categorie:
 text = text.replace(/\[\[Categorie:Aardrijkskunde/ig, "[[Categorie:Geografie");
 */
 /* sig BeeBringer:
 text = text.replace(/\[\[Bestand:BeeBringer.png\‎]\].*?\<\/sup>/, '\n[[Gebruiker:BeeBringer|BeeBringer]] [[Overleg_gebruiker:BeeBringer|overleg]]');
 text = text.replace(/u wijzingen/, 'uw wijzigingen');
 */

 /* div. typefouten */
 // text = text.replace(/(?<=w)ijzingen/, 'ijzigingen');
 text = text.replace(/paramaters/, 'parameters');

 /*** Einde ***/
 /* niets veranderd? */
 if (obj.value == text) return;                                   /* exit */

 obj.value = text;                                                /* klaar om op te slaan */
 // obj.value = obj.value + '\n\n' + text;  // TIJDELIJK!!

 /*** Samenvatting ***/
 var obj = document.getElementById('wpSummary');
 // obj.value = 'cat'; 
 // obj.value = 'Lintfouten: Verouderde HTML-elementen';
 // obj.value = 'Lintfouten: Afsluitende tag ontbreekt';

/* tijdelijk (voor eenmalige acties): */
// obj.value = '[[Categorie:Sjablonen voor een bepaald boek]]';
// obj.value = '[[Categorie:Sjablonen Wikibooks-gebruikers]]';

 /*** Niet volgen tenzij reeds eerder gevolgd ***/
 var obj = document.getElementById('ca-watch');
 if (obj) {document.getElementById('wpWatchthis').checked = false;}
 return;
}

function addPurgeTab() {
 /* Voegt een "purge" tabje toe
 (bron: https://nl.wikipedia.org/wiki/Gebruiker:Pjetter/monobook.js) */
 if(!document.getElementById) return;
 var x = document.getElementById('ca-history');
 if(! x) { return; }
 var tabs = document.getElementById('p-cactions').getElementsByTagName('ul')[0];
 if(x.children) { x = x.children[0]; }
 else { x = x.childNodes[0]; }
 addlilink(tabs, x.href.replace(/=history/, "=purge"), 'purge', 'ca-purge');
 // ta['ca-purge'] = ['g', 'Purge the internal cache for this page']; // "ta is not defined"
}

function addlilink(tabs, url, name, id) {
 /* voegt tabjes toe
 (bron: https://nl.wikipedia.org/wiki/Gebruiker:Pjetter/monobook.js) */
 var na = document.createElement('a');
 na.href = url;
 na.appendChild(document.createTextNode(name));
 var li = document.createElement('li');
 li.id = id;
 li.appendChild(na);
 tabs.appendChild(li);
 return li;
}

function experiment() { // (om 'Inklappen' resp. 'Uitklappen' te vervangen)
 UitklapDivHide = '▲'; // U+25B2 kleiner: ▴ u+25B4   werkt niet
 UitklapDivShow = '▼'; // U+25BC kleiner: ▾ u+25BE    ,,    ,,
}

function automatePurgeConfirmationDialog() {
/* Automate purge confirmation dialog. (https://en.wikipedia.org/wiki/Wikipedia:Purge) */
 if (mw.config.get('wgAction') === 'purge' ) {
  $('form[action*="action=purge"]').submit();
 }
 return;
}

function markeerLintErrors() {  // 20220114
 // Markeert aantallen > 0 op Speciaal:LintErrors met een rode achtergrond.
 if (! (mw.config.get('wgPageName') == 'Speciaal:LintErrors')) return;  /* exit */
 var list = document.getElementsByTagName("BDI");
 if (list.length == 0) return;
 for (i=0; i<list.length; i++) {
  if (! (list[i].innerHTML == '(0 fouten)')) {
   list[i].style.background = '#ff8080';
  }
 }
 return;
}

function createDebug() {  // v2, 20220113
 // Creëert een debug-venster direct boven het bewerkingsvak.
 var obj = document.getElementById('wpTextbox1');
 var parent = document.getElementById('editform');        
 var newItem = document.createElement("DIV");
 newItem.id = 'debug';
 newItem.style.display='none';
 var textnode = document.createTextNode("");
 newItem.appendChild(textnode);
 parent.insertBefore(newItem, obj);
}

function debug(txt) {
 // Voegt een regel tekst toe aan het debug-venster.
 var obj = document.getElementById('debug');
 if (obj == null) return;                        /* exit */                 
 obj.style.display = 'block';
 obj.innerHTML = obj.innerHTML + txt.replace(/</g,'&lt;') + '<br>';
}

// </nowiki>
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.