PageRenderTime 53ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/contentbox-admin/includes/js/jquery.uitablefilter.js

http://github.com/Ortus-Solutions/ContentBox
JavaScript | 88 lines | 54 code | 9 blank | 25 comment | 13 complexity | a842f9d7cdea810dd5fb65d0aa2daccb MD5 | raw file
Possible License(s): Apache-2.0, CPL-1.0, LGPL-2.1, MPL-2.0-no-copyleft-exception, BSD-3-Clause
  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. var phrase_length = phrase.length;
  25. var words = phrase.toLowerCase().split(" ");
  26. var success = function(elem) { elem.show() }
  27. var failure = function(elem) { elem.hide() }
  28. if( column ) {
  29. var index = null;
  30. jq.find("thead > tr:last > th").each( function(i){
  31. if( $(this).text() == column ){
  32. index = i;
  33. return false;
  34. }
  35. });
  36. var iselector = "td:eq(" + index + ")";
  37. var search_text = function( ){
  38. var elem = jQuery(this);
  39. jQuery.uiTableFilter.has_words( jQuery(elem.find(iselector)).text(), words ) ?
  40. success(elem) : failure(elem);
  41. }
  42. }
  43. else {
  44. var search_text = function(){
  45. var elem = jQuery(this);
  46. jQuery.uiTableFilter.has_words( elem.text(), words ) ? elem.show() : elem.hide();
  47. }
  48. }
  49. // if added one letter to last time,
  50. // just check newest word and only need to hide
  51. if( (words.size > 1) && (phrase.substr(0, phrase_length - 1) ===
  52. this.last_phrase) ) {
  53. if( phrase[-1] === " " )
  54. { this.last_phrase = phrase; return false; }
  55. success = function(elem) { elem.hide(); new_hidden = true; }
  56. failure = function(elem) {;}
  57. var words = words[-1];
  58. jq.find("tbody tr:visible").each( search_text )
  59. }
  60. else {
  61. new_hidden = true;
  62. jq.find("tbody > tr").each( search_text );
  63. }
  64. last_phrase = phrase;
  65. if( ifHidden && new_hidden ) ifHidden();
  66. return jq;
  67. };
  68. jQuery.uiTableFilter.last_phrase = ""
  69. // not jQuery dependent
  70. // "" [""] -> Boolean
  71. // "" [""] Boolean -> Boolean
  72. jQuery.uiTableFilter.has_words = function( str, words, caseSensitive )
  73. {
  74. var text = caseSensitive ? str : str.toLowerCase();
  75. for (var i=0; i < words.length; i++) {
  76. if (text.indexOf(words[i]) === -1) return false;
  77. }
  78. return true;
  79. }