|
1 |
| -/*global $, jQuery*/ |
| 1 | +/*global $, jQuery, exFilterColumn*/ |
2 | 2 | /*jslint plusplus: true, nomen: true */
|
3 | 3 |
|
4 | 4 | /*!
|
5 | 5 | * Yet Another DataTables Column Filter - (yadcf)
|
6 | 6 | *
|
7 | 7 | * File: jquery.dataTables.yadcf.js
|
8 |
| -* Version: 0.6.9 |
| 8 | +* Version: 0.7.0 |
9 | 9 | *
|
10 | 10 | * Author: Daniel Reznick
|
11 | 11 | * Info: https://github.com/vedmack/yadcf
|
@@ -187,6 +187,41 @@ var yadcf = (function ($) {
|
187 | 187 | }
|
188 | 188 | }
|
189 | 189 | }
|
| 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 | + |
190 | 225 | function yadcfMatchFilter(oTable, selected_value, filter_match_mode, column_number) {
|
191 | 226 | var case_insensitive = extractColumnInfoFromOptions(yadcf.getOptions(oTable.selector), column_number, "case_insensitive");
|
192 | 227 | if (filter_match_mode === "contains") {
|
@@ -1217,7 +1252,9 @@ var yadcf = (function ($) {
|
1217 | 1252 | $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr);
|
1218 | 1253 | }
|
1219 | 1254 |
|
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 | + } |
1221 | 1258 | if (args[i].select_type !== undefined && args[i].select_type === 'chosen') {
|
1222 | 1259 | $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).chosen(args[i].select_type_options);
|
1223 | 1260 | $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).next().attr("onclick", "yadcf.stopPropagation(event);");
|
@@ -1668,38 +1705,96 @@ var yadcf = (function ($) {
|
1668 | 1705 | }
|
1669 | 1706 |
|
1670 | 1707 | //--------------------------------------------------------
|
1671 |
| - function exInternalFilterColumnAJAXQueue(table_arg, column_number, filter_value) { |
| 1708 | + function exInternalFilterColumnAJAXQueue(table_arg, col_filter_arr) { |
1672 | 1709 | 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); |
1676 | 1711 | };
|
1677 | 1712 | }
|
1678 | 1713 |
|
1679 |
| - function exFilterColumn(table_arg, column_number, filter_value) { |
| 1714 | + function exFilterColumn(table_arg, col_filter_arr, ajaxSource) { |
1680 | 1715 | 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; |
1690 | 1792 | }
|
1691 |
| - break; |
1692 | 1793 | }
|
1693 | 1794 | }
|
| 1795 | + table_arg.fnDraw(); |
1694 | 1796 | } 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)); |
1703 | 1798 | }
|
1704 | 1799 | }
|
1705 | 1800 |
|
|
0 commit comments