Skip to content

Commit fb66e3f

Browse files
committed
exFilterColumn support ALL filter types!!! MULTIPLE columns are also supported!!!
#46 #47
1 parent fac8dd0 commit fb66e3f

File tree

4 files changed

+130
-28
lines changed

4 files changed

+130
-28
lines changed

Diff for: ChangeLog.markdown

+7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# Yet Another DataTables Column Filter (Yadcf) Change-log
22

3+
4+
## 0.7.0
5+
6+
* Reimplemented exFilterColumn to support ALL filter types!!! + Now it can be used even for multiple pre filtered columns https://github.com/vedmack/yadcf/issues/46
7+
* Bug fix https://github.com/vedmack/yadcf/issues/47
8+
9+
310
## 0.6.9
411

512
* Added new filter type: multiple selection, filter_type: "multi_select". With or without Chosen plugin support (select_type: 'chosen') (https://github.com/vedmack/yadcf/issues/41) , thanks goes to Ryan Harris https://github.com/vedmack/yadcf/pull/23

Diff for: README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ Features:
5353
- support aoColumns { "bVisible": false }
5454
- support for case sensitive filtering
5555
- External API functions:
56-
- exFilterColumn: Allows to trigger filter externally/programmatically (currently support only filter_type : "select") , perfect for showing table after its being filtered (onload)
56+
- exFilterColumn: Allows to trigger filter/s externally/programmatically (support ALL filter types!!!) , perfect for showing table with pre filtered columns
5757
- Notable datatables API support
5858
- bStateSave / bDeferRender
5959

Diff for: jquery.dataTables.yadcf.js

+121-26
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
/*global $, jQuery*/
1+
/*global $, jQuery, exFilterColumn*/
22
/*jslint plusplus: true, nomen: true */
33

44
/*!
55
* Yet Another DataTables Column Filter - (yadcf)
66
*
77
* File: jquery.dataTables.yadcf.js
8-
* Version: 0.6.9
8+
* Version: 0.7.0
99
*
1010
* Author: Daniel Reznick
1111
* Info: https://github.com/vedmack/yadcf
@@ -187,6 +187,41 @@ var yadcf = (function ($) {
187187
}
188188
}
189189
}
190+
191+
//Used by exFilterColumn for translating readable search value into proper search string for datatables filtering
192+
function yadcfMatchFilterString(table_arg, column_number, selected_value, filter_match_mode, multiple) {
193+
var case_insensitive = extractColumnInfoFromOptions(yadcf.getOptions(table_arg.selector), column_number, "case_insensitive"),
194+
ret_val;
195+
196+
table_arg.fnSettings().aoPreSearchCols[column_number].bSmart = false;
197+
table_arg.fnSettings().aoPreSearchCols[column_number].bCaseInsensitive = case_insensitive;
198+
199+
if (multiple === undefined || multiple === false) {
200+
if (filter_match_mode === "contains") {
201+
table_arg.fnSettings().aoPreSearchCols[column_number].bRegex = false;
202+
ret_val = selected_value;
203+
} else if (filter_match_mode === "exact") {
204+
table_arg.fnSettings().aoPreSearchCols[column_number].bRegex = true;
205+
ret_val = "^" + selected_value + "$";
206+
} else if (filter_match_mode === "startsWith") {
207+
table_arg.fnSettings().aoPreSearchCols[column_number].bRegex = true;
208+
ret_val = "^" + selected_value;
209+
}
210+
} else {
211+
if (filter_match_mode === "contains") {
212+
table_arg.fnSettings().aoPreSearchCols[column_number].bRegex = true;
213+
ret_val = selected_value.join("|");
214+
} else if (filter_match_mode === "exact") {
215+
table_arg.fnSettings().aoPreSearchCols[column_number].bRegex = true;
216+
ret_val = "^(" + selected_value.join("|") + ")$";
217+
} else if (filter_match_mode === "startsWith") {
218+
table_arg.fnSettings().aoPreSearchCols[column_number].bRegex = true;
219+
ret_val = "^(" + selected_value.join("|") + ")";
220+
}
221+
}
222+
return ret_val;
223+
}
224+
190225
function yadcfMatchFilter(oTable, selected_value, filter_match_mode, column_number) {
191226
var case_insensitive = extractColumnInfoFromOptions(yadcf.getOptions(oTable.selector), column_number, "case_insensitive");
192227
if (filter_match_mode === "contains") {
@@ -1217,7 +1252,9 @@ var yadcf = (function ($) {
12171252
$('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr);
12181253
}
12191254

1220-
args[i].select_type_options = $.extend({}, {width: $(filter_selector_string).closest("th").width() + "px"}, args[i].select_type_options);
1255+
if (args[i].filter_container_id === undefined && args[i].select_type_options.width === undefined) {
1256+
args[i].select_type_options = $.extend({}, {width: $(filter_selector_string).closest("th").width() + "px"});
1257+
}
12211258
if (args[i].select_type !== undefined && args[i].select_type === 'chosen') {
12221259
$("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).chosen(args[i].select_type_options);
12231260
$("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).next().attr("onclick", "yadcf.stopPropagation(event);");
@@ -1668,38 +1705,96 @@ var yadcf = (function ($) {
16681705
}
16691706

16701707
//--------------------------------------------------------
1671-
function exInternalFilterColumnAJAXQueue(table_arg, column_number, filter_value) {
1708+
function exInternalFilterColumnAJAXQueue(table_arg, col_filter_arr) {
16721709
return function () {
1673-
var table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly(table_arg.selector);
1674-
$("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).val(filter_value);
1675-
$("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).change();
1710+
exFilterColumn(table_arg, col_filter_arr, true);
16761711
};
16771712
}
16781713

1679-
function exFilterColumn(table_arg, column_number, filter_value) {
1714+
function exFilterColumn(table_arg, col_filter_arr, ajaxSource) {
16801715
var table_selector_jq_friendly,
1681-
i;
1682-
1683-
if (table_arg.fnSettings().sAjaxSource === null) {
1684-
for (i = 0; i < yadcf.getOptions(table_arg.selector).length; i++) {
1685-
if (yadcf.getOptions(table_arg.selector)[i].column_number === column_number) {
1686-
if (yadcf.getOptions(table_arg.selector)[i].filter_type === "select" || yadcf.getOptions(table_arg.selector)[i].filter_type === "multi_select") {
1687-
table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly(table_arg.selector);
1688-
$("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).val(filter_value);
1689-
$("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).change();
1716+
i,
1717+
j,
1718+
tmpStr,
1719+
column_number,
1720+
filter_value,
1721+
fromId,
1722+
toId,
1723+
sliderId;
1724+
1725+
table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly(table_arg.selector);
1726+
if (table_arg.fnSettings().sAjaxSource === null || ajaxSource === true) {
1727+
for (j = 0; j < col_filter_arr.length; j++) {
1728+
column_number = col_filter_arr[j][0];
1729+
filter_value = col_filter_arr[j][1];
1730+
for (i = 0; i < yadcf.getOptions(table_arg.selector).length; i++) {
1731+
if (yadcf.getOptions(table_arg.selector)[i].column_number === column_number) {
1732+
switch (yadcf.getOptions(table_arg.selector)[i].filter_type) {
1733+
case 'select':
1734+
case 'auto_complete':
1735+
case 'text':
1736+
case 'date':
1737+
$('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(filter_value).addClass('inuse');
1738+
tmpStr = yadcfMatchFilterString(table_arg, column_number, filter_value, getOptions(table_arg.selector)[column_number].filter_match_mode, false);
1739+
table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = tmpStr;
1740+
break;
1741+
case 'multi_select':
1742+
$('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(filter_value);
1743+
tmpStr = yadcfMatchFilterString(table_arg, column_number, filter_value, getOptions(table_arg.selector)[column_number].filter_match_mode, true);
1744+
table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = tmpStr;
1745+
if (yadcf.getOptions(table_arg.selector)[i].select_type !== undefined && yadcf.getOptions(table_arg.selector)[i].select_type === 'chosen') {
1746+
$('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).trigger('chosen:updated');
1747+
}
1748+
break;
1749+
case 'range_date':
1750+
fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-from-date-' + column_number;
1751+
toId = 'yadcf-filter-' + table_selector_jq_friendly + '-to-date-' + column_number;
1752+
if (filter_value.from !== '') {
1753+
$('#' + fromId).val(filter_value.from);
1754+
$('#' + fromId).addClass('inuse');
1755+
}
1756+
if (filter_value.to !== '') {
1757+
$('#' + toId).val(filter_value.to);
1758+
$('#' + toId).addClass('inuse');
1759+
}
1760+
break;
1761+
case 'range_number':
1762+
fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-from-' + column_number;
1763+
toId = 'yadcf-filter-' + table_selector_jq_friendly + '-to-' + column_number;
1764+
if (filter_value.from !== '') {
1765+
$('#' + fromId).val(filter_value.from);
1766+
$('#' + fromId).addClass('inuse');
1767+
}
1768+
if (filter_value.to !== '') {
1769+
$('#' + toId).val(filter_value.to);
1770+
$('#' + toId).addClass('inuse');
1771+
}
1772+
break;
1773+
case 'range_number_slider':
1774+
sliderId = 'yadcf-filter-' + table_selector_jq_friendly + '-slider-' + column_number;
1775+
fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-min_tip-' + column_number;
1776+
toId = 'yadcf-filter-' + table_selector_jq_friendly + '-max_tip-' + column_number;
1777+
if (filter_value.from !== '') {
1778+
$('#' + fromId).text(filter_value.from);
1779+
$('#' + fromId).parent().addClass('inuse');
1780+
$('#' + fromId).parent().parent().find('ui-slider-range').addClass('inuse');
1781+
$('#' + sliderId).slider('values', 0, filter_value.from);
1782+
}
1783+
if (filter_value.to !== '') {
1784+
$('#' + toId).text(filter_value.to);
1785+
$('#' + toId).parent().addClass('inuse');
1786+
$('#' + toId).parent().parent().find('.ui-slider-range').addClass('inuse');
1787+
$('#' + sliderId).slider('values', 1, filter_value.to);
1788+
}
1789+
break;
1790+
}
1791+
break;
16901792
}
1691-
break;
16921793
}
16931794
}
1795+
table_arg.fnDraw();
16941796
} else {
1695-
for (i = 0; i < yadcf.getOptions(table_arg.selector).length; i++) {
1696-
if (yadcf.getOptions(table_arg.selector)[i].column_number === column_number) {
1697-
if (yadcf.getOptions(table_arg.selector)[i].filter_type === "select" || yadcf.getOptions(table_arg.selector)[i].filter_type === "multi_select" || yadcf.getOptions(table_arg.selector)[i].filter_type === undefined) {
1698-
exFilterColumnQueue.push(exInternalFilterColumnAJAXQueue(table_arg, column_number, filter_value));
1699-
}
1700-
break;
1701-
}
1702-
}
1797+
exFilterColumnQueue.push(exInternalFilterColumnAJAXQueue(table_arg, col_filter_arr));
17031798
}
17041799
}
17051800

Diff for: yadcf.jquery.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"column",
1010
"plugin"
1111
],
12-
"version": "0.6.9",
12+
"version": "0.7.0",
1313
"author": {
1414
"name": "Daniel Reznick",
1515
"url": "https://github.com/vedmack"

0 commit comments

Comments
 (0)