View | Details | Raw Unified | Return to bug 11748
Collapse All | Expand All

(-)a/koha-tmpl/intranet-tmpl/prog/en/lib/jquery/plugins/jquery.uitablefilter.js (-91 lines)
Lines 1-90 Link Here
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
}
91
- 

Return to bug 11748