So, hier kommt der erste Prototyp zum Testen. Im Prinzip erfolgen die Ersetzungen mit dynamisch generierter regex in zwei verschachelten Schleifen. Durchsucht wird immer nur der Text der aufgelisteten HTML-Elemente, aktuell nur im Seiteninhalt. (Sollten wir auch die sidebar einbeziehen?).
setTimeout(function(){
var map = {
'Streikende' : 'Streikende',
'Staubecken' : 'Staubecken',
'Teilerfolge' : 'Teilerfolge',
'Urinstinkt' : 'Urinstinkt',
'Analphabeten' : 'Analphabeten',
};
jQuery("#dokuwiki__content").find("h1, h2, h3, h4, h5, h6, p, a, li").each(function(){
var str = jQuery(this).text();
jQuery.each(map,function(key,val){
regex = new RegExp(key, 'g');
str = str.replace(regex,val);
});
jQuery(this).text(str);
});
}, 50);
Der Witz ist, die Trennzeichen müssen auch hier im Programmcode als Unicode-Zeichen [U+00AD] eingefügt werden. Das macht auch Sinn, wenn man darüber nachdenkt. Wir schreiben ja hier sogenannten Unicode UTF-8 und kein HTML. Erst im DOM wird aus dem unsichtbaren Zeichen dann das [­].
Das heißt auch, dass Du für die Bearbeitung der Ersetzungs-Liste einen Editor bräuchtest, der diese Zeichen irgendwie anzeigen kann. Lustigerweise habe ich gerade zufällig im LibreOffice Writer gesehen, dass die Zeichen dort genauso, wie ich das erwarten würde, dargestellt werden: gehighlightet, mit einem kleinen Bindestrich. Die Zeichen können dort sogar mit dem Cursor ausgewält werden und somit direkt eingefügt und bearbeitet werden. Das wäre also schon mal eine Open-Source-Möglichkeit. Und im Windows 10 Editor, sehe ich gerade, werden die Zeichen als vollwertige Minuszeichen angezeigt!
Ich habe den Code in /conf/userscipt.js
getestet. Zum Test habe ich in meinem Testwiki zwei Seiten angelegt mit den folgenden Überschriften und entsprechenden Textabsätzen:
- Der Urinstinkt von Analphabeten aktiviert den Urinstinkt der anderen Analphabeten
- Streikende haben am Staubecken Teilerfolge erzielt und Teilerfolge in Staubecken gefunden
Es sollte für alle gewünschten Elemente funktionieren, hat es bei mir zumindest, soweit ich es sehen konnte. Die Wortliste kannst Du beliebig verlängern! Ich bin mal gespannt, was sich bei unseren weiteren Tests über die Performance des Codes zeigen wird!?
Dann Viel Spaß beim Testen!
LG, Christian