Filter: add filter_excludeFilter option

This commit is contained in:
Mottie 2014-09-08 20:27:52 -05:00
parent d0ed9d1fa7
commit 356ee47026
3 changed files with 91 additions and 10 deletions

View File

@ -64,12 +64,19 @@
// this option can either be a string (class applied to all filters) or an array (class applied to indexed filter)
filter_cssFilter : '', // or []
// add a default column filter type "~{query}" to make fuzzy searches default;
// "{q1} AND {q2}" to make all searches use a logical AND.
filter_defaultFilter : {},
// filters to exclude, per column
filter_excludeFilter : {},
// jQuery selector (or object) pointing to an input to be used to match the contents of any column
// please refer to the filter-any-match demo for limitations - new in v2.15
filter_external : '',
// class added to filtered rows (rows that are not showing); needed by pager plugin
filter_filteredRow : 'filtered',
filter_filteredRow : 'filtered',
// add custom filter elements to the filter row
// see the filter formatter demos for more specifics
@ -104,7 +111,7 @@
// if true, server-side filtering should be performed because client-side filtering will be disabled, but
// the ui and events will still be used.
filter_serversideFiltering: false,
filter_serversideFiltering : false,
// Set this option to true to use the filter to find text from the start of the column
// So typing in "a" will find "albert" but not "frank", both have a's; default is false
@ -295,8 +302,20 @@ $(function(){
<td>this option contains the name of the data-attribute which contains the default (starting) filter value.</td>
</tr>
<tr id="filter-defaultfilter">
<td><span class="permalink">filter_defaultFilter</span></td>
<td>{ }</td>
<td>Set a default filter for a set column (<span class="version">v2.17.8</span>).</td>
</tr>
<tr id="filter-excludefilter">
<td><span class="permalink">filter_excludeFilter</span></td>
<td>{ }</td>
<td>Set a column to exclude the chosen filter types (range, exact, notMatch, etc) (<span class="version">v2.17.8</span>).</td>
</tr>
<tr id="filter-external">
<td><span class="permalink">filter_external</span></td>
<td><a href="#" class="permalink">filter_external</a></td>
<td>''</td>
<td>
Set to a jQuery selector (or object) pointing to an input to be used to match the contents of any column (<span class="version">v2.15</span>).
@ -405,12 +424,24 @@ $(function(){
<td>Typing delay in milliseconds before starting a search.</td>
</tr>
<tr id="filter-search-filtered">
<td><span class="permalink">filter_searchFiltered</span></td>
<td>true</td>
<td>Allow searching through already filtered rows in special circumstances; will speed up searching in large tables if <code>true</code>.</td>
</tr>
<tr id="filter-select-source">
<td><span class="permalink">filter_selectSource</span></td>
<td>null</td>
<td>Include a function to return an array of values to be added to the column filter select (<span class="version">v2.16.0</span>).</td>
</tr>
<tr id="filter-select-source-separator">
<td><span class="permalink">filter_selectSourceSeparator</span></td>
<td>null</td>
<td><code>filter_selectSource</code> array text left of the separator is added to the option value, right into the option text.</td>
</tr>
<tr id="filter-serverside-filtering">
<td><span class="permalink">filter_serversideFiltering</span></td>
<td>false</td>

View File

@ -1624,7 +1624,9 @@ $(function(){
// data attribute in the header cell that contains the default filter value
filter_defaultAttrib : 'data-value',
// add a default column filter type "~{query}" to make fuzzy searches default; "{q1} AND {q2}" to make all searches use a logical AND.
filter_defaultFilter : [],
filter_defaultFilter : {},
// filters to exclude, per column
filter_excludeFilter : {},
// jQuery selector string (or jQuery object) of external search inputs
filter_external : '',
// class added to filtered rows; needed by pager plugin
@ -2094,6 +2096,47 @@ $(function(){
<td><a href="example-widget-filter-any-match.html">Example</a></td>
</tr>
<tr id="widget-filter-exclude-filter">
<td><a href="#" class="permalink">filter_excludeFilter</a></td>
<td>Object</td>
<td>{ }</td>
<td>Additional CSS class applied to each filter (<span class="version">v2.17.8</span>).
Filter widget: Exclude a filter type(s) for a column.
<div class="collapsible">
<br>
Use the <a href="#widget-excludefilter"><code>filter_excludeFilter</code></a> option as follows:
<pre class="prettyprint lang-js">$(function(){
$("table").tablesorter({
widgets: ["filter"],
widgetOptions : {
filter_excludeFilter : {
// target a column by class name or column index (zero-based)
'.title' : 'range',
// separate multiple filter types using spaces
2 : 'range notMatch exact'
}
}
});
});</pre>
Exclusion names must be separated by a comma. Here is a full list of filter type names:
<ul>
<li><code>and</code> - logical <code>" AND "</code> or <code> && </code> type filter.</li>
<li><code>exact</code> - exact match (using <code>"</code> or <code>=</code>).</li>
<li><code>fuzzy</code> - fuzzy match (<code>~</code>)</li>
<li><code>notMatch</code> - not match (<code>!</code> or <code>!=</code>)</li>
<li><code>operators</code> - comparison filters (<code>&lt; &lt;= &gt;= &gt;</code>)</li>
<li><code>range</code> - range (<code> - </code> or <code> to </code>)</li>
<li><code>regex</code> - regex (<code>/\d/</code>)</li>
<li><code>wild</code> - wild card matching (<code>?</code> for single characters, <code>*</code> for multiple characters not including spaces, or <code>|</code> or <code> OR </code> for a logical OR.</li>
</ul>
</div>
</td>
<td></td>
</tr>
<tr id="widget-filter-external">
<td><a href="#" class="permalink">filter_external</a></td>
<td>String</td>

View File

@ -354,7 +354,8 @@ ts.addWidget({
filter_childRows : false, // if true, filter includes child row content in the search
filter_columnFilters : true, // if true, a filter will be added to the top of each table column
filter_cssFilter : '', // css class name added to the filter row & each input in the row (tablesorter-filter is ALWAYS added)
filter_defaultFilter : [], // add a default column filter type "~{query}" to make fuzzy searches default; "{q1} AND {q2}" to make all searches use a logical AND.
filter_defaultFilter : {}, // add a default column filter type "~{query}" to make fuzzy searches default; "{q1} AND {q2}" to make all searches use a logical AND.
filter_excludeFilter : {}, // filters to exclude, per column
filter_external : '', // jQuery selector string (or jQuery object) of external filters
filter_filteredRow : 'filtered', // class added to filtered rows; needed by pager plugin
filter_formatter : null, // add custom filter elements to the filter row
@ -1033,7 +1034,7 @@ ts.filter = {
if (table.config.lastCombinedFilter === combinedFilters || table.config.widgetOptions.filter_initializing) { return; }
var len, $rows, rowIndex, tbodyIndex, $tbody, $cells, columnIndex,
childRow, lastSearch, matches, result, showRow, time, val, indx,
notFiltered, searchFiltered, filterMatched, fxn, ffxn,
notFiltered, searchFiltered, filterMatched, excludeMatch, fxn, ffxn,
regex = ts.filter.regex,
c = table.config,
wo = c.widgetOptions,
@ -1181,6 +1182,10 @@ ts.filter = {
for (columnIndex = 0; columnIndex < c.columns; columnIndex++) {
data.filter = filters[columnIndex];
data.index = columnIndex;
// filter types to exclude, per column
excludeMatch = ( ts.getColumnData( table, wo.filter_excludeFilter, columnIndex, true ) || '' ).split(/\s*,\s*/);
// ignore if filter is empty or disabled
if (data.filter) {
data.cache = data.cacheArray[columnIndex];
@ -1225,10 +1230,12 @@ ts.filter = {
// cycle through the different filters
// filters return a boolean or null if nothing matches
$.each(ts.filter.types, function(type, typeFunction) {
matches = typeFunction( c, data );
if (matches !== null) {
filterMatched = matches;
return false;
if ($.inArray(type, excludeMatch) < 0) {
matches = typeFunction( c, data );
if (matches !== null) {
filterMatched = matches;
return false;
}
}
});
if (filterMatched !== null) {