mirror of
https://github.com/WebStackPage/WebStackPage.github.io.git
synced 2026-02-09 13:25:01 +08:00
2236 lines
89 KiB
JavaScript
Executable File
2236 lines
89 KiB
JavaScript
Executable File
/*global $, jQuery, exFilterColumn*/
|
|
/*jslint plusplus: true, nomen: true */
|
|
/*!
|
|
* Yet Another DataTables Column Filter - (yadcf)
|
|
*
|
|
* File: jquery.dataTables.yadcf.js
|
|
* Version: 0.8.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 2013 Daniel Reznick, all rights reserved.
|
|
* Dual licensed under two licenses: GPL v2 license or a BSD (3-point) license (just like DataTables itself)
|
|
*
|
|
* 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
|
|
Description: The type of the filter to be used in the column
|
|
|
|
* custom_func
|
|
Required: true (when filter_type is 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 teh row matches your condition and the row should be displayed) and false otherwise
|
|
|
|
* data
|
|
Required: false / true (when filter_type is 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 this array will populate the custom filter select element
|
|
|
|
* column_data_type
|
|
Required: false
|
|
Type: String
|
|
Default value: text
|
|
Possible values: text / 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)
|
|
|
|
* 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
|
|
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 <span class="someClass">Some text</span>
|
|
|
|
* 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
|
|
Description: Defines how the values in the filter will be sorted, alphabetically or numerically
|
|
|
|
* 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
|
|
|
|
|
|
* 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
|
|
|
|
* exGetColumnFilterVal
|
|
Description: Allows to retreive 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
|
|
|
|
*
|
|
*
|
|
*
|
|
* 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-");
|
|
*
|
|
*
|
|
* -------------
|
|
*
|
|
*/
|
|
var yadcf = (function ($) {
|
|
|
|
'use strict';
|
|
|
|
var oTables = {},
|
|
oTablesIndex = {},
|
|
options = {},
|
|
exFilterColumnQueue = [],
|
|
yadcfDelay;
|
|
|
|
function getOptions(selector) {
|
|
return options[selector];
|
|
}
|
|
|
|
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
|
|
},
|
|
adaptContainerCssClassImpl = function (dummy) { return ''; };
|
|
|
|
for (i = 0; i < options_arg.length; i++) {
|
|
if (options_arg[i].select_type === 'select2') {
|
|
default_options.select_type_options = {adaptContainerCssClass: adaptContainerCssClassImpl};
|
|
}
|
|
//validate custom function required attributes
|
|
if (options_arg[i].filter_type === 'custom_func') {
|
|
if (options_arg[i].custom_func === undefined) {
|
|
alert('You are trying to use filter_type: "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" 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;
|
|
tmpOptions[col_num_as_int] = $.extend(true, {}, default_options, options_arg[i]);
|
|
}
|
|
options[selector_arg] = tmpOptions;
|
|
}
|
|
|
|
function resetIApiIndex() {
|
|
$.fn.dataTableExt.iApiIndex = 0;
|
|
|
|
}
|
|
|
|
function generateTableSelectorJQFriendly(tmpStr) {
|
|
return tmpStr.replace(":", "-").replace("(", "").replace(")", "").replace(".", "-").replace("#", "-");
|
|
}
|
|
|
|
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].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].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, false, 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];
|
|
if (arg === "clear" || arg.value === "-1") {
|
|
if (arg === "clear") {
|
|
$("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).val("-1").focus();
|
|
}
|
|
$("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).removeClass("inuse");
|
|
} else {
|
|
$("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).addClass("inuse");
|
|
}
|
|
|
|
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;
|
|
|
|
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);
|
|
resetIApiIndex();
|
|
if (yadcf.getOptions(oTable.selector)[column_number].select_type === 'chosen') {
|
|
$("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).trigger("chosen:updated");
|
|
}
|
|
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);
|
|
} else {
|
|
oTable.fnFilter("", column_number);
|
|
$("#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("|");
|
|
stringForSearch = stringForSearch.replace(/([.*+?^=!:${}()\[\]\/\\])/g, "\\$1");
|
|
if (filter_match_mode === "contains") {
|
|
oTable.fnFilter(stringForSearch, column_number, true, false, 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) {
|
|
|
|
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, "");
|
|
val = val.toString().replace(ignore_char_local, "");
|
|
}
|
|
|
|
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) {
|
|
var filterVal = document.getElementById(filterId) !== null ? document.getElementById(filterId).value : "",
|
|
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) {
|
|
var min = $('#' + fromId).text(),
|
|
max = $('#' + toId).text(),
|
|
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,
|
|
column_data_type,
|
|
html_data_type,
|
|
i,
|
|
columnObjKey;
|
|
|
|
if (table_selector_jq_friendly_local !== current_table_selector_jq_friendly) {
|
|
return true;
|
|
}
|
|
|
|
if (!isFinite(min) || !isFinite(max)) {
|
|
return true;
|
|
}
|
|
|
|
column_data_type = yadcf.getOptions(oSettings.oInstance.selector)[col_num].column_data_type;
|
|
html_data_type = yadcf.getOptions(oSettings.oInstance.selector)[col_num].html_data_type;
|
|
|
|
if (column_data_type === "html") {
|
|
if (html_data_type === undefined) {
|
|
html_data_type = "text";
|
|
}
|
|
switch (html_data_type) {
|
|
case "text":
|
|
val = $(val).text();
|
|
break;
|
|
case "value":
|
|
val = $(val).val();
|
|
break;
|
|
case "id":
|
|
val = val.id;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (ignore_char_local !== undefined) {
|
|
min = min.replace(ignore_char_local, "");
|
|
max = max.replace(ignore_char_local, "");
|
|
val = val.toString().replace(ignore_char_local, "");
|
|
}
|
|
|
|
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("<div onclick=\"yadcf.stopPropagation(event);\" id=\"" + filter_wrapper_id + "\" class=\"yadcf-filter-wrapper\"></div>");
|
|
filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper";
|
|
filter_selector_string_tmp = filter_selector_string;
|
|
|
|
$(filter_selector_string).append("<div id=\"yadcf-filter-wrapper-inner-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter-wrapper-inner\"></div>");
|
|
filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper-inner";
|
|
|
|
$(filter_selector_string).append("<input placeholder=\"" + filter_default_label[0] + "\" id=\"" + fromId + "\" class=\"yadcf-filter-range-number yadcf-filter-range\" onkeyup=\"yadcf.rangeNumberKeyUP('" + table_selector_jq_friendly + "',event);\">" +
|
|
"</input>");
|
|
$(filter_selector_string).append("<span class=\"yadcf-filter-range-number-seperator\" >" +
|
|
"</span>");
|
|
$(filter_selector_string).append("<input placeholder=\"" + filter_default_label[1] + "\" id=\"" + toId + "\" class=\"yadcf-filter-range-number yadcf-filter-range\" onkeyup=\"yadcf.rangeNumberKeyUP('" + table_selector_jq_friendly + "',event);\">" +
|
|
"</input>");
|
|
|
|
if (filter_reset_button_text !== false) {
|
|
$(filter_selector_string_tmp).append("<input value=\"" + filter_reset_button_text + "\" type=\"button\" " +
|
|
"onclick=\"yadcf.stopPropagation(event);yadcf.rangeClear('" + table_selector_jq_friendly + "',event); return false;\" class=\"yadcf-filter-reset-button\">");
|
|
}
|
|
|
|
$.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,
|
|
min,
|
|
max,
|
|
min_server,
|
|
max_server,
|
|
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 {
|
|
min = from;
|
|
max = to;
|
|
|
|
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 (min instanceof Date) {
|
|
min_server = min.getTime();
|
|
} else {
|
|
min_server = min;
|
|
}
|
|
if (max instanceof Date) {
|
|
max_server = max.getTime();
|
|
} else {
|
|
max_server = max;
|
|
}
|
|
oTable.fnFilter(min_server + '-yadcf_delim-' + max_server, 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("<div onclick=\"yadcf.stopPropagation(event);\" id=\"" + filter_wrapper_id + "\" class=\"yadcf-filter-wrapper\"></div>");
|
|
filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper";
|
|
filter_selector_string_tmp = filter_selector_string;
|
|
|
|
$(filter_selector_string).append("<div id=\"yadcf-filter-wrapper-inner-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter-wrapper-inner\"></div>");
|
|
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("<input placeholder=\"" + filter_default_label[0] + "\" id=\"" + fromId + "\" class=\"yadcf-filter-range-date yadcf-filter-range\" onkeyup=\"yadcf.rangeDateKeyUP('" + table_selector_jq_friendly + "','" + date_format + "',event);\">" +
|
|
"</input>");
|
|
$(filter_selector_string).append("<span class=\"yadcf-filter-range-date-seperator\" >" +
|
|
"</span>");
|
|
$(filter_selector_string).append("<input placeholder=\"" + filter_default_label[1] + "\" id=\"" + toId + "\" class=\"yadcf-filter-range-date yadcf-filter-range\" onkeyup=\"yadcf.rangeDateKeyUP('" + table_selector_jq_friendly + "','" + date_format + "',event);\">" +
|
|
"</input>");
|
|
|
|
if (filter_reset_button_text !== false) {
|
|
$(filter_selector_string_tmp).append("<input value=\"" + filter_reset_button_text + "\" type=\"button\" " +
|
|
"onclick=\"yadcf.stopPropagation(event);yadcf.rangeClear('" + table_selector_jq_friendly + "',event); return false;\" class=\"yadcf-filter-reset-button\">");
|
|
}
|
|
|
|
$("#" + 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("<div onclick=\"yadcf.stopPropagation(event);\" id=\"" + filter_wrapper_id + "\" class=\"yadcf-filter-wrapper\"></div>");
|
|
filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper";
|
|
filter_selector_string_tmp = filter_selector_string;
|
|
|
|
$(filter_selector_string).append("<input placeholder=\"" + filter_default_label + "\" id=\"" + dateId + "\" class=\"yadcf-filter-date\" onkeyup=\"yadcf.dateKeyUP('" +
|
|
table_selector_jq_friendly + "','" + date_format + "',event);\"></input>");
|
|
|
|
if (filter_reset_button_text !== false) {
|
|
$(filter_selector_string_tmp).append('<input value="' + filter_reset_button_text + '" type="button" id="' + dateId + '-reset"' +
|
|
'onclick="yadcf.stopPropagation(event);yadcf.dateSelectSingle(\'' + table_selector_jq_friendly + '\',event.target, \'clear\'); return false;" class="yadcf-filter-reset-button">');
|
|
}
|
|
|
|
$("#" + 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 = "<div id=\"" + min_tip_id + "\" class=\"yadcf-filter-range-number-slider-min-tip-inner\">" + min_tip_val + "</div>";
|
|
max_tip_inner = "<div id=\"" + max_tip_id + "\" class=\"yadcf-filter-range-number-slider-max-tip-inner\">" + max_tip_val + "</div>";
|
|
|
|
$(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) {
|
|
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) {
|
|
if (!isFinite($('#' + min_tip_id).text()) || !isFinite($('#' + max_tip_id).text()) || !isFinite(min_val) || !isFinite(max_val) ||
|
|
!isFinite($(filter_selector_string).find('.yadcf-filter-range-number-slider-min-tip-hidden.hide').text()) ||
|
|
!isFinite($(filter_selector_string).find('.yadcf-filter-range-number-slider-max-tip-hidden.hide').text())) {
|
|
$(filter_selector_string).empty();
|
|
} else {
|
|
return;
|
|
}
|
|
}
|
|
|
|
//add a wrapper to hold both filter and reset button
|
|
$(filter_selector_string).append("<div onclick=\"yadcf.stopPropagation(event);\" id=\"" + filter_wrapper_id + "\" class=\"yadcf-filter-wrapper\"></div>");
|
|
filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper";
|
|
filter_selector_string_tmp = filter_selector_string;
|
|
|
|
$(filter_selector_string).append("<div id=\"yadcf-filter-wrapper-inner-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-number-slider-filter-wrapper-inner\"></div>");
|
|
filter_selector_string = filter_selector_string + " div.yadcf-number-slider-filter-wrapper-inner";
|
|
|
|
$(filter_selector_string).append("<div id=\"" + sliderId + "\" class=\"yadcf-filter-range-number-slider\"></div>");
|
|
filter_selector_string = filter_selector_string + " #" + sliderId;
|
|
|
|
$(filter_selector_string).append("<span class=\"yadcf-filter-range-number-slider-min-tip-hidden hide\">" + min_val + "</span>");
|
|
$(filter_selector_string).append("<span class=\"yadcf-filter-range-number-slider-max-tip-hidden hide\">" + max_val + "</span>");
|
|
|
|
$.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)) {
|
|
$("#" + 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);
|
|
rangeNumberSliderChange(table_selector_jq_friendly, event, ui);
|
|
}
|
|
});
|
|
|
|
if (filter_reset_button_text !== false) {
|
|
$(filter_selector_string_tmp).append("<input value=\"" + filter_reset_button_text + "\" type=\"button\" " +
|
|
"onclick=\"yadcf.stopPropagation(event);yadcf.rangeNumberSliderClear('" + table_selector_jq_friendly + "',event); return false;\" class=\"yadcf-filter-reset-button range-number-slider-reset-button\">");
|
|
}
|
|
}
|
|
|
|
$.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 appendFilters(oTable, args, table_selector) {
|
|
|
|
var i = 0,
|
|
$filter_selector,
|
|
filter_selector_string,
|
|
|
|
data,
|
|
filter_container_id,
|
|
column_number_data,
|
|
column_number,
|
|
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,
|
|
|
|
options,
|
|
options_tmp,
|
|
j,
|
|
k,
|
|
data_length,
|
|
col_inner_elements,
|
|
col_inner_data,
|
|
col_filter_array,
|
|
ii,
|
|
table_selector_jq_friendly,
|
|
min_val,
|
|
max_val,
|
|
col_num_visible,
|
|
col_num_visible_iter,
|
|
tmpStr,
|
|
columnObjKey,
|
|
columnObj;
|
|
|
|
|
|
for (columnObjKey in args) {
|
|
if (args.hasOwnProperty(columnObjKey)) {
|
|
columnObj = args[columnObjKey];
|
|
|
|
data = columnObj.data;
|
|
filter_container_id = columnObj.filter_container_id;
|
|
column_number = columnObj.column_number;
|
|
column_number = +column_number;
|
|
column_number_data = undefined;
|
|
if (isNaN(oTable.fnSettings().aoColumns[column_number].mData) && typeof oTable.fnSettings().aoColumns[column_number].mData !== 'object') {
|
|
column_number_data = oTable.fnSettings().aoColumns[column_number].mData;
|
|
}
|
|
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");
|
|
|
|
if (columnObj.ignore_char !== undefined) {
|
|
ignore_char = new RegExp(columnObj.ignore_char, "g");
|
|
}
|
|
filter_match_mode = columnObj.filter_match_mode;
|
|
|
|
if (column_number === undefined) {
|
|
alert("You must specify column number");
|
|
return;
|
|
}
|
|
|
|
if (column_data_type === undefined) {
|
|
column_data_type = "text";
|
|
} else if (column_data_type === "html") {
|
|
if (html_data_type === undefined) {
|
|
html_data_type = "text";
|
|
}
|
|
}
|
|
|
|
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") {
|
|
filter_default_label = "Select values";
|
|
} else if (columnObj.filter_type === "auto_complete" || columnObj.filter_type === "text") {
|
|
filter_default_label = "Type a value";
|
|
} 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";
|
|
}
|
|
}
|
|
|
|
if (filter_reset_button_text === undefined) {
|
|
filter_reset_button_text = "x";
|
|
}
|
|
|
|
options = [];
|
|
col_filter_array = {};
|
|
|
|
if (data === undefined) {
|
|
data = oTable.fnSettings().aoData;
|
|
data_length = data.length;
|
|
|
|
for (j = 0; j < data_length; j++) {
|
|
if (column_data_type === "html") {
|
|
if (column_number_data === undefined) {
|
|
col_inner_elements = $(data[j]._aData[column_number]);
|
|
} else {
|
|
col_inner_elements = dot2obj(data[j]._aData, column_number_data);
|
|
col_inner_elements = $(col_inner_elements);
|
|
}
|
|
for (k = 0; k < col_inner_elements.length; k++) {
|
|
switch (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;
|
|
}
|
|
if (!(col_filter_array.hasOwnProperty(col_inner_data))) {
|
|
col_filter_array[col_inner_data] = col_inner_data;
|
|
options.push(col_inner_data);
|
|
}
|
|
}
|
|
} else if (column_data_type === "text") {
|
|
if (text_data_delimiter !== undefined) {
|
|
if (column_number_data === undefined) {
|
|
col_inner_elements = data[j]._aData[column_number].split(text_data_delimiter);
|
|
} else {
|
|
col_inner_elements = dot2obj(data[j]._aData, column_number_data);
|
|
col_inner_elements = col_inner_elements.split(text_data_delimiter);
|
|
}
|
|
for (k = 0; k < col_inner_elements.length; k++) {
|
|
col_inner_data = col_inner_elements[k];
|
|
if (!(col_filter_array.hasOwnProperty(col_inner_data))) {
|
|
col_filter_array[col_inner_data] = col_inner_data;
|
|
options.push(col_inner_data);
|
|
}
|
|
}
|
|
} else {
|
|
if (column_number_data === undefined) {
|
|
col_inner_data = data[j]._aData[column_number];
|
|
} else {
|
|
col_inner_data = dot2obj(data[j]._aData, column_number_data);
|
|
}
|
|
if (!(col_filter_array.hasOwnProperty(col_inner_data))) {
|
|
col_filter_array[col_inner_data] = col_inner_data;
|
|
options.push(col_inner_data);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
} else {
|
|
for (ii = 0; ii < data.length; ii++) {
|
|
options.push(data[ii]);
|
|
}
|
|
}
|
|
|
|
if (columnObj.filter_type === "range_number_slider") {
|
|
min_val = findMinInArray(options, ignore_char);
|
|
max_val = findMaxInArray(options, 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 (oTable.fnSettings().aoColumns[column_number].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;
|
|
}
|
|
col_num_visible = column_number;
|
|
|
|
for (col_num_visible_iter = 0; col_num_visible_iter < oTable.fnSettings().aoColumns.length && col_num_visible_iter < column_number; col_num_visible_iter++) {
|
|
if (oTable.fnSettings().aoColumns[col_num_visible_iter].bVisible === false) {
|
|
col_num_visible--;
|
|
}
|
|
}
|
|
filter_selector_string = table_selector + " thead th:eq(" + col_num_visible + ")";
|
|
$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");
|
|
}
|
|
|
|
table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly(table_selector);
|
|
|
|
if (columnObj.filter_type === "select" || columnObj.filter_type === "auto_complete" || columnObj.filter_type === "multi_select" || columnObj.filter_type === "custom_func") {
|
|
if (sort_as === "alpha") {
|
|
if (sort_order === "asc") {
|
|
options.sort();
|
|
} else if (sort_order === "desc") {
|
|
options.sort();
|
|
options.reverse();
|
|
}
|
|
} else if (sort_as === "num") {
|
|
if (sort_order === "asc") {
|
|
options.sort(sortNumAsc);
|
|
} else if (sort_order === "desc") {
|
|
options.sort(sortNumDesc);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (columnObj.filter_type === "select" || columnObj.filter_type === 'custom_func') {
|
|
options_tmp = "<option value=\"" + "-1" + "\">" + filter_default_label + "</option>";
|
|
if (typeof options[0] === 'object') {
|
|
for (ii = 0; ii < options.length; ii++) {
|
|
options_tmp += "<option value=\"" + options[ii].value + "\">" + options[ii].label + "</option>";
|
|
}
|
|
} else {
|
|
for (ii = 0; ii < options.length; ii++) {
|
|
options_tmp += "<option value=\"" + options[ii] + "\">" + options[ii] + "</option>";
|
|
}
|
|
}
|
|
options = options_tmp;
|
|
|
|
} else if (columnObj.filter_type === "multi_select") {
|
|
if (columnObj.select_type === undefined) {
|
|
options_tmp = "<option data-placeholder=\"true\" value=\"" + "-1" + "\">" + filter_default_label + "</option>";
|
|
} else {
|
|
options_tmp = "";
|
|
}
|
|
if (typeof options[0] === 'object') {
|
|
for (ii = 0; ii < options.length; ii++) {
|
|
options_tmp += "<option value=\"" + options[ii].value + "\">" + options[ii].label + "</option>";
|
|
}
|
|
} else {
|
|
for (ii = 0; ii < options.length; ii++) {
|
|
options_tmp += "<option value=\"" + options[ii] + "\">" + options[ii] + "</option>";
|
|
}
|
|
}
|
|
options = options_tmp;
|
|
}
|
|
|
|
if ($filter_selector.length === 1) {
|
|
if (columnObj.filter_type === "select" || columnObj.filter_type === "multi_select") {
|
|
|
|
$filter_selector.empty();
|
|
$filter_selector.append(options);
|
|
if (oTable.fnSettings().aoPreSearchCols[column_number].sSearch !== '') {
|
|
tmpStr = oTable.fnSettings().aoPreSearchCols[column_number].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, options);
|
|
}
|
|
} 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("<div id=\"yadcf-filter-wrapper-" + filter_container_id + "\"></div>");
|
|
}
|
|
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("<div id=\"yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter-wrapper\"></div>");
|
|
filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper";
|
|
|
|
if (columnObj.filter_type === "select") {
|
|
$(filter_selector_string).append("<select id=\"yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter\" " +
|
|
"onchange=\"yadcf.doFilter(this, '" + table_selector_jq_friendly + "', " + column_number + ", '" + filter_match_mode + "')\" onclick='yadcf.stopPropagation(event);'>" + options + "</select>");
|
|
if (filter_reset_button_text !== false) {
|
|
$(filter_selector_string).find(".yadcf-filter").after("<input value=\"" + filter_reset_button_text + "\" type=\"button\" " +
|
|
"onclick=\"yadcf.stopPropagation(event);yadcf.doFilter('clear', '" + table_selector_jq_friendly + "', " + column_number + "); return false;\" class=\"yadcf-filter-reset-button\">");
|
|
}
|
|
} else {
|
|
$(filter_selector_string).append("<select id=\"yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter\" " +
|
|
"onchange=\"yadcf.doFilterCustomDateFunc(this, '" + table_selector_jq_friendly + "', " + column_number + ")\" onclick='yadcf.stopPropagation(event);'>" + options + "</select>");
|
|
if (filter_reset_button_text !== false) {
|
|
$(filter_selector_string).find(".yadcf-filter").after("<input value=\"" + filter_reset_button_text + "\" type=\"button\" " +
|
|
"onclick=\"yadcf.stopPropagation(event);yadcf.doFilterCustomDateFunc('clear', '" + table_selector_jq_friendly + "', " + column_number + "); return false;\" class=\"yadcf-filter-reset-button\">");
|
|
}
|
|
if (oTable.fnSettings().oFeatures.bServerSide !== true) {
|
|
addCustomFunctionFilterCapability(table_selector_jq_friendly, "yadcf-filter-" + table_selector_jq_friendly + "-" + column_number, column_number);
|
|
}
|
|
}
|
|
|
|
if (oTable.fnSettings().aoPreSearchCols[column_number].sSearch !== '') {
|
|
tmpStr = oTable.fnSettings().aoPreSearchCols[column_number].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);");
|
|
} 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") {
|
|
|
|
//add a wrapper to hold both filter and reset button
|
|
$(filter_selector_string).append("<div id=\"yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter-wrapper\"></div>");
|
|
filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper";
|
|
|
|
$(filter_selector_string).append("<select multiple data-placeholder=\"" + filter_default_label + "\" id=\"yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter\" " +
|
|
"onchange=\"yadcf.doFilterMultiSelect(this, '" + table_selector_jq_friendly + "', " + column_number + ", '" + filter_match_mode + "')\" onclick='yadcf.stopPropagation(event);'>" + options + "</select>");
|
|
|
|
if (filter_reset_button_text !== false) {
|
|
$(filter_selector_string).find(".yadcf-filter").after("<input value=\"" + filter_reset_button_text + "\" type=\"button\" " +
|
|
"onclick=\"yadcf.stopPropagation(event);yadcf.doFilter('clear', '" + table_selector_jq_friendly + "', " + column_number + "); return false;\" class=\"yadcf-filter-reset-button\">");
|
|
}
|
|
|
|
if (oTable.fnSettings().aoPreSearchCols[column_number].sSearch !== '') {
|
|
tmpStr = oTable.fnSettings().aoPreSearchCols[column_number].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);
|
|
}
|
|
|
|
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);");
|
|
} 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("<div id=\"yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter-wrapper\"></div>");
|
|
filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper";
|
|
|
|
$(filter_selector_string).append("<input id=\"yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter\" onclick='yadcf.stopPropagation(event);"
|
|
+ "' placeholder='" + filter_default_label + "'" + " filter_match_mode='" + filter_match_mode + "'" + " onkeyup=\"yadcf.autocompleteKeyUP('" + table_selector_jq_friendly + "',event);\"></input>");
|
|
$(document).data("yadcf-filter-" + table_selector_jq_friendly + "-" + column_number, options);
|
|
|
|
if (filter_reset_button_text !== false) {
|
|
$(filter_selector_string).find(".yadcf-filter").after("<input value=\"" + filter_reset_button_text + "\" type=\"button\" " +
|
|
"onclick=\"yadcf.stopPropagation(event);yadcf.doFilterAutocomplete('clear', '" + table_selector_jq_friendly + "', " + column_number + "); return false;\" class=\"yadcf-filter-reset-button\">");
|
|
}
|
|
|
|
} else if (columnObj.filter_type === "text") {
|
|
|
|
//add a wrapper to hold both filter and reset button
|
|
$(filter_selector_string).append("<div id=\"yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter-wrapper\"></div>");
|
|
filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper";
|
|
|
|
$(filter_selector_string).append("<input type=\"text\" id=\"yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter\" onclick='yadcf.stopPropagation(event);"
|
|
+ "' placeholder='" + filter_default_label + "'" + " filter_match_mode='" + filter_match_mode + "'" + " onkeyup=\"yadcf.textKeyUP('" + table_selector_jq_friendly + "',event);\"></input>");
|
|
|
|
if (filter_reset_button_text !== false) {
|
|
$(filter_selector_string).find(".yadcf-filter").after("<input value=\"" + filter_reset_button_text + "\" type=\"button\" " + " id=\"yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "-reset\"" +
|
|
"onclick=\"yadcf.stopPropagation(event);yadcf.textKeyUP('" + table_selector_jq_friendly + "', event, 'clear'); return false;\" class=\"yadcf-filter-reset-button\">");
|
|
}
|
|
|
|
if (oTable.fnSettings().aoPreSearchCols[column_number].sSearch !== '') {
|
|
tmpStr = oTable.fnSettings().aoPreSearchCols[column_number].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") {
|
|
$("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).autocomplete({
|
|
source: $(document).data("yadcf-filter-" + table_selector_jq_friendly + "-" + column_number),
|
|
select: autocompleteSelect
|
|
});
|
|
if (oTable.fnSettings().aoPreSearchCols[column_number].sSearch !== '') {
|
|
tmpStr = oTable.fnSettings().aoPreSearchCols[column_number].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) {
|
|
$.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) {
|
|
$.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", "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;
|
|
|
|
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) {
|
|
$.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly];
|
|
var oTable = oTables[table_selector_jq_friendly],
|
|
min,
|
|
min_server,
|
|
max,
|
|
max_server,
|
|
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 {
|
|
if (min instanceof Date) {
|
|
min_server = min.getTime();
|
|
} else {
|
|
min_server = min;
|
|
}
|
|
if (max instanceof Date) {
|
|
max_server = max.getTime();
|
|
} else {
|
|
max_server = max;
|
|
}
|
|
oTable.fnFilter(min_server + '-yadcf_delim-' + max_server, 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) {
|
|
$.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 textKeyUP(table_selector_jq_friendly, event, clear) {
|
|
|
|
var column_number = parseInt($(event.target).attr("id").replace("yadcf-filter-" + table_selector_jq_friendly + "-", "").replace('-reset', ''), 10),
|
|
oTable = oTables[table_selector_jq_friendly],
|
|
options = getOptions(oTable.selector)[column_number],
|
|
|
|
keyUp = function (table_selector_jq_friendly, event, clear) {
|
|
$.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly];
|
|
|
|
if (clear !== undefined || event.target.value === '') {
|
|
$("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).val("").focus();
|
|
$("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).removeClass("inuse");
|
|
oTable.fnFilter("", column_number);
|
|
resetIApiIndex();
|
|
return;
|
|
}
|
|
|
|
$("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).addClass("inuse");
|
|
|
|
yadcfMatchFilter(oTable, event.target.value, options.filter_match_mode, column_number);
|
|
|
|
resetIApiIndex();
|
|
};
|
|
|
|
if (options.filter_delay === undefined) {
|
|
keyUp(table_selector_jq_friendly, event, clear);
|
|
} else {
|
|
yadcfDelay(function () {
|
|
keyUp(table_selector_jq_friendly, event, clear);
|
|
}, options.filter_delay);
|
|
}
|
|
}
|
|
|
|
function autocompleteKeyUP(table_selector_jq_friendly, 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();
|
|
}
|
|
}
|
|
|
|
//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 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;
|
|
|
|
if (oTable.fnSettings().sAjaxSource === null && oTable.fnSettings().ajax === null) {
|
|
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').on('draw.dt', oTable.selector, function (event, ui) {
|
|
appendFilters(oTable, yadcf.getOptions(ui.oInstance.selector), ui.oInstance.selector);
|
|
});
|
|
$(document).off('xhr.dt').on('xhr.dt', function (e, settings, json) {
|
|
var col_num;
|
|
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) {
|
|
yadcf.getOptions(settings.oInstance.selector)[col_num].data = json['yadcf_data_' + col_num];
|
|
}
|
|
}
|
|
}
|
|
});
|
|
$(document).off('column-visibility.dt').on('column-visibility.dt', function (e, settings, col_num, state) {
|
|
var obj = {};
|
|
if (state === true) {
|
|
obj[col_num] = yadcf.getOptions(settings.oInstance.selector)[col_num];
|
|
appendFilters(oTables[yadcf.generateTableSelectorJQFriendly(settings.oInstance.selector)],
|
|
obj,
|
|
settings.oInstance.selector);
|
|
}
|
|
});
|
|
} else {
|
|
$(document).off('draw').on('draw', oTable.selector, function (event, ui) {
|
|
appendFilters(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 (oTable.fnSettings().sAjaxSource === null && oTable.fnSettings().ajax === null) {
|
|
//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();
|
|
}
|
|
}
|
|
}
|
|
|
|
$.fn.yadcf = function (options_arg) {
|
|
|
|
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) {
|
|
var instance = oTable.settings()[0].oInstance,
|
|
i = 0,
|
|
selector;
|
|
if ($(instance.selector).length === 1) {
|
|
setOptions(instance.selector, options_arg);
|
|
initAndBindTable(instance, instance.selector, 0);
|
|
} 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);
|
|
}
|
|
$.fn.dataTableExt.iApiIndex = 0;
|
|
}
|
|
}
|
|
|
|
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;
|
|
//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 ((table_arg.fnSettings().sAjaxSource === null && table_arg.fnSettings().ajax === null) || 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 'select':
|
|
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 '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');
|
|
}
|
|
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');
|
|
}
|
|
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);
|
|
}
|
|
break;
|
|
}
|
|
|
|
}
|
|
if (table_arg.fnSettings().oFeatures.bServerSide !== true) {
|
|
table_arg.fnDraw();
|
|
} else {
|
|
switch (optionsObj.filter_type) {
|
|
case 'select':
|
|
case 'auto_complete':
|
|
case 'text':
|
|
case 'date':
|
|
setTimeout(function () {
|
|
table_arg.fnFilter(filter_value, column_number);
|
|
}, 10);
|
|
break;
|
|
default:
|
|
console.log('exFilterColumn is not supported for ' + optionsObj.filter_type);
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
exFilterColumnQueue.push(exInternalFilterColumnAJAXQueue(table_arg, col_filter_arr));
|
|
}
|
|
}
|
|
|
|
function exGetColumnFilterVal(table_arg, column_number) {
|
|
var retVal,
|
|
fromId,
|
|
toId,
|
|
table_selector_jq_friendly,
|
|
optionsObj = getOptions(table_arg.selector)[column_number];
|
|
|
|
table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly(table_arg.selector);
|
|
|
|
switch (optionsObj.filter_type) {
|
|
case 'select':
|
|
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;
|
|
}
|
|
return retVal;
|
|
}
|
|
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,
|
|
dateKeyUP : dateKeyUP,
|
|
dateSelectSingle : dateSelectSingle,
|
|
textKeyUP : textKeyUP,
|
|
doFilterCustomDateFunc : doFilterCustomDateFunc
|
|
};
|
|
|
|
}(jQuery));
|