diff --git a/ChangeLog.markdown b/ChangeLog.markdown index 71f8f74..6fb434c 100644 --- a/ChangeLog.markdown +++ b/ChangeLog.markdown @@ -1,4 +1,9 @@ # Yet Another DataTables Column Filter (Yadcf) Change-log + +## 0.8.8.beta (still in development + +* Added html5_data support for range_number and range_number_slider https://github.com/vedmack/yadcf/issues/158 + ## 0.8.7 diff --git a/beta/jquery.dataTables.yadcf.beta.js b/beta/jquery.dataTables.yadcf.beta.js index ee94bc0..4d83182 100644 --- a/beta/jquery.dataTables.yadcf.beta.js +++ b/beta/jquery.dataTables.yadcf.beta.js @@ -4,7 +4,7 @@ * Yet Another DataTables Column Filter - (yadcf) * * File: jquery.dataTables.yadcf.js -* Version: 0.8.8.beta.4 +* Version: 0.8.8.beta.6 * * Author: Daniel Reznick * Info: https://github.com/vedmack/yadcf @@ -554,7 +554,7 @@ var yadcf = (function ($) { function doFilterCustomDateFunc(arg, table_selector_jq_friendly, column_number) { var oTable = oTables[table_selector_jq_friendly], yadcfState, - columnObj = yadcf.getOptions(oTable.selector)[column_number]; + columnObj = getOptions(oTable.selector)[column_number]; if (arg === "clear" || arg.value === "-1") { $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).val("-1").focus(); @@ -607,14 +607,14 @@ var yadcf = (function ($) { } else { column_number_filter = column_number; } - columnObj = yadcf.getOptions(oTable.selector)[column_number]; + columnObj = getOptions(oTable.selector)[column_number]; if (arg === "clear") { $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).val("-1").focus(); $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).removeClass("inuse"); $(document).data("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val", "-1"); oTable.fnFilter("", column_number_filter); resetIApiIndex(); - if (yadcf.getOptions(oTable.selector)[column_number].select_type === 'chosen') { + if (getOptions(oTable.selector)[column_number].select_type === 'chosen') { $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).trigger("chosen:updated"); } else if (columnObj.select_type !== undefined && columnObj.select_type === 'select2') { $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).select2("destroy").select2(columnObj.select_type_options); @@ -782,7 +782,7 @@ var yadcf = (function ($) { if (!isFinite(min) || !isFinite(max)) { return true; } - columnObj = yadcf.getOptions(oSettings.oInstance.selector)[col_num]; + columnObj = getOptions(oSettings.oInstance.selector)[col_num]; column_data_type = columnObj.column_data_type; html_data_type = columnObj.html_data_type; @@ -856,7 +856,7 @@ var yadcf = (function ($) { return true; } - custom_func = yadcf.getOptions(oSettings.oInstance.selector)[col_num].custom_func; + custom_func = getOptions(oSettings.oInstance.selector)[col_num].custom_func; retVal = custom_func(filterVal, columnVal); @@ -935,7 +935,7 @@ var yadcf = (function ($) { if (!isFinite(min) || !isFinite(max)) { return true; } - columnObj = yadcf.getOptions(oSettings.oInstance.selector)[col_num]; + columnObj = getOptions(oSettings.oInstance.selector)[col_num]; column_data_type = columnObj.column_data_type; html_data_type = columnObj.html_data_type; @@ -998,13 +998,18 @@ var yadcf = (function ($) { toId = "yadcf-filter-" + table_selector_jq_friendly + "-to-" + column_number, filter_selector_string_tmp, filter_wrapper_id, - oTable; + oTable, + columnObj, + filterActionStr; filter_wrapper_id = "yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number; if ($("#" + filter_wrapper_id).length > 0) { return; } + $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; + oTable = oTables[table_selector_jq_friendly]; + columnObj = getOptions(oTable.selector)[column_number]; //add a wrapper to hold both filter and reset button $(filter_selector_string).append("
"); @@ -1014,20 +1019,21 @@ var yadcf = (function ($) { $(filter_selector_string).append("
"); filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper-inner"; - $(filter_selector_string).append("" + - ""); + filterActionStr = 'onkeyup="yadcf.rangeNumberKeyUP(\'' + table_selector_jq_friendly + '\',event);"'; + if (columnObj.externally_triggered === true) { + filterActionStr = ''; + } + + $(filter_selector_string).append(""); $(filter_selector_string).append("" + ""); - $(filter_selector_string).append("" + - ""); + $(filter_selector_string).append(""); if (filter_reset_button_text !== false) { $(filter_selector_string_tmp).append(""); } - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - oTable = oTables[table_selector_jq_friendly]; if (oTable.fnSettings().oFeatures.bStateSave === true && oTable.fnSettings().oLoadedState) { if (oTable.fnSettings().oLoadedState.yadcfState && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number]) { $('#' + fromId).val(oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from); @@ -1136,7 +1142,10 @@ var yadcf = (function ($) { toId = "yadcf-filter-" + table_selector_jq_friendly + "-to-date-" + column_number, filter_selector_string_tmp, filter_wrapper_id, - oTable; + oTable, + columnObj, + datepickerObj = {}, + filterActionStr; filter_wrapper_id = "yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number; @@ -1154,26 +1163,31 @@ var yadcf = (function ($) { $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; oTable = oTables[table_selector_jq_friendly]; - $(filter_selector_string).append("" + - ""); + columnObj = getOptions(oTable.selector)[column_number]; + + filterActionStr = 'onkeyup="yadcf.rangeDateKeyUP(\'' + table_selector_jq_friendly + '\',\'' + date_format + '\',event);"'; + if (columnObj.externally_triggered === true) { + filterActionStr = ''; + } + + $(filter_selector_string).append(""); $(filter_selector_string).append("" + ""); - $(filter_selector_string).append("" + - ""); + $(filter_selector_string).append(""); if (filter_reset_button_text !== false) { $(filter_selector_string_tmp).append(""); } - $("#" + fromId).datepicker({ - dateFormat: date_format, - onSelect: dateSelect - }); - $("#" + toId).datepicker({ - dateFormat: date_format, - onSelect: dateSelect - }); + datepickerObj.dateFormat = date_format; + + if (columnObj.externally_triggered !== true) { + datepickerObj.onSelect = dateSelect; + } + + $("#" + fromId).datepicker(datepickerObj); + $("#" + toId).datepicker(datepickerObj); if (oTable.fnSettings().oFeatures.bStateSave === true && oTable.fnSettings().oLoadedState) { if (oTable.fnSettings().oLoadedState.yadcfState && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number]) { @@ -1199,34 +1213,44 @@ var yadcf = (function ($) { var dateId = "yadcf-filter-" + table_selector_jq_friendly + "-" + column_number, filter_selector_string_tmp, filter_wrapper_id, - oTable; + oTable, + columnObj, + datepickerObj = {}, + filterActionStr; filter_wrapper_id = "yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number; if ($("#" + filter_wrapper_id).length > 0) { return; } + $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; + oTable = oTables[table_selector_jq_friendly]; + columnObj = getOptions(oTable.selector)[column_number]; //add a wrapper to hold both filter and reset button $(filter_selector_string).append("
"); filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; filter_selector_string_tmp = filter_selector_string; - $(filter_selector_string).append(""); + filterActionStr = 'onkeyup="yadcf.dateKeyUP(\'' + table_selector_jq_friendly + '\',\'' + date_format + '\',event);"'; + if (columnObj.externally_triggered === true) { + filterActionStr = ''; + } + + $(filter_selector_string).append(""); if (filter_reset_button_text !== false) { $(filter_selector_string_tmp).append(''); } - $("#" + dateId).datepicker({ - dateFormat: date_format, - onSelect: dateSelectSingle - }); + datepickerObj.dateFormat = date_format; - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - oTable = oTables[table_selector_jq_friendly]; + if (columnObj.externally_triggered !== true) { + datepickerObj.onSelect = dateSelectSingle; + } + + $("#" + dateId).datepicker(datepickerObj); if (oTable.fnSettings().aoPreSearchCols[column_number].sSearch !== '') { $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(oTable.fnSettings().aoPreSearchCols[column_number].sSearch).addClass("inuse"); @@ -1257,11 +1281,11 @@ var yadcf = (function ($) { slider_inuse, yadcfState, column_number = $(event.target).attr('id').replace("yadcf-filter-", "").replace(table_selector_jq_friendly, "").replace("-slider-", ""), - options, + columnObj, keyUp; oTable = oTables[table_selector_jq_friendly]; - options = getOptions(oTable.selector)[column_number]; + columnObj = getOptions(oTable.selector)[column_number]; keyUp = function () { @@ -1272,11 +1296,9 @@ var yadcf = (function ($) { } else { oTable.fnFilter(ui.values[0] + '-yadcf_delim-' + ui.values[1], column_number); } - min_val = +$($(event.target).parent().find(".yadcf-filter-range-number-slider-min-tip-hidden")).text(); max_val = +$($(event.target).parent().find(".yadcf-filter-range-number-slider-max-tip-hidden")).text(); - if (min_val !== ui.values[0]) { $($(event.target).find(".ui-slider-handle")[0]).addClass("inuse"); slider_inuse = true; @@ -1295,6 +1317,7 @@ var yadcf = (function ($) { } else { $(event.target).find(".ui-slider-range").removeClass("inuse"); } + if (!oTable.fnSettings().oLoadedState) { oTable.fnSettings().oLoadedState = {}; oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); @@ -1321,12 +1344,12 @@ var yadcf = (function ($) { resetIApiIndex(); }; - if (options.filter_delay === undefined) { + if (columnObj.filter_delay === undefined) { keyUp(); } else { yadcfDelay(function () { keyUp(); - }, options.filter_delay); + }, columnObj.filter_delay); } } @@ -1338,7 +1361,10 @@ var yadcf = (function ($) { filter_wrapper_id, oTable, min_state_val = min_val, - max_state_val = max_val; + max_state_val = max_val, + columnObj, + slideFunc, + changeFunc; filter_wrapper_id = "yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number; @@ -1348,6 +1374,8 @@ var yadcf = (function ($) { $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; oTable = oTables[table_selector_jq_friendly]; + columnObj = getOptions(oTable.selector)[column_number]; + if (oTable.fnSettings().oFeatures.bStateSave === true && oTable.fnSettings().oLoadedState) { if (oTable.fnSettings().oLoadedState.yadcfState && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number]) { if (min_val !== oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from) { @@ -1375,6 +1403,26 @@ var yadcf = (function ($) { $(filter_selector_string).append("" + min_val + ""); $(filter_selector_string).append("" + max_val + ""); + if (columnObj.externally_triggered !== true) { + slideFunc = function (event, ui) { + rangeNumberSldierDrawTips(ui.values[0], ui.values[1], min_tip_id, max_tip_id, table_selector_jq_friendly, column_number); + rangeNumberSliderChange(table_selector_jq_friendly, event, ui); + }; + changeFunc = function (event, ui) { + rangeNumberSldierDrawTips(ui.values[0], ui.values[1], min_tip_id, max_tip_id, table_selector_jq_friendly, column_number); + if (event.originalEvent || $(event.target).slider("option", "yadcf-reset") === true) { + $(event.target).slider("option", "yadcf-reset", false); + rangeNumberSliderChange(table_selector_jq_friendly, event, ui); + } + }; + } else { + slideFunc = function (event, ui) { + rangeNumberSldierDrawTips(ui.values[0], ui.values[1], min_tip_id, max_tip_id, table_selector_jq_friendly, column_number); + }; + changeFunc = function (event, ui) { + rangeNumberSldierDrawTips(ui.values[0], ui.values[1], min_tip_id, max_tip_id, table_selector_jq_friendly, column_number); + }; + } $("#" + sliderId).slider({ range: true, min: min_val, @@ -1383,17 +1431,8 @@ var yadcf = (function ($) { create: function (event, ui) { rangeNumberSldierDrawTips(min_state_val, max_state_val, min_tip_id, max_tip_id, table_selector_jq_friendly, column_number); }, - slide: function (event, ui) { - rangeNumberSldierDrawTips(ui.values[0], ui.values[1], min_tip_id, max_tip_id, table_selector_jq_friendly, column_number); - rangeNumberSliderChange(table_selector_jq_friendly, event, ui); - }, - change: function (event, ui) { - rangeNumberSldierDrawTips(ui.values[0], ui.values[1], min_tip_id, max_tip_id, table_selector_jq_friendly, column_number); - if (event.originalEvent || $(event.target).slider("option", "yadcf-reset") === true) { - $(event.target).slider("option", "yadcf-reset", false); - rangeNumberSliderChange(table_selector_jq_friendly, event, ui); - } - } + slide: slideFunc, + change: changeFunc }); if (filter_reset_button_text !== false) { @@ -1881,7 +1920,7 @@ var yadcf = (function ($) { } } } - if (settingsDt.oFeatures.bServerSide !== true && columnObj.externally_triggered !== true) { + if (settingsDt.oFeatures.bServerSide !== true) { addCustomFunctionFilterCapability(table_selector_jq_friendly, "yadcf-filter-" + table_selector_jq_friendly + "-" + column_number, column_number); } } @@ -1948,7 +1987,7 @@ var yadcf = (function ($) { } } } - if (settingsDt.oFeatures.bServerSide !== true && columnObj.externally_triggered !== true) { + if (settingsDt.oFeatures.bServerSide !== true) { addCustomFunctionFilterCapability(table_selector_jq_friendly, "yadcf-filter-" + table_selector_jq_friendly + "-" + column_number, column_number); } } @@ -2964,15 +3003,21 @@ var yadcf = (function ($) { fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-min_tip-' + column_number; toId = 'yadcf-filter-' + table_selector_jq_friendly + '-max_tip-' + column_number; if (filter_value.from !== '') { + min = $('#' + fromId).closest('.yadcf-filter-range-number-slider').find(".yadcf-filter-range-number-slider-min-tip-hidden").text(); + max = $('#' + fromId).closest('.yadcf-filter-range-number-slider').find(".yadcf-filter-range-number-slider-max-tip-hidden").text(); $('#' + fromId).text(filter_value.from); - $('#' + fromId).parent().addClass('inuse'); - $('#' + fromId).parent().parent().find('ui-slider-range').addClass('inuse'); + if (min !== filter_value.from) { + $('#' + fromId).parent().addClass('inuse'); + $('#' + fromId).parent().parent().find('ui-slider-range').addClass('inuse'); + } $('#' + sliderId).slider('values', 0, filter_value.from); } if (filter_value.to !== '') { $('#' + toId).text(filter_value.to); - $('#' + toId).parent().addClass('inuse'); - $('#' + toId).parent().parent().find('.ui-slider-range').addClass('inuse'); + if (max !== filter_value.to) { + $('#' + toId).parent().addClass('inuse'); + $('#' + toId).parent().parent().find('.ui-slider-range').addClass('inuse'); + } $('#' + sliderId).slider('values', 1, filter_value.to); } if (table_arg.fnSettings().oFeatures.bServerSide === true) { @@ -3195,7 +3240,7 @@ var yadcf = (function ($) { } } } - yadcf.exFilterColumn(table_arg, filtersValuesArr); + exFilterColumn(table_arg, filtersValuesArr, true); } return { diff --git a/jquery.dataTables.yadcf.beta.js b/jquery.dataTables.yadcf.beta.js deleted file mode 100644 index 1bbb762..0000000 --- a/jquery.dataTables.yadcf.beta.js +++ /dev/null @@ -1,3173 +0,0 @@ -/*global $, jQuery, exFilterColumn*/ -/*jslint plusplus: true, nomen: true */ -/*! -* Yet Another DataTables Column Filter - (yadcf) -* -* File: jquery.dataTables.yadcf.js -* Version: 0.8.8.beta.3 -* -* Author: Daniel Reznick -* Info: https://github.com/vedmack/yadcf -* Contact: vedmack@gmail.com -* Twitter: @danielreznick -* Q&A https://groups.google.com/forum/#!forum/daniels_code -* -* Copyright 2014 Daniel Reznick, all rights reserved. -* Copyright 2014 Released under the MIT License -* -* This source file is distributed in the hope that it will be useful, but -* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -* or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. -*/ -/* -* Parameters: -* -* -* ------------- - -* column_number - Required: true - Type: String - Description: The number of the column to which the filter will be applied - -* filter_type - Required: false - Type: String - Default value: select - Possible values: select / multi_select / auto_complete / text / date / range_number / range_number_slider / range_date / custom_func / multi_select_custom_func - Description: The type of the filter to be used in the column - -* custom_func - Required: true (when filter_type is custom_func / multi_select_custom_func) - Type: function - Default value: undefined - Description: should be pointing to a function with the following signature myCustomFilterFunction(filterVal, columnVal) , where filterVal is the value from the select box and - columnVal is the value from the relevant row column, this function should return true if the row matches your condition and the row should be displayed) and false otherwise - Note: When using multi_select_custom_func as filter_type filterVal will hold an array of selected values from the multi select element - -* data - Required: false / true (when filter_type is custom_func / multi_select_custom_func) - Type: Array (of string or objects) - Description: When the need of predefined data for filter is needed just use an array of strings ["value1","value2"....] (supported in select / multi_select / auto_complete filters) or - array of objects [{value: 'Some Data 1', label: 'One'}, {value: 'Some Data 3', label: 'Three'}] (supported in select / multi_select filters) - Note: that when filter_type is custom_func / multi_select_custom_func this array will populate the custom filter select element - -* column_data_type - Required: false - Type: String - Default value: text - Possible values: text / html / rendered_html - Description: The type of data in column , use "html" when you have some html code in the column (support parsing of multiple elements per cell), - use rendered_html when you are using render function of columnDefs or similar, that produces a html code, note that both types rendered_html and html have a fallback for simple text parsing - -* text_data_delimiter - Required: false - Type: String - Description: Delimiter that seperates text in table column, for example text_data_delimiter: "," - -* html_data_type - Required: false - Type: String - Default value: text - Possible values: text / value / id / selector - Description: When using "html" for column_data_type argument you can choose how exactly to parse your html element/s in column , for example use "text" for the following Some text - Special notes: when using selector you must provide a valid selector string for the html_data_selector property - -* html_data_selector - Required: false - Type: String - Default value: undefined - Possible values: any valid selector string, for example 'li:eq(1)' - Description: allows for advanced text value selection within the html located in the td element - Special notes: know that the selector string "begin is search" from (and not outside) the first element of the html inside the td - (supported by range_number_slider / select / auto_complete) - -* html5_data - Required: false - Type: String - Default value: undefined - Possible values: data-filter / data-search / anything that is supported by datatables - Description: Allows to filter based on data-filter / data-search attributes of the element, read more: http://www.datatables.net/examples/advanced_init/html5-data-attributes.html - -* filter_container_id - Required: false - Type: String - Description: In case that user don't want to place the filter in column header , he can pass an id of the desired container for the column filter - -* filter_default_label - Required: false - Type: String / Array of string in case of range_number filter (first entry is for the first input and the second entry is for the second input - Default value: Select value - Description: The label that will appear in the select menu filter when no value is selected from the filter - -* filter_reset_button_text - Required: false - Type: String / boolean - Default value: x - Description: The text that will appear inside the reset button next to the select drop down (set this to false (boolean) in order to hide it from that column filter) - -* enable_auto_complete (this attribute is deprecated , and will become obsolete in the future , so you better start using filter_type: "auto_complete") - Required: false - Type: boolean - Default value: false - Description: Turns the filter into an autocomplete input - make use of the jQuery UI Autocomplete widget (with some enhancements) - -* sort_as - Required: false - Type: String - Default value: alpha - Possible values: alpha / num / none - Description: Defines how the values in the filter will be sorted, alphabetically or numerically or not sorted at all (none is useful to preserve - the order of the data attribute as is) - -* sort_order - Required: false - Type: String - Default value: asc - Possible values: asc / desc - Description: Defines the order in which the values in the filter will be sorted, ascending or descending - -* date_format - Required: false - Type: String - Default value: mm/dd/yyyy - Possible values: mm/dd/yyyy / dd/mm/yyyy (eventually I replace yyyy into yy for jquery datepicker) - Description: Defines the format in which the date values are being parsed into Date object - -* ignore_char - Required: false - Type: String - Description: Tells the range_number and range_number_slide to ignore specific char while filtering (that char can used as number separator) - -* filter_match_mode - Required: false - Type: String - Default value: contains - Possible values: contains / exact / startsWith - Description: Allows to control the matching mode of the filter (supported in select / auto_complete / text filters) - -* select_type - Required: false - Type: String - Default value: undefined - Possible values: chosen / select2 - Description: Turns the simple select element into "Chosen/Select2 select" (make use of the Chosen/Select2 jQuery plugin) - - -* select_type_options - Required: false - Type: Object - Default value: {} - Description: This parameter will be passed "as is" to the Chosen/Select2 plugin constructor - - -* filter_plugin_options - Required: false - Type: Object - Default value: undefined - Description: This parameter will be passed to the jQuery Autocomplete plugin constructor - -* case_insensitive - Required: false - Type: boolean - Default value: true - Description: Do case-insensitive filtering (supported in select / auto_complete / text filters) - - -* filter_delay - Required: false - Type: integer - Default value: undefined - Description: Delay filter execution for a XXX milliseconds - filter will fire XXX milliseconds after the last keyup. - Special notes: Currently supported in text / range_number / range_date filters / range_number_slider - -* -* -* -* External API functions: -* -* -* ------------- - -* exFilterColumn - Description: Allows to trigger filter/s externally/programmatically (support ALL filter types!!!) , perfect for showing table with pre filtered columns - Arguments: table_arg: (variable of the datatable), - array of pairs: column number String/Object with from and to, filter_value (the actual string value that we want to filter by) - Usage example: yadcf.exFilterColumn(oTable, [[0, 'Some Data 2']]); //pre filter one column - yadcf.exFilterColumn(oTable, [[0, 'Some Data 1'], [1, {from: 111, to: 1110}], [2, {from: "", to: "11/25/2014"}]]); //pre filter several columns - yadcf.exFilterColumn(oTable, [[0, ['Some Data 1','Some Data 2']]]); // for pre filtering multi select filter you should use array with values (or an array with single value) - -* exGetColumnFilterVal - Description: Allows to retrieve column current filtered value (support ALL filter types!!!) - Arguments: table_arg: (variable of the datatable), - column number: column number from which we want the value - Usage example: yadcf.exGetColumnFilterVal(oTable,1); - Return value: String (for simple filter) / Object (for range filter) with from and to properties / Array of strings for multi_select filter - - -* exResetAllFilters - Description: Allows to reset all filters externally/programmatically (support ALL filter types!!!) , perfect for adding a "reset all" button to your page! - Arguments: table_arg: (variable of the datatable) - Usage example: yadcf.exResetAllFilters(oTable); - - -* -* -* -* Server-side processing API (see more on showcase): -* -* From server to client: -* In order to populate the filters with data from server (select / auto_complete / range_number_slider (min and max values), you should add to your current json respond the following properties: -* lets say for first column you add yadcf_data_0 filled with array of values, for column second column yadcf_data_1 and so on... -* -* From client to server: -* Read the filtered value like this (for first column) req.getParameter("columns[0][search][value]"); <- java code , php/.Net/etc you just need to get it from the request -* Range filter value will arrive delimited by -yadcf_delim- , so just split it into an array or something like this: String[] minMax = sSearch_0.split("-yadcf_delim-"); -* -* -* Filters position -* -* -* ------------- - -* Filters can be placed in the header (thead) or in the footer (tfoot) , it is defined by the second argument of yadcf constructor - or third argument of init function. Header location is the default position, use 'footer' in order to place the filters in the tfoot position - - -* -* -* -* Working with filters for multiple tables: -* -* -* ------------- - -* initMultipleTables - Description: Allows to create filter that will affect multiple tables / multiple column(s) in multiple tables - Arguments: Array of tables, - Array of objects with properties for each filter - Usage example: yadcf.initMultipleTables([oTable, oTable2], [{ - column_number: [0, 1], filter_container_id: 'multi-table-filter-0', filter_default_label: 'Filter all tables columns 1 and 2!' - }, - { - column_number: [2], filter_container_id: 'multi-table-filter-1', filter_default_label: 'Filter all tables column 3!' - }]); - Valid properties: filter_type: 'text' (default) / 'select', - column_number: not required (in that case the filter will be global) - can be either number(single column filter) or array of numbers(multiple columns filter) - filter_container_id: '' (required), - Note: All the usual properties of yadcf should be supported in initMultipleTables too! - -* initMultipleColumns - Description: Allows to create filter that will affect multiple column(s) in in a particular table - Arguments: Table variable, - Array of objects with properties for each filter - Usage example: yadcf.initMultipleColumns(oTable, [{ - column_number: [0, 1], filter_container_id: 'multi-table-filter-0', filter_default_label: 'Filter columns 1 and 2!' - }, - { - column_number: [2, 3], filter_container_id: 'multi-table-filter-1', filter_default_label: 'Filter column 3 and 4!' - }]); - Valid properties: filter_type: 'text' (default) / 'select', - column_number: not required (in that case the filter will be global) - can be either number(single column filter) or array of numbers(multiple columns filter) - filter_container_id: '' (required), - Note: All the usual properties of yadcf should be supported in initMultipleColumns too! -*/ -var yadcf = (function ($) { - - 'use strict'; - - var oTables = {}, - oTablesIndex = {}, - options = {}, - plugins = {}, - exFilterColumnQueue = [], - yadcfDelay; - - //From ColReorder (SpryMedia Ltd (www.sprymedia.co.uk)) - function getSettingsObjFromTable(dt) { - var oDTSettings; - if ($.fn.dataTable.Api) { - oDTSettings = new $.fn.dataTable.Api(dt).settings()[0]; - } else if (dt.fnSettings) {// 1.9 compatibility - // DataTables object, convert to the settings object - oDTSettings = dt.fnSettings(); - } else if (typeof dt === 'string') {// jQuery selector - if ($.fn.dataTable.fnIsDataTable($(dt)[0])) { - oDTSettings = $(dt).eq(0).dataTable().fnSettings(); - } - } else if (dt.nodeName && dt.nodeName.toLowerCase() === 'table') { - // Table node - if ($.fn.dataTable.fnIsDataTable(dt.nodeName)) { - oDTSettings = $(dt.nodeName).dataTable().fnSettings(); - } - } else if (dt instanceof jQuery) { - // jQuery object - if ($.fn.dataTable.fnIsDataTable(dt[0])) { - oDTSettings = dt.eq(0).dataTable().fnSettings(); - } - } else { - // DataTables settings object - oDTSettings = dt; - } - return oDTSettings; - } - - function arraySwapValueWithIndex(pArray) { - var tmp = [], - i; - for (i = 0; i < pArray.length; i++) { - tmp[pArray[i]] = i; - } - return tmp; - } - - function initColReorder(state, table_selector_jq_friendly, clear) { - if (clear === true) { - plugins[table_selector_jq_friendly] = undefined; - return; - } - if (state != null && state.ColReorder !== undefined) { - if (plugins[table_selector_jq_friendly] === undefined) { - plugins[table_selector_jq_friendly] = {}; - plugins[table_selector_jq_friendly].ColReorder = arraySwapValueWithIndex(state.ColReorder); - } - } - } - - function columnsArrayToString(column_number) { - var column_number_obj = {}; - if (column_number !== undefined) { - if (column_number instanceof Array) { - column_number_obj.column_number_str = column_number.join('_'); - } else { - column_number_obj.column_number_str = column_number; - column_number = []; - column_number.push(column_number_obj.column_number_str); - } - } else { - column_number_obj.column_number_str = 'global'; - } - column_number_obj.column_number = column_number; - return column_number_obj; - } - - function getOptions(selector) { - return options[selector]; - } - - function eventTargetFixUp(pEvent) { - if (pEvent.target === undefined) { - pEvent.target = pEvent.srcElement; - } - return pEvent; - } - - function setOptions(selector_arg, options_arg) { - var tmpOptions = {}, - i, - j, - col_num_as_int, - default_options = { - filter_type : "select", - enable_auto_complete : false, - sort_as : "alpha", - sort_order : "asc", - date_format : "mm/dd/yyyy", - ignore_char : undefined, - filter_match_mode : "contains", - select_type : undefined, - select_type_options : {}, - case_insensitive : true, - column_data_type: 'text', - html_data_type: 'text' - }, - adaptContainerCssClassImpl = function (dummy) { return ''; }; - - if (options_arg.length === undefined) { - options[selector_arg] = options_arg; - return; - } - for (i = 0; i < options_arg.length; i++) { - if (options_arg[i].select_type === 'select2') { - default_options.select_type_options = {adaptContainerCssClass: adaptContainerCssClassImpl}; - } - //no individual reset button for externally_triggered mode - if (options_arg[i].externally_triggered === true) { - options_arg[i].filter_reset_button_text = false; - } - //validate custom function required attributes - if (options_arg[i].filter_type !== undefined && options_arg[i].filter_type.indexOf('custom_func') !== -1) { - if (options_arg[i].custom_func === undefined) { - alert('You are trying to use filter_type: "custom_func / multi_select_custom_func" for column ' + options_arg[i].column_number + ' but there is no such custom_func attribute provided (custom_func: \"function reference goes here...\")'); - return; - } - if (options_arg[i].data === undefined) { - alert('You are trying to use filter_type: "custom_func / multi_select_custom_func" for column ' + options_arg[i].column_number + ' but there is no such data attribute provided (data: \"array of options goes here...\")'); - return; - } - } - col_num_as_int = +options_arg[i].column_number; - if (isNaN(col_num_as_int)) { - tmpOptions[options_arg[i].column_number_str] = $.extend(true, {}, default_options, options_arg[i]); - } else { - tmpOptions[col_num_as_int] = $.extend(true, {}, default_options, options_arg[i]); - } - } - options[selector_arg] = tmpOptions; - } - - //taken and modified from DataTables 1.10.0-beta.2 source - function yadcfVersionCheck(version) { - var aThis = $.fn.dataTable.ext.sVersion.split('.'), - aThat = version.split('.'), - iThis, - iThat, - i, - iLen; - - for (i = 0, iLen = aThat.length; i < iLen; i++) { - iThis = parseInt(aThis[i], 10) || 0; - iThat = parseInt(aThat[i], 10) || 0; - - // Parts are the same, keep comparing - if (iThis === iThat) { - continue; - } - - // Parts are different, return immediately - return iThis > iThat; - } - - return true; - } - - function calculateColumnNumber(column_number, pTable) { - var col_num_visible_iter, - col_num_visible = column_number; - for (col_num_visible_iter = 0; col_num_visible_iter < pTable.fnSettings().aoColumns.length && col_num_visible_iter < column_number; col_num_visible_iter++) { - if (pTable.fnSettings().aoColumns[col_num_visible_iter].bVisible === false) { - col_num_visible++; - } - } - return col_num_visible; - } - - function resetIApiIndex() { - $.fn.dataTableExt.iApiIndex = 0; - - } - - function generateTableSelectorJQFriendly(tmpStr) { - return tmpStr.replace(":", "-").replace("(", "").replace(")", "").replace(".", "-").replace("#", "-"); - } - - function escapeRegExp(string) { - return string.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); - } - - function replaceAll(string, find, replace) { - return string.replace(new RegExp(escapeRegExp(find), 'g'), replace); - } - - function generateTableSelectorJQFriendlyNew(tmpStr) { - tmpStr = replaceAll(tmpStr, ":", "-"); - tmpStr = replaceAll(tmpStr, "(", ""); - tmpStr = replaceAll(tmpStr, ")", ""); - tmpStr = replaceAll(tmpStr, ",", ""); - tmpStr = replaceAll(tmpStr, ".", "-"); - tmpStr = replaceAll(tmpStr, "#", "-"); - return tmpStr; - } - - yadcfDelay = (function () { - var timer = 0; - return function (callback, ms, param) { - clearTimeout(timer); - timer = setTimeout(function () { - callback(param); - }, ms); - return timer; - }; - }()); - - //Used by exFilterColumn for translating readable search value into proper search string for datatables filtering - function yadcfMatchFilterString(table_arg, column_number, selected_value, filter_match_mode, multiple) { - var case_insensitive = yadcf.getOptions(table_arg.selector)[column_number].case_insensitive, - ret_val; - - table_arg.fnSettings().aoPreSearchCols[column_number].bSmart = false; - table_arg.fnSettings().aoPreSearchCols[column_number].bCaseInsensitive = case_insensitive; - - if (multiple === undefined || multiple === false) { - if (filter_match_mode === "contains") { - table_arg.fnSettings().aoPreSearchCols[column_number].bSmart = true; - table_arg.fnSettings().aoPreSearchCols[column_number].bRegex = false; - ret_val = selected_value; - } else if (filter_match_mode === "exact") { - table_arg.fnSettings().aoPreSearchCols[column_number].bRegex = true; - ret_val = "^" + selected_value + "$"; - } else if (filter_match_mode === "startsWith") { - table_arg.fnSettings().aoPreSearchCols[column_number].bRegex = true; - ret_val = "^" + selected_value; - } - } else { - if (filter_match_mode === "contains") { - table_arg.fnSettings().aoPreSearchCols[column_number].bSmart = true; - table_arg.fnSettings().aoPreSearchCols[column_number].bRegex = true; - ret_val = selected_value.join("|"); - } else if (filter_match_mode === "exact") { - table_arg.fnSettings().aoPreSearchCols[column_number].bRegex = true; - ret_val = "^(" + selected_value.join("|") + ")$"; - } else if (filter_match_mode === "startsWith") { - table_arg.fnSettings().aoPreSearchCols[column_number].bRegex = true; - ret_val = "^(" + selected_value.join("|") + ")"; - } - } - return ret_val; - } - - function yadcfMatchFilter(oTable, selected_value, filter_match_mode, column_number) { - var case_insensitive = yadcf.getOptions(oTable.selector)[column_number].case_insensitive; - if (filter_match_mode === "contains") { - oTable.fnFilter(selected_value, column_number, false, true, true, case_insensitive); - } else if (filter_match_mode === "exact") { - oTable.fnFilter("^" + selected_value + "$", column_number, true, false, true, case_insensitive); - } else if (filter_match_mode === "startsWith") { - oTable.fnFilter("^" + selected_value, column_number, true, false, true, case_insensitive); - } - } - - function yadcfParseMatchFilter(tmpStr, filter_match_mode) { - var retVal; - if (filter_match_mode === "contains") { - retVal = tmpStr; - } else if (filter_match_mode === "exact") { - retVal = tmpStr.substring(1, tmpStr.length - 1); - } else if (filter_match_mode === "startsWith") { - retVal = tmpStr.substring(1, tmpStr.length); - } - return retVal; - } - - function doFilterCustomDateFunc(arg, table_selector_jq_friendly, column_number) { - var oTable = oTables[table_selector_jq_friendly], - yadcfState, - columnObj = yadcf.getOptions(oTable.selector)[column_number]; - - if (arg === "clear" || arg.value === "-1") { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).val("-1").focus(); - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).removeClass("inuse"); - if (columnObj.select_type === 'chosen') { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).trigger("chosen:updated"); - } else if (columnObj.select_type !== undefined && columnObj.select_type === 'select2') { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).select2("destroy").select2(columnObj.select_type_options); - } - } else { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).addClass("inuse"); - } - - if (!oTable.fnSettings().oLoadedState) { - oTable.fnSettings().oLoadedState = {}; - oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); - } - if (oTable.fnSettings().oFeatures.bStateSave === true) { - if (oTable.fnSettings().oLoadedState.yadcfState !== undefined && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] !== undefined) { - oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number] = - { - 'from' : arg.value - }; - } else { - yadcfState = {}; - yadcfState[table_selector_jq_friendly] = []; - yadcfState[table_selector_jq_friendly][column_number] = { - 'from' : arg.value - }; - oTable.fnSettings().oLoadedState.yadcfState = yadcfState; - } - oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); - } - - oTable.fnDraw(); - } - - function doFilter(arg, table_selector_jq_friendly, column_number, filter_match_mode) { - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - - var oTable = oTables[table_selector_jq_friendly], - selected_value, - column_number_filter, - columnObj, - settingsDt = getSettingsObjFromTable(oTable); - - if (settingsDt.oSavedState != null && settingsDt.oSavedState.ColReorder !== undefined) { - initColReorder(settingsDt.oSavedState, table_selector_jq_friendly); - column_number_filter = plugins[table_selector_jq_friendly].ColReorder[column_number]; - } else { - column_number_filter = column_number; - } - columnObj = yadcf.getOptions(oTable.selector)[column_number]; - if (arg === "clear") { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).val("-1").focus(); - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).removeClass("inuse"); - $(document).data("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val", "-1"); - oTable.fnFilter("", column_number_filter); - resetIApiIndex(); - if (yadcf.getOptions(oTable.selector)[column_number].select_type === 'chosen') { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).trigger("chosen:updated"); - } else if (columnObj.select_type !== undefined && columnObj.select_type === 'select2') { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).select2("destroy").select2(columnObj.select_type_options); - } - return; - } - - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).addClass("inuse"); - - $(document).data("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val", arg.value); - - selected_value = $.trim($(arg).find('option:selected').val()); - - if (arg.value !== "-1") { - yadcfMatchFilter(oTable, selected_value, filter_match_mode, column_number_filter); - } else { - oTable.fnFilter("", column_number_filter); - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).removeClass("inuse"); - } - resetIApiIndex(); - } - - function doFilterMultiSelect(arg, table_selector_jq_friendly, column_number, filter_match_mode) { - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - var oTable = oTables[table_selector_jq_friendly], - aEscapedTerms = [], - selected_values = $(arg).val(), - i, - stringForSearch; - - $(document).data("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val", selected_values); - - if (selected_values !== null) { - for (i = selected_values.length - 1; i >= 0; i--) { - if (selected_values[i] === "-1") { - selected_values.splice(i, 1); - break; - } - } - if (selected_values.length !== 0) { - stringForSearch = selected_values.join('narutouzomaki'); - stringForSearch = stringForSearch.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); - stringForSearch = stringForSearch.split('narutouzomaki').join('|'); - if (filter_match_mode === "contains") { - oTable.fnFilter(stringForSearch, column_number, true, true, true); - } else if (filter_match_mode === "exact") { - oTable.fnFilter("^(" + stringForSearch + ")$", column_number, true, false, true); - } else if (filter_match_mode === "startsWith") { - oTable.fnFilter("^(" + stringForSearch + ")", column_number, true, false, true); - } - } else { - oTable.fnFilter("", column_number); - } - } else { - oTable.fnFilter("", column_number); - } - resetIApiIndex(); - } - - function yadcfParseMatchFilterMultiSelect(tmpStr, filter_match_mode) { - var retVal; - if (filter_match_mode === "contains") { - retVal = tmpStr; - } else if (filter_match_mode === "exact") { - retVal = tmpStr.substring(1, tmpStr.length - 1); - retVal = retVal.substring(1, retVal.length - 1); - } else if (filter_match_mode === "startsWith") { - retVal = tmpStr.substring(1, tmpStr.length); - retVal = retVal.substring(1, retVal.length - 1); - } - return retVal; - } - - function doFilterAutocomplete(arg, table_selector_jq_friendly, column_number, filter_match_mode) { - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - var oTable = oTables[table_selector_jq_friendly]; - - if (arg === "clear") { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).val("").focus(); - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).removeClass("inuse"); - $(document).removeData("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val"); - oTable.fnFilter("", column_number); - resetIApiIndex(); - return; - } - - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).addClass("inuse"); - - $(document).data("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val", arg.value); - - yadcfMatchFilter(oTable, arg.value, filter_match_mode, column_number); - - resetIApiIndex(); - } - - function autocompleteSelect(event, ui) { - event = eventTargetFixUp(event); - var table_column = event.target.id.replace("yadcf-filter-", ""), - dashIndex = table_column.lastIndexOf("-"), - table_selector_jq_friendly = table_column.substring(0, dashIndex), - col_num = parseInt(table_column.substring(dashIndex + 1), 10), - filter_match_mode = $(event.target).attr("filter_match_mode"); - doFilterAutocomplete(ui.item, table_selector_jq_friendly, col_num, filter_match_mode); - } - - function sortNumAsc(a, b) { - return a - b; - } - - function sortNumDesc(a, b) { - return b - a; - } - - function findMinInArray(array, ignore_char) { - var narray = [], i; - for (i = 0; i < array.length; i++) { - if (array[i] !== null) { - if (ignore_char !== undefined) { - array[i] = array[i].toString().replace(ignore_char, ""); - } - narray.push(array[i]); - } - } - return Math.min.apply(Math, narray); - } - - function findMaxInArray(array, ignore_char) { - var narray = [], i; - for (i = 0; i < array.length; i++) { - if (array[i] !== null) { - if (ignore_char !== undefined) { - array[i] = array[i].toString().replace(ignore_char, ""); - } - narray.push(array[i]); - } - } - return Math.max.apply(Math, narray); - } - - function addRangeNumberFilterCapability(table_selector_jq_friendly, fromId, toId, col_num, ignore_char) { - - $.fn.dataTableExt.afnFiltering.push( - function (oSettings, aData, iDataIndex) { - var min = document.getElementById(fromId).value, - max = document.getElementById(toId).value, - val = aData[col_num] === "-" ? 0 : aData[col_num], - retVal = false, - table_selector_jq_friendly_local = table_selector_jq_friendly, - current_table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly(oSettings.oInstance.selector), - ignore_char_local = ignore_char; - - if (table_selector_jq_friendly_local !== current_table_selector_jq_friendly) { - return true; - } - - if (ignore_char_local !== undefined) { - min = min.replace(ignore_char_local, ""); - max = max.replace(ignore_char_local, ""); - if (val) { - val = val.toString().replace(ignore_char_local, ""); - } else { - val = ""; - } - } - - min = (min !== "") ? (+min) : min; - max = (max !== "") ? (+max) : max; - val = (val !== "") ? (+val) : val; - if (min === "" && max === "") { - retVal = true; - } else if (min === "" && val <= max) { - retVal = true; - } else if (min <= val && "" === max) { - retVal = true; - } else if (min <= val && val <= max) { - retVal = true; - } - return retVal; - } - ); - } - - function addCustomFunctionFilterCapability(table_selector_jq_friendly, filterId, col_num) { - - $.fn.dataTableExt.afnFiltering.push( - function (oSettings, aData, iDataIndex, stateVal) { - var filterVal = $('#' + filterId).val(), - columnVal = aData[col_num] === "-" ? 0 : aData[col_num], - retVal = false, - table_selector_jq_friendly_local = table_selector_jq_friendly, - current_table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly(oSettings.oInstance.selector), - custom_func; - - if (table_selector_jq_friendly_local !== current_table_selector_jq_friendly) { - return true; - } - - custom_func = yadcf.getOptions(oSettings.oInstance.selector)[col_num].custom_func; - - retVal = custom_func(filterVal, columnVal); - - return retVal; - } - ); - } - function addRangeDateFilterCapability(table_selector_jq_friendly, fromId, toId, col_num, date_format) { - - $.fn.dataTableExt.afnFiltering.push( - function (oSettings, aData, iDataIndex) { - var min = document.getElementById(fromId) !== null ? document.getElementById(fromId).value : "", - max = document.getElementById(toId) !== null ? document.getElementById(toId).value : "", - val = aData[col_num] === "-" ? 0 : aData[col_num], - retVal = false, - table_selector_jq_friendly_local = table_selector_jq_friendly, - current_table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly(oSettings.oInstance.selector); - - if (table_selector_jq_friendly_local !== current_table_selector_jq_friendly) { - return true; - } - try { - if (min.length === (date_format.length + 2)) { - min = (min !== "") ? $.datepicker.parseDate(date_format, min) : min; - } - } catch (err1) {} - try { - if (max.length === (date_format.length + 2)) { - max = (max !== "") ? $.datepicker.parseDate(date_format, max) : max; - } - } catch (err2) {} - try { - val = (val !== "") ? $.datepicker.parseDate(date_format, val) : val; - } catch (err3) {} - - if ((min === "" || !(min instanceof Date)) && (max === "" || !(max instanceof Date))) { - retVal = true; - } else if (min === "" && val <= max) { - retVal = true; - } else if (min <= val && "" === max) { - retVal = true; - } else if (min <= val && val <= max) { - retVal = true; - } - - return retVal; - } - ); - } - - function addRangeNumberSliderFilterCapability(table_selector_jq_friendly, fromId, toId, col_num, ignore_char) { - - $.fn.dataTableExt.afnFiltering.push( - function (oSettings, aData, iDataIndex, rowData) { - var min = $('#' + fromId).text(), - max = $('#' + toId).text(), - val, - retVal = false, - table_selector_jq_friendly_local = table_selector_jq_friendly, - current_table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly(oSettings.oInstance.selector), - ignore_char_local = ignore_char, - column_data_type, - html_data_type, - i, - columnObjKey, - columnObj; - - if (rowData !== undefined) { - aData = rowData; - } - val = aData[col_num] === "-" ? 0 : aData[col_num]; - if (table_selector_jq_friendly_local !== current_table_selector_jq_friendly) { - return true; - } - - if (!isFinite(min) || !isFinite(max)) { - return true; - } - columnObj = yadcf.getOptions(oSettings.oInstance.selector)[col_num]; - column_data_type = columnObj.column_data_type; - html_data_type = columnObj.html_data_type; - - if (column_data_type === "html" || column_data_type === "rendered_html") { - if (html_data_type === undefined) { - html_data_type = "text"; - } - if ($(val).length !== 0) { - switch (html_data_type) { - case "text": - val = $(val).text(); - break; - case "value": - val = $(val).val(); - break; - case "id": - val = val.id; - break; - case "selector": - val = $(val).find(columnObj.html_data_selector).text(); - break; - } - } - } - if (ignore_char_local !== undefined) { - min = min.replace(ignore_char_local, ""); - max = max.replace(ignore_char_local, ""); - if (val) { - val = val.toString().replace(ignore_char_local, ""); - } else { - val = ""; - } - } - - min = (min !== "") ? (+min) : min; - max = (max !== "") ? (+max) : max; - val = (val !== "") ? (+val) : val; - if (min === "" && max === "") { - retVal = true; - } else if (min === "" && val <= max) { - retVal = true; - } else if (min <= val && "" === max) { - retVal = true; - } else if (min <= val && val <= max) { - retVal = true; - } - return retVal; - } - ); - } - - function addRangeNumberFilter(filter_selector_string, table_selector_jq_friendly, column_number, filter_reset_button_text, filter_default_label, ignore_char) { - var fromId = "yadcf-filter-" + table_selector_jq_friendly + "-from-" + column_number, - toId = "yadcf-filter-" + table_selector_jq_friendly + "-to-" + column_number, - filter_selector_string_tmp, - filter_wrapper_id, - oTable; - - filter_wrapper_id = "yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number; - - if ($("#" + filter_wrapper_id).length > 0) { - return; - } - - //add a wrapper to hold both filter and reset button - $(filter_selector_string).append("
"); - filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; - filter_selector_string_tmp = filter_selector_string; - - $(filter_selector_string).append("
"); - filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper-inner"; - - $(filter_selector_string).append("" + - ""); - $(filter_selector_string).append("" + - ""); - $(filter_selector_string).append("" + - ""); - - if (filter_reset_button_text !== false) { - $(filter_selector_string_tmp).append(""); - } - - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - oTable = oTables[table_selector_jq_friendly]; - if (oTable.fnSettings().oFeatures.bStateSave === true && oTable.fnSettings().oLoadedState) { - if (oTable.fnSettings().oLoadedState.yadcfState && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number]) { - $('#' + fromId).val(oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from); - if (oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from !== "") { - $('#' + fromId).addClass("inuse"); - } - $('#' + toId).val(oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].to); - if (oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].to !== "") { - $('#' + toId).addClass("inuse"); - } - } - } - resetIApiIndex(); - - if (oTable.fnSettings().oFeatures.bServerSide !== true) { - addRangeNumberFilterCapability(table_selector_jq_friendly, fromId, toId, column_number, ignore_char); - } - - } - - function dateSelectSingle(date, event, clear) { - var oTable, - column_number = $(event).attr('id').replace('yadcf-filter-', '').replace('-date', '').replace('-reset', ''), - dashIndex = column_number.lastIndexOf("-"), - table_selector_jq_friendly = column_number.substring(0, dashIndex), - date_str; - - column_number = column_number.substring(dashIndex + 1); - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - oTable = oTables[table_selector_jq_friendly]; - - if (clear === undefined) { - date_str = document.getElementById($(event).attr('id')).value; - oTable.fnFilter(date, column_number); - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).addClass("inuse"); - } else if (clear === 'clear') { - oTable.fnFilter('', column_number); - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val('').removeClass("inuse"); - } - - resetIApiIndex(); - } - - function dateSelect(date, event) { - - var oTable, - column_number = $(event).attr("id").replace("yadcf-filter-", "").replace("-from-date", "").replace("-to-date", ""), - dashIndex = column_number.lastIndexOf("-"), - table_selector_jq_friendly = column_number.substring(0, dashIndex), - yadcfState, - from, - to, - date_format; - - column_number = column_number.substring(dashIndex + 1); - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - - oTable = oTables[table_selector_jq_friendly]; - date_format = yadcf.getOptions(oTable.selector)[column_number].date_format; - date_format = date_format.replace("yyyy", "yy"); - - $("#" + $(event).attr("id")).addClass("inuse"); - - if ($(event).attr("id").indexOf("-from-") !== -1) { - from = document.getElementById($(event).attr("id")).value; - to = document.getElementById($(event).attr("id").replace("-from-", "-to-")).value; - } else { - to = document.getElementById($(event).attr("id")).value; - from = document.getElementById($(event).attr("id").replace("-to-", "-from-")).value; - } - - if (oTable.fnSettings().oFeatures.bServerSide !== true) { - oTable.fnDraw(); - } else { - oTable.fnFilter(from + '-yadcf_delim-' + to, column_number); - } - - if (!oTable.fnSettings().oLoadedState) { - oTable.fnSettings().oLoadedState = {}; - oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); - } - if (oTable.fnSettings().oFeatures.bStateSave === true) { - if (oTable.fnSettings().oLoadedState.yadcfState !== undefined && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] !== undefined) { - oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number] = - { - 'from' : from, - 'to' : to - }; - } else { - yadcfState = {}; - yadcfState[table_selector_jq_friendly] = []; - yadcfState[table_selector_jq_friendly][column_number] = { - 'from' : from, - 'to' : to - }; - oTable.fnSettings().oLoadedState.yadcfState = yadcfState; - } - oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); - } - - resetIApiIndex(); - } - - function addRangeDateFilter(filter_selector_string, table_selector_jq_friendly, column_number, filter_reset_button_text, filter_default_label, date_format) { - var fromId = "yadcf-filter-" + table_selector_jq_friendly + "-from-date-" + column_number, - toId = "yadcf-filter-" + table_selector_jq_friendly + "-to-date-" + column_number, - filter_selector_string_tmp, - filter_wrapper_id, - oTable; - - filter_wrapper_id = "yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number; - - if ($("#" + filter_wrapper_id).length > 0) { - return; - } - - //add a wrapper to hold both filter and reset button - $(filter_selector_string).append("
"); - filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; - filter_selector_string_tmp = filter_selector_string; - - $(filter_selector_string).append("
"); - filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper-inner"; - - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - oTable = oTables[table_selector_jq_friendly]; - $(filter_selector_string).append("" + - ""); - $(filter_selector_string).append("" + - ""); - $(filter_selector_string).append("" + - ""); - - if (filter_reset_button_text !== false) { - $(filter_selector_string_tmp).append(""); - } - - $("#" + fromId).datepicker({ - dateFormat: date_format, - onSelect: dateSelect - }); - $("#" + toId).datepicker({ - dateFormat: date_format, - onSelect: dateSelect - }); - - if (oTable.fnSettings().oFeatures.bStateSave === true && oTable.fnSettings().oLoadedState) { - if (oTable.fnSettings().oLoadedState.yadcfState && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number]) { - $('#' + fromId).val(oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from); - if (oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from !== "") { - $('#' + fromId).addClass("inuse"); - } - $('#' + toId).val(oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].to); - if (oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].to !== "") { - $('#' + toId).addClass("inuse"); - } - } - } - - if (oTable.fnSettings().oFeatures.bServerSide !== true) { - addRangeDateFilterCapability(table_selector_jq_friendly, fromId, toId, column_number, date_format); - } - - resetIApiIndex(); - } - - function addDateFilter(filter_selector_string, table_selector_jq_friendly, column_number, filter_reset_button_text, filter_default_label, date_format) { - var dateId = "yadcf-filter-" + table_selector_jq_friendly + "-" + column_number, - filter_selector_string_tmp, - filter_wrapper_id, - oTable; - - filter_wrapper_id = "yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number; - - if ($("#" + filter_wrapper_id).length > 0) { - return; - } - - //add a wrapper to hold both filter and reset button - $(filter_selector_string).append("
"); - filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; - filter_selector_string_tmp = filter_selector_string; - - $(filter_selector_string).append(""); - - if (filter_reset_button_text !== false) { - $(filter_selector_string_tmp).append(''); - } - - $("#" + dateId).datepicker({ - dateFormat: date_format, - onSelect: dateSelectSingle - }); - - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - oTable = oTables[table_selector_jq_friendly]; - - if (oTable.fnSettings().aoPreSearchCols[column_number].sSearch !== '') { - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(oTable.fnSettings().aoPreSearchCols[column_number].sSearch).addClass("inuse"); - } - - resetIApiIndex(); - - } - - function rangeNumberSldierDrawTips(min_tip_val, max_tip_val, min_tip_id, max_tip_id, table_selector_jq_friendly, column_number) { - var first_handle = $("#yadcf-filter-wrapper-inner-" + table_selector_jq_friendly + "-" + column_number + " .ui-slider-handle:first"), - last_handle = $("#yadcf-filter-wrapper-inner-" + table_selector_jq_friendly + "-" + column_number + " .ui-slider-handle:last"), - min_tip_inner, - max_tip_inner; - - min_tip_inner = "
" + min_tip_val + "
"; - max_tip_inner = "
" + max_tip_val + "
"; - - $(first_handle).addClass("yadcf-filter-range-number-slider-min-tip").html(min_tip_inner); - $(last_handle).addClass("yadcf-filter-range-number-slider-max-tip").html(max_tip_inner); - } - - function rangeNumberSliderChange(table_selector_jq_friendly, event, ui) { - event = eventTargetFixUp(event); - var oTable, - min_val, - max_val, - slider_inuse, - yadcfState, - column_number = $(event.target).attr('id').replace("yadcf-filter-", "").replace(table_selector_jq_friendly, "").replace("-slider-", ""), - options, - keyUp; - - oTable = oTables[table_selector_jq_friendly]; - options = getOptions(oTable.selector)[column_number]; - - keyUp = function () { - - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - - if (oTable.fnSettings().oFeatures.bServerSide !== true) { - oTable.fnDraw(); - } else { - oTable.fnFilter(ui.values[0] + '-yadcf_delim-' + ui.values[1], column_number); - } - - min_val = +$($(event.target).parent().find(".yadcf-filter-range-number-slider-min-tip-hidden")).text(); - max_val = +$($(event.target).parent().find(".yadcf-filter-range-number-slider-max-tip-hidden")).text(); - - - if (min_val !== ui.values[0]) { - $($(event.target).find(".ui-slider-handle")[0]).addClass("inuse"); - slider_inuse = true; - } else { - $($(event.target).find(".ui-slider-handle")[0]).removeClass("inuse"); - } - if (max_val !== ui.values[1]) { - $($(event.target).find(".ui-slider-handle")[1]).addClass("inuse"); - slider_inuse = true; - } else { - $($(event.target).find(".ui-slider-handle")[1]).removeClass("inuse"); - } - - if (slider_inuse === true) { - $(event.target).find(".ui-slider-range").addClass("inuse"); - } else { - $(event.target).find(".ui-slider-range").removeClass("inuse"); - } - if (!oTable.fnSettings().oLoadedState) { - oTable.fnSettings().oLoadedState = {}; - oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); - } - if (oTable.fnSettings().oFeatures.bStateSave === true) { - if (oTable.fnSettings().oLoadedState.yadcfState !== undefined && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] !== undefined) { - oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number] = - { - 'from' : ui.values[0], - 'to' : ui.values[1] - }; - } else { - yadcfState = {}; - yadcfState[table_selector_jq_friendly] = []; - yadcfState[table_selector_jq_friendly][column_number] = { - 'from' : ui.values[0], - 'to' : ui.values[1] - }; - oTable.fnSettings().oLoadedState.yadcfState = yadcfState; - } - oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); - } - - resetIApiIndex(); - }; - - if (options.filter_delay === undefined) { - keyUp(); - } else { - yadcfDelay(function () { - keyUp(); - }, options.filter_delay); - } - } - - function addRangeNumberSliderFilter(filter_selector_string, table_selector_jq_friendly, column_number, filter_reset_button_text, min_val, max_val, ignore_char) { - var sliderId = "yadcf-filter-" + table_selector_jq_friendly + "-slider-" + column_number, - min_tip_id = "yadcf-filter-" + table_selector_jq_friendly + "-min_tip-" + column_number, - max_tip_id = "yadcf-filter-" + table_selector_jq_friendly + "-max_tip-" + column_number, - filter_selector_string_tmp, - filter_wrapper_id, - oTable, - min_state_val = min_val, - max_state_val = max_val; - - filter_wrapper_id = "yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number; - - if ($("#" + filter_wrapper_id).length > 0) { - return; - } - - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - oTable = oTables[table_selector_jq_friendly]; - if (oTable.fnSettings().oFeatures.bStateSave === true && oTable.fnSettings().oLoadedState) { - if (oTable.fnSettings().oLoadedState.yadcfState && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number]) { - if (min_val !== oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from) { - min_state_val = oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from; - } - if (max_val !== oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].to) { - max_state_val = oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].to; - } - } - } - - if (isFinite(min_val) && isFinite(max_val) && isFinite(min_state_val) && isFinite(max_state_val)) { - - //add a wrapper to hold both filter and reset button - $(filter_selector_string).append("
"); - filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; - filter_selector_string_tmp = filter_selector_string; - - $(filter_selector_string).append("
"); - filter_selector_string = filter_selector_string + " div.yadcf-number-slider-filter-wrapper-inner"; - - $(filter_selector_string).append("
"); - filter_selector_string = filter_selector_string + " #" + sliderId; - - $(filter_selector_string).append("" + min_val + ""); - $(filter_selector_string).append("" + max_val + ""); - - $("#" + sliderId).slider({ - range: true, - min: min_val, - max: max_val, - values: [min_state_val, max_state_val], - create: function (event, ui) { - rangeNumberSldierDrawTips(min_state_val, max_state_val, min_tip_id, max_tip_id, table_selector_jq_friendly, column_number); - }, - slide: function (event, ui) { - rangeNumberSldierDrawTips(ui.values[0], ui.values[1], min_tip_id, max_tip_id, table_selector_jq_friendly, column_number); - rangeNumberSliderChange(table_selector_jq_friendly, event, ui); - }, - change: function (event, ui) { - rangeNumberSldierDrawTips(ui.values[0], ui.values[1], min_tip_id, max_tip_id, table_selector_jq_friendly, column_number); - if (event.originalEvent || $(event.target).slider("option", "yadcf-reset") === true) { - $(event.target).slider("option", "yadcf-reset", false); - rangeNumberSliderChange(table_selector_jq_friendly, event, ui); - } - } - }); - - if (filter_reset_button_text !== false) { - $(filter_selector_string_tmp).append(""); - } - } - - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - oTable = oTables[table_selector_jq_friendly]; - if (oTable.fnSettings().oFeatures.bStateSave === true && oTable.fnSettings().oLoadedState) { - if (oTable.fnSettings().oLoadedState.yadcfState && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number]) { - if (isFinite(min_val) && min_val !== oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from) { - $($(filter_selector_string).find(".ui-slider-handle")[0]).addClass("inuse"); - } - if (isFinite(max_val) && max_val !== oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].to) { - $($(filter_selector_string).find(".ui-slider-handle")[1]).addClass("inuse"); - } - if ((isFinite(min_val) && isFinite(max_val)) && (min_val !== oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from || max_val !== oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].to)) { - $($(filter_selector_string).find(".ui-slider-range")).addClass("inuse"); - } - } - } - resetIApiIndex(); - - if (oTable.fnSettings().oFeatures.bServerSide !== true) { - addRangeNumberSliderFilterCapability(table_selector_jq_friendly, min_tip_id, max_tip_id, column_number, ignore_char); - } - } - - function dot2obj(tmpObj, dot_refs) { - var i = 0; - dot_refs = dot_refs.split("."); - for (i = 0; i < dot_refs.length; i++) { - tmpObj = tmpObj[dot_refs[i]]; - } - return tmpObj; - } - - function removeFilters(oTable, args, table_selector) { - $('.yadcf-filter-wrapper').remove(); - if (yadcfVersionCheck('1.10')) { - $(document).off('draw.dt', oTable.selector); - $(document).off('xhr.dt', oTable.selector); - $(document).off('column-visibility.dt', oTable.selector); - $(document).off('destroy.dt', oTable.selector); - } else { - $(document).off('draw', oTable.selector); - $(document).off('destroy', oTable.selector); - } - } - - function sortColumnData(column_data, columnObj) { - if (columnObj.filter_type === "select" || columnObj.filter_type === "auto_complete" || columnObj.filter_type === "multi_select" || columnObj.filter_type === "custom_func") { - if (columnObj.sort_as === "alpha") { - if (columnObj.sort_order === "asc") { - column_data.sort(); - } else if (columnObj.sort_order === "desc") { - column_data.sort(); - column_data.reverse(); - } - } else if (columnObj.sort_as === "num") { - if (columnObj.sort_order === "asc") { - column_data.sort(sortNumAsc); - } else if (columnObj.sort_order === "desc") { - column_data.sort(sortNumDesc); - } - } - } - return column_data; - } - - function parseTableColumn(pTable, columnObj) { - var col_inner_elements, - col_inner_data, - j, - k, - col_filter_array = {}, - column_data = [], - data = pTable.fnSettings().aoData, - data_length = data.length; - - if (isNaN(pTable.fnSettings().aoColumns[columnObj.column_number].mData) && typeof pTable.fnSettings().aoColumns[columnObj.column_number].mData !== 'object') { - columnObj.column_number_data = pTable.fnSettings().aoColumns[columnObj.column_number].mData; - } - if (columnObj.col_filter_array !== undefined) { - col_filter_array = columnObj.col_filter_array; - } - for (j = 0; j < data_length; j++) { - if (columnObj.column_data_type === "html") { - if (columnObj.column_number_data === undefined) { - col_inner_elements = $(data[j]._aData[columnObj.column_number]); - } else { - col_inner_elements = dot2obj(data[j]._aData, columnObj.column_number_data); - col_inner_elements = $(col_inner_elements); - } - if (col_inner_elements.length > 0) { - for (k = 0; k < col_inner_elements.length; k++) { - switch (columnObj.html_data_type) { - case "text": - col_inner_data = $(col_inner_elements[k]).text(); - break; - case "value": - col_inner_data = $(col_inner_elements[k]).val(); - break; - case "id": - col_inner_data = col_inner_elements[k].id; - break; - case "selector": - col_inner_data = $(col_inner_elements[k]).find(columnObj.html_data_selector).text(); - break; - } - - if ($.trim(col_inner_data) !== '' && !(col_filter_array.hasOwnProperty(col_inner_data))) { - col_filter_array[col_inner_data] = col_inner_data; - column_data.push(col_inner_data); - } - } - } else { - col_inner_data = col_inner_elements.selector; - if ($.trim(col_inner_data) !== '' && !(col_filter_array.hasOwnProperty(col_inner_data))) { - col_filter_array[col_inner_data] = col_inner_data; - column_data.push(col_inner_data); - } - } - - } else if (columnObj.column_data_type === "text") { - if (columnObj.text_data_delimiter !== undefined) { - if (columnObj.column_number_data === undefined) { - col_inner_elements = data[j]._aData[columnObj.column_number].split(columnObj.text_data_delimiter); - } else { - col_inner_elements = dot2obj(data[j]._aData, columnObj.column_number_data); - col_inner_elements = (col_inner_elements + '').split(columnObj.text_data_delimiter); - } - for (k = 0; k < col_inner_elements.length; k++) { - col_inner_data = col_inner_elements[k]; - if ($.trim(col_inner_data) !== '' && !(col_filter_array.hasOwnProperty(col_inner_data))) { - col_filter_array[col_inner_data] = col_inner_data; - column_data.push(col_inner_data); - } - } - } else { - if (columnObj.column_number_data === undefined) { - col_inner_data = data[j]._aData[columnObj.column_number]; - if (typeof col_inner_data === 'object') { - if (columnObj.html5_data !== undefined) { - col_inner_data = col_inner_data['@' + columnObj.html5_data]; - } else { - alert('Looks like you have forgot to define the html5_data attribute for the ' + columnObj.column_number + ' column'); - return; - } - } - } else if (data[j]._aFilterData !== undefined && data[j]._aFilterData !== null) { - col_inner_data = data[j]._aFilterData[columnObj.column_number]; - } else { - col_inner_data = dot2obj(data[j]._aData, columnObj.column_number_data); - } - if ($.trim(col_inner_data) !== '' && !(col_filter_array.hasOwnProperty(col_inner_data))) { - col_filter_array[col_inner_data] = col_inner_data; - column_data.push(col_inner_data); - } - } - } else if (columnObj.column_data_type === "rendered_html") { - col_inner_elements = data[j]._aFilterData[columnObj.column_number]; - col_inner_elements = $(col_inner_elements); - if (col_inner_elements.length > 0) { - for (k = 0; k < col_inner_elements.length; k++) { - switch (columnObj.html_data_type) { - case "text": - col_inner_data = $(col_inner_elements[k]).text(); - break; - case "value": - col_inner_data = $(col_inner_elements[k]).val(); - break; - case "id": - col_inner_data = col_inner_elements[k].id; - break; - case "selector": - col_inner_data = $(col_inner_elements[k]).find(columnObj.html_data_selector).text(); - break; - } - } - } else { - col_inner_data = col_inner_elements.selector; - } - if ($.trim(col_inner_data) !== '' && !(col_filter_array.hasOwnProperty(col_inner_data))) { - col_filter_array[col_inner_data] = col_inner_data; - column_data.push(col_inner_data); - } - } - } - columnObj.col_filter_array = col_filter_array; - return column_data; - } - - function appendFilters(oTable, args, table_selector) { - - var i = 0, - $filter_selector, - filter_selector_string, - - data, - filter_container_id, - column_number_data, - column_number, - column_position, - column_data_type, - html_data_type, - text_data_delimiter, - filter_default_label, - filter_reset_button_text, - enable_auto_complete, - sort_as, - sort_order, - date_format, - ignore_char, - filter_match_mode, - - column_data, - options_tmp, - j, - k, - data_length, - col_inner_elements, - col_inner_data, - ii, - table_selector_jq_friendly, - min_val, - max_val, - col_num_visible, - col_num_visible_iter, - tmpStr, - columnObjKey, - columnObj, - filters_position, - unique_th, - settingsDt, - filterActionStr; - - settingsDt = getSettingsObjFromTable(oTable); - table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly(table_selector); - - initColReorder(settingsDt.oSavedState, table_selector_jq_friendly); - - filters_position = $(document).data(table_selector + "_filters_position"); - if (settingsDt.oScroll.sX !== '' || settingsDt.oScroll.sY !== '') { - table_selector = '.yadcf-datatables-table-' + table_selector_jq_friendly; - } - if (oTable._fnGetUniqueThs() !== undefined) { - unique_th = oTable._fnGetUniqueThs(); - } - for (columnObjKey in args) { - if (args.hasOwnProperty(columnObjKey)) { - columnObj = args[columnObjKey]; - - data = columnObj.data; - column_data = []; - filter_container_id = columnObj.filter_container_id; - column_number = columnObj.column_number; - column_number = +column_number; - column_position = column_number; - - if (plugins[table_selector_jq_friendly] !== undefined && plugins[table_selector_jq_friendly].ColReorder !== undefined) { - column_position = plugins[table_selector_jq_friendly].ColReorder[column_number]; - } - - columnObj.column_number = column_number; - column_number_data = undefined; - if (isNaN(settingsDt.aoColumns[column_position].mData) && typeof settingsDt.aoColumns[column_position].mData !== 'object') { - column_number_data = settingsDt.aoColumns[column_position].mData; - columnObj.column_number_data = column_number_data; - } - column_data_type = columnObj.column_data_type; - html_data_type = columnObj.html_data_type; - text_data_delimiter = columnObj.text_data_delimiter; - filter_default_label = columnObj.filter_default_label; - filter_reset_button_text = columnObj.filter_reset_button_text; - enable_auto_complete = columnObj.enable_auto_complete; - sort_as = columnObj.sort_as; - sort_order = columnObj.sort_order; - date_format = columnObj.date_format; - //for jquery datepicker - date_format = date_format.replace("yyyy", "yy"); - columnObj.date_format = date_format; - - if (columnObj.ignore_char !== undefined && !(columnObj.ignore_char instanceof RegExp)) { - ignore_char = new RegExp(columnObj.ignore_char, "g"); - columnObj.ignore_char = ignore_char; - } - filter_match_mode = columnObj.filter_match_mode; - - if (column_number === undefined) { - alert("You must specify column number"); - return; - } - - - - if (enable_auto_complete === true) { - columnObj.filter_type = "auto_complete"; - } - - if (filter_default_label === undefined) { - if (columnObj.filter_type === "select" || columnObj.filter_type === 'custom_func') { - filter_default_label = "Select value"; - } else if (columnObj.filter_type === "multi_select" || columnObj.filter_type === 'multi_select_custom_func') { - filter_default_label = "Select values"; - } else if (columnObj.filter_type === "auto_complete" || columnObj.filter_type === "text") { - filter_default_label = 'Type to filter'; - } else if (columnObj.filter_type === "range_number" || columnObj.filter_type === "range_date") { - filter_default_label = ["from", "to"]; - } else if (columnObj.filter_type === "date") { - filter_default_label = "Select a date"; - } - columnObj.filter_default_label = filter_default_label; - } - - if (filter_reset_button_text === undefined) { - filter_reset_button_text = "x"; - } - - if (data === undefined) { - columnObj.col_filter_array = undefined; - column_data = parseTableColumn(oTable, columnObj); - } else { - for (ii = 0; ii < data.length; ii++) { - column_data.push(data[ii]); - } - } - - column_data = sortColumnData(column_data, columnObj); - - if (columnObj.filter_type === "range_number_slider") { - min_val = findMinInArray(column_data, ignore_char); - max_val = findMaxInArray(column_data, ignore_char); - } - - - if (filter_container_id === undefined) { - //Can't show filter inside a column for a hidden one (place it outside using filter_container_id) - if (settingsDt.aoColumns[column_position].bVisible === false) { - //console.log('Yadcf warning: Can\'t show filter inside a column N#' + column_number + ' for a hidden one (place it outside using filter_container_id)'); - continue; - } - - if (filters_position !== 'thead') { - if (unique_th === undefined) { - //handle hidden columns - col_num_visible = column_position; - for (col_num_visible_iter = 0; col_num_visible_iter < settingsDt.aoColumns.length && col_num_visible_iter < column_position; col_num_visible_iter++) { - if (settingsDt.aoColumns[col_num_visible_iter].bVisible === false) { - col_num_visible--; - } - } - column_position = col_num_visible; - filter_selector_string = table_selector + ' ' + filters_position + ' th:eq(' + column_position + ')'; - } else { - filter_selector_string = table_selector + ' ' + filters_position + ' th:eq(' + $(unique_th[column_position]).index() + ')'; - } - } else { - filter_selector_string = table_selector + ' ' + filters_position + ' tr:eq(' + $(unique_th[column_position]).parent().index() + ') th:eq(' + $(unique_th[column_position]).index() + ')'; - } - $filter_selector = $(filter_selector_string).find(".yadcf-filter"); - } else { - if ($("#" + filter_container_id).length === 0) { - alert("Filter container could not be found."); - return; - } - filter_selector_string = "#" + filter_container_id; - $filter_selector = $(filter_selector_string).find(".yadcf-filter"); - } - - - - if (columnObj.filter_type === "select" || columnObj.filter_type === 'custom_func') { - - options_tmp = ""; - - if (columnObj.select_type === 'select2' && columnObj.select_type_options.placeholder !== undefined && columnObj.select_type_options.allowClear === true) { - options_tmp = ""; - } - - if (typeof column_data[0] === 'object') { - for (ii = 0; ii < column_data.length; ii++) { - options_tmp += ""; - } - } else { - for (ii = 0; ii < column_data.length; ii++) { - options_tmp += ""; - } - } - column_data = options_tmp; - - } else if (columnObj.filter_type === "multi_select" || columnObj.filter_type === 'multi_select_custom_func') { - if (columnObj.select_type === undefined) { - options_tmp = ""; - } else { - options_tmp = ""; - } - if (typeof column_data[0] === 'object') { - for (ii = 0; ii < column_data.length; ii++) { - options_tmp += ""; - } - } else { - for (ii = 0; ii < column_data.length; ii++) { - options_tmp += ""; - } - } - column_data = options_tmp; - } - - if ($filter_selector.length === 1) { - if (columnObj.filter_type === "select" || columnObj.filter_type === "multi_select") { - - $filter_selector.empty(); - $filter_selector.append(column_data); - if (settingsDt.aoPreSearchCols[column_position].sSearch !== '') { - tmpStr = settingsDt.aoPreSearchCols[column_position].sSearch; - if (columnObj.filter_type === "select") { - tmpStr = yadcfParseMatchFilter(tmpStr, getOptions(oTable.selector)[column_number].filter_match_mode); - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr).addClass("inuse"); - } else if (columnObj.filter_type === "multi_select") { - tmpStr = yadcfParseMatchFilterMultiSelect(tmpStr, getOptions(oTable.selector)[column_number].filter_match_mode); - tmpStr = tmpStr.replace(/\\/g, ""); - tmpStr = tmpStr.split("|"); - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr); - } - } - if (columnObj.select_type !== undefined && columnObj.select_type === 'chosen') { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).trigger("chosen:updated"); - } else if (columnObj.select_type !== undefined && columnObj.select_type === 'select2') { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).select2("destroy").select2(columnObj.select_type_options); - } - } else if (columnObj.filter_type === "auto_complete") { - $(document).data("yadcf-filter-" + table_selector_jq_friendly + "-" + column_number, column_data); - } - } else { - if (filter_container_id === undefined) { - if ($(filter_selector_string + " div.DataTables_sort_wrapper").length > 0) { - $(filter_selector_string + " div.DataTables_sort_wrapper").css("display", "inline-block"); - } - } else { - if ($("#yadcf-filter-wrapper-" + filter_container_id).length === 0) { - $("#" + filter_container_id).append("
"); - } - filter_selector_string = "#yadcf-filter-wrapper-" + filter_container_id; - } - - if (columnObj.filter_type === "select" || columnObj.filter_type === 'custom_func') { - - //add a wrapper to hold both filter and reset button - $(filter_selector_string).append("
"); - filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; - - if (columnObj.filter_type === "select") { - filterActionStr = 'onchange="yadcf.doFilter(this, \'' + table_selector_jq_friendly + '\', ' + column_number + ', \'' + filter_match_mode + '\');"'; - if (columnObj.externally_triggered === true) { - filterActionStr = ''; - } - $(filter_selector_string).append(""); - if (filter_reset_button_text !== false) { - $(filter_selector_string).find(".yadcf-filter").after(""); - } - } else { - filterActionStr = 'onchange="yadcf.doFilterCustomDateFunc(this, \'' + table_selector_jq_friendly + '\', ' + column_number + ');"'; - if (columnObj.externally_triggered === true) { - filterActionStr = ''; - } - $(filter_selector_string).append(""); - if (filter_reset_button_text !== false) { - $(filter_selector_string).find(".yadcf-filter").after(""); - } - - if (settingsDt.oFeatures.bStateSave === true && settingsDt.oLoadedState) { - if (settingsDt.oLoadedState.yadcfState && settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly] && settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly][column_number]) { - tmpStr = settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from; - if (tmpStr === '-1' || tmpStr === undefined) { - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr); - } else { - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr).addClass("inuse"); - } - } - } - if (settingsDt.oFeatures.bServerSide !== true && columnObj.externally_triggered !== true) { - addCustomFunctionFilterCapability(table_selector_jq_friendly, "yadcf-filter-" + table_selector_jq_friendly + "-" + column_number, column_number); - } - } - - if (settingsDt.aoPreSearchCols[column_position].sSearch !== '') { - tmpStr = settingsDt.aoPreSearchCols[column_position].sSearch; - tmpStr = yadcfParseMatchFilter(tmpStr, getOptions(oTable.selector)[column_number].filter_match_mode); - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr).addClass("inuse"); - } - - if (columnObj.select_type !== undefined && columnObj.select_type === 'chosen') { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).chosen(columnObj.select_type_options); - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).next().attr("onclick", "yadcf.stopPropagation(event);").attr("onmousedown", "yadcf.stopPropagation(event);"); - } else if (columnObj.select_type !== undefined && columnObj.select_type === 'select2') { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).select2(columnObj.select_type_options); - } - - } else if (columnObj.filter_type === "multi_select" || columnObj.filter_type === 'multi_select_custom_func') { - - //add a wrapper to hold both filter and reset button - $(filter_selector_string).append("
"); - filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; - - if (columnObj.filter_type === "multi_select") { - filterActionStr = 'onchange="yadcf.doFilterMultiSelect(this, \'' + table_selector_jq_friendly + '\', ' + column_number + ', \'' + filter_match_mode + '\');"'; - if (columnObj.externally_triggered === true) { - filterActionStr = ''; - } - $(filter_selector_string).append(""); - - if (filter_reset_button_text !== false) { - $(filter_selector_string).find(".yadcf-filter").after(""); - } - - if (settingsDt.aoPreSearchCols[column_position].sSearch !== '') { - tmpStr = settingsDt.aoPreSearchCols[column_position].sSearch; - tmpStr = yadcfParseMatchFilterMultiSelect(tmpStr, getOptions(oTable.selector)[column_number].filter_match_mode); - tmpStr = tmpStr.replace(/\\/g, ""); - tmpStr = tmpStr.split("|"); - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr); - } - } else { - filterActionStr = 'onchange="yadcf.doFilterCustomDateFunc(this, \'' + table_selector_jq_friendly + '\', ' + column_number + ');"'; - if (columnObj.externally_triggered === true) { - filterActionStr = ''; - } - $(filter_selector_string).append(""); - - if (filter_reset_button_text !== false) { - $(filter_selector_string).find(".yadcf-filter").after(""); - } - - if (settingsDt.oFeatures.bStateSave === true && settingsDt.oLoadedState) { - if (settingsDt.oLoadedState.yadcfState && settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly] && settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly][column_number]) { - tmpStr = settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from; - if (tmpStr === '-1' || tmpStr === undefined) { - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr); - } else { - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr).addClass("inuse"); - } - } - } - if (settingsDt.oFeatures.bServerSide !== true && columnObj.externally_triggered !== true) { - addCustomFunctionFilterCapability(table_selector_jq_friendly, "yadcf-filter-" + table_selector_jq_friendly + "-" + column_number, column_number); - } - } - - if (columnObj.filter_container_id === undefined && columnObj.select_type_options.width === undefined) { - columnObj.select_type_options = $.extend(columnObj.select_type_options, {width: $(filter_selector_string).closest("th").width() + "px"}); - } - if (columnObj.select_type !== undefined && columnObj.select_type === 'chosen') { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).chosen(columnObj.select_type_options); - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).next().attr("onclick", "yadcf.stopPropagation(event);").attr("onmousedown", "yadcf.stopPropagation(event);"); - } else if (columnObj.select_type !== undefined && columnObj.select_type === 'select2') { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).select2(columnObj.select_type_options); - } - - } else if (columnObj.filter_type === "auto_complete") { - - //add a wrapper to hold both filter and reset button - $(filter_selector_string).append("
"); - filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; - - filterActionStr = 'onkeyup="yadcf.autocompleteKeyUP(\'' + table_selector_jq_friendly + '\',event);"'; - if (columnObj.externally_triggered === true) { - filterActionStr = ''; - } - $(filter_selector_string).append(""); - $(document).data("yadcf-filter-" + table_selector_jq_friendly + "-" + column_number, column_data); - - if (filter_reset_button_text !== false) { - $(filter_selector_string).find(".yadcf-filter").after(""); - } - - } else if (columnObj.filter_type === "text") { - - //add a wrapper to hold both filter and reset button - $(filter_selector_string).append("
"); - filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; - - filterActionStr = 'onkeyup="yadcf.textKeyUP(\'' + table_selector_jq_friendly + '\', ' + column_number + ');"'; - if (columnObj.externally_triggered === true) { - filterActionStr = ''; - } - - $(filter_selector_string).append(""); - - if (filter_reset_button_text !== false) { - $(filter_selector_string).find(".yadcf-filter").after(""); - } - - if (settingsDt.aoPreSearchCols[column_position].sSearch !== '') { - tmpStr = settingsDt.aoPreSearchCols[column_position].sSearch; - tmpStr = yadcfParseMatchFilter(tmpStr, getOptions(oTable.selector)[column_number].filter_match_mode); - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr).addClass("inuse"); - } - - } else if (columnObj.filter_type === "date") { - - addDateFilter(filter_selector_string, table_selector_jq_friendly, column_number, filter_reset_button_text, filter_default_label, date_format); - - } else if (columnObj.filter_type === "range_number") { - - addRangeNumberFilter(filter_selector_string, table_selector_jq_friendly, column_number, filter_reset_button_text, filter_default_label, ignore_char); - - } else if (columnObj.filter_type === "range_number_slider") { - - addRangeNumberSliderFilter(filter_selector_string, table_selector_jq_friendly, column_number, filter_reset_button_text, min_val, max_val, ignore_char); - - } else if (columnObj.filter_type === "range_date") { - - addRangeDateFilter(filter_selector_string, table_selector_jq_friendly, column_number, filter_reset_button_text, filter_default_label, date_format); - - } - } - - if ($(document).data("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val") !== undefined && $(document).data("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val") !== "-1") { - $(filter_selector_string).find(".yadcf-filter").val($(document).data("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val")); - } - if (columnObj.filter_type === "auto_complete") { - if (columnObj.filter_plugin_options !== undefined) { - if (columnObj.filter_plugin_options.source !== undefined) { - columnObj.filter_plugin_options.select = autocompleteSelect; - } else { - columnObj.filter_plugin_options.source = $(document).data("yadcf-filter-" + table_selector_jq_friendly + "-" + column_number); - columnObj.filter_plugin_options.select = autocompleteSelect; - } - } else { - columnObj.filter_plugin_options = { - source: $(document).data("yadcf-filter-" + table_selector_jq_friendly + "-" + column_number), - select: autocompleteSelect - }; - } - if (columnObj.externally_triggered === true) { - delete columnObj.filter_plugin_options.select; - } - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).autocomplete(columnObj.filter_plugin_options); - if (settingsDt.aoPreSearchCols[column_position].sSearch !== '') { - tmpStr = settingsDt.aoPreSearchCols[column_position].sSearch; - tmpStr = yadcfParseMatchFilter(tmpStr, getOptions(oTable.selector)[column_number].filter_match_mode); - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr).addClass("inuse"); - } - } - } - } - if (exFilterColumnQueue.length > 0) { - (exFilterColumnQueue.shift())(); - } - } - - function endsWith(str, suffix) { - return str.indexOf(suffix, str.length - suffix.length) !== -1; - } - - function rangeClear(table_selector_jq_friendly, event) { - event = eventTargetFixUp(event); - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - var oTable = oTables[table_selector_jq_friendly], - yadcfState, - column_number; - - column_number = parseInt($(event.target).parent().attr("id").replace('yadcf-filter-wrapper-' + table_selector_jq_friendly + '-', ''), 10); - - $(event.target).parent().find(".yadcf-filter-range").val(""); - if ($(event.target).parent().find(".yadcf-filter-range-number").length > 0) { - $($(event.target).parent().find(".yadcf-filter-range")[0]).focus(); - } - - if (oTable.fnSettings().oFeatures.bServerSide !== true) { - oTable.fnDraw(); - } else { - oTable.fnFilter('-yadcf_delim-', column_number); - } - - if (!oTable.fnSettings().oLoadedState) { - oTable.fnSettings().oLoadedState = {}; - oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); - } - if (oTable.fnSettings().oFeatures.bStateSave === true) { - if (oTable.fnSettings().oLoadedState.yadcfState !== undefined && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] !== undefined) { - oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number] = - { - 'from' : "", - 'to' : "" - }; - } else { - yadcfState = {}; - yadcfState[table_selector_jq_friendly] = []; - yadcfState[table_selector_jq_friendly][column_number] = { - 'from' : "", - 'to' : "" - }; - oTable.fnSettings().oLoadedState.yadcfState = yadcfState; - } - oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); - } - resetIApiIndex(); - - $(event.target).parent().find(".yadcf-filter-range").removeClass("inuse"); - - return; - } - - function rangeNumberSliderClear(table_selector_jq_friendly, event) { - event = eventTargetFixUp(event); - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - var oTable = oTables[table_selector_jq_friendly], - min_val, - max_val; - - min_val = +$($(event.target).parent().find(".yadcf-filter-range-number-slider-min-tip-hidden")).text(); - max_val = +$($(event.target).parent().find(".yadcf-filter-range-number-slider-max-tip-hidden")).text(); - - $("#" + $(event.target).prev().find(".yadcf-filter-range-number-slider").attr("id")).slider("option", "yadcf-reset", true); - $("#" + $(event.target).prev().find(".yadcf-filter-range-number-slider").attr("id")).slider("option", "values", [min_val, max_val]); - - $($(event.target).prev().find(".ui-slider-handle")[0]).attr("tabindex", -1).focus(); - - $($(event.target).prev().find(".ui-slider-handle")[0]).removeClass("inuse"); - $($(event.target).prev().find(".ui-slider-handle")[1]).removeClass("inuse"); - $(event.target).prev().find(".ui-slider-range").removeClass("inuse"); - - oTable.fnDraw(); - resetIApiIndex(); - - return; - } - - function dateKeyUP(table_selector_jq_friendly, date_format, event) { - var oTable, - date, - dateId, - column_number; - - event = eventTargetFixUp(event); - - dateId = event.target.id; - date = document.getElementById(dateId).value; - try { - if (date.length === (date_format.length + 2)) { - date = (date !== "") ? $.datepicker.parseDate(date_format, date) : date; - } - } catch (err1) {} - - if (((date instanceof Date) || date === "")) { - - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - oTable = oTables[table_selector_jq_friendly]; - column_number = parseInt(dateId.replace("yadcf-filter-" + table_selector_jq_friendly + "-", ""), 10); - - if (date instanceof Date) { - $("#" + dateId).addClass('inuse'); - oTable.fnFilter(document.getElementById(dateId).value, column_number); - } else { - $("#" + dateId).removeClass('inuse'); - } - if ($.trim(event.target.value) === '' && $(event.target).hasClass('inuse')) { - $('#' + event.target.id).removeClass('inuse'); - oTable.fnFilter('', column_number); - } - resetIApiIndex(); - } else if ($(event.target).hasClass('inuse')) { - - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - oTable = oTables[table_selector_jq_friendly]; - column_number = parseInt(dateId.replace("yadcf-filter-" + table_selector_jq_friendly + "-", ""), 10); - - $("#" + dateId).removeClass('inuse'); - - oTable.fnFilter('', column_number); - resetIApiIndex(); - } - } - - function rangeDateKeyUP(table_selector_jq_friendly, date_format, event) { - event = eventTargetFixUp(event); - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - var oTable = oTables[table_selector_jq_friendly], - min, - max, - fromId, - toId, - column_number, - options, - keyUp; - - column_number = parseInt($(event.target).attr("id").replace('-from-date-', '').replace('-to-date-', '').replace('yadcf-filter-' + table_selector_jq_friendly, ''), 10); - options = getOptions(oTable.selector)[column_number]; - - keyUp = function () { - if (event.target.id.indexOf("-from-") !== -1) { - fromId = event.target.id; - toId = event.target.id.replace("-from-", "-to-"); - - min = document.getElementById(fromId).value; - max = document.getElementById(toId).value; - } else { - toId = event.target.id; - fromId = event.target.id.replace("-to-", "-from-"); - - max = document.getElementById(toId).value; - min = document.getElementById(fromId).value; - } - - try { - if (min.length === (date_format.length + 2)) { - min = (min !== "") ? $.datepicker.parseDate(date_format, min) : min; - } - } catch (err1) {} - try { - if (max.length === (date_format.length + 2)) { - max = (max !== "") ? $.datepicker.parseDate(date_format, max) : max; - } - } catch (err2) {} - - if (((max instanceof Date) && (min instanceof Date) && (max >= min)) || min === "" || max === "") { - - if (oTable.fnSettings().oFeatures.bServerSide !== true) { - oTable.fnDraw(); - } else { - oTable.fnFilter(document.getElementById(fromId).value + '-yadcf_delim-' + document.getElementById(toId).value, column_number); - } - - if (min instanceof Date) { - $("#" + fromId).addClass("inuse"); - } else { - $("#" + fromId).removeClass("inuse"); - } - if (max instanceof Date) { - $("#" + toId).addClass("inuse"); - } else { - $("#" + toId).removeClass("inuse"); - } - - if ($.trim(event.target.value) === "" && $(event.target).hasClass("inuse")) { - $("#" + event.target.id).removeClass("inuse"); - } - - } - resetIApiIndex(); - }; - - if (options.filter_delay === undefined) { - keyUp(table_selector_jq_friendly, event); - } else { - yadcfDelay(function () { - keyUp(table_selector_jq_friendly, event); - }, options.filter_delay); - } - } - - function rangeNumberKeyUP(table_selector_jq_friendly, event) { - event = eventTargetFixUp(event); - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - var oTable = oTables[table_selector_jq_friendly], - min, - max, - fromId, - toId, - yadcfState, - column_number, - options, - keyUp; - - column_number = parseInt($(event.target).attr("id").replace('-from-', '').replace('-to-', '').replace('yadcf-filter-' + table_selector_jq_friendly, ''), 10); - options = getOptions(oTable.selector)[column_number]; - - keyUp = function () { - - if (event.target.id.indexOf("-from-") !== -1) { - fromId = event.target.id; - toId = event.target.id.replace("-from-", "-to-"); - - min = document.getElementById(fromId).value; - max = document.getElementById(toId).value; - } else { - toId = event.target.id; - fromId = event.target.id.replace("-to-", "-from-"); - - max = document.getElementById(toId).value; - min = document.getElementById(fromId).value; - } - - min = (min !== "") ? (+min) : min; - max = (max !== "") ? (+max) : max; - - if ((!isNaN(max) && !isNaN(min) && (max >= min)) || min === "" || max === "") { - - if (oTable.fnSettings().oFeatures.bServerSide !== true) { - oTable.fnDraw(); - } else { - oTable.fnFilter(min + '-yadcf_delim-' + max, column_number); - } - if (document.getElementById(fromId).value !== "") { - $("#" + fromId).addClass("inuse"); - } - if (document.getElementById(toId).value !== "") { - $("#" + toId).addClass("inuse"); - } - - if ($.trim(event.target.value) === "" && $(event.target).hasClass("inuse")) { - $("#" + event.target.id).removeClass("inuse"); - } - if (!oTable.fnSettings().oLoadedState) { - oTable.fnSettings().oLoadedState = {}; - oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); - } - if (oTable.fnSettings().oFeatures.bStateSave === true) { - if (oTable.fnSettings().oLoadedState.yadcfState !== undefined && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] !== undefined) { - oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number] = - { - 'from' : min, - 'to' : max - }; - } else { - yadcfState = {}; - yadcfState[table_selector_jq_friendly] = []; - yadcfState[table_selector_jq_friendly][column_number] = { - 'from' : min, - 'to' : max - }; - oTable.fnSettings().oLoadedState.yadcfState = yadcfState; - } - oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); - } - } - resetIApiIndex(); - }; - - if (options.filter_delay === undefined) { - keyUp(); - } else { - yadcfDelay(function () { - keyUp(); - }, options.filter_delay); - } - } - - function doFilterMultiTables(tablesSelectors, event, column_number_str, clear) { - - var columnsObj = getOptions(tablesSelectors + '_' + column_number_str)[column_number_str], - regex = false, - smart = true, - caseInsen = true, - serachVal, - tablesAsOne, - tablesArray = oTables[tablesSelectors]; - - event = eventTargetFixUp(event); - tablesAsOne = new $.fn.dataTable.Api(tablesArray); - - if (clear !== undefined || event.target.value === '-1') { - $(event.target).prev().val("").focus(); - $(event.target).prev().removeClass("inuse"); - if (columnsObj.column_number instanceof Array) { - tablesAsOne.columns(columnsObj.column_number).search('').draw(); - } else { - tablesAsOne.search('').draw(); - } - return; - } - - $(event.target).addClass("inuse"); - - serachVal = event.target.value; - smart = false; - caseInsen = columnsObj.case_insensitive; -/* - if (columnsObj.filter_match_mode === "contains") { - regex = false; - } else if (columnsObj.filter_match_mode === "exact") { - regex = true; - serachVal = "^" + serachVal + "$"; - } else if (columnsObj.filter_match_mode === "startsWith") { - regex = true; - serachVal = "^" + serachVal; - }*/ - if (columnsObj.column_number instanceof Array) { - tablesAsOne.columns(columnsObj.column_number).search(serachVal, regex, smart, caseInsen).draw(); - } else { - tablesAsOne.search(serachVal, regex, smart, caseInsen).draw(); - } - } - - function textKeyUpMultiTables(tablesSelectors, event, column_number_str, clear) { - - var keyUp, - columnsObj = getOptions(tablesSelectors + '_' + column_number_str)[column_number_str], - regex = false, - smart = true, - caseInsen = true, - serachVal, - tablesAsOne, - tablesArray = oTables[tablesSelectors]; - - event = eventTargetFixUp(event); - tablesAsOne = new $.fn.dataTable.Api(tablesArray); - - keyUp = function (tablesAsOne, event, clear) { - - if (clear !== undefined || event.target.value === '') { - if (clear !== undefined) { - $(event.target).prev().val("").focus(); - $(event.target).prev().removeClass("inuse"); - } else { - $(event.target).val("").focus(); - $(event.target).removeClass("inuse"); - } - if (columnsObj.column_number instanceof Array) { - tablesAsOne.columns(columnsObj.column_number).search('').draw(); - } else { - tablesAsOne.search('').draw(); - } - return; - } - - $(event.target).addClass("inuse"); - - serachVal = event.target.value; - smart = false; - caseInsen = columnsObj.case_insensitive; -/* - if (columnsObj.filter_match_mode === "contains") { - regex = false; - } else if (columnsObj.filter_match_mode === "exact") { - regex = true; - serachVal = "^" + serachVal + "$"; - } else if (columnsObj.filter_match_mode === "startsWith") { - regex = true; - serachVal = "^" + serachVal; - } -*/ - if (columnsObj.column_number instanceof Array) { - tablesAsOne.columns(columnsObj.column_number).search(serachVal, regex, smart, caseInsen).draw(); - } else { - tablesAsOne.search(serachVal, regex, smart, caseInsen).draw(); - } - - }; - - if (columnsObj.filter_delay === undefined) { - keyUp(tablesAsOne, event, clear); - } else { - yadcfDelay(function () { - keyUp(tablesAsOne, event, clear); - }, columnsObj.filter_delay); - } - } - - function textKeyUP(table_selector_jq_friendly, column_number, clear) { - var column_number_filter, - oTable = oTables[table_selector_jq_friendly], - keyUp, - options, - settingsDt = getSettingsObjFromTable(oTable); - - if (settingsDt.oSavedState != null && settingsDt.oSavedState.ColReorder !== undefined) { - initColReorder(settingsDt.oSavedState, table_selector_jq_friendly); - column_number_filter = plugins[table_selector_jq_friendly].ColReorder[column_number]; - } else { - column_number_filter = column_number; - } - options = getOptions(oTable.selector)[column_number]; - - keyUp = function (table_selector_jq_friendly, column_number, clear) { - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - - if (clear !== undefined || $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).val() === '') { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).val("").focus(); - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).removeClass("inuse"); - oTable.fnFilter("", column_number_filter); - resetIApiIndex(); - return; - } - - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).addClass("inuse"); - - yadcfMatchFilter(oTable, $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).val(), options.filter_match_mode, column_number_filter); - - resetIApiIndex(); - }; - - if (options.filter_delay === undefined) { - keyUp(table_selector_jq_friendly, column_number, clear); - } else { - yadcfDelay(function () { - keyUp(table_selector_jq_friendly, column_number, clear); - }, options.filter_delay); - } - } - - function autocompleteKeyUP(table_selector_jq_friendly, event) { - event = eventTargetFixUp(event); - - if (event.target.value === "" && event.keyCode === 8 && $(event.target).hasClass("inuse")) { - $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; - var oTable = oTables[table_selector_jq_friendly], - column_number = parseInt($(event.target).attr("id").replace("yadcf-filter-" + table_selector_jq_friendly + "-", ""), 10); - - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).removeClass("inuse"); - $(document).removeData("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val"); - oTable.fnFilter("", column_number); - resetIApiIndex(); - } - } - - function isDOMSource(tableVar) { - if (tableVar.fnSettings().sAjaxSource == null && tableVar.fnSettings().ajax == null) { - return true; - } - return false; - } - - function scrollXYHandler(oTable, table_selector) { - var $tmpSelector, - filters_position = $(document).data(table_selector + "_filters_position"), - table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly(table_selector); - - if (filters_position === 'thead') { - filters_position = '.dataTables_scrollHead'; - } else { - filters_position = '.dataTables_scrollFoot'; - } - if (oTable.fnSettings().oScroll.sX !== '' || oTable.fnSettings().oScroll.sY !== '') { - $tmpSelector = $(table_selector).closest('.dataTables_scroll').find(filters_position + ' table'); - $tmpSelector.addClass('yadcf-datatables-table-' + table_selector_jq_friendly); - } - } - - function initAndBindTable(oTable, table_selector, index) { - - var table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly(table_selector), - table_selector_tmp; - oTables[table_selector_jq_friendly] = oTable; - oTablesIndex[table_selector_jq_friendly] = index; - - scrollXYHandler(oTable, table_selector); - - if (isDOMSource(oTable)) { - table_selector_tmp = table_selector; - if (table_selector.indexOf(":eq") !== -1) { - table_selector_tmp = table_selector.substring(0, table_selector.lastIndexOf(":eq")); - } - appendFilters(oTable, yadcf.getOptions(table_selector_tmp), table_selector); - } else { - appendFilters(oTable, yadcf.getOptions(table_selector), table_selector); - if (yadcfVersionCheck('1.10')) { - $(document).off('draw.dt', oTable.selector).on('draw.dt', oTable.selector, function (event, ui) { - appendFilters(oTable, yadcf.getOptions(ui.oInstance.selector), ui.oInstance.selector); - }); - $(document).off('xhr.dt', oTable.selector).on('xhr.dt', oTable.selector, function (e, settings, json) { - var col_num, - column_number_filter, - table_selector_jq_friendly = generateTableSelectorJQFriendly(oTable.selector); - if (settings.oSavedState !== null) { - initColReorder(settings.oSavedState, table_selector_jq_friendly); - } - for (col_num in yadcf.getOptions(settings.oInstance.selector)) { - if (yadcf.getOptions(settings.oInstance.selector).hasOwnProperty(col_num)) { - if (json['yadcf_data_' + col_num] !== undefined) { - column_number_filter = col_num; - if (settings.oSavedState !== null) { - column_number_filter = plugins[table_selector_jq_friendly].ColReorder[col_num]; - } - yadcf.getOptions(settings.oInstance.selector)[col_num].data = json['yadcf_data_' + column_number_filter]; - } - } - } - }); - $(document).off('column-reorder.dt', oTable.selector).on('column-reorder.dt', oTable.selector, function (e, settings, json) { - var table_selector_jq_friendly = generateTableSelectorJQFriendly(oTable.selector); - initColReorder('', table_selector_jq_friendly, true); - }); - $(document).off('column-visibility.dt', oTable.selector).on('column-visibility.dt', oTable.selector, function (e, settings, col_num, state) { - var obj = {}; - if (state === true) { - if (settings.oSavedState != null && settings.oSavedState.ColReorder !== undefined) { - col_num = settings.oSavedState.ColReorder[col_num]; - } - obj[col_num] = yadcf.getOptions(settings.oInstance.selector)[col_num]; - obj[col_num].column_number = col_num; - if (obj[col_num] !== undefined) { - appendFilters(oTables[yadcf.generateTableSelectorJQFriendly(settings.oInstance.selector)], - obj, - settings.oInstance.selector); - } - } - }); - $(document).off('destroy.dt', oTable.selector).on('destroy.dt', oTable.selector, function (event, ui) { - removeFilters(oTable, yadcf.getOptions(ui.oInstance.selector), ui.oInstance.selector); - }); - } else { - $(document).off('draw', oTable.selector).on('draw', oTable.selector, function (event, ui) { - appendFilters(oTable, yadcf.getOptions(ui.oInstance.selector), ui.oInstance.selector); - }); - $(document).off('destroy', oTable.selector).on('destroy', oTable.selector, function (event, ui) { - removeFilters(oTable, yadcf.getOptions(ui.oInstance.selector), ui.oInstance.selector); - }); - } - } - //destroy event affects both DOM and Ajax - if (yadcfVersionCheck('1.10')) { - $(document).off('destroy.dt', oTable.selector).on('destroy.dt', oTable.selector, function (event, ui) { - removeFilters(oTable, yadcf.getOptions(ui.oInstance.selector), ui.oInstance.selector); - }); - } else { - $(document).off('destroy', oTable.selector).on('destroy', oTable.selector, function (event, ui) { - removeFilters(oTable, yadcf.getOptions(ui.oInstance.selector), ui.oInstance.selector); - }); - } - if (oTable.fnSettings().oFeatures.bStateSave === true) { - if (yadcfVersionCheck('1.10')) { - $(oTable.selector).off('stateSaveParams.dt').on('stateSaveParams.dt', function (e, settings, data) { - if (settings.oLoadedState && settings.oLoadedState.yadcfState !== undefined) { - data.yadcfState = settings.oLoadedState.yadcfState; - } else { - data.naruto = 'kurama'; - } - }); - } else { - $(oTable.selector).off('stateSaveParams').on('stateSaveParams', function (e, settings, data) { - if (settings.oLoadedState && settings.oLoadedState.yadcfState !== undefined) { - data.yadcfState = settings.oLoadedState.yadcfState; - } else { - data.naruto = 'kurama'; - } - }); - } - //when using DOM source - if (isDOMSource(oTable)) { - //we need to make sure that the yadcf state will be saved after page reload - oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); - //redraw the table in order to apply the filters - oTable.fnDraw(false); - } - } - } - - $.fn.yadcf = function (options_arg, filters_position) { - - if (filters_position === undefined || filters_position === 'header') { - filters_position = 'thead'; - } else { - filters_position = 'tfoot'; - } - $(document).data(this.selector + "_filters_position", filters_position); - - if ($(this.selector).length === 1) { - setOptions(this.selector, options_arg); - initAndBindTable(this, this.selector, 0); - } else { - var i = 0, - selector; - for (i; i < $(this.selector).length; i++) { - $.fn.dataTableExt.iApiIndex = i; - selector = this.selector + ":eq(" + i + ")"; - setOptions(this.selector, options_arg); - initAndBindTable(this, selector, i); - } - $.fn.dataTableExt.iApiIndex = 0; - } - return this; - }; - - function init(oTable, options_arg, filters_position) { - var instance = oTable.settings()[0].oInstance, - i = 0, - selector; - - if (filters_position === undefined || filters_position === 'header') { - filters_position = 'thead'; - } else { - filters_position = 'tfoot'; - } - $(document).data(instance.selector + "_filters_position", filters_position); - - if ($(instance.selector).length === 1) { - setOptions(instance.selector, options_arg); - initAndBindTable(instance, instance.selector, 0, oTable); - } else { - for (i; i < $(instance.selector).length; i++) { - $.fn.dataTableExt.iApiIndex = i; - selector = instance.selector + ":eq(" + i + ")"; - setOptions(instance.selector, options_arg); - initAndBindTable(instance, selector, i, oTable); - } - $.fn.dataTableExt.iApiIndex = 0; - } - } - - function appendFiltersMultipleTables(tablesArray, tablesSelectors, colObjDummy) { - var filter_selector_string = "#" + colObjDummy.filter_container_id, - $filter_selector = $(filter_selector_string).find(".yadcf-filter"), - table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendlyNew(tablesSelectors), - options_tmp, - ii, - column_number_str = columnsArrayToString(colObjDummy.column_number).column_number_str, - tableTmp, - tableTmpArr, - tableTmpArrIndex, - filterOptions = getOptions(tablesSelectors + '_' + column_number_str)[column_number_str], - column_number_index, - columnsTmpArr; - - //add a wrapper to hold both filter and reset button - $(filter_selector_string).append("
"); - filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; - - switch (filterOptions.filter_type) { - case 'text': - $(filter_selector_string).append(""); - if (filterOptions.filter_reset_button_text !== false) { - $(filter_selector_string).find(".yadcf-filter").after(""); - } - break; - case 'select': - options_tmp = ""; - if (filterOptions.select_type === 'select2' && filterOptions.select_type_options.placeholder !== undefined && filterOptions.select_type_options.allowClear === true) { - options_tmp = ""; - } - - if (filterOptions.data === undefined) { - filterOptions.data = []; - tableTmpArr = tablesSelectors.split(','); - for (tableTmpArrIndex = 0; tableTmpArrIndex < tableTmpArr.length; tableTmpArrIndex++) { - tableTmp = $('#' + tablesArray[tableTmpArrIndex].table().node().id).dataTable(); - if (isDOMSource(tableTmp)) { - //check if ajax source, if so, listen for dt.draw - columnsTmpArr = filterOptions.column_number; - for (column_number_index = 0; column_number_index < columnsTmpArr.length; column_number_index++) { - filterOptions.column_number = columnsTmpArr[column_number_index]; - filterOptions.data = filterOptions.data.concat(parseTableColumn(tableTmp, filterOptions)); - } - filterOptions.column_number = columnsTmpArr; - } else { - $(document).off('draw.dt', '#' + tablesArray[tableTmpArrIndex].table().node().id).on('draw.dt', '#' + tablesArray[tableTmpArrIndex].table().node().id, function (event, ui) { - var options_tmp = '', - ii; - columnsTmpArr = filterOptions.column_number; - for (column_number_index = 0; column_number_index < columnsTmpArr.length; column_number_index++) { - filterOptions.column_number = columnsTmpArr[column_number_index]; - filterOptions.data = filterOptions.data.concat(parseTableColumn(tableTmp, filterOptions)); - } - filterOptions.column_number = columnsTmpArr; - filterOptions.data = sortColumnData(filterOptions.data, filterOptions); - for (ii = 0; ii < filterOptions.data.length; ii++) { - options_tmp += ""; - } - $('#' + filterOptions.filter_container_id + ' select').empty().append(options_tmp); - if (filterOptions.select_type !== undefined && filterOptions.select_type === 'chosen') { - $('#' + filterOptions.filter_container_id + ' select').chosen(filterOptions.select_type_options); - $('#' + filterOptions.filter_container_id + ' select').next().attr("onclick", "yadcf.stopPropagation(event);").attr("onmousedown", "yadcf.stopPropagation(event);"); - } else if (filterOptions.select_type !== undefined && filterOptions.select_type === 'select2') { - $('#' + filterOptions.filter_container_id + ' select').select2(filterOptions.select_type_options); - } - }); - } - } - } - - filterOptions.data = sortColumnData(filterOptions.data, filterOptions); - - if (typeof filterOptions.data[0] === 'object') { - for (ii = 0; ii < filterOptions.data.length; ii++) { - options_tmp += ""; - } - } else { - for (ii = 0; ii < filterOptions.data.length; ii++) { - options_tmp += ""; - } - } - $(filter_selector_string).append(""); - - if (filterOptions.select_type !== undefined && filterOptions.select_type === 'chosen') { - $("#yadcf-filter-" + table_selector_jq_friendly).chosen(filterOptions.select_type_options); - $("#yadcf-filter-" + table_selector_jq_friendly).next().attr("onclick", "yadcf.stopPropagation(event);").attr("onmousedown", "yadcf.stopPropagation(event);"); - } else if (filterOptions.select_type !== undefined && filterOptions.select_type === 'select2') { - $("#yadcf-filter-" + table_selector_jq_friendly).select2(filterOptions.select_type_options); - } - if (filterOptions.filter_reset_button_text !== false) { - $(filter_selector_string).find(".yadcf-filter").after(""); - } - break; - default: - alert('Filters Multiple Tables does not support ' + filterOptions.filter_type); - } - } - - function initMultipleTables(tablesArray, filtersOptions) { - var i, - tablesSelectors = '', - default_options = { - filter_type : "text", - filter_container_id: '', - filter_reset_button_text: 'x', - case_insensitive: true - }, - columnsObjKey, - columnsObj, - columnsArrIndex, - column_number_str, - dummyArr; - - for (columnsArrIndex = 0; columnsArrIndex < filtersOptions.length; columnsArrIndex++) { - dummyArr = []; - columnsObj = filtersOptions[columnsArrIndex]; - if (columnsObj.filter_default_label === undefined) { - if (columnsObj.filter_type === "select" || columnsObj.filter_type === 'custom_func') { - columnsObj.filter_default_label = "Select value"; - } else if (columnsObj.filter_type === "multi_select" || columnsObj.filter_type === 'multi_select_custom_func') { - columnsObj.filter_default_label = "Select values"; - } else if (columnsObj.filter_type === "auto_complete" || columnsObj.filter_type === "text") { - columnsObj.filter_default_label = 'Type to filter'; - } else if (columnsObj.filter_type === "range_number" || columnsObj.filter_type === "range_date") { - columnsObj.filter_default_label = ["from", "to"]; - } else if (columnsObj.filter_type === "date") { - columnsObj.filter_default_label = "Select a date"; - } - } - columnsObj = $.extend({}, default_options, columnsObj); - - column_number_str = columnsArrayToString(columnsObj.column_number).column_number_str; - columnsObj.column_number_str = column_number_str; - - dummyArr.push(columnsObj); - - for (i = 0; i < tablesArray.length; i++) { - tablesSelectors += tablesArray[i].table().node().id + ','; - } - tablesSelectors = tablesSelectors.substring(0, tablesSelectors.length - 1); - - setOptions(tablesSelectors + '_' + column_number_str, dummyArr); - oTables[tablesSelectors] = tablesArray; - appendFiltersMultipleTables(tablesArray, tablesSelectors, columnsObj); - } - } - - function initMultipleColumns(table, filtersOptions) { - var tablesArray = []; - tablesArray.push(table); - initMultipleTables(tablesArray, filtersOptions); - } - - function stopPropagation(evt) { - if (evt.stopPropagation !== undefined) { - evt.stopPropagation(); - } else { - evt.cancelBubble = true; - } - } - - //-------------------------------------------------------- - function exInternalFilterColumnAJAXQueue(table_arg, col_filter_arr) { - return function () { - exFilterColumn(table_arg, col_filter_arr, true); - }; - } - - function exFilterColumn(table_arg, col_filter_arr, ajaxSource) { - var table_selector_jq_friendly, - j, - tmpStr, - column_number, - filter_value, - fromId, - toId, - sliderId, - optionsObj, - min, - max; - //check if the table arg is from new datatables API (capital "D") - if (table_arg.settings !== undefined) { - table_arg = table_arg.settings()[0].oInstance; - } - table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly(table_arg.selector); - if (isDOMSource(table_arg) || ajaxSource === true) { - for (j = 0; j < col_filter_arr.length; j++) { - column_number = col_filter_arr[j][0]; - optionsObj = getOptions(table_arg.selector)[column_number]; - filter_value = col_filter_arr[j][1]; - - switch (optionsObj.filter_type) { - case 'auto_complete': - case 'text': - case 'date': - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(filter_value).addClass('inuse'); - tmpStr = yadcfMatchFilterString(table_arg, column_number, filter_value, optionsObj.filter_match_mode, false); - table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = tmpStr; - break; - case 'select': - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(filter_value).addClass('inuse'); - tmpStr = yadcfMatchFilterString(table_arg, column_number, filter_value, optionsObj.filter_match_mode, false); - table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = tmpStr; - if (optionsObj.select_type !== undefined) { - if (optionsObj.select_type === 'chosen') { - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).trigger('chosen:updated'); - } else if (optionsObj.select_type === 'select2') { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).select2("destroy").select2(optionsObj.select_type_options); - } - } - break; - case 'multi_select': - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(filter_value); - tmpStr = yadcfMatchFilterString(table_arg, column_number, filter_value, optionsObj.filter_match_mode, true); - table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = tmpStr; - if (optionsObj.select_type !== undefined) { - if (optionsObj.select_type === 'chosen') { - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).trigger('chosen:updated'); - } else if (optionsObj.select_type === 'select2') { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).select2("destroy").select2(optionsObj.select_type_options); - } - } - break; - case 'range_date': - fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-from-date-' + column_number; - toId = 'yadcf-filter-' + table_selector_jq_friendly + '-to-date-' + column_number; - if (filter_value.from !== '') { - $('#' + fromId).val(filter_value.from); - $('#' + fromId).addClass('inuse'); - } - if (filter_value.to !== '') { - $('#' + toId).val(filter_value.to); - $('#' + toId).addClass('inuse'); - } - if (table_arg.fnSettings().oFeatures.bServerSide === true) { - min = filter_value.from; - max = filter_value.to; - table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = min + '-yadcf_delim-' + max; - } - break; - case 'range_number': - fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-from-' + column_number; - toId = 'yadcf-filter-' + table_selector_jq_friendly + '-to-' + column_number; - if (filter_value.from !== '') { - $('#' + fromId).val(filter_value.from); - $('#' + fromId).addClass('inuse'); - } - if (filter_value.to !== '') { - $('#' + toId).val(filter_value.to); - $('#' + toId).addClass('inuse'); - } - if (table_arg.fnSettings().oFeatures.bServerSide === true) { - table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = filter_value.from + '-yadcf_delim-' + filter_value.to; - } - break; - case 'range_number_slider': - sliderId = 'yadcf-filter-' + table_selector_jq_friendly + '-slider-' + column_number; - fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-min_tip-' + column_number; - toId = 'yadcf-filter-' + table_selector_jq_friendly + '-max_tip-' + column_number; - if (filter_value.from !== '') { - $('#' + fromId).text(filter_value.from); - $('#' + fromId).parent().addClass('inuse'); - $('#' + fromId).parent().parent().find('ui-slider-range').addClass('inuse'); - $('#' + sliderId).slider('values', 0, filter_value.from); - } - if (filter_value.to !== '') { - $('#' + toId).text(filter_value.to); - $('#' + toId).parent().addClass('inuse'); - $('#' + toId).parent().parent().find('.ui-slider-range').addClass('inuse'); - $('#' + sliderId).slider('values', 1, filter_value.to); - } - if (table_arg.fnSettings().oFeatures.bServerSide === true) { - table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = filter_value.from + '-yadcf_delim-' + filter_value.to; - } - break; - case 'custom_func': - case 'multi_select_custom_func': - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(filter_value).addClass('inuse'); - if (table_arg.fnSettings().oFeatures.bServerSide === true) { - table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = filter_value; - } - if (optionsObj.select_type !== undefined) { - if (optionsObj.select_type === 'chosen') { - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).trigger('chosen:updated'); - } else if (optionsObj.select_type === 'select2') { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).select2("destroy").select2(optionsObj.select_type_options); - } - } - break; - } - } - if (table_arg.fnSettings().oFeatures.bServerSide !== true) { - table_arg.fnDraw(); - } else { - setTimeout(function () { - table_arg.fnDraw(); - }, 10); - } - } else { - exFilterColumnQueue.push(exInternalFilterColumnAJAXQueue(table_arg, col_filter_arr)); - } - } - - function exGetColumnFilterVal(table_arg, column_number) { - var retVal, - fromId, - toId, - table_selector_jq_friendly, - optionsObj; - - //check if the table arg is from new datatables API (capital "D") - if (table_arg.settings !== undefined) { - table_arg = table_arg.settings()[0].oInstance; - } - - optionsObj = getOptions(table_arg.selector)[column_number]; - table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly(table_arg.selector); - - switch (optionsObj.filter_type) { - case 'select': - case 'custom_func': - retVal = $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(); - if (retVal === '-1') { - retVal = ''; - } - break; - case 'auto_complete': - case 'text': - case 'date': - retVal = $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(); - break; - case 'multi_select': - retVal = $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(); - if (retVal === null) { - retVal = ''; - } - break; - case 'range_date': - retVal = {}; - fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-from-date-' + column_number; - toId = 'yadcf-filter-' + table_selector_jq_friendly + '-to-date-' + column_number; - - retVal.from = $('#' + fromId).val(); - retVal.to = $('#' + toId).val(); - break; - case 'range_number': - retVal = {}; - fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-from-' + column_number; - toId = 'yadcf-filter-' + table_selector_jq_friendly + '-to-' + column_number; - - retVal.from = $('#' + fromId).val(); - retVal.to = $('#' + toId).val(); - break; - case 'range_number_slider': - retVal = {}; - fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-min_tip-' + column_number; - toId = 'yadcf-filter-' + table_selector_jq_friendly + '-max_tip-' + column_number; - - retVal.from = $('#' + fromId).text(); - retVal.to = $('#' + toId).text(); - break; - default: - console.log('exGetColumnFilterVal error: no such filter_type: ' + optionsObj.filter_type); - } - return retVal; - } - - function exResetAllFilters(table_arg) { - var table_selector_jq_friendly, - column_number, - fromId, - toId, - sliderId, - tableOptions, - optionsObj, - columnObjKey; - //check if the table arg is from new datatables API (capital "D") - if (table_arg.settings !== undefined) { - table_arg = table_arg.settings()[0].oInstance; - } - tableOptions = getOptions(table_arg.selector); - table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly(table_arg.selector); - - for (columnObjKey in tableOptions) { - if (tableOptions.hasOwnProperty(columnObjKey)) { - optionsObj = tableOptions[columnObjKey]; - column_number = optionsObj.column_number; - $(document).removeData("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val"); - - switch (optionsObj.filter_type) { - case 'select': - case 'custom_func': - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val('-1').removeClass('inuse'); - table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = ''; - if (optionsObj.select_type !== undefined) { - if (optionsObj.select_type === 'chosen') { - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).trigger('chosen:updated'); - } else if (optionsObj.select_type === 'select2') { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).select2("destroy").select2(optionsObj.select_type_options); - } - } - break; - case 'auto_complete': - case 'text': - case 'date': - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val('').removeClass('inuse'); - table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = ''; - break; - case 'multi_select': - case 'multi_select_custom_func': - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val('-1'); - $(document).data("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val", undefined); - table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = ''; - if (optionsObj.select_type !== undefined) { - if (optionsObj.select_type === 'chosen') { - $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).trigger('chosen:updated'); - } else if (optionsObj.select_type === 'select2') { - $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).select2("destroy").select2(optionsObj.select_type_options); - } - } - break; - case 'range_date': - fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-from-date-' + column_number; - toId = 'yadcf-filter-' + table_selector_jq_friendly + '-to-date-' + column_number; - $('#' + fromId).val(''); - $('#' + fromId).removeClass('inuse'); - $('#' + toId).val(''); - $('#' + toId).removeClass('inuse'); - if (table_arg.fnSettings().oFeatures.bServerSide === true) { - table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = ''; - } - break; - case 'range_number': - fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-from-' + column_number; - toId = 'yadcf-filter-' + table_selector_jq_friendly + '-to-' + column_number; - $('#' + fromId).val(''); - $('#' + fromId).removeClass('inuse'); - $('#' + toId).val(''); - $('#' + toId).removeClass('inuse'); - if (table_arg.fnSettings().oFeatures.bServerSide === true) { - table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = ''; - } - break; - case 'range_number_slider': - sliderId = 'yadcf-filter-' + table_selector_jq_friendly + '-slider-' + column_number; - fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-min_tip-' + column_number; - toId = 'yadcf-filter-' + table_selector_jq_friendly + '-max_tip-' + column_number; - $('#' + fromId).text(''); - $('#' + fromId).parent().removeClass('inuse'); - $('#' + fromId).parent().parent().find('ui-slider-range').removeClass('inuse'); - $('#' + toId).text(''); - $('#' + toId).parent().removeClass('inuse'); - $('#' + toId).parent().parent().find('.ui-slider-range').removeClass('inuse'); - $('#' + sliderId).slider("option", "values", [$('#' + fromId).parent().parent().find('.yadcf-filter-range-number-slider-min-tip-hidden').text(), $('#' + fromId).parent().parent().find('.yadcf-filter-range-number-slider-max-tip-hidden').text()]); - if (table_arg.fnSettings().oFeatures.bServerSide === true) { - table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = ''; - } - break; - } - - } - } - table_arg.fnDraw(); - } - - function exFilterExternallyTriggered(table_arg) { - var columnsObj = getOptions(table_arg.selector), - columnObjKey, - columnObj, - filterValue, - filtersValuesSingleElem, - filtersValuesArr = []; - for (columnObjKey in columnsObj) { - if (columnsObj.hasOwnProperty(columnObjKey)) { - columnObj = columnsObj[columnObjKey]; - filterValue = exGetColumnFilterVal(table_arg, columnObj.column_number); - if ((typeof filterValue === 'string' && filterValue !== '') || (typeof filterValue === 'object' && (filterValue.from !== '' || filterValue.to !== ''))) { - filtersValuesSingleElem = []; - filtersValuesSingleElem.push(columnObj.column_number); - filtersValuesSingleElem.push(filterValue); - filtersValuesArr.push(filtersValuesSingleElem); - } - } - } - yadcf.exFilterColumn(table_arg, filtersValuesArr); - } - - return { - init : init, - doFilter : doFilter, - doFilterMultiSelect : doFilterMultiSelect, - doFilterAutocomplete : doFilterAutocomplete, - autocompleteKeyUP : autocompleteKeyUP, - getOptions : getOptions, - rangeNumberKeyUP : rangeNumberKeyUP, - rangeDateKeyUP : rangeDateKeyUP, - rangeClear : rangeClear, - rangeNumberSliderClear : rangeNumberSliderClear, - stopPropagation : stopPropagation, - generateTableSelectorJQFriendly : generateTableSelectorJQFriendly, - exFilterColumn : exFilterColumn, - exGetColumnFilterVal : exGetColumnFilterVal, - exResetAllFilters: exResetAllFilters, - dateKeyUP : dateKeyUP, - dateSelectSingle : dateSelectSingle, - textKeyUP : textKeyUP, - doFilterCustomDateFunc : doFilterCustomDateFunc, - eventTargetFixUp : eventTargetFixUp, - initMultipleTables: initMultipleTables, - initMultipleColumns: initMultipleColumns, - textKeyUpMultiTables: textKeyUpMultiTables, - doFilterMultiTables: doFilterMultiTables, - generateTableSelectorJQFriendlyNew: generateTableSelectorJQFriendlyNew, - exFilterExternallyTriggered: exFilterExternallyTriggered - }; - -}(jQuery));