diff --git a/.jshintrc b/.jshintrc index e4e2728b..e8695547 100644 --- a/.jshintrc +++ b/.jshintrc @@ -11,7 +11,7 @@ "trailing": true, "quotmark": "single", "immed": true, - "maxstatements": 198, + "maxstatements": 172, "maxdepth": 7, - "maxcomplexity": 104 + "maxcomplexity": 85 } \ No newline at end of file diff --git a/README.md b/README.md index 771effb8..c75589d8 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,10 @@ git clone --bare https://github.com/koalyptus/TableFilter.git ```shell npm install tablefilter --save ``` +* or get the future features from the ``next`` release channel: +```shell +npm install tablefilter@next --save +``` ## Setup Copy the ``tablefilter`` directory under ``dist`` and place it at desired location in your project. Then include the main js file in your page: diff --git a/dist/starter.html b/dist/starter.html index dd5f1db7..593664dd 100644 --- a/dist/starter.html +++ b/dist/starter.html @@ -1,10 +1,10 @@ - tablefilter v0.0.23 - Starter + tablefilter v0.1.9 - Starter -

tablefilter v0.0.23

+

tablefilter v0.1.9

diff --git a/dist/tablefilter/style/colsVisibility.css b/dist/tablefilter/style/colsVisibility.css index 3f17e060..75e36c5a 100644 --- a/dist/tablefilter/style/colsVisibility.css +++ b/dist/tablefilter/style/colsVisibility.css @@ -1,6 +1,6 @@ /** - * tablefilter v0.0.23 by Max Guglielmi - * build date: 2016-01-15T07:08:13.103Z + * tablefilter v0.1.9 by Max Guglielmi + * build date: 2016-01-27T10:49:29.388Z * MIT License */ span.colVisSpan{text-align:left;}span.colVisSpan a.colVis{display:inline-block;padding:7px 5px 0;font-size:inherit;font-weight:inherit;vertical-align:top}div.colVisCont{position:relative;background:#fff;-webkit-box-shadow:3px 3px 2px #888;-moz-box-shadow:3px 3px 2px #888;box-shadow:3px 3px 2px #888;position:absolute;display:none;border:1px solid #ccc;height:auto;width:250px;background-color:#fff;margin:35px 0 0 -100px;z-index:10000;padding:10px 10px 10px 10px;text-align:left;font-size:12px;}div.colVisCont:after,div.colVisCont:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}div.colVisCont:after{border-color:rgba(255,255,255,0);border-bottom-color:#fff;border-width:10px;margin-left:-10px}div.colVisCont:before{border-color:rgba(255,255,255,0);border-bottom-color:#ccc;border-width:12px;margin-left:-12px}div.colVisCont p{margin:6px auto 6px auto}div.colVisCont a.colVis{display:initial;font-weight:inherit}ul.cols_checklist{padding:0;margin:0;list-style:none;}ul.cols_checklist label{display:block}ul.cols_checklist input{vertical-align:middle;margin:2px 5px 2px 1px}li.cols_checklist_item{padding:4px;margin:0;}li.cols_checklist_item:hover{background-color:#335ea8;color:#fff}.cols_checklist_slc_item{background-color:#335ea8;color:#fff} \ No newline at end of file diff --git a/dist/tablefilter/style/filtersVisibility.css b/dist/tablefilter/style/filtersVisibility.css index 69f119b5..ca44aa46 100644 --- a/dist/tablefilter/style/filtersVisibility.css +++ b/dist/tablefilter/style/filtersVisibility.css @@ -1,6 +1,6 @@ /** - * tablefilter v0.0.23 by Max Guglielmi - * build date: 2016-01-15T07:08:13.103Z + * tablefilter v0.1.9 by Max Guglielmi + * build date: 2016-01-27T10:49:29.388Z * MIT License */ span.expClpFlt a.btnExpClpFlt{width:35px;height:35px;display:inline-block;}span.expClpFlt a.btnExpClpFlt:hover{background-color:#f4f4f4}span.expClpFlt img{padding:8px 11px 11px 11px} \ No newline at end of file diff --git a/dist/tablefilter/style/tablefilter.css b/dist/tablefilter/style/tablefilter.css index faa22ecf..001de758 100644 --- a/dist/tablefilter/style/tablefilter.css +++ b/dist/tablefilter/style/tablefilter.css @@ -1,6 +1,6 @@ /** - * tablefilter v0.0.23 by Max Guglielmi - * build date: 2016-01-15T07:08:13.103Z + * tablefilter v0.1.9 by Max Guglielmi + * build date: 2016-01-27T10:49:29.388Z * MIT License */ .activeHeader{background-color:#66afe9 !important;color:#fff !important} diff --git a/dist/tablefilter/style/themes/default/default.css b/dist/tablefilter/style/themes/default/default.css index 2f69d915..86d8a500 100644 --- a/dist/tablefilter/style/themes/default/default.css +++ b/dist/tablefilter/style/themes/default/default.css @@ -1,6 +1,6 @@ /** - * tablefilter v0.0.23 by Max Guglielmi - * build date: 2016-01-15T07:08:13.103Z + * tablefilter v0.1.9 by Max Guglielmi + * build date: 2016-01-27T10:49:29.388Z * MIT License */ table.TF{border-left:1px solid #ccc !important;border-top:none !important;border-right:none !important;border-bottom:none !important;}table.TF th{background:#ebecee url("images/bg_th.jpg") left top repeat-x !important;border-bottom:1px solid #d0d0d0 !important;border-right:1px solid #d0d0d0 !important;border-left:1px solid #fff !important;border-top:1px solid #fff !important;color:#333 !important}table.TF td{border-bottom:1px dotted #999 !important;padding:5px !important}.fltrow{background-color:#ebecee !important;}.fltrow th,.fltrow td{border-bottom:1px dotted #666 !important;padding:1px 3px 1px 3px !important}.flt,select.flt,select.flt_multi,.flt_s,.single_flt,.div_checklist{border:1px solid #999 !important}input.flt{width:99% !important}.inf{height:$min-height;background:#d7d7d7 url("images/bg_infDiv.jpg") 0 0 repeat-x !important}input.reset{background:transparent url("images/btn_eraser.gif") center center no-repeat !important}.helpBtn:hover{background-color:transparent}.nextPage{background:transparent url("images/btn_next_page.gif") center center no-repeat !important;}.nextPage:hover{background:transparent url("images/btn_over_next_page.gif") center center no-repeat !important}.previousPage{background:transparent url("images/btn_previous_page.gif") center center no-repeat !important;}.previousPage:hover{background:transparent url("images/btn_over_previous_page.gif") center center no-repeat !important}.firstPage{background:transparent url("images/btn_first_page.gif") center center no-repeat !important;}.firstPage:hover{background:transparent url("images/btn_over_first_page.gif") center center no-repeat !important}.lastPage{background:transparent url("images/btn_last_page.gif") center center no-repeat !important;}.lastPage:hover{background:transparent url("images/btn_over_last_page.gif") center center no-repeat !important}div.grd_Cont{background-color:#ebecee !important;border:1px solid #ccc !important;padding:0 !important;}div.grd_Cont .even{background-color:#fff}div.grd_Cont .odd{background-color:#d5d5d5}div.grd_headTblCont{background-color:#ebecee !important;border-bottom:none !important;}div.grd_headTblCont table{border-right:none !important}div.grd_tblCont table th,div.grd_headTblCont table th,div.grd_headTblCont table td{background:#ebecee url("images/bg_th.jpg") left top repeat-x !important;border-bottom:1px solid #d0d0d0 !important;border-right:1px solid #d0d0d0 !important;border-left:1px solid #fff !important;border-top:1px solid #fff !important}div.grd_tblCont table td{border-bottom:1px solid #999 !important}.grd_inf{background:#d7d7d7 url("images/bg_infDiv.jpg") 0 0 repeat-x !important;border-top:1px solid #d0d0d0 !important}.loader{border:1px solid #999}.defaultLoader{width:32px;height:32px;background:transparent url("images/img_loading.gif") 0 0 no-repeat !important}.even{background-color:#fff}.odd{background-color:#d5d5d5}span.expClpFlt a.btnExpClpFlt:hover{background-color:transparent !important} \ No newline at end of file diff --git a/dist/tablefilter/style/themes/mytheme/mytheme.css b/dist/tablefilter/style/themes/mytheme/mytheme.css index 8beaf926..d666fc81 100644 --- a/dist/tablefilter/style/themes/mytheme/mytheme.css +++ b/dist/tablefilter/style/themes/mytheme/mytheme.css @@ -1,6 +1,6 @@ /** - * tablefilter v0.0.23 by Max Guglielmi - * build date: 2016-01-15T07:08:13.103Z + * tablefilter v0.1.9 by Max Guglielmi + * build date: 2016-01-27T10:49:29.388Z * MIT License */ table.TF{border-left:1px dotted #81963b !important;border-top:none !important;border-right:0 !important;border-bottom:none !important;}table.TF th{background:#39424b url("images/bg_headers.jpg") left top repeat-x !important;border-bottom:0 !important;border-right:1px dotted #d0d0d0 !important;border-left:0 !important;border-top:0 !important;color:#fff !important}table.TF td{border-bottom:1px dotted #81963b;border-right:1px dotted #81963b;padding:5px !important}.fltrow{background-color:#81963b !important;}.fltrow th,.fltrow td{border-bottom:1px dotted #39424b !important;border-right:1px dotted #fff !important;border-left:0 !important;border-top:0 !important;padding:1px 3px 1px 3px !important}.flt,select.flt,select.flt_multi,.flt_s,.single_flt,.div_checklist{border:1px solid #687830 !important}input.flt{width:99% !important}.inf{background:#d8d8d8;height:$min-height}input.reset{width:53px;background:transparent url("images/btn_filter.png") center center no-repeat !important}.helpBtn:hover{background-color:transparent}.nextPage{background:transparent url("images/btn_next_page.gif") center center no-repeat !important}.previousPage{background:transparent url("images/btn_previous_page.gif") center center no-repeat !important}.firstPage{background:transparent url("images/btn_first_page.gif") center center no-repeat !important}.lastPage{background:transparent url("images/btn_last_page.gif") center center no-repeat !important}div.grd_Cont{background:#81963b url("images/bg_headers.jpg") left top repeat-x !important;border:1px solid #ccc !important;padding:0 1px 1px 1px !important;}div.grd_Cont .even{background-color:#bccd83}div.grd_Cont .odd{background-color:#fff}div.grd_headTblCont{background-color:#ebecee !important;border-bottom:none !important}div.grd_tblCont table{border-right:none !important;}div.grd_tblCont table td{border-bottom:1px dotted #81963b;border-right:1px dotted #81963b}div.grd_tblCont table th,div.grd_headTblCont table th{background:transparent url("images/bg_headers.jpg") 0 0 repeat-x !important;border-bottom:0 !important;border-right:1px dotted #d0d0d0 !important;border-left:0 !important;border-top:0 !important;padding:0 4px 0 4px !important;color:#fff !important;height:35px !important}div.grd_headTblCont table td{border-bottom:1px dotted #39424b !important;border-right:1px dotted #fff !important;border-left:0 !important;border-top:0 !important;background-color:#81963b !important;padding:1px 3px 1px 3px !important}.grd_inf{background-color:#d8d8d8;border-top:1px solid #d0d0d0 !important}.loader{border:0 !important;background:#81963b !important}.defaultLoader{width:32px;height:32px;background:transparent url("images/img_loading.gif") 0 0 no-repeat !important}.even{background-color:#bccd83}.odd{background-color:#fff}span.expClpFlt a.btnExpClpFlt:hover{background-color:transparent !important} \ No newline at end of file diff --git a/dist/tablefilter/style/themes/skyblue/skyblue.css b/dist/tablefilter/style/themes/skyblue/skyblue.css index fb3c2a27..a001f9f7 100644 --- a/dist/tablefilter/style/themes/skyblue/skyblue.css +++ b/dist/tablefilter/style/themes/skyblue/skyblue.css @@ -1,6 +1,6 @@ /** - * tablefilter v0.0.23 by Max Guglielmi - * build date: 2016-01-15T07:08:13.103Z + * tablefilter v0.1.9 by Max Guglielmi + * build date: 2016-01-27T10:49:29.388Z * MIT License */ table.TF{padding:0;color:#000;border-right:1px solid #a4bed4;border-top:1px solid #a4bed4;border-left:1px solid #a4bed4;border-bottom:0;}table.TF th{margin:0;color:inherit;background:#d1e5fe url("images/bg_skyblue.gif") 0 0 repeat-x;border-color:#fdfdfd #a4bed4 #a4bed4 #fdfdfd;border-width:1px;border-style:solid}table.TF td{margin:0;padding:5px;color:inherit;border-bottom:1px solid #a4bed4;border-left:0;border-top:0;border-right:0}.fltrow{background-color:#d1e5fe !important;}.fltrow th,.fltrow td{padding:1px 3px 1px 3px !important}.flt,select.flt,select.flt_multi,.flt_s,.single_flt,.div_checklist{border:1px solid #a4bed4 !important}input.flt{width:99% !important}.inf{background-color:#e3efff !important;border:1px solid #a4bed4;height:$min-height;color:#004a6f}div.tot,div.status{border-right:0 !important}.helpBtn:hover{background-color:transparent}input.reset{background:transparent url("images/icn_clear_filters.png") center center no-repeat !important}.nextPage{background:transparent url("images/btn_next_page.gif") center center no-repeat !important;border:1px solid transparent !important;}.nextPage:hover{background:#ffe4ab url("images/btn_next_page.gif") center center no-repeat !important;border:1px solid #ffb552 !important}.previousPage{background:transparent url("images/btn_prev_page.gif") center center no-repeat !important;border:1px solid transparent !important;}.previousPage:hover{background:#ffe4ab url("images/btn_prev_page.gif") center center no-repeat !important;border:1px solid #ffb552 !important}.firstPage{background:transparent url("images/btn_first_page.gif") center center no-repeat !important;border:1px solid transparent !important;}.firstPage:hover{background:#ffe4ab url("images/btn_first_page.gif") center center no-repeat !important;border:1px solid #ffb552 !important}.lastPage{background:transparent url("images/btn_last_page.gif") center center no-repeat !important;border:1px solid transparent !important;}.lastPage:hover{background:#ffe4ab url("images/btn_last_page.gif") center center no-repeat !important;border:1px solid #ffb552 !important}.activeHeader{background:#ffe4ab !important;border:1px solid #ffb552 !important;color:inherit !important}div.grd_Cont{background-color:#d9eaed !important;border:1px solid #9cc !important;padding:0 !important;}div.grd_Cont .even{background-color:#fff}div.grd_Cont .odd{background-color:#e3efff}div.grd_headTblCont{background-color:#d9eaed !important;border-bottom:none !important}div.grd_tblCont table{border-right:none !important}div.grd_tblCont table th,div.grd_headTblCont table th,div.grd_headTblCont table td{background:#d9eaed url("images/bg_skyblue.gif") left top repeat-x;border-bottom:1px solid #a4bed4;border-right:1px solid #a4bed4 !important;border-left:1px solid #fff !important;border-top:1px solid #fff !important}div.grd_tblCont table td{border-bottom:1px solid #a4bed4 !important;border-right:0 !important;border-left:0 !important;border-top:0 !important}.grd_inf{background-color:#cce2fe;color:#004a6f;border-top:1px solid #9cc !important;}.grd_inf a{text-decoration:none;font-weight:bold}.loader{background-color:#2d8eef;border:1px solid #cce2fe;border-radius:5px}.even{background-color:#fff}.odd{background-color:#e3efff}span.expClpFlt a.btnExpClpFlt:hover{background-color:transparent !important}.ezActiveRow{background-color:#ffdc61 !important;color:inherit}.ezSelectedRow{background-color:#ffe4ab !important;color:inherit}.ezActiveCell{background-color:#fff !important;color:#000 !important;font-weight:bold}.ezETSelectedCell{background-color:#fff !important;font-weight:bold;color:#000 !important} \ No newline at end of file diff --git a/dist/tablefilter/tablefilter.js b/dist/tablefilter/tablefilter.js index 0821c642..bd54c2a1 100644 --- a/dist/tablefilter/tablefilter.js +++ b/dist/tablefilter/tablefilter.js @@ -1,10 +1,10 @@ /** - * tablefilter v0.0.23 by Max Guglielmi - * build date: 2016-01-15T07:08:13.019Z + * tablefilter v0.1.9 by Max Guglielmi + * build date: 2016-01-27T10:49:29.304Z * MIT License */ -!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var s=e();for(var i in s)("object"==typeof exports?exports:t)[i]=s[i]}}(this,function(){return function(t){function e(s){if(i[s])return i[s].exports;var a=i[s]={exports:{},id:s,loaded:!1};return t[s].call(a.exports,a,a.exports,e),a.loaded=!0,a.exports}var s=window.webpackJsonp;window.webpackJsonp=function(i,l){for(var n,r,o=0,h=[];on;n++)i[n]=arguments[n];if(0!==i.length){if(this.id=null,this.version="0.0.23",this.year=(new Date).getFullYear(),this.tbl=null,this.startRow=null,this.refRow=null,this.headersRow=null,this.cfg={},this.nbFilterableRows=null,this.nbRows=null,this.nbCells=null,this._hasGrid=!1,i.forEach(function(t){var s="undefined"==typeof t?"undefined":a(t);"object"===s&&t&&"TABLE"===t.nodeName?(e.tbl=t,e.id=t.id||"tf_"+(new Date).getTime()+"_"):"string"===s?(e.id=t,e.tbl=u["default"].id(t)):"number"===s?e.startRow=t:"object"===s&&(e.cfg=t)}),!this.tbl||"TABLE"!=this.tbl.nodeName||0===this.getRowsNb())throw new Error("Could not instantiate TableFilter: HTML table not found.");var r=this.cfg;this.refRow=null===this.startRow?2:this.startRow+1;try{this.nbCells=this.getCellsNb(this.refRow)}catch(h){this.nbCells=this.getCellsNb(0)}this.basePath=r.base_path||"tablefilter/",this.fltTypeInp="input",this.fltTypeSlc="select",this.fltTypeMulti="multiple",this.fltTypeCheckList="checklist",this.fltTypeNone="none",this.fltGrid=r.grid===!1?!1:!0,this.gridLayout=Boolean(r.grid_layout),this.filtersRowIndex=isNaN(r.filters_row_index)?0:r.filters_row_index,this.headersRow=isNaN(r.headers_row_index)?0===this.filtersRowIndex?1:0:r.headers_row_index,this.gridLayout&&(this.headersRow>1?this.filtersRowIndex=this.headersRow+1:(this.filtersRowIndex=1,this.headersRow=0)),this.fltCellTag="th"!==r.filters_cell_tag||"td"!==r.filters_cell_tag?"td":r.filters_cell_tag,this.fltIds=[],this.fltElms=[],this.searchArgs=null,this.validRowsIndex=null,this.fltGridEl=null,this.isFirstLoad=!0,this.infDiv=null,this.lDiv=null,this.rDiv=null,this.mDiv=null,this.infDivCssClass=r.inf_div_css_class||"inf",this.lDivCssClass=r.left_div_css_class||"ldiv",this.rDivCssClass=r.right_div_css_class||"rdiv",this.mDivCssClass=r.middle_div_css_class||"mdiv",this.contDivCssClass=r.content_div_css_class||"cont",this.stylePath=r.style_path||this.basePath+"style/",this.stylesheet=r.stylesheet||this.stylePath+"tablefilter.css",this.stylesheetId=this.id+"_style",this.fltsRowCssClass=r.flts_row_css_class||"fltrow",this.enableIcons=r.enable_icons===!1?!1:!0,this.alternateRows=Boolean(r.alternate_rows),this.hasColWidths=v["default"].isArray(r.col_widths),this.colWidths=this.hasColWidths?r.col_widths:null,this.fltCssClass=r.flt_css_class||"flt",this.fltMultiCssClass=r.flt_multi_css_class||"flt_multi",this.fltSmallCssClass=r.flt_small_css_class||"flt_s",this.singleFltCssClass=r.single_flt_css_class||"single_flt",this.enterKey=r.enter_key===!1?!1:!0,this.onBeforeFilter=v["default"].isFn(r.on_before_filter)?r.on_before_filter:null,this.onAfterFilter=v["default"].isFn(r.on_after_filter)?r.on_after_filter:null,this.caseSensitive=Boolean(r.case_sensitive),this.hasExactMatchByCol=v["default"].isArray(r.columns_exact_match),this.exactMatchByCol=this.hasExactMatchByCol?r.columns_exact_match:[],this.exactMatch=Boolean(r.exact_match),this.linkedFilters=Boolean(r.linked_filters),this.disableExcludedOptions=Boolean(r.disable_excluded_options),this.activeFlt=null,this.activeFilterId=null,this.hasVisibleRows=Boolean(r.rows_always_visible),this.visibleRows=this.hasVisibleRows?r.rows_always_visible:[],this.isExternalFlt=Boolean(r.external_flt_grid),this.externalFltTgtIds=r.external_flt_grid_ids||null,this.externalFltEls=[],this.execDelay=isNaN(r.exec_delay)?100:parseInt(r.exec_delay,10),this.onFiltersLoaded=v["default"].isFn(r.on_filters_loaded)?r.on_filters_loaded:null,this.singleSearchFlt=Boolean(r.single_filter),this.onRowValidated=v["default"].isFn(r.on_row_validated)?r.on_row_validated:null,this.customCellDataCols=r.custom_cell_data_cols?r.custom_cell_data_cols:[],this.customCellData=v["default"].isFn(r.custom_cell_data)?r.custom_cell_data:null,this.watermark=r.watermark||"",this.isWatermarkArray=v["default"].isArray(this.watermark),this.toolBarTgtId=r.toolbar_target_id||null,this.help=v["default"].isUndef(r.help_instructions)?void 0:Boolean(r.help_instructions),this.popupFilters=Boolean(r.popup_filters),this.markActiveColumns=Boolean(r.mark_active_columns),this.activeColumnsCssClass=r.active_columns_css_class||"activeHeader",this.onBeforeActiveColumn=v["default"].isFn(r.on_before_active_column)?r.on_before_active_column:null,this.onAfterActiveColumn=v["default"].isFn(r.on_after_active_column)?r.on_after_active_column:null,this.displayAllText=r.display_all_text||"Clear",this.enableEmptyOption=Boolean(r.enable_empty_option),this.emptyText=r.empty_text||"(Empty)",this.enableNonEmptyOption=Boolean(r.enable_non_empty_option),this.nonEmptyText=r.non_empty_text||"(Non empty)",this.onSlcChange=r.on_change===!1?!1:!0,this.sortSlc=r.sort_select===!1?!1:!0,this.isSortNumAsc=Boolean(r.sort_num_asc),this.sortNumAsc=this.isSortNumAsc?r.sort_num_asc:null,this.isSortNumDesc=Boolean(r.sort_num_desc),this.sortNumDesc=this.isSortNumDesc?r.sort_num_desc:null,this.loadFltOnDemand=Boolean(r.load_filters_on_demand),this.hasCustomOptions=v["default"].isObj(r.custom_options),this.customOptions=r.custom_options,this.rgxOperator=r.regexp_operator||"rgx:",this.emOperator=r.empty_operator||"[empty]",this.nmOperator=r.nonempty_operator||"[nonempty]",this.orOperator=r.or_operator||"||",this.anOperator=r.and_operator||"&&",this.grOperator=r.greater_operator||">",this.lwOperator=r.lower_operator||"<",this.leOperator=r.lower_equal_operator||"<=",this.geOperator=r.greater_equal_operator||">=",this.dfOperator=r.different_operator||"!",this.lkOperator=r.like_operator||"*",this.eqOperator=r.equal_operator||"=",this.stOperator=r.start_with_operator||"{",this.enOperator=r.end_with_operator||"}",this.curExp=r.cur_exp||"^[¥£€$]",this.separator=r.separator||",",this.rowsCounter=Boolean(r.rows_counter),this.statusBar=Boolean(r.status_bar),this.loader=Boolean(r.loader),this.displayBtn=Boolean(r.btn),this.btnText=r.btn_text||(this.enableIcons?"":"Go"),this.btnCssClass=r.btn_css_class||(this.enableIcons?"btnflt_icon":"btnflt"),this.btnReset=Boolean(r.btn_reset),this.btnResetCssClass=r.btn_reset_css_class||"reset",this.onBeforeReset=v["default"].isFn(r.on_before_reset)?r.on_before_reset:null,this.onAfterReset=v["default"].isFn(r.on_after_reset)?r.on_after_reset:null,this.paging=Boolean(r.paging),this.nbVisibleRows=0,this.nbHiddenRows=0,this.autoFilter=Boolean(r.auto_filter),this.autoFilterDelay=isNaN(r.auto_filter_delay)?900:r.auto_filter_delay,this.isUserTyping=null,this.autoFilterTimer=null,this.highlightKeywords=Boolean(r.highlight_keywords),this.noResults=v["default"].isObj(r.no_results_message)||Boolean(r.no_results_message),this.defaultDateType=r.default_date_type||"DMY",this.thousandsSeparator=r.thousands_separator||",",this.decimalSeparator=r.decimal_separator||".",this.hasColNbFormat=v["default"].isArray(r.col_number_format),this.colNbFormat=this.hasColNbFormat?r.col_number_format:null,this.hasColDateType=v["default"].isArray(r.col_date_type),this.colDateType=this.hasColDateType?r.col_date_type:null,this.msgFilter=r.msg_filter||"Filtering data...",this.msgPopulate=r.msg_populate||"Populating filter...",this.msgPopulateCheckList=r.msg_populate_checklist||"Populating list...",this.msgChangePage=r.msg_change_page||"Collecting paging data...",this.msgClear=r.msg_clear||"Clearing filters...",this.msgChangeResults=r.msg_change_results||"Changing results per page...",this.msgResetValues=r.msg_reset_grid_values||"Re-setting filters values...",this.msgResetPage=r.msg_reset_page||"Re-setting page...",this.msgResetPageLength=r.msg_reset_page_length||"Re-setting page length...",this.msgSort=r.msg_sort||"Sorting data...",this.msgLoadExtensions=r.msg_load_extensions||"Loading extensions...",this.msgLoadThemes=r.msg_load_themes||"Loading theme(s)...",this.prfxTf="TF",this.prfxFlt="flt",this.prfxValButton="btn",this.prfxInfDiv="inf_",this.prfxLDiv="ldiv_",this.prfxRDiv="rdiv_",this.prfxMDiv="mdiv_",this.prfxCookieFltsValues="tf_flts_",this.prfxCookiePageNb="tf_pgnb_",this.prfxCookiePageLen="tf_pglen_",this.hasStoredValues=!1,this.rememberGridValues=Boolean(r.remember_grid_values),this.fltsValuesCookie=this.prfxCookieFltsValues+this.id,this.rememberPageNb=this.paging&&r.remember_page_number,this.pgNbCookie=this.prfxCookiePageNb+this.id,this.rememberPageLen=this.paging&&r.remember_page_length,this.pgLenCookie=this.prfxCookiePageLen+this.id,this.extensions=r.extensions,this.hasExtensions=v["default"].isArray(this.extensions),this.enableDefaultTheme=Boolean(r.enable_default_theme),this.hasThemes=this.enableDefaultTheme||v["default"].isArray(r.themes),this.themes=r.themes||[],this.themesPath=r.themes_path||this.stylePath+"themes/",this.Mod={},this.ExtRegistry={},this.Evt={name:{filter:"Filter",dropdown:"DropDown",checklist:"CheckList",changepage:"ChangePage",clear:"Clear",changeresultsperpage:"ChangeResults",resetvalues:"ResetValues",resetpage:"ResetPage",resetpagelength:"ResetPageLength",loadextensions:"LoadExtensions",loadthemes:"LoadThemes"},detectKey:function(t){if(this.enterKey){var e=t||B.event;if(e){var s=o["default"].keyCode(e);13===s?(this.filter(),o["default"].cancel(e),o["default"].stop(e)):(this.isUserTyping=!0,B.clearInterval(this.autoFilterTimer),this.autoFilterTimer=null)}}},onKeyUp:function(t){function e(){B.clearInterval(this.autoFilterTimer),this.autoFilterTimer=null,this.isUserTyping||(this.filter(),this.isUserTyping=null)}if(this.autoFilter){var s=t||B.event,i=o["default"].keyCode(s);this.isUserTyping=!1,13!==i&&9!==i&&27!==i&&38!==i&&40!==i?null===this.autoFilterTimer&&(this.autoFilterTimer=B.setInterval(e.bind(this),this.autoFilterDelay)):(B.clearInterval(this.autoFilterTimer),this.autoFilterTimer=null)}},onKeyDown:function(){this.autoFilter&&(this.isUserTyping=!0)},onInpBlur:function(){if(this.autoFilter&&(this.isUserTyping=!1,B.clearInterval(this.autoFilterTimer)),this.hasExtension("advancedGrid")){var t=this.extension("advancedGrid"),e=t._ezEditTable;t.cfg.editable&&e.Editable.Set(),t.cfg.selection&&e.Selection.Set()}},onInpFocus:function(t){var e=t||B.event,s=o["default"].target(e);if(this.activeFilterId=s.getAttribute("id"),this.activeFlt=u["default"].id(this.activeFilterId),this.popupFilters&&(o["default"].cancel(e),o["default"].stop(e)),this.hasExtension("advancedGrid")){var i=this.extension("advancedGrid"),a=i._ezEditTable;i.cfg.editable&&a.Editable.Remove(),i.cfg.selection&&a.Selection.Remove()}},onSlcFocus:function(t){var e=t||B.event,s=o["default"].target(e);if(this.activeFilterId=s.getAttribute("id"),this.activeFlt=u["default"].id(this.activeFilterId),this.loadFltOnDemand&&"0"===s.getAttribute("filled")){var i=s.getAttribute("ct");this.Mod.dropdown._build(i)}this.popupFilters&&(o["default"].cancel(e),o["default"].stop(e))},onSlcChange:function(t){if(this.activeFlt){var e=t||B.event;this.popupFilters&&o["default"].stop(e),this.onSlcChange&&this.filter()}},onCheckListClick:function(t){var e=t||B.event,s=o["default"].target(e);if(this.loadFltOnDemand&&"0"===s.getAttribute("filled")){var i=s.getAttribute("ct");this.Mod.checkList._build(i),this.Mod.checkList.checkListDiv[i].onclick=null,this.Mod.checkList.checkListDiv[i].title=""}}}}}return n(t,[{key:"init",value:function(){var t=this;if(!this._hasGrid){this.tbl||(this.tbl=u["default"].id(this.id)),this.gridLayout&&(this.refRow=null===this.startRow?0:this.startRow),this.popupFilters&&(0===this.filtersRowIndex&&1===this.headersRow||this.gridLayout)&&(this.headersRow=0);var e=this.Mod,s=this.singleSearchFlt?1:this.nbCells,i=void 0;if(this["import"](this.stylesheetId,this.stylesheet,null,"link"),this.hasThemes&&this._loadThemes(),(this.rememberGridValues||this.rememberPageNb||this.rememberPageLen)&&(e.store=new x.Store(this)),this.gridLayout&&(e.gridLayout=new T.GridLayout(this),e.gridLayout.init()),this.loader&&(e.loader||(e.loader=new k.Loader(this)),e.loader.init()),this.highlightKeywords&&(e.highlightKeyword=new R.HighlightKeyword(this)),this.popupFilters&&(e.popupFilter||(e.popupFilter=new F.PopupFilter(this)),e.popupFilter.init()),this.fltGrid)if(this.isFirstLoad){var a=void 0;if(!this.gridLayout){var l=u["default"].tag(this.tbl,"thead");a=l.length>0?l[0].insertRow(this.filtersRowIndex):this.tbl.insertRow(this.filtersRowIndex),this.headersRow>1&&this.filtersRowIndex<=this.headersRow&&!this.popupFilters&&this.headersRow++,this.popupFilters&&this.headersRow++,a.className=this.fltsRowCssClass,(this.isExternalFlt||this.popupFilters)&&(a.style.display="none")}this.nbFilterableRows=this.getRowsNb(),this.nbVisibleRows=this.nbFilterableRows,this.nbRows=this.tbl.rows.length;for(var n=0;s>n;n++){this.popupFilters&&e.popupFilter.build(n);var r=u["default"].create(this.fltCellTag),h=this.getFilterType(n),d=this.isExternalFlt&&this.externalFltTgtIds?this.externalFltTgtIds[n]:null;if(this.singleSearchFlt&&(r.colSpan=this.nbCells),this.gridLayout||a.appendChild(r),i=n==s-1&&this.displayBtn?this.fltSmallCssClass:this.fltCssClass,this.singleSearchFlt&&(h=this.fltTypeInp,i=this.singleFltCssClass),h===this.fltTypeSlc||h===this.fltTypeMulti){e.dropdown||(e.dropdown=new P.Dropdown(this));var c=e.dropdown,p=u["default"].create(this.fltTypeSlc,["id",this.prfxFlt+n+"_"+this.id],["ct",n],["filled","0"]);if(h===this.fltTypeMulti&&(p.multiple=this.fltTypeMulti,p.title=c.multipleSlcTooltip),p.className=f["default"].lower(h)===this.fltTypeSlc?i:this.fltMultiCssClass,d?(u["default"].id(d).appendChild(p),this.externalFltEls.push(p)):r.appendChild(p),this.fltIds.push(this.prfxFlt+n+"_"+this.id),this.loadFltOnDemand||c._build(n),o["default"].add(p,"keypress",this.Evt.detectKey.bind(this)),o["default"].add(p,"change",this.Evt.onSlcChange.bind(this)),o["default"].add(p,"focus",this.Evt.onSlcFocus.bind(this)),this.loadFltOnDemand){var g=u["default"].createOpt(this.displayAllText,"");p.appendChild(g)}}else if(h===this.fltTypeCheckList){var v=void 0;e.checkList=new I.CheckList(this),v=e.checkList;var b=u["default"].create("div",["id",v.prfxCheckListDiv+n+"_"+this.id],["ct",n],["filled","0"]);b.className=v.checkListDivCssClass,d?(u["default"].id(d).appendChild(b),this.externalFltEls.push(b)):r.appendChild(b),v.checkListDiv[n]=b,this.fltIds.push(this.prfxFlt+n+"_"+this.id),this.loadFltOnDemand||v._build(n),this.loadFltOnDemand&&(o["default"].add(b,"click",this.Evt.onCheckListClick.bind(this)),b.appendChild(u["default"].text(v.activateCheckListTxt)))}else{var m=h===this.fltTypeInp?"text":"hidden",_=u["default"].create(this.fltTypeInp,["id",this.prfxFlt+n+"_"+this.id],["type",m],["ct",n]);if("hidden"!==m&&this.watermark&&_.setAttribute("placeholder",this.isWatermarkArray?this.watermark[n]||"":this.watermark),_.className=i,o["default"].add(_,"focus",this.Evt.onInpFocus.bind(this)),d?(u["default"].id(d).appendChild(_),this.externalFltEls.push(_)):r.appendChild(_),this.fltIds.push(this.prfxFlt+n+"_"+this.id),o["default"].add(_,"keypress",this.Evt.detectKey.bind(this)),o["default"].add(_,"keydown",this.Evt.onKeyDown.bind(this)),o["default"].add(_,"keyup",this.Evt.onKeyUp.bind(this)),o["default"].add(_,"blur",this.Evt.onInpBlur.bind(this)),this.rememberGridValues){var y=this.Mod.store.getFilterValues(this.fltsValuesCookie);" "!=y[n]&&this.setFilterValue(n,y[n],!1)}}if(n==s-1&&this.displayBtn){var C=u["default"].create(this.fltTypeInp,["id",this.prfxValButton+n+"_"+this.id],["type","button"],["value",this.btnText]);C.className=this.btnCssClass,d?u["default"].id(d).appendChild(C):r.appendChild(C),o["default"].add(C,"click",function(){return t.filter()})}}}else this._resetGrid();else this.refRow=this.refRow-1,this.gridLayout&&(this.refRow=0),this.nbFilterableRows=this.getRowsNb(),this.nbVisibleRows=this.nbFilterableRows,this.nbRows=this.nbFilterableRows+this.refRow;this.hasVisibleRows&&this.enforceVisibility(),this.rowsCounter&&(e.rowsCounter=new S.RowsCounter(this),e.rowsCounter.init()),this.statusBar&&(e.statusBar=new O.StatusBar(this),e.statusBar.init()),(this.paging||e.paging)&&(e.paging||(e.paging=new E.Paging(this),e.paging.init()),e.paging.reset()),this.btnReset&&(e.clearButton=new L.ClearButton(this),e.clearButton.init()),this.help&&(e.help||(e.help=new N.Help(this)),e.help.init()),this.hasColWidths&&!this.gridLayout&&this.setColWidths(),this.alternateRows&&(e.alternateRows=new M.AlternateRows(this),e.alternateRows.init()),this.noResults&&(e.noResults||(e.noResults=new D.NoResults(this)),e.noResults.init()),this.isFirstLoad=!1,this._hasGrid=!0,(this.rememberGridValues||this.rememberPageLen||this.rememberPageNb)&&this.resetValues(),this.gridLayout||u["default"].addClass(this.tbl,this.prfxTf),this.loader&&e.loader.show("none"),this.hasExtensions&&this.initExtensions(),this.onFiltersLoaded&&this.onFiltersLoaded.call(null,this)}}},{key:"EvtManager",value:function(t){function e(){var e=this.Evt.name;switch(t){case e.filter:this._filter();break;case e.dropdown:this.linkedFilters?r.dropdown._build(i,!0):r.dropdown._build(i,!1,a,l);break;case e.checklist:r.checkList._build(i,a,l);break;case e.changepage:r.paging._changePage(n);break;case e.clear:this._clearFilters(),this._filter();break;case e.changeresultsperpage:r.paging._changeResultsPerPage();break;case e.resetvalues:this._resetValues(),this._filter();break;case e.resetpage:r.paging._resetPage(this.pgNbCookie);break;case e.resetpagelength:r.paging._resetPageLength(this.pgLenCookie);break;case e.loadextensions:this._loadExtensions();break;case e.loadthemes:this._loadThemes()}this.statusBar&&r.statusBar.message(""),this.loader&&r.loader.show("none")}var s=arguments.length<=1||void 0===arguments[1]?{slcIndex:null,slcExternal:!1,slcId:null,pgIndex:null}:arguments[1],i=s.slcIndex,a=s.slcExternal,l=s.slcId,n=s.pgIndex,r=this.Mod;this.loader||this.statusBar||this.linkedFilters?(this.loader&&r.loader.show(""),this.statusBar&&r.statusBar.message(this["msg"+t]),B.setTimeout(e.bind(this),this.execDelay)):e.call(this)}},{key:"feature",value:function(t){return this.Mod[t]}},{key:"initExtensions",value:function(){for(var t=this.extensions,e=0,s=t.length;s>e;e++){var i=t[e];this.ExtRegistry[i.name]||this.loadExtension(i)}}},{key:"loadExtension",value:function(t){var e=this;if(t&&t.name){var i=t.name,a=t.path,l=void 0;i&&a?l=t.path+i:(i=i.replace(".js",""),l="extensions/{}/{}".replace(/{}/g,i)),s.p=this.basePath,s.e(1,function(s){var a=[s(25)("./"+l)];(function(s){var a=new s["default"](e,t);a.init(),e.ExtRegistry[i]=a}).apply(null,a)})}}},{key:"extension",value:function(t){return this.ExtRegistry[t]}},{key:"hasExtension",value:function(t){return!v["default"].isEmpty(this.ExtRegistry[t])}},{key:"destroyExtensions",value:function(){for(var t=this.extensions,e=0,s=t.length;s>e;e++){var i=t[e],a=this.ExtRegistry[i.name];a&&(a.destroy(),this.ExtRegistry[i.name]=null)}}},{key:"loadThemes",value:function(){this.EvtManager(this.Evt.name.loadthemes)}},{key:"_loadThemes",value:function(){var t=this.themes;if(this.enableDefaultTheme){var e={name:"default"};this.themes.push(e)}if(v["default"].isArray(t))for(var s=0,i=t.length;i>s;s++){var a=t[s],l=a.name,n=a.path,r=this.prfxTf+l;l&&!n?n=this.themesPath+l+"/"+l+".css":!l&&a.path&&(l="theme{0}".replace("{0}",s)),this.isImported(n,"link")||this["import"](r,n,null,"link")}this.btnResetText=null,this.btnResetHtml='',this.btnPrevPageHtml='',this.btnNextPageHtml='',this.btnFirstPageHtml='',this.btnLastPageHtml='',this.loader=!0,this.loaderHtml='
',this.loaderText=null}},{key:"getStylesheet",value:function(){var t=arguments.length<=0||void 0===arguments[0]?"default":arguments[0];return u["default"].id(this.prfxTf+t)}},{key:"destroy",value:function(){if(this._hasGrid){var t=this.tbl.rows,e=this.Mod;this._clearFilters(),this.isExternalFlt&&!this.popupFilters&&this.removeExternalFlts(),this.infDiv&&this.removeToolbar(),this.highlightKeywords&&e.highlightKeyword.unhighlightAll(),this.markActiveColumns&&this.clearActiveColumns(),this.hasExtensions&&this.destroyExtensions();for(var s=this.refRow;s0&&[].forEach.call(e,function(e){t.removeChild(e)})}}},{key:"removeExternalFlts",value:function(){if(this.isExternalFlt&&this.externalFltTgtIds)for(var t=this.externalFltTgtIds,e=t.length,s=0;e>s;s++){var i=t[s],a=u["default"].id(i);a&&(a.innerHTML="")}}},{key:"isCustomOptions",value:function(t){return this.hasCustomOptions&&-1!=this.customOptions.cols.indexOf(t)}},{key:"getCustomOptions",value:function(t){if(!v["default"].isEmpty(t)&&this.isCustomOptions(t)){for(var e=this.customOptions,s=e.cols,i=[],a=[],l=s.indexOf(t),n=e.values[l],r=e.texts[l],o=e.sorts[l],h=0,u=n.length;u>h;h++)a.push(n[h]),r[h]?i.push(r[h]):i.push(n[h]);return o&&(a.sort(),i.sort()),[a,i]}}},{key:"resetValues",value:function(){this.EvtManager(this.Evt.name.resetvalues)}},{key:"_resetValues",value:function(){this.rememberGridValues&&this.loadFltOnDemand&&this._resetGridValues(this.fltsValuesCookie),this.rememberPageLen&&this.Mod.paging&&this.Mod.paging.resetPageLength(this.pgLenCookie),this.rememberPageNb&&this.Mod.paging&&this.Mod.paging.resetPage(this.pgNbCookie)}},{key:"_resetGridValues",value:function(t){if(this.loadFltOnDemand){var e=this.Mod.store.getFilterValues(t),s=this.getFiltersByType(this.fltTypeSlc,!0),i=this.getFiltersByType(this.fltTypeMulti,!0);if(Number(e[e.length-1])===this.fltIds.length){for(var a=0;ah;h++)""!==l[h]&&(n=u["default"].createOpt(l[h],l[h],!0),o.appendChild(n),this.hasStoredValues=!0)}}else if(r===this.fltTypeCheckList){var f=this.Mod.checkList,c=f.checkListDiv[a];c.title=c.innerHTML,c.innerHTML="";var p=u["default"].create("ul",["id",this.fltIds[a]],["colIndex",a]);p.className=f.checkListCssClass;var g=u["default"].createCheckItem(this.fltIds[a]+"_0","",this.displayAllText);g.className=f.checkListItemCssClass,p.appendChild(g),c.appendChild(p),l=e[a].split(" "+this.orOperator+" ");for(var h=0,d=l.length;d>h;h++)if(""!==l[h]){var v=u["default"].createCheckItem(this.fltIds[a]+"_"+(h+1),l[h],l[h]);v.className=f.checkListItemCssClass,p.appendChild(v),v.check.checked=!0,f.setCheckListValues(v.check),this.hasStoredValues=!0}}}!this.hasStoredValues&&this.paging&&this.Mod.paging.setPagingInfo()}}}},{key:"filter",value:function(){this.EvtManager(this.Evt.name.filter)}},{key:"_filter",value:function(){function t(t,e,s){if(this.highlightKeywords&&e){t=t.replace(p,""),t=t.replace(g,""),t=t.replace(v,""),t=t.replace(b,"");var a=t;(r.test(t)||o.test(t)||h.test(t)||d.test(t)||c.test(t))&&(a=u["default"].getText(s)),""!==a&&i.highlightKeyword.highlight(s,a,i.highlightKeyword.highlightCssClass)}}function e(t,e,s){var i=void 0,a=w["default"].removeNbFormat,u=h.test(t),x=r.test(t),T=d.test(t),k=o.test(t),R=c.test(t),F=g.test(t),P=p.test(t),I=v.test(t),S=b.test(t),E=m===t,L=_===t,N=C.test(t),M=u&&y["default"].isValid(t.replace(h,""),O),D=x&&y["default"].isValid(t.replace(r,""),O),B=T&&y["default"].isValid(t.replace(d,""),O),H=k&&y["default"].isValid(t.replace(o,""),O),A=R&&y["default"].isValid(t.replace(c,""),O),j=F&&y["default"].isValid(t.replace(g,""),O),V=void 0,U=void 0;if(y["default"].isValid(e,O))V=y["default"].format(e,O),M?(U=y["default"].format(t.replace(h,""),O),i=U>V):D?(U=y["default"].format(t.replace(r,""),O),i=U>=V):H?(U=y["default"].format(t.replace(o,""),O),i=V>=U):B?(U=y["default"].format(t.replace(d,""),O),i=V>U):A?(U=y["default"].format(t.replace(c,""),O),i=V.toString()!=U.toString()):j?(U=y["default"].format(t.replace(g,""),O),i=V.toString()==U.toString()):p.test(t)?i=f["default"].contains(t.replace(p,""),e,!1,this.caseSensitive):y["default"].isValid(t,O)?(U=y["default"].format(t,O),i=V.toString()===U.toString()):i=E?f["default"].isEmpty(e):L?!f["default"].isEmpty(e):f["default"].contains(t,e,this.isExactMatch(s),this.caseSensitive);else if(this.hasColNbFormat&&this.colNbFormat[s]?(l=a(e,this.colNbFormat[s]),n=this.colNbFormat[s]):","===this.thousandsSeparator&&"."===this.decimalSeparator?(l=a(e,"us"),n="us"):(l=a(e,"eu"),n="eu"),x)i=l<=a(t.replace(r,""),n);else if(k)i=l>=a(t.replace(o,""),n);else if(u)i=la(t.replace(d,""),n);else if(R)i=f["default"].contains(t.replace(c,""),e,!1,this.caseSensitive)?!1:!0;else if(P)i=f["default"].contains(t.replace(p,""),e,!1,this.caseSensitive);else if(F)i=f["default"].contains(t.replace(g,""),e,!0,this.caseSensitive);else if(I)i=0===e.indexOf(t.replace(v,""))?!0:!1;else if(S){var G=t.replace(b,"");i=e.lastIndexOf(G,e.length-1)===e.length-1-(G.length-1)&&e.lastIndexOf(G,e.length-1)>-1?!0:!1}else if(E)i=f["default"].isEmpty(e);else if(L)i=!f["default"].isEmpty(e);else if(N)try{var z=t.replace(C,""),W=new RegExp(z);i=W.test(e)}catch($){i=!1}else i=f["default"].contains(t,e,this.isExactMatch(s),this.caseSensitive);return i}if(this.fltGrid&&(this._hasGrid||this.isFirstLoad)){this.onBeforeFilter&&this.onBeforeFilter.call(null,this);var s=this.tbl.rows,i=this.Mod,a=0;this.validRowsIndex=[],this.highlightKeywords&&i.highlightKeyword.unhighlightAll(),this.popupFilters&&i.popupFilter.buildIcons(),this.markActiveColumns&&this.clearActiveColumns(),this.searchArgs=this.getFiltersValue();for(var l,n,r=new RegExp(this.leOperator),o=new RegExp(this.geOperator),h=new RegExp(this.lwOperator),d=new RegExp(this.grOperator),c=new RegExp(this.dfOperator),p=new RegExp(f["default"].rgxEsc(this.lkOperator)),g=new RegExp(this.eqOperator),v=new RegExp(this.stOperator),b=new RegExp(this.enOperator),m=this.emOperator,_=this.nmOperator,C=new RegExp(f["default"].rgxEsc(this.rgxOperator)),x=this.refRow;xI;I++){var S=this.searchArgs[this.singleSearchFlt?0:I],O=this.hasColDateType?this.colDateType[I]:this.defaultDateType;if(""!==S){var E=f["default"].matchCase(this.getCellData(T[I]),this.caseSensitive),L=S.split(this.orOperator),N=L.length>1?!0:!1,M=S.split(this.anOperator),D=M.length>1?!0:!1;if(N||D){for(var B=void 0,H=!1,A=N?L:M,j=0,V=A.length;V>j&&(B=f["default"].trim(A[j]),H=e.call(this,B,E,I),t.call(this,B,H,T[I]),!N||!H)&&(!D||H);j++);R[I]=H}else R[I]=e.call(this,f["default"].trim(S),E,I),t.call(this,S,R[I],T[I]);R[I]||(F=!1),this.singleSearchFlt&&R[I]&&(P=!0),this.popupFilters&&i.popupFilter.buildIcon(I,!0),this.markActiveColumns&&x===this.refRow&&(this.onBeforeActiveColumn&&this.onBeforeActiveColumn.call(null,this,I),u["default"].addClass(this.getHeaderElement(I),this.activeColumnsCssClass),this.onAfterActiveColumn&&this.onAfterActiveColumn.call(null,this,I))}}this.singleSearchFlt&&P&&(F=!0),F?(this.validateRow(x,!0),this.validRowsIndex.push(x),this.alternateRows&&i.alternateRows.setRowBg(x,this.validRowsIndex.length),this.onRowValidated&&this.onRowValidated.call(null,this,x)):(this.validateRow(x,!1),i.alternateRows&&i.alternateRows.removeRowBg(x),this.hasVisibleRows&&-1!==this.visibleRows.indexOf(x)?this.validRowsIndex.push(x):a++)}}this.nbVisibleRows=this.validRowsIndex.length,this.nbHiddenRows=a,this.rememberGridValues&&i.store.saveFilterValues(this.fltsValuesCookie),this.paging?(i.paging.startPagingRow=0,i.paging.currentPageNb=1,i.paging.setPagingInfo(this.validRowsIndex)):this.applyProps(),this.onAfterFilter&&this.onAfterFilter.call(null,this)}}},{key:"applyProps",value:function(){var t=this.Mod;this.hasVisibleRows&&this.enforceVisibility(),this.hasExtension("colOps")&&this.extension("colOps").calc(),this.linkedFilters&&this.linkFilters(),this.rowsCounter&&t.rowsCounter.refresh(this.nbVisibleRows),this.popupFilters&&t.popupFilter.closeAll(),this.noResults&&(this.nbVisibleRows>0?t.noResults.hide():t.noResults.show())}},{key:"getColValues",value:function(t){var e=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],s=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],i=arguments.length<=3||void 0===arguments[3]?[]:arguments[3];if(this.fltGrid){var a=this.tbl.rows,l=[];e&&l.push(this.getHeadersText()[t]); -for(var n=this.refRow;n0&&(r=-1!=i.indexOf(n));var o=a[n].cells,h=o.length;if(h===this.nbCells&&!r)for(var u=0;h>u;u++)if(u==t&&""===a[n].style.display){var d=this.getCellData(o[u]),f=this.colNbFormat?this.colNbFormat[t]:null,c=s?w["default"].removeNbFormat(d,f):d;l.push(c)}}return l}}},{key:"getFilterValue",value:function(t){if(this.fltGrid){var e=void 0,s=this.getFilterElement(t);if(!s)return"";var i=this.getFilterType(t);if(i!==this.fltTypeMulti&&i!==this.fltTypeCheckList)e=s.value;else if(i===this.fltTypeMulti){e="";for(var a=0,l=s.options.length;l>a;a++)s.options[a].selected&&(e=e.concat(s.options[a].value+" "+this.orOperator+" "));e=e.substr(0,e.length-4)}else i===this.fltTypeCheckList&&(null!==s.getAttribute("value")?(e=s.getAttribute("value"),e=e.substr(0,e.length-3)):e="");return e}}},{key:"getFiltersValue",value:function(){if(this.fltGrid){for(var t=[],e=0,s=this.fltIds.length;s>e;e++)t.push(f["default"].trim(f["default"].matchCase(this.getFilterValue(e),this.caseSensitive)));return t}}},{key:"getFilterId",value:function(t){return this.fltGrid?this.fltIds[t]:void 0}},{key:"getFiltersByType",value:function(t,e){if(this.fltGrid){for(var s=[],i=0,a=this.fltIds.length;a>i;i++){var l=this.getFilterType(i);if(l===f["default"].lower(t)){var n=e?i:this.fltIds[i];s.push(n)}}return s}}},{key:"getFilterElement",value:function(t){var e=this.fltIds[t];return u["default"].id(e)}},{key:"getCellsNb",value:function(){var t=arguments.length<=0||void 0===arguments[0]?0:arguments[0],e=this.tbl.rows[t];return e.cells.length}},{key:"getRowsNb",value:function(t){var e=v["default"].isUndef(this.refRow)?0:this.refRow,s=this.tbl.rows.length;return t&&(e=0),parseInt(s-e,10)}},{key:"getCellData",value:function(t){var e=t.cellIndex;return this.customCellData&&-1!=this.customCellDataCols.indexOf(e)?this.customCellData.call(null,this,t,e):u["default"].getText(t)}},{key:"getTableData",value:function(){var t=arguments.length<=0||void 0===arguments[0]?!1:arguments[0],e=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],s=this.tbl.rows,i=[];if(t){var a=this.getHeadersText(e);i.push([this.getHeadersRowIndex(),a])}for(var l=this.refRow;lo;o++)if(!(e&&this.hasExtension("colsVisibility")&&this.extension("colsVisibility").isColHidden(o))){var u=this.getCellData(r[o]);n[1].push(u)}i.push(n)}return i}},{key:"getFilteredData",value:function(){var t=arguments.length<=0||void 0===arguments[0]?!1:arguments[0],e=arguments.length<=1||void 0===arguments[1]?!1:arguments[1];if(!this.validRowsIndex)return[];var s=this.tbl.rows,i=[];if(t){var a=this.getHeadersText(e);i.push([this.getHeadersRowIndex(),a])}for(var l=this.getValidRows(!0),n=0;na;a++){var n=s[a],r=n[1],o=r[t];i.push(o)}return i}},{key:"getRowDisplay",value:function(t){return v["default"].isObj(t)?t.style.display:null}},{key:"validateRow",value:function(t,e){var s=this.tbl.rows[t];if(s&&"boolean"==typeof e){this.hasVisibleRows&&-1!==this.visibleRows.indexOf(t)&&(e=!0);var i=e?"":"none",a=e?"true":"false";s.style.display=i,this.paging&&s.setAttribute("validRow",a)}}},{key:"validateAllRows",value:function(){if(this._hasGrid){this.validRowsIndex=[];for(var t=this.refRow;tl;l++){var r=s.options[l];(""===a||""===a[0])&&(r.selected=!1),""===r.value&&(r.selected=!1),""!==r.value&&m["default"].has(a,r.value,!0)&&(r.selected=!0)}else if(i===this.fltTypeCheckList){e=f["default"].matchCase(e,this.caseSensitive);var o=e.split(" "+this.orOperator+" "),h=u["default"].tag(s,"li").length;s.setAttribute("value",""),s.setAttribute("indexes","");for(var d=0;h>d;d++){var c=u["default"].tag(s,"li")[d],p=u["default"].tag(c,"label")[0],g=u["default"].tag(c,"input")[0],v=f["default"].matchCase(u["default"].getText(p),this.caseSensitive);""!==v&&m["default"].has(o,v,!0)?(g.checked=!0,this.Mod.checkList.setCheckListValues(g)):(g.checked=!1,this.Mod.checkList.setCheckListValues(g))}}}}},{key:"setColWidths",value:function(t,e){function s(){for(var t=this.nbCells,s=this.colWidths,i=u["default"].tag(e,"col"),a=i.length>0,l=a?null:H.createDocumentFragment(),n=0;t>n;n++){var r=void 0;a?r=i[n]:(r=u["default"].create("col",["id",this.id+"_col_"+n]),l.appendChild(r)),r.style.width=s[n]}a||e.insertBefore(l,e.firstChild)}if(this.fltGrid&&this.hasColWidths){e=e||this.tbl;var i=void 0;i=void 0===t?"none"!=e.rows[0].style.display?0:1:t,s.call(this)}}},{key:"enforceVisibility",value:function(){if(this.hasVisibleRows)for(var t=0,e=this.visibleRows.length;e>t;t++){var s=this.visibleRows[t];s<=this.nbRows&&this.validateRow(s,!0)}}},{key:"clearFilters",value:function(){this.EvtManager(this.Evt.name.clear)}},{key:"_clearFilters",value:function(){if(this.fltGrid){this.onBeforeReset&&this.onBeforeReset.call(null,this,this.getFiltersValue());for(var t=0,e=this.fltIds.length;e>t;t++)this.setFilterValue(t,"");this.linkedFilters&&this.linkFilters(),this.rememberPageLen&&p["default"].remove(this.pgLenCookie),this.rememberPageNb&&p["default"].remove(this.pgNbCookie),this.onAfterReset&&this.onAfterReset.call(null,this)}}},{key:"clearActiveColumns",value:function(){for(var t=0,e=this.getCellsNb(this.headersRow);e>t;t++)u["default"].removeClass(this.getHeaderElement(t),this.activeColumnsCssClass)}},{key:"linkFilters",value:function(){if(this.activeFilterId){var t=this.getFiltersByType(this.fltTypeSlc,!0),e=this.getFiltersByType(this.fltTypeMulti,!0),s=this.getFiltersByType(this.fltTypeCheckList,!0),i=t.concat(e);i=i.concat(s);var a=this.activeFilterId.split("_")[0];a=a.split(this.prfxFlt)[1];for(var l=void 0,n=0,r=i.length;r>n;n++){var o=u["default"].id(this.fltIds[i[n]]);if(l=this.getFilterValue(i[n]),a!==i[n]||this.paging&&-1!=t.indexOf(i[n])&&a===i[n]||!this.paging&&(-1!=s.indexOf(i[n])||-1!=e.indexOf(i[n]))||l===this.displayAllText){if(-1!=s.indexOf(i[n])?this.Mod.checkList.checkListDiv[i[n]].innerHTML="":o.innerHTML="",this.loadFltOnDemand){var h=u["default"].createOpt(this.displayAllText,"");o&&o.appendChild(h)}-1!=s.indexOf(i[n])?this.Mod.checkList._build(i[n]):this.Mod.dropdown._build(i[n],!0),this.setFilterValue(i[n],l)}}}}},{key:"_resetGrid",value:function(){if(!this.isFirstLoad){var t=this.Mod,e=this.tbl,s=e.rows,i=this.filtersRowIndex,a=s[i];if(!this.gridLayout)if(e.tHead){var l=e.tHead.insertRow(this.filtersRowIndex);e.tHead.replaceChild(this.fltGridEl,l)}else a.parentNode.insertBefore(this.fltGridEl,a);if(this.isExternalFlt)for(var n=this.externalFltTgtIds,r=0,o=n.length;o>r;r++){var h=u["default"].id(n[r]);if(h){var d=this.externalFltEls[r];h.appendChild(d);var f=this.getFilterType(r);this.gridLayout&&""===d.innerHTML&&f!==this.fltTypeInp&&((f===this.fltTypeSlc||f===this.fltTypeMulti)&&t.dropdown.build(r),f===this.fltTypeCheckList&&t.checkList.build(r))}}this.nbFilterableRows=this.getRowsNb(),this.nbVisibleRows=this.nbFilterableRows,this.nbRows=s.length,this.popupFilters&&(this.headersRow++,t.popupFilter.reset()),this.gridLayout||u["default"].addClass(this.tbl,this.prfxTf),this._hasGrid=!0}}},{key:"isExactMatch",value:function(t){var e=this.getFilterType(t);return this.exactMatchByCol[t]||this.exactMatch||e!==this.fltTypeInp}},{key:"isImported",value:function(t,e){for(var s=!1,i=e?e:"script",a="script"==i?"src":"href",l=u["default"].tag(H,i),n=0,r=l.length;r>n;n++)if(void 0!==l[n][a]&&l[n][a].match(t)){s=!0;break}return s}},{key:"import",value:function(t,e,s,i){var a=i?i:"script",l=this.isImported(e,a);if(!l){var n=this,r=!1,o=void 0,h=u["default"].tag(H,"head")[0];o="link"===f["default"].lower(a)?u["default"].create("link",["id",t],["type","text/css"],["rel","stylesheet"],["href",e]):u["default"].create("script",["id",t],["type","text/javascript"],["src",e]),o.onload=o.onreadystatechange=function(){r||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState||(r=!0,"function"==typeof s&&s.call(null,n))},o.onerror=function(){throw new Error("TF script could not load: "+e)},h.appendChild(o)}}},{key:"hasGrid",value:function(){return this._hasGrid}},{key:"getFiltersId",value:function(){return this.fltIds||[]}},{key:"getValidRows",value:function(t){if(!t)return this.validRowsIndex;this.validRowsIndex=[];for(var e=this.refRow;e]+>/g,"");return e=e.replace(/^\s+/,"").replace(/\s+$/,"")},getFirstTextNode:function(t){for(var e=0;e1)for(var a=0;a0){var i=document.cookie,a=i.indexOf(s);if(-1!==a){a+=s.length;var l=i.indexOf(";",a);-1===l&&(l=i.length),e=unescape(i.substring(a,l))}}return e},remove:function(t){this.write(t,"",-1)},valueToArray:function(t,e){e||(e=",");var s=this.read(t),i=s.split(e);return i},getValueByIndex:function(t,e,s){s||(s=",");var i=this.valueToArray(t,s);return i[e]}}},function(t,e){"use strict";function s(t){return t&&"undefined"!=typeof Symbol&&t.constructor===Symbol?"symbol":typeof t}Object.defineProperty(e,"__esModule",{value:!0});var i=void 0;e["default"]={isObj:function(t){var e=!1;return"string"==typeof t?window[t]&&"object"===s(window[t])&&(e=!0):t&&"object"===("undefined"==typeof t?"undefined":s(t))&&(e=!0),e},isFn:function(t){return t&&t.constructor==Function},isArray:function(t){return t&&t.constructor==Array},isUndef:function(t){return t===i},isNull:function(t){return null===t},isEmpty:function(t){return this.isUndef(t)||this.isNull(t)||0===t.length}}},function(t,e,s){"use strict";function i(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0});var a=s(3),l=i(a);e["default"]={has:function(t,e,s){for(var i=void 0===s?!1:s,a=0;a2)return t;var e=void 0;return 99>=t&&t>50&&(e="19"+t),(50>t||"00"===t)&&(e="20"+t),e}function i(t){if(void 0===t)return 0;for(var e=void 0,s=["january","february","march","april","may","june","july","august","september","october","november","december","jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],i=0;i11||23>e)&&(e-=12),1>e||e>12?0:e}Object.defineProperty(e,"__esModule",{value:!0}),e["default"]={isValid:function(t,e){if(e||(e="DMY"),e=e.toUpperCase(),3!=e.length&&"DDMMMYYYY"===e){var s=this.format(t,e);t=s.getDate()+"/"+(s.getMonth()+1)+"/"+s.getFullYear(),e="DMY"}(-1===e.indexOf("M")||-1===e.indexOf("D")||-1===e.indexOf("Y"))&&(e="DMY");var i=void 0,a=void 0;if("Y"===e.substring(0,1)?(i=/^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/,a=/^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/):"Y"===e.substring(1,2)?(i=/^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/,a=/^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/):(i=/^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/,a=/^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/),i.test(t)===!1&&a.test(t)===!1)return!1;var l=t.split(RegExp.$1),n=void 0,r=void 0,o=void 0;n="M"===e.substring(0,1)?l[0]:"M"===e.substring(1,2)?l[1]:l[2],r="D"===e.substring(0,1)?l[0]:"D"===e.substring(1,2)?l[1]:l[2],o="Y"===e.substring(0,1)?l[0]:"Y"===e.substring(1,2)?l[1]:l[2],parseInt(o,10)<=50&&(o=(parseInt(o,10)+2e3).toString()),parseInt(o,10)<=99&&(o=(parseInt(o,10)+1900).toString());var h=new Date(parseInt(o,10),parseInt(n,10)-1,parseInt(r,10),0,0,0,0);return parseInt(r,10)!=h.getDate()?!1:parseInt(n,10)-1!=h.getMonth()?!1:!0},format:function(t,e){if(e||(e="DMY"),!t||""===t)return new Date(1001,0,1);var a=void 0,l=void 0;switch(e.toUpperCase()){case"DDMMMYYYY":l=t.replace(/[- \/.]/g," ").split(" "),a=new Date(s(l[2]),i(l[1])-1,l[0]);break;case"DMY":l=t.replace(/^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/,"$1 $3 $5").split(" "),a=new Date(s(l[2]),l[1]-1,l[0]);break;case"MDY":l=t.replace(/^(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])([- \/.])((\d\d)?\d\d)$/,"$1 $3 $5").split(" "),a=new Date(s(l[2]),l[0]-1,l[1]);break;case"YMD":l=t.replace(/^((\d\d)?\d\d)([- \/.])(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])$/,"$1 $4 $6").split(" "),a=new Date(s(l[0]),l[1]-1,l[2]);break;default:l=t.replace(/^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/,"$1 $3 $5").split(" "),a=new Date(s(l[2]),l[1]-1,l[0])}return a}}},function(t,e,s){"use strict";function i(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0});var a=s(3),l=i(a);e["default"]={removeNbFormat:function(t,e){if(t){e||(e="us");var s=t;return s="us"===l["default"].lower(e)?+s.replace(/[^\d\.-]/g,""):+s.replace(/[^\d\,-]/g,"").replace(",",".")}}}},function(t,e,s){"use strict";function i(t){return t&&t.__esModule?t:{"default":t}}function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var l=function(){function t(t,e){for(var s=0;s0&&i.removeChild(R[0]),this.headTbl.style.tableLayout="fixed",i.style.tableLayout="fixed",this.headTbl.cellPadding=i.cellPadding,this.headTbl.cellSpacing=i.cellSpacing,e.setColWidths(0,this.headTbl),i.style.width="",this.headTbl.style.width=i.clientWidth+"px",p["default"].add(this.tblCont,"scroll",function(e){var s=p["default"].target(e),i=s.scrollLeft;t.headTblCont.scrollLeft=i});var F=(s.extensions||[]).filter(function(t){return"sort"===t.name});1===F.length&&(F[0].async_sort=!0,F[0].trigger_ids=g),this.tblHasColTag=u["default"].tag(i,"col").length>0?!0:!1;var P=function(){for(var t=e.nbCells-1;t>=0;t--){var s=u["default"].create("col",["id",e.id+"_col_"+t]);i.insertBefore(s,i.firstChild),s.style.width=e.colWidths[t],this.gridColElms[t]=s}this.tblHasColTag=!0};if(this.tblHasColTag)for(var I=u["default"].tag(i,"col"),S=0;S',e.popUpDivCssClass=i.popup_div_css_class||"popUpFilter",e.onBeforePopUpOpen=u["default"].isFn(i.on_before_popup_filter_open)?i.on_before_popup_filter_open:null,e.onAfterPopUpOpen=u["default"].isFn(i.on_after_popup_filter_open)?i.on_after_popup_filter_open:null,e.onBeforePopUpClose=u["default"].isFn(i.on_before_popup_filter_close)?i.on_before_popup_filter_close:null,e.onAfterPopUpClose=u["default"].isFn(i.on_after_popup_filter_close)?i.on_after_popup_filter_close:null,e.popUpFltSpans=[],e.popUpFltImgs=[],e.popUpFltElms=e.popUpFltElmCache||[],e.popUpFltAdjustToContainer=!0,e.prfxPopUpSpan="popUpSpan_",e.prfxPopUpDiv="popUpDiv_",e}return n(s,e),r(s,[{key:"onClick",value:function(e){var s=e||t.event,i=s.target.parentNode,a=parseInt(i.getAttribute("ci"),10);if(this.closeAll(a),this.toggle(a),this.popUpFltAdjustToContainer){var l=this.popUpFltElms[a],n=this.tf.getHeaderElement(a),r=.95*n.clientWidth;l.style.width=parseInt(r,10)+"px"}p["default"].cancel(s),p["default"].stop(s)}},{key:"init",value:function(){var t=this;if(!this.initialized){for(var e=this.tf,s=0;sC;C++)if(t===C&&(!e||e&&a.disableExcludedOptions)||t==C&&e&&(""===o[m].style.display&&!a.paging||a.paging&&(!a.validRowsIndex||a.validRowsIndex&&-1!=a.validRowsIndex.indexOf(m))&&(void 0===f||f==t||f!=t&&-1!=a.validRowsIndex.indexOf(m)))){var w=a.getCellData(_[C]),x=d["default"].matchCase(w,u);if(h["default"].has(this.opts,x,u)||this.opts.push(w),e&&a.disableExcludedOptions){var T=b[C];T||(T=a.getFilteredDataCol(C)),h["default"].has(T,x,u)||h["default"].has(v,x,u)||this.isFirstLoad||v.push(w)}}}if(this.isCustom){var k=a.getCustomOptions(t);this.opts=k[0],this.optsTxt=k[1]}if(a.sortSlc&&!this.isCustom&&(u?(this.opts.sort(),v&&v.sort()):(this.opts.sort(c["default"].ignoreCase),v&&v.sort(c["default"].ignoreCase))),a.sortNumAsc&&-1!=a.sortNumAsc.indexOf(t))try{this.opts.sort(numSortAsc),v&&v.sort(numSortAsc),this.isCustom&&this.optsTxt.sort(numSortAsc)}catch(R){this.opts.sort(),v&&v.sort(),this.isCustom&&this.optsTxt.sort()}if(a.sortNumDesc&&-1!=a.sortNumDesc.indexOf(t))try{this.opts.sort(numSortDesc),v&&v.sort(numSortDesc),this.isCustom&&this.optsTxt.sort(numSortDesc)}catch(R){this.opts.sort(),v&&v.sort(),this.isCustom&&this.optsTxt.sort()}this.addOptions(t,n,e,v,p,g)}}},{key:"addOptions",value:function(t,e,s,i,a,l){var n=this.tf,o=d["default"].lower(this.slcFillingMethod),u=e.value;e.innerHTML="",e=this.addFirstOption(e);for(var f=0;f"+p+""}else{var b;b=n.loadFltOnDemand&&u===this.opts[f]&&n.getFilterType(t)===n.fltTypeSlc?r["default"].createOpt(p,c,!0):n.getFilterType(t)!==n.fltTypeMulti?r["default"].createOpt(p,c," "!==a[t]&&c===a[t]?!0:!1):r["default"].createOpt(p,c,h["default"].has(l,d["default"].matchCase(this.opts[f],n.matchCase),n.matchCase)||-1!==l.toString().indexOf(c)?!0:!1),g&&(b.disabled=!0),e.appendChild(b)}}"innerhtml"===o&&(e.innerHTML+=this.slcInnerHtml),e.setAttribute("filled","1")}},{key:"addFirstOption",value:function(t){var e=this.tf,s=d["default"].lower(this.slcFillingMethod);if("innerhtml"===s)this.slcInnerHtml+='";else{var i=r["default"].createOpt(this.enableSlcResetFilter?e.displayAllText:"","");if(this.enableSlcResetFilter||(i.style.display="none"),t.appendChild(i),e.enableEmptyOption){var a=r["default"].createOpt(e.emptyText,e.emOperator);t.appendChild(a)}if(e.enableNonEmptyOption){var l=r["default"].createOpt(e.nonEmptyText,e.nmOperator);t.appendChild(l)}}return t}}]),t}()},function(t,e,s){"use strict";function i(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0});var a=s(3),l=i(a);e["default"]={ignoreCase:function(t,e){var s=l["default"].lower(t),i=l["default"].lower(e);return i>s?-1:s>i?1:0}}},function(t,e,s){"use strict";function i(t){return t&&t.__esModule?t:{"default":t}}function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var l=function(){function t(t,e){for(var s=0;s_;_++)if(t===_&&(!a.linkedFilters||a.linkedFilters&&a.disableExcludedOptions)||t===_&&a.linkedFilters&&(""===u[v].style.display&&!a.paging||a.paging&&(!f||f===t||f!=t&&-1!=a.validRowsIndex.indexOf(v)))){var y=a.getCellData(b[_]),C=d["default"].matchCase(y,a.matchCase);h["default"].has(this.opts,C,a.matchCase)||this.opts.push(y);var w=p[_];a.linkedFilters&&a.disableExcludedOptions&&(w||(w=a.getFilteredDataCol(_)),h["default"].has(w,C,a.matchCase)||h["default"].has(this.excludedOpts,C,a.matchCase)||a.isFirstLoad||this.excludedOpts.push(y))}}if(this.isCustom){var x=a.getCustomOptions(t);this.opts=x[0],this.optsTxt=x[1]}if(a.sortSlc&&!this.isCustom&&(a.matchCase?(this.opts.sort(),this.excludedOpts&&this.excludedOpts.sort()):(this.opts.sort(c["default"].ignoreCase),this.excludedOpts&&this.excludedOpts.sort(c["default"].ignoreCase))),a.sortNumAsc&&-1!=a.sortNumAsc.indexOf(t))try{this.opts.sort(numSortAsc),this.excludedOpts&&this.excludedOpts.sort(numSortAsc),this.isCustom&&this.optsTxt.sort(numSortAsc)}catch(T){this.opts.sort(),this.excludedOpts&&this.excludedOpts.sort(),this.isCustom&&this.optsTxt.sort()}if(a.sortNumDesc&&-1!=a.sortNumDesc.indexOf(t))try{this.opts.sort(numSortDesc),this.excludedOpts&&this.excludedOpts.sort(numSortDesc),this.isCustom&&this.optsTxt.sort(numSortDesc)}catch(T){this.opts.sort(),this.excludedOpts&&this.excludedOpts.sort(),this.isCustom&&this.optsTxt.sort()}this.addChecks(t,o,a.separator),a.loadFltOnDemand&&(n.innerHTML=""),n.appendChild(o),n.setAttribute("filled","1")}}},{key:"addChecks",value:function(t,e){var s=this,i=this.tf,a=this.addTChecks(t,e),l=[],n=i.feature("store"),o=n?n.getFilterValues(i.fltsValuesCookie)[t]:null;o&&d["default"].trim(o).length>0&&(i.hasCustomSlcOptions&&-1!=i.customSlcOptions.cols.indexOf(t)?l.push(o):l=o.split(" "+i.orOperator+" "));for(var u=0;u0?1:0),l=a+i.pagingLength-1<=e.nbVisibleRows?a+i.pagingLength-1:e.nbVisibleRows;s=a+this.fromToTextSeparator+l+this.overText+e.nbVisibleRows}}else s=t&&""!==t?t:e.nbFilterableRows-e.nbHiddenRows;this.rowsCounterSpan.innerHTML=s,this.onAfterRefreshCounter&&this.onAfterRefreshCounter.call(null,e,this.rowsCounterSpan,s)}}},{key:"destroy",value:function(){this.initialized&&(!this.rowsCounterTgtId&&this.rowsCounterDiv?u["default"].remove(this.rowsCounterDiv):u["default"].id(this.rowsCounterTgtId).innerHTML="",this.rowsCounterSpan=null,this.rowsCounterDiv=null,this.initialized=!1)}}]),e}(o.Feature)},function(t,e,s){"use strict";function i(t){return t&&t.__esModule?t:{"default":t}}function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function n(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var r=function(){function t(t,e){for(var s=0;s",s.btnPrevPageText=i.btn_prev_page_text||"<",s.btnLastPageText=i.btn_last_page_text||">|",s.btnFirstPageText=i.btn_first_page_text||"|<",s.btnNextPageHtml=i.btn_next_page_html||(t.enableIcons?'':null),s.btnPrevPageHtml=i.btn_prev_page_html||(t.enableIcons?'':null),s.btnFirstPageHtml=i.btn_first_page_html||(t.enableIcons?'':null),s.btnLastPageHtml=i.btn_last_page_html||(t.enableIcons?'':null),s.pageText=i.page_text||" Page ",s.ofText=i.of_text||" of ",s.nbPgSpanCssClass=i.nb_pages_css_class||"nbpg",s.hasPagingBtns=i.paging_btns===!1?!1:!0,s.pageSelectorType=i.page_selector_type||t.fltTypeSlc,s.onBeforeChangePage=c["default"].isFn(i.on_before_change_page)?i.on_before_change_page:null,s.onAfterChangePage=c["default"].isFn(i.on_after_change_page)?i.on_after_change_page:null,s.prfxSlcPages="slcPages_",s.prfxSlcResults="slcResults_",s.prfxSlcResultsTxt="slcResultsTxt_",s.prfxBtnNextSpan="btnNextSpan_",s.prfxBtnPrevSpan="btnPrevSpan_",s.prfxBtnLastSpan="btnLastSpan_",s.prfxBtnFirstSpan="btnFirstSpan_",s.prfxBtnNext="btnNext_",s.prfxBtnPrev="btnPrev_",s.prfxBtnLast="btnLast_",s.prfxBtnFirst="btnFirst_",s.prfxPgSpan="pgspan_",s.prfxPgBeforeSpan="pgbeforespan_",s.prfxPgAfterSpan="pgafterspan_";var a=s.refRow,r=s.nbRows;s.nbPages=Math.ceil((r-a)/s.pagingLength);var o=s;return s.evt={slcIndex:function(){return o.pageSelectorType===t.fltTypeSlc?o.pagingSlc.options.selectedIndex:parseInt(o.pagingSlc.value,10)-1},nbOpts:function(){return o.pageSelectorType===t.fltTypeSlc?parseInt(o.pagingSlc.options.length,10)-1:o.nbPages-1},next:function(){var t=o.evt.slcIndex()0?o.evt.slcIndex()-1:o.evt.nbOpts();o.changePage(t)},last:function(){o.changePage(o.evt.nbOpts())},first:function(){o.changePage(0)},_detectKey:function(e){var s=b["default"].keyCode(e);13===s&&(t.sorted?(t.filter(),o.changePage(o.evt.slcIndex())):o.changePage(),this.blur())},slcPagesChange:null,nextEvt:null,prevEvt:null,lastEvt:null,firstEvt:null},s}return r(e,t),o(e,[{key:"init",value:function(){var t,e=this,s=this.tf,i=this.evt;if(!this.initialized){this.hasResultsPerPage&&(this.resultsPerPage.length<2?this.hasResultsPerPage=!1:(this.pagingLength=this.resultsPerPage[1][0],this.setResultsPerPage())),i.slcPagesChange=function(t){var s=t.target;e.changePage(s.selectedIndex)},this.pageSelectorType===s.fltTypeSlc&&(t=d["default"].create(s.fltTypeSlc,["id",this.prfxSlcPages+s.id]),t.className=this.pgSlcCssClass,b["default"].add(t,"change",i.slcPagesChange)),this.pageSelectorType===s.fltTypeInp&&(t=d["default"].create(s.fltTypeInp,["id",this.prfxSlcPages+s.id],["value",this.currentPageNb]),t.className=this.pgInpCssClass,b["default"].add(t,"keypress",i._detectKey));var a=d["default"].create("span",["id",this.prfxBtnNextSpan+s.id]),l=d["default"].create("span",["id",this.prfxBtnPrevSpan+s.id]),n=d["default"].create("span",["id",this.prfxBtnLastSpan+s.id]),r=d["default"].create("span",["id",this.prfxBtnFirstSpan+s.id]);if(this.hasPagingBtns){if(this.btnNextPageHtml)a.innerHTML=this.btnNextPageHtml,b["default"].add(a,"click",i.next);else{var o=d["default"].create(s.fltTypeInp,["id",this.prfxBtnNext+s.id],["type","button"],["value",this.btnNextPageText],["title","Next"]);o.className=this.btnPageCssClass,b["default"].add(o,"click",i.next),a.appendChild(o)}if(this.btnPrevPageHtml)l.innerHTML=this.btnPrevPageHtml,b["default"].add(l,"click",i.prev);else{var h=d["default"].create(s.fltTypeInp,["id",this.prfxBtnPrev+s.id],["type","button"],["value",this.btnPrevPageText],["title","Previous"]);h.className=this.btnPageCssClass,b["default"].add(h,"click",i.prev),l.appendChild(h)}if(this.btnLastPageHtml)n.innerHTML=this.btnLastPageHtml,b["default"].add(n,"click",i.last);else{var u=d["default"].create(s.fltTypeInp,["id",this.prfxBtnLast+s.id],["type","button"],["value",this.btnLastPageText],["title","Last"]);u.className=this.btnPageCssClass,b["default"].add(u,"click",i.last),n.appendChild(u)}if(this.btnFirstPageHtml)r.innerHTML=this.btnFirstPageHtml,b["default"].add(r,"click",i.first);else{var f=d["default"].create(s.fltTypeInp,["id",this.prfxBtnFirst+s.id],["type","button"],["value",this.btnFirstPageText],["title","First"]);f.className=this.btnPageCssClass,b["default"].add(f,"click",i.first),r.appendChild(f)}}this.pagingTgtId||s.setToolbar();var c=this.pagingTgtId?d["default"].id(this.pagingTgtId):s.mDiv;c.appendChild(r),c.appendChild(l);var p=d["default"].create("span",["id",this.prfxPgBeforeSpan+s.id]);p.appendChild(d["default"].text(this.pageText)),p.className=this.nbPgSpanCssClass,c.appendChild(p),c.appendChild(t);var g=d["default"].create("span",["id",this.prfxPgAfterSpan+s.id]);g.appendChild(d["default"].text(this.ofText)),g.className=this.nbPgSpanCssClass,c.appendChild(g);var v=d["default"].create("span",["id",this.prfxPgSpan+s.id]);v.className=this.nbPgSpanCssClass,v.appendChild(d["default"].text(" "+this.nbPages+" ")),c.appendChild(v),c.appendChild(a),c.appendChild(n),this.pagingSlc=d["default"].id(this.prfxSlcPages+s.id),s.rememberGridValues||this.setPagingInfo(),s.fltGrid||(s.validateAllRows(),this.setPagingInfo(s.validRowsIndex)),this.initialized=!0}}},{key:"reset",value:function(){var t=arguments.length<=0||void 0===arguments[0]?!1:arguments[0],e=this.tf;e.hasGrid()&&!this.isEnabled()&&(this.enable(),this.init(),e.resetValues(),t&&e.filter())}},{key:"setPagingInfo",value:function(){var t=arguments.length<=0||void 0===arguments[0]?[]:arguments[0],e=this.tf,s=e.tbl.rows,i=this.pagingTgtId?d["default"].id(this.pagingTgtId):e.mDiv,a=d["default"].id(this.prfxPgSpan+e.id);if(e.validRowsIndex=t,0===t.length)for(var l=e.refRow;l0)if(i.style.visibility="visible",this.pageSelectorType===e.fltTypeSlc)for(var o=0;on;n++){var o=e.validRowsIndex[n],h=i[o],u=h.getAttribute("validRow");n>=a&&l>n?((c["default"].isNull(u)||Boolean("true"===u))&&(h.style.display=""),e.alternateRows&&s&&s.setRowBg(o,n)):(h.style.display="none",e.alternateRows&&s&&s.removeRowBg(o))}e.nbVisibleRows=e.validRowsIndex.length,e.applyProps()}},{key:"getPage",value:function(){return this.currentPageNb}},{key:"setPage",value:function(t){var e=this.tf;if(e.hasGrid()&&this.isEnabled()){var s=this.evt,i="undefined"==typeof t?"undefined":a(t);if("string"===i)switch(g["default"].lower(t)){case"next":s.next();break;case"previous":s.prev();break;case"last":s.last();break;case"first":s.first();break;default:s.next()}else"number"===i&&this.changePage(t-1); -}}},{key:"setResultsPerPage",value:function(){var t=this,e=this.tf,s=this.evt;if((e.hasGrid()||e.isFirstLoad)&&!this.resultsPerPageSlc&&this.resultsPerPage){s.slcResultsChange=function(e){t.changeResultsPerPage(),e.target.blur()};var i=d["default"].create(e.fltTypeSlc,["id",this.prfxSlcResults+e.id]);i.className=this.resultsSlcCssClass;var a=this.resultsPerPage[0],l=this.resultsPerPage[1],n=d["default"].create("span",["id",this.prfxSlcResultsTxt+e.id]);n.className=this.resultsSpanCssClass,this.resultsPerPageTgtId||e.setToolbar();var r=this.resultsPerPageTgtId?d["default"].id(this.resultsPerPageTgtId):e.rDiv;n.appendChild(d["default"].text(a));var o=e.feature("help");o&&o.btn?(o.btn.parentNode.insertBefore(n,o.btn),o.btn.parentNode.insertBefore(i,o.btn)):(r.appendChild(n),r.appendChild(i));for(var h=0;h=0&&t<=this.nbPages-1&&(this.onBeforeChangePage&&this.onBeforeChangePage.call(null,this,t),this.currentPageNb=parseInt(t,10)+1,this.pageSelectorType===e.fltTypeSlc?this.pagingSlc.options[t].selected=!0:this.pagingSlc.value=this.currentPageNb,e.rememberPageNb&&e.feature("store").savePageNb(e.pgNbCookie),this.startPagingRow=this.pageSelectorType===e.fltTypeSlc?this.pagingSlc.value:t*this.pagingLength,this.groupByPage(),this.onAfterChangePage&&this.onAfterChangePage.call(null,this,t)))}},{key:"_changeResultsPerPage",value:function(){var t=this.tf;if(this.isEnabled()){var e=this.resultsPerPageSlc,s=this.pageSelectorType===t.fltTypeSlc?this.pagingSlc.selectedIndex:parseInt(this.pagingSlc.value-1,10);if(this.pagingLength=parseInt(e.options[e.selectedIndex].value,10),this.startPagingRow=this.pagingLength*s,!isNaN(this.pagingLength)){if(this.startPagingRow>=t.nbFilterableRows&&(this.startPagingRow=t.nbFilterableRows-this.pagingLength),this.setPagingInfo(),this.pageSelectorType===t.fltTypeSlc){var i=this.pagingSlc.options.length-1<=s?this.pagingSlc.options.length-1:s;this.pagingSlc.options[i].selected=!0}t.rememberPageLen&&t.feature("store").savePageLength(t.pgLenCookie)}}}},{key:"_resetPage",value:function(t){var e=this.tf,s=e.feature("store").getPageNb(t);""!==s&&this.changePage(s-1)}},{key:"_resetPageLength",value:function(t){var e=this.tf;if(this.isEnabled()){var s=e.feature("store").getPageLength(t);""!==s&&(this.resultsPerPageSlc.options[s].selected=!0,this.changeResultsPerPage())}}},{key:"destroy",value:function(){var t=this.tf;if(this.initialized){var e=d["default"].id(this.prfxBtnNextSpan+t.id),s=d["default"].id(this.prfxBtnPrevSpan+t.id),i=d["default"].id(this.prfxBtnLastSpan+t.id),a=d["default"].id(this.prfxBtnFirstSpan+t.id),l=d["default"].id(this.prfxPgBeforeSpan+t.id),n=d["default"].id(this.prfxPgAfterSpan+t.id),r=d["default"].id(this.prfxPgSpan+t.id),o=this.evt;this.pagingSlc&&(this.pageSelectorType===t.fltTypeSlc?b["default"].remove(this.pagingSlc,"change",o.slcPagesChange):this.pageSelectorType===t.fltTypeInp&&b["default"].remove(this.pagingSlc,"keypress",o._detectKey),d["default"].remove(this.pagingSlc)),e&&(b["default"].remove(e,"click",o.next),d["default"].remove(e)),s&&(b["default"].remove(s,"click",o.prev),d["default"].remove(s)),i&&(b["default"].remove(i,"click",o.last),d["default"].remove(i)),a&&(b["default"].remove(a,"click",o.first),d["default"].remove(a)),l&&d["default"].remove(l),n&&d["default"].remove(n),r&&d["default"].remove(r),this.hasResultsPerPage&&this.removeResultsPerPage(),this.pagingSlc=null,this.nbPages=0,this.disable(),this.initialized=!1}}}]),e}(h.Feature)},function(t,e,s){"use strict";function i(t){return t&&t.__esModule?t:{"default":t}}function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function n(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var r=function(){function t(t,e){for(var s=0;s':null),s.prfxResetSpan="resetspan_",s}return n(e,t),r(e,[{key:"onClick",value:function(){this.isEnabled()&&this.tf.clearFilters()}},{key:"init",value:function(){var t=this,e=this.tf;if(!this.initialized){var s=u["default"].create("span",["id",this.prfxResetSpan+e.id]);this.btnResetTgtId||e.setToolbar();var i=this.btnResetTgtId?u["default"].id(this.btnResetTgtId):e.rDiv;if(i.appendChild(s),this.btnResetHtml){s.innerHTML=this.btnResetHtml;var a=s.firstChild;f["default"].add(a,"click",function(){t.onClick()})}else{var l=u["default"].create("a",["href","javascript:void(0);"]);l.className=e.btnResetCssClass,l.appendChild(u["default"].text(this.btnResetText)),s.appendChild(l),f["default"].add(l,"click",function(){t.onClick()})}this.btnResetEl=s.firstChild,this.initialized=!0}}},{key:"destroy",value:function(){var t=this.tf;if(this.initialized){var e=u["default"].id(this.prfxResetSpan+t.id);e&&u["default"].remove(e),this.btnResetEl=null,this.initialized=!1}}}]),e}(o.Feature)},function(t,e,s){"use strict";function i(t){return t&&t.__esModule?t:{"default":t}}function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function n(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var r=function(){function t(t,e){for(var s=0;s<, <=, >, >=, =, *, !, {, }, ||,&&, [empty], [nonempty], rgx:
Learn more
',s.instrHtml=i.help_instructions_html||null,s.btnText=i.help_instructions_btn_text||"?",s.btnHtml=i.help_instructions_btn_html||null,s.btnCssClass=i.help_instructions_btn_css_class||"helpBtn",s.contCssClass=i.help_instructions_container_css_class||"helpCont",s.btn=null,s.cont=null,s.defaultHtml='

TableFilter v'+t.version+'

'+p+"
©2015-"+t.year+' Max Guglielmi
',s.prfxHelpSpan="helpSpan_",s.prfxHelpDiv="helpDiv_",s}return n(e,t),r(e,[{key:"init",value:function(){var t=this;if(!this.initialized){var e=this.tf,s=u["default"].create("span",["id",this.prfxHelpSpan+e.id]),i=u["default"].create("div",["id",this.prfxHelpDiv+e.id]);this.tgtId||e.setToolbar();var a=this.tgtId?u["default"].id(this.tgtId):e.rDiv;a.appendChild(s);var l=this.contTgtId?u["default"].id(this.contTgtId):s;if(this.btnHtml){s.innerHTML=this.btnHtml;var n=s.firstChild;f["default"].add(n,"click",function(){t.toggle()}),l.appendChild(i)}else{l.appendChild(i);var r=u["default"].create("a",["href","javascript:void(0);"]);r.className=this.btnCssClass,r.appendChild(u["default"].text(this.btnText)),s.appendChild(r),f["default"].add(r,"click",function(){t.toggle()})}this.instrHtml?(this.contTgtId&&l.appendChild(i),i.innerHTML=this.instrHtml,this.contTgtId||(i.className=this.contCssClass,f["default"].add(i,"dblclick",function(){t.toggle()}))):(i.innerHTML=this.instrText,i.className=this.contCssClass,f["default"].add(i,"dblclick",function(){t.toggle()})),i.innerHTML+=this.defaultHtml,f["default"].add(i,"click",function(){t.toggle()}),this.cont=i,this.btn=s,this.initialized=!0}}},{key:"toggle",value:function(){if(this.enabled!==!1){var t=this.cont.style.display;""===t||"none"===t?this.cont.style.display="inline":this.cont.style.display="none"}}},{key:"destroy",value:function(){this.initialized&&(u["default"].remove(this.btn),this.btn=null,this.cont&&(u["default"].remove(this.cont),this.cont=null,this.initialized=!1))}}]),e}(o.Feature)},function(t,e,s){"use strict";function i(t){return t&&t.__esModule?t:{"default":t}}function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function n(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var r=function(){function t(t,e){for(var s=0;sn;n++){var r=s?n:e[n];this.setRowBg(r,l),l++}this.initialized=!0}}},{key:"setRowBg",value:function(t,e){if(this.isEnabled()&&!isNaN(t)){var s=this.tf.tbl.rows,i=isNaN(e)?t:e;this.removeRowBg(t),u["default"].addClass(s[t],i%2?this.evenCss:this.oddCss)}}},{key:"removeRowBg",value:function(t){if(!isNaN(t)){var e=this.tf.tbl.rows;u["default"].removeClass(e[t],this.oddCss),u["default"].removeClass(e[t],this.evenCss)}}},{key:"destroy",value:function(){if(this.initialized){for(var t=this.tf.refRow;tr;r++)s[r]=arguments[r];if(0!==s.length){if(this.id=null,this.version="0.1.9",this.year=(new Date).getFullYear(),this.tbl=null,this.startRow=null,this.refRow=null,this.headersRow=null,this.cfg={},this.nbFilterableRows=null,this.nbRows=null,this.nbCells=null,this._hasGrid=!1,s.forEach(function(t){var i="undefined"==typeof t?"undefined":n(t);"object"===i&&t&&"TABLE"===t.nodeName?(e.tbl=t,e.id=t.id||"tf_"+(new Date).getTime()+"_"):"string"===i?(e.id=t,e.tbl=h["default"].id(t)):"number"===i?e.startRow=t:"object"===i&&(e.cfg=t)}),!this.tbl||"TABLE"!=this.tbl.nodeName||0===this.getRowsNb())throw new Error("Could not instantiate TableFilter: HTML table not found.");var a=this.cfg;this.emitter=new y.Emitter,this.refRow=null===this.startRow?2:this.startRow+1;try{this.nbCells=this.getCellsNb(this.refRow)}catch(u){this.nbCells=this.getCellsNb(0)}this.basePath=a.base_path||"tablefilter/",this.fltTypeInp="input",this.fltTypeSlc="select",this.fltTypeMulti="multiple",this.fltTypeCheckList="checklist",this.fltTypeNone="none",this.fltGrid=a.grid===!1?!1:!0,this.gridLayout=Boolean(a.grid_layout),this.filtersRowIndex=isNaN(a.filters_row_index)?0:a.filters_row_index,this.headersRow=isNaN(a.headers_row_index)?0===this.filtersRowIndex?1:0:a.headers_row_index,this.fltCellTag="th"!==a.filters_cell_tag||"td"!==a.filters_cell_tag?"td":a.filters_cell_tag,this.fltIds=[],this.fltElms=[],this.searchArgs=null,this.validRowsIndex=[],this.fltGridEl=null,this.infDiv=null,this.lDiv=null,this.rDiv=null,this.mDiv=null,this.infDivCssClass=a.inf_div_css_class||"inf",this.lDivCssClass=a.left_div_css_class||"ldiv",this.rDivCssClass=a.right_div_css_class||"rdiv",this.mDivCssClass=a.middle_div_css_class||"mdiv",this.contDivCssClass=a.content_div_css_class||"cont",this.stylePath=a.style_path||this.basePath+"style/",this.stylesheet=a.stylesheet||this.stylePath+"tablefilter.css",this.stylesheetId=this.id+"_style",this.fltsRowCssClass=a.flts_row_css_class||"fltrow",this.enableIcons=a.enable_icons===!1?!1:!0,this.alternateRows=Boolean(a.alternate_rows),this.hasColWidths=p["default"].isArray(a.col_widths),this.colWidths=this.hasColWidths?a.col_widths:null,this.fltCssClass=a.flt_css_class||"flt",this.fltMultiCssClass=a.flt_multi_css_class||"flt_multi",this.fltSmallCssClass=a.flt_small_css_class||"flt_s",this.singleFltCssClass=a.single_flt_css_class||"single_flt",this.enterKey=a.enter_key===!1?!1:!0,this.onBeforeFilter=p["default"].isFn(a.on_before_filter)?a.on_before_filter:null,this.onAfterFilter=p["default"].isFn(a.on_after_filter)?a.on_after_filter:null,this.caseSensitive=Boolean(a.case_sensitive),this.hasExactMatchByCol=p["default"].isArray(a.columns_exact_match),this.exactMatchByCol=this.hasExactMatchByCol?a.columns_exact_match:[],this.exactMatch=Boolean(a.exact_match),this.linkedFilters=Boolean(a.linked_filters),this.disableExcludedOptions=Boolean(a.disable_excluded_options),this.activeFlt=null,this.activeFilterId=null,this.hasVisibleRows=Boolean(a.rows_always_visible),this.visibleRows=this.hasVisibleRows?a.rows_always_visible:[],this.isExternalFlt=Boolean(a.external_flt_grid),this.externalFltTgtIds=a.external_flt_grid_ids||[],this.externalFltEls=[],this.execDelay=isNaN(a.exec_delay)?100:parseInt(a.exec_delay,10),this.onFiltersLoaded=p["default"].isFn(a.on_filters_loaded)?a.on_filters_loaded:null,this.singleSearchFlt=Boolean(a.single_filter),this.onRowValidated=p["default"].isFn(a.on_row_validated)?a.on_row_validated:null,this.customCellDataCols=a.custom_cell_data_cols?a.custom_cell_data_cols:[],this.customCellData=p["default"].isFn(a.custom_cell_data)?a.custom_cell_data:null,this.watermark=a.watermark||"",this.isWatermarkArray=p["default"].isArray(this.watermark),this.toolBarTgtId=a.toolbar_target_id||null,this.help=p["default"].isUndef(a.help_instructions)?void 0:Boolean(a.help_instructions),this.popupFilters=Boolean(a.popup_filters),this.markActiveColumns=Boolean(a.mark_active_columns),this.activeColumnsCssClass=a.active_columns_css_class||"activeHeader",this.onBeforeActiveColumn=p["default"].isFn(a.on_before_active_column)?a.on_before_active_column:null,this.onAfterActiveColumn=p["default"].isFn(a.on_after_active_column)?a.on_after_active_column:null,this.displayAllText=a.display_all_text||"Clear",this.enableEmptyOption=Boolean(a.enable_empty_option),this.emptyText=a.empty_text||"(Empty)",this.enableNonEmptyOption=Boolean(a.enable_non_empty_option),this.nonEmptyText=a.non_empty_text||"(Non empty)",this.onSlcChange=a.on_change===!1?!1:!0,this.sortSlc=a.sort_select===!1?!1:!0,this.isSortNumAsc=Boolean(a.sort_num_asc),this.sortNumAsc=this.isSortNumAsc?a.sort_num_asc:null,this.isSortNumDesc=Boolean(a.sort_num_desc),this.sortNumDesc=this.isSortNumDesc?a.sort_num_desc:null,this.loadFltOnDemand=Boolean(a.load_filters_on_demand),this.hasCustomOptions=p["default"].isObj(a.custom_options),this.customOptions=a.custom_options,this.rgxOperator=a.regexp_operator||"rgx:",this.emOperator=a.empty_operator||"[empty]",this.nmOperator=a.nonempty_operator||"[nonempty]",this.orOperator=a.or_operator||"||",this.anOperator=a.and_operator||"&&",this.grOperator=a.greater_operator||">",this.lwOperator=a.lower_operator||"<",this.leOperator=a.lower_equal_operator||"<=",this.geOperator=a.greater_equal_operator||">=",this.dfOperator=a.different_operator||"!",this.lkOperator=a.like_operator||"*",this.eqOperator=a.equal_operator||"=",this.stOperator=a.start_with_operator||"{",this.enOperator=a.end_with_operator||"}",this.curExp=a.cur_exp||"^[¥£€$]",this.separator=a.separator||",",this.rowsCounter=Boolean(a.rows_counter),this.statusBar=Boolean(a.status_bar),this.loader=Boolean(a.loader),this.displayBtn=Boolean(a.btn),this.btnText=a.btn_text||(this.enableIcons?"":"Go"),this.btnCssClass=a.btn_css_class||(this.enableIcons?"btnflt_icon":"btnflt"),this.btnReset=Boolean(a.btn_reset),this.btnResetCssClass=a.btn_reset_css_class||"reset",this.onBeforeReset=p["default"].isFn(a.on_before_reset)?a.on_before_reset:null,this.onAfterReset=p["default"].isFn(a.on_after_reset)?a.on_after_reset:null,this.paging=Boolean(a.paging),this.nbVisibleRows=0,this.nbHiddenRows=0,this.autoFilter=Boolean(a.auto_filter),this.autoFilterDelay=isNaN(a.auto_filter_delay)?900:a.auto_filter_delay,this.isUserTyping=null,this.autoFilterTimer=null,this.highlightKeywords=Boolean(a.highlight_keywords),this.noResults=p["default"].isObj(a.no_results_message)||Boolean(a.no_results_message),this.defaultDateType=a.default_date_type||"DMY",this.thousandsSeparator=a.thousands_separator||",",this.decimalSeparator=a.decimal_separator||".",this.hasColNbFormat=p["default"].isArray(a.col_number_format),this.colNbFormat=this.hasColNbFormat?a.col_number_format:null,this.hasColDateType=p["default"].isArray(a.col_date_type),this.colDateType=this.hasColDateType?a.col_date_type:null,this.prfxTf="TF",this.prfxFlt="flt",this.prfxValButton="btn",this.prfxInfDiv="inf_",this.prfxLDiv="ldiv_",this.prfxRDiv="rdiv_",this.prfxMDiv="mdiv_",this.prfxCookieFltsValues="tf_flts_",this.prfxCookiePageNb="tf_pgnb_",this.prfxCookiePageLen="tf_pglen_",this.rememberGridValues=Boolean(a.remember_grid_values),this.fltsValuesCookie=this.prfxCookieFltsValues+this.id,this.rememberPageNb=this.paging&&a.remember_page_number,this.pgNbCookie=this.prfxCookiePageNb+this.id,this.rememberPageLen=this.paging&&a.remember_page_length,this.pgLenCookie=this.prfxCookiePageLen+this.id,this.extensions=a.extensions,this.hasExtensions=p["default"].isArray(this.extensions),this.enableDefaultTheme=Boolean(a.enable_default_theme),this.hasThemes=this.enableDefaultTheme||p["default"].isArray(a.themes),this.themes=a.themes||[],this.themesPath=a.themes_path||this.stylePath+"themes/",this.Mod={},this.ExtRegistry={},this.Evt={detectKey:function(t){if(this.enterKey&&t){var e=o["default"].keyCode(t);13===e?(this.filter(),o["default"].cancel(t),o["default"].stop(t)):(this.isUserTyping=!0,L.clearInterval(this.autoFilterTimer),this.autoFilterTimer=null)}},onKeyUp:function(t){function e(){L.clearInterval(this.autoFilterTimer),this.autoFilterTimer=null,this.isUserTyping||(this.filter(),this.isUserTyping=null)}if(this.autoFilter){var i=o["default"].keyCode(t);this.isUserTyping=!1,13!==i&&9!==i&&27!==i&&38!==i&&40!==i?null===this.autoFilterTimer&&(this.autoFilterTimer=L.setInterval(e.bind(this),this.autoFilterDelay)):(L.clearInterval(this.autoFilterTimer),this.autoFilterTimer=null)}},onKeyDown:function(){this.autoFilter&&(this.isUserTyping=!0)},onInpBlur:function(){this.autoFilter&&(this.isUserTyping=!1,L.clearInterval(this.autoFilterTimer)),this.emitter.emit("filter-blur",this)},onInpFocus:function(t){var e=o["default"].target(t);this.activeFilterId=e.getAttribute("id"),this.activeFlt=h["default"].id(this.activeFilterId),this.emitter.emit("filter-focus",this)}}}}return r(t,[{key:"init",value:function(){var t=this;if(!this._hasGrid){var e=this.Mod,i=this.singleSearchFlt?1:this.nbCells,s=void 0;if(this["import"](this.stylesheetId,this.stylesheet,null,"link"),this.hasThemes&&this.loadThemes(),e.help||(e.help=new S.Help(this)),this.help&&e.help.init(),(this.rememberGridValues||this.rememberPageNb||this.rememberPageLen)&&(e.store||(e.store=new _.Store(this)),e.store.init()),this.gridLayout&&(e.gridLayout||(e.gridLayout=new C.GridLayout(this)),e.gridLayout.init()),this.loader&&(e.loader||(e.loader=new w.Loader(this)),e.loader.init()),this.highlightKeywords&&(e.highlightKeyword=new x.HighlightKeyword(this),e.highlightKeyword.init()),this.popupFilters&&(e.popupFilter||(e.popupFilter=new k.PopupFilter(this)),e.popupFilter.init()),this.fltGrid){var n=this._insertFiltersRow();this.nbFilterableRows=this.getRowsNb(),this.nbVisibleRows=this.nbFilterableRows,this.nbRows=this.tbl.rows.length;for(var l=0;i>l;l++){this.emitter.emit("before-filter-init",this,l);var r=h["default"].create(this.fltCellTag),a=this.getFilterType(l);this.singleSearchFlt&&(r.colSpan=this.nbCells),this.gridLayout||n.appendChild(r),s=l==i-1&&this.displayBtn?this.fltSmallCssClass:this.fltCssClass,this.singleSearchFlt&&(a=this.fltTypeInp,s=this.singleFltCssClass),a===this.fltTypeSlc||a===this.fltTypeMulti?(e.dropdown||(e.dropdown=new T.Dropdown(this)),e.dropdown.init(l,this.isExternalFlt,r)):a===this.fltTypeCheckList?(e.checkList||(e.checkList=new P.CheckList(this)),e.checkList.init(l,this.isExternalFlt,r)):this._buildInputFilter(l,s,r),l==i-1&&this.displayBtn&&this._buildSubmitButton(l,r),this.emitter.emit("after-filter-init",this,l)}}else this._initNoFilters();this.hasVisibleRows&&(this.emitter.on(["after-filtering"],function(){return t.enforceVisibility()}),this.enforceVisibility()),this.rowsCounter&&(e.rowsCounter=new R.RowsCounter(this),e.rowsCounter.init()),this.statusBar&&(e.statusBar=new F.StatusBar(this),e.statusBar.init()),this.paging&&(e.paging?e.paging.reset():(e.paging=new I.Paging(this),e.paging.init())),this.btnReset&&(e.clearButton=new O.ClearButton(this),e.clearButton.init()),this.hasColWidths&&!this.gridLayout&&this.setColWidths(),this.alternateRows&&(e.alternateRows=new E.AlternateRows(this),e.alternateRows.init()),this.noResults&&(e.noResults||(e.noResults=new N.NoResults(this)),e.noResults.init()),this._hasGrid=!0,(this.rememberGridValues||this.rememberPageLen||this.rememberPageNb)&&this.resetValues(),this.gridLayout||h["default"].addClass(this.tbl,this.prfxTf),this.hasExtensions&&this.initExtensions(),this.markActiveColumns&&(this.emitter.on(["before-filtering"],function(){return t.clearActiveColumns()}),this.emitter.on(["cell-processed"],function(e,i){return t.markActiveColumn(i)})),this.linkedFilters&&this.emitter.on(["after-filtering"],function(){return t.linkFilters()}),this.onFiltersLoaded&&this.onFiltersLoaded.call(null,this),this.initialized=!0,this.emitter.emit("initialized",this)}}},{key:"_insertFiltersRow",value:function(){if(!this.gridLayout){var t=void 0,e=h["default"].tag(this.tbl,"thead");return t=e.length>0?e[0].insertRow(this.filtersRowIndex):this.tbl.insertRow(this.filtersRowIndex),this.headersRow>1&&this.filtersRowIndex<=this.headersRow&&this.headersRow++,t.className=this.fltsRowCssClass,this.isExternalFlt&&(t.style.display="none"),this.emitter.emit("filters-row-inserted",this,t),t}}},{key:"_initNoFilters",value:function(){this.fltGrid||(this.refRow=this.refRow>0?this.refRow-1:0,this.nbFilterableRows=this.getRowsNb(),this.nbVisibleRows=this.nbFilterableRows,this.nbRows=this.nbFilterableRows+this.refRow)}},{key:"_buildInputFilter",value:function(t,e,i){var s=this.getFilterType(t),n=this.isExternalFlt?this.externalFltTgtIds[t]:null,l=s===this.fltTypeInp?"text":"hidden",r=h["default"].create(this.fltTypeInp,["id",this.prfxFlt+t+"_"+this.id],["type",l],["ct",t]);"hidden"!==l&&this.watermark&&r.setAttribute("placeholder",this.isWatermarkArray?this.watermark[t]||"":this.watermark),r.className=e||this.fltCssClass,o["default"].add(r,"focus",this.Evt.onInpFocus.bind(this)),n?(h["default"].id(n).appendChild(r),this.externalFltEls.push(r)):i.appendChild(r),this.fltIds.push(r.id),o["default"].add(r,"keypress",this.Evt.detectKey.bind(this)),o["default"].add(r,"keydown",this.Evt.onKeyDown.bind(this)),o["default"].add(r,"keyup",this.Evt.onKeyUp.bind(this)),o["default"].add(r,"blur",this.Evt.onInpBlur.bind(this))}},{key:"_buildSubmitButton",value:function(t,e){var i=this,s=this.isExternalFlt?this.externalFltTgtIds[t]:null,n=h["default"].create(this.fltTypeInp,["id",this.prfxValButton+t+"_"+this.id],["type","button"],["value",this.btnText]);n.className=this.btnCssClass,s?h["default"].id(s).appendChild(n):e.appendChild(n),o["default"].add(n,"click",function(){return i.filter()})}},{key:"feature",value:function(t){return this.Mod[t]}},{key:"initExtensions",value:function(){var t=this.extensions;i.p=this.basePath,this.emitter.emit("before-loading-extensions",this);for(var e=0,s=t.length;s>e;e++){var n=t[e];this.ExtRegistry[n.name]||this.loadExtension(n)}this.emitter.emit("after-loading-extensions",this)}},{key:"loadExtension",value:function(t){var e=this;if(t&&t.name){var s=t.name,n=t.path,l=void 0;s&&n?l=t.path+s:(s=s.replace(".js",""),l="extensions/{}/{}".replace(/{}/g,s)),i.e(1,function(i){var n=[i(26)("./"+l)];(function(i){var n=new i["default"](e,t);n.init(),e.ExtRegistry[s]=n}).apply(null,n)})}}},{key:"extension",value:function(t){return this.ExtRegistry[t]}},{key:"hasExtension",value:function(t){return!p["default"].isEmpty(this.ExtRegistry[t])}},{key:"destroyExtensions",value:function(){for(var t=this.extensions,e=0,i=t.length;i>e;e++){var s=t[e],n=this.ExtRegistry[s.name];n&&(n.destroy(),this.ExtRegistry[s.name]=null)}}},{key:"loadThemes",value:function(){var t=this.themes;if(this.emitter.emit("before-loading-themes",this),this.enableDefaultTheme){var e={name:"default"};this.themes.push(e)}if(p["default"].isArray(t))for(var i=0,s=t.length;s>i;i++){var n=t[i],l=n.name,r=n.path,a=this.prfxTf+l;l&&!r?r=this.themesPath+l+"/"+l+".css":!l&&n.path&&(l="theme{0}".replace("{0}",i)),this.isImported(r,"link")||this["import"](a,r,null,"link")}this.btnResetText=null,this.btnResetHtml='',this.btnPrevPageHtml='',this.btnNextPageHtml='',this.btnFirstPageHtml='',this.btnLastPageHtml='',this.loader=!0,this.loaderHtml='
',this.loaderText=null,this.emitter.emit("after-loading-themes",this)}},{key:"getStylesheet",value:function(){var t=arguments.length<=0||void 0===arguments[0]?"default":arguments[0];return h["default"].id(this.prfxTf+t)}},{key:"destroy",value:function(){var t=this;if(this._hasGrid){var e=this.tbl.rows,i=this.Mod,s=this.emitter;this.isExternalFlt&&!this.popupFilters&&this.removeExternalFlts(),this.infDiv&&this.removeToolbar(),this.markActiveColumns&&(this.clearActiveColumns(),s.off(["before-filtering"],function(){return t.clearActiveColumns()}),s.off(["cell-processed"],function(e,i){return t.markActiveColumn(i)})),this.hasExtensions&&this.destroyExtensions(),this.validateAllRows(),this.fltGrid&&!this.gridLayout&&(this.fltGridEl=e[this.filtersRowIndex],this.tbl.deleteRow(this.filtersRowIndex)),s.emit("destroy",this),Object.keys(i).forEach(function(t){var e=i[t];e&&p["default"].isFn(e.destroy)&&e.destroy()}),this.hasVisibleRows&&s.off(["after-filtering"],function(){return t.enforceVisibility()}),this.linkedFilters&&s.off(["after-filtering"],function(){return t.linkFilters()}),h["default"].removeClass(this.tbl,this.prfxTf),this.nbHiddenRows=0,this.validRowsIndex=[],this.fltIds=[],this.activeFlt=null,this._hasGrid=!1,this.initialized=!1}}},{key:"setToolbar",value:function(){if(!this.infDiv){var t=h["default"].create("div",["id",this.prfxInfDiv+this.id]);if(t.className=this.infDivCssClass,this.toolBarTgtId)h["default"].id(this.toolBarTgtId).appendChild(t);else if(this.gridLayout){var e=this.Mod.gridLayout;e.tblMainCont.appendChild(t),t.className=e.gridInfDivCssClass}else{var i=h["default"].create("caption");i.appendChild(t),this.tbl.insertBefore(i,this.tbl.firstChild)}this.infDiv=h["default"].id(this.prfxInfDiv+this.id);var s=h["default"].create("div",["id",this.prfxLDiv+this.id]);s.className=this.lDivCssClass,t.appendChild(s),this.lDiv=h["default"].id(this.prfxLDiv+this.id);var n=h["default"].create("div",["id",this.prfxRDiv+this.id]);n.className=this.rDivCssClass,t.appendChild(n),this.rDiv=h["default"].id(this.prfxRDiv+this.id);var l=h["default"].create("div",["id",this.prfxMDiv+this.id]);l.className=this.mDivCssClass,t.appendChild(l),this.mDiv=h["default"].id(this.prfxMDiv+this.id),p["default"].isUndef(this.help)&&this.emitter.emit("init-help",this)}}},{key:"removeToolbar",value:function(){if(this.infDiv){h["default"].remove(this.infDiv),this.infDiv=null;var t=this.tbl,e=h["default"].tag(t,"caption");e.length>0&&[].forEach.call(e,function(e){return t.removeChild(e)})}}},{key:"removeExternalFlts",value:function(){if(this.isExternalFlt)for(var t=this.externalFltTgtIds,e=t.length,i=0;e>i;i++){var s=t[i],n=h["default"].id(s);n&&(n.innerHTML="")}}},{key:"isCustomOptions",value:function(t){return this.hasCustomOptions&&-1!=this.customOptions.cols.indexOf(t)}},{key:"getCustomOptions",value:function(t){if(!p["default"].isEmpty(t)&&this.isCustomOptions(t)){for(var e=this.customOptions,i=e.cols,s=[],n=[],l=i.indexOf(t),r=e.values[l],a=e.texts[l],o=e.sorts[l],u=0,h=r.length;h>u;u++)n.push(r[u]),a[u]?s.push(a[u]):s.push(r[u]);return o&&(n.sort(),s.sort()),[n,s]}}},{key:"resetValues",value:function(){var t=this;if(this.rememberGridValues){var e=this.Mod.store.getFilterValues(this.fltsValuesCookie);e.forEach(function(e,i){" "!==e&&t.setFilterValue(i,e)}),this.filter()}}},{key:"filter",value:function(){function t(t,e,i){if(this.highlightKeywords&&e){t=t.replace(c,""),t=t.replace(g,""),t=t.replace(b,""),t=t.replace(y,"");var s=t;(r.test(t)||a.test(t)||o.test(t)||u.test(t)||f.test(t))&&(s=h["default"].getText(i)),""!==s&&this.emitter.emit("highlight-keyword",this,i,s)}}function e(t,e,i){t=d["default"].matchCase(t,this.caseSensitive);var s=void 0,h=m["default"].removeNbFormat,p=o.test(t),x=r.test(t),k=u.test(t),T=a.test(t),P=f.test(t),R=g.test(t),F=c.test(t),I=b.test(t),O=y.test(t),E=_===t,N=C===t,L=w.test(t),D=p&&v["default"].isValid(t.replace(o,""),S),B=x&&v["default"].isValid(t.replace(r,""),S),M=k&&v["default"].isValid(t.replace(u,""),S),A=T&&v["default"].isValid(t.replace(a,""),S),H=P&&v["default"].isValid(t.replace(f,""),S),j=R&&v["default"].isValid(t.replace(g,""),S),V=void 0,U=void 0;if(v["default"].isValid(e,S))V=v["default"].format(e,S),D?(U=v["default"].format(t.replace(o,""),S),s=U>V):B?(U=v["default"].format(t.replace(r,""),S),s=U>=V):A?(U=v["default"].format(t.replace(a,""),S),s=V>=U):M?(U=v["default"].format(t.replace(u,""),S),s=V>U):H?(U=v["default"].format(t.replace(f,""),S),s=V.toString()!=U.toString()):j?(U=v["default"].format(t.replace(g,""),S),s=V.toString()==U.toString()):c.test(t)?s=d["default"].contains(t.replace(c,""),e,!1,this.caseSensitive):v["default"].isValid(t,S)?(U=v["default"].format(t,S),s=V.toString()===U.toString()):s=E?d["default"].isEmpty(e):N?!d["default"].isEmpty(e):d["default"].contains(t,e,this.isExactMatch(i),this.caseSensitive);else if(this.hasColNbFormat&&this.colNbFormat[i]?(n=h(e,this.colNbFormat[i]),l=this.colNbFormat[i]):","===this.thousandsSeparator&&"."===this.decimalSeparator?(n=h(e,"us"),l="us"):(n=h(e,"eu"),l="eu"),x)s=n<=h(t.replace(r,""),l);else if(T)s=n>=h(t.replace(a,""),l);else if(p)s=nh(t.replace(u,""),l);else if(P)s=d["default"].contains(t.replace(f,""),e,!1,this.caseSensitive)?!1:!0;else if(F)s=d["default"].contains(t.replace(c,""),e,!1,this.caseSensitive);else if(R)s=d["default"].contains(t.replace(g,""),e,!0,this.caseSensitive);else if(I)s=0===e.indexOf(t.replace(b,""))?!0:!1;else if(O){var z=t.replace(y,"");s=e.lastIndexOf(z,e.length-1)===e.length-1-(z.length-1)&&e.lastIndexOf(z,e.length-1)>-1?!0:!1}else if(E)s=d["default"].isEmpty(e);else if(N)s=!d["default"].isEmpty(e);else if(L)try{var W=t.replace(w,""),G=new RegExp(W);s=G.test(e)}catch($){s=!1}else s=d["default"].contains(t,e,this.isExactMatch(i),this.caseSensitive);return s}if(this.fltGrid&&this._hasGrid){this.onBeforeFilter&&this.onBeforeFilter.call(null,this),this.emitter.emit("before-filtering",this);var i=this.tbl.rows,s=0;this.validRowsIndex=[],this.searchArgs=this.getFiltersValue();for(var n,l,r=new RegExp(this.leOperator),a=new RegExp(this.geOperator),o=new RegExp(this.lwOperator),u=new RegExp(this.grOperator),f=new RegExp(this.dfOperator),c=new RegExp(d["default"].rgxEsc(this.lkOperator)),g=new RegExp(this.eqOperator),b=new RegExp(this.stOperator),y=new RegExp(this.enOperator),_=this.emOperator,C=this.nmOperator,w=new RegExp(d["default"].rgxEsc(this.rgxOperator)),x=this.refRow;xI;I++){var O=this.searchArgs[this.singleSearchFlt?0:I],S=this.hasColDateType?this.colDateType[I]:this.defaultDateType;if(""!==O){var E=d["default"].matchCase(this.getCellData(k[I]),this.caseSensitive),N=O.toString().split(this.orOperator),L=N.length>1,D=O.toString().split(this.anOperator),B=D.length>1;if(p["default"].isArray(O)||L||B){var M=void 0,A=void 0,H=!1;A=p["default"].isArray(O)?O:L?N:D;for(var j=0,V=A.length;V>j&&(M=d["default"].trim(A[j]),H=e.call(this,M,E,I),t.call(this,M,H,k[I]),!(L&&H||B&&!H))&&(!p["default"].isArray(O)||!H);j++);P[I]=H}else P[I]=e.call(this,d["default"].trim(O),E,I),t.call(this,O,P[I],k[I]);P[I]||(R=!1),this.singleSearchFlt&&P[I]&&(F=!0),this.emitter.emit("cell-processed",this,I,k[I])}}this.singleSearchFlt&&F&&(R=!0),R?this.validateRow(x,!0):(this.validateRow(x,!1),s++),this.emitter.emit("row-processed",this,x,this.validRowsIndex.length,R)}}this.nbVisibleRows=this.validRowsIndex.length,this.nbHiddenRows=s,this.onAfterFilter&&this.onAfterFilter.call(null,this),this.emitter.emit("after-filtering",this)}}},{key:"getColValues",value:function(t){var e=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],i=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],s=arguments.length<=3||void 0===arguments[3]?[]:arguments[3];if(this.fltGrid){var n=this.tbl.rows,l=[];e&&l.push(this.getHeadersText()[t]);for(var r=this.refRow;r0&&(a=-1!=s.indexOf(r));var o=n[r].cells,u=o.length;if(u===this.nbCells&&!a)for(var h=0;u>h;h++)if(h==t&&""===n[r].style.display){var f=this.getCellData(o[h]),d=this.colNbFormat?this.colNbFormat[t]:null,c=i?m["default"].removeNbFormat(f,d):f;l.push(c)}}return l}}},{key:"getFilterValue",value:function(t){if(this.fltGrid){var e="",i=[],s=this.getFilterElement(t);if(!s)return"";var n=this.getFilterType(t);if(n!==this.fltTypeMulti&&n!==this.fltTypeCheckList)e=s.value;else if(n===this.fltTypeMulti){for(var l=0,r=s.options.length;r>l;l++)s.options[l].selected&&i.push(s.options[l].value);e=i.length>0?i:""}else n===this.fltTypeCheckList&&(null!==s.getAttribute("value")&&(i=s.getAttribute("value"),i=i.substr(0,i.length-3),i=i.split(" "+this.orOperator+" ")),e=i.length>0?i:"");return p["default"].isArray(e)&&1===e.length&&""===e[0]&&(e=""),e}}},{key:"getFiltersValue",value:function(){if(this.fltGrid){for(var t=[],e=0,i=this.fltIds.length;i>e;e++){var s=this.getFilterValue(e);p["default"].isArray(s)?t.push(s):t.push(d["default"].trim(s))}return t}}},{key:"getFilterId",value:function(t){return this.fltGrid?this.fltIds[t]:void 0}},{key:"getFiltersByType",value:function(t,e){if(this.fltGrid){for(var i=[],s=0,n=this.fltIds.length;n>s;s++){var l=this.getFilterType(s);if(l===d["default"].lower(t)){var r=e?s:this.fltIds[s];i.push(r)}}return i}}},{key:"getFilterElement",value:function(t){var e=this.fltIds[t];return h["default"].id(e)}},{key:"getCellsNb",value:function(){var t=arguments.length<=0||void 0===arguments[0]?0:arguments[0],e=this.tbl.rows[t];return e.cells.length}},{key:"getRowsNb",value:function(t){var e=p["default"].isUndef(this.refRow)?0:this.refRow,i=this.tbl.rows.length;return t&&(e=0),parseInt(i-e,10)}},{key:"getCellData",value:function(t){var e=t.cellIndex;return this.customCellData&&-1!=this.customCellDataCols.indexOf(e)?this.customCellData.call(null,this,t,e):h["default"].getText(t)}},{key:"getTableData",value:function(){var t=arguments.length<=0||void 0===arguments[0]?!1:arguments[0],e=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],i=this.tbl.rows,s=[];if(t){var n=this.getHeadersText(e);s.push([this.getHeadersRowIndex(),n])}for(var l=this.refRow;lo;o++)if(!(e&&this.hasExtension("colsVisibility")&&this.extension("colsVisibility").isColHidden(o))){var h=this.getCellData(a[o]);r[1].push(h)}s.push(r)}return s}},{key:"getFilteredData",value:function(){var t=arguments.length<=0||void 0===arguments[0]?!1:arguments[0],e=arguments.length<=1||void 0===arguments[1]?!1:arguments[1];if(!this.validRowsIndex)return[];var i=this.tbl.rows,s=[];if(t){var n=this.getHeadersText(e);s.push([this.getHeadersRowIndex(),n])}for(var l=this.getValidRows(!0),r=0;rn;n++){var r=i[n],a=r[1],o=a[t];s.push(o)}return s}},{key:"getRowDisplay",value:function(t){return p["default"].isObj(t)?t.style.display:null}},{key:"validateRow",value:function(t,e){var i=this.tbl.rows[t];if(i&&"boolean"==typeof e){this.hasVisibleRows&&-1!==this.visibleRows.indexOf(t)&&(e=!0);var s=e?"":"none",n=e?"true":"false";i.style.display=s,this.paging&&i.setAttribute("validRow",n),e&&(-1===this.validRowsIndex.indexOf(t)&&this.validRowsIndex.push(t),this.onRowValidated&&this.onRowValidated.call(null,this,t),this.emitter.emit("row-validated",this,t))}}},{key:"validateAllRows",value:function(){if(this._hasGrid){this.validRowsIndex=[];for(var t=this.refRow;t0,l=n?null:D.createDocumentFragment(),r=0;t>r;r++){var a=void 0;n?a=s[r]:(a=h["default"].create("col",["id",this.id+"_col_"+r]),l.appendChild(a)),a.style.width=i[r]}n||e.insertBefore(l,e.firstChild)}if(this.hasColWidths){e=e||this.tbl;var s=void 0;s=void 0===t?"none"!=e.rows[0].style.display?0:1:t,i.call(this)}}},{key:"enforceVisibility",value:function(){if(this.hasVisibleRows)for(var t=0,e=this.visibleRows.length;e>t;t++){var i=this.visibleRows[t];i<=this.nbRows&&this.validateRow(i,!0)}}},{key:"clearFilters",value:function(){if(this.fltGrid){this.emitter.emit("before-clearing-filters",this),this.onBeforeReset&&this.onBeforeReset.call(null,this,this.getFiltersValue());for(var t=0,e=this.fltIds.length;e>t;t++)this.setFilterValue(t,"");this.filter(),this.onAfterReset&&this.onAfterReset.call(null,this),this.emitter.emit("after-clearing-filters",this)}}},{key:"clearActiveColumns",value:function(){for(var t=0,e=this.getCellsNb(this.headersRow);e>t;t++)h["default"].removeClass(this.getHeaderElement(t),this.activeColumnsCssClass)}},{key:"markActiveColumn",value:function(t){var e=this.getHeaderElement(t);h["default"].hasClass(e,this.activeColumnsCssClass)||(this.onBeforeActiveColumn&&this.onBeforeActiveColumn.call(null,this,t),h["default"].addClass(e,this.activeColumnsCssClass),this.onAfterActiveColumn&&this.onAfterActiveColumn.call(null,this,t))}},{key:"linkFilters",value:function(){if(this.linkedFilters&&this.activeFilterId){var t=this.getFiltersByType(this.fltTypeSlc,!0),e=this.getFiltersByType(this.fltTypeMulti,!0),i=this.getFiltersByType(this.fltTypeCheckList,!0),s=t.concat(e); +s=s.concat(i);var n=this.activeFilterId.split("_")[0];n=n.split(this.prfxFlt)[1];for(var l=void 0,r=0,a=s.length;a>r;r++){var o=h["default"].id(this.fltIds[s[r]]);if(l=this.getFilterValue(s[r]),n!==s[r]||this.paging&&-1!=t.indexOf(s[r])&&n===s[r]||!this.paging&&(-1!=i.indexOf(s[r])||-1!=e.indexOf(s[r]))||l===this.displayAllText){if(-1!=i.indexOf(s[r])?this.Mod.checkList.checkListDiv[s[r]].innerHTML="":o.innerHTML="",this.loadFltOnDemand){var u=h["default"].createOpt(this.displayAllText,"");o&&o.appendChild(u)}-1!=i.indexOf(s[r])?this.emitter.emit("build-checklist-filter",this,s[r],this.isExternalFlt):this.emitter.emit("build-select-filter",this,s[r],!0,this.isExternalFlt),this.setFilterValue(s[r],l)}}}}},{key:"isExactMatch",value:function(t){var e=this.getFilterType(t);return this.exactMatchByCol[t]||this.exactMatch||e!==this.fltTypeInp}},{key:"isImported",value:function(t,e){for(var i=!1,s=e?e:"script",n="script"==s?"src":"href",l=h["default"].tag(D,s),r=0,a=l.length;a>r;r++)if(void 0!==l[r][n]&&l[r][n].match(t)){i=!0;break}return i}},{key:"import",value:function(t,e,i,s){var n=s?s:"script",l=this.isImported(e,n);if(!l){var r=this,a=!1,o=void 0,u=h["default"].tag(D,"head")[0];o="link"===d["default"].lower(n)?h["default"].create("link",["id",t],["type","text/css"],["rel","stylesheet"],["href",e]):h["default"].create("script",["id",t],["type","text/javascript"],["src",e]),o.onload=o.onreadystatechange=function(){a||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState||(a=!0,"function"==typeof i&&i.call(null,r))},o.onerror=function(){throw new Error("TF script could not load: "+e)},u.appendChild(o)}}},{key:"hasGrid",value:function(){return this._hasGrid}},{key:"getFiltersId",value:function(){return this.fltIds||[]}},{key:"getValidRows",value:function(t){if(!t)return this.validRowsIndex;this.validRowsIndex=[];for(var e=this.refRow;e]+>/g,"");return e=e.replace(/^\s+/,"").replace(/\s+$/,"")},getFirstTextNode:function(t){for(var e=0;e1)for(var n=0;n2)return t;var e=void 0;return 99>=t&&t>50&&(e="19"+t),(50>t||"00"===t)&&(e="20"+t),e}function s(t){if(void 0===t)return 0;for(var e=void 0,i=["january","february","march","april","may","june","july","august","september","october","november","december","jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],s=0;s11||23>e)&&(e-=12),1>e||e>12?0:e}Object.defineProperty(e,"__esModule",{value:!0}),e["default"]={isValid:function(t,e){if(e||(e="DMY"),e=e.toUpperCase(),3!=e.length&&"DDMMMYYYY"===e){var i=this.format(t,e);t=i.getDate()+"/"+(i.getMonth()+1)+"/"+i.getFullYear(),e="DMY"}(-1===e.indexOf("M")||-1===e.indexOf("D")||-1===e.indexOf("Y"))&&(e="DMY");var s=void 0,n=void 0;if("Y"===e.substring(0,1)?(s=/^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/,n=/^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/):"Y"===e.substring(1,2)?(s=/^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/,n=/^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/):(s=/^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/,n=/^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/),s.test(t)===!1&&n.test(t)===!1)return!1;var l=t.split(RegExp.$1),r=void 0,a=void 0,o=void 0;r="M"===e.substring(0,1)?l[0]:"M"===e.substring(1,2)?l[1]:l[2],a="D"===e.substring(0,1)?l[0]:"D"===e.substring(1,2)?l[1]:l[2],o="Y"===e.substring(0,1)?l[0]:"Y"===e.substring(1,2)?l[1]:l[2],parseInt(o,10)<=50&&(o=(parseInt(o,10)+2e3).toString()),parseInt(o,10)<=99&&(o=(parseInt(o,10)+1900).toString());var u=new Date(parseInt(o,10),parseInt(r,10)-1,parseInt(a,10),0,0,0,0);return parseInt(a,10)!=u.getDate()?!1:parseInt(r,10)-1!=u.getMonth()?!1:!0},format:function(t,e){if(e||(e="DMY"),!t||""===t)return new Date(1001,0,1);var n=void 0,l=void 0;switch(e.toUpperCase()){case"DDMMMYYYY":l=t.replace(/[- \/.]/g," ").split(" "),n=new Date(i(l[2]),s(l[1])-1,l[0]);break;case"DMY":l=t.replace(/^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/,"$1 $3 $5").split(" "),n=new Date(i(l[2]),l[1]-1,l[0]);break;case"MDY":l=t.replace(/^(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])([- \/.])((\d\d)?\d\d)$/,"$1 $3 $5").split(" "),n=new Date(i(l[2]),l[0]-1,l[1]);break;case"YMD":l=t.replace(/^((\d\d)?\d\d)([- \/.])(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])$/,"$1 $4 $6").split(" "),n=new Date(i(l[0]),l[1]-1,l[2]);break;default:l=t.replace(/^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/,"$1 $3 $5").split(" "),n=new Date(i(l[2]),l[1]-1,l[0])}return n}}},function(t,e,i){"use strict";function s(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),l=s(n);e["default"]={removeNbFormat:function(t,e){if(t){e||(e="us");var i=t;return i="us"===l["default"].lower(e)?+i.replace(/[^\d\.-]/g,""):+i.replace(/[^\d\,-]/g,"").replace(",",".")}}}},function(t,e){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var s=function(){function t(t,e){for(var i=0;i0){var s=document.cookie,n=s.indexOf(i);if(-1!==n){n+=i.length;var l=s.indexOf(";",n);-1===l&&(l=s.length),e=unescape(s.substring(n,l))}}return e},remove:function(t){this.write(t,"",-1)},valueToArray:function(t,e){e||(e=",");var i=this.read(t),s=i.split(e);return s},getValueByIndex:function(t,e,i){i||(i=",");var s=this.valueToArray(t,i);return s[e]}}},function(t,e,i){"use strict";function s(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var i=0;i0&&s.removeChild(P[0]),this.headTbl.style.tableLayout="fixed",s.style.tableLayout="fixed",this.headTbl.cellPadding=s.cellPadding,this.headTbl.cellSpacing=s.cellSpacing,e.setColWidths(0,this.headTbl),s.style.width="",this.headTbl.style.width=s.clientWidth+"px",p["default"].add(this.tblCont,"scroll",function(e){var i=p["default"].target(e),s=i.scrollLeft;t.headTblCont.scrollLeft=s});var R=(i.extensions||[]).filter(function(t){return"sort"===t.name});1===R.length&&(R[0].async_sort=!0,R[0].trigger_ids=g),this.tblHasColTag=h["default"].tag(s,"col").length>0?!0:!1;var F=function(){for(var t=e.nbCells-1;t>=0;t--){var i=h["default"].create("col",["id",e.id+"_col_"+t]);s.insertBefore(i,s.firstChild),i.style.width=e.colWidths[t],this.gridColElms[t]=i}this.tblHasColTag=!0};if(this.tblHasColTag)for(var I=h["default"].tag(s,"col"),O=0;O',e.popUpDivCssClass=s.popup_div_css_class||"popUpFilter",e.onBeforePopUpOpen=h["default"].isFn(s.on_before_popup_filter_open)?s.on_before_popup_filter_open:null,e.onAfterPopUpOpen=h["default"].isFn(s.on_after_popup_filter_open)?s.on_after_popup_filter_open:null,e.onBeforePopUpClose=h["default"].isFn(s.on_before_popup_filter_close)?s.on_before_popup_filter_close:null,e.onAfterPopUpClose=h["default"].isFn(s.on_after_popup_filter_close)?s.on_after_popup_filter_close:null,e.popUpFltSpans=[],e.popUpFltImgs=[],e.popUpFltElms=e.popUpFltElmCache||[],e.popUpFltAdjustToContainer=!0,e.prfxPopUpSpan="popUpSpan_",e.prfxPopUpDiv="popUpDiv_",e}return r(i,e),a(i,[{key:"onClick",value:function(e){var i=e||t.event,s=i.target.parentNode,n=parseInt(s.getAttribute("ci"),10);if(this.closeAll(n),this.toggle(n),this.popUpFltAdjustToContainer){var l=this.popUpFltElms[n],r=this.tf.getHeaderElement(n),a=.95*r.clientWidth;l.style.width=parseInt(a,10)+"px"}p["default"].cancel(i),p["default"].stop(i)}},{key:"init",value:function(){var t=this;if(!this.initialized){var e=this.tf;e.headersRow<=1&&(e.headersRow=0);for(var i=0;iy;y++)if(t===y&&(!e||e&&n.disableExcludedOptions)||t==y&&e&&(""===a[g].style.display&&!n.paging||n.paging&&(!n.validRowsIndex||n.validRowsIndex&&-1!=n.validRowsIndex.indexOf(g))&&(void 0===u||u==t||u!=t&&-1!=n.validRowsIndex.indexOf(g)))){var _=n.getCellData(b[y]),C=p["default"].matchCase(_,o);if(d["default"].has(this.opts,C,o)||this.opts.push(_),e&&n.disableExcludedOptions){var w=c[y];w||(w=n.getFilteredDataCol(y)),d["default"].has(w,C,o)||d["default"].has(f,C,o)||f.push(_)}}}if(this.isCustom){var x=n.getCustomOptions(t);this.opts=x[0],this.optsTxt=x[1]}if(n.sortSlc&&!this.isCustom&&(o?(this.opts.sort(),f&&f.sort()):(this.opts.sort(v["default"].ignoreCase),f&&f.sort(v["default"].ignoreCase))),n.sortNumAsc&&-1!=n.sortNumAsc.indexOf(t))try{this.opts.sort(numSortAsc),f&&f.sort(numSortAsc),this.isCustom&&this.optsTxt.sort(numSortAsc)}catch(k){this.opts.sort(),f&&f.sort(),this.isCustom&&this.optsTxt.sort()}if(n.sortNumDesc&&-1!=n.sortNumDesc.indexOf(t))try{this.opts.sort(numSortDesc),f&&f.sort(numSortDesc),this.isCustom&&this.optsTxt.sort(numSortDesc)}catch(k){this.opts.sort(),f&&f.sort(),this.isCustom&&this.optsTxt.sort()}this.addOptions(t,r,e,f),this.emitter.emit("after-populating-filter",n,t,r)}}},{key:"addOptions",value:function(t,e,i,s){var n=this.tf,l=p["default"].lower(this.slcFillingMethod),r=e.value;e.innerHTML="",e=this.addFirstOption(e);for(var a=0;a"+u+""}else{var g=void 0;g=n.loadFltOnDemand&&r===this.opts[a]&&n.getFilterType(t)===n.fltTypeSlc?h["default"].createOpt(u,o,!0):h["default"].createOpt(u,o,!1),f&&(g.disabled=!0),e.appendChild(g)}}"innerhtml"===l&&(e.innerHTML+=this.slcInnerHtml),e.setAttribute("filled","1")}},{key:"addFirstOption",value:function(t){var e=this.tf,i=p["default"].lower(this.slcFillingMethod);if("innerhtml"===i)this.slcInnerHtml+='";else{var s=h["default"].createOpt(this.enableSlcResetFilter?e.displayAllText:"","");if(this.enableSlcResetFilter||(s.style.display="none"),t.appendChild(s),e.enableEmptyOption){var n=h["default"].createOpt(e.emptyText,e.emOperator);t.appendChild(n)}if(e.enableNonEmptyOption){var l=h["default"].createOpt(e.nonEmptyText,e.nmOperator);t.appendChild(l)}}return t}},{key:"selectOptions",value:function(t){var e=arguments.length<=1||void 0===arguments[1]?[]:arguments[1],i=this.tf;if(i.getFilterType(t)===i.fltTypeMulti&&0!==e.length){var s=i.getFilterElement(t);[].forEach.call(s.options,function(t){(""===e[0]||""===t.value)&&(t.selected=!1),""!==t.value&&d["default"].has(e,t.value,!0)&&(t.selected=!0)})}}},{key:"destroy",value:function(){var t=this;this.emitter.off(["build-select-filter"],function(e,i,s){return t.build(e,i,s)}),this.emitter.off(["select-options"],function(e,i,s){return t.selectOptions(i,s)})}}]),e}(o.Feature)},function(t,e,i){"use strict";function s(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),l=s(n);e["default"]={has:function(t,e,i){for(var s=void 0===i?!1:i,n=0;ni?-1:i>s?1:0}}},function(t,e,i){"use strict";function s(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var i=0;iy;y++)if(t===y&&(!n.linkedFilters||n.linkedFilters&&n.disableExcludedOptions)||t===y&&n.linkedFilters&&(""===o[c].style.display&&!n.paging||n.paging&&(!u||u===t||u!=t&&-1!=n.validRowsIndex.indexOf(c)))){var _=n.getCellData(g[y]),C=p["default"].matchCase(_,n.matchCase);d["default"].has(this.opts,C,n.matchCase)||this.opts.push(_);var w=f[y];n.linkedFilters&&n.disableExcludedOptions&&(w||(w=n.getFilteredDataCol(y)),d["default"].has(w,C,n.matchCase)||d["default"].has(this.excludedOpts,C,n.matchCase)||this.excludedOpts.push(_))}}if(this.isCustom){var x=n.getCustomOptions(t);this.opts=x[0],this.optsTxt=x[1]}if(n.sortSlc&&!this.isCustom&&(n.matchCase?(this.opts.sort(),this.excludedOpts&&this.excludedOpts.sort()):(this.opts.sort(v["default"].ignoreCase),this.excludedOpts&&this.excludedOpts.sort(v["default"].ignoreCase))),n.sortNumAsc&&-1!=n.sortNumAsc.indexOf(t))try{this.opts.sort(numSortAsc),this.excludedOpts&&this.excludedOpts.sort(numSortAsc),this.isCustom&&this.optsTxt.sort(numSortAsc)}catch(k){this.opts.sort(),this.excludedOpts&&this.excludedOpts.sort(),this.isCustom&&this.optsTxt.sort()}if(n.sortNumDesc&&-1!=n.sortNumDesc.indexOf(t))try{this.opts.sort(numSortDesc),this.excludedOpts&&this.excludedOpts.sort(numSortDesc),this.isCustom&&this.optsTxt.sort(numSortDesc)}catch(k){this.opts.sort(),this.excludedOpts&&this.excludedOpts.sort(),this.isCustom&&this.optsTxt.sort()}this.addChecks(t,a),n.loadFltOnDemand&&(r.innerHTML=""),r.appendChild(a),r.setAttribute("filled","1"),this.emitter.emit("after-populating-filter",n,t,r)}}},{key:"addChecks",value:function(t,e){for(var i=this,s=this.tf,n=this.addTChecks(t,e),l=0;ll;l++){var r=h["default"].tag(s,"li")[l],a=h["default"].tag(r,"label")[0],o=h["default"].tag(r,"input")[0],u=p["default"].matchCase(h["default"].getText(a),i.caseSensitive);""!==u&&d["default"].has(e,u,i.caseSensitive)?(o.checked=!0,this.setCheckListValues(o)):(o.checked=!1,this.setCheckListValues(o))}}}},{key:"destroy",value:function(){var t=this;this.emitter.off(["build-checklist-filter"],function(e,i,s){return t.build(i,s)}),this.emitter.off(["select-checklist-options"],function(e,i,s){return t.selectOptions(i,s)})}}]),e}(o.Feature)},function(t,e,i){"use strict";function s(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var i=0;i0?1:0),l=n+s.pagingLength-1<=e.nbVisibleRows?n+s.pagingLength-1:e.nbVisibleRows;i=n+this.fromToTextSeparator+l+this.overText+e.nbVisibleRows}}else i=t&&""!==t?t:e.nbFilterableRows-e.nbHiddenRows;this.rowsCounterSpan.innerHTML=i,this.onAfterRefreshCounter&&this.onAfterRefreshCounter.call(null,e,this.rowsCounterSpan,i)}}},{key:"destroy",value:function(){var t=this;this.initialized&&(!this.rowsCounterTgtId&&this.rowsCounterDiv?h["default"].remove(this.rowsCounterDiv):h["default"].id(this.rowsCounterTgtId).innerHTML="",this.rowsCounterSpan=null,this.rowsCounterDiv=null,this.emitter.off(["after-filtering","grouped-by-page"],function(){return t.refresh(tf.nbVisibleRows)}),this.emitter.off(["rows-changed"],function(){return t.refresh()}),this.initialized=!1)}}]),e}(o.Feature)},function(t,e,i){"use strict";function s(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var i=0;i",i.btnPrevPageText=s.btn_prev_page_text||"<",i.btnLastPageText=s.btn_last_page_text||">|",i.btnFirstPageText=s.btn_first_page_text||"|<",i.btnNextPageHtml=s.btn_next_page_html||(t.enableIcons?'':null),i.btnPrevPageHtml=s.btn_prev_page_html||(t.enableIcons?'':null),i.btnFirstPageHtml=s.btn_first_page_html||(t.enableIcons?'':null),i.btnLastPageHtml=s.btn_last_page_html||(t.enableIcons?'':null),i.pageText=s.page_text||" Page ",i.ofText=s.of_text||" of ",i.nbPgSpanCssClass=s.nb_pages_css_class||"nbpg",i.hasPagingBtns=s.paging_btns===!1?!1:!0,i.pageSelectorType=s.page_selector_type||t.fltTypeSlc,i.onBeforeChangePage=c["default"].isFn(s.on_before_change_page)?s.on_before_change_page:null,i.onAfterChangePage=c["default"].isFn(s.on_after_change_page)?s.on_after_change_page:null,i.prfxSlcPages="slcPages_",i.prfxSlcResults="slcResults_",i.prfxSlcResultsTxt="slcResultsTxt_",i.prfxBtnNextSpan="btnNextSpan_",i.prfxBtnPrevSpan="btnPrevSpan_",i.prfxBtnLastSpan="btnLastSpan_",i.prfxBtnFirstSpan="btnFirstSpan_",i.prfxBtnNext="btnNext_",i.prfxBtnPrev="btnPrev_",i.prfxBtnLast="btnLast_",i.prfxBtnFirst="btnFirst_",i.prfxPgSpan="pgspan_",i.prfxPgBeforeSpan="pgbeforespan_",i.prfxPgAfterSpan="pgafterspan_";var n=t.refRow,a=t.nbRows;i.nbPages=Math.ceil((a-n)/i.pagingLength);var o=i;return i.evt={slcIndex:function(){return o.pageSelectorType===t.fltTypeSlc?o.pagingSlc.options.selectedIndex:parseInt(o.pagingSlc.value,10)-1},nbOpts:function(){return o.pageSelectorType===t.fltTypeSlc?parseInt(o.pagingSlc.options.length,10)-1:o.nbPages-1},next:function(){var t=o.evt.slcIndex()0?o.evt.slcIndex()-1:o.evt.nbOpts();o.changePage(t)},last:function(){o.changePage(o.evt.nbOpts())},first:function(){o.changePage(0)},_detectKey:function(e){var i=b["default"].keyCode(e);13===i&&(t.sorted?(t.filter(),o.changePage(o.evt.slcIndex())):o.changePage(),this.blur())},slcPagesChange:null,nextEvt:null,prevEvt:null,lastEvt:null,firstEvt:null},i}return a(e,t),o(e,[{key:"init",value:function(){var t,e=this,i=this.tf,s=this.evt;if(!this.initialized){this.hasResultsPerPage&&(this.resultsPerPage.length<2?this.hasResultsPerPage=!1:(this.pagingLength=this.resultsPerPage[1][0],this.setResultsPerPage())),s.slcPagesChange=function(t){var i=t.target;e.changePage(i.selectedIndex)},this.pageSelectorType===i.fltTypeSlc&&(t=f["default"].create(i.fltTypeSlc,["id",this.prfxSlcPages+i.id]),t.className=this.pgSlcCssClass,b["default"].add(t,"change",s.slcPagesChange)),this.pageSelectorType===i.fltTypeInp&&(t=f["default"].create(i.fltTypeInp,["id",this.prfxSlcPages+i.id],["value",this.currentPageNb]),t.className=this.pgInpCssClass,b["default"].add(t,"keypress",s._detectKey));var n=f["default"].create("span",["id",this.prfxBtnNextSpan+i.id]),l=f["default"].create("span",["id",this.prfxBtnPrevSpan+i.id]),r=f["default"].create("span",["id",this.prfxBtnLastSpan+i.id]),a=f["default"].create("span",["id",this.prfxBtnFirstSpan+i.id]);if(this.hasPagingBtns){if(this.btnNextPageHtml)n.innerHTML=this.btnNextPageHtml,b["default"].add(n,"click",s.next);else{var o=f["default"].create(i.fltTypeInp,["id",this.prfxBtnNext+i.id],["type","button"],["value",this.btnNextPageText],["title","Next"]);o.className=this.btnPageCssClass,b["default"].add(o,"click",s.next),n.appendChild(o)}if(this.btnPrevPageHtml)l.innerHTML=this.btnPrevPageHtml, +b["default"].add(l,"click",s.prev);else{var u=f["default"].create(i.fltTypeInp,["id",this.prfxBtnPrev+i.id],["type","button"],["value",this.btnPrevPageText],["title","Previous"]);u.className=this.btnPageCssClass,b["default"].add(u,"click",s.prev),l.appendChild(u)}if(this.btnLastPageHtml)r.innerHTML=this.btnLastPageHtml,b["default"].add(r,"click",s.last);else{var h=f["default"].create(i.fltTypeInp,["id",this.prfxBtnLast+i.id],["type","button"],["value",this.btnLastPageText],["title","Last"]);h.className=this.btnPageCssClass,b["default"].add(h,"click",s.last),r.appendChild(h)}if(this.btnFirstPageHtml)a.innerHTML=this.btnFirstPageHtml,b["default"].add(a,"click",s.first);else{var d=f["default"].create(i.fltTypeInp,["id",this.prfxBtnFirst+i.id],["type","button"],["value",this.btnFirstPageText],["title","First"]);d.className=this.btnPageCssClass,b["default"].add(d,"click",s.first),a.appendChild(d)}}this.pagingTgtId||i.setToolbar();var c=this.pagingTgtId?f["default"].id(this.pagingTgtId):i.mDiv;c.appendChild(a),c.appendChild(l);var p=f["default"].create("span",["id",this.prfxPgBeforeSpan+i.id]);p.appendChild(f["default"].text(this.pageText)),p.className=this.nbPgSpanCssClass,c.appendChild(p),c.appendChild(t);var g=f["default"].create("span",["id",this.prfxPgAfterSpan+i.id]);g.appendChild(f["default"].text(this.ofText)),g.className=this.nbPgSpanCssClass,c.appendChild(g);var v=f["default"].create("span",["id",this.prfxPgSpan+i.id]);v.className=this.nbPgSpanCssClass,v.appendChild(f["default"].text(" "+this.nbPages+" ")),c.appendChild(v),c.appendChild(n),c.appendChild(r),this.pagingSlc=f["default"].id(this.prfxSlcPages+i.id),i.rememberGridValues||this.setPagingInfo(),i.fltGrid||(i.validateAllRows(),this.setPagingInfo(i.validRowsIndex)),this.emitter.on(["after-filtering"],function(){return e.resetPagingInfo()}),this.emitter.on(["initialized"],function(){return e.resetValues()}),this.initialized=!0}}},{key:"reset",value:function(){var t=arguments.length<=0||void 0===arguments[0]?!1:arguments[0],e=this.tf;this.isEnabled()||(this.enable(),this.init(),t&&e.filter())}},{key:"resetPagingInfo",value:function(){this.startPagingRow=0,this.currentPageNb=1,this.setPagingInfo(this.tf.validRowsIndex)}},{key:"setPagingInfo",value:function(t){var e=this.tf,i=this.pagingTgtId?f["default"].id(this.pagingTgtId):e.mDiv,s=f["default"].id(this.prfxPgSpan+e.id);if(e.validRowsIndex=t||e.getValidRows(!0),this.nbPages=Math.ceil(e.validRowsIndex.length/this.pagingLength),s.innerHTML=this.nbPages,this.pageSelectorType===e.fltTypeSlc&&(this.pagingSlc.innerHTML=""),this.nbPages>0)if(i.style.visibility="visible",this.pageSelectorType===e.fltTypeSlc)for(var n=0;nl;l++){var a=e.validRowsIndex[l],o=i[a],u=o.getAttribute("validRow"),h=!1;l>=s&&n>l?(c["default"].isNull(u)||Boolean("true"===u))&&(o.style.display="",h=!0):o.style.display="none",this.emitter.emit("row-paged",e,a,l,h)}e.nbVisibleRows=e.validRowsIndex.length,this.emitter.emit("grouped-by-page",e,this)}},{key:"getPage",value:function(){return this.currentPageNb}},{key:"setPage",value:function(t){var e=this.tf;if(e.hasGrid()&&this.isEnabled()){var i=this.evt,s="undefined"==typeof t?"undefined":n(t);if("string"===s)switch(g["default"].lower(t)){case"next":i.next();break;case"previous":i.prev();break;case"last":i.last();break;case"first":i.first();break;default:i.next()}else"number"===s&&this.changePage(t-1)}}},{key:"setResultsPerPage",value:function(){var t=this,e=this.tf,i=this.evt;if(!this.resultsPerPageSlc&&this.resultsPerPage){i.slcResultsChange=function(e){t.changeResultsPerPage(),e.target.blur()};var s=f["default"].create(e.fltTypeSlc,["id",this.prfxSlcResults+e.id]);s.className=this.resultsSlcCssClass;var n=this.resultsPerPage[0],l=this.resultsPerPage[1],r=f["default"].create("span",["id",this.prfxSlcResultsTxt+e.id]);r.className=this.resultsSpanCssClass,this.resultsPerPageTgtId||e.setToolbar();var a=this.resultsPerPageTgtId?f["default"].id(this.resultsPerPageTgtId):e.rDiv;r.appendChild(f["default"].text(n));var o=e.feature("help");o&&o.btn?(o.btn.parentNode.insertBefore(r,o.btn),o.btn.parentNode.insertBefore(s,o.btn)):(a.appendChild(r),a.appendChild(s));for(var u=0;u=0&&t<=this.nbPages-1&&(this.onBeforeChangePage&&this.onBeforeChangePage.call(null,this,t),this.currentPageNb=parseInt(t,10)+1,this.pageSelectorType===e.fltTypeSlc?this.pagingSlc.options[t].selected=!0:this.pagingSlc.value=this.currentPageNb,e.rememberPageNb&&e.feature("store").savePageNb(e.pgNbCookie),this.startPagingRow=this.pageSelectorType===e.fltTypeSlc?this.pagingSlc.value:t*this.pagingLength,this.groupByPage(),this.onAfterChangePage&&this.onAfterChangePage.call(null,this,t)),this.emitter.emit("after-changing-page",e,t))}},{key:"changeResultsPerPage",value:function(){var t=this.tf;if(this.isEnabled()){this.emitter.emit("before-changing-results-per-page",t);var e=this.resultsPerPageSlc,i=this.pageSelectorType===t.fltTypeSlc?this.pagingSlc.selectedIndex:parseInt(this.pagingSlc.value-1,10);if(this.pagingLength=parseInt(e.options[e.selectedIndex].value,10),this.startPagingRow=this.pagingLength*i,!isNaN(this.pagingLength)){if(this.startPagingRow>=t.nbFilterableRows&&(this.startPagingRow=t.nbFilterableRows-this.pagingLength),this.setPagingInfo(),this.pageSelectorType===t.fltTypeSlc){var s=this.pagingSlc.options.length-1<=i?this.pagingSlc.options.length-1:i;this.pagingSlc.options[s].selected=!0}t.rememberPageLen&&t.feature("store").savePageLength(t.pgLenCookie)}this.emitter.emit("after-changing-results-per-page",t)}}},{key:"resetValues",value:function(){var t=this.tf;t.rememberPageLen&&this.resetPageLength(t.pgLenCookie),t.rememberPageNb&&this.resetPage(t.pgNbCookie)}},{key:"resetPage",value:function(t){var e=this.tf;if(this.isEnabled()){this.emitter.emit("before-reset-page",e);var i=e.feature("store").getPageNb(t);""!==i&&this.changePage(i-1),this.emitter.emit("after-reset-page",e,i)}}},{key:"resetPageLength",value:function(t){var e=this.tf;if(this.isEnabled()){this.emitter.emit("before-reset-page-length",e);var i=e.feature("store").getPageLength(t);""!==i&&(this.resultsPerPageSlc.options[i].selected=!0,this.changeResultsPerPage()),this.emitter.emit("after-reset-page-length",e,i)}}},{key:"destroy",value:function(){var t=this,e=this.tf;if(this.initialized){var i=f["default"].id(this.prfxBtnNextSpan+e.id),s=f["default"].id(this.prfxBtnPrevSpan+e.id),n=f["default"].id(this.prfxBtnLastSpan+e.id),l=f["default"].id(this.prfxBtnFirstSpan+e.id),r=f["default"].id(this.prfxPgBeforeSpan+e.id),a=f["default"].id(this.prfxPgAfterSpan+e.id),o=f["default"].id(this.prfxPgSpan+e.id),u=this.evt;this.pagingSlc&&(this.pageSelectorType===e.fltTypeSlc?b["default"].remove(this.pagingSlc,"change",u.slcPagesChange):this.pageSelectorType===e.fltTypeInp&&b["default"].remove(this.pagingSlc,"keypress",u._detectKey),f["default"].remove(this.pagingSlc)),i&&(b["default"].remove(i,"click",u.next),f["default"].remove(i)),s&&(b["default"].remove(s,"click",u.prev),f["default"].remove(s)),n&&(b["default"].remove(n,"click",u.last),f["default"].remove(n)),l&&(b["default"].remove(l,"click",u.first),f["default"].remove(l)),r&&f["default"].remove(r),a&&f["default"].remove(a),o&&f["default"].remove(o),this.hasResultsPerPage&&this.removeResultsPerPage(),this.emitter.off(["after-filtering"],function(){return t.resetPagingInfo()}),this.emitter.off(["initialized"],function(){return t.resetValues()}),this.pagingSlc=null,this.nbPages=0,this.disable(),this.initialized=!1}}}]),e}(u.Feature)},function(t,e,i){"use strict";function s(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var i=0;i':null),i.prfxResetSpan="resetspan_",i}return r(e,t),a(e,[{key:"onClick",value:function(){this.isEnabled()&&this.tf.clearFilters()}},{key:"init",value:function(){var t=this,e=this.tf;if(!this.initialized){var i=h["default"].create("span",["id",this.prfxResetSpan+e.id]);this.btnResetTgtId||e.setToolbar();var s=this.btnResetTgtId?h["default"].id(this.btnResetTgtId):e.rDiv;if(s.appendChild(i),this.btnResetHtml){i.innerHTML=this.btnResetHtml;var n=i.firstChild;d["default"].add(n,"click",function(){t.onClick()})}else{var l=h["default"].create("a",["href","javascript:void(0);"]);l.className=e.btnResetCssClass,l.appendChild(h["default"].text(this.btnResetText)),i.appendChild(l),d["default"].add(l,"click",function(){t.onClick()})}this.btnResetEl=i.firstChild,this.initialized=!0}}},{key:"destroy",value:function(){var t=this.tf;if(this.initialized){var e=h["default"].id(this.prfxResetSpan+t.id);e&&h["default"].remove(e),this.btnResetEl=null,this.initialized=!1}}}]),e}(o.Feature)},function(t,e,i){"use strict";function s(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var i=0;i<, <=, >, >=, =, *, !, {, }, ||,&&, [empty], [nonempty], rgx:
Learn more
',i.instrHtml=s.help_instructions_html||null,i.btnText=s.help_instructions_btn_text||"?",i.btnHtml=s.help_instructions_btn_html||null,i.btnCssClass=s.help_instructions_btn_css_class||"helpBtn",i.contCssClass=s.help_instructions_container_css_class||"helpCont",i.btn=null,i.cont=null,i.defaultHtml='

TableFilter v'+t.version+'

'+p+"
©2015-"+t.year+' Max Guglielmi
',i.prfxHelpSpan="helpSpan_",i.prfxHelpDiv="helpDiv_",i.emitter.on(["init-help"],function(){return i.init()}),i}return r(e,t),a(e,[{key:"init",value:function(){var t=this;if(!this.initialized){var e=this.tf,i=h["default"].create("span",["id",this.prfxHelpSpan+e.id]),s=h["default"].create("div",["id",this.prfxHelpDiv+e.id]);this.tgtId||e.setToolbar();var n=this.tgtId?h["default"].id(this.tgtId):e.rDiv;n.appendChild(i);var l=this.contTgtId?h["default"].id(this.contTgtId):i;if(this.btnHtml){i.innerHTML=this.btnHtml;var r=i.firstChild;d["default"].add(r,"click",function(){t.toggle()}),l.appendChild(s)}else{l.appendChild(s);var a=h["default"].create("a",["href","javascript:void(0);"]);a.className=this.btnCssClass,a.appendChild(h["default"].text(this.btnText)),i.appendChild(a),d["default"].add(a,"click",function(){t.toggle()})}this.instrHtml?(this.contTgtId&&l.appendChild(s),s.innerHTML=this.instrHtml,this.contTgtId||(s.className=this.contCssClass,d["default"].add(s,"dblclick",function(){t.toggle()}))):(s.innerHTML=this.instrText,s.className=this.contCssClass,d["default"].add(s,"dblclick",function(){t.toggle()})),s.innerHTML+=this.defaultHtml,d["default"].add(s,"click",function(){t.toggle()}),this.cont=s,this.btn=i,this.initialized=!0}}},{key:"toggle",value:function(){if(this.enabled!==!1){var t=this.cont.style.display;""===t||"none"===t?this.cont.style.display="inline":this.cont.style.display="none"}}},{key:"destroy",value:function(){this.initialized&&(h["default"].remove(this.btn),this.btn=null,this.cont&&(h["default"].remove(this.cont),this.cont=null,this.initialized=!1))}}]),e}(o.Feature)},function(t,e,i){"use strict";function s(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var i=0;ir;r++){var a=i?r:e[r];this.setRowBg(a,l),l++}}},{key:"processRow",value:function(t,e,i){i?this.setRowBg(t,e):this.removeRowBg(t)}},{key:"setRowBg",value:function(t,e){if(this.isEnabled()&&!isNaN(t)){var i=this.tf.tbl.rows,s=isNaN(e)?t:e;this.removeRowBg(t),h["default"].addClass(i[t],s%2?this.evenCss:this.oddCss)}}},{key:"removeRowBg",value:function(t){if(!isNaN(t)){var e=this.tf.tbl.rows;h["default"].removeClass(e[t],this.oddCss),h["default"].removeClass(e[t],this.evenCss)}}},{key:"destroy",value:function(){var t=this;if(this.initialized){for(var e=0;e0?this.hide():this.show()}},{key:"show",value:function(){this.initialized&&this.isEnabled()&&(this.onBeforeShowMsg&&this.onBeforeShowMsg.call(null,this.tf,this),this.setWidth(),this.cont.style.display="block",this.onAfterShowMsg&&this.onAfterShowMsg.call(null,this.tf,this))}},{key:"hide",value:function(){this.initialized&&this.isEnabled()&&(this.onBeforeHideMsg&&this.onBeforeHideMsg.call(null,this.tf,this),this.cont.style.display="none",this.onBeforeHideMsg&&this.onBeforeHideMsg.call(null,this.tf,this))}},{key:"setWidth",value:function(){if(this.initialized&&!this.isExternal&&this.isEnabled())if(this.tf.gridLayout){var t=this.tf.feature("gridLayout");this.cont.style.width=t.tblCont.clientWidth+"px"}else this.cont.style.width=this.tf.tbl.clientWidth+"px"}},{key:"destroy",value:function(){var t=this;this.initialized&&(h["default"].remove(this.cont),this.cont=null,this.emitter.off(["after-filtering"],function(){return t.toggle()}),this.initialized=!1)}}]),e}(o.Feature)}])}); \ No newline at end of file diff --git a/dist/tablefilter/tf-1.js b/dist/tablefilter/tf-1.js index c1d48c0f..d27a3d86 100644 --- a/dist/tablefilter/tf-1.js +++ b/dist/tablefilter/tf-1.js @@ -1,8 +1,8 @@ /** - * tablefilter v0.0.23 by Max Guglielmi - * build date: 2016-01-15T07:08:13.019Z + * tablefilter v0.1.9 by Max Guglielmi + * build date: 2016-01-27T10:49:29.304Z * MIT License */ -webpackJsonp([1],{25:function(e,t,n){function r(e){return n(s(e))}function s(e){return i[e]||function(){throw new Error("Cannot find module '"+e+"'.")}()}var i={"./array":6,"./array.js":6,"./cookie":4,"./cookie.js":4,"./date":7,"./date.js":7,"./dom":2,"./dom.js":2,"./event":1,"./event.js":1,"./extensions/advancedGrid/adapterEzEditTable":26,"./extensions/advancedGrid/adapterEzEditTable.js":26,"./extensions/advancedGrid/advancedGrid":27,"./extensions/advancedGrid/advancedGrid.js":27,"./extensions/colOps/colOps":28,"./extensions/colOps/colOps.js":28,"./extensions/colsVisibility/colsVisibility":29,"./extensions/colsVisibility/colsVisibility.js":29,"./extensions/filtersVisibility/filtersVisibility":30,"./extensions/filtersVisibility/filtersVisibility.js":30,"./extensions/sort/adapterSortabletable":31,"./extensions/sort/adapterSortabletable.js":31,"./extensions/sort/sort":32,"./extensions/sort/sort.js":32,"./helpers":8,"./helpers.js":8,"./modules/alternateRows":23,"./modules/alternateRows.js":23,"./modules/checkList":17,"./modules/checkList.js":17,"./modules/clearButton":21,"./modules/clearButton.js":21,"./modules/dropdown":15,"./modules/dropdown.js":15,"./modules/feature":11,"./modules/feature.js":11,"./modules/gridLayout":10,"./modules/gridLayout.js":10,"./modules/help":22,"./modules/help.js":22,"./modules/highlightKeywords":13,"./modules/highlightKeywords.js":13,"./modules/loader":12,"./modules/loader.js":12,"./modules/noResults":24,"./modules/noResults.js":24,"./modules/paging":20,"./modules/paging.js":20,"./modules/popupFilter":14,"./modules/popupFilter.js":14,"./modules/rowsCounter":18,"./modules/rowsCounter.js":18,"./modules/statusBar":19,"./modules/statusBar.js":19,"./modules/store":9,"./modules/store.js":9,"./sort":16,"./sort.js":16,"./string":3,"./string.js":3,"./types":5,"./types.js":5};r.keys=function(){return Object.keys(i)},r.resolve=s,e.exports=r,r.id=25},26:function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var n=0;n0&&!n.startRow?void 0:n.startRow||t.refRow,n.base_path=n.base_path||t.basePath+"ezEditTable/";var s=n.editable,i=n.selection;i&&(n.default_selection=n.default_selection||"row"),n.active_cell_css=n.active_cell_css||"ezETSelectedCell";var l=0,a=0;if(i){var d=function(e,n,r){var s=e.Selection,i=function(r){if("row"===e.defaultSelection)s.SelectRowByIndex(r);else{e.ClearSelections();var i=n.cellIndex,l=t.tbl.rows[r];"both"===e.defaultSelection&&s.SelectRowByIndex(r),l&&s.SelectCell(l.cells[i])}if(t.validRowsIndex.length!==t.getRowsNb()){var o=t.tbl.rows[r];o&&o.scrollIntoView(!1),h&&(h.cellIndex===t.getCellsNb()-1&&t.gridLayout?t.tblCont.scrollLeft=1e8:0===h.cellIndex&&t.gridLayout?t.tblCont.scrollLeft=0:h.scrollIntoView(!1))}};if(t.validRowsIndex){var o,d=t.validRowsIndex,u=d.length,c="row"!==e.defaultSelection?n.parentNode:n,h="TD"===n.nodeName?n:null,f=void 0!==r?e.Event.GetKey(r):0,p=-1!==d.indexOf(c.rowIndex),b=t.feature("paging"),g=34===f||33===f?b&&b.pagingLength||e.nbRowsPerPage:1;if(p)34!==f&&33!==f?(l=d.indexOf(c.rowIndex),a=c.rowIndex):(o=34===f?u-1>=l+g?d[l+g]:[u-1]:l-g<=d[0]?d[0]:d[l-g],a=o,l=d.indexOf(o),i(o));else{if(c.rowIndex>a)if(c.rowIndex>=d[u-1])o=d[u-1];else{var m=l+g;o=m>u-1?d[u-1]:d[m]}else if(c.rowIndex<=d[0])o=d[0];else{var y=d[l-g];o=y?y:d[0]}a=c.rowIndex,i(o)}}},u=function(e,n){var r="row"!==e.defaultSelection?n.parentNode:n;if(t.paging&&t.feature("paging").nbPages>1){var s=t.feature("paging");e.nbRowsPerPage=s.pagingLength;var i=t.validRowsIndex,l=i.length,o=parseInt(s.startPagingRow,10)+parseInt(s.pagingLength,10),a=r.rowIndex;a===i[l-1]&&s.currentPageNb!==s.nbPages?s.setPage("last"):a==i[0]&&1!==s.currentPageNb?s.setPage("first"):a>i[o-1]&&ai[0]&&s.setPage("previous")}};if(t.paging&&(t.feature("paging").onAfterChangePage=function(e){var t=e.tf.extension("advancedGrid"),n=t._ezEditTable,r=n.Selection,s=r.GetActiveRow();s&&s.scrollIntoView(!1);var i=r.GetActiveCell();i&&i.scrollIntoView(!1)}),"row"===n.default_selection){var c=n.on_before_selected_row;n.on_before_selected_row=function(){u(arguments[0],arguments[1],arguments[2]),c&&c.call(null,arguments[0],arguments[1],arguments[2])};var h=n.on_after_selected_row;n.on_after_selected_row=function(){d(arguments[0],arguments[1],arguments[2]),h&&h.call(null,arguments[0],arguments[1],arguments[2])}}else{var f=n.on_before_selected_cell;n.on_before_selected_cell=function(){u(arguments[0],arguments[1],arguments[2]),f&&f.call(null,arguments[0],arguments[1],arguments[2])};var p=n.on_after_selected_cell;n.on_after_selected_cell=function(){d(arguments[0],arguments[1],arguments[2]),p&&p.call(null,arguments[0],arguments[1],arguments[2])}}}if(s){var b=n.on_added_dom_row;if(n.on_added_dom_row=function(){t.nbFilterableRows++,t.paging?(t.nbRows++,t.nbVisibleRows++,t.nbFilterableRows++,t.paging=!1,t.feature("paging").destroy(),t.feature("paging").reset()):t.feature("rowsCounter").refresh(),t.alternateRows&&t.feature("alternateRows").init(),b&&b.call(null,arguments[0],arguments[1],arguments[2])},n.actions&&n.actions["delete"]){var g=n.actions["delete"].on_after_submit;n.actions["delete"].on_after_submit=function(){t.nbFilterableRows--,t.paging?(t.nbRows--,t.nbVisibleRows--,t.nbFilterableRows--,t.paging=!1,t.feature("paging").destroy(),t.feature("paging").reset(!1)):t.feature("rowsCounter").refresh(),t.alternateRows&&t.feature("alternateRows").init(),g&&g.call(null,arguments[0],arguments[1])}}}try{this._ezEditTable=new EditTable(t.id,n,e),this._ezEditTable.Init()}catch(m){throw new Error(this.err)}this.initialized=!0}},{key:"reset",value:function(){var e=this._ezEditTable;e&&(this.cfg.selection&&e.Selection.Set(),this.cfg.editable&&e.Editable.Set())}},{key:"destroy",value:function(){var e=this._ezEditTable;e&&(this.cfg.selection&&(e.Selection.ClearSelections(),e.Selection.Remove()),this.cfg.editable&&e.Editable.Remove()),this.initialized=!1}}]),e}();t["default"]=a},27:function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var s=n(26),i=r(s);t["default"]=i["default"]},28:function(module,exports,__webpack_require__){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{"default":e}}function _typeof(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function e(e,t){for(var n=0;n=jj;jj++)ucolIndex[jj]===colIndex[ii]&&(saved=1);0===saved&&(ucolMax++,ucolIndex[ucolMax]=colIndex[ii])}if("object"==_string2["default"].lower("undefined"==typeof labelId?"undefined":_typeof(labelId))&&"object"==_string2["default"].lower("undefined"==typeof colIndex?"undefined":_typeof(colIndex))&&"object"==_string2["default"].lower("undefined"==typeof operation?"undefined":_typeof(operation)))for(var rows=tf.tbl.rows,colvalues=[],ucol=0;ucolMax>=ucol;ucol++){colvalues.push(tf.getColValues(ucolIndex[ucol],!1,!0,excludeRow));for(var result,nbvalues=0,temp,meanValue=0,sumValue=0,minValue=null,maxValue=null,q1Value=null,medValue=null,q3Value=null,meanFlag=0,sumFlag=0,minFlag=0,maxFlag=0,q1Flag=0,medFlag=0,q3Flag=0,theList=[],opsThisCol=[],decThisCol=[],labThisCol=[],oTypeThisCol=[],mThisCol=-1,k=0;kmaxValue?parseFloat(cvalue):maxValue))}if(1===meanFlag&&(meanValue=sumValue/nbvalues),1===medFlag){var aux=0;nbvalues%2===1?(aux=Math.floor(nbvalues/2),medValue=theList[aux]):medValue=(theList[nbvalues/2]+theList[nbvalues/2-1])/2}var posa;if(1===q1Flag&&(posa=0,posa=Math.floor(nbvalues/4),q1Value=4*posa==nbvalues?(theList[posa-1]+theList[posa])/2:theList[posa]),1===q3Flag){posa=0;var posb=0;posa=Math.floor(nbvalues/4),4*posa===nbvalues?(posb=3*posa,q3Value=(theList[posb]+theList[posb-1])/2):q3Value=theList[nbvalues-posa-1]}for(var i=0;mThisCol>=i;i++){switch(opsThisCol[i]){case"mean":result=meanValue;break;case"sum":result=sumValue;break;case"min":result=minValue;break;case"max":result=maxValue;break;case"median":result=medValue;break;case"q1":result=q1Value;break;case"q3":result=q3Value}var precision=isNaN(decThisCol[i])?2:decThisCol[i];if(oTypeThisCol&&result){if(result=result.toFixed(precision),_dom2["default"].id(labThisCol[i]))switch(_string2["default"].lower(oTypeThisCol)){case"innerhtml":isNaN(result)||!isFinite(result)||0===nbvalues?_dom2["default"].id(labThisCol[i]).innerHTML=".":_dom2["default"].id(labThisCol[i]).innerHTML=result;break;case"setvalue":_dom2["default"].id(labThisCol[i]).value=result;break;case"createtextnode":var oldnode=_dom2["default"].id(labThisCol[i]).firstChild,txtnode=_dom2["default"].text(result);_dom2["default"].id(labThisCol[i]).replaceChild(txtnode,oldnode)}}else try{isNaN(result)||!isFinite(result)||0===nbvalues?_dom2["default"].id(labThisCol[i]).innerHTML=".":_dom2["default"].id(labThisCol[i]).innerHTML=result.toFixed(precision)}catch(e){}}var totRow=totRowIndex&&totRowIndex[ucol]?rows[totRowIndex[ucol]]:null;totRow&&(totRow.style.display="")}this.onAfterOperation&&this.onAfterOperation.call(null,tf)}}},{key:"destroy",value:function(){}}]),ColOps}();exports["default"]=ColOps},29:function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var n=0;n0,this.onLoaded=d["default"].isFn(n.on_loaded)?n.on_loaded:null,this.onBeforeOpen=d["default"].isFn(n.on_before_open)?n.on_before_open:null,this.onAfterOpen=d["default"].isFn(n.on_after_open)?n.on_after_open:null,this.onBeforeClose=d["default"].isFn(n.on_before_close)?n.on_before_close:null,this.onAfterClose=d["default"].isFn(n.on_after_close)?n.on_after_close:null,this.onBeforeColHidden=d["default"].isFn(n.on_before_col_hidden)?n.on_before_col_hidden:null,this.onAfterColHidden=d["default"].isFn(n.on_after_col_hidden)?n.on_after_col_hidden:null,this.onBeforeColDisplayed=d["default"].isFn(n.on_before_col_displayed)?n.on_before_col_displayed:null,this.onAfterColDisplayed=d["default"].isFn(n.on_after_col_displayed)?n.on_after_col_displayed:null,t.gridLayout&&(this.headersTbl=t.feature("gridLayout").headTbl,this.headersIndex=0,this.onAfterColDisplayed=function(){},this.onAfterColHidden=function(){}),t["import"](n.name+"Style",t.stylePath+this.stylesheet,null,"link"),this.tf=t}return i(e,[{key:"toggle",value:function(){var e=this.contEl.style.display,t=this.onBeforeOpen,n=this.onBeforeClose,r=this.onAfterOpen,s=this.onAfterClose;t&&"inline"!==e&&t.call(null,this),n&&"inline"===e&&n.call(null,this),this.contEl.style.display="inline"===e?"none":"inline",r&&"inline"!==e&&r.call(null,this),s&&"inline"===e&&s.call(null,this)}},{key:"checkItem",value:function(e){var t=e.parentNode;if(t&&e){var n=e.firstChild.checked,r=e.firstChild.getAttribute("id").split("_")[1];r=parseInt(r,10),n?o["default"].addClass(t,this.listSlcItemCssClass):o["default"].removeClass(t,this.listSlcItemCssClass);var s=!1;(this.tickToHide&&n||!this.tickToHide&&!n)&&(s=!0),this.setHidden(r,s)}}},{key:"init",value:function(){this.manager&&(this.buildBtn(),this.buildManager(),this.initialized=!0)}},{key:"buildBtn",value:function(){var e=this;if(!this.btnEl){var t=this.tf,n=o["default"].create("span",["id",this.prfx+t.id]);n.className=this.spanCssClass,this.btnTgtId||t.setToolbar();var r=this.btnTgtId?o["default"].id(this.btnTgtId):t.rDiv;if(this.btnTgtId)r.appendChild(n);else{var s=r.firstChild;s.parentNode.insertBefore(n,s)}if(this.btnHtml){n.innerHTML=this.btnHtml;var i=n.firstChild;this.enableHover?c["default"].add(i,"mouseover",function(t){e.toggle(t)}):c["default"].add(i,"click",function(t){e.toggle(t)})}else{var l=o["default"].create("a",["href","javascript:;"]);l.className=this.btnCssClass,l.title=this.desc,l.innerHTML=this.btnText,n.appendChild(l),this.enableHover?c["default"].add(l,"mouseover",function(t){e.toggle(t)}):c["default"].add(l,"click",function(t){e.toggle(t)})}this.spanEl=n,this.btnEl=this.spanEl.firstChild,this.onLoaded&&this.onLoaded.call(null,this)}}},{key:"buildManager",value:function(){var e=this,t=this.tf,n=this.contElTgtId?o["default"].id(this.contElTgtId):o["default"].create("div",["id",this.prfxCont+t.id]);n.className=this.contCssClass;var r=o["default"].create("p");r.innerHTML=this.text,n.appendChild(r);var s=o["default"].create("ul",["id","ul"+this.name+"_"+t.id]);s.className=this.listCssClass;var i=this.headersTbl?this.headersTbl:t.tbl,l=this.headersTbl?this.headersIndex:t.getHeadersRowIndex(),a=i.rows[l];if(this.enableTickAll){var d=o["default"].createCheckItem("col__"+t.id,this.tickAllText,this.tickAllText);o["default"].addClass(d,this.listItemCssClass),s.appendChild(d),d.check.checked=!this.tickToHide,c["default"].add(d.check,"click",function(){for(var e=0;e',this.icnCollapseHtml='Collapse filters',this.defaultText="Toggle filters",this.targetId=n.target_id||null,this.enableIcon=n.enable_icon===!1?!1:!0,this.btnText=n.btn_text||"",this.collapseBtnHtml=this.enableIcon?this.icnCollapseHtml+this.btnText:this.btnText||this.defaultText,this.expandBtnHtml=this.enableIcon?this.icnExpandHtml+this.btnText:this.btnText||this.defaultText,this.btnHtml=n.btn_html||null,this.btnCssClass=n.btn_css_class||"btnExpClpFlt",this.contCssClass=n.cont_css_class||"expClpFlt",this.filtersRowIndex=d["default"].isUndef(n.filters_row_index)?t.getFiltersRowIndex():n.filters_row_index,this.visibleAtStart=d["default"].isUndef(n.visible_at_start)?!0:Boolean(n.visible_at_start),this.prfx="fltsVis_",this.onBeforeShow=d["default"].isFn(n.on_before_show)?n.on_before_show:null,this.onAfterShow=d["default"].isFn(n.on_after_show)?n.on_after_show:null,this.onBeforeHide=d["default"].isFn(n.on_before_hide)?n.on_before_hide:null,this.onAfterHide=d["default"].isFn(n.on_after_hide)?n.on_after_hide:null,t["import"](n.name+"Style",t.stylePath+this.stylesheet,null,"link"),this.tf=t}return i(e,[{key:"init",value:function(){this.initialized||(this.buildUI(),this.initialized=!0)}},{key:"buildUI",value:function(){var e=this,t=this.tf,n=o["default"].create("span",["id",this.prfx+t.id]);n.className=this.contCssClass,this.targetId||t.setToolbar();var r=this.targetId?o["default"].id(this.targetId):t.rDiv;if(this.targetId)r.appendChild(n);else{var s=r.firstChild;s.parentNode.insertBefore(n,s)}var i=void 0;this.btnHtml?(n.innerHTML=this.btnHtml,i=n.firstChild):(i=o["default"].create("a",["href","javascript:void(0);"]),i.className=this.btnCssClass,i.title=this.btnText||this.defaultText,i.innerHTML=this.collapseBtnHtml,n.appendChild(i)),c["default"].add(i,"click",function(){return e.toggle()}),this.contEl=n,this.btnEl=i,this.visibleAtStart||this.toggle()}},{key:"toggle",value:function(){var e=this.tf,t=e.gridLayout?e.feature("gridLayout").headTbl:e.tbl,n=t.rows[this.filtersRowIndex],r=n.style.display;this.onBeforeShow&&""!==r&&this.onBeforeShow.call(this,this),this.onBeforeHide&&""===r&&this.onBeforeHide.call(null,this),n.style.display=""===r?"none":"",this.enableIcon&&!this.btnHtml&&(this.btnEl.innerHTML=""===r?this.expandBtnHtml:this.collapseBtnHtml),this.onAfterShow&&""!==r&&this.onAfterShow.call(null,this),this.onAfterHide&&""===r&&this.onAfterHide.call(null,this)}},{key:"destroy",value:function(){(this.btnEl||this.contEl)&&(this.btnEl.innerHTML="",o["default"].remove(this.btnEl),this.btnEl=null,this.contEl.innerHTML="",o["default"].remove(this.contEl),this.contEl=null,this.initialized=!1)}}]),e}();t["default"]=h},31:function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e){return S["default"].removeNbFormat(e,"us")}function l(e){return S["default"].removeNbFormat(e,"eu")}function o(e,t){return C["default"].format(e,t)}function a(e){return o(e,"DMY")}function d(e){return o(e,"MDY")}function u(e){return o(e,"YMD")}function c(e){return o(e,"DDMMMYYYY")}function h(e){var t=e.split(".");for(var n in t){for(var r=t[n];3>r.length;)r="0"+r;t[n]=r}return t.join(".")}function f(e,t){var n=h(e.value.toLowerCase()),r=h(t.value.toLowerCase());return n==r?0:r>n?-1:1}var p=function(){function e(e,t){for(var n=0;nr;r++);return r},SortableTable.prototype.initHeader=function(n){var r=this;if(!r.tHead){if(!t.gridLayout)return;r.tHead=t.feature("gridLayout").headTbl.tHead}r.headersRow=t.headersRow;var s=r.tHead.rows[r.headersRow].cells;r.sortTypes=n||[];for(var i=s.length,l=void 0,o=void 0,a=0;i>a;a++)o=s[a],null!==r.sortTypes[a]&&"None"!==r.sortTypes[a]?(o.style.cursor="pointer",l=y["default"].create("img",["src",e.imgPath+e.imgBlank]),o.appendChild(l),null!==r.sortTypes[a]&&o.setAttribute("_sortType",r.sortTypes[a]),T["default"].add(o,"click",r._headerOnclick)):(o.setAttribute("_sortType",n[a]),o._sortType="None");r.updateHeaderArrows()},SortableTable.prototype.updateHeaderArrows=function(){var t=this,n=void 0,r=void 0,s=void 0;if(e.asyncSort&&e.triggerIds.length>0){var i=e.triggerIds;n=[],r=i.length;for(var l=0;lo;o++){var a=n[o].getAttribute("_sortType");null!==a&&"None"!==a&&(s=n[o].lastChild||n[o],"img"!==s.nodeName.toLowerCase()&&(s=y["default"].create("img",["src",e.imgPath+e.imgBlank]),n[o].appendChild(s)),o===t.sortColumn?s.className=e.imgClassName+" "+(this.descending?e.imgDescClassName:e.imgAscClassName):s.className=e.imgClassName)}},SortableTable.prototype.getRowValue=function(e,t,n){var r=this,s=r._sortTypeInfo[t];if(s&&s.getRowValue)return s.getRowValue(e,n);var i=e.cells[n],l=SortableTable.getInnerText(i);return r.getValueFromString(l,t)},SortableTable.getInnerText=function(t){return t?t.getAttribute(e.customKey)?t.getAttribute(e.customKey):y["default"].getText(t):void 0}}},{key:"addSortType",value:function(){var e=arguments;SortableTable.prototype.addSortType(e[0],e[1],e[2],e[3])}},{key:"setSortTypes",value:function(){for(var e=this,t=this.tf,n=this.sortTypes,r=[],s=0;s0&&!function(){for(var t=e.triggerIds,n=0;n descending, false -> ascending\r\nSortableTable.prototype.defaultDescending = false;\r\n\r\n// shared between all instances. This is intentional to allow external files\r\n// to modify the prototype\r\nSortableTable.prototype._sortTypeInfo = {};\r\n\r\nSortableTable.prototype.setTable = function (oTable) {\r\n if ( this.tHead )\r\n this.uninitHeader();\r\n this.element = oTable;\r\n this.setTHead( oTable.tHead );\r\n this.setTBody( oTable.tBodies[0] );\r\n};\r\n\r\nSortableTable.prototype.setTHead = function (oTHead) {\r\n if (this.tHead && this.tHead != oTHead )\r\n this.uninitHeader();\r\n this.tHead = oTHead;\r\n this.initHeader( this.sortTypes );\r\n};\r\n\r\nSortableTable.prototype.setTBody = function (oTBody) {\r\n this.tBody = oTBody;\r\n};\r\n\r\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\r\n if ( this.tHead )\r\n this.uninitHeader();\r\n this.sortTypes = oSortTypes || [];\r\n if ( this.tHead )\r\n this.initHeader( this.sortTypes );\r\n};\r\n\r\n// adds arrow containers and events\r\n// also binds sort type to the header cells so that reordering columns does\r\n// not break the sort types\r\nSortableTable.prototype.initHeader = function (oSortTypes) {\r\n if (!this.tHead) return;\r\n var cells = this.tHead.rows[0].cells;\r\n var doc = this.tHead.ownerDocument || this.tHead.document;\r\n this.sortTypes = oSortTypes || [];\r\n var l = cells.length;\r\n var img, c;\r\n for (var i = 0; i < l; i++) {\r\n c = cells[i];\r\n if (this.sortTypes[i] != null && this.sortTypes[i] != "None") {\r\n img = doc.createElement("IMG");\r\n img.src = "images/blank.png";\r\n c.appendChild(img);\r\n if (this.sortTypes[i] != null)\r\n c._sortType = this.sortTypes[i];\r\n if (typeof c.addEventListener != "undefined")\r\n c.addEventListener("click", this._headerOnclick, false);\r\n else if (typeof c.attachEvent != "undefined")\r\n c.attachEvent("onclick", this._headerOnclick);\r\n else\r\n c.onclick = this._headerOnclick;\r\n }\r\n else\r\n {\r\n c.setAttribute( "_sortType", oSortTypes[i] );\r\n c._sortType = "None";\r\n }\r\n }\r\n this.updateHeaderArrows();\r\n};\r\n\r\n// remove arrows and events\r\nSortableTable.prototype.uninitHeader = function () {\r\n if (!this.tHead) return;\r\n var cells = this.tHead.rows[0].cells;\r\n var l = cells.length;\r\n var c;\r\n for (var i = 0; i < l; i++) {\r\n c = cells[i];\r\n if (c._sortType != null && c._sortType != "None") {\r\n c.removeChild(c.lastChild);\r\n if (typeof c.removeEventListener != "undefined")\r\n c.removeEventListener("click", this._headerOnclick, false);\r\n else if (typeof c.detachEvent != "undefined")\r\n c.detachEvent("onclick", this._headerOnclick);\r\n c._sortType = null;\r\n c.removeAttribute( "_sortType" );\r\n }\r\n }\r\n};\r\n\r\nSortableTable.prototype.updateHeaderArrows = function () {\r\n if (!this.tHead) return;\r\n var cells = this.tHead.rows[0].cells;\r\n var l = cells.length;\r\n var img;\r\n for (var i = 0; i < l; i++) {\r\n if (cells[i]._sortType != null && cells[i]._sortType != "None") {\r\n img = cells[i].lastChild;\r\n if (i == this.sortColumn)\r\n img.className = "sort-arrow " + (this.descending ? "descending" : "ascending");\r\n else\r\n img.className = "sort-arrow";\r\n }\r\n }\r\n};\r\n\r\nSortableTable.prototype.headerOnclick = function (e) {\r\n // find TD element\r\n var el = e.target || e.srcElement;\r\n while (el.tagName != "TD")\r\n el = el.parentNode;\r\n\r\n this.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\r\n};\r\n\r\n// IE returns wrong cellIndex when columns are hidden\r\nSortableTable.getCellIndex = function (oTd) {\r\n var cells = oTd.parentNode.childNodes\r\n var l = cells.length;\r\n var i;\r\n for (i = 0; cells[i] != oTd && i < l; i++)\r\n ;\r\n return i;\r\n};\r\n\r\nSortableTable.prototype.getSortType = function (nColumn) {\r\n return this.sortTypes[nColumn] || "String";\r\n};\r\n\r\n// only nColumn is required\r\n// if bDescending is left out the old value is taken into account\r\n// if sSortType is left out the sort type is found from the sortTypes array\r\n\r\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\r\n if (!this.tBody) return;\r\n if (sSortType == null)\r\n sSortType = this.getSortType(nColumn);\r\n\r\n // exit if None\r\n if (sSortType == "None")\r\n return;\r\n\r\n if (bDescending == null) {\r\n if (this.sortColumn != nColumn)\r\n this.descending = this.defaultDescending;\r\n else\r\n this.descending = !this.descending;\r\n }\r\n else\r\n this.descending = bDescending;\r\n\r\n this.sortColumn = nColumn;\r\n\r\n if (typeof this.onbeforesort == "function")\r\n this.onbeforesort();\r\n\r\n var f = this.getSortFunction(sSortType, nColumn);\r\n var a = this.getCache(sSortType, nColumn);\r\n var tBody = this.tBody;\r\n\r\n a.sort(f);\r\n\r\n if (this.descending)\r\n a.reverse();\r\n\r\n if (SortableTable.removeBeforeSort) {\r\n // remove from doc\r\n var nextSibling = tBody.nextSibling;\r\n var p = tBody.parentNode;\r\n p.removeChild(tBody);\r\n }\r\n\r\n // insert in the new order\r\n var l = a.length;\r\n for (var i = 0; i < l; i++)\r\n tBody.appendChild(a[i].element);\r\n\r\n if (SortableTable.removeBeforeSort) {\r\n // insert into doc\r\n p.insertBefore(tBody, nextSibling);\r\n }\r\n\r\n this.updateHeaderArrows();\r\n\r\n this.destroyCache(a);\r\n\r\n if (typeof this.onsort == "function")\r\n this.onsort();\r\n};\r\n\r\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\r\n var oThis = this;\r\n this._asyncsort = function () {\r\n oThis.sort(nColumn, bDescending, sSortType);\r\n };\r\n window.setTimeout(this._asyncsort, 1);\r\n};\r\n\r\nSortableTable.prototype.getCache = function (sType, nColumn) {\r\n if (!this.tBody) return [];\r\n var rows = this.tBody.rows;\r\n var l = rows.length;\r\n var a = new Array(l);\r\n var r;\r\n for (var i = 0; i < l; i++) {\r\n r = rows[i];\r\n a[i] = {\r\n value: this.getRowValue(r, sType, nColumn),\r\n element: r\r\n };\r\n };\r\n return a;\r\n};\r\n\r\nSortableTable.prototype.destroyCache = function (oArray) {\r\n var l = oArray.length;\r\n for (var i = 0; i < l; i++) {\r\n oArray[i].value = null;\r\n oArray[i].element = null;\r\n oArray[i] = null;\r\n }\r\n};\r\n\r\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\r\n // if we have defined a custom getRowValue use that\r\n if (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\r\n return this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\r\n\r\n var s;\r\n var c = oRow.cells[nColumn];\r\n if (typeof c.innerText != "undefined")\r\n s = c.innerText;\r\n else\r\n s = SortableTable.getInnerText(c);\r\n return this.getValueFromString(s, sType);\r\n};\r\n\r\nSortableTable.getInnerText = function (oNode) {\r\n var s = "";\r\n var cs = oNode.childNodes;\r\n var l = cs.length;\r\n for (var i = 0; i < l; i++) {\r\n switch (cs[i].nodeType) {\r\n case 1: //ELEMENT_NODE\r\n s += SortableTable.getInnerText(cs[i]);\r\n break;\r\n case 3: //TEXT_NODE\r\n s += cs[i].nodeValue;\r\n break;\r\n }\r\n }\r\n return s;\r\n};\r\n\r\nSortableTable.prototype.getValueFromString = function (sText, sType) {\r\n if (this._sortTypeInfo[sType])\r\n return this._sortTypeInfo[sType].getValueFromString( sText );\r\n return sText;\r\n /*\r\n switch (sType) {\r\n case "Number":\r\n return Number(sText);\r\n case "CaseInsensitiveString":\r\n return sText.toUpperCase();\r\n case "Date":\r\n var parts = sText.split("-");\r\n var d = new Date(0);\r\n d.setFullYear(parts[0]);\r\n d.setDate(parts[2]);\r\n d.setMonth(parts[1] - 1);\r\n return d.valueOf();\r\n }\r\n return sText;\r\n */\r\n };\r\n\r\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\r\n if (this._sortTypeInfo[sType])\r\n return this._sortTypeInfo[sType].compare;\r\n return SortableTable.basicCompare;\r\n};\r\n\r\nSortableTable.prototype.destroy = function () {\r\n this.uninitHeader();\r\n var win = this.document.parentWindow;\r\n if (win && typeof win.detachEvent != "undefined") { // only IE needs this\r\n win.detachEvent("onunload", this._onunload);\r\n }\r\n this._onunload = null;\r\n this.element = null;\r\n this.tHead = null;\r\n this.tBody = null;\r\n this.document = null;\r\n this._headerOnclick = null;\r\n this.sortTypes = null;\r\n this._asyncsort = null;\r\n this.onsort = null;\r\n};\r\n\r\n// Adds a sort type to all instance of SortableTable\r\n// sType : String - the identifier of the sort type\r\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\r\n// string and casts it to a desired format. If left out the string is just\r\n// returned\r\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\r\n// compare function. Takes two values and compares them. If left out less than,\r\n// <, compare is used\r\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\r\n// that takes the row and the column index and returns the value used to compare.\r\n// If left out then the innerText is first taken for the cell and then the\r\n// fGetValueFromString is used to convert that string the desired value and type\r\n\r\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\r\n this._sortTypeInfo[sType] = {\r\n type: sType,\r\n getValueFromString: fGetValueFromString || SortableTable.idFunction,\r\n compare: fCompareFunction || SortableTable.basicCompare,\r\n getRowValue: fGetRowValue\r\n };\r\n};\r\n\r\n// this removes the sort type from all instances of SortableTable\r\nSortableTable.prototype.removeSortType = function (sType) {\r\n delete this._sortTypeInfo[sType];\r\n};\r\n\r\nSortableTable.basicCompare = function compare(n1, n2) {\r\n if (n1.value < n2.value)\r\n return -1;\r\n if (n2.value < n1.value)\r\n return 1;\r\n return 0;\r\n};\r\n\r\nSortableTable.idFunction = function (x) {\r\n return x;\r\n};\r\n\r\nSortableTable.toUpperCase = function (s) {\r\n return s.toUpperCase();\r\n};\r\n\r\nSortableTable.toDate = function (s) {\r\n var parts = s.split("-");\r\n var d = new Date(0);\r\n d.setFullYear(parts[0]);\r\n d.setDate(parts[2]);\r\n d.setMonth(parts[1] - 1);\r\n return d.valueOf();\r\n};\r\n\r\n\r\n// add sort types\r\nSortableTable.prototype.addSortType("Number", Number);\r\nSortableTable.prototype.addSortType("CaseInsensitiveString", SortableTable.toUpperCase);\r\nSortableTable.prototype.addSortType("Date", SortableTable.toDate);\r\nSortableTable.prototype.addSortType("String");\r\n// None is a special case\r\n'}}); \ No newline at end of file +webpackJsonp([1],{26:function(e,t,n){function r(e){return n(s(e))}function s(e){return i[e]||function(){throw new Error("Cannot find module '"+e+"'.")}()}var i={"./array":16,"./array.js":16,"./cookie":9,"./cookie.js":9,"./date":5,"./date.js":5,"./dom":2,"./dom.js":2,"./emitter":7,"./emitter.js":7,"./event":1,"./event.js":1,"./extensions/advancedGrid/adapterEzEditTable":27,"./extensions/advancedGrid/adapterEzEditTable.js":27,"./extensions/advancedGrid/advancedGrid":28,"./extensions/advancedGrid/advancedGrid.js":28,"./extensions/colOps/colOps":29,"./extensions/colOps/colOps.js":29,"./extensions/colsVisibility/colsVisibility":30,"./extensions/colsVisibility/colsVisibility.js":30,"./extensions/filtersVisibility/filtersVisibility":31,"./extensions/filtersVisibility/filtersVisibility.js":31,"./extensions/sort/adapterSortabletable":32,"./extensions/sort/adapterSortabletable.js":32,"./extensions/sort/sort":33,"./extensions/sort/sort.js":33,"./helpers":6,"./helpers.js":6,"./modules/alternateRows":24,"./modules/alternateRows.js":24,"./modules/checkList":18,"./modules/checkList.js":18,"./modules/clearButton":22,"./modules/clearButton.js":22,"./modules/dropdown":15,"./modules/dropdown.js":15,"./modules/feature":11,"./modules/feature.js":11,"./modules/gridLayout":10,"./modules/gridLayout.js":10,"./modules/help":23,"./modules/help.js":23,"./modules/highlightKeywords":13,"./modules/highlightKeywords.js":13,"./modules/loader":12,"./modules/loader.js":12,"./modules/noResults":25,"./modules/noResults.js":25,"./modules/paging":21,"./modules/paging.js":21,"./modules/popupFilter":14,"./modules/popupFilter.js":14,"./modules/rowsCounter":19,"./modules/rowsCounter.js":19,"./modules/statusBar":20,"./modules/statusBar.js":20,"./modules/store":8,"./modules/store.js":8,"./sort":17,"./sort.js":17,"./string":3,"./string.js":3,"./types":4,"./types.js":4};r.keys=function(){return Object.keys(i)},r.resolve=s,e.exports=r,r.id=26},27:function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var n=0;n0&&!n.startRow?void 0:n.startRow||t.refRow,n.base_path=n.base_path||t.basePath+"ezEditTable/";var s=n.editable,i=n.selection;i&&(n.default_selection=n.default_selection||"row"),n.active_cell_css=n.active_cell_css||"ezETSelectedCell";var l=0,a=0;if(i){var d=function(e,n,r){var s=e.Selection,i=function(r){if("row"===e.defaultSelection)s.SelectRowByIndex(r);else{e.ClearSelections();var i=n.cellIndex,l=t.tbl.rows[r];"both"===e.defaultSelection&&s.SelectRowByIndex(r),l&&s.SelectCell(l.cells[i])}if(t.validRowsIndex.length!==t.getRowsNb()){var o=t.tbl.rows[r];o&&o.scrollIntoView(!1),h&&(h.cellIndex===t.getCellsNb()-1&&t.gridLayout?t.tblCont.scrollLeft=1e8:0===h.cellIndex&&t.gridLayout?t.tblCont.scrollLeft=0:h.scrollIntoView(!1))}};if(t.validRowsIndex){var o,d=t.validRowsIndex,u=d.length,c="row"!==e.defaultSelection?n.parentNode:n,h="TD"===n.nodeName?n:null,f=void 0!==r?e.Event.GetKey(r):0,p=-1!==d.indexOf(c.rowIndex),b=t.feature("paging"),m=34===f||33===f?b&&b.pagingLength||e.nbRowsPerPage:1;if(p)34!==f&&33!==f?(l=d.indexOf(c.rowIndex),a=c.rowIndex):(o=34===f?u-1>=l+m?d[l+m]:[u-1]:l-m<=d[0]?d[0]:d[l-m],a=o,l=d.indexOf(o),i(o));else{if(c.rowIndex>a)if(c.rowIndex>=d[u-1])o=d[u-1];else{var g=l+m;o=g>u-1?d[u-1]:d[g]}else if(c.rowIndex<=d[0])o=d[0];else{var y=d[l-m];o=y?y:d[0]}a=c.rowIndex,i(o)}}},u=function(e,n){var r="row"!==e.defaultSelection?n.parentNode:n;if(t.paging&&t.feature("paging").nbPages>1){var s=t.feature("paging");e.nbRowsPerPage=s.pagingLength;var i=t.validRowsIndex,l=i.length,o=parseInt(s.startPagingRow,10)+parseInt(s.pagingLength,10),a=r.rowIndex;a===i[l-1]&&s.currentPageNb!==s.nbPages?s.setPage("last"):a==i[0]&&1!==s.currentPageNb?s.setPage("first"):a>i[o-1]&&ai[0]&&s.setPage("previous")}};if(t.paging&&(t.feature("paging").onAfterChangePage=function(e){var t=e.tf.extension("advancedGrid"),n=t._ezEditTable,r=n.Selection,s=r.GetActiveRow();s&&s.scrollIntoView(!1);var i=r.GetActiveCell();i&&i.scrollIntoView(!1)}),"row"===n.default_selection){var c=n.on_before_selected_row;n.on_before_selected_row=function(){u(arguments[0],arguments[1],arguments[2]),c&&c.call(null,arguments[0],arguments[1],arguments[2])};var h=n.on_after_selected_row;n.on_after_selected_row=function(){d(arguments[0],arguments[1],arguments[2]),h&&h.call(null,arguments[0],arguments[1],arguments[2])}}else{var f=n.on_before_selected_cell;n.on_before_selected_cell=function(){u(arguments[0],arguments[1],arguments[2]),f&&f.call(null,arguments[0],arguments[1],arguments[2])};var p=n.on_after_selected_cell;n.on_after_selected_cell=function(){d(arguments[0],arguments[1],arguments[2]),p&&p.call(null,arguments[0],arguments[1],arguments[2])}}}if(s){var b=n.on_added_dom_row;if(n.on_added_dom_row=function(){t.nbFilterableRows++,t.paging?(t.nbRows++,t.nbVisibleRows++,t.nbFilterableRows++,t.paging=!1,t.feature("paging").destroy(),t.feature("paging").reset()):t.emitter.emit("rows-changed",t,this),t.alternateRows&&t.feature("alternateRows").init(),b&&b.call(null,arguments[0],arguments[1],arguments[2])},n.actions&&n.actions["delete"]){var m=n.actions["delete"].on_after_submit;n.actions["delete"].on_after_submit=function(){t.nbFilterableRows--,t.paging?(t.nbRows--,t.nbVisibleRows--,t.nbFilterableRows--,t.paging=!1,t.feature("paging").destroy(),t.feature("paging").reset(!1)):t.emitter.emit("rows-changed",t,this),t.alternateRows&&t.feature("alternateRows").init(),m&&m.call(null,arguments[0],arguments[1])}}}try{this._ezEditTable=new EditTable(t.id,n,e),this._ezEditTable.Init()}catch(g){throw new Error(this.err)}this.initialized=!0}},{key:"reset",value:function(){var e=this._ezEditTable;e&&(this.cfg.selection&&e.Selection.Set(),this.cfg.editable&&e.Editable.Set())}},{key:"toggle",value:function(){var e=this._ezEditTable;e.editable?e.Editable.Remove():e.Editable.Set(),e.selection?e.Selection.Remove():e.Selection.Set()}},{key:"_toggleForInputFilter",value:function(){var e=this.tf;if(e.activeFlt){var t=e.activeFlt.getAttribute("ct"),n=e.getFilterType(t);n===e.fltTypeInp&&this.toggle()}}},{key:"destroy",value:function(){var e=this,t=this._ezEditTable;t&&(this.cfg.selection&&(t.Selection.ClearSelections(),t.Selection.Remove()),this.cfg.editable&&t.Editable.Remove()),this.emitter.off(["filter-focus","filter-blur"],function(){return e._toggleForInputFilter()}),this.initialized=!1}}]),e}();t["default"]=a},28:function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var s=n(27),i=r(s);t["default"]=i["default"]},29:function(module,exports,__webpack_require__){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{"default":e}}function _typeof(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function e(e,t){for(var n=0;n=jj;jj++)ucolIndex[jj]===colIndex[ii]&&(saved=1);0===saved&&(ucolMax++,ucolIndex[ucolMax]=colIndex[ii])}if("object"==_string2["default"].lower("undefined"==typeof labelId?"undefined":_typeof(labelId))&&"object"==_string2["default"].lower("undefined"==typeof colIndex?"undefined":_typeof(colIndex))&&"object"==_string2["default"].lower("undefined"==typeof operation?"undefined":_typeof(operation)))for(var rows=tf.tbl.rows,colvalues=[],ucol=0;ucolMax>=ucol;ucol++){colvalues.push(tf.getColValues(ucolIndex[ucol],!1,!0,excludeRow));for(var result,nbvalues=0,temp,meanValue=0,sumValue=0,minValue=null,maxValue=null,q1Value=null,medValue=null,q3Value=null,meanFlag=0,sumFlag=0,minFlag=0,maxFlag=0,q1Flag=0,medFlag=0,q3Flag=0,theList=[],opsThisCol=[],decThisCol=[],labThisCol=[],oTypeThisCol=[],mThisCol=-1,k=0;kmaxValue?parseFloat(cvalue):maxValue))}if(1===meanFlag&&(meanValue=sumValue/nbvalues),1===medFlag){var aux=0;nbvalues%2===1?(aux=Math.floor(nbvalues/2),medValue=theList[aux]):medValue=(theList[nbvalues/2]+theList[nbvalues/2-1])/2}var posa;if(1===q1Flag&&(posa=0,posa=Math.floor(nbvalues/4),q1Value=4*posa==nbvalues?(theList[posa-1]+theList[posa])/2:theList[posa]),1===q3Flag){posa=0;var posb=0;posa=Math.floor(nbvalues/4),4*posa===nbvalues?(posb=3*posa,q3Value=(theList[posb]+theList[posb-1])/2):q3Value=theList[nbvalues-posa-1]}for(var i=0;mThisCol>=i;i++){switch(opsThisCol[i]){case"mean":result=meanValue;break;case"sum":result=sumValue;break;case"min":result=minValue;break;case"max":result=maxValue;break;case"median":result=medValue;break;case"q1":result=q1Value;break;case"q3":result=q3Value}var precision=isNaN(decThisCol[i])?2:decThisCol[i];if(oTypeThisCol&&result){if(result=result.toFixed(precision),_dom2["default"].id(labThisCol[i]))switch(_string2["default"].lower(oTypeThisCol)){case"innerhtml":isNaN(result)||!isFinite(result)||0===nbvalues?_dom2["default"].id(labThisCol[i]).innerHTML=".":_dom2["default"].id(labThisCol[i]).innerHTML=result;break;case"setvalue":_dom2["default"].id(labThisCol[i]).value=result;break;case"createtextnode":var oldnode=_dom2["default"].id(labThisCol[i]).firstChild,txtnode=_dom2["default"].text(result);_dom2["default"].id(labThisCol[i]).replaceChild(txtnode,oldnode)}}else try{isNaN(result)||!isFinite(result)||0===nbvalues?_dom2["default"].id(labThisCol[i]).innerHTML=".":_dom2["default"].id(labThisCol[i]).innerHTML=result.toFixed(precision)}catch(e){}}var totRow=totRowIndex&&totRowIndex[ucol]?rows[totRowIndex[ucol]]:null;totRow&&(totRow.style.display="")}this.onAfterOperation&&this.onAfterOperation.call(null,tf)}}},{key:"destroy",value:function(){var e=this;this.tf.emitter.off(["after-filtering"],function(){return e.calc()})}}]),ColOps}();exports["default"]=ColOps},30:function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var n=0;n0,this.onLoaded=d["default"].isFn(n.on_loaded)?n.on_loaded:null,this.onBeforeOpen=d["default"].isFn(n.on_before_open)?n.on_before_open:null,this.onAfterOpen=d["default"].isFn(n.on_after_open)?n.on_after_open:null,this.onBeforeClose=d["default"].isFn(n.on_before_close)?n.on_before_close:null,this.onAfterClose=d["default"].isFn(n.on_after_close)?n.on_after_close:null,this.onBeforeColHidden=d["default"].isFn(n.on_before_col_hidden)?n.on_before_col_hidden:null,this.onAfterColHidden=d["default"].isFn(n.on_after_col_hidden)?n.on_after_col_hidden:null,this.onBeforeColDisplayed=d["default"].isFn(n.on_before_col_displayed)?n.on_before_col_displayed:null,this.onAfterColDisplayed=d["default"].isFn(n.on_after_col_displayed)?n.on_after_col_displayed:null,t.gridLayout&&(this.headersTbl=t.feature("gridLayout").headTbl,this.headersIndex=0,this.onAfterColDisplayed=function(){},this.onAfterColHidden=function(){}),t["import"](n.name+"Style",t.stylePath+this.stylesheet,null,"link"),this.tf=t}return i(e,[{key:"toggle",value:function(){var e=this.contEl.style.display,t=this.onBeforeOpen,n=this.onBeforeClose,r=this.onAfterOpen,s=this.onAfterClose;t&&"inline"!==e&&t.call(null,this),n&&"inline"===e&&n.call(null,this),this.contEl.style.display="inline"===e?"none":"inline",r&&"inline"!==e&&r.call(null,this),s&&"inline"===e&&s.call(null,this)}},{key:"checkItem",value:function(e){var t=e.parentNode;if(t&&e){var n=e.firstChild.checked,r=e.firstChild.getAttribute("id").split("_")[1];r=parseInt(r,10),n?o["default"].addClass(t,this.listSlcItemCssClass):o["default"].removeClass(t,this.listSlcItemCssClass);var s=!1;(this.tickToHide&&n||!this.tickToHide&&!n)&&(s=!0),this.setHidden(r,s)}}},{key:"init",value:function(){this.manager&&(this.buildBtn(),this.buildManager(),this.initialized=!0)}},{key:"buildBtn",value:function(){var e=this;if(!this.btnEl){var t=this.tf,n=o["default"].create("span",["id",this.prfx+t.id]);n.className=this.spanCssClass,this.btnTgtId||t.setToolbar();var r=this.btnTgtId?o["default"].id(this.btnTgtId):t.rDiv;if(this.btnTgtId)r.appendChild(n);else{var s=r.firstChild;s.parentNode.insertBefore(n,s)}if(this.btnHtml){n.innerHTML=this.btnHtml;var i=n.firstChild;this.enableHover?c["default"].add(i,"mouseover",function(t){e.toggle(t)}):c["default"].add(i,"click",function(t){e.toggle(t)})}else{var l=o["default"].create("a",["href","javascript:;"]);l.className=this.btnCssClass,l.title=this.desc,l.innerHTML=this.btnText,n.appendChild(l),this.enableHover?c["default"].add(l,"mouseover",function(t){e.toggle(t)}):c["default"].add(l,"click",function(t){e.toggle(t)})}this.spanEl=n,this.btnEl=this.spanEl.firstChild,this.onLoaded&&this.onLoaded.call(null,this)}}},{key:"buildManager",value:function(){var e=this,t=this.tf,n=this.contElTgtId?o["default"].id(this.contElTgtId):o["default"].create("div",["id",this.prfxCont+t.id]);n.className=this.contCssClass;var r=o["default"].create("p");r.innerHTML=this.text,n.appendChild(r);var s=o["default"].create("ul",["id","ul"+this.name+"_"+t.id]);s.className=this.listCssClass;var i=this.headersTbl?this.headersTbl:t.tbl,l=this.headersTbl?this.headersIndex:t.getHeadersRowIndex(),a=i.rows[l];if(this.enableTickAll){var d=o["default"].createCheckItem("col__"+t.id,this.tickAllText,this.tickAllText);o["default"].addClass(d,this.listItemCssClass),s.appendChild(d),d.check.checked=!this.tickToHide,c["default"].add(d.check,"click",function(){for(var e=0;e',this.icnCollapseHtml='Collapse filters',this.defaultText="Toggle filters",this.targetId=n.target_id||null,this.enableIcon=n.enable_icon===!1?!1:!0,this.btnText=n.btn_text||"",this.collapseBtnHtml=this.enableIcon?this.icnCollapseHtml+this.btnText:this.btnText||this.defaultText,this.expandBtnHtml=this.enableIcon?this.icnExpandHtml+this.btnText:this.btnText||this.defaultText,this.btnHtml=n.btn_html||null,this.btnCssClass=n.btn_css_class||"btnExpClpFlt",this.contCssClass=n.cont_css_class||"expClpFlt",this.filtersRowIndex=d["default"].isUndef(n.filters_row_index)?t.getFiltersRowIndex():n.filters_row_index,this.visibleAtStart=d["default"].isUndef(n.visible_at_start)?!0:Boolean(n.visible_at_start),this.prfx="fltsVis_",this.onBeforeShow=d["default"].isFn(n.on_before_show)?n.on_before_show:null,this.onAfterShow=d["default"].isFn(n.on_after_show)?n.on_after_show:null,this.onBeforeHide=d["default"].isFn(n.on_before_hide)?n.on_before_hide:null,this.onAfterHide=d["default"].isFn(n.on_after_hide)?n.on_after_hide:null,t["import"](n.name+"Style",t.stylePath+this.stylesheet,null,"link"),this.tf=t}return i(e,[{key:"init",value:function(){this.initialized||(this.buildUI(),this.initialized=!0)}},{key:"buildUI",value:function(){var e=this,t=this.tf,n=o["default"].create("span",["id",this.prfx+t.id]);n.className=this.contCssClass,this.targetId||t.setToolbar();var r=this.targetId?o["default"].id(this.targetId):t.rDiv;if(this.targetId)r.appendChild(n);else{var s=r.firstChild;s.parentNode.insertBefore(n,s)}var i=void 0;this.btnHtml?(n.innerHTML=this.btnHtml,i=n.firstChild):(i=o["default"].create("a",["href","javascript:void(0);"]),i.className=this.btnCssClass,i.title=this.btnText||this.defaultText,i.innerHTML=this.collapseBtnHtml,n.appendChild(i)),c["default"].add(i,"click",function(){return e.toggle()}),this.contEl=n,this.btnEl=i,this.visibleAtStart||this.toggle()}},{key:"toggle",value:function(){var e=this.tf,t=e.gridLayout?e.feature("gridLayout").headTbl:e.tbl,n=t.rows[this.filtersRowIndex],r=n.style.display;this.onBeforeShow&&""!==r&&this.onBeforeShow.call(this,this),this.onBeforeHide&&""===r&&this.onBeforeHide.call(null,this),n.style.display=""===r?"none":"",this.enableIcon&&!this.btnHtml&&(this.btnEl.innerHTML=""===r?this.expandBtnHtml:this.collapseBtnHtml),this.onAfterShow&&""!==r&&this.onAfterShow.call(null,this),this.onAfterHide&&""===r&&this.onAfterHide.call(null,this)}},{key:"destroy",value:function(){(this.btnEl||this.contEl)&&(this.btnEl.innerHTML="",o["default"].remove(this.btnEl),this.btnEl=null,this.contEl.innerHTML="",o["default"].remove(this.contEl),this.contEl=null,this.initialized=!1)}}]),e}();t["default"]=h},32:function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e){return S["default"].removeNbFormat(e,"us")}function l(e){return S["default"].removeNbFormat(e,"eu")}function o(e,t){return C["default"].format(e,t)}function a(e){return o(e,"DMY")}function d(e){return o(e,"MDY")}function u(e){return o(e,"YMD")}function c(e){return o(e,"DDMMMYYYY")}function h(e){var t=e.split(".");for(var n in t){for(var r=t[n];3>r.length;)r="0"+r;t[n]=r}return t.join(".")}function f(e,t){var n=h(e.value.toLowerCase()),r=h(t.value.toLowerCase());return n==r?0:r>n?-1:1}var p=function(){function e(e,t){for(var n=0;nr;r++);return r},SortableTable.prototype.initHeader=function(n){var r=this;if(!r.tHead){if(!t.gridLayout)return;r.tHead=t.feature("gridLayout").headTbl.tHead}r.headersRow=t.headersRow;var s=r.tHead.rows[r.headersRow].cells;r.sortTypes=n||[];for(var i=s.length,l=void 0,o=void 0,a=0;i>a;a++)o=s[a],null!==r.sortTypes[a]&&"None"!==r.sortTypes[a]?(o.style.cursor="pointer",l=y["default"].create("img",["src",e.imgPath+e.imgBlank]),o.appendChild(l),null!==r.sortTypes[a]&&o.setAttribute("_sortType",r.sortTypes[a]),T["default"].add(o,"click",r._headerOnclick)):(o.setAttribute("_sortType",n[a]),o._sortType="None");r.updateHeaderArrows()},SortableTable.prototype.updateHeaderArrows=function(){var t=this,n=void 0,r=void 0,s=void 0;if(e.asyncSort&&e.triggerIds.length>0){var i=e.triggerIds;n=[],r=i.length;for(var l=0;lo;o++){var a=n[o].getAttribute("_sortType");null!==a&&"None"!==a&&(s=n[o].lastChild||n[o],"img"!==s.nodeName.toLowerCase()&&(s=y["default"].create("img",["src",e.imgPath+e.imgBlank]),n[o].appendChild(s)),o===t.sortColumn?s.className=e.imgClassName+" "+(this.descending?e.imgDescClassName:e.imgAscClassName):s.className=e.imgClassName)}},SortableTable.prototype.getRowValue=function(e,t,n){var r=this,s=r._sortTypeInfo[t];if(s&&s.getRowValue)return s.getRowValue(e,n);var i=e.cells[n],l=SortableTable.getInnerText(i);return r.getValueFromString(l,t)},SortableTable.getInnerText=function(t){return t?t.getAttribute(e.customKey)?t.getAttribute(e.customKey):y["default"].getText(t):void 0}}},{key:"addSortType",value:function(){var e=arguments;SortableTable.prototype.addSortType(e[0],e[1],e[2],e[3])}},{key:"setSortTypes",value:function(){for(var e=this,t=this.tf,n=this.sortTypes,r=[],s=0;s0&&!function(){for(var t=e.triggerIds,n=0;n descending, false -> ascending\r\nSortableTable.prototype.defaultDescending = false;\r\n\r\n// shared between all instances. This is intentional to allow external files\r\n// to modify the prototype\r\nSortableTable.prototype._sortTypeInfo = {};\r\n\r\nSortableTable.prototype.setTable = function (oTable) {\r\n if ( this.tHead )\r\n this.uninitHeader();\r\n this.element = oTable;\r\n this.setTHead( oTable.tHead );\r\n this.setTBody( oTable.tBodies[0] );\r\n};\r\n\r\nSortableTable.prototype.setTHead = function (oTHead) {\r\n if (this.tHead && this.tHead != oTHead )\r\n this.uninitHeader();\r\n this.tHead = oTHead;\r\n this.initHeader( this.sortTypes );\r\n};\r\n\r\nSortableTable.prototype.setTBody = function (oTBody) {\r\n this.tBody = oTBody;\r\n};\r\n\r\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\r\n if ( this.tHead )\r\n this.uninitHeader();\r\n this.sortTypes = oSortTypes || [];\r\n if ( this.tHead )\r\n this.initHeader( this.sortTypes );\r\n};\r\n\r\n// adds arrow containers and events\r\n// also binds sort type to the header cells so that reordering columns does\r\n// not break the sort types\r\nSortableTable.prototype.initHeader = function (oSortTypes) {\r\n if (!this.tHead) return;\r\n var cells = this.tHead.rows[0].cells;\r\n var doc = this.tHead.ownerDocument || this.tHead.document;\r\n this.sortTypes = oSortTypes || [];\r\n var l = cells.length;\r\n var img, c;\r\n for (var i = 0; i < l; i++) {\r\n c = cells[i];\r\n if (this.sortTypes[i] != null && this.sortTypes[i] != "None") {\r\n img = doc.createElement("IMG");\r\n img.src = "images/blank.png";\r\n c.appendChild(img);\r\n if (this.sortTypes[i] != null)\r\n c._sortType = this.sortTypes[i];\r\n if (typeof c.addEventListener != "undefined")\r\n c.addEventListener("click", this._headerOnclick, false);\r\n else if (typeof c.attachEvent != "undefined")\r\n c.attachEvent("onclick", this._headerOnclick);\r\n else\r\n c.onclick = this._headerOnclick;\r\n }\r\n else\r\n {\r\n c.setAttribute( "_sortType", oSortTypes[i] );\r\n c._sortType = "None";\r\n }\r\n }\r\n this.updateHeaderArrows();\r\n};\r\n\r\n// remove arrows and events\r\nSortableTable.prototype.uninitHeader = function () {\r\n if (!this.tHead) return;\r\n var cells = this.tHead.rows[0].cells;\r\n var l = cells.length;\r\n var c;\r\n for (var i = 0; i < l; i++) {\r\n c = cells[i];\r\n if (c._sortType != null && c._sortType != "None") {\r\n c.removeChild(c.lastChild);\r\n if (typeof c.removeEventListener != "undefined")\r\n c.removeEventListener("click", this._headerOnclick, false);\r\n else if (typeof c.detachEvent != "undefined")\r\n c.detachEvent("onclick", this._headerOnclick);\r\n c._sortType = null;\r\n c.removeAttribute( "_sortType" );\r\n }\r\n }\r\n};\r\n\r\nSortableTable.prototype.updateHeaderArrows = function () {\r\n if (!this.tHead) return;\r\n var cells = this.tHead.rows[0].cells;\r\n var l = cells.length;\r\n var img;\r\n for (var i = 0; i < l; i++) {\r\n if (cells[i]._sortType != null && cells[i]._sortType != "None") {\r\n img = cells[i].lastChild;\r\n if (i == this.sortColumn)\r\n img.className = "sort-arrow " + (this.descending ? "descending" : "ascending");\r\n else\r\n img.className = "sort-arrow";\r\n }\r\n }\r\n};\r\n\r\nSortableTable.prototype.headerOnclick = function (e) {\r\n // find TD element\r\n var el = e.target || e.srcElement;\r\n while (el.tagName != "TD")\r\n el = el.parentNode;\r\n\r\n this.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\r\n};\r\n\r\n// IE returns wrong cellIndex when columns are hidden\r\nSortableTable.getCellIndex = function (oTd) {\r\n var cells = oTd.parentNode.childNodes\r\n var l = cells.length;\r\n var i;\r\n for (i = 0; cells[i] != oTd && i < l; i++)\r\n ;\r\n return i;\r\n};\r\n\r\nSortableTable.prototype.getSortType = function (nColumn) {\r\n return this.sortTypes[nColumn] || "String";\r\n};\r\n\r\n// only nColumn is required\r\n// if bDescending is left out the old value is taken into account\r\n// if sSortType is left out the sort type is found from the sortTypes array\r\n\r\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\r\n if (!this.tBody) return;\r\n if (sSortType == null)\r\n sSortType = this.getSortType(nColumn);\r\n\r\n // exit if None\r\n if (sSortType == "None")\r\n return;\r\n\r\n if (bDescending == null) {\r\n if (this.sortColumn != nColumn)\r\n this.descending = this.defaultDescending;\r\n else\r\n this.descending = !this.descending;\r\n }\r\n else\r\n this.descending = bDescending;\r\n\r\n this.sortColumn = nColumn;\r\n\r\n if (typeof this.onbeforesort == "function")\r\n this.onbeforesort();\r\n\r\n var f = this.getSortFunction(sSortType, nColumn);\r\n var a = this.getCache(sSortType, nColumn);\r\n var tBody = this.tBody;\r\n\r\n a.sort(f);\r\n\r\n if (this.descending)\r\n a.reverse();\r\n\r\n if (SortableTable.removeBeforeSort) {\r\n // remove from doc\r\n var nextSibling = tBody.nextSibling;\r\n var p = tBody.parentNode;\r\n p.removeChild(tBody);\r\n }\r\n\r\n // insert in the new order\r\n var l = a.length;\r\n for (var i = 0; i < l; i++)\r\n tBody.appendChild(a[i].element);\r\n\r\n if (SortableTable.removeBeforeSort) {\r\n // insert into doc\r\n p.insertBefore(tBody, nextSibling);\r\n }\r\n\r\n this.updateHeaderArrows();\r\n\r\n this.destroyCache(a);\r\n\r\n if (typeof this.onsort == "function")\r\n this.onsort();\r\n};\r\n\r\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\r\n var oThis = this;\r\n this._asyncsort = function () {\r\n oThis.sort(nColumn, bDescending, sSortType);\r\n };\r\n window.setTimeout(this._asyncsort, 1);\r\n};\r\n\r\nSortableTable.prototype.getCache = function (sType, nColumn) {\r\n if (!this.tBody) return [];\r\n var rows = this.tBody.rows;\r\n var l = rows.length;\r\n var a = new Array(l);\r\n var r;\r\n for (var i = 0; i < l; i++) {\r\n r = rows[i];\r\n a[i] = {\r\n value: this.getRowValue(r, sType, nColumn),\r\n element: r\r\n };\r\n };\r\n return a;\r\n};\r\n\r\nSortableTable.prototype.destroyCache = function (oArray) {\r\n var l = oArray.length;\r\n for (var i = 0; i < l; i++) {\r\n oArray[i].value = null;\r\n oArray[i].element = null;\r\n oArray[i] = null;\r\n }\r\n};\r\n\r\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\r\n // if we have defined a custom getRowValue use that\r\n if (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\r\n return this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\r\n\r\n var s;\r\n var c = oRow.cells[nColumn];\r\n if (typeof c.innerText != "undefined")\r\n s = c.innerText;\r\n else\r\n s = SortableTable.getInnerText(c);\r\n return this.getValueFromString(s, sType);\r\n};\r\n\r\nSortableTable.getInnerText = function (oNode) {\r\n var s = "";\r\n var cs = oNode.childNodes;\r\n var l = cs.length;\r\n for (var i = 0; i < l; i++) {\r\n switch (cs[i].nodeType) {\r\n case 1: //ELEMENT_NODE\r\n s += SortableTable.getInnerText(cs[i]);\r\n break;\r\n case 3: //TEXT_NODE\r\n s += cs[i].nodeValue;\r\n break;\r\n }\r\n }\r\n return s;\r\n};\r\n\r\nSortableTable.prototype.getValueFromString = function (sText, sType) {\r\n if (this._sortTypeInfo[sType])\r\n return this._sortTypeInfo[sType].getValueFromString( sText );\r\n return sText;\r\n /*\r\n switch (sType) {\r\n case "Number":\r\n return Number(sText);\r\n case "CaseInsensitiveString":\r\n return sText.toUpperCase();\r\n case "Date":\r\n var parts = sText.split("-");\r\n var d = new Date(0);\r\n d.setFullYear(parts[0]);\r\n d.setDate(parts[2]);\r\n d.setMonth(parts[1] - 1);\r\n return d.valueOf();\r\n }\r\n return sText;\r\n */\r\n };\r\n\r\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\r\n if (this._sortTypeInfo[sType])\r\n return this._sortTypeInfo[sType].compare;\r\n return SortableTable.basicCompare;\r\n};\r\n\r\nSortableTable.prototype.destroy = function () {\r\n this.uninitHeader();\r\n var win = this.document.parentWindow;\r\n if (win && typeof win.detachEvent != "undefined") { // only IE needs this\r\n win.detachEvent("onunload", this._onunload);\r\n }\r\n this._onunload = null;\r\n this.element = null;\r\n this.tHead = null;\r\n this.tBody = null;\r\n this.document = null;\r\n this._headerOnclick = null;\r\n this.sortTypes = null;\r\n this._asyncsort = null;\r\n this.onsort = null;\r\n};\r\n\r\n// Adds a sort type to all instance of SortableTable\r\n// sType : String - the identifier of the sort type\r\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\r\n// string and casts it to a desired format. If left out the string is just\r\n// returned\r\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\r\n// compare function. Takes two values and compares them. If left out less than,\r\n// <, compare is used\r\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\r\n// that takes the row and the column index and returns the value used to compare.\r\n// If left out then the innerText is first taken for the cell and then the\r\n// fGetValueFromString is used to convert that string the desired value and type\r\n\r\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\r\n this._sortTypeInfo[sType] = {\r\n type: sType,\r\n getValueFromString: fGetValueFromString || SortableTable.idFunction,\r\n compare: fCompareFunction || SortableTable.basicCompare,\r\n getRowValue: fGetRowValue\r\n };\r\n};\r\n\r\n// this removes the sort type from all instances of SortableTable\r\nSortableTable.prototype.removeSortType = function (sType) {\r\n delete this._sortTypeInfo[sType];\r\n};\r\n\r\nSortableTable.basicCompare = function compare(n1, n2) {\r\n if (n1.value < n2.value)\r\n return -1;\r\n if (n2.value < n1.value)\r\n return 1;\r\n return 0;\r\n};\r\n\r\nSortableTable.idFunction = function (x) {\r\n return x;\r\n};\r\n\r\nSortableTable.toUpperCase = function (s) {\r\n return s.toUpperCase();\r\n};\r\n\r\nSortableTable.toDate = function (s) {\r\n var parts = s.split("-");\r\n var d = new Date(0);\r\n d.setFullYear(parts[0]);\r\n d.setDate(parts[2]);\r\n d.setMonth(parts[1] - 1);\r\n return d.valueOf();\r\n};\r\n\r\n\r\n// add sort types\r\nSortableTable.prototype.addSortType("Number", Number);\r\nSortableTable.prototype.addSortType("CaseInsensitiveString", SortableTable.toUpperCase);\r\nSortableTable.prototype.addSortType("Date", SortableTable.toDate);\r\nSortableTable.prototype.addSortType("String");\r\n// None is a special case\r\n'}}); \ No newline at end of file diff --git a/package.json b/package.json index 57f9aadd..58ea68e7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tablefilter", - "version": "0.0.23", + "version": "0.1.9", "description": "A Javascript library making HTML tables filterable and a bit more", "license": "MIT", "author": { @@ -24,6 +24,9 @@ "scripts": { "test": "grunt test" }, + "publishConfig": { + "tag": "next" + }, "devDependencies": { "babel-core": "^6.1.2", "babel-loader": "^6.0.1", diff --git a/src/emitter.js b/src/emitter.js new file mode 100644 index 00000000..1e677b6d --- /dev/null +++ b/src/emitter.js @@ -0,0 +1,50 @@ +/** + * Event emitter class + */ +export class Emitter { + constructor() { + /** + * Events object + * @type {Object} + */ + this.events = {}; + } + + /** + * Subscribe to an event + * @param {Array} evts Collection of event names + * @param {Function} fn Function invoked when event is emitted + */ + on(evts, fn) { + evts.forEach((evt)=> { + this.events[evt] = this.events[evt] || []; + this.events[evt].push(fn); + }); + } + + /** + * Unsubscribe to an event + * @param {Array} evts Collection of event names + * @param {Function} fn Function invoked when event is emitted + */ + off(evts, fn) { + evts.forEach((evt)=> { + if(evt in this.events) { + this.events[evt].splice(this.events[evt].indexOf(fn), 1); + } + }); + } + + /** + * Emit an event + * @param {String} evt Event name followed by any other argument passed to + * the invoked function + */ + emit(evt /*, args...*/) { + if(evt in this.events) { + for(let i = 0; i < this.events[evt].length; i++) { + this.events[evt][i].apply(this, [].slice.call(arguments, 1)); + } + } + } +} diff --git a/src/extensions/advancedGrid/adapterEzEditTable.js b/src/extensions/advancedGrid/adapterEzEditTable.js index 98dc8020..2ba9be59 100644 --- a/src/extensions/advancedGrid/adapterEzEditTable.js +++ b/src/extensions/advancedGrid/adapterEzEditTable.js @@ -26,6 +26,7 @@ export default class AdapterEzEditTable { this._ezEditTable = null; this.cfg = cfg; this.tf = tf; + this.emitter = tf.emitter; } /** @@ -43,6 +44,11 @@ export default class AdapterEzEditTable { if(this.loadStylesheet && !tf.isImported(this.stylesheet, 'link')){ tf.import(this.stylesheetName, this.stylesheet, null, 'link'); } + + // TODO: hack to prevent ezEditTable enter key event hijaking. + // Needs to be fixed in the vendor's library + this.emitter.on(['filter-focus', 'filter-blur'], + ()=> this._toggleForInputFilter()); } /** @@ -293,7 +299,8 @@ export default class AdapterEzEditTable { cfg.on_added_dom_row = function(){ tf.nbFilterableRows++; if(!tf.paging){ - tf.feature('rowsCounter').refresh(); + tf.emitter.emit('rows-changed', tf, this); + //tf.feature('rowsCounter').refresh(); } else { tf.nbRows++; tf.nbVisibleRows++; @@ -314,7 +321,8 @@ export default class AdapterEzEditTable { cfg.actions['delete'].on_after_submit = function(){ tf.nbFilterableRows--; if(!tf.paging){ - tf.feature('rowsCounter').refresh(); + // tf.feature('rowsCounter').refresh(); + tf.emitter.emit('rows-changed', tf, this); } else { tf.nbRows--; tf.nbVisibleRows--; @@ -356,6 +364,35 @@ export default class AdapterEzEditTable { } } + /** + * Toggle behaviour + */ + toggle(){ + var ezEditTable = this._ezEditTable; + if(ezEditTable.editable){ + ezEditTable.Editable.Remove(); + } else { + ezEditTable.Editable.Set(); + } + if(ezEditTable.selection){ + ezEditTable.Selection.Remove(); + } else { + ezEditTable.Selection.Set(); + } + } + + _toggleForInputFilter(){ + var tf = this.tf; + if(!tf.activeFlt){ + return; + } + var colIndex = tf.activeFlt.getAttribute('ct'); + var filterType = tf.getFilterType(colIndex); + if(filterType === tf.fltTypeInp){ + this.toggle(); + } + } + /** * Remove advanced grid */ @@ -370,6 +407,9 @@ export default class AdapterEzEditTable { ezEditTable.Editable.Remove(); } } + + this.emitter.off(['filter-focus', 'filter-blur'], + ()=> this._toggleForInputFilter()); this.initialized = false; } } diff --git a/src/extensions/colOps/colOps.js b/src/extensions/colOps/colOps.js index aa9ca668..fb6badc1 100644 --- a/src/extensions/colOps/colOps.js +++ b/src/extensions/colOps/colOps.js @@ -22,6 +22,9 @@ export default class ColOps{ } init(){ + // subscribe to events + this.tf.emitter.on(['after-filtering'], ()=> this.calc()); + this.calc(); } @@ -43,7 +46,7 @@ export default class ColOps{ */ calc() { var tf = this.tf; - if(!tf.isFirstLoad && !tf.hasGrid()){ + if(!tf.hasGrid()){ return; } @@ -310,6 +313,9 @@ export default class ColOps{ } } - destroy(){} + destroy(){ + // unsubscribe to events + this.tf.emitter.off(['after-filtering'], ()=> this.calc()); + } } diff --git a/src/extensions/sort/adapterSortabletable.js b/src/extensions/sort/adapterSortabletable.js index d5f7b19c..26eded55 100644 --- a/src/extensions/sort/adapterSortabletable.js +++ b/src/extensions/sort/adapterSortabletable.js @@ -46,6 +46,7 @@ export default class AdapterSortableTable{ opts.on_after_sort : null; this.tf = tf; + this.emitter = tf.emitter; } init(){ @@ -85,42 +86,6 @@ export default class AdapterSortableTable{ this.stt.onsort = function(){ adpt.sorted = true; - //rows alternating bg issue - // TODO: move into AlternateRows component - if(tf.alternateRows){ - let rows = tf.tbl.rows, c = 0; - - let setClass = function(row, i, removeOnly){ - if(Types.isUndef(removeOnly)){ - removeOnly = false; - } - let altRows = tf.feature('alternateRows'), - oddCls = altRows.oddCss, - evenCls = altRows.evenCss; - Dom.removeClass(row, oddCls); - Dom.removeClass(row, evenCls); - - if(!removeOnly){ - Dom.addClass(row, i % 2 ? oddCls : evenCls); - } - }; - - for (let i = tf.refRow; i < tf.nbRows; i++){ - let isRowValid = rows[i].getAttribute('validRow'); - if(tf.paging && rows[i].style.display === ''){ - setClass(rows[i], c); - c++; - } else { - if((isRowValid==='true' || isRowValid===null) && - rows[i].style.display === ''){ - setClass(rows[i], c); - c++; - } else { - setClass(rows[i], c, true); - } - } - } - } //sort behaviour for paging if(tf.paging){ let paginator = tf.feature('paging'); @@ -133,6 +98,8 @@ export default class AdapterSortableTable{ if(adpt.onAfterSort){ adpt.onAfterSort.call(null, tf, adpt.stt.sortColumn); } + + adpt.emitter.emit('column-sorted', tf, adpt.stt.sortColumn); }; this.initialized = true; diff --git a/src/modules/alternateRows.js b/src/modules/alternateRows.js index 4a55688c..85001320 100644 --- a/src/modules/alternateRows.js +++ b/src/modules/alternateRows.js @@ -25,9 +25,24 @@ export class AlternateRows extends Feature { return; } + this.processAll(); + + // Subscribe to events + this.emitter.on(['row-processed', 'row-paged'], + (tf, rowIndex, arrIndex, isValid)=> + this.processRow(rowIndex, arrIndex, isValid)); + this.emitter.on(['column-sorted'], ()=> this.processAll()); + + this.initialized = true; + } + + processAll() { + if(!this.isEnabled()){ + return; + } var tf = this.tf; - var validRowsIndex = tf.validRowsIndex; - var noValidRowsIndex = validRowsIndex===null; + var validRowsIndex = tf.getValidRows(true); + var noValidRowsIndex = validRowsIndex.length === 0; //1st index var beginIndex = noValidRowsIndex ? tf.refRow : 0; // nb indexes @@ -42,7 +57,19 @@ export class AlternateRows extends Feature { this.setRowBg(rowIdx, idx); idx++; } - this.initialized = true; + } + + /** + * Set/remove row background based on row validation + * @param {Number} rowIdx Row index + * @param {Boolean} isValid Valid row flag + */ + processRow(rowIdx, arrIdx, isValid) { + if(isValid){ + this.setRowBg(rowIdx, arrIdx); + } else { + this.removeRowBg(rowIdx); + } } /** @@ -85,9 +112,16 @@ export class AlternateRows extends Feature { if(!this.initialized){ return; } - for(var i=this.tf.refRow; i + this.processRow(rowIndex, arrIndex, isValid)); + this.emitter.off(['column-sorted'], ()=> this.processAll()); + this.initialized = false; } diff --git a/src/modules/checkList.js b/src/modules/checkList.js index 9753834d..94e1cc51 100644 --- a/src/modules/checkList.js +++ b/src/modules/checkList.js @@ -1,18 +1,21 @@ +import {Feature} from './feature'; import Dom from '../dom'; import Arr from '../array'; import Str from '../string'; import Sort from '../sort'; import Event from '../event'; -export class CheckList{ +export class CheckList extends Feature{ /** * Checklist UI component * @param {Object} tf TableFilter instance */ constructor(tf){ + super(tf, 'checkList'); + // Configuration object - var f = tf.config(); + let f = tf.config(); this.checkListDiv = []; //checklist container div //defines css class for div containing checklist filter @@ -42,16 +45,14 @@ export class CheckList{ this.opts = null; this.optsTxt = null; this.excludedOpts = null; - - this.tf = tf; } - // TODO: move event here onChange(evt){ let elm = evt.target; - this.tf.activeFilterId = elm.getAttribute('id'); - this.tf.activeFlt = Dom.id(this.tf.activeFilterId); - this.tf.Evt.onSlcChange.call(this.tf, evt); + let tf = this.tf; + tf.activeFilterId = elm.getAttribute('id'); + tf.activeFlt = Dom.id(tf.activeFilterId); + tf.filter(); } optionClick(evt){ @@ -59,18 +60,61 @@ export class CheckList{ this.onChange(evt); } + onCheckListClick(evt){ + let elm = Event.target(evt); + if(this.tf.loadFltOnDemand && elm.getAttribute('filled') === '0'){ + let ct = elm.getAttribute('ct'); + let div = this.checkListDiv[ct]; + this.build(ct); + Event.remove(div, 'click', (evt)=> this.onCheckListClick(evt)); + } + } + /** - * Build checklist UI asynchronously - * @param {Number} colIndex Column index - * @param {Boolean} isExternal Render in external container - * @param {String} extFltId External container id + * Initialize checklist filter + * @param {Number} colIndex Column index + * @param {Boolean} isExternal External filter flag + * @param {DOMElement} container Dom element containing the filter */ - build(colIndex, isExternal, extFltId){ - var tf = this.tf; - tf.EvtManager( - tf.Evt.name.checklist, - { slcIndex:colIndex, slcExternal:isExternal, slcId:extFltId } + init(colIndex, isExternal, container){ + let tf = this.tf; + let externalFltTgtId = isExternal ? + tf.externalFltTgtIds[colIndex] : null; + + let divCont = Dom.create('div', + ['id', this.prfxCheckListDiv+colIndex+'_'+tf.id], + ['ct', colIndex], ['filled', '0']); + divCont.className = this.checkListDivCssClass; + + //filter is appended in desired element + if(externalFltTgtId){ + Dom.id(externalFltTgtId).appendChild(divCont); + tf.externalFltEls.push(divCont); + } else { + container.appendChild(divCont); + } + + this.checkListDiv[colIndex] = divCont; + tf.fltIds.push(tf.prfxFlt+colIndex+'_'+tf.id); + + if(!tf.loadFltOnDemand){ + this.build(colIndex); + } else { + Event.add(divCont, 'click', (evt)=> this.onCheckListClick(evt)); + divCont.appendChild(Dom.text(this.activateCheckListTxt)); + } + + this.emitter.on( + ['build-checklist-filter'], + (tf, colIndex, isExternal)=> this.build(colIndex, isExternal) ); + + this.emitter.on( + ['select-checklist-options'], + (tf, colIndex, values)=> this.selectOptions(colIndex, values) + ); + + this.initialized = true; } /** @@ -79,48 +123,50 @@ export class CheckList{ * @param {Boolean} isExternal Render in external container * @param {String} extFltId External container id */ - _build(colIndex, isExternal=false, extFltId=null){ - var tf = this.tf; + build(colIndex, isExternal=false, extFltId=null){ + let tf = this.tf; colIndex = parseInt(colIndex, 10); + this.emitter.emit('before-populating-filter', tf, colIndex); + this.opts = []; this.optsTxt = []; - var divFltId = this.prfxCheckListDiv+colIndex+'_'+tf.id; + let divFltId = this.prfxCheckListDiv+colIndex+'_'+tf.id; if((!Dom.id(divFltId) && !isExternal) || (!Dom.id(extFltId) && isExternal)){ return; } - var flt = !isExternal ? this.checkListDiv[colIndex] : Dom.id(extFltId); - var ul = Dom.create( + let flt = !isExternal ? this.checkListDiv[colIndex] : Dom.id(extFltId); + let ul = Dom.create( 'ul', ['id', tf.fltIds[colIndex]], ['colIndex', colIndex]); ul.className = this.checkListCssClass; - Event.add(ul, 'change', (evt) => { this.onChange(evt); }); + Event.add(ul, 'change', (evt)=> this.onChange(evt)); - var rows = tf.tbl.rows; + let rows = tf.tbl.rows; this.isCustom = tf.isCustomOptions(colIndex); - var activeFlt; + let activeFlt; if(tf.linkedFilters && tf.activeFilterId){ activeFlt = tf.activeFilterId.split('_')[0]; activeFlt = activeFlt.split(tf.prfxFlt)[1]; } - var filteredDataCol = []; + let filteredDataCol = []; if(tf.linkedFilters && tf.disableExcludedOptions){ this.excludedOpts = []; } - for(var k=tf.refRow; k 0){ - if(tf.hasCustomSlcOptions && - tf.customSlcOptions.cols.indexOf(colIndex) != -1){ - fltArr.push(tmpVal); - } else { - fltArr = tmpVal.split(' '+tf.orOperator+' '); - } - } + let tf = this.tf; + let chkCt = this.addTChecks(colIndex, ul); - for(var y=0; y { this.optionClick(evt); }); + Event.add(li.check, 'click', (evt)=> this.optionClick(evt)); } ul.appendChild(li); - if(val===''){ + if(val === ''){ //item is hidden li.style.display = 'none'; } - - /*** remember grid values ***/ - if(tf.rememberGridValues){ - if((tf.hasCustomSlcOptions && - tf.customSlcOptions.cols.indexOf(colIndex) != -1 && - fltArr.toString().indexOf(val) != -1) || - Arr.has(fltArr, - Str.matchCase(val, tf.matchCase), tf.matchCase)){ - li.check.checked = true; - this.setCheckListValues(li.check); - } - } } } @@ -293,43 +315,37 @@ export class CheckList{ * @param {Object} ul Ul element */ addTChecks(colIndex, ul){ - var tf = this.tf; - var chkCt = 1; - var li0 = Dom.createCheckItem( + let tf = this.tf; + let chkCt = 1; + let li0 = Dom.createCheckItem( tf.fltIds[colIndex]+'_0', '', tf.displayAllText); li0.className = this.checkListItemCssClass; ul.appendChild(li0); - Event.add(li0.check, 'click', (evt) => { - this.optionClick(evt); - }); + Event.add(li0.check, 'click', (evt)=> this.optionClick(evt)); if(!this.enableCheckListResetFilter){ li0.style.display = 'none'; } if(tf.enableEmptyOption){ - var li1 = Dom.createCheckItem( + let li1 = Dom.createCheckItem( tf.fltIds[colIndex]+'_1', tf.emOperator, tf.emptyText); li1.className = this.checkListItemCssClass; ul.appendChild(li1); - Event.add(li1.check, 'click', (evt) => { - this.optionClick(evt); - }); + Event.add(li1.check, 'click', (evt)=> this.optionClick(evt)); chkCt++; } if(tf.enableNonEmptyOption){ - var li2 = Dom.createCheckItem( + let li2 = Dom.createCheckItem( tf.fltIds[colIndex]+'_2', tf.nmOperator, tf.nonEmptyText ); li2.className = this.checkListItemCssClass; ul.appendChild(li2); - Event.add(li2.check, 'click', (evt) => { - this.optionClick(evt); - }); + Event.add(li2.check, 'click', (evt)=> this.optionClick(evt)); chkCt++; } return chkCt; @@ -343,32 +359,32 @@ export class CheckList{ if(!o){ return; } - var tf = this.tf; - var chkValue = o.value; //checked item value - var chkIndex = parseInt(o.id.split('_')[2], 10); - var filterTag = 'ul', itemTag = 'li'; - var n = o; + let tf = this.tf; + let chkValue = o.value; //checked item value + let chkIndex = parseInt(o.id.split('_')[2], 10); + let filterTag = 'ul', itemTag = 'li'; + let n = o; //ul tag search while(Str.lower(n.nodeName)!==filterTag){ n = n.parentNode; } - var li = n.childNodes[chkIndex]; - var colIndex = n.getAttribute('colIndex'); - var fltValue = n.getAttribute('value'); //filter value (ul tag) - var fltIndexes = n.getAttribute('indexes'); //selected items (ul tag) + let li = n.childNodes[chkIndex]; + let colIndex = n.getAttribute('colIndex'); + let fltValue = n.getAttribute('value'); //filter value (ul tag) + let fltIndexes = n.getAttribute('indexes'); //selected items (ul tag) if(o.checked){ //show all item if(chkValue===''){ if((fltIndexes && fltIndexes!=='')){ //items indexes - var indSplit = fltIndexes.split(tf.separator); + let indSplit = fltIndexes.split(tf.separator); //checked items loop - for(var u=0; u this.build(colIndex, isExternal) + ); + this.emitter.off( + ['select-checklist-options'], + (tf, colIndex, values)=> this.selectOptions(colIndex, values) + ); + } } diff --git a/src/modules/dropdown.js b/src/modules/dropdown.js index a033e650..5b12b7da 100644 --- a/src/modules/dropdown.js +++ b/src/modules/dropdown.js @@ -1,17 +1,21 @@ +import {Feature} from './feature'; import Dom from '../dom'; import Arr from '../array'; import Str from '../string'; import Sort from '../sort'; +import Event from '../event'; -export class Dropdown{ +export class Dropdown extends Feature{ /** * Dropdown UI component * @param {Object} tf TableFilter instance */ constructor(tf){ + super(tf, 'dropdown'); + // Configuration object - var f = tf.config(); + let f = tf.config(); this.enableSlcResetFilter = f.enable_slc_reset_filter===false ? false : true; @@ -30,51 +34,108 @@ export class Dropdown{ this.opts = null; this.optsTxt = null; this.slcInnerHtml = null; + } - this.tf = tf; + onSlcFocus(e) { + let elm = Event.target(e); + let tf = this.tf; + tf.activeFilterId = elm.getAttribute('id'); + tf.activeFlt = Dom.id(tf.activeFilterId); + // select is populated when element has focus + if(tf.loadFltOnDemand && elm.getAttribute('filled') === '0'){ + let ct = elm.getAttribute('ct'); + this.build(ct); + } + this.emitter.emit('filter-focus', tf, this); + } + + onSlcChange() { + if(this.tf.onSlcChange){ + this.tf.filter(); + } } /** - * Build drop-down filter UI asynchronously - * @param {Number} colIndex Column index - * @param {Boolean} isLinked Enable linked refresh behaviour - * @param {Boolean} isExternal Render in external container - * @param {String} extSlcId External container id + * Initialize drop-down filter + * @param {Number} colIndex Column index + * @param {Boolean} isExternal External filter flag + * @param {DOMElement} container Dom element containing the filter */ - build(colIndex, isLinked, isExternal, extSlcId){ - var tf = this.tf; - tf.EvtManager( - tf.Evt.name.dropdown, - { - slcIndex: colIndex, - slcRefreshed: isLinked, - slcExternal: isExternal, - slcId: extSlcId - } + init(colIndex, isExternal, container){ + let tf = this.tf; + let col = tf.getFilterType(colIndex); + let externalFltTgtId = isExternal ? + tf.externalFltTgtIds[colIndex] : null; + + let slc = Dom.create(tf.fltTypeSlc, + ['id', tf.prfxFlt+colIndex+'_'+tf.id], + ['ct', colIndex], ['filled', '0'] ); + + if(col === tf.fltTypeMulti){ + slc.multiple = tf.fltTypeMulti; + slc.title = this.multipleSlcTooltip; + } + slc.className = Str.lower(col) === tf.fltTypeSlc ? + tf.fltCssClass : tf.fltMultiCssClass; + + //filter is appended in container element + if(externalFltTgtId){ + Dom.id(externalFltTgtId).appendChild(slc); + tf.externalFltEls.push(slc); + } else { + container.appendChild(slc); + } + + tf.fltIds.push(slc.id); + + if(!tf.loadFltOnDemand){ + this.build(colIndex); + } else { + //1st option is created here since build isn't invoked + let opt0 = Dom.createOpt(tf.displayAllText, ''); + slc.appendChild(opt0); + } + + Event.add(slc, 'change', ()=> this.onSlcChange()); + Event.add(slc, 'focus', (e)=> this.onSlcFocus(e)); + + this.emitter.on( + ['build-select-filter'], + (tf, colIndex, isLinked, isExternal)=> + this.build(colIndex, isLinked, isExternal) + ); + this.emitter.on( + ['select-options'], + (tf, colIndex, values)=> this.selectOptions(colIndex, values) + ); + + this.initialized = true; } /** * Build drop-down filter UI * @param {Number} colIndex Column index - * @param {Boolean} isLinked Enable linked refresh behaviour + * @param {Boolean} isLinked Enable linked refresh behaviour * @param {Boolean} isExternal Render in external container * @param {String} extSlcId External container id */ - _build(colIndex, isLinked=false, isExternal=false, extSlcId=null){ - var tf = this.tf; + build(colIndex, isLinked=false, isExternal=false, extSlcId=null){ + let tf = this.tf; colIndex = parseInt(colIndex, 10); + this.emitter.emit('before-populating-filter', tf, colIndex); + this.opts = []; this.optsTxt = []; this.slcInnerHtml = ''; - var slcId = tf.fltIds[colIndex]; + let slcId = tf.fltIds[colIndex]; if((!Dom.id(slcId) && !isExternal) || (!Dom.id(extSlcId) && isExternal)){ return; } - var slc = !isExternal ? Dom.id(slcId) : Dom.id(extSlcId), + let slc = !isExternal ? Dom.id(slcId) : Dom.id(extSlcId), rows = tf.tbl.rows, matchCase = tf.matchCase; @@ -82,41 +143,27 @@ export class Dropdown{ this.isCustom = tf.isCustomOptions(colIndex); //custom selects text - var activeFlt; + let activeFlt; if(isLinked && tf.activeFilterId){ activeFlt = tf.activeFilterId.split('_')[0]; activeFlt = activeFlt.split(tf.prfxFlt)[1]; } - /*** remember grid values ***/ - var fltsValues = [], fltArr = []; - if(tf.rememberGridValues){ - fltsValues = - tf.feature('store').getFilterValues(tf.fltsValuesCookie); - if(fltsValues && !Str.isEmpty(fltsValues.toString())){ - if(this.isCustom){ - fltArr.push(fltsValues[colIndex]); - } else { - fltArr = fltsValues[colIndex].split(' '+tf.orOperator+' '); - } - } - } - - var excludedOpts = null, + let excludedOpts = null, filteredDataCol = null; if(isLinked && tf.disableExcludedOptions){ excludedOpts = []; filteredDataCol = []; } - for(var k=tf.refRow; k' + lbl+''; } else { - var opt; + let opt; //fill select on demand if(tf.loadFltOnDemand && slcValue===this.opts[y] && tf.getFilterType(colIndex) === tf.fltTypeSlc){ opt = Dom.createOpt(lbl, val, true); } else { - if(tf.getFilterType(colIndex) !== tf.fltTypeMulti){ - opt = Dom.createOpt( - lbl, - val, - (fltsValues[colIndex]!==' ' && - val===fltsValues[colIndex]) ? true : false - ); - } else { - opt = Dom.createOpt( - lbl, - val, - (Arr.has(fltArr, - Str.matchCase(this.opts[y], tf.matchCase), - tf.matchCase) || - fltArr.toString().indexOf(val)!== -1) ? - true : false - ); - } + opt = Dom.createOpt(lbl, val, false); } if(isDisabled){ opt.disabled = true; @@ -313,7 +341,7 @@ export class Dropdown{ * @param {Object} slc Select DOM element */ addFirstOption(slc){ - var tf = this.tf, + let tf = this.tf, fillMethod = Str.lower(this.slcFillingMethod); if(fillMethod === 'innerhtml'){ @@ -321,22 +349,59 @@ export class Dropdown{ ''; } else { - var opt0 = Dom.createOpt( + let opt0 = Dom.createOpt( (!this.enableSlcResetFilter ? '' : tf.displayAllText),''); if(!this.enableSlcResetFilter){ opt0.style.display = 'none'; } slc.appendChild(opt0); if(tf.enableEmptyOption){ - var opt1 = Dom.createOpt(tf.emptyText, tf.emOperator); + let opt1 = Dom.createOpt(tf.emptyText, tf.emOperator); slc.appendChild(opt1); } if(tf.enableNonEmptyOption){ - var opt2 = Dom.createOpt(tf.nonEmptyText, tf.nmOperator); + let opt2 = Dom.createOpt(tf.nonEmptyText, tf.nmOperator); slc.appendChild(opt2); } } return slc; } + /** + * Select filter options programmatically + * @param {Number} colIndex Column index + * @param {Array} values Array of option values to select + */ + selectOptions(colIndex, values=[]){ + let tf = this.tf; + if(tf.getFilterType(colIndex) !== tf.fltTypeMulti || + values.length === 0){ + return; + } + let slc = tf.getFilterElement(colIndex); + [].forEach.call(slc.options, (option)=> { + // Empty value means clear all selections and first option is the + // clear all option + if(values[0] === '' || option.value === ''){ + option.selected = false; + } + + if(option.value !== '' && + Arr.has(values, option.value, true)){ + option.selected = true; + }//if + }); + } + + destroy(){ + this.emitter.off( + ['build-select-filter'], + (colIndex, isLinked, isExternal)=> + this.build(colIndex, isLinked, isExternal) + ); + this.emitter.off( + ['select-options'], + (tf, colIndex, values)=> this.selectOptions(colIndex, values) + ); + } } diff --git a/src/modules/feature.js b/src/modules/feature.js index f7861ce2..b8c9f6fa 100644 --- a/src/modules/feature.js +++ b/src/modules/feature.js @@ -7,6 +7,7 @@ export class Feature { this.feature = feature; this.enabled = tf[feature]; this.config = tf.config(); + this.emitter = tf.emitter; this.initialized = false; } diff --git a/src/modules/gridLayout.js b/src/modules/gridLayout.js index 3649dafc..16a1e0c0 100644 --- a/src/modules/gridLayout.js +++ b/src/modules/gridLayout.js @@ -13,7 +13,7 @@ export class GridLayout extends Feature{ constructor(tf){ super(tf, 'gridLayout'); - var f = this.config; + let f = this.config; //defines grid width this.gridWidth = f.grid_width || null; @@ -54,27 +54,35 @@ export class GridLayout extends Feature{ this.prfxGridTh = 'tblHeadTh_'; this.sourceTblHtml = tf.tbl.outerHTML; + + // filters flag at TF level + tf.fltGrid = this.gridEnableFilters; } /** * Generates a grid with fixed headers */ init(){ - var tf = this.tf; - var f = this.config; - var tbl = tf.tbl; + let tf = this.tf; + let f = this.config; + let tbl = tf.tbl; if(this.initialized){ return; } + // Override reference rows indexes + tf.refRow = Types.isNull(tf.startRow) ? 0 : tf.startRow; + tf.headersRow = 0; + tf.filtersRowIndex = 1; + tf.isExternalFlt = true; // default width of 100px if column widths not set if(!tf.hasColWidths){ tf.colWidths = []; - for(var k=0; k0){ tbl.removeChild(thead[0]); } @@ -216,15 +224,15 @@ export class GridLayout extends Feature{ //scroll synchronisation Event.add(this.tblCont, 'scroll', (evt)=> { - var elm = Event.target(evt); - var scrollLeft = elm.scrollLeft; + let elm = Event.target(evt); + let scrollLeft = elm.scrollLeft; this.headTblCont.scrollLeft = scrollLeft; //New pointerX calc taking into account scrollLeft // if(!o.isPointerXOverwritten){ // try{ // o.Evt.pointerX = function(evt){ - // var e = evt || global.event; - // var bdScrollLeft = tf_StandardBody().scrollLeft + + // let e = evt || global.event; + // let bdScrollLeft = tf_StandardBody().scrollLeft + // scrollLeft; // return (e.pageX + scrollLeft) || // (e.clientX + bdScrollLeft); @@ -237,7 +245,7 @@ export class GridLayout extends Feature{ }); //Configure sort extension if any - var sort = (f.extensions || []).filter(function(itm){ + let sort = (f.extensions || []).filter(function(itm){ return itm.name === 'sort'; }); if(sort.length === 1){ @@ -250,9 +258,9 @@ export class GridLayout extends Feature{ //Col elements are enough to keep column widths after sorting and //filtering - var createColTags = function(){ - for(var k=(tf.nbCells-1); k>=0; k--){ - var col = Dom.create('col', ['id', tf.id+'_col_'+k]); + let createColTags = function(){ + for(let k=(tf.nbCells-1); k>=0; k--){ + let col = Dom.create('col', ['id', tf.id+'_col_'+k]); tbl.insertBefore(col, tbl.firstChild); col.style.width = tf.colWidths[k]; this.gridColElms[k] = col; @@ -263,26 +271,26 @@ export class GridLayout extends Feature{ if(!this.tblHasColTag){ createColTags.call(this); } else { - var cols = Dom.tag(tbl, 'col'); - for(var ii=0; ii this.init()); } init(){ diff --git a/src/modules/highlightKeywords.js b/src/modules/highlightKeywords.js index ff4417c8..917174a5 100644 --- a/src/modules/highlightKeywords.js +++ b/src/modules/highlightKeywords.js @@ -1,5 +1,6 @@ import Dom from '../dom'; import Str from '../string'; +import Types from '../types'; export class HighlightKeyword{ @@ -14,6 +15,19 @@ export class HighlightKeyword{ this.highlightedNodes = []; this.tf = tf; + this.emitter = tf.emitter; + } + + init(){ + this.emitter.on( + ['before-filtering', 'destroy'], + ()=> this.unhighlightAll() + ); + this.emitter.on( + ['highlight-keyword'], + (tf, cell, word)=> + this.highlight(cell, word, this.highlightCssClass) + ); } /** @@ -96,13 +110,30 @@ export class HighlightKeyword{ * Clear all occurrences of highlighted nodes */ unhighlightAll(){ - if(!this.tf.highlightKeywords || !this.tf.searchArgs){ + if(!this.tf.highlightKeywords){ return; } - for(var y=0; y { + if(Types.isArray(val)){ + val.forEach((item)=> + this.unhighlight(item, this.highlightCssClass)); + } else { + this.unhighlight(val, this.highlightCssClass); + } + }); this.highlightedNodes = []; } + + destroy(){ + this.emitter.off( + ['before-filtering', 'destroy'], + ()=> this.unhighlightAll() + ); + this.emitter.off( + ['highlight-keyword'], + (tf, cell, word)=> + this.highlight(cell, word, this.highlightCssClass) + ); + } } \ No newline at end of file diff --git a/src/modules/loader.js b/src/modules/loader.js index 875a18fa..dbe583b6 100644 --- a/src/modules/loader.js +++ b/src/modules/loader.js @@ -2,7 +2,7 @@ import {Feature} from './feature'; import Dom from '../dom'; import Types from '../types'; -var global = window; +let global = window; export class Loader extends Feature{ @@ -10,11 +10,11 @@ export class Loader extends Feature{ * Loading message/spinner * @param {Object} tf TableFilter instance */ - constructor(tf){ + constructor(tf) { super(tf, 'loader'); // TableFilter configuration - var f = this.config; + let f = this.config; //id of container element this.loaderTgtId = f.loader_target_id || null; @@ -27,7 +27,7 @@ export class Loader extends Feature{ //defines css class for loader div this.loaderCssClass = f.loader_css_class || 'loader'; //delay for hiding loader - this.loaderCloseDelay = 200; + this.loaderCloseDelay = 250; //callback function before loader is displayed this.onShowLoader = Types.isFn(f.on_show_loader) ? f.on_show_loader : null; @@ -43,12 +43,13 @@ export class Loader extends Feature{ return; } - var tf = this.tf; + let tf = this.tf; + let emitter = this.emitter; - var containerDiv = Dom.create('div', ['id', this.prfxLoader+tf.id]); + let containerDiv = Dom.create('div', ['id', this.prfxLoader+tf.id]); containerDiv.className = this.loaderCssClass; - var targetEl = !this.loaderTgtId ? + let targetEl = !this.loaderTgtId ? tf.tbl.parentNode : Dom.id(this.loaderTgtId); if(!this.loaderTgtId){ targetEl.insertBefore(containerDiv, tf.tbl); @@ -63,15 +64,44 @@ export class Loader extends Feature{ } this.show('none'); + + // Subscribe to events + emitter.on([ + 'before-filtering', + 'before-populating-filter', + 'before-changing-page', + 'before-clearing-filters', + 'before-changing-results-per-page', + 'before-reset-page', + 'before-reset-page-length', + 'before-loading-extensions', + 'before-loading-themes' + ], + ()=> this.show('') + ); + emitter.on([ + 'after-filtering', + 'after-populating-filter', + 'after-changing-page', + 'after-clearing-filters', + 'after-changing-results-per-page', + 'after-reset-page', + 'after-reset-page-length', + 'after-loading-extensions', + 'after-loading-themes' + ], + ()=> this.show('none') + ); + this.initialized = true; } show(p) { - if(!this.isEnabled() || this.loaderDiv.style.display === p){ + if(!this.isEnabled() /*|| this.loaderDiv.style.display === p*/){ return; } - var displayLoader = () => { + let displayLoader = () => { if(!this.loaderDiv){ return; } @@ -84,17 +114,48 @@ export class Loader extends Feature{ } }; - var t = p === 'none' ? this.loaderCloseDelay : 1; + let t = p === 'none' ? this.loaderCloseDelay : 1; global.setTimeout(displayLoader, t); } - destroy(){ + destroy() { if(!this.initialized){ return; } + let emitter = this.emitter; + Dom.remove(this.loaderDiv); this.loaderDiv = null; + + // Unsubscribe to events + emitter.off([ + 'before-filtering', + 'before-populating-filter', + 'before-changing-page', + 'before-clearing-filters', + 'before-changing-results-per-page', + 'before-reset-page', + 'before-reset-page-length', + 'before-loading-extensions', + 'before-loading-themes' + ], + ()=> this.show('') + ); + emitter.off([ + 'after-filtering', + 'after-populating-filter', + 'after-changing-page', + 'after-clearing-filters', + 'after-changing-results-per-page', + 'after-reset-page', + 'after-reset-page-length', + 'after-loading-extensions', + 'after-loading-themes' + ], + ()=> this.show('none') + ); + this.initialized = false; } } diff --git a/src/modules/noResults.js b/src/modules/noResults.js index 1938b30a..e64e169d 100644 --- a/src/modules/noResults.js +++ b/src/modules/noResults.js @@ -59,10 +59,22 @@ export class NoResults extends Feature{ } this.cont = cont; + + // subscribe to after-filtering event + this.emitter.on(['after-filtering'], ()=> this.toggle()); + this.initialized = true; this.hide(); } + toggle(){ + if(this.tf.nbVisibleRows > 0){ + this.hide(); + } else { + this.show(); + } + } + show(){ if(!this.initialized || !this.isEnabled()){ return; @@ -115,6 +127,9 @@ export class NoResults extends Feature{ } Dom.remove(this.cont); this.cont = null; + // unsubscribe to after-filtering event + this.emitter.off(['after-filtering'], ()=> this.toggle()); + this.initialized = false; } } diff --git a/src/modules/paging.js b/src/modules/paging.js index 7bc6ecce..121219f5 100644 --- a/src/modules/paging.js +++ b/src/modules/paging.js @@ -120,8 +120,8 @@ export class Paging extends Feature{ //span following pages select (contains ' of ') this.prfxPgAfterSpan = 'pgafterspan_'; - var start_row = this.refRow; - var nrows = this.nbRows; + var start_row = tf.refRow; + var nrows = tf.nbRows; //calculates page nb this.nbPages = Math.ceil((nrows-start_row)/this.pagingLength); @@ -334,6 +334,9 @@ export class Paging extends Feature{ this.setPagingInfo(tf.validRowsIndex); } + this.emitter.on(['after-filtering'], ()=> this.resetPagingInfo()); + this.emitter.on(['initialized'], ()=> this.resetValues()); + this.initialized = true; } @@ -343,45 +346,38 @@ export class Paging extends Feature{ */ reset(filterTable=false){ var tf = this.tf; - if(!tf.hasGrid() || this.isEnabled()){ + if(this.isEnabled()){ return; } this.enable(); this.init(); - tf.resetValues(); + // tf.resetValues(); if(filterTable){ tf.filter(); } } + /** + * Reset paging info from scratch after a filtering process + */ + resetPagingInfo(){ + this.startPagingRow = 0; + this.currentPageNb = 1; + this.setPagingInfo(this.tf.validRowsIndex); + } + /** * Calculate number of pages based on valid rows * Refresh paging select according to number of pages * @param {Array} validRows Collection of valid rows */ - setPagingInfo(validRows=[]){ + setPagingInfo(validRows){ var tf = this.tf; - var rows = tf.tbl.rows; var mdiv = !this.pagingTgtId ? tf.mDiv : Dom.id(this.pagingTgtId); var pgspan = Dom.id(this.prfxPgSpan+tf.id); //store valid rows indexes - tf.validRowsIndex = validRows; - - if(validRows.length === 0){ - //counts rows to be grouped - for(var j=tf.refRow; j=startPagingRow && h this.resetPagingInfo()); + this.emitter.off(['initialized'], ()=> this.resetValues()); + this.pagingSlc = null; this.nbPages = 0; this.disable(); diff --git a/src/modules/popupFilter.js b/src/modules/popupFilter.js index b4762129..fb8dc033 100644 --- a/src/modules/popupFilter.js +++ b/src/modules/popupFilter.js @@ -15,7 +15,7 @@ export class PopupFilter extends Feature{ // Configuration object var f = this.config; - // Enable external filters behaviour + // Enable external filters tf.isExternalFlt = true; tf.externalFltTgtIds = []; @@ -84,6 +84,12 @@ export class PopupFilter extends Feature{ } var tf = this.tf; + + // Override headers row index if no grouped headers + if(tf.headersRow <= 1){ + tf.headersRow = 0; + } + for(var i=0; i this.buildIcons()); + this.emitter.on(['after-filtering'], ()=> this.closeAll()); + this.emitter.on(['cell-processed'], + (tf, cellIndex)=> this.buildIcon(cellIndex, true)); + this.emitter.on(['filters-row-inserted'], ()=> this.tf.headersRow++); + this.emitter.on(['before-filter-init'], + (tf, colIndex)=> this.build(colIndex)); + this.initialized = true; } @@ -204,7 +219,7 @@ export class PopupFilter extends Feature{ } /** - * Build specified icon + * Apply specified icon state * @param {Number} colIndex Column index * @param {Boolean} active Apply active state */ @@ -245,6 +260,16 @@ export class PopupFilter extends Feature{ this.popUpFltElms = []; this.popUpFltSpans = []; this.popUpFltImgs = []; + + // unsubscribe to events + this.emitter.off(['before-filtering'], ()=> this.buildIcons()); + this.emitter.off(['after-filtering'], ()=> this.closeAll()); + this.emitter.off(['cell-processed'], + (tf, cellIndex)=> this.buildIcon(cellIndex, true)); + this.emitter.off(['filters-row-inserted'], ()=> this.tf.headersRow++); + this.emitter.off(['before-filter-init'], + (tf, colIndex)=> this.build(colIndex)); + this.initialized = false; } diff --git a/src/modules/rowsCounter.js b/src/modules/rowsCounter.js index c0dfaaa1..f5cf36cb 100644 --- a/src/modules/rowsCounter.js +++ b/src/modules/rowsCounter.js @@ -76,6 +76,11 @@ export class RowsCounter extends Feature{ this.rowsCounterDiv = countDiv; this.rowsCounterSpan = countSpan; + // subscribe to events + this.emitter.on(['after-filtering', 'grouped-by-page'], + ()=> this.refresh(tf.nbVisibleRows)); + this.emitter.on(['rows-changed'], ()=> this.refresh()); + this.initialized = true; this.refresh(); } @@ -132,6 +137,12 @@ export class RowsCounter extends Feature{ } this.rowsCounterSpan = null; this.rowsCounterDiv = null; + + // unsubscribe to events + this.emitter.off(['after-filtering', 'grouped-by-page'], + ()=> this.refresh(tf.nbVisibleRows)); + this.emitter.off(['rows-changed'], ()=> this.refresh()); + this.initialized = false; } } diff --git a/src/modules/statusBar.js b/src/modules/statusBar.js index e5764727..f64842ea 100644 --- a/src/modules/statusBar.js +++ b/src/modules/statusBar.js @@ -2,7 +2,7 @@ import {Feature} from './feature'; import Dom from '../dom'; import Types from '../types'; -var global = window; +let global = window; export class StatusBar extends Feature{ @@ -14,7 +14,7 @@ export class StatusBar extends Feature{ super(tf, 'statusBar'); // Configuration object - var f = this.config; + let f = this.config; //id of custom container element this.statusBarTgtId = f.status_bar_target_id || null; @@ -38,6 +38,33 @@ export class StatusBar extends Feature{ this.onAfterShowMsg = Types.isFn(f.on_after_show_msg) ? f.on_after_show_msg : null; + //status messages + this.msgFilter = f.msg_filter || 'Filtering data...'; + //populating drop-downs + this.msgPopulate = f.msg_populate || 'Populating filter...'; + //populating drop-downs + this.msgPopulateCheckList = f.msg_populate_checklist || + 'Populating list...'; + //changing paging page + this.msgChangePage = f.msg_change_page || 'Collecting paging data...'; + //clearing filters + this.msgClear = f.msg_clear || 'Clearing filters...'; + //changing nb results/page + this.msgChangeResults = f.msg_change_results || + 'Changing results per page...'; + //re-setting page + this.msgResetPage = f.msg_reset_page || 'Re-setting page...'; + //re-setting page length + this.msgResetPageLength = f.msg_reset_page_length || + 'Re-setting page length...'; + //table sorting + this.msgSort = f.msg_sort || 'Sorting data...'; + //extensions loading + this.msgLoadExtensions = f.msg_load_extensions || + 'Loading extensions...'; + //themes loading + this.msgLoadThemes = f.msg_load_themes || 'Loading theme(s)...'; + // status bar div this.prfxStatus = 'status_'; // status bar label @@ -51,16 +78,17 @@ export class StatusBar extends Feature{ return; } - var tf = this.tf; + let tf = this.tf; + let emitter = this.emitter; //status bar container - var statusDiv = Dom.create('div', ['id', this.prfxStatus+tf.id]); + let statusDiv = Dom.create('div', ['id', this.prfxStatus+tf.id]); statusDiv.className = this.statusBarCssClass; //status bar label - var statusSpan = Dom.create('span', ['id', this.prfxStatusSpan+tf.id]); + let statusSpan = Dom.create('span', ['id', this.prfxStatusSpan+tf.id]); //preceding text - var statusSpanText = Dom.create('span', + let statusSpanText = Dom.create('span', ['id', this.prfxStatusTxt+tf.id]); statusSpanText.appendChild(Dom.text(this.statusBarText)); @@ -68,7 +96,7 @@ export class StatusBar extends Feature{ if(!this.statusBarTgtId){ tf.setToolbar(); } - var targetEl = (!this.statusBarTgtId) ? + let targetEl = (!this.statusBarTgtId) ? tf.lDiv : Dom.id(this.statusBarTgtId); //default container: 'lDiv' @@ -86,6 +114,38 @@ export class StatusBar extends Feature{ this.statusBarSpan = statusSpan; this.statusBarSpanText = statusSpanText; + // Subscribe to events + emitter.on(['before-filtering'], ()=> this.message(this.msgFilter)); + emitter.on(['before-populating-filter'], + ()=> this.message(this.msgPopulate)); + emitter.on(['before-changing-page'], + ()=> this.message(this.msgChangePage)); + emitter.on(['before-clearing-filters'], ()=> + this.message(this.msgClear)); + emitter.on(['before-changing-results-per-page'], + ()=> this.message(this.msgChangeResults)); + emitter.on(['before-reset-page'], ()=> this.message(this.msgResetPage)); + emitter.on(['before-reset-page-length'], + ()=> this.message(this.msgResetPageLength)); + emitter.on(['before-loading-extensions'], + ()=> this.message(this.msgLoadExtensions)); + emitter.on(['before-loading-themes'], + ()=> this.message(this.msgLoadThemes)); + + emitter.on([ + 'after-filtering', + 'after-populating-filter', + 'after-changing-page', + 'after-clearing-filters', + 'after-changing-results-per-page', + 'after-reset-page', + 'after-reset-page-length', + 'after-loading-extensions', + 'after-loading-themes' + ], + ()=> this.message('') + ); + this.initialized = true; } @@ -98,8 +158,11 @@ export class StatusBar extends Feature{ this.onBeforeShowMsg.call(null, this.tf, t); } - var d = t==='' ? this.statusBarCloseDelay : 1; + let d = t==='' ? this.statusBarCloseDelay : 1; global.setTimeout(() => { + if(!this.initialized){ + return; + } this.statusBarSpan.innerHTML = t; if(this.onAfterShowMsg){ this.onAfterShowMsg.call(null, this.tf, t); @@ -112,11 +175,49 @@ export class StatusBar extends Feature{ return; } + let emitter = this.emitter; + this.statusBarDiv.innerHTML = ''; - Dom.remove(this.statusBarDiv); + if(!this.statusBarTgtId){ + Dom.remove(this.statusBarDiv); + } this.statusBarSpan = null; this.statusBarSpanText = null; this.statusBarDiv = null; + + // Unsubscribe to events + emitter.off(['before-filtering'], ()=> this.message(this.msgFilter)); + emitter.off(['before-populating-filter'], + ()=> this.message(this.msgPopulate)); + emitter.off(['before-changing-page'], + ()=> this.message(this.msgChangePage)); + emitter.off(['before-clearing-filters'], + ()=> this.message(this.msgClear)); + emitter.off(['before-changing-results-per-page'], + ()=> this.message(this.msgChangeResults)); + emitter.off(['before-reset-page'], ()=> + this.message(this.msgResetPage)); + emitter.off(['before-reset-page-length'], + ()=> this.message(this.msgResetPageLength)); + emitter.off(['before-loading-extensions'], + ()=> this.message(this.msgLoadExtensions)); + emitter.off(['before-loading-themes'], + ()=> this.message(this.msgLoadThemes)); + + emitter.off([ + 'after-filtering', + 'after-populating-filter', + 'after-changing-page', + 'after-clearing-filters', + 'after-changing-results-per-page', + 'after-reset-page', + 'after-reset-page-length', + 'after-loading-extensions', + 'after-loading-themes' + ], + ()=> this.message('') + ); + this.initialized = false; } diff --git a/src/modules/store.js b/src/modules/store.js index d24757dd..4346b566 100644 --- a/src/modules/store.js +++ b/src/modules/store.js @@ -1,4 +1,5 @@ import Cookie from '../cookie'; +import Types from '../types'; export class Store{ @@ -8,13 +9,20 @@ export class Store{ * * TODO: use localStorage and fallback to cookie persistence */ - constructor(tf) { - var f = tf.config(); + constructor(tf){ + let f = tf.config(); this.duration = !isNaN(f.set_cookie_duration) ? parseInt(f.set_cookie_duration, 10) : 100000; this.tf = tf; + this.emitter = tf.emitter; + } + + init(){ + this.emitter.on(['after-filtering'], + ()=> this.saveFilterValues(this.tf.fltsValuesCookie)); + this.emitter.on(['after-clearing-filters'], ()=> this.clearCookies()); } /** @@ -22,20 +30,29 @@ export class Store{ * @param {String} cookie name */ saveFilterValues(name){ - var tf = this.tf; - var fltValues = []; + let tf = this.tf; + let fltValues = []; + + if(!tf.rememberGridValues){ + return; + } + //store filters' values - for(var i=0; i this.saveFilterValues(this.tf.fltsValuesCookie)); + this.emitter.off(['after-clearing-filters'], ()=> this.clearCookies()); + } } diff --git a/src/tablefilter.js b/src/tablefilter.js index 96ec12bd..a08a850d 100644 --- a/src/tablefilter.js +++ b/src/tablefilter.js @@ -1,11 +1,10 @@ import Event from './event'; import Dom from './dom'; import Str from './string'; -import Cookie from './cookie'; import Types from './types'; -import Arr from './array'; import DateHelper from './date'; import Helpers from './helpers'; +import {Emitter} from './emitter'; // Features import {Store} from './modules/store'; @@ -26,7 +25,7 @@ import {NoResults} from './modules/noResults'; let global = window, doc = global.document; -export class TableFilter{ +export class TableFilter { /** * TableFilter object constructor @@ -54,6 +53,7 @@ export class TableFilter{ // TODO: use for-of with babel plug-in args.forEach((arg)=> { + // for (let arg of args) { let argtype = typeof arg; if(argtype === 'object' && arg && arg.nodeName === 'TABLE'){ this.tbl = arg; @@ -66,6 +66,7 @@ export class TableFilter{ } else if(argtype === 'object'){ this.cfg = arg; } + // } }); if(!this.tbl || this.tbl.nodeName != 'TABLE' || this.getRowsNb() === 0){ @@ -76,6 +77,8 @@ export class TableFilter{ // configuration object let f = this.cfg; + this.emitter = new Emitter(); + //Start row et cols nb this.refRow = this.startRow === null ? 2 : (this.startRow+1); try{ this.nbCells = this.getCellsNb(this.refRow); } @@ -104,15 +107,6 @@ export class TableFilter{ this.headersRow = isNaN(f.headers_row_index) ? (this.filtersRowIndex === 0 ? 1 : 0) : f.headers_row_index; - if(this.gridLayout){ - if(this.headersRow > 1){ - this.filtersRowIndex = this.headersRow+1; - } else { - this.filtersRowIndex = 1; - this.headersRow = 0; - } - } - //defines tag of the cells containing filters (td/th) this.fltCellTag = f.filters_cell_tag!=='th' || f.filters_cell_tag!=='td' ? 'td' : f.filters_cell_tag; @@ -124,11 +118,9 @@ export class TableFilter{ //stores filters values this.searchArgs = null; //stores valid rows indexes (rows visible upon filtering) - this.validRowsIndex = null; + this.validRowsIndex = []; //stores filters row element this.fltGridEl = null; - //is first load boolean - this.isFirstLoad = true; //container div for paging elements, reset btn etc. this.infDiv = null; //div for rows counter @@ -204,7 +196,7 @@ export class TableFilter{ //enables/disables external filters generation this.isExternalFlt = Boolean(f.external_flt_grid); //array containing ids of external elements containing filters - this.externalFltTgtIds = f.external_flt_grid_ids || null; + this.externalFltTgtIds = f.external_flt_grid_ids || []; //stores filters elements if isExternalFlt is true this.externalFltEls = []; //delays any filtering process if loader true @@ -363,37 +355,6 @@ export class TableFilter{ //array containing columns date type this.colDateType = this.hasColDateType ? f.col_date_type : null; - /*** status messages ***/ - //filtering - this.msgFilter = f.msg_filter || 'Filtering data...'; - //populating drop-downs - this.msgPopulate = f.msg_populate || 'Populating filter...'; - //populating drop-downs - this.msgPopulateCheckList = f.msg_populate_checklist || - 'Populating list...'; - //changing paging page - this.msgChangePage = f.msg_change_page || 'Collecting paging data...'; - //clearing filters - this.msgClear = f.msg_clear || 'Clearing filters...'; - //changing nb results/page - this.msgChangeResults = f.msg_change_results || - 'Changing results per page...'; - //re-setting grid values - this.msgResetValues = f.msg_reset_grid_values || - 'Re-setting filters values...'; - //re-setting page - this.msgResetPage = f.msg_reset_page || 'Re-setting page...'; - //re-setting page length - this.msgResetPageLength = f.msg_reset_page_length || - 'Re-setting page length...'; - //table sorting - this.msgSort = f.msg_sort || 'Sorting data...'; - //extensions loading - this.msgLoadExtensions = f.msg_load_extensions || - 'Loading extensions...'; - //themes loading - this.msgLoadThemes = f.msg_load_themes || 'Loading theme(s)...'; - /*** ids prefixes ***/ //css class name added to table this.prfxTf = 'TF'; @@ -417,7 +378,6 @@ export class TableFilter{ this.prfxCookiePageLen = 'tf_pglen_'; /*** cookies ***/ - this.hasStoredValues = false; //remembers filters values on page load this.rememberGridValues = Boolean(f.remember_grid_values); //cookie storing filter values @@ -452,30 +412,15 @@ export class TableFilter{ /*** TF events ***/ this.Evt = { - name: { - filter: 'Filter', - dropdown: 'DropDown', - checklist: 'CheckList', - changepage: 'ChangePage', - clear: 'Clear', - changeresultsperpage: 'ChangeResults', - resetvalues: 'ResetValues', - resetpage: 'ResetPage', - resetpagelength: 'ResetPageLength', - loadextensions: 'LoadExtensions', - loadthemes: 'LoadThemes' - }, - // Detect key detectKey(e) { if(!this.enterKey){ return; } - let _ev = e || global.event; - if(_ev){ - let key = Event.keyCode(_ev); + if(e){ + let key = Event.keyCode(e); if(key===13){ this.filter(); - Event.cancel(_ev); - Event.stop(_ev); + Event.cancel(e); + Event.stop(e); } else { this.isUserTyping = true; global.clearInterval(this.autoFilterTimer); @@ -488,8 +433,7 @@ export class TableFilter{ if(!this.autoFilter){ return; } - let _ev = e || global.event; - let key = Event.keyCode(_ev); + let key = Event.keyCode(e); this.isUserTyping = false; function filter() { @@ -523,99 +467,25 @@ export class TableFilter{ this.isUserTyping = false; global.clearInterval(this.autoFilterTimer); } - // TODO: hack to prevent ezEditTable enter key event hijaking. - // Needs to be fixed in the vendor's library - if(this.hasExtension('advancedGrid')){ - var advGrid = this.extension('advancedGrid'); - var ezEditTable = advGrid._ezEditTable; - if(advGrid.cfg.editable){ - ezEditTable.Editable.Set(); - } - if(advGrid.cfg.selection){ - ezEditTable.Selection.Set(); - } - } + this.emitter.emit('filter-blur', this); }, // set focused text-box filter as active onInpFocus(e) { - let _ev = e || global.event; - let elm = Event.target(_ev); + let elm = Event.target(e); this.activeFilterId = elm.getAttribute('id'); this.activeFlt = Dom.id(this.activeFilterId); - if(this.popupFilters){ - Event.cancel(_ev); - Event.stop(_ev); - } - // TODO: hack to prevent ezEditTable enter key event hijaking. - // Needs to be fixed in the vendor's library - if(this.hasExtension('advancedGrid')){ - var advGrid = this.extension('advancedGrid'); - var ezEditTable = advGrid._ezEditTable; - if(advGrid.cfg.editable){ - ezEditTable.Editable.Remove(); - } - if(advGrid.cfg.selection){ - ezEditTable.Selection.Remove(); - } - } - }, - // set focused drop-down filter as active - onSlcFocus(e) { - let _ev = e || global.event; - let elm = Event.target(_ev); - this.activeFilterId = elm.getAttribute('id'); - this.activeFlt = Dom.id(this.activeFilterId); - // select is populated when element has focus - if(this.loadFltOnDemand && elm.getAttribute('filled') === '0'){ - let ct = elm.getAttribute('ct'); - this.Mod.dropdown._build(ct); - } - if(this.popupFilters){ - Event.cancel(_ev); - Event.stop(_ev); - } - }, - // filter columns on drop-down filter change - onSlcChange(e) { - if(!this.activeFlt){ return; } - let _ev = e || global.event; - if(this.popupFilters){ Event.stop(_ev); } - if(this.onSlcChange){ this.filter(); } - }, - // fill checklist filter on click if required - onCheckListClick(e) { - let _ev = e || global.event; - let elm = Event.target(_ev); - if(this.loadFltOnDemand && elm.getAttribute('filled') === '0'){ - let ct = elm.getAttribute('ct'); - this.Mod.checkList._build(ct); - this.Mod.checkList.checkListDiv[ct].onclick = null; - this.Mod.checkList.checkListDiv[ct].title = ''; - } + this.emitter.emit('filter-focus', this); } }; } /** - * Initialise filtering grid bar behaviours and layout - * - * TODO: decompose in smaller methods + * Initialise features and layout */ init(){ if(this._hasGrid){ return; } - if(!this.tbl){ - this.tbl = Dom.id(this.id); - } - if(this.gridLayout){ - this.refRow = this.startRow===null ? 0 : this.startRow; - } - if(this.popupFilters && - ((this.filtersRowIndex === 0 && this.headersRow === 1) || - this.gridLayout)){ - this.headersRow = 0; - } let Mod = this.Mod; let n = this.singleSearchFlt ? 1 : this.nbCells, @@ -625,15 +495,28 @@ export class TableFilter{ this.import(this.stylesheetId, this.stylesheet, null, 'link'); //loads theme - if(this.hasThemes){ this._loadThemes(); } + if(this.hasThemes){ this.loadThemes(); } + + // Instantiate help feature and initialise only if set true + if(!Mod.help){ + Mod.help = new Help(this); + } + if(this.help){ + Mod.help.init(); + } if(this.rememberGridValues || this.rememberPageNb || this.rememberPageLen){ - Mod.store = new Store(this); + if(!Mod.store){ + Mod.store = new Store(this); + } + Mod.store.init(); } if(this.gridLayout){ - Mod.gridLayout = new GridLayout(this); + if(!Mod.gridLayout){ + Mod.gridLayout = new GridLayout(this); + } Mod.gridLayout.init(); } @@ -646,6 +529,7 @@ export class TableFilter{ if(this.highlightKeywords){ Mod.highlightKeyword = new HighlightKeyword(this); + Mod.highlightKeyword.init(); } if(this.popupFilters){ @@ -657,218 +541,66 @@ export class TableFilter{ //filters grid is not generated if(!this.fltGrid){ - this.refRow = this.refRow-1; - if(this.gridLayout){ - this.refRow = 0; - } + this._initNoFilters(); + } else { + let fltrow = this._insertFiltersRow(); + this.nbFilterableRows = this.getRowsNb(); this.nbVisibleRows = this.nbFilterableRows; - this.nbRows = this.nbFilterableRows + this.refRow; - } else { - if(this.isFirstLoad){ - let fltrow; + this.nbRows = this.tbl.rows.length; + + // Generate filters + for(let i=0; i 0){ - fltrow = thead[0].insertRow(this.filtersRowIndex); - } else { - fltrow = this.tbl.insertRow(this.filtersRowIndex); - } + fltrow.appendChild(fltcell); + } + inpclass = (i==n-1 && this.displayBtn) ? + this.fltSmallCssClass : this.fltCssClass; - if(this.headersRow > 1 && - this.filtersRowIndex <= this.headersRow && - !this.popupFilters){ - this.headersRow++; - } - if(this.popupFilters){ - this.headersRow++; - } - - fltrow.className = this.fltsRowCssClass; - - if(this.isExternalFlt || this.popupFilters){ - fltrow.style.display = 'none'; - } + //only 1 input for single search + if(this.singleSearchFlt){ + col = this.fltTypeInp; + inpclass = this.singleFltCssClass; } - this.nbFilterableRows = this.getRowsNb(); - this.nbVisibleRows = this.nbFilterableRows; - this.nbRows = this.tbl.rows.length; - - for(let i=0; i this.filter()); - }//if - - }// for i - - } else { - this._resetGrid(); - }//if isFirstLoad + this.emitter.emit('after-filter-init', this, i); + } }//if this.fltGrid /* Features */ if(this.hasVisibleRows){ + this.emitter.on(['after-filtering'], ()=> this.enforceVisibility()); this.enforceVisibility(); } if(this.rowsCounter){ @@ -879,23 +611,19 @@ export class TableFilter{ Mod.statusBar = new StatusBar(this); Mod.statusBar.init(); } - if(this.paging || Mod.paging){ + if(this.paging){ if(!Mod.paging){ Mod.paging = new Paging(this); Mod.paging.init(); + } else{ + Mod.paging.reset(); } - Mod.paging.reset(); } if(this.btnReset){ Mod.clearButton = new ClearButton(this); Mod.clearButton.init(); } - if(this.help){ - if(!Mod.help){ - Mod.help = new Help(this); - } - Mod.help.init(); - } + if(this.hasColWidths && !this.gridLayout){ this.setColWidths(); } @@ -910,7 +638,6 @@ export class TableFilter{ Mod.noResults.init(); } - this.isFirstLoad = false; this._hasGrid = true; if(this.rememberGridValues || this.rememberPageLen || @@ -923,98 +650,134 @@ export class TableFilter{ Dom.addClass(this.tbl, this.prfxTf); } - if(this.loader){ - Mod.loader.show('none'); - } - /* Loads extensions */ if(this.hasExtensions){ this.initExtensions(); } + // Subscribe to events + if(this.markActiveColumns){ + this.emitter.on(['before-filtering'], + ()=> this.clearActiveColumns()); + this.emitter.on(['cell-processed'], + (tf, colIndex)=> this.markActiveColumn(colIndex)); + } + if(this.linkedFilters){ + this.emitter.on(['after-filtering'], ()=> this.linkFilters()); + } + if(this.onFiltersLoaded){ this.onFiltersLoaded.call(null, this); } + + this.initialized = true; + this.emitter.emit('initialized', this); } /** - * Manages state messages - * @param {String} evt Event name - * @param {Object} cfg Config object + * Insert filters row at initialization */ - EvtManager(evt, - cfg={ slcIndex: null, slcExternal: false, slcId: null, pgIndex: null }){ - let slcIndex = cfg.slcIndex; - let slcExternal = cfg.slcExternal; - let slcId = cfg.slcId; - let pgIndex = cfg.pgIndex; - let cpt = this.Mod; - - function efx(){ - /*jshint validthis:true */ - let ev = this.Evt.name; - - switch(evt){ - case ev.filter: - this._filter(); - break; - case ev.dropdown: - if(this.linkedFilters){ - cpt.dropdown._build(slcIndex, true); - } else { - cpt.dropdown._build( - slcIndex, false, slcExternal, slcId); - } - break; - case ev.checklist: - cpt.checkList._build(slcIndex, slcExternal, slcId); - break; - case ev.changepage: - cpt.paging._changePage(pgIndex); - break; - case ev.clear: - this._clearFilters(); - this._filter(); - break; - case ev.changeresultsperpage: - cpt.paging._changeResultsPerPage(); - break; - case ev.resetvalues: - this._resetValues(); - this._filter(); - break; - case ev.resetpage: - cpt.paging._resetPage(this.pgNbCookie); - break; - case ev.resetpagelength: - cpt.paging._resetPageLength(this.pgLenCookie); - break; - case ev.loadextensions: - this._loadExtensions(); - break; - case ev.loadthemes: - this._loadThemes(); - break; - } - if(this.statusBar){ - cpt.statusBar.message(''); - } - if(this.loader){ - cpt.loader.show('none'); - } + _insertFiltersRow() { + if(this.gridLayout){ + return; } + let fltrow; - if(!this.loader && !this.statusBar && !this.linkedFilters) { - efx.call(this); + let thead = Dom.tag(this.tbl, 'thead'); + if(thead.length > 0){ + fltrow = thead[0].insertRow(this.filtersRowIndex); } else { - if(this.loader){ - cpt.loader.show(''); - } - if(this.statusBar){ - cpt.statusBar.message(this['msg'+evt]); - } - global.setTimeout(efx.bind(this), this.execDelay); + fltrow = this.tbl.insertRow(this.filtersRowIndex); } + + if(this.headersRow > 1 && this.filtersRowIndex <= this.headersRow){ + this.headersRow++; + } + + fltrow.className = this.fltsRowCssClass; + + if(this.isExternalFlt){ + fltrow.style.display = 'none'; + } + + this.emitter.emit('filters-row-inserted', this, fltrow); + return fltrow; + } + + /** + * Initialize filtersless table + */ + _initNoFilters(){ + if(this.fltGrid){ + return; + } + this.refRow = this.refRow > 0 ? this.refRow-1 : 0; + this.nbFilterableRows = this.getRowsNb(); + this.nbVisibleRows = this.nbFilterableRows; + this.nbRows = this.nbFilterableRows + this.refRow; + } + + /** + * Build input filter type + * @param {Number} colIndex Column index + * @param {String} cssClass Css class applied to filter + * @param {DOMElement} container Container DOM element + */ + _buildInputFilter(colIndex, cssClass, container){ + let col = this.getFilterType(colIndex); + let externalFltTgtId = this.isExternalFlt ? + this.externalFltTgtIds[colIndex] : null; + let inptype = col===this.fltTypeInp ? 'text' : 'hidden'; + let inp = Dom.create(this.fltTypeInp, + ['id', this.prfxFlt+colIndex+'_'+this.id], + ['type', inptype], ['ct', colIndex]); + + if(inptype !== 'hidden' && this.watermark){ + inp.setAttribute('placeholder', + this.isWatermarkArray ? (this.watermark[colIndex] || '') : + this.watermark + ); + } + inp.className = cssClass || this.fltCssClass; + Event.add(inp, 'focus', this.Evt.onInpFocus.bind(this)); + + //filter is appended in custom element + if(externalFltTgtId){ + Dom.id(externalFltTgtId).appendChild(inp); + this.externalFltEls.push(inp); + } else { + container.appendChild(inp); + } + + this.fltIds.push(inp.id); + + Event.add(inp, 'keypress', this.Evt.detectKey.bind(this)); + Event.add(inp, 'keydown', this.Evt.onKeyDown.bind(this)); + Event.add(inp, 'keyup', this.Evt.onKeyUp.bind(this)); + Event.add(inp, 'blur', this.Evt.onInpBlur.bind(this)); + } + + /** + * Build submit button + * @param {Number} colIndex Column index + * @param {DOMElement} container Container DOM element + */ + _buildSubmitButton(colIndex, container){ + let externalFltTgtId = this.isExternalFlt ? + this.externalFltTgtIds[colIndex] : null; + let btn = Dom.create(this.fltTypeInp, + ['id', this.prfxValButton+colIndex+'_'+this.id], + ['type', 'button'], ['value', this.btnText]); + btn.className = this.btnCssClass; + + //filter is appended in custom element + if(externalFltTgtId){ + Dom.id(externalFltTgtId).appendChild(btn); + } else{ + container.appendChild(btn); + } + + Event.add(btn, 'click', ()=> this.filter()); } /** @@ -1031,13 +794,17 @@ export class TableFilter{ */ initExtensions(){ let exts = this.extensions; + // Set config's publicPath dynamically for Webpack... + __webpack_public_path__ = this.basePath; + this.emitter.emit('before-loading-extensions', this); for(let i=0, len=exts.length; i { let inst = new mod.default(this, ext); inst.init(); @@ -1104,15 +869,13 @@ export class TableFilter{ } } - loadThemes(){ - this.EvtManager(this.Evt.name.loadthemes); - } - /** * Load themes defined in the configuration object */ - _loadThemes(){ + loadThemes(){ let themes = this.themes; + this.emitter.emit('before-loading-themes', this); + //Default theme config if(this.enableDefaultTheme){ let defaultTheme = { name: 'default' }; @@ -1157,6 +920,8 @@ export class TableFilter{ this.loader = true; this.loaderHtml = '
'; this.loaderText = null; + + this.emitter.emit('after-loading-themes', this); } /** @@ -1175,9 +940,8 @@ export class TableFilter{ return; } let rows = this.tbl.rows, - Mod = this.Mod; - - this._clearFilters(); + Mod = this.Mod, + emitter = this.emitter; if(this.isExternalFlt && !this.popupFilters){ this.removeExternalFlts(); @@ -1185,46 +949,50 @@ export class TableFilter{ if(this.infDiv){ this.removeToolbar(); } - if(this.highlightKeywords){ - Mod.highlightKeyword.unhighlightAll(); - } if(this.markActiveColumns){ this.clearActiveColumns(); + emitter.off(['before-filtering'], ()=> this.clearActiveColumns()); + emitter.off(['cell-processed'], + (tf, colIndex)=> this.markActiveColumn(colIndex)); } if(this.hasExtensions){ this.destroyExtensions(); } - for(let j=this.refRow; j this.enforceVisibility()); + } + if(this.linkedFilters){ + emitter.off(['after-filtering'], ()=> this.linkFilters()); + } + Dom.removeClass(this.tbl, this.prfxTf); this.nbHiddenRows = 0; - this.validRowsIndex = null; + this.validRowsIndex = []; + this.fltIds = []; this.activeFlt = null; this._hasGrid = false; - this.tbl = null; + this.initialized = false; } /** @@ -1276,14 +1044,9 @@ export class TableFilter{ infdiv.appendChild(mdiv); this.mDiv = Dom.id(this.prfxMDiv+this.id); - // Enable help instructions by default if topbar is generated and not - // explicitely set to false + // emit help initialisation only if undefined if(Types.isUndef(this.help)){ - if(!this.Mod.help){ - this.Mod.help = new Help(this); - } - this.Mod.help.init(); - this.help = true; + this.emitter.emit('init-help', this); } } @@ -1300,9 +1063,7 @@ export class TableFilter{ let tbl = this.tbl; let captions = Dom.tag(tbl, 'caption'); if(captions.length > 0){ - [].forEach.call(captions, function(elm) { - tbl.removeChild(elm); - }); + [].forEach.call(captions, (elm)=> tbl.removeChild(elm)); } } @@ -1310,7 +1071,7 @@ export class TableFilter{ * Remove all the external column filters */ removeExternalFlts(){ - if(!this.isExternalFlt || !this.externalFltTgtIds){ + if(!this.isExternalFlt){ return; } let ids = this.externalFltTgtIds, @@ -1368,149 +1129,42 @@ export class TableFilter{ return [optArray, optTxt]; } - resetValues(){ - this.EvtManager(this.Evt.name.resetvalues); - } - /** * Reset persisted filter values */ - _resetValues(){ - //only loadFltOnDemand - if(this.rememberGridValues && this.loadFltOnDemand){ - this._resetGridValues(this.fltsValuesCookie); - } - if(this.rememberPageLen && this.Mod.paging){ - this.Mod.paging.resetPageLength(this.pgLenCookie); - } - if(this.rememberPageNb && this.Mod.paging){ - this.Mod.paging.resetPage(this.pgNbCookie); - } - } - - /** - * Reset persisted filter values when load filters on demand feature is - * enabled - * @param {String} name cookie name storing filter values - */ - _resetGridValues(name){ - if(!this.loadFltOnDemand){ + resetValues(){ + if(!this.rememberGridValues){ return; } - let fltsValues = this.Mod.store.getFilterValues(name), - slcFltsIndex = this.getFiltersByType(this.fltTypeSlc, true), - multiFltsIndex = this.getFiltersByType(this.fltTypeMulti, true); - //if the number of columns is the same as before page reload - if(Number(fltsValues[(fltsValues.length-1)]) === this.fltIds.length){ - for(let i=0; i<(fltsValues.length - 1); i++){ - if(fltsValues[i]===' '){ - continue; - } - let s, opt; - let fltType = this.getFilterType(i); - // if loadFltOnDemand, drop-down needs to contain stored - // value(s) for filtering - if(fltType===this.fltTypeSlc || fltType===this.fltTypeMulti){ - let slc = Dom.id( this.fltIds[i] ); - slc.options[0].selected = false; - - //selects - if(slcFltsIndex.indexOf(i) != -1){ - opt = Dom.createOpt(fltsValues[i],fltsValues[i],true); - slc.appendChild(opt); - this.hasStoredValues = true; - } - //multiple select - if(multiFltsIndex.indexOf(i) != -1){ - s = fltsValues[i].split(' '+this.orOperator+' '); - for(let j=0, len=s.length; j { + if(val !== ' '){ + this.setFilterValue(idx, val); } - }//end if - } - - filter(){ - this.EvtManager(this.Evt.name.filter); + }); + this.filter(); } /** * Filter the table by retrieving the data from each cell in every single * row and comparing it to the search term for current column. A row is * hidden when all the search terms are not found in inspected row. - * - * TODO: Reduce complexity of this massive method */ - _filter(){ - if(!this.fltGrid || (!this._hasGrid && !this.isFirstLoad)){ + filter(){ + if(!this.fltGrid || !this._hasGrid){ return; } //invoke onbefore callback if(this.onBeforeFilter){ this.onBeforeFilter.call(null, this); } + this.emitter.emit('before-filtering', this); let row = this.tbl.rows, - Mod = this.Mod, hiddenrows = 0; this.validRowsIndex = []; - - // removes keyword highlighting - if(this.highlightKeywords){ - Mod.highlightKeyword.unhighlightAll(); - } - //removes popup filters active icons - if(this.popupFilters){ - Mod.popupFilter.buildIcons(); - } - //removes active column header class - if(this.markActiveColumns){ - this.clearActiveColumns(); - } // search args re-init this.searchArgs = this.getFiltersValue(); @@ -1544,8 +1198,7 @@ export class TableFilter{ w = Dom.getText(cell); } if(w !== ''){ - Mod.highlightKeyword.highlight( - cell, w, Mod.highlightKeyword.highlightCssClass); + this.emitter.emit('highlight-keyword', this, cell, w); } } } @@ -1553,6 +1206,8 @@ export class TableFilter{ //looks for search argument in current row function hasArg(sA, cellData, j){ /*jshint validthis:true */ + sA = Str.matchCase(sA, this.caseSensitive); + let occurence, removeNbFormat = Helpers.removeNbFormat; @@ -1736,10 +1391,8 @@ export class TableFilter{ }//fn for(let k=this.refRow; k1) ? true : false, + hasMultiOrSA = sAOrSplit.length > 1, //multiple search parameter operator && - sAAndSplit = sA.split(this.anOperator), + sAAndSplit = sA.toString().split(this.anOperator), //multiple search && parameter boolean - hasMultiAndSA = sAAndSplit.length>1 ? true : false; + hasMultiAndSA = sAAndSplit.length > 1; - //multiple sarch parameters - if(hasMultiOrSA || hasMultiAndSA){ + //detect operators or array query + if(Types.isArray(sA) || hasMultiOrSA || hasMultiAndSA){ let cS, - occur = false, + s, + occur = false; + if(Types.isArray(sA)){ + s = sA; + } else { s = hasMultiOrSA ? sAOrSplit : sAAndSplit; + } + // TODO: improve clarity/readability of this block for(let w=0, len=s.length; w 0){ - Mod.noResults.hide(); - } else { - Mod.noResults.show(); - } - } - } - - /** - * Return the data of a specified colum + * Return the data of a specified column * @param {Number} colIndex Column index * @param {Boolean} includeHeaders Optional: include headers row * @param {Boolean} num Optional: return unformatted number @@ -1969,7 +1555,8 @@ export class TableFilter{ if(!this.fltGrid){ return; } - let fltValue, + let fltValue = '', + fltValues = [], flt = this.getFilterElement(index); if(!flt){ return ''; @@ -1982,27 +1569,32 @@ export class TableFilter{ } //mutiple select else if(fltColType === this.fltTypeMulti){ - fltValue = ''; + // TODO: extract a method in dropdown module from below for(let j=0, len=flt.options.length; j 0 ? fltValues : ''; } //checklist else if(fltColType === this.fltTypeCheckList){ + // TODO: extract a method in checklist module from below if(flt.getAttribute('value') !== null){ - fltValue = flt.getAttribute('value'); + fltValues = flt.getAttribute('value'); //removes last operator || - fltValue = fltValue.substr(0, fltValue.length-3); - } else{ - fltValue = ''; + fltValues = fltValues.substr(0, fltValues.length-3); + //convert || separated values into array + fltValues = fltValues.split(' ' + this.orOperator + ' '); } + //return empty string if collection is empty + fltValue = fltValues.length > 0 ? fltValues : ''; + } + //return an empty string if collection contains a single empty string + if(Types.isArray(fltValue) && fltValue.length === 1 && + fltValue[0] === ''){ + fltValue = ''; } return fltValue; } @@ -2017,10 +1609,12 @@ export class TableFilter{ } let searchArgs = []; for(let i=0, len=this.fltIds.length; i var tfConfig = { base_path: '../dist/tablefilter/', - col_0: "multiple", - col_1: "select", - col_2: "checklist", + btn: true, + col_0: 'multiple', + col_1: 'select', + col_2: 'checklist', col_number_format: [ null, null, 'US', 'US', 'US', 'US', diff --git a/test/test-alternate-rows.js b/test/test-alternate-rows.js index fc5e0a81..0ff7c885 100644 --- a/test/test-alternate-rows.js +++ b/test/test-alternate-rows.js @@ -21,6 +21,7 @@ test('Properties', function() { deepEqual(altRows.feature, 'alternateRows', 'Feature name'); deepEqual(altRows.enabled, true, 'Feature enabled'); deepEqual(altRows.initialized, true, 'Feature enabled'); + deepEqual(typeof altRows.emitter, 'object', 'Feature has emitter instance'); deepEqual(typeof altRows.config, 'object', 'TF configuration object'); deepEqual(typeof altRows.init, 'function', 'Feature init method'); deepEqual(typeof altRows.destroy, 'function', 'Feature destroy method'); diff --git a/test/test-always-visible-rows.js b/test/test-always-visible-rows.js index 653f5d1f..e5229031 100644 --- a/test/test-always-visible-rows.js +++ b/test/test-always-visible-rows.js @@ -12,9 +12,9 @@ }); module('Behaviour'); - tf.setFilterValue(0, 'Hello'); - tf.filter(); test('for filtered table', function() { + tf.setFilterValue(0, 'Hello'); + tf.filter(); var alwaysVisibleRow1 = tf.tbl.rows[4]; var alwaysVisibleRow2 = tf.tbl.rows[9]; deepEqual( @@ -29,68 +29,8 @@ ); }); - tf.clearFilters(); test('after filters are cleared', function() { - var alwaysVisibleRow1 = tf.tbl.rows[4]; - var alwaysVisibleRow2 = tf.tbl.rows[9]; - deepEqual( - tf.getRowDisplay(alwaysVisibleRow1), - '', - 'Row display for alwaysVisibleRow1' - ); - deepEqual( - tf.getRowDisplay(alwaysVisibleRow2), - '', - 'Row display for alwaysVisibleRow2' - ); - }); - - tf.destroy(); - tf = new TableFilter('demo', { - base_path: '../dist/tablefilter/', - rows_always_visible: [4, 9], - paging: true, - paging_length: 2 - }); - tf.init(); - var paging = tf.feature('paging'); - - module('Behaviour with paging'); - tf.setFilterValue(0, 'Hello'); - tf.filter(); - test('for filtered table', function() { - var alwaysVisibleRow1 = tf.tbl.rows[4]; - var alwaysVisibleRow2 = tf.tbl.rows[9]; - deepEqual( - tf.getRowDisplay(alwaysVisibleRow1), - '', - 'Row display for alwaysVisibleRow1' - ); - deepEqual( - tf.getRowDisplay(alwaysVisibleRow2), - '', - 'Row display for alwaysVisibleRow2' - ); - }); - - tf.clearFilters(); - test('after filters are cleared', function() { - var alwaysVisibleRow1 = tf.tbl.rows[4]; - var alwaysVisibleRow2 = tf.tbl.rows[9]; - deepEqual( - tf.getRowDisplay(alwaysVisibleRow1), - '', - 'Row display for alwaysVisibleRow1' - ); - deepEqual( - tf.getRowDisplay(alwaysVisibleRow2), - '', - 'Row display for alwaysVisibleRow2' - ); - }); - - paging.setPage(2); - test('after changing pagination page', function() { + tf.clearFilters(); var alwaysVisibleRow1 = tf.tbl.rows[4]; var alwaysVisibleRow2 = tf.tbl.rows[9]; deepEqual( @@ -104,8 +44,72 @@ 'Row display for alwaysVisibleRow2' ); - paging.setPage(0); + testPaging(); + }); + + function testPaging(){ tf.destroy(); - }); + tf = new TableFilter('demo', { + base_path: '../dist/tablefilter/', + rows_always_visible: [4, 9], + paging: true, + paging_length: 2 + }); + tf.init(); + var paging = tf.feature('paging'); + + module('Behaviour with paging'); + test('for filtered table', function() { + tf.setFilterValue(0, 'Hello'); + tf.filter(); + var alwaysVisibleRow1 = tf.tbl.rows[4]; + var alwaysVisibleRow2 = tf.tbl.rows[9]; + deepEqual( + tf.getRowDisplay(alwaysVisibleRow1), + '', + 'Row display for alwaysVisibleRow1' + ); + deepEqual( + tf.getRowDisplay(alwaysVisibleRow2), + '', + 'Row display for alwaysVisibleRow2' + ); + }); + + test('after filters are cleared', function() { + tf.clearFilters(); + var alwaysVisibleRow1 = tf.tbl.rows[4]; + var alwaysVisibleRow2 = tf.tbl.rows[9]; + deepEqual( + tf.getRowDisplay(alwaysVisibleRow1), + 'none', + 'Row display for alwaysVisibleRow1' + ); + deepEqual( + tf.getRowDisplay(alwaysVisibleRow2), + 'none', + 'Row display for alwaysVisibleRow2' + ); + }); + + + test('after changing pagination page', function() { + paging.setPage(2); + var alwaysVisibleRow1 = tf.tbl.rows[4]; + var alwaysVisibleRow2 = tf.tbl.rows[9]; + deepEqual( + tf.getRowDisplay(alwaysVisibleRow1), + '', + 'Row display for alwaysVisibleRow1' + ); + deepEqual( + tf.getRowDisplay(alwaysVisibleRow2), + 'none', + 'Row display for alwaysVisibleRow2' + ); + + tf.destroy(); + }); + } })(window, TableFilter); diff --git a/test/test-api.js b/test/test-api.js index 9d86db2f..2d45be46 100644 --- a/test/test-api.js +++ b/test/test-api.js @@ -53,7 +53,7 @@ tf.setFilterValue(0, 'Syd'); tf.setFilterValue(1, 'Ade'); deepEqual(tf.getFilterValue(0), 'Syd', 'Column 0 filter value'); - deepEqual(tf.getFiltersValue(), ['syd', 'ade', '', '', '']); + deepEqual(tf.getFiltersValue(), ['Syd', 'Ade', '', '', '']); }); test('Filter table', function() { @@ -65,6 +65,20 @@ deepEqual(tf.getValidRows().length, 4, 'Filtered rows number'); }); + test('Filter table with range', function() { + tf.clearFilters(); + tf.setFilterValue(2, '>1500 && <=2871'); + tf.filter(); + deepEqual(tf.getValidRows().length, 3, 'Filtered rows number'); + }); + + test('Filter table with operator', function() { + tf.clearFilters(); + tf.setFilterValue(1, '{Bri'); + tf.filter(); + deepEqual(tf.getValidRows().length, 2, 'Filtered rows number'); + }); + test('Clear filters', function() { tf.clearFilters(); deepEqual(tf.nbVisibleRows, 7, 'Filtered rows number'); @@ -185,17 +199,63 @@ tf.setFilterValue(0, 'Sydney'); tf.setFilterValue(1, 'Adelaide'); deepEqual(tf.getFilterValue(0), 'Sydney', 'Column 0 filter value'); - deepEqual(tf.getFiltersValue(), ['sydney', 'adelaide', '', '', '']); + deepEqual(tf.getFiltersValue(), + ['Sydney', ['Adelaide'], '', '', '']); }); test('Filter table', function() { tf.clearFilters(); - tf.setFilterValue(1, 'Adelaide'); + tf.setFilterValue(1, 'Alice Springs'); tf.filter(); deepEqual(tf.getValidRows().length, 1, 'Filtered rows number'); }); - module('TableFilter with pop-up filtes'); + test('Can filter table with multiple filter', function() { + tf.clearFilters(); + tf.setFilterValue(1, ['Alice Springs', 'Canberra']); + tf.filter(); + deepEqual(tf.getValidRows().length, 2, 'Filtered rows number'); + }); + + test('Can filter table with checklist filter', function() { + tf.clearFilters(); + tf.setFilterValue(2, ['2045', '2781']); + tf.filter(); + deepEqual(tf.getValidRows().length, 2, 'Filtered rows number'); + }); + + test('Can select dropdown options with or operator', function() { + tf.setFilterValue(1, ''); + tf.setFilterValue(1, 'Brisbane || Melbourne'); + + deepEqual(tf.getFilterValue(1), ['Brisbane', 'Melbourne'], + 'Column 2 filter values'); + }); + + test('Can select dropdown options with array', function() { + tf.setFilterValue(1, ''); + tf.setFilterValue(1, ['Canberra', 'Perth']); + + deepEqual(tf.getFilterValue(1), ['Canberra', 'Perth'], + 'Column 2 filter values'); + }); + + test('Can select checklist options', function() { + tf.setFilterValue(2, '2045 || 2781'); + + deepEqual(tf.getFilterValue(2), ['2045', '2781'], + 'Column 2 filter values'); + }); + + test('Can select checklist options with array', function() { + tf.setFilterValue(2, ''); + tf.setFilterValue(2, ['1412', '982']); + + deepEqual(tf.getFilterValue(2), ['1412', '982'], + 'Column 2 filter values'); + }); + + module('TableFilter with pop-up filters'); test('Sanity checks', function() { tf.destroy(); tf = null; @@ -217,7 +277,7 @@ tf.setFilterValue(0, 'Sydney'); tf.setFilterValue(1, 'Adelaide'); deepEqual(tf.getFilterValue(0), 'Sydney', 'Column 0 filter value'); - deepEqual(tf.getFiltersValue(), ['sydney', 'adelaide', '', '', '']); + deepEqual(tf.getFiltersValue(), ['Sydney', 'Adelaide', '', '', '']); }); test('Filter table', function() { @@ -265,7 +325,7 @@ tf.setFilterValue(0, 'Sydney'); tf.setFilterValue(1, 'Adelaide'); deepEqual(tf.getFilterValue(0), 'Sydney', 'Column 0 filter value'); - deepEqual(tf.getFiltersValue(), ['sydney', 'adelaide', '', '', '']); + deepEqual(tf.getFiltersValue(), ['Sydney', ['Adelaide'], '', '', '']); }); test('Filter table', function() { diff --git a/test/test-case-sensitive-query.js b/test/test-case-sensitive-query.js index b6db8d7e..8e1cc212 100644 --- a/test/test-case-sensitive-query.js +++ b/test/test-case-sensitive-query.js @@ -14,25 +14,25 @@ module('Behaviour'); test('After filtering with `sydney`', function() { tf.setFilterValue(0, 'sydney'); - tf._filter(); + tf.filter(); deepEqual(tf.getValidRows().length, 0, 'No matches'); }); test('After filtering with `Sydney`', function() { tf.setFilterValue(0, 'Sydney'); - tf._filter(); + tf.filter(); deepEqual(tf.getValidRows().length>0, true, 'Matches'); }); test('After filtering with `ade`', function() { tf.setFilterValue(0, 'ade'); - tf._filter(); + tf.filter(); deepEqual(tf.getValidRows().length, 0, 'No matches'); }); test('After filtering with `Ade`', function() { tf.setFilterValue(0, 'Ade'); - tf._filter(); + tf.filter(); deepEqual(tf.getValidRows().length>0, true, 'Matches'); }); diff --git a/test/test-checklist.js b/test/test-checklist.js index 64df1aec..6096cb02 100644 --- a/test/test-checklist.js +++ b/test/test-checklist.js @@ -22,8 +22,30 @@ test('CheckList UI elements', function() { deepEqual(flt.childNodes.length, 8, 'number of checklist options'); }); +module('Behaviour'); +test('Can filter on checkList change', function() { + var flt1 = id(tf.fltIds[3]); + + var evObj = document.createEvent('HTMLEvents'); + evObj.initEvent('change', true, true); + tf.activeFlt = flt1; + tf.setFilterValue(3, '1.1'); + flt1.dispatchEvent(evObj); + + deepEqual(tf.getValidRows().length, 1, 'Table filtered'); + deepEqual(tf.getFilteredData()[0][1][3], '1.1', 'Matched value'); +}); +test('Can select options', function() { + tf.clearFilters(); + var flt1 = id(tf.fltIds[3]); + + checkList.selectOptions(3, ['1.4', '.6']); + + notEqual(flt1.getAttribute('value').indexOf('1.4'), -1, 'Option selected'); + notEqual(flt1.getAttribute('value').indexOf('.6'), -1, 'Option selected'); +}); + test('TableFilter removed', function() { tf.destroy(); deepEqual(id(tf.fltIds[3]), null, 'CheckList UL element'); }); - diff --git a/test/test-clear-button.js b/test/test-clear-button.js index 9e6d7487..74b1cb97 100644 --- a/test/test-clear-button.js +++ b/test/test-clear-button.js @@ -19,14 +19,16 @@ test('Properties', function() { deepEqual(clearButton.feature, 'btnReset', 'Feature name'); deepEqual(clearButton.enabled, true, 'Feature enabled'); deepEqual(clearButton.initialized, true, 'Feature enabled'); + deepEqual(typeof clearButton.emitter, 'object', + 'Feature has emitter instance'); deepEqual(typeof clearButton.config, 'object', 'TF configuration object'); deepEqual(typeof clearButton.init, 'function', 'Feature init method'); deepEqual(typeof clearButton.destroy, 'function', 'Feature destroy method'); deepEqual(typeof clearButton.reset, 'function', 'Feature reset method'); deepEqual(typeof clearButton.enable, 'function', 'Feature enable method'); deepEqual(typeof clearButton.disable, 'function', 'Feature enable method'); - deepEqual( - typeof clearButton.isEnabled, 'function', 'Feature enable method'); + deepEqual(typeof clearButton.isEnabled, 'function', + 'Feature enable method'); }); test('Can destroy', function() { clearButton.destroy(); diff --git a/test/test-disable-filter-onchange.html b/test/test-disable-filter-onchange.html new file mode 100644 index 00000000..e505fdd0 --- /dev/null +++ b/test/test-disable-filter-onchange.html @@ -0,0 +1,78 @@ + + + + + TableFilter disable select filter onchange event + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FromDestinationRoad Distance (km)By Air (hrs)By Rail (hrs)
SydneyAdelaide14121.425.3
SydneyBrisbane9821.516
SydneyCanberra286.64.3
SydneyMelbourne8721.110.5
AdelaidePerth27813.138
AdelaideAlice Springs1533220.25
AdelaideBrisbane20452.1540
+ + + + +
+
+ + \ No newline at end of file diff --git a/test/test-disable-filter-onchange.js b/test/test-disable-filter-onchange.js new file mode 100644 index 00000000..9abfc99a --- /dev/null +++ b/test/test-disable-filter-onchange.js @@ -0,0 +1,40 @@ +(function(win, TableFilter){ + var id = function (id){ return document.getElementById(id); }; + + var tf = new TableFilter('demo', { + base_path: '../dist/tablefilter/', + col_0: 'select', + col_1: 'multiple', + on_change: false + }); + tf.init(); + + module('Sanity checks'); + test('Disable onchange event on select filter', function() { + deepEqual(tf instanceof TableFilter, true, 'TableFilter type'); + deepEqual(tf.onSlcChange, false, 'Onchange event disabled'); + }); + + module('Behaviour'); + test('Cannot filter on selection change', function() { + var flt0 = id(tf.fltIds[0]); + var flt1 = id(tf.fltIds[1]); + var evObj = document.createEvent('HTMLEvents'); + evObj.initEvent('change', true, true); + + tf.setFilterValue(0, 'Sydney'); + flt0.dispatchEvent(evObj); + tf.setFilterValue(1, 'Canberra'); + flt1.dispatchEvent(evObj); + + deepEqual(tf.getValidRows().length, 0, 'Table not filtered'); + deepEqual(tf.nbHiddenRows, 0, 'No hidden rows'); + }); + + module('Tear-down'); + test('TableFilter removed', function() { + tf.destroy(); + deepEqual(tf.hasGrid(), false, 'Filters removed'); + }); + +})(window, TableFilter); diff --git a/test/test-dropdown.js b/test/test-dropdown.js index 56d0438e..f1fe2583 100644 --- a/test/test-dropdown.js +++ b/test/test-dropdown.js @@ -24,6 +24,30 @@ test('Drop-down UI elements', function() { deepEqual(flt2.hasAttribute('multiple'), true, 'Multiple select exists'); }); +module('Behaviour'); +test('Can filter on drop-down change', function() { + var flt1 = id(tf.fltIds[3]); + + var evObj = document.createEvent('HTMLEvents'); + evObj.initEvent('change', true, true); + tf.activeFlt = flt1; + tf.setFilterValue(3, '1.1'); + flt1.dispatchEvent(evObj); + + deepEqual(tf.getValidRows().length, 1, 'Table filtered'); + deepEqual(tf.getFilteredData()[0][1][3], '1.1', 'Matched value'); +}); + +test('Can select options', function() { + tf.clearFilters(); + var flt1 = id(tf.fltIds[2]); + + dropdown.selectOptions(2, ['872', '286']); + + deepEqual(flt1.options[5].selected, true, 'Option selected'); + deepEqual(flt1.options[6].selected, true, 'Option selected'); +}); + test('TableFilter removed', function() { tf.destroy(); deepEqual(id(tf.fltIds[3]), null, 'Filter is removed'); diff --git a/test/test-emitter.html b/test/test-emitter.html new file mode 100644 index 00000000..bf4bee4b --- /dev/null +++ b/test/test-emitter.html @@ -0,0 +1,78 @@ + + + + + TableFilter event emitter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FromDestinationRoad Distance (km)By Air (hrs)By Rail (hrs)
SydneyAdelaide14121.425.3
SydneyBrisbane9821.516
SydneyCanberra286.64.3
SydneyMelbourne8721.110.5
AdelaidePerth27813.138
AdelaideAlice Springs1533220.25
AdelaideBrisbane20452.1540
+ + + + +
+
+ + \ No newline at end of file diff --git a/test/test-emitter.js b/test/test-emitter.js new file mode 100644 index 00000000..523bf91a --- /dev/null +++ b/test/test-emitter.js @@ -0,0 +1,57 @@ + +var tf = new TableFilter('demo', { + base_path: '../dist/tablefilter/' +}); +tf.init(); + +module('Sanity checks'); +test('Emitter instance', function() { + deepEqual(typeof tf.emitter, 'object', 'Emitter instanciated'); + deepEqual(typeof tf.emitter.events, 'object', 'Emitter events property'); + deepEqual(typeof tf.emitter.on, 'function', 'Emitter on method'); + deepEqual(typeof tf.emitter.off, 'function', 'Emitter off method'); + deepEqual(typeof tf.emitter.emit, 'function', 'Emitter emit method'); +}); + +module('Behaviour'); +test('Can subscribe', function(){ + var emitter = tf.emitter; + var output = null; + emitter.on(['before-filtering'], + function(){ output = 'before-filtering'; }); + + tf.filter(); + + deepEqual(emitter.events['before-filtering'].length, 1, + 'Expected number of listeners'); + deepEqual(output, 'before-filtering', 'Expected output'); +}); + +test('Can unsubscribe', function(){ + var emitter = tf.emitter; + var output = null; + emitter.off(['before-filtering'], + function(){ output = 'before-filtering'; }); + + tf.filter(); + + deepEqual(emitter.events['before-filtering'].length, 0, + 'Expected number of listeners'); + deepEqual(output, null, 'Expected output'); +}); + +test('Can emit', function(){ + var emitter = tf.emitter; + var output = null; + emitter.on(['hello'], function(arg){ output = arg; }); + + emitter.emit('hello', 'world'); + + deepEqual(output, 'world', 'Event emitted'); +}); + +module('Tear-down'); +test('can destroy TableFilter DOM elements', function() { + tf.destroy(); + deepEqual(tf.hasGrid(), false, 'Filters removed'); +}); diff --git a/test/test-exact-query-match.js b/test/test-exact-query-match.js index c4254a4c..7d5683b6 100644 --- a/test/test-exact-query-match.js +++ b/test/test-exact-query-match.js @@ -14,13 +14,13 @@ module('Behaviour'); test('After filtering with `syd`', function() { tf.setFilterValue(0, 'syd'); - tf._filter(); + tf.filter(); deepEqual(tf.getValidRows().length, 0, 'No matches'); }); test('After filtering with `sydney`', function() { tf.setFilterValue(0, 'sydney'); - tf._filter(); + tf.filter(); deepEqual(tf.getValidRows().length>0, true, 'Matches'); }); @@ -42,14 +42,14 @@ test('After filtering with `syd`', function() { tf.setFilterValue(0, 'syd'); tf.setFilterValue(1, 'bris'); - tf._filter(); + tf.filter(); deepEqual(tf.getValidRows().length, 0, 'No matches'); }); test('After filtering with `sydney`', function() { tf.clearFilters(); tf.setFilterValue(0, 'sydney'); - tf._filter(); + tf.filter(); deepEqual(tf.getValidRows().length>0, true, 'Matches'); }); diff --git a/test/test-grid-layout.js b/test/test-grid-layout.js index 673b99ea..5f7c35c3 100644 --- a/test/test-grid-layout.js +++ b/test/test-grid-layout.js @@ -1,8 +1,7 @@ var tf = new TableFilter('demo', { base_path: '../dist/tablefilter/', - grid_layout: true, - sort: false + grid_layout: true }); tf.init(); @@ -14,9 +13,13 @@ test('GridLayout component', function() { notEqual(gridLayout.tblCont, null, 'GridLayout main HTML table container element'); notEqual(gridLayout.headTblCont, null, 'GridLayout headers container element'); notEqual(gridLayout.headTbl, null, 'GridLayout headers HTML table'); + deepEqual(tf.startRow, null, 'Optional startRow row index'); + deepEqual(tf.refRow, 0, 'Reference row index'); + deepEqual(tf.headersRow, 0, 'Headers row index'); + deepEqual(tf.filtersRowIndex, 1, 'Filters row index'); }); -test('Destroy GridLayout component', function() { +test('Destroy TableFilter', function() { gridLayout.destroy(); deepEqual(gridLayout.tblMainCont, null, 'Main container element removed'); deepEqual(gridLayout.tblCont, null, 'Main HTML table container element removed'); @@ -24,3 +27,10 @@ test('Destroy GridLayout component', function() { deepEqual(gridLayout.headTbl, null, 'Headers HTML table element removed'); notEqual(gridLayout.sourceTblHtml, null, 'Table reference is kept'); }); + +test('Reset TableFilter', function() { + tf.destroy(); + tf.init(); + deepEqual(tf instanceof TableFilter, true, 'TableFilter type'); + deepEqual(typeof gridLayout, 'object', 'GridLayout instanciated'); +}); diff --git a/test/test-help.js b/test/test-help.js index fc08835b..7a801ca7 100644 --- a/test/test-help.js +++ b/test/test-help.js @@ -18,6 +18,7 @@ test('Properties', function() { deepEqual(help.feature, 'help', 'Feature name'); deepEqual(help.enabled, true, 'Feature enabled'); deepEqual(help.initialized, true, 'Feature enabled'); + deepEqual(typeof help.emitter, 'object', 'Feature has emitter instance'); deepEqual(typeof help.config, 'object', 'TF configuration object'); deepEqual(typeof help.init, 'function', 'Feature init method'); deepEqual(typeof help.destroy, 'function', 'Feature destroy method'); @@ -87,6 +88,19 @@ test('Re-set UI', function() { notEqual(helpBtn.innerHTML.indexOf('→Help←'), -1, 'Help button text'); }); + +module('Destroy and re-init with help property undefined'); +test('Can init help when property is undefined and toolbar is set', function(){ + tf.destroy(); + tf.help = undefined; + tf.rowsCounter = true; + var help = tf.feature('help'); + help.btnText = '?'; + tf.init(); + + notEqual(help.btn, null, 'btn property'); +}); + module('Tear-down'); test('can destroy TableFilter DOM elements', function() { tf.destroy(); diff --git a/test/test-highlight-keywords.js b/test/test-highlight-keywords.js index 05618f6b..99051f3c 100644 --- a/test/test-highlight-keywords.js +++ b/test/test-highlight-keywords.js @@ -16,20 +16,34 @@ test('HighlightKeyword component', function() { test('Highlighted keywords', function() { tf.setFilterValue(1, 'Perth'); tf.setFilterValue(3, '3.1'); - tf._filter(); + tf.filter(); deepEqual(highlightKeyword.highlightedNodes.length, 2, 'Number of highlighted words'); + deepEqual(tf.tbl.querySelectorAll('.keyword').length, 2, + 'Number of applied CSS classes'); - tf._clearFilters(); - tf._filter(); + tf.clearFilters(); deepEqual(highlightKeyword.highlightedNodes.length, 0, 'Number of highlighted words'); + // TODO: uncomment when fixed + // deepEqual(tf.tbl.querySelectorAll('.keyword').length, 0, + // 'Number of applied CSS classes'); +}); + +module('Reset feature'); +test('can destroy and init TableFilter', function() { + tf.destroy(); + tf.init(); + deepEqual(typeof highlightKeyword, 'object', 'Instanciated'); + deepEqual(highlightKeyword.highlightedNodes instanceof Array, + true, 'Property check'); }); module('Tear-down'); -test('can destroy TableFilter DOM elements', function() { +test('can destroy TableFilter DOM elements and clean highlighted words', + function() { tf.setFilterValue(1, 'Perth'); - tf._filter(); + tf.filter(); tf.destroy(); deepEqual(tf.hasGrid(), false, 'Filters removed'); deepEqual(highlightKeyword.highlightedNodes.length, diff --git a/test/test-linked-filters.js b/test/test-linked-filters.js index ec73b3b2..bab19248 100644 --- a/test/test-linked-filters.js +++ b/test/test-linked-filters.js @@ -12,14 +12,14 @@ tf.init(); tf.setFilterValue(0, 'Sydney'); tf.getFilterElement(0).focus(); - tf._filter(); + tf.filter(); module('Sanity checks'); test('Linked filters feature', function() { deepEqual(tf instanceof TableFilter, true, 'TableFilter instantiated'); deepEqual(tf.linkedFilters, true, 'Linked filters enabled'); - tf._clearFilters(); + tf.clearFilters(); tf.onAfterFilter = null; tf.destroy(); tf = null; @@ -54,7 +54,7 @@ tf.init(); tf.setFilterValue(0, 'Sydney'); tf.getFilterElement(0).focus(); - tf._filter(); + tf.filter(); } function testExcludedOptions(tf){ @@ -75,7 +75,7 @@ }); tf.onAfterFilter = null; - tf.clearFilters(); + setTimeout(tf.clearFilters, 0); } // Tests for https://github.com/koalyptus/TableFilter/pull/42 issue diff --git a/test/test-load-filters-on-demand.js b/test/test-load-filters-on-demand.js index 77ea1c90..e01faba9 100644 --- a/test/test-load-filters-on-demand.js +++ b/test/test-load-filters-on-demand.js @@ -18,7 +18,7 @@ var flt3Cont = id(flt3ContId); function buildChecklist(tf, colIdx){ var checkList = tf.feature('checkList'); - checkList._build(colIdx); + checkList.build(colIdx); checkList.checkListDiv[colIdx].onclick = null; checkList.checkListDiv[colIdx].title = ''; } diff --git a/test/test-loader.js b/test/test-loader.js index 6191fe1d..f6ea4b97 100644 --- a/test/test-loader.js +++ b/test/test-loader.js @@ -63,10 +63,6 @@ test('Can show loader', function() { loader.show(''); deepEqual(loader.loaderDiv.style.display, '', 'Loader is displayed'); }); -test('Can show loader', function() { - loader.show(''); - deepEqual(loader.loaderDiv.style.display, '', 'Loader is displayed'); -}); module('Tear-down'); test('can destroy TableFilter DOM elements', function() { diff --git a/test/test-no-filters.js b/test/test-no-filters.js index 6958b10e..c6712bba 100644 --- a/test/test-no-filters.js +++ b/test/test-no-filters.js @@ -11,6 +11,7 @@ deepEqual(tf instanceof TableFilter, true, 'TableFilter instanciated'); deepEqual(tf.getFilterElement(0), null, 'No filter element for column 0'); + deepEqual(tf.refRow, 1, 'Reference row index'); }); test('Paging with no filters', function() { @@ -25,6 +26,7 @@ tf.init(); deepEqual(tf.getFilterElement(4), null, 'No filter element for column 4'); + deepEqual(tf.refRow, 1, 'Reference row index'); }); test('Grid layout with no filters', function() { @@ -39,6 +41,16 @@ tf.init(); deepEqual(tf.getFilterElement(2), null, 'No filter element for column 2'); + deepEqual(tf.refRow, 0, 'Reference row index'); + + tf.setFilterValue(1, 'Bris'); + deepEqual(tf.getValidRows().length, 0, 'does not fail on setFilterValue'); + }); + + module('Tear-down'); + test('TableFilter removed', function() { + tf.destroy(); + deepEqual(tf.hasGrid(), false, 'Filters removed'); }); })(window, TableFilter); diff --git a/test/test-no-results-message.js b/test/test-no-results-message.js index 9a091f14..58de2aa0 100644 --- a/test/test-no-results-message.js +++ b/test/test-no-results-message.js @@ -19,6 +19,8 @@ test('No Results Feature', function() { deepEqual(noResults.feature, 'noResults', 'Feature name'); deepEqual(noResults.enabled, true, 'Feature enabled'); deepEqual(noResults.initialized, true, 'Feature initialized'); + deepEqual(typeof noResults.emitter, 'object', + 'Feature has emitter instance'); deepEqual(typeof noResults.config, 'object', 'TF configuration object'); deepEqual(typeof noResults.init, 'function', 'Feature init method'); deepEqual(typeof noResults.destroy, 'function', @@ -60,7 +62,7 @@ test('No Results Feature', function() { module('Behaviour'); test('Can display no results message', function() { tf.setFilterValue(0, 'sadasd'); - tf._filter(); + tf.filter(); deepEqual(tf.getValidRows().length, 0, 'Filtered rows number'); deepEqual(noResults.cont.innerHTML, 'No results', 'No results message'); deepEqual(noResults.cont.style.display, 'block', @@ -105,7 +107,7 @@ test('External container sanity checks', function() { test('Can display external no results message', function() { tfCustom.setFilterValue(0, 'sadasd'); - tfCustom._filter(); + tfCustom.filter(); deepEqual(noResultsCustom.cont.innerHTML, '

No results found

', 'No results message markup'); deepEqual(noResultsCustom.cont.style.display, 'block', @@ -145,7 +147,7 @@ test('Sanity checks', function() { test('Can display no results message in grid layout', function() { tfGl.setFilterValue(0, 'sadasd'); - tfGl._filter(); + tfGl.filter(); deepEqual(noResultsGl.cont.innerHTML, 'No results', 'No results message'); deepEqual(noResultsGl.cont.style.display, 'block', diff --git a/test/test-paging.js b/test/test-paging.js index 1a2d4ae8..4799c5ac 100644 --- a/test/test-paging.js +++ b/test/test-paging.js @@ -23,6 +23,7 @@ test('Properties', function() { deepEqual(paging.feature, 'paging', 'Feature name'); deepEqual(paging.enabled, true, 'Feature enabled'); deepEqual(paging.initialized, true, 'Feature enabled'); + deepEqual(typeof paging.emitter, 'object', 'Feature has emitter instance'); deepEqual(typeof paging.config, 'object', 'TF configuration object'); deepEqual(typeof paging.init, 'function', 'Feature init method'); deepEqual(typeof paging.destroy, 'function', 'Feature destroy method'); @@ -209,6 +210,15 @@ test('Set results per page', function() { deepEqual(paging.nbPages, 2, 'Expected number of pages'); }); +module('Reset feature'); +test('can destroy and init TableFilter', function() { + tf.destroy(); + tf.init(); + notEqual(paging, null, 'Paging instanciated'); + deepEqual(paging.pagingLength, 2, 'Paging length'); + deepEqual(paging.nbPages, 4, 'Number of pages'); +}); + module('Tear-down'); test('can destroy TableFilter DOM elements', function() { tf.destroy(); diff --git a/test/test-popup-filter.js b/test/test-popup-filter.js index 0a5e19f7..0dd32d0e 100644 --- a/test/test-popup-filter.js +++ b/test/test-popup-filter.js @@ -16,6 +16,7 @@ test('Pop-up filter component', function() { notEqual(popupFilter, null, 'PopupFilter instanciated'); deepEqual(popupFilter.popUpFltElms instanceof Array, true, 'Type of popUpFltElms property'); + deepEqual(tf.headersRow, 1, 'Headers row index'); // issue 99: getHeadersText for pick-list filter types deepEqual( tf.getHeadersText()[2], @@ -45,6 +46,32 @@ test('Pop-up filter UI elements', function() { deepEqual(fltIcn3, undefined, 'Filter icon does not exist for column 4'); }); +test('Pop-up filter state after filtering', function(){ + var fltIcn0 = popupFilter.popUpFltImgs[0]; + tf.setFilterValue(0, 'syd'); + tf.filter(); + + deepEqual(fltIcn0.src.indexOf('icn_filterActive') !== -1, + true, 'Icon state'); +}); + +test('Pop-up filter state after clearing', function(){ + var fltIcn0 = popupFilter.popUpFltImgs[0]; + var fltIcn1 = popupFilter.popUpFltImgs[1]; + var fltIcn2 = popupFilter.popUpFltImgs[2]; + var fltIcn3 = popupFilter.popUpFltImgs[3]; + tf.clearFilters(); + + deepEqual(fltIcn0.src.indexOf('icn_filterActive') === -1, + true, 'Icon state'); + deepEqual(fltIcn1.src.indexOf('icn_filterActive') === -1, + true, 'Icon state'); + deepEqual(fltIcn2.src.indexOf('icn_filterActive') === -1, + true, 'Icon state'); + deepEqual(fltIcn3.src.indexOf('icn_filterActive') === -1, + true, 'Icon state'); +}); + test('TableFilter removed', function() { tf.destroy(); var fltIcn1 = popupFilter.popUpFltImgs[3]; @@ -76,6 +103,7 @@ test('Re-instantiated with grid-layout', function() { notEqual(popupFilter, null, 'PopupFilter instanciated'); deepEqual(popupFilter.popUpFltElms instanceof Array, true, 'Type of popUpFltElms property'); + deepEqual(tf.headersRow, 0, 'Headers row index'); // issue 99: getHeadersText for pick-list filter types deepEqual( tf.getHeadersText()[2], @@ -105,6 +133,34 @@ test('Pop-up filter UI elements with grid-layout', function() { deepEqual(fltIcn3, undefined, 'Filter icon does not exist for column 4'); }); +test('Pop-up filter state after filtering', function(){ + var popupFilter = tf.feature('popupFilter'); + var fltIcn0 = popupFilter.popUpFltImgs[0]; + tf.setFilterValue(0, 'syd'); + tf.filter(); + + deepEqual(fltIcn0.src.indexOf('icn_filterActive') !== -1, + true, 'Icon state'); +}); + +test('Pop-up filter state after clearing', function(){ + var popupFilter = tf.feature('popupFilter'); + var fltIcn0 = popupFilter.popUpFltImgs[0]; + var fltIcn1 = popupFilter.popUpFltImgs[1]; + var fltIcn2 = popupFilter.popUpFltImgs[2]; + var fltIcn3 = popupFilter.popUpFltImgs[3]; + tf.clearFilters(); + + deepEqual(fltIcn0.src.indexOf('icn_filterActive') === -1, + true, 'Icon state'); + deepEqual(fltIcn1.src.indexOf('icn_filterActive') === -1, + true, 'Icon state'); + deepEqual(fltIcn2.src.indexOf('icn_filterActive') === -1, + true, 'Icon state'); + deepEqual(fltIcn3.src.indexOf('icn_filterActive') === -1, + true, 'Icon state'); +}); + module('Feature interface'); test('Properties', function() { var popupFilter = tf.feature('popupFilter'); @@ -114,6 +170,8 @@ test('Properties', function() { deepEqual(popupFilter.feature, 'popupFilters', 'Feature name'); deepEqual(popupFilter.enabled, true, 'Feature enabled'); deepEqual(popupFilter.initialized, true, 'Feature enabled'); + deepEqual(typeof popupFilter.emitter, 'object', + 'Feature has emitter instance'); deepEqual(typeof popupFilter.config, 'object', 'TF configuration object'); deepEqual(typeof popupFilter.init, 'function', 'Feature init method'); deepEqual(typeof popupFilter.destroy, 'function', 'Feature destroy method'); diff --git a/test/test-rows-counter.js b/test/test-rows-counter.js index 1abf3889..6e3cd60e 100644 --- a/test/test-rows-counter.js +++ b/test/test-rows-counter.js @@ -18,6 +18,8 @@ test('Properties', function() { deepEqual(rowsCounter.feature, 'rowsCounter', 'Feature name'); deepEqual(rowsCounter.enabled, true, 'Feature enabled'); deepEqual(rowsCounter.initialized, true, 'Feature enabled'); + deepEqual(typeof rowsCounter.emitter, 'object', + 'Feature has emitter instance'); deepEqual(typeof rowsCounter.config, 'object', 'TF configuration object'); deepEqual(typeof rowsCounter.init, 'function', 'Feature init method'); deepEqual(typeof rowsCounter.destroy, 'function', 'Feature destroy method'); diff --git a/test/test-status-bar.js b/test/test-status-bar.js index 6edd00f1..ef5792c9 100644 --- a/test/test-status-bar.js +++ b/test/test-status-bar.js @@ -18,6 +18,8 @@ test('Properties', function() { deepEqual(statusBar.feature, 'statusBar', 'Feature name'); deepEqual(statusBar.enabled, true, 'Feature enabled'); deepEqual(statusBar.initialized, true, 'Feature enabled'); + deepEqual(typeof statusBar.emitter, 'object', + 'Feature has emitter instance'); deepEqual(typeof statusBar.config, 'object', 'TF configuration object'); deepEqual(typeof statusBar.init, 'function', 'Feature init method'); deepEqual(typeof statusBar.destroy, 'function', 'Feature destroy method'); diff --git a/test/test-store.js b/test/test-store.js index 38ae3a92..e2687fd7 100644 --- a/test/test-store.js +++ b/test/test-store.js @@ -9,6 +9,24 @@ function removeCookie(name){ document.cookie = name + '=' + expire; } +function readCookie(name){ + var cookieValue = '', + search = name + '='; + if(document.cookie.length > 0){ + var cookie = document.cookie, + offset = cookie.indexOf(search); + if(offset !== -1){ + offset += search.length; + var end = cookie.indexOf(';', offset); + if(end === -1){ + end = cookie.length; + } + cookieValue = unescape(cookie.substring(offset, end)); + } + } + return cookieValue; +} + var tf = new TableFilter('demo', { base_path: '../dist/tablefilter/', paging: true, @@ -42,7 +60,6 @@ test('Page number value', function() { var cookieName = tf.pgNbCookie; deepEqual(tf.feature('store').getPageNb(cookieName), '2', 'Page number value'); tf.clearFilters(); - tf.filter(); }); module('Check page length persistence'); @@ -53,21 +70,86 @@ test('Page length value', function() { var cookieName = tf.pgLenCookie; deepEqual(tf.feature('store').getPageLength(cookieName), '2', 'Page length value'); tf.clearFilters(); - tf.filter(); }); module('Check filters persistence'); -test('Filters value', function() { +test('Filters value in cookie', function() { tf.setFilterValue(0, 'Sydney'); tf.setFilterValue(3, '1.5'); tf.filter(); var cookieName = tf.fltsValuesCookie; deepEqual(tf.feature('store').getFilterValues(cookieName)[0], 'Sydney', 'Filter 0 value'); deepEqual(tf.feature('store').getFilterValues(cookieName)[3], '1.5', 'Filter 3 value'); - tf.destroy(); +}); +test('Filters value in cookie', function() { + tf.setFilterValue(0, 'Sydney'); + tf.setFilterValue(3, '1.5'); + tf.filter(); + var cookieName = tf.fltsValuesCookie; + deepEqual(tf.feature('store').getFilterValues(cookieName)[0], 'Sydney', 'Filter 0 value'); + deepEqual(tf.feature('store').getFilterValues(cookieName)[3], '1.5', 'Filter 3 value'); +}); + +test('Filters value with operators in cookie', function() { + tf.setFilterValue(0, ''); + tf.setFilterValue(1, 'Canberra || Perth'); + tf.setFilterValue(3, '>.6'); + tf.filter(); + var cookieName = tf.fltsValuesCookie; + + deepEqual(tf.feature('store').getFilterValues(cookieName)[0], ' ', 'Filter 0 value'); + deepEqual(tf.feature('store').getFilterValues(cookieName)[1], 'Canberra || Perth', 'Filter 1 value'); + deepEqual(tf.feature('store').getFilterValues(cookieName)[3], '>.6', 'Filter 3 value'); + deepEqual(tf.getValidRows().length, 1, 'Expected nb of filtered rows'); +}); + +test('Apply cookie filters value', function() { + tf.setFilterValue(0, 'Adelaide'); + tf.setFilterValue(3, '>=2'); + tf.filter(); + tf.destroy(); + tf.init(); + + deepEqual(tf.getFilterValue(0), 'Adelaide', 'Applied filter value'); + deepEqual(tf.getFilterValue(3), '>=2', 'Applied filter value'); +}); + +test('Can remove cookies on clearFilters', function() { + tf.clearFilters(); + + deepEqual(readCookie(tf.fltsValuesCookie), '', + 'fltsValuesCookie cookie removed'); + deepEqual(readCookie(tf.pgLenCookie), '', 'pgLenCookie cookie removed'); + deepEqual(readCookie(tf.pgNbCookie), '', 'pgNbCookie cookie removed'); +}); + +module('Multiple and checklist filters persistence'); +test('Filters value in cookie', function() { + tf.destroy(); + tf = new TableFilter('demo', { + base_path: '../dist/tablefilter/', + remember_grid_values: true, + col_0: 'multiple', + col_1: 'checklist' + }); + tf.init(); + + tf.setFilterValue(0, ['Sydney', 'Adelaide']); + tf.setFilterValue(1, ['Alice Springs', 'Brisbane']); + tf.filter(); + var cookieName = tf.fltsValuesCookie; + deepEqual(tf.feature('store').getFilterValues(cookieName)[0], 'Adelaide || Sydney', 'Filter 0 value'); + deepEqual(tf.feature('store').getFilterValues(cookieName)[1], 'Alice Springs || Brisbane', 'Filter 1 value'); + deepEqual(tf.getValidRows().length, 3, 'Expected nb of filtered rows'); +}); + +module('Tear-down'); +test('TableFilter removed', function() { + tf.destroy(); removeCookie(tf.fltsValuesCookie); removeCookie(tf.pgNbCookie); removeCookie(tf.pgLenCookie); -}); + deepEqual(tf.hasGrid(), false, 'Filters removed'); +}); diff --git a/test/test-watermark.html b/test/test-watermark.html new file mode 100644 index 00000000..f08d3bec --- /dev/null +++ b/test/test-watermark.html @@ -0,0 +1,80 @@ + + + + + TableFilter watermark tests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FromDestinationRoad Distance (km)By Air (hrs)By Rail (hrs)
SydneyAdelaide14121.425.3
SydneyBrisbane9821.516
SydneyCanberra286.64.3
SydneyMelbourne8721.110.5
AdelaidePerth27813.138
AdelaideAlice Springs1533220.25
AdelaideBrisbane20452.1540
+ + + + +
+
+ + diff --git a/test/test-watermark.js b/test/test-watermark.js new file mode 100644 index 00000000..780a996c --- /dev/null +++ b/test/test-watermark.js @@ -0,0 +1,81 @@ +(function(win, TableFilter){ + + var tf = new TableFilter('demo', { + base_path: '../dist/tablefilter/', + watermark: 'foobar' + }); + tf.init(); + + module('Sanity checks'); + test('Watermark properties', function() { + deepEqual(tf instanceof TableFilter, true, 'TableFilter instanciated'); + deepEqual(tf.watermark, 'foobar', 'Property value'); + deepEqual(tf.isWatermarkArray, false, + 'Type: same watermark for all filters'); + }); + + test('DOM element', function(){ + var flt0 = tf.getFilterElement(0); + var flt1 = tf.getFilterElement(3); + deepEqual(flt0.placeholder, 'foobar', 'filter`s placeholder value'); + deepEqual(flt1.placeholder, 'foobar', 'filter`s placeholder value'); + }); + + module('Per column watermark'); + test('Sanity checks', function() { + tf.destroy(); + tf = new TableFilter('demo', { + base_path: '../dist/tablefilter/', + watermark: ['City', 'City', 'Distance', 'Time', 'Time'] + }); + tf.init(); + + deepEqual(tf instanceof TableFilter, true, 'TableFilter instanciated'); + deepEqual(tf.isWatermarkArray, true, 'Type: watermark array'); + deepEqual( + tf.watermark, + ['City', 'City', 'Distance', 'Time', 'Time'], + 'Property value' + ); + }); + + test('DOM element', function(){ + deepEqual( + tf.getFilterElement(0).placeholder, + 'City', + 'filter`s placeholder value' + ); + deepEqual( + tf.getFilterElement(1).placeholder, + 'City', + 'filter`s placeholder value' + ); + deepEqual( + tf.getFilterElement(2).placeholder, + 'Distance', + 'filter`s placeholder value' + ); + deepEqual( + tf.getFilterElement(3).placeholder, + 'Time', + 'filter`s placeholder value' + ); + deepEqual( + tf.getFilterElement(4).placeholder, + 'Time', + 'filter`s placeholder value' + ); + }); + + module('Tear-down'); + test('TableFilter removed', function() { + tf.destroy(); + deepEqual(tf.hasGrid(), false, 'Filters removed'); + deepEqual( + tf.watermark, + ['City', 'City', 'Distance', 'Time', 'Time'], + 'Property value' + ); + }); + +})(window, TableFilter);