From 6d9df6be4bf0c56179bcd9fdc1643717ea6ea309 Mon Sep 17 00:00:00 2001 From: barclay-reg Date: Sat, 23 Oct 2010 21:21:39 +0200 Subject: [PATCH] fix of issue http://github.com/gregwebs/jquery-uitablefilter/issues/#issue/2; make selection of filtered row more accurate; added testtable which shows the problem from issue 2; added tests for normal filtering and for filtering with inner tables (issue 2) --- jquery.uitablefilter.js | 4 +- test/ui_table_filter_spec.html | 168 +++++++++++++++++++++++++++++++++ 2 files changed, 170 insertions(+), 2 deletions(-) diff --git a/jquery.uitablefilter.js b/jquery.uitablefilter.js index 214f91c..5ada735 100644 --- a/jquery.uitablefilter.js +++ b/jquery.uitablefilter.js @@ -56,11 +56,11 @@ // only hide visible rows matches = function(elem) {;} - var elems = jq.find("tbody > tr:visible") + var elems = jq.find("tbody:first > tr:visible") } else { new_hidden = true; - var elems = jq.find("tbody > tr") + var elems = jq.find("tbody:first > tr") } elems.each(function(){ diff --git a/test/ui_table_filter_spec.html b/test/ui_table_filter_spec.html index b7529c0..c81148d 100644 --- a/test/ui_table_filter_spec.html +++ b/test/ui_table_filter_spec.html @@ -46,6 +46,139 @@ } }) +describe('filterNormalTable', { + before_all : function(){ + var theTable = $("#testtable") + filter = function(pattern) { + $.uiTableFilter( theTable, pattern, 0 ); + } + + resetFilter = function(){ + filter(''); + } + }, + + after_each : function(){ + resetFilter(); + }, + + 'no filter, all rows must be visible' : function(){ + + filter('') + value_of($('#headrow:visible').html()).should_be($('#headrow').html()) + value_of($('#testrow1:visible').html()).should_be($('#testrow1').html()) + value_of($('#testrow2:visible').html()).should_be($('#testrow2').html()) + }, + + 'simple filter 1' : function(){ + + filter('turtle') + value_of($('#headrow:visible').html()).should_be($('#headrow').html()) + value_of($('#testrow1:visible').html()).should_be($('#testrow1').html()) + value_of($('#testrow2:visible').html()).should_be_null() + }, + + 'simple filter 2' : function(){ + + filter('dog') + value_of($('#headrow:visible').html()).should_be($('#headrow').html()) + value_of($('#testrow1:visible').html()).should_be($('#testrow1').html()) + value_of($('#testrow2:visible').html()).should_be_null() + }, + + 'simple filter 3' : function(){ + + filter('whale') + value_of($('#headrow:visible').html()).should_be($('#headrow').html()) + value_of($('#testrow1:visible').html()).should_be_null() + value_of($('#testrow2:visible').html()).should_be($('#testrow2').html()) + }, + + 'simple head filter (head must still be visible)' : function(){ + + filter('sea') + value_of($('#headrow:visible').html()).should_be($('#headrow').html()) + value_of($('#testrow1:visible').html()).should_be_null() + value_of($('#testrow2:visible').html()).should_be_null() + } , + + 'simple filter an resetFilter' : function(){ + filter('turtle') + value_of($('#headrow:visible').html()).should_be($('#headrow').html()) + value_of($('#testrow1:visible').html()).should_be($('#testrow1').html()) + value_of($('#testrow2:visible').html()).should_be_null() + filter('') + value_of($('#headrow:visible').html()).should_be($('#headrow').html()) + value_of($('#testrow1:visible').html()).should_be($('#testrow1').html()) + value_of($('#testrow2:visible').html()).should_be($('#testrow2').html()) + } +}) + + +describe('filterInnerTable', { + before_all : function(){ + var theTable = $("#testtable2") + filter = function(pattern) { + $.uiTableFilter( theTable, pattern, 0 ); + } + + resetFilter = function(){ + filter(''); + } + }, + + after_each : function(){ + resetFilter(); + }, + + 'no filter, all rows must be visible' : function(){ + + filter('') + value_of($('#headrow2:visible').html()).should_be($('#headrow2').html()) + value_of($('#testrow2.1:visible').html()).should_be($('#testrow2.1').html()) + value_of($('#testrow2.2:visible').html()).should_be($('#testrow2.2').html()) + value_of($('#innerHeadRow:visible').html()).should_be($('#innerHeadRow').html()) + value_of($('#innerRow1:visible').html()).should_be($('#innerRow1').html()) + value_of($('#innerRow2:visible').html()).should_be($('#innerRow2').html()) + }, + + + 'filter for non existing value' : function(){ + + filter('blaBlubb') + value_of($('#headrow2:visible').html()).should_be($('#headrow2').html()) + value_of($('#testrow2.1:visible').html()).should_be($('#testrow2.1').html()) + value_of($('#testrow2.2:visible').html()).should_be_null() + value_of($('#innerHeadRow:visible').html()).should_be($('#innerHeadRow').html()) + value_of($('#innerRow1:visible').html()).should_be($('#innerRow1').html()) + value_of($('#innerRow2:visible').html()).should_be($('#innerRow2').html()) + }, + + 'filter for existing value (complete inner table must disappear)' : function(){ + + filter('whale') + value_of($('#headrow2:visible').html()).should_be($('#headrow2').html()) + value_of($('#testrow2.1:visible').html()).should_be_null() + value_of($('#testrow2.2:visible').html()).should_be_null() + value_of($('#innerHeadRow:visible').html()).should_be($('#innerHeadRow').html()) + value_of($('#innerRow1:visible').html()).should_be($('#innerRow1').html()) + value_of($('#innerRow2:visible').html()).should_be($('#innerRow2').html()) + }, + + 'filter for existing value which is in the inner table (all rows should disappear, but inner table should be (theoreticaly) visible)' : function(){ + + filter('turtle') + value_of($('#headrow2:visible').html()).should_be($('#headrow2').html()) + value_of($('#testrow2.1:visible').html()).should_be($('#testrow2.1').html()) + value_of($('#testrow2.2:visible').html()).should_be_null() + value_of($('#innerHeadRow:visible').html()).should_be($('#innerHeadRow').html()) + value_of($('#innerRow1:visible').html()).should_be($('#innerRow1').html()) + value_of($('#innerRow2:visible').html()).should_be($('#innerRow2').html()) + } + + +}) + // ]]> @@ -67,6 +200,41 @@ whalemonkey + + + + + + + + + + + + + + + +
sealand
turtle + + + + + + + + + + + + + + + + + +
innerHead1 mineinnerHead2 yours
innerRow1.1 duck turtleinnerRow1.2 horse
innerRow2.1 catinnerRow2.2 dog
+
whalemonkey