1
0
Fork 0
mirror of https://github.com/koalyptus/TableFilter.git synced 2024-06-02 05:52:26 +02:00

Merge branch 'master' into refactor-features-instanciation

This commit is contained in:
Max Guglielmi 2017-05-13 10:22:00 +10:00
commit 955c49a2c1
35 changed files with 404 additions and 282 deletions

4
dist/starter.html vendored
View file

@ -1,10 +1,10 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<title>tablefilter v0.5.10 - Starter</title> <title>tablefilter v0.5.13 - Starter</title>
</head> </head>
<body> <body>
<h1>tablefilter v0.5.10</h1> <h1>tablefilter v0.5.13</h1>

View file

@ -1,6 +1,6 @@
/** /**
* tablefilter v0.5.10 by Max Guglielmi * tablefilter v0.5.13 by Max Guglielmi
* build date: 2017-05-01T12:06:51.689Z * build date: 2017-05-09T10:44:28.220Z
* MIT License * 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} 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}

View file

@ -1,6 +1,6 @@
/** /**
* tablefilter v0.5.10 by Max Guglielmi * tablefilter v0.5.13 by Max Guglielmi
* build date: 2017-05-01T12:06:51.689Z * build date: 2017-05-09T10:44:28.220Z
* MIT License * 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} 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}

View file

@ -1,6 +1,6 @@
/** /**
* tablefilter v0.5.10 by Max Guglielmi * tablefilter v0.5.13 by Max Guglielmi
* build date: 2017-05-01T12:06:51.689Z * build date: 2017-05-09T10:44:28.220Z
* MIT License * MIT License
*/ */
.activeHeader{background-color:#66afe9 !important;color:#fff !important} .activeHeader{background-color:#66afe9 !important;color:#fff !important}

View file

@ -1,6 +1,6 @@
/** /**
* tablefilter v0.5.10 by Max Guglielmi * tablefilter v0.5.13 by Max Guglielmi
* build date: 2017-05-01T12:06:51.689Z * build date: 2017-05-09T10:44:28.220Z
* MIT License * MIT License
*/ */
table.TF{border-left:1px solid #ccc;border-top:none;border-right:none;border-bottom:none;}table.TF th{background:#ebecee url("images/bg_th.jpg") left top repeat-x;border-bottom:1px solid #d0d0d0;border-right:1px solid #d0d0d0;border-left:1px solid #fff;border-top:1px solid #fff;color:#333}table.TF td{border-bottom:1px dotted #999;padding:5px}.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}.activeHeader{background:#999 !important} table.TF{border-left:1px solid #ccc;border-top:none;border-right:none;border-bottom:none;}table.TF th{background:#ebecee url("images/bg_th.jpg") left top repeat-x;border-bottom:1px solid #d0d0d0;border-right:1px solid #d0d0d0;border-left:1px solid #fff;border-top:1px solid #fff;color:#333}table.TF td{border-bottom:1px dotted #999;padding:5px}.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}.activeHeader{background:#999 !important}

View file

@ -1,6 +1,6 @@
/** /**
* tablefilter v0.5.10 by Max Guglielmi * tablefilter v0.5.13 by Max Guglielmi
* build date: 2017-05-01T12:06:51.689Z * build date: 2017-05-09T10:44:28.220Z
* MIT License * MIT License
*/ */
table.TF{border-left:1px dotted #81963b;border-top:none;border-right:0;border-bottom:none;}table.TF th{background:#39424b url("images/bg_headers.jpg") left top repeat-x;border-bottom:0;border-right:1px dotted #d0d0d0;border-left:0;border-top:0;color:#fff}table.TF td{border-bottom:1px dotted #81963b;border-right:1px dotted #81963b;padding:5px}.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}.activeHeader{background:#81963b !important} table.TF{border-left:1px dotted #81963b;border-top:none;border-right:0;border-bottom:none;}table.TF th{background:#39424b url("images/bg_headers.jpg") left top repeat-x;border-bottom:0;border-right:1px dotted #d0d0d0;border-left:0;border-top:0;color:#fff}table.TF td{border-bottom:1px dotted #81963b;border-right:1px dotted #81963b;padding:5px}.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}.activeHeader{background:#81963b !important}

View file

@ -1,6 +1,6 @@
/** /**
* tablefilter v0.5.10 by Max Guglielmi * tablefilter v0.5.13 by Max Guglielmi
* build date: 2017-05-01T12:06:51.689Z * build date: 2017-05-09T10:44:28.220Z
* MIT License * 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} 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}

View file

@ -1,6 +1,6 @@
/** /**
* tablefilter v0.5.10 by Max Guglielmi * tablefilter v0.5.13 by Max Guglielmi
* build date: 2017-05-01T12:06:51.689Z * build date: 2017-05-09T10:44:28.220Z
* MIT License * MIT License
*/ */
table.TF{padding:0;color:inherit;border-right:1px solid transparent;border-top:1px solid transparent;border-left:1px solid transparent;border-bottom:0;}table.TF th{margin:0;color:inherit;background-color:transparent;border-color:transparent;border-width:1px;border-style:solid;}table.TF th:last-child{border-right:1px solid transparent}table.TF td{margin:0;padding:5px;color:inherit;border-bottom:1px solid transparent;border-left:0;border-top:0;border-right:0}.fltrow{background-color:transparent;}.fltrow th,.fltrow td{padding:1px 3px 1px 3px;border-bottom:1px solid transparent !important;}.fltrow th:last-child,.fltrow td:last-child{border-right:1px solid transparent}.flt,select.flt,select.flt_multi,.flt_s,.single_flt,.div_checklist{border:1px solid #a4bed4}input.flt{width:99% !important}.inf{background-color:transparent;border:1px solid transparent;height:$min-height;color:inherit}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:#f7f7f7 url("images/btn_next_page.gif") center center no-repeat !important;border:1px solid #f7f7f7 !important}.previousPage{background:transparent url("images/btn_prev_page.gif") center center no-repeat !important;border:1px solid transparent !important;}.previousPage:hover{background:#f7f7f7 url("images/btn_prev_page.gif") center center no-repeat !important;border:1px solid #f7f7f7 !important}.firstPage{background:transparent url("images/btn_first_page.gif") center center no-repeat !important;border:1px solid transparent !important;}.firstPage:hover{background:#f7f7f7 url("images/btn_first_page.gif") center center no-repeat !important;border:1px solid #f7f7f7 !important}.lastPage{background:transparent url("images/btn_last_page.gif") center center no-repeat !important;border:1px solid transparent !important;}.lastPage:hover{background:#f7f7f7 url("images/btn_last_page.gif") center center no-repeat !important;border:1px solid #f7f7f7 !important}.activeHeader{background:#f7f7f7 !important;border:1px solid transparent;color:inherit !important}div.grd_Cont{-webkit-box-shadow:0 0 0 0 rgba(50,50,50,0.75);-moz-box-shadow:0 0 0 0 rgba(50,50,50,0.75);box-shadow:0 0 0 0 rgba(50,50,50,0.75);background-color:transparent;border:1px solid transparent;padding:0 !important;}div.grd_Cont .even{background-color:transparent}div.grd_Cont .odd{background-color:#f7f7f7}div.grd_headTblCont{background-color:transparent;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:transparent;border-bottom:1px solid transparent;border-right:1px solid transparent !important;border-left:1px solid transparent;border-top:1px solid transparent}div.grd_tblCont table td{border-bottom:1px solid transparent;border-right:0 !important;border-left:0 !important;border-top:0 !important}.grd_inf{background-color:transparent;color:inherit;border-top:1px solid transparent;}.grd_inf a{text-decoration:none;font-weight:bold}.loader{background-color:#f7f7f7;border:1px solid #f7f7f7;border-radius:5px;color:#000;text-shadow:none}.even{background-color:transparent}.odd{background-color:#f7f7f7}span.expClpFlt a.btnExpClpFlt:hover{background-color:transparent !important}.ezActiveRow{background-color:#ccc !important;color:inherit}.ezSelectedRow{background-color:#ccc !important;color:inherit}.ezActiveCell{background-color:transparent;color:inherit;font-weight:bold}.ezETSelectedCell{background-color:transparent;font-weight:bold;color:inherit} table.TF{padding:0;color:inherit;border-right:1px solid transparent;border-top:1px solid transparent;border-left:1px solid transparent;border-bottom:0;}table.TF th{margin:0;color:inherit;background-color:transparent;border-color:transparent;border-width:1px;border-style:solid;}table.TF th:last-child{border-right:1px solid transparent}table.TF td{margin:0;padding:5px;color:inherit;border-bottom:1px solid transparent;border-left:0;border-top:0;border-right:0}.fltrow{background-color:transparent;}.fltrow th,.fltrow td{padding:1px 3px 1px 3px;border-bottom:1px solid transparent !important;}.fltrow th:last-child,.fltrow td:last-child{border-right:1px solid transparent}.flt,select.flt,select.flt_multi,.flt_s,.single_flt,.div_checklist{border:1px solid #a4bed4}input.flt{width:99% !important}.inf{background-color:transparent;border:1px solid transparent;height:$min-height;color:inherit}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:#f7f7f7 url("images/btn_next_page.gif") center center no-repeat !important;border:1px solid #f7f7f7 !important}.previousPage{background:transparent url("images/btn_prev_page.gif") center center no-repeat !important;border:1px solid transparent !important;}.previousPage:hover{background:#f7f7f7 url("images/btn_prev_page.gif") center center no-repeat !important;border:1px solid #f7f7f7 !important}.firstPage{background:transparent url("images/btn_first_page.gif") center center no-repeat !important;border:1px solid transparent !important;}.firstPage:hover{background:#f7f7f7 url("images/btn_first_page.gif") center center no-repeat !important;border:1px solid #f7f7f7 !important}.lastPage{background:transparent url("images/btn_last_page.gif") center center no-repeat !important;border:1px solid transparent !important;}.lastPage:hover{background:#f7f7f7 url("images/btn_last_page.gif") center center no-repeat !important;border:1px solid #f7f7f7 !important}.activeHeader{background:#f7f7f7 !important;border:1px solid transparent;color:inherit !important}div.grd_Cont{-webkit-box-shadow:0 0 0 0 rgba(50,50,50,0.75);-moz-box-shadow:0 0 0 0 rgba(50,50,50,0.75);box-shadow:0 0 0 0 rgba(50,50,50,0.75);background-color:transparent;border:1px solid transparent;padding:0 !important;}div.grd_Cont .even{background-color:transparent}div.grd_Cont .odd{background-color:#f7f7f7}div.grd_headTblCont{background-color:transparent;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:transparent;border-bottom:1px solid transparent;border-right:1px solid transparent !important;border-left:1px solid transparent;border-top:1px solid transparent}div.grd_tblCont table td{border-bottom:1px solid transparent;border-right:0 !important;border-left:0 !important;border-top:0 !important}.grd_inf{background-color:transparent;color:inherit;border-top:1px solid transparent;}.grd_inf a{text-decoration:none;font-weight:bold}.loader{background-color:#f7f7f7;border:1px solid #f7f7f7;border-radius:5px;color:#000;text-shadow:none}.even{background-color:transparent}.odd{background-color:#f7f7f7}span.expClpFlt a.btnExpClpFlt:hover{background-color:transparent !important}.ezActiveRow{background-color:#ccc !important;color:inherit}.ezSelectedRow{background-color:#ccc !important;color:inherit}.ezActiveCell{background-color:transparent;color:inherit;font-weight:bold}.ezETSelectedCell{background-color:transparent;font-weight:bold;color:inherit}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,6 @@
{ {
"name": "tablefilter", "name": "tablefilter",
"version": "0.5.10", "version": "0.5.13",
"description": "A Javascript library making HTML tables filterable and a bit more", "description": "A Javascript library making HTML tables filterable and a bit more",
"license": "MIT", "license": "MIT",
"author": { "author": {
@ -44,7 +44,7 @@
"babel-plugin-transform-es2015-classes": "^6.24.1", "babel-plugin-transform-es2015-classes": "^6.24.1",
"babel-preset-es2015": "^6.24.1", "babel-preset-es2015": "^6.24.1",
"clean-webpack-plugin": "^0.1.16", "clean-webpack-plugin": "^0.1.16",
"codecov": "2.1.0", "codecov": "2.2.0",
"diacritics": "1.3.0", "diacritics": "1.3.0",
"format-number": "2.0.2", "format-number": "2.0.2",
"grunt": "^1.0.1", "grunt": "^1.0.1",
@ -60,13 +60,13 @@
"grunt-gh-pages": "^2.0.0", "grunt-gh-pages": "^2.0.0",
"grunt-qunit-istanbul": "1.0.0", "grunt-qunit-istanbul": "1.0.0",
"grunt-string-replace": "^1.3.1", "grunt-string-replace": "^1.3.1",
"grunt-webpack": "^2.0.1", "grunt-webpack": "^3.0.0",
"isparta-loader": "2.0.0", "isparta-loader": "2.0.0",
"script-loader": "^0.7.0", "script-loader": "^0.7.0",
"string-replace-webpack-plugin": "^0.0.5", "string-replace-webpack-plugin": "^0.0.5",
"sugar-date": "2.0.4", "sugar-date": "2.0.4",
"webpack": "^2.4.1", "webpack": "^2.5.1",
"webpack-dev-server": "^2.4.4" "webpack-dev-server": "^2.4.5"
}, },
"dependencies": {}, "dependencies": {},
"bugs": { "bugs": {

121
src/modules/baseDropdown.js Normal file
View file

@ -0,0 +1,121 @@
import {Feature} from '../feature';
import {
ignoreCase, numSortAsc, numSortDesc,
dateSortAsc, sortNumberStr, sortDateStr
} from '../sort';
import {isArray, isObj} from '../types';
import {NUMBER, FORMATTED_NUMBER, DATE} from '../const';
/**
* Base class for Dropdown and CheckList UI components
* @export
* @class BaseDropdown
* @extends {Feature}
*/
export class BaseDropdown extends Feature {
/**
* Creates an instance of BaseDropdown
* @param {TableFilter} tf
*/
constructor(tf) {
super(tf, 'baseDropdown');
let f = this.config;
/**
* Filter options custom sorter on a column basis
* @type {Object}
*/
this.customSorter = isObj(f.filter_options_sorter) &&
isArray(f.filter_options_sorter.col) &&
isArray(f.filter_options_sorter.comparer) ?
f.filter_options_sorter :
null;
// TODO: move here all properties shared by Dropdown CheckList
/**
* Has custom options
* @type {Boolean}
* @private
*/
this.isCustom = false;
/**
* List of options values
* @type {Array}
* @private
*/
this.opts = [];
/**
* List of options texts for custom values
* @type {Array}
* @private
*/
this.optsTxt = [];
/**
* List of options to be excluded from the checklist filter
* @type {Array}
* @private
*/
this.excludedOpts = [];
}
/**
* Sort passed options based on the type of the specified column
* @param {Number} colIndex Column index
* @param {Array} [options=[]] Collection of values
* @return {Array} Sorted values
* @private
*/
sortOptions(colIndex, options = []) {
let tf = this.tf;
if (tf.isCustomOptions(colIndex) || !tf.sortSlc ||
(isArray(tf.sortSlc) && tf.sortSlc.indexOf(colIndex) === -1)) {
return options;
}
let { caseSensitive, sortNumDesc } = tf;
let compareFn;
if (this.customSorter &&
this.customSorter.col.indexOf(colIndex) !== -1) {
var idx = this.customSorter.col.indexOf(colIndex);
compareFn = this.customSorter.comparer[idx];
}
else if (tf.hasType(colIndex, [NUMBER, FORMATTED_NUMBER])) {
let decimal = tf.getDecimal(colIndex);
let comparer = numSortAsc;
if (sortNumDesc === true || sortNumDesc.indexOf(colIndex) !== -1) {
comparer = numSortDesc;
}
compareFn = sortNumberStr(comparer, decimal);
}
else if (tf.hasType(colIndex, [DATE])) {
let locale = tf.feature('dateType').getLocale(colIndex);
let comparer = dateSortAsc;
compareFn = sortDateStr(comparer, locale);
} else { // string
compareFn = caseSensitive ? undefined : ignoreCase;
}
return options.sort(compareFn);
}
/**
* Regenerate filters of specified columns and maintain selection if any
* @param {Array} colIndexes Collection of column indexes
* @private
*/
refreshFilters(colIndexes) {
colIndexes.forEach((colIdx) => {
let values = this.getValues(colIdx);
this.build(colIdx, this.tf.linkedFilters);
this.selectOptions(colIdx, values);
});
}
}

View file

@ -1,22 +1,21 @@
import {Feature} from '../feature'; import {BaseDropdown} from './baseDropdown';
import { import {
addClass, createCheckItem, createText, createElm, elm, getText, addClass, createCheckItem, createText, createElm, elm, getText,
removeClass, tag removeClass, tag
} from '../dom'; } from '../dom';
import {has} from '../array'; import {has} from '../array';
import {matchCase, trim, rgxEsc} from '../string'; import {matchCase, trim, rgxEsc} from '../string';
import {ignoreCase, numSortAsc, numSortDesc} from '../sort';
import {addEvt, removeEvt, targetEvt} from '../event'; import {addEvt, removeEvt, targetEvt} from '../event';
import {isEmpty} from '../types'; import {isEmpty} from '../types';
import {CHECKLIST, NONE} from '../const'; import {CHECKLIST, NONE} from '../const';
const SORT_ERROR = 'Filter options for column {0} cannot be sorted in ' +
'{1} manner.';
/** /**
* Checklist filter UI component * Checklist filter UI component
* @export
* @class CheckList
* @extends {BaseDropdown}
*/ */
export class CheckList extends Feature { export class CheckList extends BaseDropdown {
/** /**
* Creates an instance of CheckList * Creates an instance of CheckList
@ -86,34 +85,6 @@ export class CheckList extends Feature {
* @private * @private
*/ */
this.prfx = 'chkdiv_'; this.prfx = 'chkdiv_';
/**
* Has custom options
* @type {Boolean}
* @private
*/
this.isCustom = false;
/**
* List of options values
* @type {Array}
* @private
*/
this.opts = [];
/**
* List of options texts for custom values
* @type {Array}
* @private
*/
this.optsTxt = [];
/**
* List of options to be excluded from the checklist filter
* @type {Array}
* @private
*/
this.excludedOpts = [];
} }
/** /**
@ -149,13 +120,8 @@ export class CheckList extends Feature {
* Refresh all checklist filters * Refresh all checklist filters
*/ */
refreshAll() { refreshAll() {
let tf = this.tf; let colIdxs = this.tf.getFiltersByType(CHECKLIST, true);
let fltsIdxs = tf.getFiltersByType(CHECKLIST, true); this.refreshFilters(colIdxs);
fltsIdxs.forEach((colIdx) => {
let values = this.getValues(colIdx);
this.build(colIdx, tf.linkedFilters);
this.selectOptions(colIdx, values);
});
} }
/** /**
@ -218,7 +184,9 @@ export class CheckList extends Feature {
this.emitter.emit('before-populating-filter', tf, colIndex); this.emitter.emit('before-populating-filter', tf, colIndex);
/** @inherited */
this.opts = []; this.opts = [];
/** @inherited */
this.optsTxt = []; this.optsTxt = [];
let flt = this.containers[colIndex]; let flt = this.containers[colIndex];
@ -230,8 +198,16 @@ export class CheckList extends Feature {
let rows = tf.dom().rows; let rows = tf.dom().rows;
let nbRows = tf.getRowsNb(true); let nbRows = tf.getRowsNb(true);
let caseSensitive = tf.caseSensitive; let caseSensitive = tf.caseSensitive;
/** @inherited */
this.isCustom = tf.isCustomOptions(colIndex); this.isCustom = tf.isCustomOptions(colIndex);
//Retrieves custom values
if (this.isCustom) {
let customValues = tf.getCustomOptions(colIndex);
this.opts = customValues[0];
this.optsTxt = customValues[1];
}
let activeIdx; let activeIdx;
let activeFilterId = tf.getActiveFilterId(); let activeFilterId = tf.getActiveFilterId();
if (isLinked && activeFilterId) { if (isLinked && activeFilterId) {
@ -240,6 +216,7 @@ export class CheckList extends Feature {
let filteredDataCol = []; let filteredDataCol = [];
if (isLinked && tf.disableExcludedOptions) { if (isLinked && tf.disableExcludedOptions) {
/** @inherited */
this.excludedOpts = []; this.excludedOpts = [];
} }
@ -292,55 +269,10 @@ export class CheckList extends Feature {
} }
} }
//Retrieves custom values //sort options
if (this.isCustom) { this.opts = this.sortOptions(colIndex, this.opts);
let customValues = tf.getCustomOptions(colIndex); if (this.excludedOpts) {
this.opts = customValues[0]; this.excludedOpts = this.sortOptions(colIndex, this.excludedOpts);
this.optsTxt = customValues[1];
}
if (tf.sortSlc && !this.isCustom) {
if (!caseSensitive) {
this.opts.sort(ignoreCase);
if (this.excludedOpts) {
this.excludedOpts.sort(ignoreCase);
}
} else {
this.opts.sort();
if (this.excludedOpts) {
this.excludedOpts.sort();
}
}
}
//asc sort
if (tf.sortNumAsc.indexOf(colIndex) !== -1) {
try {
this.opts.sort(numSortAsc);
if (this.excludedOpts) {
this.excludedOpts.sort(numSortAsc);
}
if (this.isCustom) {
this.optsTxt.sort(numSortAsc);
}
} catch (e) {
throw new Error(SORT_ERROR.replace('{0}', colIndex)
.replace('{1}', 'ascending'));
}//in case there are alphanumeric values
}
//desc sort
if (tf.sortNumDesc.indexOf(colIndex) !== -1) {
try {
this.opts.sort(numSortDesc);
if (this.excludedOpts) {
this.excludedOpts.sort(numSortDesc);
}
if (this.isCustom) {
this.optsTxt.sort(numSortDesc);
}
} catch (e) {
throw new Error(SORT_ERROR.replace('{0}', colIndex)
.replace('{1}', 'descending'));
}//in case there are alphanumeric values
} }
this.addChecks(colIndex, ul); this.addChecks(colIndex, ul);
@ -562,7 +494,6 @@ export class CheckList extends Feature {
let flt = tf.getFilterElement(colIndex); let flt = tf.getFilterElement(colIndex);
let fltAttr = flt.getAttribute('value'); let fltAttr = flt.getAttribute('value');
let values = isEmpty(fltAttr) ? '' : fltAttr; let values = isEmpty(fltAttr) ? '' : fltAttr;
//removes last operator || //removes last operator ||
values = values.substr(0, values.length - 3); values = values.substr(0, values.length - 3);
//turn || separated values into array //turn || separated values into array

View file

@ -94,6 +94,16 @@ export class DateType extends Feature {
return isObj(colType) ? colType : {}; return isObj(colType) ? colType : {};
} }
/**
* Return the locale code for supplied column index as per configuration
* or global setting
* @param {Number} colIndex Column index
* @returns {String} Locale code (ie: 'en-us')
*/
getLocale(colIndex) {
return this.getOptions(colIndex).locale || this.locale
}
/** /**
* Add date time format(s) to a locale as specified by the passed * Add date time format(s) to a locale as specified by the passed
* collection of column types, ie: * collection of column types, ie:

View file

@ -1,18 +1,17 @@
import {Feature} from '../feature'; import {BaseDropdown} from './baseDropdown';
import {createElm, createOpt, elm} from '../dom'; import {createElm, createOpt, elm} from '../dom';
import {has} from '../array'; import {has} from '../array';
import {matchCase} from '../string'; import {matchCase} from '../string';
import {ignoreCase, numSortAsc, numSortDesc} from '../sort';
import {addEvt, targetEvt} from '../event'; import {addEvt, targetEvt} from '../event';
import {SELECT, MULTIPLE, NONE} from '../const'; import {SELECT, MULTIPLE, NONE} from '../const';
const SORT_ERROR = 'Filter options for column {0} cannot be sorted in ' +
'{1} manner.';
/** /**
* Dropdown filter UI component * Dropdown filter UI component
* @export
* @class Dropdown
* @extends {BaseDropdown}
*/ */
export class Dropdown extends Feature { export class Dropdown extends BaseDropdown {
/** /**
* Creates an instance of Dropdown * Creates an instance of Dropdown
@ -43,26 +42,6 @@ export class Dropdown extends Feature {
*/ */
this.multipleSlcTooltip = f.multiple_slc_tooltip || this.multipleSlcTooltip = f.multiple_slc_tooltip ||
'Use Ctrl/Cmd key for multiple selections'; 'Use Ctrl/Cmd key for multiple selections';
/**
* Indicates drop-down has custom options
* @private
*/
this.isCustom = null;
/**
* List of options values
* @type {Array}
* @private
*/
this.opts = null;
/**
* List of options texts for custom values
* @type {Array}
* @private
*/
this.optsTxt = null;
} }
@ -96,15 +75,10 @@ export class Dropdown extends Feature {
* Refresh all drop-down filters * Refresh all drop-down filters
*/ */
refreshAll() { refreshAll() {
let tf = this.tf; let selectFlts = this.tf.getFiltersByType(SELECT, true);
let selectFlts = tf.getFiltersByType(SELECT, true); let multipleFlts = this.tf.getFiltersByType(MULTIPLE, true);
let multipleFlts = tf.getFiltersByType(MULTIPLE, true); let colIdxs = selectFlts.concat(multipleFlts);
let flts = selectFlts.concat(multipleFlts); this.refreshFilters(colIdxs);
flts.forEach((colIdx) => {
let values = this.getValues(colIdx);
this.build(colIdx, tf.linkedFilters);
this.selectOptions(colIdx, values);
});
} }
/** /**
@ -177,7 +151,9 @@ export class Dropdown extends Feature {
this.emitter.emit('before-populating-filter', tf, colIndex); this.emitter.emit('before-populating-filter', tf, colIndex);
/** @inherited */
this.opts = []; this.opts = [];
/** @inherited */
this.optsTxt = []; this.optsTxt = [];
let slcId = tf.fltIds[colIndex]; let slcId = tf.fltIds[colIndex];
@ -186,8 +162,16 @@ export class Dropdown extends Feature {
let nbRows = tf.getRowsNb(true); let nbRows = tf.getRowsNb(true);
//custom select test //custom select test
/** @inherited */
this.isCustom = tf.isCustomOptions(colIndex); this.isCustom = tf.isCustomOptions(colIndex);
//Retrieves custom values
if (this.isCustom) {
let customValues = tf.getCustomOptions(colIndex);
this.opts = customValues[0];
this.optsTxt = customValues[1];
}
//custom selects text //custom selects text
let activeIdx; let activeIdx;
let activeFilterId = tf.getActiveFilterId(); let activeFilterId = tf.getActiveFilterId();
@ -250,54 +234,10 @@ export class Dropdown extends Feature {
}//for j }//for j
}//for k }//for k
//Retrieves custom values //sort options
if (this.isCustom) { this.opts = this.sortOptions(colIndex, this.opts);
let customValues = tf.getCustomOptions(colIndex); if (excludedOpts) {
this.opts = customValues[0]; excludedOpts = this.sortOptions(colIndex, excludedOpts);
this.optsTxt = customValues[1];
}
if (tf.sortSlc && !this.isCustom) {
if (!tf.caseSensitive) {
this.opts.sort(ignoreCase);
if (excludedOpts) {
excludedOpts.sort(ignoreCase);
}
} else {
this.opts.sort();
if (excludedOpts) { excludedOpts.sort(); }
}
}
//asc sort
if (tf.sortNumAsc.indexOf(colIndex) !== -1) {
try {
this.opts.sort(numSortAsc);
if (excludedOpts) {
excludedOpts.sort(numSortAsc);
}
if (this.isCustom) {
this.optsTxt.sort(numSortAsc);
}
} catch (e) {
throw new Error(SORT_ERROR.replace('{0}', colIndex)
.replace('{1}', 'ascending'));
}//in case there are alphanumeric values
}
//desc sort
if (tf.sortNumDesc.indexOf(colIndex) !== -1) {
try {
this.opts.sort(numSortDesc);
if (excludedOpts) {
excludedOpts.sort(numSortDesc);
}
if (this.isCustom) {
this.optsTxt.sort(numSortDesc);
}
} catch (e) {
throw new Error(SORT_ERROR.replace('{0}', colIndex)
.replace('{1}', 'ascending'));
}//in case there are alphanumeric values
} }
//populates drop-down //populates drop-down

View file

@ -17,7 +17,7 @@ export class MarkActiveColumns extends Feature {
constructor(tf) { constructor(tf) {
super(tf, 'markActiveColumns'); super(tf, 'markActiveColumns');
let config = this.config.mark_active_columns let config = this.config.mark_active_columns || {};
/** /**
* Css class for filtered (active) columns * Css class for filtered (active) columns

View file

@ -19,7 +19,7 @@ export class NoResults extends Feature {
super(tf, 'noResults'); super(tf, 'noResults');
//configuration object //configuration object
let f = this.config.no_results_message; let f = this.config.no_results_message || {};
/** /**
* Text (accepts HTML) * Text (accepts HTML)

View file

@ -18,13 +18,13 @@ export class RowsCounter extends Feature {
super(tf, 'rowsCounter'); super(tf, 'rowsCounter');
// TableFilter configuration // TableFilter configuration
let f = this.config; let f = this.config.rows_counter || {};
/** /**
* ID of custom container element * ID of custom container element
* @type {String} * @type {String}
*/ */
this.targetId = f.rows_counter_target_id || null; this.targetId = f.target_id || null;
/** /**
* Container DOM element * Container DOM element
@ -44,14 +44,14 @@ export class RowsCounter extends Feature {
* Text preceding the total number of rows * Text preceding the total number of rows
* @type {String} * @type {String}
*/ */
this.text = f.rows_counter_text || 'Rows: '; this.text = f.text || 'Rows: ';
/** /**
* Separator symbol appearing between the first and last visible rows of * Separator symbol appearing between the first and last visible rows of
* current page when paging is enabled. ie: Rows: 31-40 / 70 * current page when paging is enabled. ie: Rows: 31-40 / 70
* @type {String} * @type {String}
*/ */
this.fromToTextSeparator = f.from_to_text_separator || '-'; this.fromToTextSeparator = f.separator || '-';
/** /**
* Separator symbol appearing between the first and last visible rows of * Separator symbol appearing between the first and last visible rows of
@ -65,7 +65,7 @@ export class RowsCounter extends Feature {
* Css class for container element * Css class for container element
* @type {String} * @type {String}
*/ */
this.cssClass = f.tot_rows_css_class || 'tot'; this.cssClass = f.css_class || 'tot';
/** /**
* Callback fired before the counter is refreshed * Callback fired before the counter is refreshed
@ -111,8 +111,7 @@ export class RowsCounter extends Feature {
countDiv.appendChild(countText); countDiv.appendChild(countText);
countDiv.appendChild(countSpan); countDiv.appendChild(countSpan);
targetEl.appendChild(countDiv); targetEl.appendChild(countDiv);
} } else {
else {
//custom container, no need to append statusDiv //custom container, no need to append statusDiv
targetEl.appendChild(countText); targetEl.appendChild(countText);
targetEl.appendChild(countSpan); targetEl.appendChild(countSpan);
@ -133,7 +132,6 @@ export class RowsCounter extends Feature {
/** /**
* Refreshes the rows counter * Refreshes the rows counter
* @param {Number} p Optional parameter the total number of rows to display * @param {Number} p Optional parameter the total number of rows to display
* @returns
*/ */
refresh(p) { refresh(p) {
if (!this.initialized || !this.isEnabled()) { if (!this.initialized || !this.isEnabled()) {
@ -154,16 +152,17 @@ export class RowsCounter extends Feature {
} else { } else {
let paging = tf.feature('paging'); let paging = tf.feature('paging');
if (paging) { if (paging) {
let nbValidRows = tf.getValidRowsNb();
//paging start row //paging start row
let pagingStartRow = parseInt(paging.startPagingRow, 10) + let pagingStartRow = parseInt(paging.startPagingRow, 10) +
((tf.getValidRowsNb() > 0) ? 1 : 0); ((nbValidRows > 0) ? 1 : 0);
let pagingEndRow = let pagingEndRow =
(pagingStartRow + paging.pagingLength) - 1 <= (pagingStartRow + paging.pagingLength) - 1 <=
tf.getValidRowsNb() ? nbValidRows ?
pagingStartRow + paging.pagingLength - 1 : pagingStartRow + paging.pagingLength - 1 :
tf.getValidRowsNb(); nbValidRows;
totTxt = pagingStartRow + this.fromToTextSeparator + totTxt = pagingStartRow + this.fromToTextSeparator +
pagingEndRow + this.overText + tf.getValidRowsNb(); pagingEndRow + this.overText + nbValidRows;
} }
} }

View file

@ -1,6 +1,7 @@
/** import {parse as parseNb} from './number';
* Sorting utilities import {Date as SugarDate} from 'sugar-date';
*/
/** Sorting utilities */
/** /**
* Case insensitive compare function for passed strings * Case insensitive compare function for passed strings
@ -13,21 +14,69 @@
export const ignoreCase = (a, b) => { export const ignoreCase = (a, b) => {
let x = a.toLowerCase(); let x = a.toLowerCase();
let y = b.toLowerCase(); let y = b.toLowerCase();
return ((x < y) ? -1 : ((x > y) ? 1 : 0)); return x < y ? -1 : (x > y ? 1 : 0);
} }
/** /**
* Sorts passed numbers in a ascending manner * Compare function for sorting passed numbers in ascending manner
* @param {Number} First number * @param {Number} First number
* @param {Number} Second number * @param {Number} Second number
* @param {Number} Negative, zero or positive number * @return {Number} Negative, zero or positive number
*/ */
export const numSortAsc = (a, b) => (a - b); export const numSortAsc = (a, b) => (a - b);
/** /**
* Sorts passed numbers in a descending manner * Compare function for sorting passed numbers in descending manner
* @param {Number} First number * @param {Number} First number
* @param {Number} Second number * @param {Number} Second number
* @param {Number} Negative, zero or positive number * @return {Number} Negative, zero or positive number
*/ */
export const numSortDesc = (a, b) => (b - a); export const numSortDesc = (a, b) => (b - a);
/**
* Compare function for sorting passed dates in ascending manner according to
* the corresponding UTC numeric value (returned by getTime)
* @param {Date} First date object
* @param {Date} Second date object
* @return {Number} Negative, zero or positive number
*/
export const dateSortAsc = (date1, date2) => date1.getTime() - date2.getTime();
/**
* Compare function for sorting passed dates in descending manner according to
* the corresponding UTC numeric value (returned by getTime)
* @param {Date} First date object
* @param {Date} Second date object
* @return {Number} Negative, zero or positive number
*/
export const dateSortDesc = (date1, date2) => date2.getTime() - date1.getTime();
/**
* Curried compare function for sorting passed formatted numbers in desired
* fashion according to supplied compare function and decimal separator
* @param {Function} Compare function
* @param {String} [decimal=','] Decimal separator
* @return {Function} Compare function receiving parsed numeric arguments
*/
export const sortNumberStr = (compareFn, decimal = ',') => {
return (numStr1, numStr2) => {
let num1 = parseNb(numStr1, decimal);
let num2 = parseNb(numStr2, decimal);
return compareFn(num1, num2);
}
}
/**
* Curried compare function for sorting passed formatted dates in desired
* fashion according to supplied compare function and locale
* @param {Function} Compare function
* @param {String} [locale='en-us'] Locale code
* @return {Function} Compare function receiving parsed date arguments
*/
export const sortDateStr = (compareFn, locale = 'en-us') => {
return (dateStr1, dateStr2) => {
let date1 = SugarDate.create(dateStr1, locale);
let date2 = SugarDate.create(dateStr2, locale);
return compareFn(date1, date2);
}
}

View file

@ -106,6 +106,9 @@ export class TableFilter {
*/ */
this.nbCells = null; this.nbCells = null;
/** @private */
this.initialized = false;
let startRow; let startRow;
// TODO: use for-of // TODO: use for-of
@ -543,11 +546,13 @@ export class TableFilter {
this.onSlcChange = f.on_change === false ? false : true; this.onSlcChange = f.on_change === false ? false : true;
/** /**
* Indicate whether options in drop-down filter types are sorted in a * Make drop-down filter types options sorted in alpha-numeric manner
* alpha-numeric manner by default * by default globally or on a column basis
* @type {Boolean} * @type {Boolean|Array}
*/ */
this.sortSlc = f.sort_select === false ? false : true; // this.sortSlc = f.sort_select === false ? false : true;
this.sortSlc = isUndef(f.sort_select) ? true :
isArray(f.sort_select) ? f.sort_select : Boolean(f.sort_select);
/** /**
* Indicate whether options in drop-down filter types are sorted in a * Indicate whether options in drop-down filter types are sorted in a
@ -708,7 +713,7 @@ export class TableFilter {
* Enable rows counter UI component * Enable rows counter UI component
* @type {Boolean} * @type {Boolean}
*/ */
this.rowsCounter = Boolean(f.rows_counter); this.rowsCounter = isObj(f.rows_counter) || Boolean(f.rows_counter);
/** /**
* Enable status bar UI component * Enable status bar UI component
@ -1045,16 +1050,12 @@ export class TableFilter {
//drop-down filters //drop-down filters
if (col === SELECT || col === MULTIPLE) { if (col === SELECT || col === MULTIPLE) {
if (!Mod.dropdown) { Mod.dropdown = Mod.dropdown || new Dropdown(this);
Mod.dropdown = new Dropdown(this);
}
Mod.dropdown.init(i, this.isExternalFlt, fltcell); Mod.dropdown.init(i, this.isExternalFlt, fltcell);
} }
// checklist // checklist
else if (col === CHECKLIST) { else if (col === CHECKLIST) {
if (!Mod.checkList) { Mod.checkList = Mod.checkList || new CheckList(this);
Mod.checkList = new CheckList(this);
}
Mod.checkList.init(i, this.isExternalFlt, fltcell); Mod.checkList.init(i, this.isExternalFlt, fltcell);
} else { } else {
this._buildInputFilter(i, inpclass, fltcell); this._buildInputFilter(i, inpclass, fltcell);
@ -1117,7 +1118,6 @@ export class TableFilter {
this.emitter.on(['after-filtering'], () => this.linkFilters()); this.emitter.on(['after-filtering'], () => this.linkFilters());
} }
/** @inherited */
this.initialized = true; this.initialized = true;
this.onFiltersLoaded(this); this.onFiltersLoaded(this);
@ -1364,9 +1364,7 @@ export class TableFilter {
this.emitter.emit('before-loading-extensions', this); this.emitter.emit('before-loading-extensions', this);
for (let i = 0, len = exts.length; i < len; i++) { for (let i = 0, len = exts.length; i < len; i++) {
let ext = exts[i]; let ext = exts[i];
if (!this.ExtRegistry[ext.name]) { this.loadExtension(ext);
this.loadExtension(ext);
}
} }
this.emitter.emit('after-loading-extensions', this); this.emitter.emit('after-loading-extensions', this);
} }
@ -1376,7 +1374,7 @@ export class TableFilter {
* @param {Object} ext Extension config object * @param {Object} ext Extension config object
*/ */
loadExtension(ext) { loadExtension(ext) {
if (!ext || !ext.name) { if (!ext || !ext.name || this.hasExtension(ext.name)) {
return; return;
} }
@ -1419,6 +1417,15 @@ export class TableFilter {
return !isEmpty(this.ExtRegistry[name]); return !isEmpty(this.ExtRegistry[name]);
} }
/**
* Register the passed extension instance with associated name
* @param {Object} inst Extension instance
* @param {String} name Name of the extension
*/
registerExtension(inst, name) {
this.ExtRegistry[name] = inst;
}
/** /**
* Destroy all the extensions store in extensions registry * Destroy all the extensions store in extensions registry
*/ */
@ -1803,7 +1810,7 @@ export class TableFilter {
*/ */
_testTerm(term, cellValue, colIdx) { _testTerm(term, cellValue, colIdx) {
let numData; let numData;
let decimal = this.decimalSeparator; let decimal = this.getDecimal(colIdx);
let reLe = new RegExp(this.leOperator), let reLe = new RegExp(this.leOperator),
reGe = new RegExp(this.geOperator), reGe = new RegExp(this.geOperator),
reL = new RegExp(this.lwOperator), reL = new RegExp(this.lwOperator),
@ -1845,7 +1852,7 @@ export class TableFilter {
let dateType = this.Mod.dateType; let dateType = this.Mod.dateType;
let isValidDate = dateType.isValid.bind(dateType); let isValidDate = dateType.isValid.bind(dateType);
let parseDate = dateType.parse.bind(dateType); let parseDate = dateType.parse.bind(dateType);
let locale = dateType.getOptions(colIdx).locale || this.locale; let locale = dateType.getLocale(colIdx);
// Search arg dates tests // Search arg dates tests
let isLDate = hasLO && let isLDate = hasLO &&
@ -1916,12 +1923,6 @@ export class TableFilter {
} }
else { else {
if (this.hasType(colIdx, [FORMATTED_NUMBER])) {
let colType = this.colTypes[colIdx];
if (colType.hasOwnProperty('decimal')) {
decimal = colType.decimal;
}
}
// Convert to number anyways to auto-resolve type in case not // Convert to number anyways to auto-resolve type in case not
// defined by configuration // defined by configuration
numData = Number(cellValue) || parseNb(cellValue, decimal); numData = Number(cellValue) || parseNb(cellValue, decimal);
@ -2260,20 +2261,14 @@ export class TableFilter {
let value = this.getCellValue(cell); let value = this.getCellValue(cell);
if (this.hasType(colIndex, [FORMATTED_NUMBER])) { if (this.hasType(colIndex, [FORMATTED_NUMBER])) {
let decimal = this.decimalSeparator; return parseNb(value, this.getDecimal(colIndex));
let colType = this.colTypes[colIndex];
if (colType.hasOwnProperty('decimal')) {
decimal = colType.decimal;
}
return parseNb(value, decimal);
} }
else if (this.hasType(colIndex, [NUMBER])) { else if (this.hasType(colIndex, [NUMBER])) {
return Number(value) || parseNb(value); return Number(value) || parseNb(value);
} }
else if (this.hasType(colIndex, [DATE])){ else if (this.hasType(colIndex, [DATE])){
let dateType = this.Mod.dateType; let dateType = this.Mod.dateType;
let locale = dateType.getOptions(colIndex).locale || this.locale; return dateType.parse(value, dateType.getLocale(colIndex));
return dateType.parse(value, locale);
} }
return value; return value;
@ -3107,6 +3102,23 @@ export class TableFilter {
return this.tbl; return this.tbl;
} }
/**
* Return the decimal separator for supplied column as per column type
* configuration or global setting
* @param {Number} colIndex Column index
* @returns {String} '.' or ','
*/
getDecimal(colIndex) {
let decimal = this.decimalSeparator;
if (this.hasType(colIndex, [FORMATTED_NUMBER])) {
let colType = this.colTypes[colIndex];
if (colType.hasOwnProperty('decimal')) {
decimal = colType.decimal;
}
}
return decimal;
}
/** /**
* Get the configuration object (literal object) * Get the configuration object (literal object)
* @return {Object} * @return {Object}

View file

@ -24,8 +24,9 @@
filters_row_index: 1, filters_row_index: 1,
state: true, state: true,
alternate_rows: true, alternate_rows: true,
rows_counter: true, rows_counter: {
rows_counter_text: 'Rows: ', text: 'Rows: '
},
btn_reset: true, btn_reset: true,
status_bar: true, status_bar: true,
msg_filter: 'Filtering...' msg_filter: 'Filtering...'

View file

@ -82,8 +82,9 @@
var tfConfig = { var tfConfig = {
base_path: '../dist/tablefilter/', base_path: '../dist/tablefilter/',
alternate_rows: true, alternate_rows: true,
rows_counter: true, rows_counter: {
rows_counter_text: "Displayed rows: ", text: 'Displayed rows: '
},
loader: true, loader: true,
status: true, status: true,
status_bar: true, status_bar: true,

View file

@ -26,8 +26,9 @@ var tfConfig = {
'string', 'string', 'string', 'string', 'string', 'string',
'number', 'string', 'string', 'date' 'number', 'string', 'string', 'date'
], ],
rows_counter: true, rows_counter: {
rows_counter_text: 'Books: ', text: 'Books: '
},
alternate_rows: true, alternate_rows: true,
btn_reset: true, btn_reset: true,

View file

@ -35,8 +35,9 @@ var tfConfig = {
'string', 'string', 'number', 'string', 'string', 'number',
'string', 'string', 'date' 'string', 'string', 'date'
], ],
rows_counter: true, rows_counter: {
rows_counter_text: 'Books: ', text: 'Books: '
},
alternate_rows: true, alternate_rows: true,
btn_reset: true, btn_reset: true,
mark_active_columns: true, mark_active_columns: true,

View file

@ -14,6 +14,14 @@ var tf1 = new TableFilter('demo1', {
on_loaded: colsVisibilityTests on_loaded: colsVisibilityTests
}] }]
}); });
tf1.registerExtension(
{
init: function() {},
destroy: function() {}
},
'myExtension'
);
tf1.init(); tf1.init();
module('Sanity checks'); module('Sanity checks');
@ -380,7 +388,7 @@ test('Can select checklist options with array', function() {
tf.setFilterValue(2, ''); tf.setFilterValue(2, '');
tf.setFilterValue(2, ['1412', '982']); tf.setFilterValue(2, ['1412', '982']);
deepEqual(tf.getFilterValue(2), ['1412', '982'], deepEqual(tf.getFilterValue(2), ['982', '1412'],
'Column 2 filter values'); 'Column 2 filter values');
}); });
@ -719,6 +727,20 @@ function colsVisibilityTests() { // issue 94
}); });
test('Extension Sanity checks', function() {
deepEqual(
tf1.hasExtension('colsVisibility'),
true,
'ColsVisibility in extensions registry'
);
deepEqual(
tf1.hasExtension('myExtension'),
true,
'myExtension in extensions registry'
);
});
test('Destroy', function() { test('Destroy', function() {
tf1.destroy(); tf1.destroy();
deepEqual(tf1.isInitialized(), false, 'Filters removed'); deepEqual(tf1.isInitialized(), false, 'Filters removed');

View file

@ -103,6 +103,7 @@ test('Can sort options', function() {
col_2: 'checklist', col_2: 'checklist',
col_3: 'checklist', col_3: 'checklist',
col_4: 'checklist', col_4: 'checklist',
col_types: ['string', 'string', 'number', 'number', 'number'],
sort_num_asc: [2, 3], sort_num_asc: [2, 3],
sort_num_desc: [4] sort_num_desc: [4]
}); });

View file

@ -282,6 +282,24 @@
deepEqual(tf.getValidRows().length, 8, 'Expected rows'); deepEqual(tf.getValidRows().length, 8, 'Expected rows');
}); });
module('Locale helpers');
test('Can get decimal separator for given column from config', function() {
// act
var result = tf.getDecimal(3);
// assert
deepEqual(result, ',', 'Decimal separator for given column');
});
test('Can get decimal separator for given column from global setting',
function() {
// act
var result = tf.getDecimal(1);
// assert
deepEqual(result, '.', 'Decimal separator for given column');
});
module('Tear-down'); module('Tear-down');
test('can destroy TableFilter DOM elements', function() { test('can destroy TableFilter DOM elements', function() {
tf.destroy(); tf.destroy();

View file

@ -136,6 +136,22 @@ test('Can add date formats from config', function() {
); );
}); });
test('Can get locale for a column index retrieved from config', function() {
// act
var result = dateType.getLocale(6);
// assert
deepEqual(result, 'fr', 'Locale for given column');
});
test('Can get locale for a column index from global setting', function() {
// act
var result = dateType.getLocale(1);
// assert
deepEqual(result, 'en', 'Locale for given column');
});
module('Tear-down'); module('Tear-down');
test('can destroy TableFilter DOM elements', function() { test('can destroy TableFilter DOM elements', function() {
tf.destroy(); tf.destroy();

View file

@ -95,6 +95,7 @@ test('Can sort options', function() {
col_2: 'multiple', col_2: 'multiple',
col_3: 'select', col_3: 'select',
col_4: 'multiple', col_4: 'multiple',
col_types: ['string', 'string', 'number', 'number', 'number'],
sort_num_asc: [2, 3], sort_num_asc: [2, 3],
sort_num_desc: [4] sort_num_desc: [4]
}); });

View file

@ -80,13 +80,17 @@ test('RowsCounter component with paging', function() {
tf = null; tf = null;
tf = new TableFilter('demo', { tf = new TableFilter('demo', {
base_path: '../dist/tablefilter/', base_path: '../dist/tablefilter/',
rows_counter: true, rows_counter: {
text: 'Records: ',
separator: '~',
over_text: ' \\ '
},
paging: true, paging: true,
paging_length: 3 paging_length: 3
}); });
tf.init(); tf.init();
equal(tf.feature('rowsCounter').label.innerHTML, equal(tf.feature('rowsCounter').label.innerHTML,
'1-3 / 7', 'Counter value with paging'); '1~3 \\ 7', 'Counter value with paging');
}); });
test('Can calculate page on page change', function() { test('Can calculate page on page change', function() {
//setup //setup
@ -97,7 +101,7 @@ test('Can calculate page on page change', function() {
//assert //assert
equal(tf.feature('rowsCounter').label.innerHTML, equal(tf.feature('rowsCounter').label.innerHTML,
'4-6 / 7', 'Counter value with paging'); '4~6 \\ 7', 'Counter value with paging');
}); });
module('Tear-down'); module('Tear-down');

View file

@ -30,7 +30,8 @@ module.exports = {
options: { options: {
compact: false, compact: false,
presets: ['es2015'], presets: ['es2015'],
plugins: [['transform-es2015-classes', {loose: true}]] // plugins: [['transform-es2015-classes', {loose: true}]]
plugins: 'transform-es2015-classes'
}, },
loader: 'babel-loader' loader: 'babel-loader'
}, { }, {