summaryrefslogtreecommitdiff
path: root/vendor
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2012-03-16 01:14:39 +0200
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2012-03-16 01:14:39 +0200
commit5d2bd5ec3a6d1c9ceb985e0af684f162926b0555 (patch)
tree08491064a542f9a9294b86ab7f67c7d8919040dc /vendor
parentb2c13bdd777838e9837b12e56854e152b8a13f0c (diff)
downloadgitlab-ce-5d2bd5ec3a6d1c9ceb985e0af684f162926b0555.tar.gz
Simple search implementation
Diffstat (limited to 'vendor')
-rw-r--r--vendor/assets/javascripts/jquery.highlight.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/vendor/assets/javascripts/jquery.highlight.js b/vendor/assets/javascripts/jquery.highlight.js
new file mode 100644
index 00000000000..7a67cf99844
--- /dev/null
+++ b/vendor/assets/javascripts/jquery.highlight.js
@@ -0,0 +1,53 @@
+/*
+
+highlight v3
+
+Highlights arbitrary terms.
+
+<http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html>
+
+MIT license.
+
+Johann Burkard
+<http://johannburkard.de>
+<mailto:jb@eaio.com>
+
+*/
+
+jQuery.fn.highlight = function(pat) {
+ function innerHighlight(node, pat) {
+ var skip = 0;
+ if (node.nodeType == 3) {
+ var pos = node.data.toUpperCase().indexOf(pat);
+ if (pos >= 0) {
+ var spannode = document.createElement('span');
+ spannode.className = 'highlight_word';
+ var middlebit = node.splitText(pos);
+ var endbit = middlebit.splitText(pat.length);
+ var middleclone = middlebit.cloneNode(true);
+ spannode.appendChild(middleclone);
+ middlebit.parentNode.replaceChild(spannode, middlebit);
+ skip = 1;
+ }
+ }
+ else if (node.nodeType == 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) {
+ for (var i = 0; i < node.childNodes.length; ++i) {
+ i += innerHighlight(node.childNodes[i], pat);
+ }
+ }
+ return skip;
+ }
+ return this.each(function() {
+ innerHighlight(this, pat.toUpperCase());
+ });
+};
+
+jQuery.fn.removeHighlight = function() {
+ return this.find("span.highlight").each(function() {
+ this.parentNode.firstChild.nodeName;
+ with (this.parentNode) {
+ replaceChild(this.firstChild, this);
+ normalize();
+ }
+ }).end();
+};