Bug 20489 Configure illegal file characters https://bugzilla.wikimedia.org/show_bug...
[mediawiki.git] / js2 / mwEmbed / jquery / plugins / jquery.highlight.js
blobc10c805a6d4c98fc74fd304be301dc573aeee860
1 /*
2 highlight v1
4 Highlights arbitrary terms.
5 <http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html>
6 MIT license.
8 Johann Burkard
9 <http://johannburkard.de>
10 <mailto:jb@eaio.com>
12 $(function() {
13  jQuery.highlight = document.body.createTextRange ?
16 Version for IE using TextRanges.
18   function(node, te) {
19    var r = document.body.createTextRange();
20    r.moveToElementText(node);
21    for (var i = 0; r.findText(te); i++) {
22     r.pasteHTML('<span class="highlight">' +  r.text + '<\/span>');
23     r.collapse(false);
24    }
25   }
27  :
30  (Complicated) version for Mozilla and Opera using span tags.
32   function(node, te) {
33    var pos, skip, spannode, middlebit, endbit, middleclone;
34    skip = 0;
35    if (node.nodeType == 3) {
36     pos = node.data.toUpperCase().indexOf(te);
37     if (pos >= 0) {
38      spannode = document.createElement('span');
39      spannode.className = 'highlight';
40      middlebit = node.splitText(pos);
41      endbit = middlebit.splitText(te.length);
42      middleclone = middlebit.cloneNode(true);
43      spannode.appendChild(middleclone);
44      middlebit.parentNode.replaceChild(spannode, middlebit);
45      skip = 1;
46     }
47    }
48    else if (node.nodeType == 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) {
49     for (var i = 0; i < node.childNodes.length; ++i) {
50      i += $.highlight(node.childNodes[i], te);
51     }
52    }
53    return skip;
54   }
56  ;
57 });
59 jQuery.fn.removeHighlight = function() {
60  return this.find("span.highlight").each(function() {
61   this.parentNode.replaceChild(this.firstChild, this).normalize();
62  });