1/*! 2* Yet Another DataTables Column Filter - (yadcf) 3* 4* File: jquery.dataTables.yadcf.js 5* Version: 0.9.1 6* 7* Author: Daniel Reznick 8* Info: https://github.com/vedmack/yadcf 9* Contact: [email protected] 10* Twitter: @danielreznick 11* Q&A http://stackoverflow.com/questions/tagged/yadcf 12* 13* Copyright 2015 Daniel Reznick, all rights reserved. 14* Copyright 2015 Released under the MIT License 15* 16* This source file is distributed in the hope that it will be useful, but 17* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 18* or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. 19*/ 20/* 21* Parameters: 22* 23* 24* ------------- 25* column_number 26 Required: true 27 Type: int 28 Description: The number of the column to which the filter will be applied 29* filter_type 30 Required: false 31 Type: String 32 Default value: 'select' 33 Possible values: select / multi_select / auto_complete / text / date / range_number / range_number_slider / range_date / custom_func / multi_select_custom_func 34 Description: The type of the filter to be used in the column 35* custom_func 36 Required: true (when filter_type is custom_func / multi_select_custom_func) 37 Type: function 38 Default value: undefined 39 Description: should be pointing to a function with the following signature myCustomFilterFunction(filterVal, columnVal, rowValues, stateVal) , where `filterVal` is the value from the select box, 40 `columnVal` is the value from the relevant row column, `rowValues` is an array that holds the values of the entire row and `stateVal` which holds the current state of the table row DOM 41 , stateVal is perfect to handle situations in which you placing radiobuttons / checkbox inside table column. This function should return true if the row matches your condition and the row should be displayed) and false otherwise 42 Note: When using multi_select_custom_func as filter_type filterVal will hold an array of selected values from the multi select element 43* data 44 Required: false 45 Type: Array (of string or objects) 46 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 47 array of objects [{value: 'Some Data 1', label: 'One'}, {value: 'Some Data 3', label: 'Three'}] (supported in select / multi_select filters) 48 Note: that when filter_type is custom_func / multi_select_custom_func this array will populate the custom filter select element 49* data_as_is 50 Required: false 51 Type: boolean 52 Default value: false 53 Description: When set to true, the value of the data attribute will be fed into the filter as is (without any modification/decoration). 54 Perfect to use when you want to define your own <option></option> for the filter 55 Note: Currently supported by the select / multi_select filters 56* append_data_to_table_data 57 Required: false 58 Type: String 59 Default value: undefined 60 Possible values: before / sorted 61 Description: Use 'before' to place your data array before the values that yadcf grabs from the table 62 use 'sorted' to place the data array sorted along with the values that yadcf grabs from the table 63 Note: 'sorted' option will have affect only if you data is an array of primitives (not objects) 64* column_data_type 65 Required: false 66 Type: String 67 Default value: 'text' 68 Possible values: text / html / rendered_html 69 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), 70 use rendered_html when you are using render function of columnDefs or similar, that produces a html code, note that both types rendered_html and html have a fallback for simple text parsing 71* text_data_delimiter 72 Required: false 73 Type: String 74 Description: Delimiter that seperates text in table column, for example text_data_delimiter: "," 75* html_data_type 76 Required: false 77 Type: String 78 Default value: 'text' 79 Possible values: text / value / id / selector 80 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 <sp
80an class="someClass">Some text</span> 81 Special notes: when using selector you must provide a valid selector string for the html_data_selector property 82* html_data_selector 83 Required: false 84 Type: String 85 Default value: undefined 86 Possible values: any valid selector string, for example 'li:eq(1)' 87 Description: allows for advanced text value selection within the html located in the td element 88 Special notes: know that the selector string "begin is search" from (and not outside) the first element of the html inside the td 89 (supported by range_number_slider / select / auto_complete) 90* html5_data 91 Required: false 92 Type: String 93 Default value: undefined 94 Possible values: data-filter / data-search / anything that is supported by datatables 95 Description: Allows to filter based on data-filter / data-search attributes of the <td> element, read more: http://www.datatables.net/examples/advanced_init/html5-data-attributes.html 96* filter_container_id 97 Required: false 98 Type: String 99 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 100* filter_container_selector 101 Required: false 102 Type: String 103 Description: In case that user don't want to place the filter in column header , he can pass a (jquery) selector of the desired container for the column filter 104* filter_default_label 105 Required: false 106 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 107 Default value: 'Select value' 108 Description: The label that will appear in the select menu filter when no value is selected from the filter 109* omit_default_label 110 Required: false 111 Type: boolean 112 Default value: false 113 Description: Prevent yadcf from adding "default_label" (Select value / Select values) 114 Note Currently supported in select / multi_select / custom_func / multi_select_custom_func 115* filter_reset_button_text 116 Required: false 117 Type: String / boolean 118 Default value: 'x' 119 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) 120* enable_auto_complete (this attribute is deprecated , and will become obsolete in the future , so you better start using filter_type: "auto_complete") 121 Required: false 122 Type: boolean 123 Default value: false 124 Description: Turns the filter into an autocomplete input - make use of the jQuery UI Autocomplete widget (with some enhancements) 125* sort_as 126 Required: false 127 Type: String 128 Default value: 'alpha' 129 Possible values: alpha / num / alphaNum / none 130 Description: Defines how the values in the filter will be sorted, alphabetically / numerically / alphanumeric / custom / not sorted at all (none is useful to preserve 131 the order of the data attribute as is) 132 Note: When custom value is set you must provide a custom sorting function for the sort_as_custom_func property 133* sort_as_custom_func 134 Required: false 135 Type: function 136 Default value: undefined 137 Description: Allows to provide a custom sorting function for the filter elements 138* sort_order 139 Required: false 140 Type: String 141 Default value: 'asc' 142 Possible values: asc / desc 143 Description: Defines the order in which the values in the filter will be sorted, ascending or descending 144* date_format 145 Required: false 146 Type: String 147 Default value: 'mm/dd/yyyy' 148 Possible values: mm/dd/yyyy / dd/mm/yyyy / hh:mm (when using datepicker_type: 'bootstrap-datetimepicker') 149 Description: Defines the format in which the date values are being parsed into Date object 150 Note: You can replace the / separator with other one , for example mm-dd-yy 151* moment_date_format 152 Required: false 153 Type: String 154 Default value: undefined 155 Possible values: Any format accepted by momentjs 156 Description: Defines the format in which the date values are being parsed into Date object by momentjs library 157 Note: Currently relevant only when using datepicker_type: 'bootstrap-datetimepicker') 158* ignore_char 159 Required: false 160 Type: String 161 Description: Tells the range_number and range_number_slide to ignore specific char while filtering (that char can used as number separator) 162 Note: Use double escape for regex chars , e.g \\$ , also you can use multiple ignore chars with | , e.g '_|\\.|\\$' 163* filter_match_mode 164 Required: false 165 Type: String 166 Default value: contains 167 Possible values: contains / exact / startsWith / regex 168 Description: Allows to control the matching mode of the filter (supported in select / auto_complete / text filters) 169* exclude 170 Required: false 171 Type: boolean 172 Default value: undefined 173 Description: Adds a checkbox next to the filter that allows to do a "not/exclude" filtering (acts the same all filter_match_mode) 174 Note: Currently available for the text filter 175* exclude_label 176 Required: false 177 Type: String 178 Default value: 'exclude' 179 Description: The label that will appear above the exclude checkbox 180* select_type 181 Required: false 182 Type: String 183 Default value: undefined 184 Possible values: chosen / select2 / custom_select 185 Description: Turns the simple select element into Chosen / Select2 (make use of the Chosen / Select2 select jQuery plugins) 186 Note: When using custom_select , make sure to call the initSelectPluginCustomTriggers, 187 before calling yadcf constructor / init function 188* select_type_options 189 Required: false 190 Type: Object 191 Default value: {} 192 Description: This parameter will be passed "as is" to the Chosen/Select2 plugin constructor 193* filter_plugin_options 194 Required: false 195 Type: Object 196 Default value: undefined 197 Description: This parameter will be passed to the jQuery Autocomplete / jQuery Slider / Bootstrap Datetimepicker 198* case_insensitive 199 Required: false 200 Type: boolean 201 Default value: true 202 Description: Do case-insensitive filtering (supported in select / auto_complete / text filters) 203* filter_delay 204 Required: false 205 Type: integer 206 Default value: undefined 207 Description: Delay filter execution for a XXX milliseconds - filter will fire XXX milliseconds after the last keyup. 208 Special notes: Currently supported in text / range_number / range_date filters / range_number_slider 209* datepicker_type 210 Required: false 211 Type: String 212 Default value: 'jquery-ui' 213 Possible values: 'jquery-ui' / 'bootstrap-datetimepicker' 214 Description: You can choose datapicker library from defined in special notes 215 Special notes: Currently supported only jQueryUI datepicker (datepicker) and Bootstrap datepicker (eonasdan-bootstrap-datetimepicker) 216 Bootstrap datepicker depends moment library. This plugin depends moment too. 217* style_class 218 Required: false 219 Type: String 220 Description: Allows adding additional class/classes to filter - available for the following filters: 221 select / multi_select / text / custom_func / multi_select_custom_func 222* reset_button_style_class 223 Required: false 224 Type: String 225 Description: Allows adding additional class/classes to filter reset button 226* Global Parameters (per table rather than per column) 227* 228* Usage example yadcf.init(oTable,[{column_number : 0}, {column_number: 3}],{cumulative_filtering: true}); 229* ------------- 230* externally_triggered 231 Required: false 232 Type: boolean 233 Default value: false 234 Description: Filters will filter only when yadcf.exFilterExternallyTriggered(table_arg) is called 235 Special notes: Useful when you want to build some form with filters and you want to trigger the filter when that form 236 "submit" button is clicked (instead of filtering per filter input change) 237* cumulative_filtering 238 Required: false 239 Type: boolean 240 Default value: false 241 Description: Change the default behaviour of the filters so its options will be populated from the filtered rows (remaining 242 table data after filtering) only, unlike the normal behaviour in which the options of the filters are from all the table data 243* filters_position 244 Required: false 245 Type: String 246 Default value: header 247 Possible values: 'header' / 'footer' 248 Description: Filters can be placed in the header (thead) or in the footer (tfoot) of the table, 249 Note: When 'footer' you must provide a valid tfoot elemet in your table 250* filters_tr_index 251 Required: false 252 Type: integer 253 Default value: undefined 254 Description: Allow to control the index of the <tr> inside the thead of the table, e.g when one <tr> is used for headers/sort and 255 another <tr> is used for filters 256* 257* 258* 259* 260* External API functions: 261* 262* 263* ------------- 264* exFilterColumn 265 Description: Allows to trigger filter/s externally/programmatically (support ALL filter types!!!) , perfect for showing table with pre filtered columns 266 Arguments: table_arg: (variable of the datatable), 267 array of pairs: column number String/Object with from and to, filter_value (the actual string value that we want to filter by) 268 Usage example: yadcf.exFilterColumn(oTable, [[0, 'Some Data 2']]); //pre filter one column 269 yadcf.exFilterColumn(oTable, [[0, 'Some Data 1'], [1, {from: 111, to: 1110}], [2, {from: "", to: "11/25/2014"}]]); //pre filter several columns 270 yadcf.exFilterColumn(oTable, [[0, ['Some Data 1','Some Data 2']]]); // for pre filtering multi select filter you should use array with values (or an array with single value) 271* exGetColumnFilterVal 272 Description: Allows to retrieve column current filtered value (support ALL filter types!!!) 273 Arguments: table_arg: (variable of the datatable), 274 column number: column number from which we want the value 275 Usage example: yadcf.exGetColumnFilterVal(oTable,1); 276 Return value: String (for simple filter) / Object (for range filter) with from and to properties / Array of str
276ings for multi_select filter 277* exResetAllFilters 278 Description: Allows to reset all filters externally/programmatically (support ALL filter types!!!) , perfect for adding a "reset all" button to your page! 279 Arguments: table_arg: (variable of the datatable) 280 noRedraw: (boolean) , use it if you don't want your table to be reloaded after the filter reset, 281 for example if you planning to call exFilterColumn function right after the exResetAllFilters (to avoid two AJAX requests) 282 Usage example: yadcf.exResetAllFilters(oTable); 283* exResetFilters 284 Description: Allows to reset specific filters externally/programmatically (support ALL filter types!!!) , can be used for resetting one or more filters 285 Arguments: table_arg: (variable of the datatable) 286 array with columns numbers 287 noRedraw: (boolean) , use it if you don't want your table to be reloaded after the filter reset, 288 for example if you planning to call exFilterColumn function right after the exResetFilters (to avoid two AJAX requests) 289 Usage example: yadcf.exResetAllFilters(oTable, [1,2]); 290* initSelectPluginCustomTriggers 291 Description: Allows to set any select jquery plugin initialize and refresh functions. jQuery selector will be passed to the user defined function to initialize and refresh the plugin. 292 Great for integrating any jquey select plugin (Selectize / MultiSelect / etc) 293 Arguments: initFunc : function which will initialize the plugin 294 refreshFunc : function that will refresh the plugin. 295 destroyFunc : function that will destroy the plugin (upon table destroy even trigger). 296 Usage example: yadcf.initSelectPluginCustomTriggers(function($filterSelector){$filterSelector.multiselect({});}, function($filterSelector){$filterSelector.multiselect("refresh")}, , function($filterSelector){$filterSelector.multiselect("destroy")}); 297* exFilterExternallyTriggered 298 Description: Triggers all the available filters, should be used only when the externally_triggered option used 299 Arguments: table_arg: (variable of the datatable) 300 Usage example: yadcf.exResetAllFilters(table_arg); 301* 302* 303* 304* Server-side processing API (see more on showcase): 305* 306* From server to client: 307* 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: 308* 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... 309* 310* From client to server: 311* 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 312* 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-"); 313* 314* 315* 316* 317* 318* Working with filters for multiple tables: 319* 320* 321* ------------- 322* initMultipleTables 323 Description: Allows to create filter that will affect multiple tables / multiple column(s) in multiple tables 324 Arguments: Array of tables, 325 Array of objects with properties for each filter 326 Usage example: yadcf.initMultipleTables([oTable, oTable2], [{ 327 column_number: [0, 1], filter_container_id: 'multi-table-filter-0', filter_default_label: 'Filter all tables columns 1 and 2!' 328 }, 329 { 330 column_number: [2], filter_container_id: 'multi-table-filter-1', filter_default_label: 'Filter all tables column 3!' 331 }]); 332 Valid properties: filter_type: 'text' (default) / 'select' / 'multi_select', 333 column_number: not required (in that case the filter will be global) 334 can be either number(single column filter) or array of numbers(multiple columns filter) 335 filter_container_id: '' (required), 336 Note: All the usual properties of yadcf should be supported in initMultipleTables too! 337* initMultipleColumns 338 Description: Allows to create filter that will affect multiple column(s) in in a particular table 339 Arguments: Table variable, 340 Array of objects with properties for each filter 341 Usage example: yadcf.initMultipleColumns(oTable, [{ 342 column_number: [0, 1], filter_container_id: 'multi-table-filter-0', filter_default_label: 'Filter columns 1 and 2!' 343 }, 344 { 345 column_number: [2, 3], filter_container_id: 'multi-table-filter-1', filter_default_label: 'Filter column 3 and 4!' 346 }]); 347 Valid properties: filter_type: 'text' (default) / 'select' / 'multi_select', 348 column_number: not required (in that case the filter will be global) 349 can be either number(single column filter) or array of numbers(multiple columns filter) 350 filter_container_id: '' (required), 351 Note: All the usual properties of yadcf should be supported in initMultipleColumns too! 352*/ 353(function (root, factory) { 354 if (typeof define === 'function' && define.amd) { 355 define(['jquery'], factory); 356 } else if (typeof module === 'object' && module.exports) { 357 module.exports = factory(require('jquery')); 358 } else { 359 root.yadcf = factory(root.jQuery); 360 } 361}(this, function($) { 362 var yadcf = (function () { 363 364 'use strict'; 365 366 var tablesDT = {}, 367 oTables = {}, 368 oTablesIndex = {}, 369 options = {}, 370 plugins = {}, 371 exFilterColumnQueue = [], 372 yadcfDelay, 373 reA = /[^a-zA-Z]/g, 374 reN = /[^0-9]/g, 375 selectElementCustomInitFunc, 376 selectElementCustomRefreshFunc, 377 selectElementCustomDestroyFunc,
378 placeholderLang = { 379 'select': 'Select value', 380 'select_multi': 'Select values', 381 'filter': 'Type to filter', 382 'range': ['From', 'To'], 383 'date': 'Select a date' 384 }, 385 settingsMap = {}; 386 387 //From ColReorder (SpryMedia Ltd (www.sprymedia.co.uk)) 388 function getSettingsObjFromTable(dt) { 389 var oDTSettings; 390 if ($.fn.dataTable.Api) { 391 oDTSettings = new $.fn.dataTable.Api(dt).settings()[0]; 392 } else if (dt.fnSettings) {// 1.9 compatibility 393 // DataTables object, convert to the settings object 394 oDTSettings = dt.fnSettings(); 395 } else if (typeof dt === 'string') {// jQuery selector 396 if ($.fn.dataTable.fnIsDataTable($(dt)[0])) { 397 oDTSettings = $(dt).eq(0).dataTable().fnSettings(); 398 } 399 } else if (dt.nodeName && dt.nodeName.toLowerCase() === 'table') { 400 // Table node 401 if ($.fn.dataTable.fnIsDataTable(dt.nodeName)) { 402 oDTSettings = $(dt.nodeName).dataTable().fnSettings(); 403 } 404 } else if (dt instanceof jQuery) { 405 // jQuery object 406 if ($.fn.dataTable.fnIsDataTable(dt[0])) { 407 oDTSettings = dt.eq(0).dataTable().fnSettings(); 408 } 409 } else { 410 // DataTables settings object 411 oDTSettings = dt; 412 } 413 return oDTSettings; 414 } 415 416 function arraySwapValueWithIndex(pArray) { 417 var tmp = [], 418 i; 419 for (i = 0; i < pArray.length; i++) { 420 tmp[pArray[i]] = i; 421 } 422 return tmp; 423 } 424 425 function arraySwapValueWithIndex2(pArray) { 426 var tmp = [], 427 i; 428 for (i = 0; i < pArray.length; i++) { 429 tmp[pArray[i]._ColReorder_iOrigCol] = i; 430 } 431 return tmp; 432 } 433 434 function initColReorder2(settingsDt, table_selector_jq_friendly) { 435 if (settingsDt.oSavedState != undefined && settingsDt.oSavedState.ColReorder !== undefined) { 436 if (plugins[table_selector_jq_friendly] === undefined) { 437 plugins[table_selector_jq_friendly] = {}; 438 plugins[table_selector_jq_friendly].ColReorder = arraySwapValueWithIndex(settingsDt.oSavedState.ColReorder); 439 } 440 } else if (settingsDt.aoColumns[0]._ColReorder_iOrigCol !== undefined) { 441 if (plugins[table_selector_jq_friendly] === undefined) { 442 plugins[table_selector_jq_friendly] = {}; 443 plugins[table_selector_jq_friendly].ColReorder = arraySwapValueWithIndex2(settingsDt.aoColumns); 444 } 445 } 446 } 447 448 function initColReorderFromEvent(table_selector_jq_friendly) { 449 plugins[table_selector_jq_friendly] = undefined; 450 } 451 452 function columnsArrayToString(column_number) { 453 var column_number_obj = {}; 454 if (column_number !== undefined) { 455 if (column_number instanceof Array) { 456 column_number_obj.column_number_str = column_number.join('_'); 457 } else { 458 column_number_obj.column_number_str = column_number; 459 column_number = []; 460 column_number.push(column_number_obj.column_number_str); 461 } 462 } else { 463 column_number_obj.column_number_str = 'global'; 464 } 465 column_number_obj.column_number = column_number; 466 return column_number_obj; 467 } 468 469 function getOptions(selector) { 470 return options[selector]; 471 } 472 473 function eventTargetFixUp(pEvent) { 474 if (pEvent.target === undefined) { 475 pEvent.target = pEvent.srcElement; 476 } 477 return pEvent; 478 } 479 480 function dot2obj(tmpObj, dot_refs) { 481 var i = 0; 482 dot_refs = dot_refs.split("."); 483 for (i = 0; i < dot_refs.length; i++) { 484 tmpObj = tmpObj[dot_refs[i]]; 485 } 486 return tmpObj; 487 } 488 489 function setOptions(selector_arg, options_arg, params) { 490 var tmpOptions = {}, 491 i, 492 j, 493 col_num_as_int, 494 default_options = { 495 filter_type : "select", 496 enable_auto_complete : false, 497 sort_as : "alpha", 498 sort_order : "asc", 499 date_format : "mm/dd/yyyy", 500 ignore_char : undefined, 501 filter_match_mode : "contains", 502 select_type : undefined, 503 select_type_options : {}, 504 case_insensitive : true, 505 column_data_type: 'text', 506 html_data_type: 'text', 507 exclude_label: 'exclude', 508 style_class: '', 509 reset_button_style_class: '', 510 datepicker_type: 'jquery-ui',
511 range_data_type: 'single', 512 range_data_type_delim: '-', 513 omit_default_label: false 514 }, 515 adaptContainerCssClassImpl = function (dummy) { return ''; }; 516 517 $.extend(true, default_options, params); 518 519 if (options_arg.length === undefined) { 520 options[selector_arg] = options_arg; 521 return; 522 } 523 for (i = 0; i < options_arg.length; i++) { 524 if (options_arg[i].date_format !== undefined && options_arg[i].moment_date_format === undefined) { 525 options_arg[i].moment_date_format = options_arg[i].date_format; 526 } 527 if (options_arg[i].select_type === 'select2') { 528 default_options.select_type_options = { 529 adaptContainerCssClass: adaptContainerCssClassImpl 530 }; 531 } 532 //no individual reset button for externally_triggered mode 533 if (default_options.externally_triggered === true) { 534 options_arg[i].filter_reset_button_text = false; 535 } 536 //validate custom function required attributes 537 if (options_arg[i].filter_type !== undefined && options_arg[i].filter_type.indexOf('custom_func') !== -1) { 538 if (options_arg[i].custom_func === undefined) { 539 console.log('Error: You are trying to use filter_type: "custom_func / multi_select_custom_func" for column ' + options_arg[i].column_number + ' but there is no such custom_func attribute provided (custom_func: \"function reference goes here...\")'); 540 return; 541 } 542 } 543 col_num_as_int = +options_arg[i].column_number; 544 if (isNaN(col_num_as_int)) { 545 tmpOptions[options_arg[i].column_number_str] = $.extend(true, {}, default_options, options_arg[i]); 546 } else { 547 tmpOptions[col_num_as_int] = $.extend(true, {}, default_options, options_arg[i]); 548 } 549 } 550 options[selector_arg] = tmpOptions; 551 } 552 553 //taken and modified from DataTables 1.10.0-beta.2 source 554 function yadcfVersionCheck(version) { 555 var aThis = $.fn.dataTable.ext.sVersion.split('.'), 556 aThat = version.split('.'), 557 iThis, 558 iThat, 559 i, 560 iLen; 561 562 for (i = 0, iLen = aThat.length; i < iLen; i++) { 563 iThis = parseInt(aThis[i], 10) || 0; 564 iThat = parseInt(aThat[i], 10) || 0; 565 566 // Parts are the same, keep comparing 567 if (iThis === iThat) { 568 continue; 569 } 570 571 // Parts are different, return immediately 572 return iThis > iThat; 573 } 574 575 return true; 576 } 577 578 function calculateColumnNumber(column_number, pTable) { 579 var col_num_visible_iter, 580 col_num_visible = column_number; 581 for (col_num_visible_iter = 0; col_num_visible_iter < pTable.fnSettings().aoColumns.length && col_num_visible_iter < column_number; col_num_visible_iter++) { 582 if (pTable.fnSettings().aoColumns[col_num_visible_iter].bVisible === false) { 583 col_num_visible++; 584 } 585 } 586 return col_num_visible; 587 } 588 589 function resetIApiIndex() { 590 $.fn.dataTableExt.iApiIndex = 0; 591 592 } 593 594 function escapeRegExp(string) { 595 return string.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); 596 } 597 598 function escapeRegExpInArray(arr) { 599 var i; 600 for (i = 0; i < arr.length; i++) { 601 arr[i] = arr[i].replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); 602 } 603 return arr; 604 } 605 606 function replaceAll(string, find, replace) { 607 return string.replace(new RegExp(escapeRegExp(find), 'g'), replace); 608 } 609 610 function getTableId(obj) { 611 var tableId; 612 if (obj.table !== undefined) { 613 tableId = obj.table().node().id; 614 } else {
615 tableId = getSettingsObjFromTable(obj).sTableId; 616 } 617 return tableId; 618 } 619 620 function generateTableSelectorJQFriendly2(obj) { 621 var tmpStr; 622 if (obj.oInstance !== undefined && obj.oInstance.selector !== undefined) { 623 tmpStr = obj.oInstance.selector; 624 } else if (obj.selector !== undefined) { 625 tmpStr = obj.selector; 626 } else { 627 tmpStr = obj.table().node().id; 628 } 629 tmpStr = replaceAll(tmpStr, ".", "-"); 630 tmpStr = replaceAll(tmpStr, ' ', ''); 631 return tmpStr.replace(":", "-").replace("(", "").replace(")", "").replace("#", "-"); 632 } 633 634 function generateTableSelectorJQFriendlyNew(tmpStr) { 635 tmpStr = replaceAll(tmpStr, ":", "-"); 636 tmpStr = replaceAll(tmpStr, "(", ""); 637 tmpStr = replaceAll(tmpStr, ")", ""); 638 tmpStr = replaceAll(tmpStr, ",", ""); 639 tmpStr = replaceAll(tmpStr, ".", "-"); 640 tmpStr = replaceAll(tmpStr, "#", "-"); 641 tmpStr = replaceAll(tmpStr, ' ', ''); 642 return tmpStr; 643 } 644 645 yadcfDelay = (function () { 646 var timer = 0; 647 return function (callback, ms, param) { 648 clearTimeout(timer); 649 timer = setTimeout(function () { 650 callback(param); 651 }, ms); 652 return timer; 653 }; 654 }()); 655 656 function initializeSelectPlugin(selectType, $selectObject, select_type_options) { 657 if (selectType === 'chosen') { 658 $selectObject.chosen(select_type_options); 659 $selectObject.next().attr("onclick", "yadcf.stopPropagation(event);").attr("onmousedown", "yadcf.stopPropagation(event);"); 660 } else if (selectType === 'select2') { 661 $selectObject.select2(select_type_options); 662 if ($selectObject.next().hasClass('select2-container')) { 663 $selectObject.next().attr("onclick", "yadcf.stopPropagation(event);").attr("onmousedown", "yadcf.stopPropagation(event);"); 664 } 665 } else if (selectType === 'custom_select') { 666 selectElementCustomInitFunc($selectObject); 667 $selectObject.next().attr("onclick", "yadcf.stopPropagation(event);").attr("onmousedown", "yadcf.stopPropagation(event);"); 668 } 669 } 670 671 function refreshSelectPlugin(columnObj, $selectObject, val) { 672 var selectType = columnObj.select_type, 673 select_type_options = columnObj.select_type_options; 674 if (selectType === 'chosen') { 675 $selectObject.trigger("chosen:updated"); 676 } else if (selectType === 'select2') { 677 $selectObject.select2(select_type_options); 678 $selectObject.val(val); 679 } else if (selectType === 'custom_select') { 680 selectElementCustomRefreshFunc($selectObject); 681 } 682 } 683 684 function initSelectPluginCustomTriggers(initFunc, refreshFunc, destroyFunc) { 685 selectElementCustomInitFunc = initFunc; 686 selectElementCustomRefreshFunc = refreshFunc; 687 selectElementCustomDestroyFunc = destroyFunc; 688 } 689 690 //Used by exFilterColumn for translating readable search value into proper search string for datatables filtering 691 function yadcfMatchFilterString(table_arg, column_number, selected_value, filter_match_mode, multiple, exclude) { 692 var case_insensitive = yadcf.getOptions(table_arg.selector)[column_number].case_insensitive, 693 ret_val; 694 695 if (selected_value === '') { 696 return ''; 697 } 698 699 table_arg.fnSettings().aoPreSearchCols[column_number].bSmart = false; 700 table_arg.fnSettings().aoPreSearchCols[column_number].bRegex = true; 701 table_arg.fnSettings().aoPreSearchCols[column_number].bCaseInsensitive = case_insensitive; 702 703 if (multiple === undefined || multiple === false) { 704 if (exclude !== true) { 705 if (filter_match_mode === "contains") {
706 table_arg.fnSettings().aoPreSearchCols[column_number].bSmart = true; 707 table_arg.fnSettings().aoPreSearchCols[column_number].bRegex = false; 708 ret_val = selected_value; 709 } else if (filter_match_mode === "exact") { 710 ret_val = "^" + selected_value + "$"; 711 } else if (filter_match_mode === "startsWith") { 712 ret_val = "^" + selected_value; 713 } else if (filter_match_mode === "regex") { 714 ret_val = selected_value; 715 } 716 } else { 717 ret_val = "^((?!" + selected_value + ").)*$"; 718 } 719 } else { 720 if (filter_match_mode !== 'regex') { 721 selected_value = escapeRegExpInArray(selected_value); 722 } 723 if (filter_match_mode === "contains") { 724 ret_val = selected_value.join("|"); 725 } else if (filter_match_mode === "exact") { 726 ret_val = "^(" + selected_value.join("|") + ")$"; 727 } else if (filter_match_mode === "startsWith") { 728 ret_val = "^(" + selected_value.join("|") + ")"; 729 } else if (filter_match_mode === "regex") { 730 ret_val = selected_value; 731 } 732 } 733 return ret_val; 734 } 735 736 function yadcfMatchFilter(oTable, selected_value, filter_match_mode, column_number, exclude) { 737 var case_insensitive = yadcf.getOptions(oTable.selector)[column_number].case_insensitive; 738 if (exclude !== true) { 739 if (filter_match_mode === "contains") { 740 oTable.fnFilter(selected_value, column_number, false, true, true, case_insensitive); 741 } else if (filter_match_mode === "exact") { 742 selected_value = escapeRegExp(selected_value); 743 oTable.fnFilter("^" + selected_value + "$", column_number, true, false, true, case_insensitive); 744 } else if (filter_match_mode === "startsWith") { 745 selected_value = escapeRegExp(selected_value); 746 oTable.fnFilter("^" + selected_value, column_number, true, false, true, case_insensitive); 747 } else if (filter_match_mode === "regex") { 748 try { 749 //validate regex, only call fnFilter if valid 750 new RegExp(selected_value); 751 } catch (error) { 752 return; 753 } 754 oTable.fnFilter(selected_value, column_number, true, false, true, case_insensitive); 755 } 756 } else { 757 oTable.fnFilter("^((?!" + selected_value + ").)*$", column_number, true, false, true, case_insensitive); 758 } 759 } 760 function yadcfParseMatchFilter(tmpStr, filter_match_mode) { 761 var retVal; 762 if (filter_match_mode === "contains") { 763 retVal = tmpStr; 764 } else if (filter_match_mode === "exact") { 765 retVal = tmpStr.substring(1, tmpStr.length - 1); 766 retVal = retVal.replace(/([\\])/g, ''); 767 } else if (filter_match_mode === "startsWith") { 768 retVal = tmpStr.substring(1, tmpStr.length); 769 retVal = retVal.replace(/([\\])/g, ''); 770 } else if (filter_match_mode === "regex") { 771 retVal = tmpStr; 772 } 773 return retVal; 774 } 775 776 function doFilterCustomDateFunc(arg, table_selector_jq_friendly, column_number) { 777 var oTable = oTables[table_selector_jq_friendly], 778 yadcfState, 779 columnObj = getOptions(oTable.selector)[column_number]; 780 781 if (arg === 'clear' && exGetColumnFilterVal(oTable, column_number) === '') { 782 return; 783 } 784 785 if (arg.value !== undefined && arg.value !== "-1") { 786 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).addClass("inuse"); 787 } else { 788 //wehn arg === 'clear' or arg.value === '-1' 789 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).val('-1').focus(); 790 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).removeClass("inuse"); 791 refreshSelectPlugin(columnObj, $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number), '-1'); 792 } 793 794 if (!oTable.fnSettings().oLoadedState) { 795 oTable.fnSettings().oLoadedState = {};
796 oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); 797 } 798 if (oTable.fnSettings().oFeatures.bStateSave === true) { 799 if (oTable.fnSettings().oLoadedState.yadcfState !== undefined && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] !== undefined) { 800 oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number] = 801 { 802 'from' : arg.value 803 }; 804 } else { 805 yadcfState = {}; 806 yadcfState[table_selector_jq_friendly] = []; 807 yadcfState[table_selector_jq_friendly][column_number] = { 808 'from' : arg.value 809 }; 810 oTable.fnSettings().oLoadedState.yadcfState = yadcfState; 811 } 812 oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); 813 } 814 815 oTable.fnDraw(); 816 } 817 818 function calcColumnNumberFilter(settingsDt, column_number, table_selector_jq_friendly) { 819 var column_number_filter; 820 if ((settingsDt.oSavedState != undefined && settingsDt.oSavedState.ColReorder !== undefined) || 821 settingsDt._colReorder != undefined || 822 (plugins[table_selector_jq_friendly] !== undefined && plugins[table_selector_jq_friendly].ColReorder !== undefined)) { 823 initColReorder2(settingsDt, table_selector_jq_friendly); 824 column_number_filter = plugins[table_selector_jq_friendly].ColReorder[column_number]; 825 } else { 826 column_number_filter = column_number; 827 } 828 return column_number_filter; 829 } 830 831 function doFilter(arg, table_selector_jq_friendly, column_number, filter_match_mode) { 832 $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; 833 834 var oTable = oTables[table_selector_jq_friendly], 835 selected_value, 836 column_number_filter, 837 columnObj, 838 settingsDt = getSettingsObjFromTable(oTable); 839 840 column_number_filter = calcColumnNumberFilter(settingsDt, column_number, table_selector_jq_friendly); 841 842 columnObj = getOptions(oTable.selector)[column_number]; 843 if (arg === "clear") { 844 if (exGetColumnFilterVal(oTable, column_number) === '') { 845 return; 846 } 847 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).val("-1").focus(); 848 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).removeClass("inuse"); 849 $(document).data("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val", "-1"); 850 oTable.fnFilter("", column_number_filter); 851 resetIApiIndex(); 852 853 refreshSelectPlugin(columnObj, $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number), '-1'); 854 return; 855 } 856 857 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).addClass("inuse"); 858 859 $(document).data("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val", arg.value); 860 861 selected_value = $.trim($(arg).find('option:selected').val()); 862 863 if (arg.value !== "-1") { 864 yadcfMatchFilter(oTable, selected_value, filter_match_mode, column_number_filter); 865 } else { 866 oTable.fnFilter("", column_number_filter); 867 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).removeClass("inuse"); 868 } 869 resetIApiIndex(); 870 } 871 872 function doFilterMultiSelect(arg, table_selector_jq_friendly, column_number, filter_match_mode) { 873 $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; 874 var oTable = oTables[table_selector_jq_friendly], 875 selected_values = $(arg).val(), 876 selected_values_trimmed = [], 877 i,
878 stringForSearch, 879 column_number_filter, 880 settingsDt = getSettingsObjFromTable(oTable); 881 882 column_number_filter = calcColumnNumberFilter(settingsDt, column_number, table_selector_jq_friendly); 883 $(document).data("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val", selected_values); 884 885 if (selected_values !== null) { 886 for (i = selected_values.length - 1; i >= 0; i--) { 887 if (selected_values[i] === "-1") { 888 selected_values.splice(i, 1); 889 break; 890 } 891 } 892 for (i = 0; i < selected_values.length; i++) { 893 selected_values_trimmed.push($.trim(selected_values[i])); 894 } 895 if (selected_values_trimmed.length !== 0) { 896 if (filter_match_mode !== "regex") { 897 stringForSearch = selected_values_trimmed.join('narutouzomaki'); 898 stringForSearch = stringForSearch.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); 899 stringForSearch = stringForSearch.split('narutouzomaki').join('|'); 900 if (filter_match_mode === "contains") { 901 oTable.fnFilter(stringForSearch, column_number_filter, true, false, true); 902 } else if (filter_match_mode === "exact") { 903 oTable.fnFilter("^(" + stringForSearch + ")$", column_number_filter, true, false, true); 904 } else if (filter_match_mode === "startsWith") { 905 oTable.fnFilter("^(" + stringForSearch + ")", column_number_filter, true, false, true); 906 } 907 } else { 908 stringForSearch = selected_values_trimmed.join('|'); 909 oTable.fnFilter(stringForSearch, column_number_filter, true, false, true); 910 } 911 } else { 912 oTable.fnFilter("", column_number_filter); 913 } 914 } else { 915 oTable.fnFilter("", column_number_filter); 916 } 917 resetIApiIndex(); 918 } 919 920 function yadcfParseMatchFilterMultiSelect(tmpStr, filter_match_mode) { 921 var retVal; 922 if (filter_match_mode === "contains") { 923 retVal = tmpStr; 924 } else if (filter_match_mode === "exact") { 925 retVal = tmpStr.substring(1, tmpStr.length - 1); 926 retVal = retVal.substring(1, retVal.length - 1); 927 } else if (filter_match_mode === "startsWith") { 928 retVal = tmpStr.substring(1, tmpStr.length); 929 retVal = retVal.substring(1, retVal.length - 1); 930 } else if (filter_match_mode === "regex") { 931 retVal = tmpStr; 932 } 933 return retVal; 934 } 935 936 function doFilterAutocomplete(arg, table_selector_jq_friendly, column_number, filter_match_mode) { 937 $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; 938 var oTable = oTables[table_selector_jq_friendly], 939 column_number_filter, 940 settingsDt = getSettingsObjFromTable(oTable); 941 942 column_number_filter = calcColumnNumberFilter(settingsDt, column_number, table_selector_jq_friendly); 943 944 if (arg === "clear") { 945 if (exGetColumnFilterVal(oTable, column_number) === '') { 946 return; 947 } 948 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).val("").focus(); 949 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).removeClass("inuse"); 950 $(document).removeData("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val"); 951 oTable.fnFilter("", column_number_filter); 952 resetIApiIndex(); 953 return; 954 } 955 956 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).addClass("inuse"); 957 958 $(document).data("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val", arg.value); 959 960 yadcfMatchFilter(oTable, arg.value, filter_match_mode, column_number_filter); 961 962 resetIApiIndex(); 963 } 964 965 function autocompleteSelect(event, ui) { 966 event = eventTargetFixUp(event); 967 var table_column = event.target.id.replace("yadcf-filter-", ""), 968 dashIndex = table_column.lastIndexOf("-"), 969 table_selector_jq_friendly = table_column.substring(0, dashIndex), 970 col_num = parseInt(table_column.substring(dashIndex + 1), 10), 971 filter_match_mode = $(event.target).attr("filter_match_mode"); 972 doFilterAutocomplete(ui.item, table_selector_jq_friendly, col_num, filter_match_mode); 973 } 974 975 function sortNumAsc(a, b) { 976 return a - b; 977 } 978 979 function sortNumDesc(a, b) { 980 return b - a; 981 } 982 983 function findMinInArray(array, columnObj) { 984 var narray = [], i, num; 985 for (i = 0; i < array.length; i++) { 986 if (array[i] !== null) { 987 if (columnObj.ignore_char !== undefined) { 988 array[i] = array[i].toString().replace(columnObj.ignore_char, ""); 989 } 990 if (columnObj.range_data_type === 'single') { 991 num = +array[i]; 992 } else { 993 num = array[i].split(columnObj.range_data_type_delim); 994 num = num[0]; 995 } 996 if (!isNaN(num)) { 997 narray.push(num); 998 } 999 } 1000 } 1001 return Math.min.apply(Math, narray); 1002 } 1003 1004 function findMaxInArray(array, columnObj) { 1005 var narray = [], i, num; 1006 for (i = 0; i < array.length; i++) { 1007 if (array[i] !== null) { 1008 if (columnObj.ignore_char !== undefined) { 1009 array[i] = array[i].toString().replace(columnObj.ignore_char, ""); 1010 } 1011 if (columnObj.range_data_type === 'single') { 1012 num = +array[i]; 1013 } else { 1014 num = array[i].split(columnObj.range_data_type_delim); 1015 num = num[1];
1016 } 1017 if (!isNaN(num)) { 1018 narray.push(num); 1019 } 1020 } 1021 } 1022 return Math.max.apply(Math, narray); 1023 } 1024 1025 function addRangeNumberAndSliderFilterCapability(table_selector_jq_friendly, fromId, toId, col_num, ignore_char, sliderMaxMin) { 1026 1027 $.fn.dataTableExt.afnFiltering.push( 1028 function (settingsDt, aData, iDataIndex, rowData) { 1029 var min, 1030 max, 1031 val, 1032 retVal = false, 1033 table_selector_jq_friendly_local = table_selector_jq_friendly, 1034 current_table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly2(settingsDt), 1035 ignore_char_local = ignore_char, 1036 column_data_type, 1037 html_data_type, 1038 i, 1039 columnObjKey, 1040 columnObj, 1041 column_number_filter, 1042 valFrom, 1043 valTo; 1044 1045 if (table_selector_jq_friendly_local !== current_table_selector_jq_friendly) { 1046 return true; 1047 } 1048 columnObj = getOptions(settingsDt.oInstance.selector)[col_num]; 1049 if (columnObj.filter_type === 'range_number_slider') { 1050 min = $('#' + fromId).text(); 1051 max = $('#' + toId).text(); 1052 } else { 1053 min = $('#' + fromId).val(); 1054 max = $('#' + toId).val(); 1055 } 1056 1057 column_number_filter = calcColumnNumberFilter(settingsDt, col_num, table_selector_jq_friendly); 1058 1059 if (rowData !== undefined) { 1060 aData = rowData; 1061 if (columnObj.column_number_data !== undefined) { 1062 column_number_filter = columnObj.column_number_data; 1063 val = dot2obj(aData, column_number_filter); 1064 } else { 1065 val = aData[column_number_filter]; 1066 } 1067 } else { 1068 val = aData[column_number_filter]; 1069 } 1070 if (!isFinite(min) || !isFinite(max)) { 1071 return true; 1072 } 1073 column_data_type = columnObj.column_data_type; 1074 html_data_type = columnObj.html_data_type; 1075 1076 if (column_data_type === "html" || column_data_type === "rendered_html") { 1077 if (html_data_type === undefined) { 1078 html_data_type = "text"; 1079 } 1080 if ($(val).length !== 0) { 1081 switch (html_data_type) { 1082 case "text": 1083 val = $(val).text(); 1084 break; 1085 case "value": 1086 val = $(val).val(); 1087 break; 1088 case "id": 1089 val = val.id; 1090 break; 1091 case "selector": 1092 val = $(val).find(columnObj.html_data_selector).text(); 1093 break; 1094 } 1095 } 1096 } else { 1097 if (typeof val === 'object') { 1098 if (columnObj.html5_data !== undefined) { 1099 val = val['@' + columnObj.html5_data]; 1100 } 1101 } 1102 } 1103 if (ignore_char_local !== undefined) { 1104 min = min.replace(ignore_char_local, ""); 1105 max = max.replace(ignore_char_local, ""); 1106 if (val) { 1107 val = val.toString().replace(ignore_char_local, ""); 1108 } else { 1109 val = ""; 1110 } 1111 } 1112 //omit empty rows when filtering 1113 if (columnObj.filter_type === 'range_number_slider') { 1114 if (val === '' && ((+min) !== sliderMaxMin.min || (+max) !== sliderMaxMin.max)) { 1115 return false; 1116 } 1117 } else { 1118 if (val === '' && (min !== '' || max !== '')) { 1119 return false; 1120 } 1121 } 1122 min = (min !== "") ? (+min) : min; 1123 max = (max !== "") ? (+max) : max; 1124 if (columnObj.range_data_type === 'single') { 1125 val = (val !== "") ? (+val) : val; 1126 if (min === "" && max === "") { 1127 retVal = true; 1128 } else if (min === "" && val <= max) { 1129 retVal = true; 1130 } else if (min <= val && "" === max) { 1131 retVal = true; 1132 } else if (min <= val && val <= max) { 1133 retVal = true; 1134 } else if (val === '' || isNaN(val)) { 1135 retVal = true; 1136 } 1137 } else if (columnObj.range_data_type === 'range') { 1138 val = val.split(columnObj.range_data_type_delim); 1139 valFrom = (val[0] !== "") ? (+val[0]) : val[0]; 1140 valTo = (val[1] !== "") ? (+val[1]) : val[1]; 1141 if (min === "" && max === "") { 1142 retVal = true; 1143 } else if (min === "" && valTo <= max) { 1144 retVal = true; 1145 } else if (min <= valFrom && "" === max) { 1146 retVal = true; 1147 } else if (min <= valFrom && valTo <= max) { 1148 retVal = true; 1149 } else if ((valFrom === '' || isNaN(valFrom)) && (valTo === '' || isNaN(valTo))) { 1150 retVal = true; 1151 } 1152 } 1153 return retVal; 1154 } 1155 ); 1156 } 1157 1158 function addCustomFunctionFilterCapability(table_selector_jq_friendly, filterId, col_num) { 1159 1160 $.fn.dataTableExt.afnFiltering.push( 1161 function (settingsDt, aData, iDataIndex, stateVal) { 1162 var filterVal = $('#' + filterId).val(), 1163 columnVal, 1164 retVal = false, 1165 table_selector_jq_friendly_local = table_selector_jq_friendly, 1166 current_table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly2(settingsDt), 1167 custom_func, 1168 column_number_filter; 1169 1170 if (table_selector_jq_friendly_local !== current_table_selector_jq_friendly || filterVal === '-1') { 1171 return true; 1172 } 1173 1174 column_number_filter = calcColumnNumberFilter(settingsDt, col_num, table_selector_jq_friendly); 1175 1176 columnVal = aData[column_number_filter] === "-" ? 0 : aData[column_number_filter]; 1177 1178 custom_func = getOptions(settingsDt.oInstance.selector)[col_num].custom_func; 1179 1180 retVal = custom_func(filterVal, columnVal, aData, stateVal); 1181 1182 return retVal; 1183 } 1184 ); 1185 } 1186 function addRangeDateFilterCapability(table_selector_jq_friendly, fromId, toId, col_num, date_format) { 1187 1188 $.fn.dataTableExt.afnFiltering.push( 1189 function (settingsDt, aData, iDataIndex, rowData) { 1190 var min = document.getElementById(fromId) !== null ? document.getElementById(fromId).value : "", 1191 max = document.getElementById(toId) !== null ? document.getElementById(toId).value : "", 1192 val, 1193 retVal = false, 1194 table_selector_jq_friendly_local = table_selector_jq_friendly, 1195 current_table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly2(settingsDt), 1196 column_data_type, 1197 html_data_type, 1198 i, 1199 columnObjKey, 1200 columnObj, 1201 column_number_filter, 1202 min_time, 1203 max_time, 1204 dataRenderFunc; 1205 1206 if (table_selector_jq_friendly_local !== current_table_selector_jq_friendly) { 1207 return true; 1208 } 1209 columnObj = getOptions(settingsDt.oInstance.selector)[col_num]; 1210 1211 column_number_filter = calcColumnNumberFilter(settingsDt, col_num, table_selector_jq_friendly); 1212 if (typeof columnObj.column_number_data === 'function' || typeof columnObj.column_number_render === 'function') { 1213 dataRenderFunc = true; 1214 } 1215 if (rowData !== undefined && dataRenderFunc !== true) { 1216 if (columnObj.column_number_data !== undefined) { 1217 column_number_filter = columnObj.column_number_data; 1218 val = dot2obj(rowData, column_number_filter); 1219 } else { 1220 val = rowData[column_number_filter]; 1221 } 1222 } else { 1223 val = aData[column_number_filter]; 1224 } 1225 1226 column_data_type = columnObj.column_data_type; 1227 html_data_type = columnObj.html_data_type; 1228 1229 if (column_data_type === "html" || column_data_type === "rendered_html") { 1230 if (html_data_type === undefined) { 1231 html_data_type = "text"; 1232 } 1233 if ($(val).length !== 0) { 1234 switch (html_data_type) { 1235 case "text": 1236 val = $(val).text(); 1237 break; 1238 case "value": 1239 val = $(val).val(); 1240 break; 1241 case "id": 1242 val = val.id; 1243 break; 1244 case "selector": 1245 val = $(val).find(columnObj.html_data_selector).text(); 1246 break; 1247 } 1248 } 1249 } else { 1250 if (typeof val === 'object') { 1251 if (columnObj.html5_data !== undefined) { 1252 val = val['@' + columnObj.html5_data]; 1253 } 1254 } 1255 } 1256 //omit empty rows when filtering 1257 if (val === '' && (min !== '' || max !== '')) { 1258 return false; 1259 } 1260 try { 1261 if (min.length === (date_format.length + 2) || columnObj.datepicker_type === 'bootstrap-datetimepicker') { 1262 if (columnObj.datepicker_type === 'jquery-ui') { 1263 min = (min !== "") ? $.datepicker.parseDate(date_format, min) : min; 1264 } else if (columnObj.datepicker_type === 'bootstrap-datetimepicker') { 1265 min = (min !== "") ? moment(min, columnObj.moment_date_format).toDate() : min; 1266 } 1267 } 1268 } catch (err1) {} 1269 try { 1270 if (max.length === (date_format.length + 2) || columnObj.datepicker_type === 'bootstrap-datetimepicker') { 1271 if (columnObj.datepicker_type === 'jquery-ui') { 1272 max = (max !== "") ? $.datepicker.parseDate(date_format, max) : max; 1273 } else if (columnObj.datepicker_type === 'bootstrap-datetimepicker') { 1274 max = (max !== "") ? moment(max, columnObj.moment_date_format).toDate() : max; 1275 } 1276 } 1277 } catch (err2) {} 1278 try { 1279 if (columnObj.datepicker_type === 'jquery-ui') { 1280 val = (val !== "") ? $.datepicker.parseDate(date_format, val) : val; 1281 } else if (columnObj.datepicker_type === 'bootstrap-datetimepicker') { 1282 val = (val !== "") ? moment(val, columnObj.moment_date_format).toDate() : val; 1283 } 1284 } catch (err3) {} 1285 1286 if (date_format.toLowerCase() !== 'hh:mm') { 1287 if ((min === "" || !(min instanceof Date)) && (max === "" || !(max instanceof Date))) { 1288 retVal = true; 1289 } else if (min === "" && val <= max) { 1290 retVal = true; 1291 } else if (min <= val && "" === max) { 1292 retVal = true; 1293 } else if (min <= val && val <= max) { 1294 retVal = true; 1295 } 1296 } else { 1297 min_time = moment(min); 1298 min_time = min_time.minutes() + min_time.hours() * 60; 1299 if (isNaN(min_time)) { 1300 min_time = ''; 1301 } 1302 max_time = moment(max); 1303 max_time = max_time.minutes() + max_time.hours() * 60; 1304 if (isNaN(max_time)) { 1305 max_time = ''; 1306 } 1307 val = moment(val); 1308 val = val.minutes() + val.hours() * 60; 1309 1310 if ((min === "" || !(moment(min, date_format).isValid())) && (max === "" || !(moment(max, date_format).isValid()))) { 1311 retVal = true; 1312 } else if (min_time === "" && val <= max_time) { 1313 retVal = true; 1314 } else if (min_time <= val && "" === max_time) { 1315 retVal = true; 1316 } else if (min_time <= val && val <= max_time) { 1317 retVal = true; 1318 } 1319 } 1320 return retVal; 1321 } 1322 ); 1323 } 1324 1325 function addRangeNumberFilter(filter_selector_string, table_selector_jq_friendly, column_number, filter_reset_button_text, filter_default_label, ignore_char) { 1326 var fromId = "yadcf-filter-" + table_selector_jq_friendly + "-from-" + column_number, 1327 toId = "yadcf-filter-" + table_selector_jq_friendly + "-to-" + column_number, 1328 filter_selector_string_tmp, 1329 filter_wrapper_id, 1330 oTable, 1331 columnObj, 1332 filterActionStr; 1333 1334 filter_wrapper_id = "yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number; 1335 1336 if ($("#" + filter_wrapper_id).length > 0) { 1337 return; 1338 } 1339
1339 $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; 1340 oTable = oTables[table_selector_jq_friendly]; 1341 columnObj = getOptions(oTable.selector)[column_number]; 1342 1343 //add a wrapper to hold both filter and reset button 1344 $(filter_selector_string).append("<div onmousedown=\"yadcf.stopPropagation(event);\" onclick=\"yadcf.stopPropagation(event);\" id=\"" + filter_wrapper_id + "\" class=\"yadcf-filter-wrapper\"></div>"); 1345 filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; 1346 filter_selector_string_tmp = filter_selector_string; 1347 1348 $(filter_selector_string).append("<div id=\"yadcf-filter-wrapper-inner-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter-wrapper-inner" + " -" + table_selector_jq_friendly + "-" + column_number + "\"></div>"); 1349 filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper-inner"; 1350 1351 filterActionStr = 'onkeyup="yadcf.rangeNumberKeyUP(\'' + table_selector_jq_friendly + '\',event);"'; 1352 if (columnObj.externally_triggered === true) { 1353 filterActionStr = ''; 1354 } 1355 1356 $(filter_selector_string).append("<input onkeydown=\"yadcf.preventDefaultForEnter(event);\" placeholder=\"" + filter_default_label[0] + "\" id=\"" + fromId + "\" class=\"yadcf-filter-range-number yadcf-filter-range\" " + filterActionStr + "></input>"); 1357 $(filter_selector_string).append("<span class=\"yadcf-filter-range-number-seperator\" >" + 1358 "</span>"); 1359 $(filter_selector_string).append("<input onkeydown=\"yadcf.preventDefaultForEnter(event);\" placeholder=\"" + filter_default_label[1] + "\" id=\"" + toId + "\" class=\"yadcf-filter-range-number yadcf-filter-range\" " + filterActionStr + "></input>"); 1360 1361 if (filter_reset_button_text !== false) { 1362 $(filter_selector_string_tmp).append("<button type=\"button\" onmousedown=\"yadcf.stopPropagation(event);\" " + 1363 "onclick=\"yadcf.stopPropagation(event);yadcf.rangeClear('" + table_selector_jq_friendly + "',event," + column_number + "); return false;\" class=\"yadcf-filter-reset-button " + columnObj.reset_button_style_class + "\">" + filter_reset_button_text + "</button>"); 1364 } 1365 1366 if (oTable.fnSettings().oFeatures.bStateSave === true && oTable.fnSettings().oLoadedState) { 1367 if (oTable.fnSettings().oLoadedState.yadcfState && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number]) { 1368 $('#' + fromId).val(oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from); 1369 if (oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from !== "") { 1370 $('#' + fromId).addClass("inuse"); 1371 } 1372 $('#' + toId).val(oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].to); 1373 if (oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].to !== "") { 1374 $('#' + toId).addClass("inuse"); 1375 } 1376 } 1377 } 1378 resetIApiIndex(); 1379 1380 if (oTable.fnSettings().oFeatures.bServerSide !== true) { 1381 addRangeNumberAndSliderFilterCapability(table_selector_jq_friendly, fromId, toId, column_number, ignore_char); 1382 } 1383 1384 } 1385 1386 function dateSelectSingle(pDate, pEvent, clear) { 1387 var oTable, 1388 date, 1389 event, 1390 column_number, 1391 dashIndex, 1392 table_selector_jq_friendly, 1393 column_number_filter, 1394 settingsDt, 1395 columnObj; 1396 1397 if (pDate.type === 'dp') { 1398 event = pDate.target; 1399 } else { 1400 date = pDate; 1401 event = pEvent; 1402 } 1403 column_number = $(event).attr('id').replace('yadcf-filter-', '').replace('-date', '').replace('-reset', ''); 1404 dashIndex = column_number.lastIndexOf("-"); 1405 table_selector_jq_friendly = column_number.substring(0, dashIndex); 1406 1407 column_number = column_number.substring(dashIndex + 1); 1408 $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; 1409 oTable = oTables[table_selector_jq_friendly];
1410 settingsDt = getSettingsObjFromTable(oTable); 1411 columnObj = getOptions(oTable.selector)[column_number]; 1412 1413 if (pDate.type === 'dp') { 1414 if (moment($(event).val(), columnObj.date_format).isValid()) { 1415 date = $(event).val(); 1416 } else { 1417 clear = 'clear'; 1418 } 1419 $(event).blur(); 1420 } 1421 1422 column_number_filter = calcColumnNumberFilter(settingsDt, column_number, table_selector_jq_friendly); 1423 1424 if (clear === undefined) { 1425 oTable.fnFilter(date, column_number_filter); 1426 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).addClass("inuse"); 1427 } else if (clear === 'clear') { 1428 if (exGetColumnFilterVal(oTable, column_number) === '') { 1429 return; 1430 } 1431 oTable.fnFilter('', column_number_filter); 1432 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val('').removeClass("inuse"); 1433 } 1434 1435 resetIApiIndex(); 1436 } 1437 1438 function dateSelect(pDate, pEvent) { 1439 var oTable, 1440 column_number, 1441 dashIndex, 1442 table_selector_jq_friendly, 1443 yadcfState, 1444 from, 1445 to, 1446 date, 1447 event, 1448 columnObj; 1449 1450 if (pDate.type === 'dp') { 1451 event = pDate.target; 1452 } else { 1453 date = pDate; 1454 event = pEvent; 1455 } 1456 1457 column_number = $(event).attr("id").replace("yadcf-filter-", "").replace("-from-date", "").replace("-to-date", ""); 1458 dashIndex = column_number.lastIndexOf("-"); 1459 table_selector_jq_friendly = column_number.substring(0, dashIndex); 1460 1461 column_number = column_number.substring(dashIndex + 1); 1462 1463 $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; 1464 1465 oTable = oTables[table_selector_jq_friendly]; 1466 columnObj = getOptions(oTable.selector)[column_number]; 1467 1468 if (pDate.type === 'dp') { 1469 event = pDate.target; 1470 if (pDate.date === false || !moment($(event).val(), columnObj.date_format).isValid()) { 1471 $(event).removeClass("inuse"); 1472 $(event).data("DateTimePicker").minDate(false); 1473 } else { 1474 $(event).addClass("inuse"); 1475 } 1476 $(event).blur(); 1477 } else { 1478 $(event).addClass("inuse"); 1479 } 1480 1481 if ($(event).attr("id").indexOf("-from-") !== -1) { 1482 from = document.getElementById($(event).attr("id")).value; 1483 to = document.getElementById($(event).attr("id").replace("-from-", "-to-")).value; 1484 } else { 1485 to = document.getElementById($(event).attr("id")).value; 1486 from = document.getElementById($(event).attr("id").replace("-to-", "-from-")).value; 1487 } 1488 1489 if (oTable.fnSettings().oFeatures.bServerSide !== true) { 1490 oTable.fnDraw(); 1491 } else { 1492 oTable.fnFilter(from + '-yadcf_delim-' + to, column_number); 1493 } 1494 1495 if (!oTable.fnSettings().oLoadedState) { 1496 oTable.fnSettings().oLoadedState = {}; 1497 oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); 1498 } 1499 if (oTable.fnSettings().oFeatures.bStateSave === true) { 1500 if (oTable.fnSettings().oLoadedState.yadcfState !== undefined && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] !== undefined) { 1501 oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number] = 1502 { 1503 'from' : from, 1504 'to' : to 1505 }; 1506 } else { 1507 yadcfState = {}; 1508 yadcfState[table_selector_jq_friendly] = []; 1509 yadcfState[table_selector_jq_friendly][column_number] = { 1510 'from' : from, 1511 'to' : to 1512 }; 1513 oTable.fnSettings().oLoadedState.yadcfState = yadcfState; 1514 }
1515 oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); 1516 } 1517 1518 resetIApiIndex(); 1519 } 1520 1521 function addRangeDateFilter(filter_selector_string, table_selector_jq_friendly, column_number, filter_reset_button_text, filter_default_label, date_format) { 1522 var fromId = "yadcf-filter-" + table_selector_jq_friendly + "-from-date-" + column_number, 1523 toId = "yadcf-filter-" + table_selector_jq_friendly + "-to-date-" + column_number, 1524 filter_selector_string_tmp, 1525 filter_wrapper_id, 1526 oTable, 1527 columnObj, 1528 datepickerObj = {}, 1529 filterActionStr, 1530 filterClass = '', 1531 $fromInput, 1532 $toInput, 1533 innerWrapperAdditionalClass = ''; 1534 1535 filter_wrapper_id = "yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number; 1536 1537 if ($("#" + filter_wrapper_id).length > 0) { 1538 return; 1539 } 1540 $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; 1541 oTable = oTables[table_selector_jq_friendly]; 1542 columnObj = getOptions(oTable.selector)[column_number]; 1543 if (columnObj.datepicker_type === 'bootstrap-datepicker') { 1544 innerWrapperAdditionalClass = 'input-daterange'; 1545 } 1546 //add a wrapper to hold both filter and reset button 1547 $(filter_selector_string).append("<div onmousedown=\"yadcf.stopPropagation(event);\" onclick=\"yadcf.stopPropagation(event);\" id=\"" + filter_wrapper_id + "\" class=\"yadcf-filter-wrapper\"></div>"); 1548 filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; 1549 filter_selector_string_tmp = filter_selector_string; 1550 1551 $(filter_selector_string).append("<div id=\"yadcf-filter-wrapper-inner-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter-wrapper-inner " + innerWrapperAdditionalClass + "\"></div>"); 1552 filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper-inner"; 1553 1554 filterActionStr = 'onkeyup="yadcf.rangeDateKeyUP(\'' + table_selector_jq_friendly + '\',\'' + date_format + '\',event);"'; 1555 if (columnObj.externally_triggered === true) { 1556 filterActionStr = ''; 1557 } 1558 1559 $(filter_selector_string).append("<input onkeydown=\"yadcf.preventDefaultForEnter(event);\" placeholder=\"" + filter_default_label[0] + "\" id=\"" + fromId + "\" class=\"yadcf-filter-range-date yadcf-filter-range\" " + filterActionStr + "></input>"); 1560 $(filter_selector_string).append("<span class=\"yadcf-filter-range-date-seperator\" >" + 1561 "</span>"); 1562 $(filter_selector_string).append("<input onkeydown=\"yadcf.preventDefaultForEnter(event);\" placeholder=\"" + filter_default_label[1] + "\" id=\"" + toId + "\" class=\"yadcf-filter-range-date yadcf-filter-range\" " + filterActionStr + "></input>"); 1563 1564 $fromInput = $("#" + fromId); 1565 $toInput = $("#" + toId); 1566 1567 if (filter_reset_button_text !== false) { 1568 $(filter_selector_string_tmp).append("<button type=\"button\" onmousedown=\"yadcf.stopPropagation(event);\" " + 1569 "onclick=\"yadcf.stopPropagation(event);yadcf.rangeClear('" + table_selector_jq_friendly + "',event," + column_number + "); return false;\" class=\"yadcf-filter-reset-button " + columnObj.reset_button_style_class + "\">" + filter_reset_button_text + "</button>"); 1570 } 1571 1572 if (columnObj.datepicker_type === 'jquery-ui') { 1573 datepickerObj.dateFormat = date_format; 1574 } else if (columnObj.datepicker_type === 'bootstrap-datetimepicker') { 1575 datepickerObj.format = date_format; 1576 } 1577 1578 if (columnObj.externally_triggered !== true) { 1579 if (columnObj.datepicker_type === 'jquery-ui') { 1580 datepickerObj.onSelect = dateSelect; 1581 } 1582 // for 'bootstrap-datetimepicker' its implemented below... 1583 } 1584 1585 datepickerObj = $.extend({}, datepickerObj, columnObj.filter_plugin_options); 1586 1587 if (columnObj.datepicker_type === 'jquery-ui') { 1588 $fromInput.datepicker($.extend(datepickerObj, {onClose: function (selectedDate) { 1589 $toInput.datepicker('option', 'minDate', selectedDate); 1590 } })); 1591 $toInput.datepicker($.extend(datepickerObj, {onClose: function (selectedDate) { 1592 $fromInput.datepicker('option', 'maxDate', selectedDate); 1593 } })); 1594 1595 } else if (columnObj.datepicker_type === 'bootstrap-datetimepicker') { 1596 datepickerObj.useCurrent = false; 1597 $fromInput.datetimepicker(datepickerObj); 1598 $toInput.datetimepicker(datepickerObj); 1599 if (columnObj.externally_triggered !== true) { 1600 $fromInput.add($toInput).on('dp.hide', dateSelect); 1601 } 1602 } else if (columnObj.datepicker_type === 'bootstrap-datepicker') { 1603 //$fromInput.datepicker({}); 1604 //$toInput.datepicker({}); 1605 } 1606 1607 if (oTable.fnSettings().oFeatures.bStateSave === true && oTable.fnSettings().oLoadedState) { 1608 if (oTable.fnSettings().oLoadedState.yadcfState && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number]) { 1609 $('#' + fromId).val(oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from); 1610 if (oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from !== "") { 1611 $('#' + fromId).addClass("inuse"); 1612 } 1613 $('#' + toId).val(oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].to); 1614 if (oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number].to !== "") { 1615 $('#' + toId).addClass("inuse"); 1616 } 1617 } 1618 } 1619 1620 if (oTable.fnSettings().oFeatures.bServerSide !== true) { 1621 addRangeDateFilterCapability(table_selector_jq_friendly, fromId, toId, column_number, date_format); 1622 } 1623 1624 resetIApiIndex(); 1625 } 1626 1627 function addDateFilter(filter_selector_string, table_selector_jq_friendly, column_number, filter_reset_button_text, filter_default_label, date_format) { 1628 var dateId = "yadcf-filter-" + table_selector_jq_friendly + "-" + column_number, 1629 filter_selector_string_tmp, 1630 filter_wrapper_id, 1631 oTable, 1632 columnObj, 1633 datepickerObj = {}, 1634 filterActionStr; 1635 1636 filter_wrapper_id = "yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number; 1637 1638 if ($("#" + filter_wrapper_id).length > 0) { 1639 return; 1640 } 1641 $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; 1642 oTable = oTables[table_selector_jq_friendly]; 1643 columnObj = getOptions(oTable.selector)[column_number]; 1644 1645 //add a wrapper to hold both filter and reset button 1646 $(filter_selector_string).append("<div onmousedown=\"yadcf.stopPropagation(event);
1646\" onclick=\"yadcf.stopPropagation(event);\" id=\"" + filter_wrapper_id + "\" class=\"yadcf-filter-wrapper\"></div>"); 1647 filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; 1648 filter_selector_string_tmp = filter_selector_string; 1649 1650 filterActionStr = 'onkeyup="yadcf.dateKeyUP(\'' + table_selector_jq_friendly + '\',\'' + date_format + '\',event);"'; 1651 if (columnObj.externally_triggered === true) { 1652 filterActionStr = ''; 1653 } 1654 1655 $(filter_selector_string).append("<input onkeydown=\"yadcf.preventDefaultForEnter(event);\" placeholder=\"" + filter_default_label + "\" id=\"" + dateId + "\" class=\"yadcf-filter-date\" " + filterActionStr + "></input>"); 1656 1657 if (filter_reset_button_text !== false) { 1658 $(filter_selector_string_tmp).append('<button type="button" id="' + dateId + '-reset" ' + 'onmousedown="yadcf.stopPropagation(event);" ' + 1659 'onclick="yadcf.stopPropagation(event);yadcf.dateSelectSingle(\'' + table_selector_jq_friendly + '\',yadcf.eventTargetFixUp(event).target, \'clear\'); return false;" class="yadcf-filter-reset-button ' + columnObj.reset_button_style_class + '">' + filter_reset_button_text + '</button>'); 1660 } 1661 1662 if (columnObj.datepicker_type === 'jquery-ui') { 1663 datepickerObj.dateFormat = date_format; 1664 } else if (columnObj.datepicker_type === 'bootstrap-datetimepicker') { 1665 datepickerObj.format = date_format; 1666 } 1667 1668 if (columnObj.externally_triggered !== true) { 1669 if (columnObj.datepicker_type === 'jquery-ui') { 1670 datepickerObj.onSelect = dateSelectSingle; 1671 } 1672 } 1673 1674 datepickerObj = $.extend({}, datepickerObj, columnObj.filter_plugin_options); 1675 1676 if (columnObj.datepicker_type === 'jquery-ui') { 1677 $("#" + dateId).datepicker(datepickerObj); 1678 } else if (columnObj.datepicker_type === 'bootstrap-datetimepicker') { 1679 datepickerObj.useCurrent = false; 1680 $("#" + dateId).datetimepicker(datepickerObj); 1681 if (columnObj.externally_triggered !== true) { 1682 if (datepickerObj.format.toLowerCase() !== 'hh:mm') { 1683 $("#" + dateId).on('dp.change', dateSelectSingle); 1684 } else { 1685 $("#" + dateId).on('dp.hide', dateSelectSingle); 1686 } 1687 } 1688 } else if (columnObj.datepicker_type === 'bootstrap-datepicker') { 1689 $("#" + dateId).datepicker({}); 1690 } 1691 1692 if (oTable.fnSettings().aoPreSearchCols[column_number].sSearch !== '') { 1693 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(oTable.fnSettings().aoPreSearchCols[column_number].sSearch).addClass("inuse"); 1694 } 1695 1696 resetIApiIndex(); 1697 } 1698 1699 function rangeNumberSldierDrawTips(min_tip_val, max_tip_val, min_tip_id, max_tip_id, table_selector_jq_friendly, column_number) { 1700 var first_handle = $(".yadcf-number-slider-filter-wrapper-inner.-" + table_selector_jq_friendly + "-" + column_number),// + " .ui-slider-handle:first"), 1701 last_handle = $(".yadcf-number-slider-filter-wrapper-inner.-" + table_selector_jq_friendly + "-" + column_number),// + " .ui-slider-handle:last"), 1702 min_tip_inner, 1703 max_tip_inner; 1704 1705 min_tip_inner = "<div id=\"" + min_tip_id + "\" class=\"yadcf-filter-range-number-slider-min-tip-inner\">" + min_tip_val + "</div>"; 1706 max_tip_inner = "<div id=\"" + max_tip_id + "\" class=\"yadcf-filter-range-number-slider-max-tip-inner\">" + max_tip_val + "</div>"; 1707 1708 if (first_handle.length === 1) { 1709 first_handle = $(".yadcf-number-slider-filter-wrapper-inner.-" + table_selector_jq_friendly + "-" + column_number + " .ui-slider-handle:first"); 1710 $(first_handle).addClass("yadcf-filter-range-number-slider-min-tip").html(min_tip_inner); 1711 1712 last_handle = $(".yadcf-number-slider-filter-wrapper-inner.-" + table_selector_jq_friendly + "-" + column_number + " .ui-slider-handle:last"); 1713 $(last_handle).addClass("yadcf-filter-range-number-slider-max-tip").html(max_tip_inner); 1714 } else { 1715 //migth happen when scrollX is used or when filter row is being duplicated by DT 1716 $($(first_handle)[0]).find('.ui-slider-handle:first').addClass("yadcf-filter-range-number-slider-min-tip").html(min_tip_inner); 1717 $($(last_handle)[0]).find('.ui-slider-handle:last').addClass("yadcf-filter-range-number-slider-max-tip").html(max_tip_inner); 1718 1719 $($(first_handle)[1]).find('.ui-slider-handle:first').addClass("yadcf-filter-range-number-slider-min-tip").html(min_tip_inner); 1720 $($(last_handle)[1]).find('.ui-slider-handle:last').addClass("yadcf-filter-range-number-slider-max-tip").html(max_tip_inner); 1721 } 1722 } 1723 1724 function rangeNumberSliderChange(table_selector_jq_friendly, event, ui) { 1725 event = eventTargetFixUp(event); 1726 var oTable, 1727 min_val, 1728 max_val, 1729 slider_inuse, 1730 yadcfState, 1731 column_number = $(event.target).attr('id').replace("yadcf-filter-", "").replace(table_selector_jq_friendly, "").replace("-slider-", ""), 1732 columnObj, 1733 keyUp; 1734 1735 oTable = oTables[table_selector_jq_friendly]; 1736 columnObj = getOptions(oTable.selector)[column_number]; 1737 1738 keyUp = function () { 1739 1740 $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; 1741 1742 if (oTable.fnSettings().oFeatures.bServerSide !== true) { 1743 oTable.fnDraw(); 1744 } else { 1745 oTable.fnFilter(ui.values[0] + '-yadcf_delim-' + ui.values[1], column_number); 1746 } 1747 min_val = +$($(event.target).parent().find(".yadcf-filter-range-number-slider-min-tip-hidden")).text(); 1748 max_val = +$($(event.target).parent().find(".yadcf-filter-range-number-slider-max-tip-hidden")).text(); 1749 1750 if (min_val !== ui.values[0]) { 1751 $($(event.target).find(".ui-slider-handle")[0]).addClass("inuse"); 1752 slider_inuse = true; 1753 } else { 1754 $($(event.target).find(".ui-slider-handle")[0]).removeClass("inuse"); 1755 } 1756 if (max_val !== ui.values[1]) { 1757 $($(event.target).find(".ui-slider-handle")[1]).addClass("inuse"); 1758 slider_inuse = true; 1759 } else { 1760 $($(event.target).find(".ui-slider-handle")[1]).removeClass("inuse"); 1761 } 1762 1763 if (slider_inuse === true) { 1764 $(event.target).find(".ui-slider-range").addClass("inuse"); 1765 } else { 1766 $(event.target).find(".ui-slider-range").removeClass("inuse"); 1767 } 1768 1769 if (!oTable.fnSettings().oLoadedState) { 1770 oTable.fnSettings().oLoadedState = {};
1771 oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); 1772 } 1773 if (oTable.fnSettings().oFeatures.bStateSave === true) { 1774 if (oTable.fnSettings().oLoadedState.yadcfState !== undefined && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] !== undefined) { 1775 oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number] = 1776 { 1777 'from' : ui.values[0], 1778 'to' : ui.values[1] 1779 }; 1780 } else { 1781 yadcfState = {}; 1782 yadcfState[table_selector_jq_friendly] = []; 1783 yadcfState[table_selector_jq_friendly][column_number] = { 1784 'from' : ui.values[0], 1785 'to' : ui.values[1] 1786 }; 1787 oTable.fnSettings().oLoadedState.yadcfState = yadcfState; 1788 } 1789 oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); 1790 } 1791 1792 resetIApiIndex(); 1793 }; 1794 1795 if (columnObj.filter_delay === undefined) { 1796 keyUp(); 1797 } else { 1798 yadcfDelay(function () { 1799 keyUp(); 1800 }, columnObj.filter_delay); 1801 } 1802 } 1803 1804 function addRangeNumberSliderFilter(filter_selector_string, table_selector_jq_friendly, column_number, filter_reset_button_text, min_val, max_val, ignore_char) { 1805 var sliderId = "yadcf-filter-" + table_selector_jq_friendly + "-slider-" + column_number, 1806 min_tip_id = "yadcf-filter-" + table_selector_jq_friendly + "-min_tip-" + column_number, 1807 max_tip_id = "yadcf-filter-" + table_selector_jq_friendly + "-max_tip-" + column_number, 1808 filter_selector_string_tmp, 1809 filter_wrapper_id, 1810 oTable, 1811 min_state_val = min_val, 1812 max_state_val = max_val, 1813 columnObj, 1814 slideFunc, 1815 changeFunc, 1816 sliderObj, 1817 sliderMaxMin = { 1818 min: min_val, 1819 max: max_val 1820 }, 1821 settingsDt, 1822 currSliderMin = $("#" + sliderId).slider("option", "min"), 1823 currSliderMax = $("#" + sliderId).slider("option", "max"), 1824 redrawTable; 1825 1826 filter_wrapper_id = "yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number; 1827 1828 if ($("#" + filter_wrapper_id).length > 0 && (currSliderMin === min_val && currSliderMax === max_val)) { 1829 return; 1830 } 1831 1832 $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; 1833 oTable = oTables[table_selector_jq_friendly]; 1834 settingsDt = settingsMap[generateTableSelectorJQFriendly2(oTable)]; 1835 1836 if ($("#" + filter_wrapper_id).length > 0) { 1837 $("#" + sliderId).slider("destroy"); 1838 $("#" + filter_wrapper_id).remove(); 1839 redrawTable = true; 1840 } 1841 1842 columnObj = getOptions(oTable.selector)[column_number]; 1843 1844 if (settingsDt.oFeatures.bStateSave === true && settingsDt.oLoadedState) { 1845 if (settingsDt.oLoadedState.yadcfState && settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly] && settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly][column_number]) { 1846 if (min_val !== settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from) { 1847 min_state_val = settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from; 1848 } 1849 if (max_val !== settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly][column_number].to) { 1850 max_state_val = settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly][column_number].to; 1851 } 1852 } 1853 } 1854 1855 if (isFinite(min_val) && isFinite(max_val) && isFinite(min_state_val) && isFinite(max_state_val)) { 1856 1857 //add a wrapper to hold both filter and reset button 1858 $(filter_selector_string).append("<div onmousedown=\"yadcf.stopPropagation(event);
1858\" onclick=\"yadcf.stopPropagation(event);\" id=\"" + filter_wrapper_id + "\" class=\"yadcf-filter-wrapper\"></div>"); 1859 filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; 1860 filter_selector_string_tmp = filter_selector_string; 1861 1862 $(filter_selector_string).append("<div id=\"yadcf-filter-wrapper-inner-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-number-slider-filter-wrapper-inner" + " -" + table_selector_jq_friendly + "-" + column_number + "\"></div>"); 1863 filter_selector_string = filter_selector_string + " div.yadcf-number-slider-filter-wrapper-inner"; 1864 1865 $(filter_selector_string).append("<div id=\"" + sliderId + "\" class=\"yadcf-filter-range-number-slider\"></div>"); 1866 filter_selector_string = filter_selector_string + " #" + sliderId; 1867 1868 $(filter_selector_string).append("<span class=\"yadcf-filter-range-number-slider-min-tip-hidden hide\">" + min_val + "</span>"); 1869 $(filter_selector_string).append("<span class=\"yadcf-filter-range-number-slider-max-tip-hidden hide\">" + max_val + "</span>"); 1870 1871 if (columnObj.externally_triggered !== true) { 1872 slideFunc = function (event, ui) { 1873 rangeNumberSldierDrawTips(ui.values[0], ui.values[1], min_tip_id, max_tip_id, table_selector_jq_friendly, column_number); 1874 rangeNumberSliderChange(table_selector_jq_friendly, event, ui); 1875 }; 1876 changeFunc = function (event, ui) { 1877 rangeNumberSldierDrawTips(ui.values[0], ui.values[1], min_tip_id, max_tip_id, table_selector_jq_friendly, column_number); 1878 if (event.originalEvent || $(event.target).slider("option", "yadcf-reset") === true) { 1879 $(event.target).slider("option", "yadcf-reset", false); 1880 rangeNumberSliderChange(table_selector_jq_friendly, event, ui); 1881 } 1882 }; 1883 } else { 1884 slideFunc = function (event, ui) { 1885 rangeNumberSldierDrawTips(ui.values[0], ui.values[1], min_tip_id, max_tip_id, table_selector_jq_friendly, column_number); 1886 }; 1887 changeFunc = function (event, ui) { 1888 rangeNumberSldierDrawTips(ui.values[0], ui.values[1], min_tip_id, max_tip_id, table_selector_jq_friendly, column_number); 1889 }; 1890 } 1891 sliderObj = { 1892 range: true, 1893 min: min_val, 1894 max: max_val, 1895 values: [min_state_val, max_state_val], 1896 create: function (event, ui) { 1897 rangeNumberSldierDrawTips(min_state_val, max_state_val, min_tip_id, max_tip_id, table_selector_jq_friendly, column_number); 1898 }, 1899 slide: slideFunc, 1900 change: changeFunc 1901 }; 1902 1903 if (columnObj.filter_plugin_options !== undefined) { 1904 $.extend(sliderObj, columnObj.filter_plugin_options); 1905 } 1906 1907 $("#" + sliderId).slider(sliderObj); 1908 1909 if (filter_reset_button_text !== false) { 1910 $(filter_selector_string_tmp).append("<button type=\"button\" onmousedown=\"yadcf.stopPropagation(event);\" " + 1911 "onclick=\"yadcf.stopPropagation(event);yadcf.rangeNumberSliderClear('" + table_selector_jq_friendly + "',event); return false;\" class=\"yadcf-filter-reset-button range-number-slider-reset-button " + columnObj.reset_button_style_class + "\">" + filter_reset_button_text + "</button>"); 1912 } 1913 } 1914 1915 $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; 1916 oTable = oTables[table_selector_jq_friendly]; 1917 if (settingsDt.oFeatures.bStateSave === true && settingsDt.oLoadedState) { 1918 if (settingsDt.oLoadedState.yadcfState && settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly] && settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly][column_number]) { 1919 if (isFinite(min_val) && min_val !== settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from) { 1920 $($(filter_selector_string).find(".ui-slider-handle")[0]).addClass("inuse"); 1921 } 1922 if (isFinite(max_val) && max_val !== settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly][column_number].to) { 1923 $($(filter_selector_string).find(".ui-slider-handle")[1]).addClass("inuse"); 1924 } 1925 if ((isFinite(min_val) && isFinite(max_val)) && (min_val !== settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from || max_val !== settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly][column_number].to)) { 1926 $($(filter_selector_string).find(".ui-slider-range")).addClass("inuse"); 1927 } 1928 } 1929 } 1930 resetIApiIndex(); 1931 1932 if (settingsDt.oFeatures.bServerSide !== true) { 1933 addRangeNumberAndSliderFilterCapability(table_selector_jq_friendly, min_tip_id, max_tip_id, column_number, ignore_char, sliderMaxMin); 1934 } 1935 if (redrawTable === true) { 1936 oTable.fnDraw(false); 1937 } 1938 } 1939 1940 function destroyThirdPartyPlugins(table_arg) { 1941 1942 var tableOptions, 1943 table_selector_jq_friendly, 1944 settingsDt, 1945 columnObjKey, 1946 column_number, 1947 optionsObj, 1948 fromId, 1949 toId; 1950 1951 //check if the table arg is from new datatables API (capital "D") 1952 if (table_arg.settings !== undefined) { 1953 table_arg = table_arg.settings()[0].oInstance; 1954 } 1955 tableOptions = getOptions(table_arg.selector); 1956 table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly2(table_arg); 1957 settingsDt = getSettingsObjFromTable(table_arg); 1958 1959 for (columnObjKey in tableOptions) { 1960 if (tableOptions.hasOwnProperty(columnObjKey)) { 1961 optionsObj = tableOptions[columnObjKey]; 1962 column_number = optionsObj.column_number; 1963 1964 switch (optionsObj.filter_type) { 1965 case 'multi_select': 1966 case 'multi_select_custom_func': 1967 case 'select': 1968 case 'custom_func': 1969 switch (optionsObj.select_type) { 1970 case 'chosen': 1971 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).chosen('destroy'); 1972 break; 1973 case 'select2': 1974 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).select2('destroy'); 1975 break; 1976 case 'custom_select': 1977 if (selectElementCustomDestroyFunc !== undefined) { 1978 selectElementCustomDestroyFunc($("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number)); 1979 } 1980 break; 1981 } 1982 break; 1983 case 'auto_complete': 1984 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).autocomplete("destroy"); 1985 break; 1986 case 'date': 1987 switch (optionsObj.select_type) { 1988 case 'jquery-ui': 1989 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).datepicker("destroy"); 1990 break; 1991 case 'bootstrap-datetimepicker': 1992 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).destroy(); 1993 break; 1994 } 1995 break; 1996 case 'range_date': 1997 fromId = "yadcf-filter-" + table_selector_jq_friendly + "-from-date-" + column_number; 1998 toId = "yadcf-filter-" + table_selector_jq_friendly + "-to-date-" + column_number; 1999 switch (optionsObj.select_type) { 2000 case 'jquery-ui': 2001 $("#" + fromId).datepicker("destroy"); 2002 $("#" + toId).datepicker("destroy"); 2003 break; 2004 case 'bootstrap-datetimepicker': 2005 $("#" + fromId).destroy(); 2006 $("#" + toId).destroy(); 2007 break; 2008 } 2009 break; 2010 case 'range_number_slider': 2011 $("#yadcf-filter-" + table_selector_jq_friendly + "-slider-" + column_number).slider("destroy"); 2012 break; 2013 } 2014 } 2015 } 2016 } 2017 2018 function removeFilters(oTable, args, table_selector) { 2019 var tableId = getTableId(oTable); 2020 $('#' + tableId + ' .yadcf-filter-wrapper').remove(); 2021 if (yadcfVersionCheck('1.10')) { 2022 $(document).off('draw.dt', oTable.selector); 2023 $(document).off('xhr.dt', oTable.selector); 2024 $(document).off('column-visibility.dt', oTable.selector); 2025 $(document).off('destroy.dt', oTable.selector); 2026 } else { 2027 $(document).off('draw', oTable.selector); 2028 $(document).off('destroy', oTable.selector); 2029 } 2030 destroyThirdPartyPlugins(oTable); 2031 } 2032 2033 /* alphanum.js (C) Brian Huisman 2034 Based on the Alphanum Algorithm by David Koelle 2035 The Alphanum Algorithm is discussed at http://www.DaveKoelle.com 2036 */ 2037 function sortAlphaNum(a, b) { 2038 function chunkify(t) { 2039 var tz = new Array(); 2040 var x = 0, y = -1, n = 0, i, j; 2041
2042 while (i = (j = t.charAt(x++)).charCodeAt(0)) { 2043 var m = (i == 46 || (i >=48 && i <= 57)); 2044 if (m !== n) { 2045 tz[++y] = ""; 2046 n = m; 2047 } 2048 tz[y] += j; 2049 } 2050 return tz; 2051 } 2052 2053 if (typeof a === 'object' && typeof a.label === 'string') { 2054 a = a.label; 2055 } 2056 if (typeof b === 'object' && typeof b.label === 'string') { 2057 b = b.label; 2058 } 2059 2060 var aa = chunkify(a.toLowerCase()); 2061 var bb = chunkify(b.toLowerCase()); 2062 2063 for (var x = 0; aa[x] && bb[x]; x++) { 2064 if (aa[x] !== bb[x]) { 2065 var c = Number(aa[x]), d = Number(bb[x]); 2066 if (c == aa[x] && d == bb[x]) { 2067 return c - d; 2068 } else return (aa[x] > bb[x]) ? 1 : -1; 2069 } 2070 } 2071 return aa.length - bb.length; 2072 } 2073 2074 function sortColumnData(column_data, columnObj) { 2075 var numArray = [], 2076 alphaArray = []; 2077 if (columnObj.filter_type === "select" || columnObj.filter_type === "auto_complete" || columnObj.filter_type === "multi_select" || columnObj.filter_type === 'multi_select_custom_func' || columnObj.filter_type === "custom_func") { 2078 if (columnObj.sort_as === "alpha") { 2079 if (columnObj.sort_order === "asc") { 2080 column_data.sort(); 2081 } else if (columnObj.sort_order === "desc") { 2082 column_data.sort(); 2083 column_data.reverse(); 2084 } 2085 } else if (columnObj.sort_as === "num") { 2086 if (columnObj.sort_order === "asc") { 2087 column_data.sort(sortNumAsc); 2088 } else if (columnObj.sort_order === "desc") { 2089 column_data.sort(sortNumDesc); 2090 } 2091 } else if (columnObj.sort_as === "alphaNum") { 2092 if (columnObj.sort_order === "asc") { 2093 column_data.sort(sortAlphaNum); 2094 } else if (columnObj.sort_order === "desc") { 2095 column_data.sort(sortAlphaNum); 2096 column_data.reverse(); 2097 } 2098 } else if (columnObj.sort_as === "custom") { 2099 column_data.sort(columnObj.sort_as_custom_func); 2100 } 2101 } 2102 return column_data; 2103 } 2104 function getFilteredRows(table) { 2105 var dataTmp, 2106 data = [], 2107 i; 2108 if (yadcfVersionCheck('1.10')) { 2109 dataTmp = table._('tr', {filter: 'applied' }); 2110 } else { 2111 dataTmp = table.rows({filter: 'applied'}).data().toArray(); 2112 } 2113 for (i = 0; i < dataTmp.length; i++) { 2114 data.push({ 2115 _aData: dataTmp[i] 2116 }); 2117 } 2118 return data; 2119 } 2120 2121 function parseTableColumn(pTable, columnObj, table_selector_jq_friendly, pSettings) { 2122 var col_inner_elements, 2123 col_inner_data, 2124 j, 2125 k, 2126 col_filter_array = {}, 2127 column_data = [], 2128 data, 2129 data_length, 2130 settingsDt, 2131 column_number_filter; 2132 2133 if (pSettings !== undefined) { 2134 settingsDt = pSettings; 2135 } else { 2136 settingsDt = getSettingsObjFromTable(pTable); 2137 } 2138 2139 if (columnObj.cumulative_filtering !== true) { 2140 data = settingsDt.aoData; 2141 data_length = data.length; 2142 } else { 2143 data = getFilteredRows(pTable); 2144 data_length = data.length; 2145 } 2146 if (columnObj.col_filter_array !== undefined) { 2147 col_filter_array = columnObj.col_filter_array; 2148 } 2149 column_number_filter = calcColumnNumberFilter(settingsDt, columnObj.column_number, table_selector_jq_friendly); 2150 if (isNaN(settingsDt.aoColumns[column_number_filter].mData) && typeof settingsDt.aoColumns[column_number_filter].mData !== 'object') { 2151 columnObj.column_number_data = settingsDt.aoColumns[column_number_filter].mData; 2152 } 2153 if (isNaN(settingsDt.aoColumns[column_number_filter].mRender) && typeof settingsDt.aoColumns[column_number_filter].mRender !== 'object') { 2154 columnObj.column_number_render = settingsDt.aoColumns[column_number_filter].mRender; 2155 } 2156 2157 for (j = 0; j < data_length; j++) { 2158 if (columnObj.column_data_type === "html") { 2159 if (columnObj.column_number_data === undefined) { 2160 col_inner_elements = $(data[j]._aData[column_number_filter]); 2161 } else { 2162 col_inner_elements = dot2obj(data[j]._aData, columnObj.column_number_data); 2163 col_inner_elements = $(col_inner_elements); 2164 } 2165 if (col_inner_elements.length > 0) { 2166 for (k = 0; k < col_inner_elements.length; k++) { 2167 switch (columnObj.html_data_type) { 2168 case "text": 2169 col_inner_data = $(col_inner_elements[k]).text(); 2170 break; 2171 case "value": 2172 col_inner_data = $(col_inner_elements[k]).val(); 2173 break; 2174 case "id": 2175 col_inner_data = col_inner_elements[k].id; 2176 break; 2177 case "selector": 2178 col_inner_data = $(col_inner_elements[k]).find(columnObj.html_data_selector).text(); 2179 break; 2180 } 2181 2182 if ($.trim(col_inner_data) !== '' && !(col_filter_array.hasOwnProperty(col_inner_data))) { 2183 col_filter_array[col_inner_data] = col_inner_data; 2184 column_data.push(col_inner_data); 2185 } 2186 } 2187 } else { 2188 col_inner_data = col_inner_elements.selector; 2189 if ($.trim(col_inner_data) !== '' && !(col_filter_array.hasOwnProperty(col_inner_data))) { 2190 col_filter_array[col_inner_data] = col_inner_data; 2191 column_data.push(col_inner_data); 2192 } 2193 } 2194 2195 } else if (columnObj.column_data_type === "text") { 2196 if (columnObj.text_data_delimiter !== undefined) { 2197 if (columnObj.column_number_data === undefined) { 2198 col_inner_elements = data[j]._aData[column_number_filter].split(columnObj.text_data_delimiter); 2199 } else { 2200 col_inner_elements = dot2obj(data[j]._aData, columnObj.column_number_data); 2201 col_inner_elements = (col_inner_elements + '').split(columnObj.text_data_delimiter); 2202 } 2203 for (k = 0; k < col_inner_elements.length; k++) { 2204 col_inner_data = col_inner_elements[k]; 2205 if ($.trim(col_inner_data) !== '' && !(col_filter_array.hasOwnProperty(col_inner_data))) { 2206 col_filter_array[col_inner_data] = col_inner_data; 2207 column_data.push(col_inner_data); 2208 } 2209 } 2210 } else { 2211 if (columnObj.column_number_data === undefined) { 2212 col_inner_data = data[j]._aData[column_number_filter]; 2213 if (typeof col_inner_data === 'object') { 2214 if (columnObj.html5_data !== undefined) { 2215 col_inner_data = col_inner_data['@' + columnObj.html5_data]; 2216 } else { 2217 console.log('Warning: Looks like you have forgot to define the html5_data attribute for the ' + columnObj.column_number + ' column'); 2218 return; 2219 } 2220 } 2221 } else if (data[j]._aFilterData !== undefined && data[j]._aFilterData !== null) { 2222 col_inner_data = data[j]._aFilterData[column_number_filter]; 2223 } else { 2224 col_inner_data = dot2obj(data[j]._aData, columnObj.column_number_data); 2225 } 2226 if ($.trim(col_inner_data) !== '' && !(col_filter_array.hasOwnProperty(col_inner_data))) { 2227 col_filter_array[col_inner_data] = col_inner_data; 2228 column_data.push(col_inner_data); 2229 } 2230 } 2231 } else if (columnObj.column_data_type === "rendered_html") { 2232 col_inner_elements = data[j]._aFilterData[column_number_filter]; 2233 if (typeof col_inner_elements !== 'string') { 2234 col_inner_elements = $(col_inner_elements); 2235 if (col_inner_elements.length > 0) { 2236 for (k = 0; k < col_inner_elements.length; k++) { 2237 switch (columnObj.html_data_type) { 2238 case "text": 2239 col_inner_data = $(col_inner_elements[k]).text(); 2240 break; 2241 case "value": 2242 col_inner_data = $(col_inner_elements[k]).val(); 2243 break; 2244 case "id": 2245 col_inner_data = col_inner_elements[k].id; 2246 break; 2247 case "selector": 2248 col_inner_data = $(col_inner_elements[k]).find(columnObj.html_data_selector).text(); 2249 break; 2250 } 2251 } 2252 } else { 2253 col_inner_data = col_inner_elements.selector; 2254 } 2255 } else { 2256 col_inner_data = col_inner_elements; 2257 } 2258 if ($.trim(col_inner_data) !== '' && !(col_filter_array.hasOwnProperty(col_inner_data))) { 2259 col_filter_array[col_inner_data] = col_inner_data; 2260 column_data.push(col_inner_data); 2261 } 2262 } 2263 } 2264 columnObj.col_filter_array = col_filter_array; 2265 return column_data; 2266 } 2267 2268 function appendFilters(oTable, args, table_selector, pSettings) { 2269 2270 var i = 0, 2271 $filter_selector, 2272 filter_selector_string, 2273 2274 data, 2275 filter_container_id, 2276 column_number_data, 2277 column_number, 2278 column_position, 2279 column_data_type, 2280 html_data_type, 2281 text_data_delimiter, 2282 filter_default_label, 2283 filter_reset_button_text, 2284 enable_auto_complete, 2285 sort_as, 2286 sort_order, 2287 date_format, 2288 ignore_char, 2289 filter_match_mode, 2290 2291 column_data, 2292 column_data_temp, 2293 options_tmp, 2294 j, 2295 k, 2296 data_length, 2297 col_inner_elements, 2298 col_inner_data, 2299 ii, 2300 table_selector_jq_friendly, 2301 min_val, 2302 max_val, 2303 col_num_visible, 2304 col_num_visible_iter, 2305 tmpStr, 2306 columnObjKey, 2307 columnObj, 2308 filters_position, 2309 unique_th, 2310 settingsDt, 2311 filterActionStr, 2312 custom_func_filter_value_holder, 2313 exclude_str, 2314 tableDT, 2315 columnFilterVal; 2316
2317 if (pSettings === undefined) { 2318 settingsDt = getSettingsObjFromTable(oTable); 2319 } else { 2320 settingsDt = pSettings; 2321 } 2322 settingsMap[generateTableSelectorJQFriendly2(oTable)] = settingsDt; 2323 2324 table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly2(oTable); 2325 tableDT = tablesDT[table_selector_jq_friendly]; 2326 2327 initColReorder2(settingsDt, table_selector_jq_friendly); 2328 2329 filters_position = $(document).data(table_selector + "_filters_position"); 2330 if (settingsDt.oScroll.sX !== '' || settingsDt.oScroll.sY !== '') { 2331 table_selector = '.yadcf-datatables-table-' + table_selector_jq_friendly; 2332 } 2333 if (settingsDt.oApi._fnGetUniqueThs !== undefined) { 2334 unique_th = settingsDt.oApi._fnGetUniqueThs(settingsDt); 2335 } 2336 for (columnObjKey in args) { 2337 if (args.hasOwnProperty(columnObjKey)) { 2338 columnObj = args[columnObjKey]; 2339 2340 options_tmp = ''; 2341 tmpStr = ''; 2342 data = columnObj.data; 2343 column_data = []; 2344 column_data_temp = []; 2345 filter_container_id = columnObj.filter_container_id; 2346 column_number = columnObj.column_number; 2347 column_number = +column_number; 2348 column_position = column_number; 2349 2350 if (plugins[table_selector_jq_friendly] !== undefined && (plugins[table_selector_jq_friendly] !== undefined && plugins[table_selector_jq_friendly].ColReorder !== undefined)) { 2351 column_position = plugins[table_selector_jq_friendly].ColReorder[column_number]; 2352 } 2353 2354 columnObj.column_number = column_number; 2355 column_number_data = undefined; 2356 if (isNaN(settingsDt.aoColumns[column_position].mData) && typeof settingsDt.aoColumns[column_position].mData !== 'object') { 2357 column_number_data = settingsDt.aoColumns[column_position].mData; 2358 columnObj.column_number_data = column_number_data; 2359 } 2360 if (isNaN(settingsDt.aoColumns[column_position].mRender) && typeof settingsDt.aoColumns[column_position].mRender !== 'object') { 2361 columnObj.column_number_render = settingsDt.aoColumns[column_position].mRender; 2362 } 2363 column_data_type = columnObj.column_data_type; 2364 html_data_type = columnObj.html_data_type; 2365 text_data_delimiter = columnObj.text_data_delimiter; 2366 filter_default_label = columnObj.filter_default_label; 2367 filter_reset_button_text = columnObj.filter_reset_button_text; 2368 enable_auto_complete = columnObj.enable_auto_complete; 2369 sort_as = columnObj.sort_as; 2370 sort_order = columnObj.sort_order; 2371 date_format = columnObj.date_format; 2372 if (columnObj.datepicker_type === 'jquery-ui') { 2373 date_format = date_format.replace("yyyy", "yy"); 2374 } 2375 if (columnObj.datepicker_type === 'bootstrap-datetimepicker' && columnObj.filter_plugin_options !== undefined && columnObj.filter_plugin_options.format !== undefined) { 2376 date_format = columnObj.filter_plugin_options.format; 2377 } 2378 columnObj.date_format = date_format; 2379 2380 if (columnObj.ignore_char !== undefined && !(columnObj.ignore_char instanceof RegExp)) { 2381 ignore_char = new RegExp(columnObj.ignore_char, "g"); 2382 columnObj.ignore_char = ignore_char; 2383 } 2384 filter_match_mode = columnObj.filter_match_mode; 2385 2386 if (column_number === undefined) { 2387 alert("You must specify column number"); 2388 return; 2389 } 2390 2391 if (enable_auto_complete === true) { 2392 columnObj.filter_type = "auto_complete"; 2393 } 2394 2395 if (filter_default_label === undefined) { 2396 if (columnObj.filter_type === "select" || columnObj.filter_type === 'custom_func') {
2397 filter_default_label = placeholderLang.select; 2398 } else if (columnObj.filter_type === "multi_select" || columnObj.filter_type === 'multi_select_custom_func') { 2399 filter_default_label = placeholderLang.select_multi; 2400 } else if (columnObj.filter_type === "auto_complete" || columnObj.filter_type === "text") { 2401 filter_default_label = placeholderLang.filter; 2402 } else if (columnObj.filter_type === "range_number" || columnObj.filter_type === "range_date") { 2403 filter_default_label = placeholderLang.range; 2404 } else if (columnObj.filter_type === "date") { 2405 filter_default_label = placeholderLang.date; 2406 } 2407 columnObj.filter_default_label = filter_default_label; 2408 } 2409 2410 if (filter_reset_button_text === undefined) { 2411 filter_reset_button_text = "x"; 2412 } 2413 2414 if (data !== undefined) { 2415 for (ii = 0; ii < data.length; ii++) { 2416 column_data.push(data[ii]); 2417 } 2418 } 2419 if (data === undefined || columnObj.append_data_to_table_data !== undefined) { 2420 columnObj.col_filter_array = undefined; 2421 column_data_temp = parseTableColumn(oTable, columnObj, table_selector_jq_friendly, settingsDt); 2422 if (columnObj.append_data_to_table_data !== 'before') { 2423 column_data = column_data.concat(column_data_temp); 2424 } else { 2425 column_data_temp = sortColumnData(column_data_temp, columnObj); 2426 column_data = column_data.concat(column_data_temp); 2427 } 2428 } 2429 2430 if (columnObj.append_data_to_table_data === undefined || columnObj.append_data_to_table_data === 'sorted') { 2431 column_data = sortColumnData(column_data, columnObj); 2432 } 2433 2434 if (columnObj.filter_type === "range_number_slider") { 2435 min_val = findMinInArray(column_data, columnObj); 2436 max_val = findMaxInArray(column_data, columnObj); 2437 } 2438 2439 if (filter_container_id === undefined && columnObj.filter_container_selector === undefined) { 2440 //Can't show filter inside a column for a hidden one (place it outside using filter_container_id) 2441 if (settingsDt.aoColumns[column_position].bVisible === false) { 2442 //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)'); 2443 continue; 2444 } 2445 2446 if (filters_position !== 'thead') { 2447 if (unique_th === undefined) { 2448 //handle hidden columns 2449 col_num_visible = column_position; 2450 for (col_num_visible_iter = 0; col_num_visible_iter < settingsDt.aoColumns.length && col_num_visible_iter < column_position; col_num_visible_iter++) { 2451 if (settingsDt.aoColumns[col_num_visible_iter].bVisible === false) { 2452 col_num_visible--; 2453 } 2454 } 2455 column_position = col_num_visible; 2456 filter_selector_string = table_selector + ' ' + filters_position + ' th:eq(' + column_position + ')'; 2457 } else { 2458 filter_selector_string = table_selector + ' ' + filters_position + ' th:eq(' + $(unique_th[column_position]).index() + ')'; 2459 } 2460 } else { 2461 if (columnObj.filters_tr_index === undefined) { 2462 filter_selector_string = table_selector + ' ' + filters_position + ' tr:eq(' + $(unique_th[column_position]).parent().index() + ') th:eq(' + $(unique_th[column_position]).index() + ')'; 2463 } else { 2464 filter_selector_string = table_selector + ' ' + filters_position + ' tr:eq(' + columnObj.filters_tr_index + ') th:eq(' + $(unique_th[column_position]).index() + ')'; 2465 } 2466 } 2467 $filter_selector = $(filter_selector_string).find(".yadcf-filter"); 2468 } else { 2469 if (filter_container_id !== undefined) { 2470 columnObj.filter_container_selector = "#" + filter_container_id; 2471 } 2472 if ($(columnObj.filter_container_selector).length === 0) { 2473 console.log("ERROR: Filter container could not be found, columnObj.filter_container_selector: " + columnObj.filter_container_selector); 2474 continue; 2475 } 2476 filter_selector_string = columnObj.filter_container_selector; 2477 $filter_selector = $(filter_selector_string).find(".yadcf-filter"); 2478 } 2479 2480 if (columnObj.filter_type === "select" || columnObj.filter_type === 'custom_func' || columnObj.filter_type === "multi_select" || columnObj.filter_type === 'multi_select_custom_func') { 2481 if (columnObj.data_as_is !== true) { 2482 if (columnObj.omit_default_label !== true) { 2483 if (columnObj.filter_type === "select" || columnObj.filter_type === 'custom_func') { 2484 options_tmp = "<option value=\"" + "-1" + "\">" + filter_default_label + "</option>"; 2485 2486 if (columnObj.select_type === 'select2' && columnObj.select_type_options.placeholder !== undefined && columnObj.select_type_options.allowClear === true) { 2487 options_tmp = "<option value=\"\"></option>"; 2488 } 2489 } else if (columnObj.filter_type === "multi_select" || columnObj.filter_type === 'multi_select_custom_func') { 2490 if (columnObj.select_type === undefined) { 2491 options_tmp = "<option data-placeholder=\"true\" value=\"" + "-1" + "\">" + filter_default_label + "</option>"; 2492 } else { 2493 options_tmp = ""; 2494 } 2495 } 2496 } 2497 2498 if (columnObj.append_data_to_table_data === undefined) { 2499 if (typeof column_data[0] === 'object') { 2500 for (ii = 0; ii < column_data.length; ii++) { 2501 options_tmp += "<option value=\"" + (column_data[ii].value + '').replace(/"/g, '"') + "\">" + column_data[ii].label + "</option>"; 2502 } 2503 } else { 2504 for (ii = 0; ii < column_data.length; ii++) { 2505 options_tmp += "<option value=\"" + (column_data[ii] + '').replace(/"/g, '"') + "\">" + column_data[ii] + "</option>"; 2506 } 2507 } 2508 } else { 2509 for (ii = 0; ii < column_data.length; ii++) { 2510 if (typeof column_data[ii] === 'object') { 2511 options_tmp += "<option value=\"" + (column_data[ii].value + '').replace(/"/g, '"') + "\">" + column_data[ii].label + "</option>"; 2512 } else { 2513 options_tmp += "<option value=\"" + (column_data[ii] + '').replace(/"/g, '"') + "\">" + column_data[ii] + "</option>"; 2514 } 2515 } 2516 } 2517 } else { 2518 options_tmp = columnObj.data; 2519 } 2520 column_data = options_tmp; 2521 } 2522 if ($filter_selector.length === 1) { 2523 if (columnObj.filter_type === "select" || columnObj.filter_type === "multi_select" || columnObj.filter_type === 'custom_func' || columnObj.filter_type === 'multi_select_custom_func') { 2524 if (columnObj.filter_type === 'custom_func' || columnObj.filter_type === 'multi_select_custom_func') { 2525 custom_func_filter_value_holder = $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(); 2526 } 2527 $filter_selector.empty(); 2528 $filter_selector.append(column_data);
2529 if (settingsDt.aoPreSearchCols[column_position].sSearch !== '') { 2530 tmpStr = settingsDt.aoPreSearchCols[column_position].sSearch; 2531 if (columnObj.filter_type === "select") { 2532 tmpStr = yadcfParseMatchFilter(tmpStr, getOptions(oTable.selector)[column_number].filter_match_mode); 2533 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr).addClass("inuse"); 2534 } else if (columnObj.filter_type === "multi_select") { 2535 tmpStr = yadcfParseMatchFilterMultiSelect(tmpStr, getOptions(oTable.selector)[column_number].filter_match_mode); 2536 tmpStr = tmpStr.replace(/\\/g, ""); 2537 tmpStr = tmpStr.split("|"); 2538 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr); 2539 } 2540 } 2541 if (columnObj.filter_type === 'custom_func' || columnObj.filter_type === 'multi_select_custom_func') { 2542 tmpStr = custom_func_filter_value_holder; 2543 if (tmpStr === '-1' || tmpStr === undefined) { 2544 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr); 2545 } else { 2546 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr).addClass("inuse"); 2547 } 2548 } 2549 2550 initializeSelectPlugin(columnObj.select_type, $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number), columnObj.select_type_options); 2551 if (columnObj.cumulative_filtering === true && columnObj.select_type === 'chosen') { 2552 refreshSelectPlugin(columnObj, $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number)); 2553 } 2554 } else if (columnObj.filter_type === "auto_complete") { 2555 $(document).data("yadcf-filter-" + table_selector_jq_friendly + "-" + column_number, column_data); 2556 } 2557 } else { 2558 if (filter_container_id === undefined && columnObj.filter_container_selector === undefined) { 2559 if ($(filter_selector_string + " div.DataTables_sort_wrapper").length > 0) { 2560 $(filter_selector_string + " div.DataTables_sort_wrapper").css("display", "inline-block"); 2561 } 2562 } else { 2563 if (filter_container_id !== undefined) { 2564 columnObj.filter_container_selector = "#" + filter_container_id; 2565 } 2566 if ($("#yadcf-filter-wrapper-" + columnObj.filter_container_selector).length === 0) { 2567 $(columnObj.filter_container_selector).append("<div id=\"yadcf-filter-wrapper-" + generateTableSelectorJQFriendlyNew(columnObj.filter_container_selector) + "\"></div>"); 2568 } 2569 filter_selector_string = "#yadcf-filter-wrapper-" + generateTableSelectorJQFriendlyNew(columnObj.filter_container_selector); 2570 } 2571 2572 if (columnObj.filter_type === "select" || columnObj.filter_type === 'custom_func') { 2573 2574 //add a wrapper to hold both filter and reset button 2575 $(filter_selector_string).append("<div id=\"yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter-wrapper\"></div>"); 2576 filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; 2577 2578 if (columnObj.filter_type === "select") { 2579 filterActionStr = 'onchange="yadcf.doFilter(this, \'' + table_selector_jq_friendly + '\', ' + column_number + ', \'' + filter_match_mode + '\');"'; 2580 if (columnObj.externally_triggered === true) { 2581 filterActionStr = ''; 2582 } 2583 $(filter_selector_string).append("<select id=\"yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter " + columnObj.style_class + "\" " + 2584 filterActionStr + " onkeydown=\"yadcf.preventDefaultForEnter(event);\" onmousedown=\"yadcf.stopPropagation(event);\" onclick='yadcf.stopPropagation(event);'>" + column_data + "</select>"); 2585 if (filter_reset_button_text !== false) { 2586 $(filter_selector_string).find(".yadcf-filter").after("<button type=\"button\" " + 2587 "id=\"yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "-reset\" onmousedown=\"yadcf.stopPropagation(event);
2587\" onclick=\"yadcf.stopPropagation(event);yadcf.doFilter('clear', '" + table_selector_jq_friendly + "', " + column_number + "); return false;\" class=\"yadcf-filter-reset-button " + columnObj.reset_button_style_class + "\">" + filter_reset_button_text + "</button>"); 2588 } 2589 } else { 2590 filterActionStr = 'onchange="yadcf.doFilterCustomDateFunc(this, \'' + table_selector_jq_friendly + '\', ' + column_number + ');"'; 2591 if (columnObj.externally_triggered === true) { 2592 filterActionStr = ''; 2593 } 2594 $(filter_selector_string).append("<select id=\"yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter " + columnObj.style_class + "\" " + 2595 filterActionStr + " onkeydown=\"yadcf.preventDefaultForEnter(event);\" onmousedown=\"yadcf.stopPropagation(event);\" onclick='yadcf.stopPropagation(event);'>" + column_data + "</select>"); 2596 if (filter_reset_button_text !== false) { 2597 $(filter_selector_string).find(".yadcf-filter").after("<button type=\"button\" onmousedown=\"yadcf.stopPropagation(event);\" " + 2598 "onclick=\"yadcf.stopPropagation(event);yadcf.doFilterCustomDateFunc('clear', '" + table_selector_jq_friendly + "', " + column_number + "); return false;\" class=\"yadcf-filter-reset-button " + columnObj.reset_button_style_class + "\">" + filter_reset_button_text + "</button>"); 2599 } 2600 2601 if (settingsDt.oFeatures.bStateSave === true && settingsDt.oLoadedState) { 2602 if (settingsDt.oLoadedState.yadcfState && settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly] && settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly][column_number]) { 2603 tmpStr = settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from; 2604 if (tmpStr === '-1' || tmpStr === undefined) { 2605 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr); 2606 } else { 2607 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr).addClass("inuse"); 2608 } 2609 } 2610 } 2611 if (settingsDt.oFeatures.bServerSide !== true) { 2612 addCustomFunctionFilterCapability(table_selector_jq_friendly, "yadcf-filter-" + table_selector_jq_friendly + "-" + column_number, column_number); 2613 } 2614 } 2615 2616 if (settingsDt.aoPreSearchCols[column_position].sSearch !== '') { 2617 tmpStr = settingsDt.aoPreSearchCols[column_position].sSearch; 2618 tmpStr = yadcfParseMatchFilter(tmpStr, getOptions(oTable.selector)[column_number].filter_match_mode); 2619 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr).addClass("inuse"); 2620 } 2621 2622 if (columnObj.select_type !== undefined) { 2623 initializeSelectPlugin(columnObj.select_type, $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number), columnObj.select_type_options); 2624 if (columnObj.cumulative_filtering === true && columnObj.select_type === 'chosen') { 2625 refreshSelectPlugin(columnObj, $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number)); 2626 } 2627 } 2628 2629 } else if (columnObj.filter_type === "multi_select" || columnObj.filter_type === 'multi_select_custom_func') { 2630 2631 //add a wrapper to hold both filter and reset button 2632 $(filter_selector_string).append("<div id=\"yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter-wrapper\"></div>"); 2633 filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; 2634 2635 if (columnObj.filter_type === "multi_select") { 2636 filterActionStr = 'onchange="yadcf.doFilterMultiSelect(this, \'' + table_selector_jq_friendly + '\', ' + column_number + ', \'' + filter_match_mode + '\');"'; 2637 if (columnObj.externally_triggered === true) { 2638 filterActionStr = ''; 2639 } 2640 $(filter_selector_string).append("<select multiple data-placeholder=\"" + filter_default_label + "\" id=\"yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter " + columnObj.style_class + "\" " + 2641 filterActionStr + " onkeydown=\"yadcf.preventDefaultForEnter(event);\" onmousedown=\"yadcf.stopPropagation(event);\" onclick='yadcf.stopPropagation(event);'>" + column_data + "</select>"); 2642 2643 if (filter_reset_button_text !== false) { 2644 $(filter_selector_string).find(".yadcf-filter").after("<button type=\"button\" onmousedown=\"yadcf.stopPropagation(event);\" " +
2645 "onclick=\"yadcf.stopPropagation(event);yadcf.doFilter('clear', '" + table_selector_jq_friendly + "', " + column_number + "); return false;\" class=\"yadcf-filter-reset-button " + columnObj.reset_button_style_class + "\">" + filter_reset_button_text + "</button>"); 2646 } 2647 2648 if (settingsDt.aoPreSearchCols[column_position].sSearch !== '') { 2649 tmpStr = settingsDt.aoPreSearchCols[column_position].sSearch; 2650 tmpStr = yadcfParseMatchFilterMultiSelect(tmpStr, getOptions(oTable.selector)[column_number].filter_match_mode); 2651 tmpStr = tmpStr.replace(/\\/g, ""); 2652 tmpStr = tmpStr.split("|"); 2653 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr); 2654 } 2655 } else { 2656 filterActionStr = 'onchange="yadcf.doFilterCustomDateFunc(this, \'' + table_selector_jq_friendly + '\', ' + column_number + ');"'; 2657 if (columnObj.externally_triggered === true) { 2658 filterActionStr = ''; 2659 } 2660 $(filter_selector_string).append("<select multiple data-placeholder=\"" + filter_default_label + "\" id=\"yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter " + columnObj.style_class + "\" " + 2661 filterActionStr + " onkeydown=\"yadcf.preventDefaultForEnter(event);\" onmousedown=\"yadcf.stopPropagation(event);\" onclick='yadcf.stopPropagation(event);'>" + column_data + "</select>"); 2662 2663 if (filter_reset_button_text !== false) { 2664 $(filter_selector_string).find(".yadcf-filter").after("<button type=\"button\" onmousedown=\"yadcf.stopPropagation(event);\" " + 2665 "onclick=\"yadcf.stopPropagation(event);yadcf.doFilterCustomDateFunc('clear', '" + table_selector_jq_friendly + "', " + column_number + "); return false;\" class=\"yadcf-filter-reset-button " + columnObj.reset_button_style_class + "\">" + filter_reset_button_text + "</button>"); 2666 } 2667 2668 if (settingsDt.oFeatures.bStateSave === true && settingsDt.oLoadedState) { 2669 if (settingsDt.oLoadedState.yadcfState && settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly] && settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly][column_number]) { 2670 tmpStr = settingsDt.oLoadedState.yadcfState[table_selector_jq_friendly][column_number].from; 2671 if (tmpStr === '-1' || tmpStr === undefined) { 2672 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr); 2673 } else { 2674 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr).addClass("inuse"); 2675 } 2676 } 2677 } 2678 if (settingsDt.oFeatures.bServerSide !== true) { 2679 addCustomFunctionFilterCapability(table_selector_jq_friendly, "yadcf-filter-" + table_selector_jq_friendly + "-" + column_number, column_number); 2680 } 2681 } 2682 2683 if (columnObj.filter_container_selector === undefined && columnObj.select_type_options.width === undefined) { 2684 columnObj.select_type_options = $.extend(columnObj.select_type_options, {width: $(filter_selector_string).closest("th").width() + "px"}); 2685 } 2686 if (columnObj.filter_container_selector !== undefined && columnObj.select_type_options.width === undefined) { 2687 columnObj.select_type_options = $.extend(columnObj.select_type_options, {width: $(filter_selector_string).closest(columnObj.filter_container_selector).width() + "px"}); 2688 } 2689 2690 if (columnObj.select_type !== undefined) { 2691 initializeSelectPlugin(columnObj.select_type, $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number), columnObj.select_type_options); 2692 if (columnObj.cumulative_filtering === true && columnObj.select_type === 'chosen') { 2693 refreshSelectPlugin(columnObj, $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number)); 2694 } 2695 } 2696 2697 } else if (columnObj.filter_type === "auto_complete") { 2698 2699 //add a wrapper to hold both filter and reset button 2700 $(filter_selector_string).append("<div id=\"yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter-wrapper\"></div>"); 2701 filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; 2702 2703 filterActionStr = 'onkeyup="yadcf.autocompleteKeyUP(\'' + table_selector_jq_friendly + '\',event);"'; 2704 if (columnObj.externally_triggered === true) { 2705 filterActionStr = ''; 2706 } 2707 $(filter_selector_string).append("<input onkeydown=\"yadcf.preventDefaultForEnter(event);\" id=\"yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter\" onmousedown=\"yadcf.stopPropagation(event);\" onclick='yadcf.stopPropagation(event);" + 2708 "' placeholder='" + filter_default_label + "'" + " filter_match_mode='" + filter_match_mode + "' " + filterActionStr + "></input>"); 2709 $(document).data("yadcf-filter-" + table_selector_jq_friendly + "-" + column_number,
2709column_data); 2710 2711 if (filter_reset_button_text !== false) { 2712 $(filter_selector_string).find(".yadcf-filter").after("<button type=\"button\" onmousedown=\"yadcf.stopPropagation(event);\" " + 2713 "onclick=\"yadcf.stopPropagation(event);yadcf.doFilterAutocomplete('clear', '" + table_selector_jq_friendly + "', " + column_number + "); return false;\" class=\"yadcf-filter-reset-button " + columnObj.reset_button_style_class + "\">" + filter_reset_button_text + "</button>"); 2714 } 2715 2716 } else if (columnObj.filter_type === "text") { 2717 2718 //add a wrapper to hold both filter and reset button 2719 $(filter_selector_string).append("<div id=\"yadcf-filter-wrapper-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter-wrapper\"></div>"); 2720 filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; 2721 2722 filterActionStr = 'onkeyup="yadcf.textKeyUP(event,\'' + table_selector_jq_friendly + '\', ' + column_number + ');"'; 2723 if (columnObj.externally_triggered === true) { 2724 filterActionStr = ''; 2725 } 2726 2727 exclude_str = ''; 2728 if (columnObj.exclude === true) { 2729 if (columnObj.externally_triggered !== true) { 2730 exclude_str = '<span class="yadcf-exclude-wrapper" onmousedown="yadcf.stopPropagation(event);" onclick="yadcf.stopPropagation(event);">' + 2731 '<div class="yadcf-label small">' + columnObj.exclude_label + '</div><input type="checkbox" title="' + columnObj.exclude_label + '" onclick="yadcf.stopPropagation(event);yadcf.textKeyUP(event,\'' + table_selector_jq_friendly + '\',' + column_number + ');"></span>'; 2732 } else { 2733 exclude_str = '<span class="yadcf-exclude-wrapper" onmousedown="yadcf.stopPropagation(event);" onclick="yadcf.stopPropagation(event);">' + 2734 '<div class="yadcf-label small">' + columnObj.exclude_label + '</div><input type="checkbox" title="' + columnObj.exclude_label + '" onclick="yadcf.stopPropagation(event);"></span>'; 2735 } 2736 } 2737 2738 $(filter_selector_string).append(exclude_str + "<input type=\"text\" onkeydown=\"yadcf.preventDefaultForEnter(event);\" id=\"yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "\" class=\"yadcf-filter " + columnObj.style_class + "\" onmousedown=\"yadcf.stopPropagation(event);\" onclick='yadcf.stopPropagation(event);" + 2739 "' placeholder='" + filter_default_label + "'" + " filter_match_mode='" + filter_match_mode + "' " + filterActionStr + "></input>"); 2740 2741 if (filter_reset_button_text !== false) { 2742 $(filter_selector_string).find(".yadcf-filter").after("<button type=\"button\" " + " id=\"yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "-reset\" onmousedown=\"yadcf.stopPropagation(event);\" " + 2743 "onclick=\"yadcf.stopPropagation(event);yadcf.textKeyUP(event,'" + table_selector_jq_friendly + "', '" + column_number + "', 'clear'); return false;\" class=\"yadcf-filter-reset-button " + columnObj.reset_button_style_class + "\">" + filter_reset_button_text + "</button>"); 2744 } 2745 2746 if (settingsDt.aoPreSearchCols[column_position].sSearch !== '') { 2747 tmpStr = settingsDt.aoPreSearchCols[column_position].sSearch; 2748 if (columnObj.exclude === true) { 2749 if (tmpStr.indexOf('^((?!') !== -1) { 2750 $('#yadcf-filter-wrapper-' + table_selector_jq_friendly + '-' + column_number).find(':checkbox').prop('checked', true); 2751 } 2752 tmpStr = tmpStr.substring(5, tmpStr.indexOf(').)')); 2753 } 2754 tmpStr = yadcfParseMatchFilter(tmpStr, getOptions(oTable.selector)[column_number].filter_match_mode); 2755 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr).addClass("inuse"); 2756 } 2757 2758 } else if (columnObj.filter_type === "date") { 2759 2760 addDateFilter(filter_selector_string, table_selector_jq_friendly, column_number, filter_reset_button_text, filter_default_label, date_format); 2761 2762 } else if (columnObj.filter_type === "range_number") { 2763 2764 addRangeNumberFilter(filter_selector_string, table_selector_jq_friendly, column_number, filter_reset_button_text, filter_default_label, ignore_char); 2765 2766 } else if (columnObj.filter_type === "range_number_slider") { 2767 2768 addRangeNumberSliderFilter(filter_selector_string, table_selector_jq_friendly, column_number, filter_reset_button_text, min_val, max_val, ignore_char); 2769 2770 } else if (columnObj.filter_type === "range_date") { 2771 2772 addRangeDateFilter(filter_selector_string, table_selector_jq_friendly, column_number, filter_reset_button_text, filter_default_label, date_format); 2773 2774 } 2775 } 2776 2777 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") { 2778 $(filter_selector_string).find(".yadcf-filter").val($(document).data("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val")); 2779 } 2780 if (columnObj.filter_type === "auto_complete") { 2781 columnObj.filter_plugin_options = { 2782 source: $(document).data("yadcf-filter-" + table_selector_jq_friendly + "-" + column_number), 2783 select: autocompleteSelect 2784 }; 2785 if (columnObj.externally_triggered === true) { 2786 delete columnObj.filter_plugin_options.select; 2787 } 2788 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).autocomplete(columnObj.filter_plugin_options);
2789 if (settingsDt.aoPreSearchCols[column_position].sSearch !== '') { 2790 tmpStr = settingsDt.aoPreSearchCols[column_position].sSearch; 2791 tmpStr = yadcfParseMatchFilter(tmpStr, getOptions(oTable.selector)[column_number].filter_match_mode); 2792 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(tmpStr).addClass("inuse"); 2793 } 2794 } 2795 } 2796 } 2797 if (exFilterColumnQueue.length > 0) { 2798 (exFilterColumnQueue.shift())(); 2799 } 2800 } 2801 2802 function rangeClear(table_selector_jq_friendly, event, column_number) { 2803 event = eventTargetFixUp(event); 2804 $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; 2805 var oTable = oTables[table_selector_jq_friendly], 2806 yadcfState, 2807 settingsDt, 2808 column_number_filter, 2809 currentFilterValues, 2810 columnObj, 2811 dateRange; 2812 2813 settingsDt = getSettingsObjFromTable(oTable); 2814 2815 column_number_filter = calcColumnNumberFilter(settingsDt, column_number, table_selector_jq_friendly); 2816 2817 currentFilterValues = exGetColumnFilterVal(oTable, column_number); 2818 if (currentFilterValues.from === '' && currentFilterValues.to === '') { 2819 return; 2820 } 2821 2822 columnObj = getOptions(oTable.selector)[column_number]; 2823 2824 $(event.target).parent().find(".yadcf-filter-range").val(""); 2825 dateRange = $(event.target).parent().find(".yadcf-filter-range-date"); 2826 if (dateRange.length > 1) { 2827 if (columnObj.datepicker_type === 'jquery-ui') { 2828 $(dateRange[0]).datepicker('option', 'maxDate', null); 2829 $(dateRange[1]).datepicker('option', 'minDate', null); 2830 } 2831 } 2832 if ($(event.target).parent().find(".yadcf-filter-range-number").length > 0) { 2833 $($(event.target).parent().find(".yadcf-filter-range")[0]).focus(); 2834 } 2835 2836 if (oTable.fnSettings().oFeatures.bServerSide !== true) { 2837 oTable.fnDraw(); 2838 } else { 2839 oTable.fnFilter('-yadcf_delim-', column_number_filter); 2840 } 2841 2842 if (!oTable.fnSettings().oLoadedState) { 2843 oTable.fnSettings().oLoadedState = {}; 2844 oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); 2845 } 2846 if (oTable.fnSettings().oFeatures.bStateSave === true) { 2847 if (oTable.fnSettings().oLoadedState.yadcfState !== undefined && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] !== undefined) { 2848 oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number] = 2849 { 2850 'from' : "", 2851 'to' : "" 2852 }; 2853 } else { 2854 yadcfState = {}; 2855 yadcfState[table_selector_jq_friendly] = []; 2856 yadcfState[table_selector_jq_friendly][column_number] = { 2857 'from' : "", 2858 'to' : "" 2859 }; 2860 oTable.fnSettings().oLoadedState.yadcfState = yadcfState; 2861 } 2862 oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); 2863 } 2864 resetIApiIndex(); 2865 2866 $(event.target).parent().find(".yadcf-filter-range").removeClass("inuse"); 2867 2868 return; 2869 } 2870 2871 function rangeNumberSliderClear(table_selector_jq_friendly, event) { 2872 event = eventTargetFixUp(event); 2873 $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; 2874 var oTable = oTables[table_selector_jq_friendly], 2875 min_val, 2876 max_val, 2877 currentFilterValues, 2878 column_number; 2879 2880 column_number = parseInt($(event.target).prev().find(".yadcf-filter-range-number-slider").attr("id").replace("yadcf-filter-" + table_selector_jq_friendly + "-slider-", ""), 10); 2881 2882 min_val = +$($(event.target).parent().find(".yadcf-filter-range-number-slider-min-tip-hidden")).text(); 2883 max_val = +$($(event.target).parent().find(".yadcf-filter-range-number-slider-max-tip-hidden")).text(); 2884 2885 currentFilterValues = exGetColumnFilterVal(oTable, column_number); 2886 if (+currentFilterValues.from === min_val && +currentFilterValues.to === max_val) { 2887 return; 2888 } 2889 2890 $(event.target).prev().find(".yadcf-filter-range-number-slider").slider("option", "yadcf-reset", true); 2891 $(event.target).prev().find(".yadcf-filter-range-number-slider").slider("option", "values", [min_val, max_val]); 2892 2893 $($(event.target).prev().find(".ui-slider-handle")[0]).attr("tabindex", -1).focus(); 2894 2895 $($(event.target).prev().find(".ui-slider-handle")[0]).removeClass("inuse"); 2896 $($(event.target).prev().find(".ui-slider-handle")[1]).removeClass("inuse"); 2897 $(event.target).prev().find(".ui-slider-range").removeClass("inuse"); 2898 2899 oTable.fnDraw(); 2900 resetIApiIndex(); 2901 2902 return; 2903 } 2904 2905 function dateKeyUP(table_selector_jq_friendly, date_format, event) { 2906 var oTable, 2907 date, 2908 dateId, 2909 column_number, 2910 columnObj; 2911 2912 event = eventTargetFixUp(event); 2913 2914 dateId = event.target.id; 2915 date = document.getElementById(dateId).value; 2916 2917 $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; 2918 oTable = oTables[table_selector_jq_friendly]; 2919 column_number = parseInt(dateId.replace("yadcf-filter-" + table_selector_jq_friendly + "-", ""), 10); 2920 columnObj = getOptions(oTable.selector)[column_number]; 2921 2922 try { 2923 if (columnObj.datepicker_type === 'jquery-ui') { 2924 if (date.length === (date_format.length + 2)) { 2925 date = (date !== "") ? $.datepicker.parseDate(date_format, date) : date; 2926 } 2927 } 2928 } catch (err1) {} 2929 2930 if (date instanceof Date || moment(date, columnObj.date_format).isValid()) { 2931 $("#" + dateId).addClass('inuse'); 2932 oTable.fnFilter(document.getElementById(dateId).value, column_number); 2933 resetIApiIndex(); 2934 } else if (date === "" || $.trim(event.target.value) === '') { 2935 $("#" + dateId).removeClass('inuse'); 2936 $('#' + event.target.id).removeClass('inuse'); 2937 oTable.fnFilter('', column_number); 2938 resetIApiIndex(); 2939 } 2940 } 2941 2942 function rangeDateKeyUP(table_selector_jq_friendly, date_format, event) { 2943 event = eventTargetFixUp(event); 2944 $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; 2945 var oTable = oTables[table_selector_jq_friendly], 2946 min, 2947 max, 2948 fromId, 2949 toId, 2950 column_number, 2951 columnObj, 2952 keyUp, 2953 settingsDt, 2954 column_number_filter; 2955 2956 column_number = parseInt($(event.target).attr("id").replace('-from-date-', '').replace('-to-date-', '').replace('yadcf-filter-' + table_selector_jq_friendly, ''), 10); 2957 columnObj = getOptions(oTable.selector)[column_number];
2958 settingsDt = getSettingsObjFromTable(oTable); 2959 column_number_filter = calcColumnNumberFilter(settingsDt, column_number, table_selector_jq_friendly); 2960 2961 keyUp = function () { 2962 if (event.target.id.indexOf("-from-") !== -1) { 2963 fromId = event.target.id; 2964 toId = event.target.id.replace("-from-", "-to-"); 2965 2966 min = document.getElementById(fromId).value; 2967 max = document.getElementById(toId).value; 2968 } else { 2969 toId = event.target.id; 2970 fromId = event.target.id.replace("-to-", "-from-"); 2971 2972 max = document.getElementById(toId).value; 2973 min = document.getElementById(fromId).value; 2974 } 2975 2976 //moment(min, "YYYY-MM-DD hh:mm:ss").toDate() typeof Date 2977 2978 if (columnObj.datepicker_type === 'jquery-ui') { 2979 try { 2980 if (min.length === (date_format.length + 2)) { 2981 min = (min !== "") ? $.datepicker.parseDate(date_format, min) : min; 2982 } 2983 } catch (err1) {} 2984 try { 2985 if (max.length === (date_format.length + 2)) { 2986 max = (max !== "") ? $.datepicker.parseDate(date_format, max) : max; 2987 } 2988 } catch (err2) {} 2989 } else if (columnObj.datepicker_type === 'bootstrap-datetimepicker') { 2990 try { 2991 min = moment(min, columnObj.moment_date_format).toDate(); 2992 if (isNaN(min.getTime())) { 2993 min = ''; 2994 } 2995 } catch (err3) {} 2996 try { 2997 max = moment(max, columnObj.moment_date_format).toDate(); 2998 if (isNaN(max.getTime())) { 2999 max = ''; 3000 } 3001 } catch (err4) {} 3002 } 3003 3004 if (((max instanceof Date) && (min instanceof Date) && (max >= min)) || min === "" || max === "") { 3005 3006 if (oTable.fnSettings().oFeatures.bServerSide !== true) { 3007 oTable.fnDraw(); 3008 } else { 3009 oTable.fnFilter(document.getElementById(fromId).value + '-yadcf_delim-' + document.getElementById(toId).value, column_number_filter); 3010 } 3011 3012 if (min instanceof Date) { 3013 $("#" + fromId).addClass("inuse"); 3014 } else { 3015 $("#" + fromId).removeClass("inuse"); 3016 } 3017 if (max instanceof Date) { 3018 $("#" + toId).addClass("inuse"); 3019 } else { 3020 $("#" + toId).removeClass("inuse"); 3021 } 3022 3023 if ($.trim(event.target.value) === "" && $(event.target).hasClass("inuse")) { 3024 $("#" + event.target.id).removeClass("inuse"); 3025 } 3026 3027 } 3028 resetIApiIndex(); 3029 }; 3030 3031 if (columnObj.filter_delay === undefined) { 3032 keyUp(table_selector_jq_friendly, event); 3033 } else { 3034 yadcfDelay(function () { 3035 keyUp(table_selector_jq_friendly, event); 3036 }, columnObj.filter_delay); 3037 } 3038 } 3039 3040 function rangeNumberKeyUP(table_selector_jq_friendly, event) { 3041 event = eventTargetFixUp(event); 3042 $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; 3043 var oTable = oTables[table_selector_jq_friendly], 3044 min, 3045 max, 3046 fromId, 3047 toId, 3048 yadcfState, 3049 column_number, 3050 options, 3051 keyUp; 3052 3053 column_number = parseInt($(event.target).attr("id").replace('-from-', '').replace('-to-', '').replace('yadcf-filter-' + table_selector_jq_friendly, ''), 10); 3054 options = getOptions(oTable.selector)[column_number]; 3055 3056 keyUp = function () { 3057 3058 if (event.target.id.indexOf("-from-") !== -1) { 3059 fromId = event.target.id; 3060 toId = event.target.id.replace("-from-", "-to-"); 3061 3062 min = document.getElementById(fromId).value; 3063 max = document.getElementById(toId).value; 3064 } else { 3065 toId = event.target.id; 3066 fromId = event.target.id.replace("-to-", "-from-"); 3067 3068 max = document.getElementById(toId).value; 3069 min = document.getElementById(fromId).value; 3070 } 3071 3072 min = (min !== "") ? (+min) : min; 3073 max = (max !== "") ? (+max) : max; 3074 3075 if ((!isNaN(max) && !isNaN(min) && (max >= min)) || min === "" || max === "") { 3076 3077 if (oTable.fnSettings().oFeatures.bServerSide !== true) { 3078 oTable.fnDraw(); 3079 } else { 3080 oTable.fnFilter(min + '-yadcf_delim-' + max, column_number); 3081 } 3082 if (document.getElementById(fromId).value !== "") { 3083 $("#" + fromId).addClass("inuse"); 3084 } 3085 if (document.getElementById(toId).value !== "") { 3086 $("#" + toId).addClass("inuse"); 3087 } 3088 3089 if ($.trim(event.target.value) === "" && $(event.target).hasClass("inuse")) { 3090 $("#" + event.target.id).removeClass("inuse"); 3091 } 3092 if (!oTable.fnSettings().oLoadedState) { 3093 oTable.fnSettings().oLoadedState = {};
3094 oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); 3095 } 3096 if (oTable.fnSettings().oFeatures.bStateSave === true) { 3097 if (oTable.fnSettings().oLoadedState.yadcfState !== undefined && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] !== undefined) { 3098 oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number] = 3099 { 3100 'from' : min, 3101 'to' : max 3102 }; 3103 } else { 3104 yadcfState = {}; 3105 yadcfState[table_selector_jq_friendly] = []; 3106 yadcfState[table_selector_jq_friendly][column_number] = { 3107 'from' : min, 3108 'to' : max 3109 }; 3110 oTable.fnSettings().oLoadedState.yadcfState = yadcfState; 3111 } 3112 oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); 3113 } 3114 } 3115 resetIApiIndex(); 3116 }; 3117 3118 if (options.filter_delay === undefined) { 3119 keyUp(); 3120 } else { 3121 yadcfDelay(function () { 3122 keyUp(); 3123 }, options.filter_delay); 3124 } 3125 } 3126 3127 function doFilterMultiTablesMultiSelect(tablesSelectors, event, column_number_str, clear) { 3128 3129 var columnsObj = getOptions(tablesSelectors + '_' + column_number_str)[column_number_str], 3130 regex = false, 3131 smart = true, 3132 caseInsen = true, 3133 tablesAsOne, 3134 tablesArray = oTables[tablesSelectors], 3135 selected_values = $(event.target).val(), 3136 i; 3137 3138 event = eventTargetFixUp(event); 3139 tablesAsOne = new $.fn.dataTable.Api(tablesArray); 3140 3141 if (clear !== undefined || selected_values == undefined || selected_values.length === 0) { 3142 if (clear !== undefined) { 3143 $(event.target).parent().find('select').val('-1').focus(); 3144 $(event.target).parent().find('selectn ').removeClass("inuse"); 3145 } 3146 if (columnsObj.column_number instanceof Array) { 3147 tablesAsOne.columns(columnsObj.column_number).search('').draw(); 3148 } else { 3149 tablesAsOne.search('').draw(); 3150 } 3151 3152 refreshSelectPlugin(columnsObj, $('#' + columnsObj.filter_container_id + ' select'), '-1'); 3153 return; 3154 } 3155 3156 $(event.target).addClass("inuse"); 3157 3158 regex = true; 3159 smart = false; 3160 caseInsen = columnsObj.case_insensitive; 3161 3162 if (selected_values !== null) { 3163 for (i = selected_values.length - 1; i >= 0; i--) { 3164 if (selected_values[i] === "-1") { 3165 selected_values.splice(i, 1); 3166 break; 3167 } 3168 } 3169 if (selected_values.length !== 0) { 3170 selected_values = selected_values.join('narutouzomaki'); 3171 selected_values = selected_values.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); 3172 selected_values = selected_values.split('narutouzomaki').join('|'); 3173 } 3174 } 3175 if (columnsObj.filter_match_mode === "exact") { 3176 selected_values = "^" + selected_values + "$"; 3177 } else if (columnsObj.filter_match_mode === "startsWith") { 3178 selected_values = "^" + selected_values; 3179 } 3180 if (columnsObj.column_number instanceof Array) { 3181 tablesAsOne.columns(columnsObj.column_number).search(selected_values, regex, smart, caseInsen).draw(); 3182 } else { 3183 tablesAsOne.search(selected_values, regex, smart, caseInsen).draw(); 3184 } 3185 } 3186 3187 function doFilterMultiTables(tablesSelectors, event, column_number_str, clear) { 3188 3189 var columnsObj = getOptions(tablesSelectors + '_' + column_number_str)[column_number_str], 3190 regex = false, 3191 smart = true, 3192 caseInsen = true, 3193 serachVal, 3194 tablesAsOne, 3195 tablesArray = oTables[tablesSelectors]; 3196 3197 event = eventTargetFixUp(event); 3198 tablesAsOne = new $.fn.dataTable.Api(tablesArray);
3199 3200 if (clear !== undefined || event.target.value === '-1') { 3201 if (clear !== undefined) { 3202 $(event.target).parent().find('select').val('-1').focus(); 3203 $(event.target).parent().find('select').removeClass("inuse"); 3204 } 3205 if (columnsObj.column_number instanceof Array) { 3206 tablesAsOne.columns(columnsObj.column_number).search('').draw(); 3207 } else { 3208 tablesAsOne.search('').draw(); 3209 } 3210 3211 refreshSelectPlugin(columnsObj, $('#' + columnsObj.filter_container_id + ' select'), '-1'); 3212 3213 return; 3214 } 3215 3216 $(event.target).addClass("inuse"); 3217 3218 serachVal = event.target.value; 3219 smart = false; 3220 caseInsen = columnsObj.case_insensitive; 3221 /* 3222 if (columnsObj.filter_match_mode === "contains") { 3223 regex = false; 3224 } else if (columnsObj.filter_match_mode === "exact") { 3225 regex = true; 3226 serachVal = "^" + serachVal + "$"; 3227 } else if (columnsObj.filter_match_mode === "startsWith") { 3228 regex = true; 3229 serachVal = "^" + serachVal; 3230 }*/ 3231 if (columnsObj.column_number instanceof Array) { 3232 tablesAsOne.columns(columnsObj.column_number).search(serachVal, regex, smart, caseInsen).draw(); 3233 } else { 3234 tablesAsOne.search(serachVal, regex, smart, caseInsen).draw(); 3235 } 3236 } 3237 3238 function textKeyUpMultiTables(tablesSelectors, event, column_number_str, clear) { 3239 3240 var keyUp, 3241 columnsObj = getOptions(tablesSelectors + '_' + column_number_str)[column_number_str], 3242 regex = false, 3243 smart = true, 3244 caseInsen = true, 3245 serachVal, 3246 tablesAsOne, 3247 tablesArray = oTables[tablesSelectors]; 3248 3249 event = eventTargetFixUp(event); 3250 tablesAsOne = new $.fn.dataTable.Api(tablesArray); 3251 3252 keyUp = function (tablesAsOne, event, clear) { 3253 3254 if (clear !== undefined || event.target.value === '') { 3255 if (clear !== undefined) { 3256 $(event.target).prev().val("").focus(); 3257 $(event.target).prev().removeClass("inuse"); 3258 } else { 3259 $(event.target).val("").focus(); 3260 $(event.target).removeClass("inuse"); 3261 } 3262 if (columnsObj.column_number instanceof Array) { 3263 tablesAsOne.columns(columnsObj.column_number).search('').draw(); 3264 } else { 3265 tablesAsOne.search('').draw(); 3266 } 3267 return; 3268 } 3269 3270 $(event.target).addClass("inuse"); 3271 3272 serachVal = event.target.value; 3273 smart = false; 3274 caseInsen = columnsObj.case_insensitive; 3275 /* 3276 if (columnsObj.filter_match_mode === "contains") { 3277 regex = false; 3278 } else if (columnsObj.filter_match_mode === "exact") { 3279 regex = true; 3280 serachVal = "^" + serachVal + "$"; 3281 } else if (columnsObj.filter_match_mode === "startsWith") { 3282 regex = true; 3283 serachVal = "^" + serachVal; 3284 } 3285 */ 3286 if (columnsObj.column_number instanceof Array) { 3287 tablesAsOne.columns(columnsObj.column_number).search(serachVal, regex, smart, caseInsen).draw(); 3288 } else { 3289 tablesAsOne.search(serachVal, regex, smart, caseInsen).draw(); 3290 } 3291 3292 }; 3293 3294 if (columnsObj.filter_delay === undefined) { 3295 keyUp(tablesAsOne, event, clear); 3296 } else { 3297 yadcfDelay(function () { 3298 keyUp(tablesAsOne, event, clear); 3299 }, columnsObj.filter_delay); 3300 } 3301 } 3302 3303 function textKeyUP(ev, table_selector_jq_friendly, column_number,
3303clear) { 3304 var column_number_filter, 3305 oTable = oTables[table_selector_jq_friendly], 3306 keyUp, 3307 columnObj, 3308 settingsDt = getSettingsObjFromTable(oTable), 3309 exclude, 3310 keyCodes = [37, 38, 39, 40]; 3311 3312 if (keyCodes.indexOf(ev.keyCode) !== -1) { 3313 return; 3314 } 3315 column_number_filter = calcColumnNumberFilter(settingsDt, column_number, table_selector_jq_friendly); 3316 3317 columnObj = getOptions(oTable.selector)[column_number]; 3318 3319 keyUp = function (table_selector_jq_friendly, column_number, clear) { 3320 $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; 3321 3322 if (clear === 'clear' || $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).val() === '') { 3323 if (clear === 'clear' && exGetColumnFilterVal(oTable, column_number) === '') { 3324 return; 3325 } 3326 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).val("").focus(); 3327 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).removeClass("inuse"); 3328 oTable.fnFilter("", column_number_filter); 3329 resetIApiIndex(); 3330 return; 3331 } 3332 3333 if (columnObj.exclude === true) { 3334 exclude = $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).closest('.yadcf-filter-wrapper').find('.yadcf-exclude-wrapper :checkbox').prop('checked'); 3335 } 3336 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).addClass("inuse"); 3337 3338 yadcfMatchFilter(oTable, $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).val(), columnObj.filter_match_mode, column_number_filter, exclude); 3339 3340 resetIApiIndex(); 3341 }; 3342 3343 if (columnObj.filter_delay === undefined) { 3344 keyUp(table_selector_jq_friendly, column_number, clear); 3345 } else { 3346 yadcfDelay(function () { 3347 keyUp(table_selector_jq_friendly, column_number, clear); 3348 }, columnObj.filter_delay); 3349 } 3350 } 3351 3352 function autocompleteKeyUP(table_selector_jq_friendly, event) { 3353 var oTable, 3354 column_number, 3355 keyCodes = [37, 38, 39, 40]; 3356 3357 event = eventTargetFixUp(event); 3358 3359 if (keyCodes.indexOf(event.keyCode) !== -1) { 3360 return; 3361 } 3362 3363 if (event.target.value === "" && event.keyCode === 8 && $(event.target).hasClass("inuse")) { 3364 $.fn.dataTableExt.iApiIndex = oTablesIndex[table_selector_jq_friendly]; 3365 oTable = oTables[table_selector_jq_friendly]; 3366 column_number = parseInt($(event.target).attr("id").replace("yadcf-filter-" + table_selector_jq_friendly + "-", ""), 10); 3367 3368 $("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number).removeClass("inuse"); 3369 $(document).removeData("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val"); 3370 oTable.fnFilter("", column_number); 3371 resetIApiIndex(); 3372 } 3373 } 3374 3375 function isDOMSource(tableVar) { 3376 var settingsDt; 3377 settingsDt = getSettingsObjFromTable(tableVar); 3378 if (settingsDt.sAjaxSource == undefined && settingsDt.ajax == undefined && settingsDt.oFeatures.bServerSide !== true) { 3379 return true; 3380 } 3381 return false; 3382 } 3383 3384 function scrollXYHandler(oTable, table_selector) { 3385 var $tmpSelector, 3386 filters_position = $(document).data(table_selector + "_filters_position"), 3387 table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly2(oTable); 3388 3389 if (filters_position === 'thead') { 3390 filters_position = '.dataTables_scrollHead'; 3391 } else { 3392 filters_position = '.dataTables_scrollFoot'; 3393 } 3394 if (oTable.fnSettings().oScroll.sX !== '' || oTable.fnSettings().oScroll.sY !== '') { 3395 $tmpSelector = $(table_selector).closest('.dataTables_scroll').find(filters_position + ' table'); 3396 $tmpSelector.addClass('yadcf-datatables-table-' + table_selector_jq_friendly); 3397 } 3398 } 3399 3400 function firstFromObject(obj) { 3401 var key; 3402 for (key in obj) { 3403 if (obj.hasOwnProperty(key)) { 3404 return key; 3405 } 3406 } 3407 } 3408 3409 function initAndBindTable(oTable, table_selector, index, pTableDT) { 3410 3411 var table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly2(oTable), 3412 table_selector_tmp; 3413 oTables[table_selector_jq_friendly] = oTable; 3414 tablesDT[table_selector_jq_friendly] = pTableDT; 3415 oTablesIndex[table_selector_jq_friendly] = index; 3416 3417 scrollXYHandler(oTable, table_selector); 3418 3419 if (isDOMSource(oTable)) { 3420 table_selector_tmp = table_selector; 3421 if (table_selector.indexOf(":eq") !== -1) { 3422 table_selector_tmp = table_selector.substring(0, table_selector.lastIndexOf(":eq")); 3423 } 3424 appendFilters(oTable, getOptions(table_selector_tmp), table_selector); 3425 if (getOptions(table_selector_tmp)[firstFromObject(getOptions(table_selector_tmp))].cumulative_filtering === true) { 3426 //when filters should be populated only from visible rows (non filtered) 3427 $(document).off('search.dt', oTable.selector).on('search.dt', oTable.selector, function (e, settings, json) { 3428 var table_selector_tmp = oTable.selector; 3429 if (table_selector.indexOf(":eq") !== -1) { 3430 table_selector_tmp = table_selector.substring(0, table_selector.lastIndexOf(":eq")); 3431 } 3432 appendFilters(oTable, getOptions(table_selector_tmp), oTable.selector, settings); 3433 }); 3434 } 3435 } else { 3436 appendFilters(oTable, getOptions(table_selector), table_selector); 3437 if (yadcfVersionCheck('1.10')) { 3438 $(document).off('xhr.dt', oTable.selector).on('xhr.dt', oTable.selector, function (e, settings, json) { 3439 var col_num, 3440 column_number_filter, 3441 table_selector_jq_friendly = generateTableSelectorJQFriendly2(oTable); 3442 if (json == undefined) { 3443 console.log('datatables xhr.dt event came back with null as data (nothing for yadcf to do with it).'); 3444 return; 3445 } 3446 if (settings.oSavedState !== null) { 3447 initColReorder2(settings, table_selector_jq_friendly); 3448 } 3449 for (col_num in yadcf.getOptions(settings.oInstance.selector)) { 3450 if (yadcf.getOptions(settings.oInstance.selector).hasOwnProperty(col_num)) { 3451 if (json['yadcf_data_' + col_num] !== undefined) { 3452 column_number_filter = col_num; 3453 if (settings.oSavedState !== null && plugins[table_selector_jq_friendly] !== undefined) { 3454 column_number_filter = plugins[table_selector_jq_friendly].ColReorder[col_num]; 3455 } 3456 yadcf.getOptions(settings.oInstance.selector)[col_num].data = json['yadcf_data_' + column_number_filter]; 3457 } 3458 } 3459 } 3460 }); 3461 } 3462 } 3463 //events that affects both DOM and Ajax 3464 if (yadcfVersionCheck('1.10')) { 3465 $(document).off('draw.dt', oTable.selector).on('draw.dt', oTable.selector, function (event, settings) { 3466 appendFilters(oTable, yadcf.getOptions(settings.oInstance.selector), settings.oInstance.selector, settings); 3467 }); 3468 $(document).off('column-visibility.dt', oTable.selector).on('column-visibility.dt', oTable.selector, function (e, settings, col_num, state) { 3469 var obj = {}, 3470 columnsObj = getOptions(settings.oInstance.selector); 3471 if (state === true && settings._oFixedColumns === undefined) { 3472 if ((plugins[table_selector_jq_friendly] !== undefined && plugins[table_selector_jq_friendly].ColReorder !== undefined)) { 3473 col_num = plugins[table_selector_jq_friendly].ColReorder[col_num]; 3474 } else if (settings.oSavedState != undefined && settings.oSavedState.ColReorder !== undefined) { 3475 col_num = settings.oSavedState.ColReorder[col_num]; 3476 } 3477 obj[col_num] = yadcf.getOptions(settings.oInstance.selector)[col_num]; 3478 if (obj[col_num] !== undefined) { 3479 obj[col_num].column_number = col_num; 3480 if (obj[col_num] !== undefined) { 3481 appendFilters(oTables[yadcf.generateTableSelectorJQFriendly2(settings)], 3482 obj, 3483 settings.oInstance.selector, settings); 3484 } 3485 } 3486 } else if (settings._oFixedColumns !== undefined) { 3487 appendFilters(oTables[yadcf.generateTableSelectorJQFriendly2(settings)], 3488 columnsObj, 3489 settings.oInstance.selector, settings); 3490 } 3491 }); 3492 $(document).off('column-reorder.dt', oTable.selector).on('column-reorder.dt', oTable.selector, function (e, settings, json) { 3493 var table_selector_jq_friendly = generateTableSelectorJQFriendly2(oTable); 3494 initColReorderFromEvent(table_selector_jq_friendly); 3495 }); 3496 $(document).off('destroy.dt', oTable.selector).on('destroy.dt', oTable.selector, function (event, ui) { 3497 removeFilters(oTable, yadcf.getOptions(ui.oInstance.selector), ui.oInstance.selector); 3498 }); 3499 } else { 3500 $(document).off('draw', oTable.selector).on('draw', oTable.selector, function (event, settings) { 3501 appendFilters(oTable, yadcf.getOptions(settings.oInstance.selector), settings.oInstance.selector, settings); 3502 }); 3503 $(document).off('destroy', oTable.selector).on('destroy', oTable.selector, function (event, ui) { 3504 removeFilters(oTable, yadcf.getOptions(ui.oInstance.selector), ui.oInstance.selector); 3505 }); 3506 } 3507 if (oTable.fnSettings().oFeatures.bStateSave === true) { 3508 if (yadcfVersionCheck('1.10')) { 3509 $(oTable.selector).off('stateSaveParams.dt').on('stateSaveParams.dt', function (e, settings, data) { 3510 if (settings.oLoadedState && settings.oLoadedState.yadcfState !== undefined) { 3511 data.yadcfState = settings.oLoadedState.yadcfState; 3512 } else { 3513 data.naruto = 'kurama'; 3514 } 3515 }); 3516 } else { 3517 $(oTable.selector).off('stateSaveParams').on('stateSaveParams', function (e, settings, data) { 3518 if (settings.oLoadedState && settings.oLoadedState.yadcfState !== undefined) { 3519 data.yadcfState = settings.oLoadedState.yadcfState; 3520 } else { 3521 data.naruto = 'kurama'; 3522 } 3523 }); 3524 } 3525 //when using DOM source 3526 if (isDOMSource(oTable)) { 3527 //we need to make sure that the yadcf state will be saved after page reload
3528 oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); 3529 //redraw the table in order to apply the filters 3530 oTable.fnDraw(false); 3531 } 3532 } 3533 } 3534 3535 $.fn.yadcf = function (options_arg, params) { 3536 3537 var tmpParams, 3538 i = 0, 3539 selector, 3540 tableSelector = '#' + this.fnSettings().sTableId; 3541 3542 //in case that instance.selector will be undefined (jQuery 3) 3543 if (this.selector === undefined) { 3544 this.selector = tableSelector; 3545 } 3546 3547 if (params === undefined) { 3548 params = {}; 3549 } 3550 3551 if (typeof params === 'string') { 3552 tmpParams = params; 3553 params = {}; 3554 params.filters_position = tmpParams; 3555 } 3556 if (params.filters_position === undefined || params.filters_position === 'header') { 3557 params.filters_position = 'thead'; 3558 } else { 3559 params.filters_position = 'tfoot'; 3560 } 3561 if (params.language !== undefined) {
3562 for (tmpParams in placeholderLang) { 3563 if (placeholderLang.hasOwnProperty(tmpParams)) { 3564 if (params.language[tmpParams] !== undefined) { 3565 placeholderLang[tmpParams] = params.language[tmpParams]; 3566 } 3567 } 3568 } 3569 } 3570 $(document).data(this.selector + "_filters_position", params.filters_position); 3571 3572 if ($(this.selector).length === 1) { 3573 setOptions(this.selector, options_arg, params); 3574 initAndBindTable(this, this.selector, 0); 3575 } else { 3576 for (i; i < $(this.selector).length; i++) { 3577 $.fn.dataTableExt.iApiIndex = i; 3578 selector = this.selector + ":eq(" + i + ")"; 3579 setOptions(this.selector, options_arg, params); 3580 initAndBindTable(this, selector, i); 3581 } 3582 $.fn.dataTableExt.iApiIndex = 0; 3583 } 3584 return this; 3585 }; 3586 3587 function init(oTable, options_arg, params) { 3588 var instance = oTable.settings()[0].oInstance, 3589 i = 0, 3590 selector, 3591 tmpParams, 3592 tableSelector = '#' + oTable.table().node().id; 3593 3594 //in case that instance.selector will be undefined (jQuery 3) 3595 if (instance.selector === undefined) { 3596 instance.selector = tableSelector; 3597 } 3598 3599 if (params === undefined) { 3600 params = {}; 3601 } 3602 3603 if (typeof params === 'string') { 3604 tmpParams = params; 3605 params = {}; 3606 params.filters_position = tmpParams; 3607 } 3608 if (params.filters_position === undefined || params.filters_position === 'header') { 3609 params.filters_position = 'thead'; 3610 } else { 3611 params.filters_position = 'tfoot'; 3612 } 3613 if (params.language !== undefined) {
3614 for (tmpParams in placeholderLang) { 3615 if (placeholderLang.hasOwnProperty(tmpParams)) { 3616 if (params.language[tmpParams] !== undefined) { 3617 placeholderLang[tmpParams] = params.language[tmpParams]; 3618 } 3619 } 3620 } 3621 } 3622 $(document).data(instance.selector + "_filters_position", params.filters_position); 3623 3624 if ($(instance.selector).length === 1) { 3625 setOptions(instance.selector, options_arg, params); 3626 initAndBindTable(instance, instance.selector, 0, oTable); 3627 } else { 3628 for (i; i < $(instance.selector).length; i++) { 3629 $.fn.dataTableExt.iApiIndex = i; 3630 selector = instance.selector + ":eq(" + i + ")"; 3631 setOptions(instance.selector, options_arg, params); 3632 initAndBindTable(instance, selector, i, oTable); 3633 } 3634 $.fn.dataTableExt.iApiIndex = 0; 3635 } 3636 } 3637 3638 function appendFiltersMultipleTables(tablesArray, tablesSelectors, colObjDummy) { 3639 var filter_selector_string = "#" + colObjDummy.filter_container_id, 3640 $filter_selector = $(filter_selector_string).find(".yadcf-filter"), 3641 table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendlyNew(tablesSelectors), 3642 options_tmp, 3643 ii, 3644 column_number_str = columnsArrayToString(colObjDummy.column_number).column_number_str, 3645 tableTmp, 3646 tableTmpArr, 3647 tableTmpArrIndex, 3648 filterOptions = getOptions(tablesSelectors + '_' + column_number_str)[column_number_str], 3649 column_number_index, 3650 columnsTmpArr, 3651 settingsDt, 3652 tmpStr, 3653 columnForStateSaving; 3654 3655 //add a wrapper to hold both filter and reset button 3656 $(filter_selector_string).append("<div id=\"yadcf-filter-wrapper-" + table_selector_jq_friendly + '-' + column_number_str + "\" class=\"yadcf-filter-wrapper\"></div>"); 3657 filter_selector_string = filter_selector_string + " div.yadcf-filter-wrapper"; 3658 if (column_number_str.indexOf('_') !== -1) { 3659 columnForStateSaving = column_number_str.split('_')[0]; 3660 } else { 3661 columnForStateSaving = column_number_str; 3662 } 3663 3664 switch (filterOptions.filter_type) { 3665 case 'text': 3666 $(filter_selector_string).append("<input type=\"text\" id=\"yadcf-filter-" + table_selector_jq_friendly + '-' + column_number_str + "\" class=\"yadcf-filter\" onmousedown=\"yadcf.stopPropagation(event);\" onclick='yadcf.stopPropagation(event);" + 3667 "' placeholder='" + filterOptions.filter_default_label + "'" + " onkeyup=\"yadcf.textKeyUpMultiTables('" + tablesSelectors + "',event,'" + column_number_str + "');\"></input>"); 3668 if (filterOptions.filter_reset_button_text !== false) { 3669 $(filter_selector_string).find(".yadcf-filter").after("<button type=\"button\" " + " id=\"yadcf-filter-" + table_selector_jq_friendly + '-' + column_number_str + "-reset\" onmousedown=\"yadcf.stopPropagation(event);\" " + 3670 "onclick=\"yadcf.stopPropagation(event);yadcf.textKeyUpMultiTables('" + tablesSelectors + "', event,'" + column_number_str + "','clear'); return false;\" class=\"yadcf-filter-reset-button " + filterOptions.reset_button_style_class + "\">" + filterOptions.filter_reset_button_text + "</button>"); 3671 } 3672 if (tablesArray[0].table !== undefined) { 3673 tableTmp = $('#' + tablesArray[0].table().node().id).dataTable(); 3674 } else { 3675 tableTmp = tablesArray[0]; 3676 } 3677 settingsDt = getSettingsObjFromTable(tableTmp);
3678 if (settingsDt.aoPreSearchCols[columnForStateSaving].sSearch !== '') { 3679 tmpStr = settingsDt.aoPreSearchCols[columnForStateSaving].sSearch; 3680 tmpStr = yadcfParseMatchFilter(tmpStr, filterOptions.filter_match_mode); 3681 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number_str).val(tmpStr).addClass("inuse"); 3682 } 3683 break; 3684 case 'select': 3685 case 'multi_select': 3686 if (filterOptions.select_type === undefined) { 3687 options_tmp = "<option data-placeholder=\"true\" value=\"" + "-1" + "\">" + filterOptions.filter_default_label + "</option>"; 3688 } else { 3689 options_tmp = ""; 3690 } 3691 if (filterOptions.select_type === 'select2' && filterOptions.select_type_options.placeholder !== undefined && filterOptions.select_type_options.allowClear === true) { 3692 options_tmp = "<option value=\"\"></option>"; 3693 } 3694 if (filterOptions.data === undefined) { 3695 filterOptions.data = []; 3696 tableTmpArr = tablesSelectors.split(','); 3697 for (tableTmpArrIndex = 0; tableTmpArrIndex < tableTmpArr.length; tableTmpArrIndex++) { 3698 if (tablesArray[tableTmpArrIndex].table !== undefined) { 3699 tableTmp = $('#' + tablesArray[tableTmpArrIndex].table().node().id).dataTable(); 3700 } else { 3701 tableTmp = tablesArray[tableTmpArrIndex]; 3702 } 3703 if (isDOMSource(tableTmp)) { 3704 //check if ajax source, if so, listen for dt.draw 3705 columnsTmpArr = filterOptions.column_number; 3706 for (column_number_index = 0; column_number_index < columnsTmpArr.length; column_number_index++) { 3707 filterOptions.column_number = columnsTmpArr[column_number_index]; 3708 filterOptions.data = filterOptions.data.concat(parseTableColumn(tableTmp, filterOptions, table_selector_jq_friendly)); 3709 } 3710 filterOptions.column_number = columnsTmpArr; 3711 } else { 3712 $(document).off('draw.dt', '#' + tablesArray[tableTmpArrIndex].table().node().id).on('draw.dt', '#' + tablesArray[tableTmpArrIndex].table().node().id, function (event, ui) { 3713 var options_tmp = '', 3714 ii; 3715 columnsTmpArr = filterOptions.column_number; 3716 for (column_number_index = 0; column_number_index < columnsTmpArr.length; column_number_index++) { 3717 filterOptions.column_number = columnsTmpArr[column_number_index]; 3718 filterOptions.data = filterOptions.data.concat(parseTableColumn(tableTmp, filterOptions, table_selector_jq_friendly, ui)); 3719 } 3720 filterOptions.column_number = columnsTmpArr; 3721 filterOptions.data = sortColumnData(filterOptions.data, filterOptions); 3722 for (ii = 0; ii < filterOptions.data.length; ii++) { 3723 options_tmp += "<option value=\"" + filterOptions.data[ii] + "\">" + filterOptions.data[ii] + "</option>"; 3724 } 3725 $('#' + filterOptions.filter_container_id + ' select').empty().append(options_tmp); 3726 3727 if (filterOptions.select_type !== undefined) { 3728 initializeSelectPlugin(filterOptions.select_type, $('#' + filterOptions.filter_container_id + ' select'), filterOptions.select_type_options); 3729 if (filterOptions.cumulative_filtering === true && filterOptions.select_type === 'chosen') { 3730 refreshSelectPlugin(filterOptions, $('#' + filterOptions.filter_container_id + ' select')); 3731 } 3732 } 3733 }); 3734 } 3735 } 3736 } 3737 3738 filterOptions.data = sortColumnData(filterOptions.data, filterOptions); 3739 3740 if (tablesArray[0].table !== undefined) { 3741 tableTmp = $('#' + tablesArray[0].table().node().id).dataTable(); 3742 } else { 3743 tableTmp = tablesArray[0]; 3744 } 3745 settingsDt = getSettingsObjFromTable(tableTmp); 3746 3747 if (typeof filterOptions.data[0] === 'object') { 3748 for (ii = 0; ii < filterOptions.data.length; ii++) { 3749 options_tmp += "<option value=\"" + filterOptions.data[ii].value + "\">" + filterOptions.data[ii].label + "</option>"; 3750 } 3751 } else { 3752 for (ii = 0; ii < filterOptions.data.length; ii++) { 3753 options_tmp += "<option value=\"" + filterOptions.data[ii] + "\">" + filterOptions.data[ii] + "</option>"; 3754 } 3755 } 3756 if (filterOptions.filter_type === 'select') { 3757 $(filter_selector_string).append("<select id=\"yadcf-filter-" + table_selector_jq_friendly + '-' + column_number_str + "\" class=\"yadcf-filter\" " + 3758 "onchange=\"yadcf.doFilterMultiTables('" + tablesSelectors + "',event,'" + column_number_str + "')\" onmousedown=\"yadcf.stopPropagation(event);\" onclick='yadcf.stopPropagation(event);'>" + options_tmp + "</select>");
3759 if (settingsDt.aoPreSearchCols[columnForStateSaving].sSearch !== '') { 3760 tmpStr = settingsDt.aoPreSearchCols[columnForStateSaving].sSearch; 3761 tmpStr = yadcfParseMatchFilter(tmpStr, filterOptions.filter_match_mode); 3762 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number_str).val(tmpStr).addClass("inuse"); 3763 } 3764 } else if (filterOptions.filter_type === 'multi_select') { 3765 $(filter_selector_string).append("<select multiple data-placeholder=\"" + filterOptions.filter_default_label + "\" id=\"yadcf-filter-" + table_selector_jq_friendly + '-' + column_number_str + "\" class=\"yadcf-filter\" " + 3766 "onchange=\"yadcf.doFilterMultiTablesMultiSelect('" + tablesSelectors + "',event,'" + column_number_str + "')\" onmousedown=\"yadcf.stopPropagation(event);\" onclick='yadcf.stopPropagation(event);'>" + options_tmp + "</select>"); 3767 if (settingsDt.aoPreSearchCols[columnForStateSaving].sSearch !== '') { 3768 tmpStr = settingsDt.aoPreSearchCols[columnForStateSaving].sSearch; 3769 tmpStr = yadcfParseMatchFilterMultiSelect(tmpStr, filterOptions.filter_match_mode); 3770 tmpStr = tmpStr.replace(/\\/g, ""); 3771 tmpStr = tmpStr.split("|"); 3772 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number_str).val(tmpStr); 3773 } 3774 } 3775 if (filterOptions.filter_type === 'select') { 3776 if (filterOptions.filter_reset_button_text !== false) { 3777 $(filter_selector_string).find(".yadcf-filter").after("<button type=\"button\" " + " id=\"yadcf-filter-" + table_selector_jq_friendly + '-' + column_number_str + "-reset\" onmousedown=\"yadcf.stopPropagation(event);\" " + 3778 "onclick=\"yadcf.stopPropagation(event);yadcf.doFilterMultiTables('" + tablesSelectors + "', event,'" + column_number_str + "','clear'); return false;\" class=\"yadcf-filter-reset-button " + filterOptions.reset_button_style_class + "\">" + filterOptions.filter_reset_button_text + "</button>"); 3779 } 3780 } else if (filterOptions.filter_type === 'multi_select') { 3781 if (filterOptions.filter_reset_button_text !== false) { 3782 $(filter_selector_string).find(".yadcf-filter").after("<button type=\"button\" " + " id=\"yadcf-filter-" + table_selector_jq_friendly + '-' + column_number_str + "-reset\" onmousedown=\"yadcf.stopPropagation(event);\" " + 3783 "onclick=\"yadcf.stopPropagation(event);yadcf.doFilterMultiTablesMultiSelect('" + tablesSelectors + "', event,'" + column_number_str + "','clear'); return false;\" class=\"yadcf-filter-reset-button " + filterOptions.reset_button_style_class + "\">" + filterOptions.filter_reset_button_text + "</button>"); 3784 } 3785 } 3786 3787 if (filterOptions.select_type !== undefined) { 3788 initializeSelectPlugin(filterOptions.select_type, $("#yadcf-filter-" + table_selector_jq_friendly + '-' + column_number_str), filterOptions.select_type_options); 3789 if (filterOptions.cumulative_filtering === true && filterOptions.select_type === 'chosen') { 3790 refreshSelectPlugin(filterOptions, $("#yadcf-filter-" + table_selector_jq_friendly + '-' + column_number_str)); 3791 } 3792 } 3793 break; 3794 default: 3795 alert('Filters Multiple Tables does not support ' + filterOptions.filter_type); 3796 } 3797 } 3798 3799 function initMultipleTables(tablesArray, filtersOptions) { 3800 var i, 3801 tablesSelectors = '', 3802 default_options = { 3803 filter_type : "text", 3804 filter_container_id: '', 3805 filter_reset_button_text: 'x', 3806 case_insensitive: true 3807 }, 3808 columnsObjKey, 3809 columnsObj, 3810 columnsArrIndex, 3811 column_number_str, 3812 dummyArr; 3813 3814 for (columnsArrIndex = 0; columnsArrIndex < filtersOptions.length; columnsArrIndex++) { 3815 dummyArr = []; 3816 columnsObj = filtersOptions[columnsArrIndex]; 3817 if (columnsObj.filter_default_label === undefined) { 3818 if (columnsObj.filter_type === "select" || columnsObj.filter_type === 'custom_func') { 3819 columnsObj.filter_default_label = "Select value"; 3820 } else if (columnsObj.filter_type === "multi_select" || columnsObj.filter_type === 'multi_select_custom_func') { 3821 columnsObj.filter_default_label = "Select values"; 3822 } else if (columnsObj.filter_type === "auto_complete" || columnsObj.filter_type === "text") { 3823 columnsObj.filter_default_label = 'Type to filter'; 3824 } else if (columnsObj.filter_type === "range_number" || columnsObj.filter_type === "range_date") { 3825 columnsObj.filter_default_label = ["from", "to"]; 3826 } else if (columnsObj.filter_type === "date") { 3827 columnsObj.filter_default_label = "Select a date"; 3828 } 3829 } 3830 columnsObj = $.extend({}, default_options, columnsObj); 3831 3832 column_number_str = columnsArrayToString(columnsObj.column_number).column_number_str; 3833 columnsObj.column_number_str = column_number_str; 3834 3835 dummyArr.push(columnsObj); 3836 tablesSelectors = ''; 3837 for (i = 0; i < tablesArray.length; i++) { 3838 if (tablesArray[i].table !== undefined) { 3839 tablesSelectors += tablesArray[i].table().node().id + ','; 3840 } else { 3841 tablesSelectors += getSettingsObjFromTable(tablesArray[i]).sTableId; 3842 } 3843 } 3844 tablesSelectors = tablesSelectors.substring(0, tablesSelectors.length - 1); 3845 3846 setOptions(tablesSelectors + '_' + column_number_str, dummyArr); 3847 oTables[tablesSelectors] = tablesArray; 3848 appendFiltersMultipleTables(tablesArray, tablesSelectors, columnsObj); 3849 } 3850 } 3851 3852 function initMultipleColumns(table, filtersOptions) { 3853 var tablesArray = []; 3854 tablesArray.push(table); 3855 initMultipleTables(tablesArray, filtersOptions); 3856 } 3857 3858 function stopPropagation(evt) { 3859 if (evt.stopPropagation !== undefined) { 3860 evt.stopPropagation(); 3861 } else { 3862 evt.cancelBubble = true; 3863 } 3864 } 3865 3866 function preventDefaultForEnter(evt) { 3867 if (evt.keyCode === 13) { 3868 if (evt.preventDefault) { 3869 evt.preventDefault(); 3870 } else { 3871 evt.returnValue = false; 3872 } 3873 } 3874 } 3875 3876 //-------------------------------------------------------- 3877 function exInternalFilterColumnAJAXQueue(table_arg, col_filter_arr) { 3878 return function () { 3879 exFilterColumn(table_arg, col_filter_arr, true); 3880 }; 3881 } 3882 3883 function exFilterColumn(table_arg, col_filter_arr, ajaxSource) { 3884 var table_selector_jq_friendly, 3885 j, 3886 tmpStr, 3887 column_number, 3888 column_position, 3889 filter_value, 3890 fromId, 3891 toId, 3892 sliderId, 3893 optionsObj, 3894 min, 3895 max, 3896 exclude = false; 3897 //check if the table arg is from new datatables API (capital "D") 3898 if (table_arg.settings !== undefined) { 3899 table_arg = table_arg.settings()[0].oInstance; 3900 } 3901 table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly2(table_arg); 3902 if (isDOMSource(table_arg) || ajaxSource === true) { 3903 for (j = 0; j < col_filter_arr.length; j++) { 3904 column_number = col_filter_arr[j][0]; 3905 column_position = column_number; 3906 exclude = false; 3907 if (plugins[table_selector_jq_friendly] !== undefined && (plugins[table_selector_jq_friendly] !== undefined && plugins[table_selector_jq_friendly].ColReorder !== undefined)) { 3908 column_position = plugins[table_selector_jq_friendly].ColReorder[column_number]; 3909 } 3910 optionsObj = getOptions(table_arg.selector)[column_number]; 3911 filter_value = col_filter_arr[j][1]; 3912 3913 switch (optionsObj.filter_type) { 3914 case 'auto_complete': 3915 case 'text': 3916 case 'date': 3917 if (filter_value !== undefined && filter_value.indexOf('_exclude_') !== -1) { 3918 exclude = true; 3919 filter_value = filter_value.replace('_exclude_', ''); 3920 } 3921 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(filter_value); 3922 if (filter_value !== '') { 3923 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).addClass('inuse'); 3924 } else { 3925 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).removeClass('inuse'); 3926 } 3927 tmpStr = yadcfMatchFilterString(table_arg, column_position, filter_value, optionsObj.filter_match_mode, false, exclude); 3928 table_arg.fnSettings().aoPreSearchCols[
3928column_position].sSearch = tmpStr; 3929 break; 3930 case 'select': 3931 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(filter_value); 3932 if (filter_value !== '') { 3933 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).addClass('inuse'); 3934 } else { 3935 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).removeClass('inuse'); 3936 } 3937 tmpStr = yadcfMatchFilterString(table_arg, column_position, filter_value, optionsObj.filter_match_mode, false); 3938 table_arg.fnSettings().aoPreSearchCols[column_position].sSearch = tmpStr; 3939 if (optionsObj.select_type !== undefined) { 3940 refreshSelectPlugin(optionsObj, $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number), '-1'); 3941 } 3942 break; 3943 case 'multi_select': 3944 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(filter_value); 3945 tmpStr = yadcfMatchFilterString(table_arg, column_position, filter_value, optionsObj.filter_match_mode, true); 3946 table_arg.fnSettings().aoPreSearchCols[column_position].sSearch = tmpStr; 3947 if (optionsObj.select_type !== undefined) { 3948 refreshSelectPlugin(optionsObj, $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number), '-1'); 3949 } 3950 break; 3951 case 'range_date': 3952 fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-from-date-' + column_number; 3953 toId = 'yadcf-filter-' + table_selector_jq_friendly + '-to-date-' + column_number; 3954 $('#' + fromId).val(filter_value.from); 3955 if (filter_value.from !== '') { 3956 $('#' + fromId).addClass('inuse'); 3957 } else { 3958 $('#' + fromId).removeClass('inuse'); 3959 } 3960 $('#' + toId).val(filter_value.to); 3961 if (filter_value.to !== '') { 3962 $('#' + toId).addClass('inuse'); 3963 } else { 3964 $('#' + toId).removeClass('inuse'); 3965 } 3966 if (table_arg.fnSettings().oFeatures.bServerSide === true) { 3967 min = filter_value.from; 3968 max = filter_value.to; 3969 table_arg.fnSettings().aoPreSearchCols[column_position].sSearch = min + '-yadcf_delim-' + max; 3970 } 3971 saveStateSave(table_arg, column_number, table_selector_jq_friendly, filter_value.from, filter_value.to); 3972 break; 3973 case 'range_number': 3974 fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-from-' + column_number; 3975 toId = 'yadcf-filter-' + table_selector_jq_friendly + '-to-' + column_number; 3976 $('#' + fromId).val(filter_value.from); 3977 if (filter_value.from !== '') { 3978 $('#' + fromId).addClass('inuse'); 3979 } else { 3980 $('#' + fromId).removeClass('inuse'); 3981 } 3982 $('#' + toId).val(filter_value.to); 3983 if (filter_value.to !== '') { 3984 $('#' + toId).addClass('inuse'); 3985 } else { 3986 $('#' + toId).removeClass('inuse'); 3987 } 3988 if (table_arg.fnSettings().oFeatures.bServerSide === true) { 3989 table_arg.fnSettings().aoPreSearchCols[
3989column_position].sSearch = filter_value.from + '-yadcf_delim-' + filter_value.to; 3990 } 3991 saveStateSave(table_arg, column_number, table_selector_jq_friendly, filter_value.from, filter_value.to); 3992 break; 3993 case 'range_number_slider': 3994 sliderId = 'yadcf-filter-' + table_selector_jq_friendly + '-slider-' + column_number; 3995 fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-min_tip-' + column_number; 3996 toId = 'yadcf-filter-' + table_selector_jq_friendly + '-max_tip-' + column_number; 3997 if (filter_value.from !== '') { 3998 min = $('#' + fromId).closest('.yadcf-filter-range-number-slider').find(".yadcf-filter-range-number-slider-min-tip-hidden").text(); 3999 max = $('#' + fromId).closest('.yadcf-filter-range-number-slider').find(".yadcf-filter-range-number-slider-max-tip-hidden").text(); 4000 $('#' + fromId).text(filter_value.from); 4001 if (min !== filter_value.from) { 4002 $('#' + fromId).parent().addClass('inuse'); 4003 $('#' + fromId).parent().parent().find('ui-slider-range').addClass('inuse'); 4004 } else { 4005 $('#' + fromId).parent().removeClass('inuse'); 4006 $('#' + fromId).parent().parent().find('ui-slider-range').removeClass('inuse'); 4007 } 4008 $('#' + sliderId).slider('values', 0, filter_value.from); 4009 } 4010 if (filter_value.to !== '') { 4011 $('#' + toId).text(filter_value.to); 4012 if (max !== filter_value.to) { 4013 $('#' + toId).parent().addClass('inuse'); 4014 $('#' + toId).parent().parent().find('.ui-slider-range').addClass('inuse'); 4015 } else { 4016 $('#' + toId).parent().removeClass('inuse'); 4017 $('#' + toId).parent().parent().find('.ui-slider-range').removeClass('inuse'); 4018 } 4019 $('#' + sliderId).slider('values', 1, filter_value.to); 4020 } 4021 if (table_arg.fnSettings().oFeatures.bServerSide === true) { 4022 table_arg.fnSettings().aoPreSearchCols[column_position].sSearch = filter_value.from + '-yadcf_delim-' + filter_value.to; 4023 } 4024 saveStateSave(table_arg, column_number, table_selector_jq_friendly, filter_value.from, filter_value.to); 4025 break; 4026 case 'custom_func': 4027 case 'multi_select_custom_func': 4028 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).val(filter_value); 4029 if (filter_value !== '') { 4030 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).addClass('inuse'); 4031 } else { 4032 $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number).removeClass('inuse'); 4033 } 4034 if (table_arg.fnSettings().oFeatures.bServerSide === true) { 4035 table_arg.fnSettings().aoPreSearchCols[column_position].sSearch = filter_value; 4036 } 4037 if (optionsObj.select_type !== undefined) { 4038 refreshSelectPlugin(optionsObj, $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number), filter_value); 4039 } 4040 saveStateSave(table_arg, column_number, table_selector_jq_friendly, filter_value, ''); 4041 break; 4042 } 4043 } 4044 if (table_arg.fnSettings().oFeatures.bServerSide !== true) { 4045 table_arg.fnDraw(); 4046 } else { 4047 setTimeout(function () { 4048 table_arg.fnDraw(); 4049 }, 10); 4050 } 4051 } else { 4052 exFilterColumnQueue.push(exInternalFilterColumnAJAXQueue(table_arg, col_filter_arr)); 4053 } 4054 } 4055 4056 function exGetColumnFilterVal(table_arg, column_number) { 4057 var retVal, 4058 fromId, 4059 toId, 4060 table_selector_jq_friendly, 4061 optionsObj, 4062 $filterElement; 4063 4064 //check if the table arg is from new datatables API (capital "D") 4065 if (table_arg.settings !== undefined) { 4066 table_arg = table_arg.settings()[0].oInstance; 4067 } 4068 4069 optionsObj = getOptions(table_arg.selector)[column_number]; 4070 table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly2(table_arg); 4071 4072 $filterElement = $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number); 4073 switch (optionsObj.filter_type) { 4074 case 'select': 4075 case 'custom_func': 4076 retVal = $filterElement.val(); 4077 if (retVal === '-1') { 4078 retVal = ''; 4079 } 4080 break; 4081 case 'auto_complete': 4082 case 'text': 4083 case 'date': 4084 retVal = $filterElement.val(); 4085 if ($filterElement.prev().hasClass('yadcf-exclude-wrapper') && $filterElement.prev().find('input').prop('checked') === true) { 4086 retVal = '_exclude_' + retVal; 4087 } 4088 break; 4089 case 'multi_select': 4090 retVal = $filterElement.val(); 4091 if (retVal === null) { 4092 retVal = ''; 4093 } 4094 break; 4095 case 'range_date': 4096 retVal = {}; 4097 fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-from-date-' + column_number; 4098 toId = 'yadcf-filter-' + table_selector_jq_friendly + '-to-date-' + column_number; 4099 4100 retVal.from = $('#' + fromId).val(); 4101 retVal.to = $('#' + toId).val(); 4102 break; 4103 case 'range_number': 4104 retVal = {}; 4105 fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-from-' + column_number; 4106 toId = 'yadcf-filter-' + table_selector_jq_friendly + '-to-' + column_number; 4107 4108 retVal.from = $('#' + fromId).val(); 4109 retVal.to = $('#' + toId).val(); 4110 break; 4111 case 'range_number_slider': 4112 retVal = {}; 4113 fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-min_tip-' + column_number; 4114 toId = 'yadcf-filter-' + table_selector_jq_friendly + '-max_tip-'
4114+ column_number; 4115 4116 retVal.from = $('#' + fromId).text(); 4117 retVal.to = $('#' + toId).text(); 4118 4119 break; 4120 default: 4121 console.log('exGetColumnFilterVal error: no such filter_type: ' + optionsObj.filter_type); 4122 } 4123 return retVal; 4124 } 4125 4126 function clearStateSave(oTable, column_number, table_selector_jq_friendly) { 4127 var yadcfState; 4128 if (oTable.fnSettings().oFeatures.bStateSave === true) { 4129 if (!oTable.fnSettings().oLoadedState) { 4130 oTable.fnSettings().oLoadedState = {}; 4131 oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); 4132 } 4133 if (oTable.fnSettings().oLoadedState.yadcfState !== undefined && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] !== undefined) { 4134 oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number] = undefined; 4135 } else { 4136 yadcfState = {}; 4137 yadcfState[table_selector_jq_friendly] = []; 4138 yadcfState[table_selector_jq_friendly][column_number] = undefined; 4139 oTable.fnSettings().oLoadedState.yadcfState = yadcfState; 4140 } 4141 oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); 4142 } 4143 } 4144 4145 function saveStateSave(oTable, column_number, table_selector_jq_friendly, from, to) { 4146 var yadcfState; 4147 if (oTable.fnSettings().oFeatures.bStateSave === true) { 4148 if (!oTable.fnSettings().oLoadedState) { 4149 oTable.fnSettings().oLoadedState = {}; 4150 } 4151 if (oTable.fnSettings().oLoadedState.yadcfState !== undefined && oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly] !== undefined) { 4152 oTable.fnSettings().oLoadedState.yadcfState[table_selector_jq_friendly][column_number] = { 4153 'from' : from, 4154 'to' : to 4155 }; 4156 } else { 4157 yadcfState = {}; 4158 yadcfState[table_selector_jq_friendly] = []; 4159 yadcfState[table_selector_jq_friendly][column_number] = { 4160 'from' : from, 4161 'to' : to 4162 }; 4163 oTable.fnSettings().oLoadedState.yadcfState = yadcfState; 4164 } 4165 oTable.fnSettings().oApi._fnSaveState(oTable.fnSettings()); 4166 } 4167 } 4168 4169 function exResetAllFilters(table_arg, noRedraw, columns) { 4170 var table_selector_jq_friendly, 4171 column_number, 4172 fromId, 4173 toId, 4174 sliderId, 4175 tableOptions, 4176 optionsObj, 4177 columnObjKey, 4178 settingsDt = getSettingsObjFromTable(table_arg), 4179 i, 4180 $filterElement; 4181 4182 //check if the table arg is from new datatables API (capital "D") 4183 if (table_arg.settings !== undefined) { 4184 table_arg = table_arg.settings()[0].oInstance; 4185 } 4186 tableOptions = getOptions(table_arg.selector); 4187 table_selector_jq_friendly = yadcf.generateTableSelectorJQFriendly2(table_arg); 4188 settingsDt = getSettingsObjFromTable(table_arg); 4189 4190 for (columnObjKey in tableOptions) { 4191 if (tableOptions.hasOwnProperty(columnObjKey)) { 4192 optionsObj = tableOptions[columnObjKey]; 4193 column_number = optionsObj.column_number; 4194 4195 if (columns !== undefined && $.inArray(column_number, columns) === -1) { 4196 continue; 4197 } 4198 $(document).removeData("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val"); 4199 4200 $filterElement = $('#yadcf-filter-' + table_selector_jq_friendly + '-' + column_number); 4201 4202 switch (optionsObj.filter_type) { 4203 case 'select': 4204 case 'custom_func': 4205 $filterElement.val('-1').removeClass('inuse'); 4206 table_arg.fnSettings().aoPreSearchCols[
4206column_number].sSearch = ''; 4207 if (optionsObj.select_type !== undefined) { 4208 refreshSelectPlugin(optionsObj, $filterElement, '-1'); 4209 } 4210 break; 4211 case 'auto_complete': 4212 case 'text': 4213 case 'date': 4214 $filterElement.val('').removeClass('inuse'); 4215 table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = ''; 4216 if ($filterElement.prev().hasClass('yadcf-exclude-wrapper')) { 4217 $filterElement.prev().find('input').prop('checked', false); 4218 } 4219 break; 4220 case 'multi_select': 4221 case 'multi_select_custom_func': 4222 $filterElement.val('-1'); 4223 $(document).data("#yadcf-filter-" + table_selector_jq_friendly + "-" + column_number + "_val", undefined); 4224 table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = ''; 4225 if (optionsObj.select_type !== undefined) { 4226 refreshSelectPlugin(optionsObj, $filterElement, '-1'); 4227 } 4228 break; 4229 case 'range_date': 4230 fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-from-date-' + column_number; 4231 toId = 'yadcf-filter-' + table_selector_jq_friendly + '-to-date-' + column_number; 4232 $('#' + fromId).val(''); 4233 $('#' + fromId).removeClass('inuse'); 4234 $('#' + toId).val(''); 4235 $('#' + toId).removeClass('inuse'); 4236 if (table_arg.fnSettings().oFeatures.bServerSide === true) { 4237 table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = ''; 4238 } 4239 clearStateSave(table_arg, column_number, table_selector_jq_friendly); 4240 break; 4241 case 'range_number': 4242 fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-from-' + column_number; 4243 toId = 'yadcf-filter-' + table_selector_jq_friendly + '-to-' + column_number; 4244 $('#' + fromId).val(''); 4245 $('#' + fromId).removeClass('inuse'); 4246 $('#' + toId).val(''); 4247 $('#' + toId).removeClass('inuse'); 4248 if (table_arg.fnSettings().oFeatures.bServerSide === true) { 4249 table_arg.fnSettings().aoPreSearchCols[column_number].sSearch = ''; 4250 } 4251 clearStateSave(table_arg, column_number, table_selector_jq_friendly); 4252 break; 4253 case 'range_number_slider': 4254 sliderId = 'yadcf-filter-' + table_selector_jq_friendly + '-slider-' + column_number; 4255 fromId = 'yadcf-filter-' + table_selector_jq_friendly + '-min_tip-' + column_number; 4256 toId = 'yadcf-filter-' + table_selector_jq_friendly + '-max_tip-' + column_number; 4257 $('#' + fromId).text(''); 4258 $('#' + fromId).parent().removeClass('inuse'); 4259 $('#' + fromId).parent().parent().find('ui-slider-range').removeClass('inuse'); 4260 $('#' + toId).text(''); 4261 $('#' + toId).parent().removeClass('inuse'); 4262 $('#' + toId).parent().parent().find('.ui-slider-range').removeClass('inuse'); 4263 $('#' + sliderId).slider("option", "values", [$('#' + fromId).parent().parent().find('.yadcf-filter-range-number-slider-min-tip-hidden').text(), $('#' + fromId).parent().parent().find('.yadcf-filter-range-number-slider-max-tip-hidden').text()]); 4264 if (table_arg.fnSettings().oFeatures.bServerSide === true) { 4265 table_arg.fnSettings().aoPreSearchCols[
4265column_number].sSearch = ''; 4266 } 4267 clearStateSave(table_arg, column_number, table_selector_jq_friendly); 4268 break; 4269 } 4270 4271 } 4272 } 4273 if (noRedraw !== true) { 4274 //clear global filter 4275 settingsDt.oPreviousSearch.sSearch = ''; 4276 if (settingsDt.aanFeatures.f !== undefined) { 4277 for (i = 0; i < settingsDt.aanFeatures.f.length; i++) { 4278 $('input', settingsDt.aanFeatures.f[i]).val(''); 4279 } 4280 } 4281 //end of clear global filter 4282 table_arg.fnDraw(settingsDt); 4283 } 4284 } 4285 4286 function exResetFilters(table_arg, columns, noRedraw) { 4287 exResetAllFilters(table_arg, noRedraw, columns); 4288 } 4289 4290 function exFilterExternallyTriggered(table_arg) { 4291 var columnsObj, 4292 columnObjKey, 4293 columnObj, 4294 filterValue, 4295 filtersValuesSingleElem, 4296 filtersValuesArr = []; 4297 4298 //check if the table arg is from new datatables API (capital "D") 4299 if (table_arg.settings !== undefined) { 4300 table_arg = table_arg.settings()[0].oInstance; 4301 } 4302 columnsObj = getOptions(table_arg.selector); 4303 4304 for (columnObjKey in columnsObj) { 4305 if (columnsObj.hasOwnProperty(columnObjKey)) { 4306 columnObj = columnsObj[columnObjKey]; 4307 filterValue = exGetColumnFilterVal(table_arg, columnObj.column_number); 4308 filtersValuesSingleElem = []; 4309 filtersValuesSingleElem.push(columnObj.column_number); 4310 filtersValuesSingleElem.push(filterValue); 4311 filtersValuesArr.push(filtersValuesSingleElem); 4312 } 4313 } 4314 exFilterColumn(table_arg, filtersValuesArr, true); 4315 } 4316 4317 return { 4318 init : init, 4319 doFilter : doFilter, 4320 doFilterMultiSelect : doFilterMultiSelect, 4321 doFilterAutocomplete : doFilterAutocomplete, 4322 autocompleteKeyUP : autocompleteKeyUP, 4323 getOptions : getOptions, 4324 rangeNumberKeyUP : rangeNumberKeyUP, 4325 rangeDateKeyUP : rangeDateKeyUP, 4326 rangeClear: rangeClear, 4327 rangeNumberSliderClear : rangeNumberSliderClear, 4328 stopPropagation : stopPropagation, 4329 exFilterColumn: exFilterColumn, 4330 exGetColumnFilterVal : exGetColumnFilterVal, 4331 exResetAllFilters: exResetAllFilters, 4332 dateKeyUP : dateKeyUP, 4333 dateSelectSingle : dateSelectSingle, 4334 textKeyUP : textKeyUP, 4335 doFilterCustomDateFunc : doFilterCustomDateFunc, 4336 eventTargetFixUp : eventTargetFixUp, 4337 initMultipleTables: initMultipleTables, 4338 initMultipleColumns: initMultipleColumns, 4339 textKeyUpMultiTables: textKeyUpMultiTables, 4340 doFilterMultiTables: doFilterMultiTables, 4341 doFilterMultiTablesMultiSelect: doFilterMultiTablesMultiSelect, 4342 generateTableSelectorJQFriendlyNew: generateTableSelectorJQFriendlyNew, 4343 exFilterExternallyTriggered: exFilterExternallyTriggered, 4344 exResetFilters: exResetFilters, 4345 initSelectPluginCustomTriggers: initSelectPluginCustomTriggers, 4346 preventDefaultForEnter: preventDefaultForEnter, 4347 generateTableSelectorJQFriendly2: generateTableSelectorJQFriendly2 4348 }; 4349 4350 }()); 4351 if (window) { 4352 window.yadcf = yadcf; 4353 } 4354 return yadcf; 4355}));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.