Benutzer:Schnark/js/highlight.js

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
//Dokumentation unter [[Benutzer:Schnark/js/highlight]] <nowiki>
//verwendet $.escapeRE aus jquery.mwExtension.js, $.isFunction aus jquery.js und mw.util.$content aus mediawiki.util.js

/*global mw: true */
/*jshint boss: true *///while (treffer = expr.exec())

(function($, libs){
var highlight = {
 version: 1.4,

 count: 0, //Anzahl der Treffer
 span: 'mark', //mit diesem Element werden die Hervorhebungen gekennzeichnet

 /* Hebt einen bestimmten Ausdruck farblich hervor
  *
  * expr: regulärer Ausdruck mit zwei Klammern: /(vorne)(hervorheben)hinten/g
  * hint: mixed (optional, Standard: kein Hinweis)
  *         string: Hinweis
  *       oder
  *         function: wird mit Treffer aufgerufen, liefert Hinweis zurück
  * color: mixed (optional, Standard: gelb)
  *          string: Hintergrundfarbe
  *        oder
  *          function: wird mit Treffer aufgerufen, liefert Hintergrundfarbe zurück
  * css_class: mixed (optional, Standard: keine Klasse)
  *              string: Klasse
  *            oder
  *              function: wird mit Treffer aufgerufen, liefert Klasse zurück
  *
  * Rückgabe: Anzahl der gefundenen Treffer
  */
 highlight: function(expr, hint, color, css_class) {
   highlight.count = 0;
   highlight.searchWithinNode(mw.util.$content[0], expr, color || 'yellow', hint, css_class);
   return highlight.count;
 },
 //Kopiert aus [[MediaWiki:Gadget-Rechtschreibpruefung.js]] und [[Wikipedia:Bookmarklets]]
 searchWithinNode: function (node, expr, color, hint, css_class) {
  if (node.nodeType === 3) {
     var treffer, new_spans = 0,
         color_func = $.isFunction(color),
         hint_func = $.isFunction(hint),
         class_func = $.isFunction(css_class),
         pos, text, spannode, middlebit, endbit, middleclone;
     while (treffer = expr.exec(node.data)) {
        pos = treffer.index + treffer[1].length;
        text = treffer[2];
        spannode = document.createElement(highlight.span);
        spannode.style.backgroundColor = color_func ? color(text) : color;
        if (hint) {
           spannode.title = hint_func ? hint(text) : hint;
        }
        if (css_class) {
           spannode.className = class_func ? css_class(text) : css_class;
        }
        middlebit = node.splitText(pos);
        endbit = middlebit.splitText(text.length);
        middleclone = middlebit.cloneNode(true);
        spannode.appendChild(middleclone);
        middlebit.parentNode.replaceChild(spannode, middlebit);
        highlight.count++;
        new_spans++;
     }
     return new_spans;
  } else if (node.nodeType === 1 && node.childNodes &&
             node.tagName.toLowerCase() !== 'script' &&
             node.tagName.toLowerCase() !== 'style' &&
             node.tagName.toLowerCase() !== 'form') {
    for (var child = 0; child < node.childNodes.length; child++) {
        child = child + highlight.searchWithinNode(node.childNodes[child], expr, color, hint, css_class);
    }
  }
  return 0;
 },

 highlightWord: function(word, hint, color, css_class) {
   var expr = new RegExp ('()(\\b' + $.escapeRE(word) + '\\b)');
   return highlight.highlight(expr, hint, color, css_class);
 },
 highlightString: function(word, hint, color, css_class) {
   var expr = new RegExp ('()(' + $.escapeRE(word) + ')');
   return highlight.highlight(expr, hint, color, css_class);
 }
};

libs.highlight = highlight;
$(document).trigger('loadWikiScript', ['Benutzer:Schnark/js/highlight.js', highlight]);
})(jQuery, mw.libs);
//</nowiki>