Bug 11310: update the XSLT for the Bootstrap theme
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / lib / jquery / plugins / jquery.uitablefilter.js
1 /*
2  * Copyright (c) 2008 Greg Weber greg at gregweber.info
3  * Dual licensed under the MIT and GPL licenses:
4  * http://www.opensource.org/licenses/mit-license.php
5  * http://www.gnu.org/licenses/gpl.html
6  *
7  * documentation at http://gregweber.info/projects/uitablefilter
8  *
9  * allows table rows to be filtered (made invisible)
10  * <code>
11  * t = $('table')
12  * $.uiTableFilter( t, phrase )
13  * </code>
14  * arguments:
15  *   jQuery object containing table rows
16  *   phrase to search for
17  *   optional arguments:
18  *     column to limit search too (the column title in the table header)
19  *     ifHidden - callback to execute if one or more elements was hidden
20  */
21 jQuery.uiTableFilter = function(jq, phrase, column, ifHidden){
22   var new_hidden = false;
23   if( this.last_phrase === phrase ) return false;
24
25   var phrase_length = phrase.length;
26   var words = phrase.toLowerCase().split(" ");
27
28   // these function pointers may change
29   var matches = function(elem) { elem.show() }
30   var noMatch = function(elem) { elem.hide(); new_hidden = true }
31   var getText = function(elem) { return elem.text() }
32
33   if( column ) {
34     var index = null;
35     jq.find("thead > tr:last > th").each( function(i){
36       if( $.trim($(this).text()) == column ){
37         index = i; return false;
38       }
39     });
40     if( index == null ) throw("given column: " + column + " not found")
41
42     getText = function(elem){ return jQuery(elem.find(
43       ("td:eq(" + index + ")")  )).text()
44     }
45   }
46
47   // if added one letter to last time,
48   // just check newest word and only need to hide
49   if( (words.size > 1) && (phrase.substr(0, phrase_length - 1) ===
50         this.last_phrase) ) {
51
52     if( phrase[-1] === " " )
53     { this.last_phrase = phrase; return false; }
54
55     var words = words[-1]; // just search for the newest word
56
57     // only hide visible rows
58     matches = function(elem) {;}
59     var elems = jq.find("tbody > tr:visible")
60   }
61   else {
62     new_hidden = true;
63     var elems = jq.find("tbody > tr")
64   }
65
66   elems.each(function(){
67     var elem = jQuery(this);
68     jQuery.uiTableFilter.has_words( getText(elem), words, false ) ?
69       matches(elem) : noMatch(elem);
70   });
71
72   last_phrase = phrase;
73   if( ifHidden && new_hidden ) ifHidden();
74   return jq;
75 };
76
77 // caching for speedup
78 jQuery.uiTableFilter.last_phrase = ""
79
80 // not jQuery dependent
81 // "" [""] -> Boolean
82 // "" [""] Boolean -> Boolean
83 jQuery.uiTableFilter.has_words = function( str, words, caseSensitive )
84 {
85   var text = caseSensitive ? str : str.toLowerCase();
86   for (var i=0; i < words.length; i++) {
87     if (text.indexOf(words[i]) === -1) return false;
88   }
89   return true;
90 }