From 12100e13e4cb929f772ab72a69304ec4d7c39a83 Mon Sep 17 00:00:00 2001 From: Colin Campbell Date: Wed, 15 Dec 2010 11:01:00 +0000 Subject: [PATCH] Add jquery.uitablefilter.js Add jquery plugin included in a number of templates modified by biblibre Add as a separate commit rather than as part of a feature patch as we may be merging out of sequence --- .../jquery/plugins/jquery.uitablefilter.js | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 koha-tmpl/intranet-tmpl/prog/en/lib/jquery/plugins/jquery.uitablefilter.js diff --git a/koha-tmpl/intranet-tmpl/prog/en/lib/jquery/plugins/jquery.uitablefilter.js b/koha-tmpl/intranet-tmpl/prog/en/lib/jquery/plugins/jquery.uitablefilter.js new file mode 100644 index 0000000000..d80c8ddce8 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/lib/jquery/plugins/jquery.uitablefilter.js @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2008 Greg Weber greg at gregweber.info + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * documentation at http://gregweber.info/projects/uitablefilter + * + * allows table rows to be filtered (made invisible) + * + * t = $('table') + * $.uiTableFilter( t, phrase ) + * + * arguments: + * jQuery object containing table rows + * phrase to search for + * optional arguments: + * column to limit search too (the column title in the table header) + * ifHidden - callback to execute if one or more elements was hidden + */ +jQuery.uiTableFilter = function(jq, phrase, column, ifHidden){ + var new_hidden = false; + if( this.last_phrase === phrase ) return false; + + var phrase_length = phrase.length; + var words = phrase.toLowerCase().split(" "); + + // these function pointers may change + var matches = function(elem) { elem.show() } + var noMatch = function(elem) { elem.hide(); new_hidden = true } + var getText = function(elem) { return elem.text() } + + if( column ) { + var index = null; + jq.find("thead > tr:last > th").each( function(i){ + if( $.trim($(this).text()) == column ){ + index = i; return false; + } + }); + if( index == null ) throw("given column: " + column + " not found") + + getText = function(elem){ return jQuery(elem.find( + ("td:eq(" + index + ")") )).text() + } + } + + // if added one letter to last time, + // just check newest word and only need to hide + if( (words.size > 1) && (phrase.substr(0, phrase_length - 1) === + this.last_phrase) ) { + + if( phrase[-1] === " " ) + { this.last_phrase = phrase; return false; } + + var words = words[-1]; // just search for the newest word + + // only hide visible rows + matches = function(elem) {;} + var elems = jq.find("tbody > tr:visible") + } + else { + new_hidden = true; + var elems = jq.find("tbody > tr") + } + + elems.each(function(){ + var elem = jQuery(this); + jQuery.uiTableFilter.has_words( getText(elem), words, false ) ? + matches(elem) : noMatch(elem); + }); + + last_phrase = phrase; + if( ifHidden && new_hidden ) ifHidden(); + return jq; +}; + +// caching for speedup +jQuery.uiTableFilter.last_phrase = "" + +// not jQuery dependent +// "" [""] -> Boolean +// "" [""] Boolean -> Boolean +jQuery.uiTableFilter.has_words = function( str, words, caseSensitive ) +{ + var text = caseSensitive ? str : str.toLowerCase(); + for (var i=0; i < words.length; i++) { + if (text.indexOf(words[i]) === -1) return false; + } + return true; +} -- 2.39.2