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