From 631f6bdb5ca3d221de7003e6d3b3bda1aa8ea854 Mon Sep 17 00:00:00 2001 From: Maciej Sitarz Date: Thu, 7 Dec 2017 12:14:18 +0100 Subject: [PATCH] Commit missing files from ./dist --- dist/starter.html | 514 ++++++++++++++++++ dist/tablefilter/tf-0-9d658b4393a2055798cb.js | 8 + .../tf-0-9d658b4393a2055798cb.js.map | 1 + 3 files changed, 523 insertions(+) create mode 100644 dist/starter.html create mode 100644 dist/tablefilter/tf-0-9d658b4393a2055798cb.js create mode 100644 dist/tablefilter/tf-0-9d658b4393a2055798cb.js.map diff --git a/dist/starter.html b/dist/starter.html new file mode 100644 index 00000000..13f53d62 --- /dev/null +++ b/dist/starter.html @@ -0,0 +1,514 @@ + + + + tablefilter v0.6.7 - Starter + + +

tablefilter v0.6.7

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
countryisoyearPOPXRATPPPcgdpccci
BeninBEN19985950.33589.9517822190.951178.4690.987.55
BeninBEN19996109.53615.6990967200.191174.9092.617.86
BeninBEN20006272.00711.9763184200.611224.7492.278.25
Burkina FasoBFA19949755.03555.2047119125.76838.7679.816.57
Burkina FasoBFA19959988.00499.148407136.65860.8980.419.29
Burkina FasoBFA199610225.00511.5523987144.18881.1180.4012.12
Burkina FasoBFA199710473.53583.6693726141.78899.0176.9414.94
RussiaRUS1998146899.019.7050828932.647086.3967.739.20
RussiaRUS1999146308.9924.61993984.038074.7057.358.81
RussiaRUS2000145555.0128.129169464.859995.9154.748.79
RwandaRWA19946230.00194.51750.39529.48132.164.48
RwandaRWA19956400.00262.197509870.67746.3492.773.08
RwandaRWA19966727.00306.820007377.90823.2589.713.21
RwandaRWA19977895.18301.529785284.13847.7991.443.72
RwandaRWA19988105.00312.314086985.32914.2289.344.22
El SalvadorSLV19955669.008.7545833593.544143.5989.3110.35
El SalvadorSLV19965798.008.7550001143.694235.7988.777.79
El SalvadorSLV19975911.008.7562503813.744408.4187.057.90
Slovak RepublicSVK20005401.0046.035213.0212618.5352.2224.78
SloveniaSVN19941988.90128.808593879.9711662.1253.2119.87
SloveniaSVN19951990.00118.518501389.0312574.9654.4623.11
SloveniaSVN19961991.00135.364303697.2713151.5154.3223.23
SloveniaSVN19971985.96159.6882935103.9614143.0253.2424.14
SloveniaSVN19981982.60166.134201108.9315067.3452.8225.35
ZambiaZMB19948740.72669.3706055307.48834.1975.439.86
ZambiaZMB19958980.00864.1192017402.40829.3776.5510.31
ZambiaZMB19969214.401207.900024515.01838.0578.7410.99
ZambiaZMB19979443.211314.498047596.97851.4777.5912.15
ZambiaZMB19989665.711862.06897744.91800.6985.1213.75
ZambiaZMB19999881.212388.019043941.87765.2491.8215.30
ZambiaZMB200010089.003110.8439941157.63840.9786.3315.38
ZimbabweZWE199410775.358.1515388492.012586.8460.1018.53
ZimbabweZWE199511011.008.665375712.152603.3766.8915.03
ZimbabweZWE199611242.1610.002349852.642860.2372.0611.32
ZimbabweZWE199711923.5212.111289983.172727.0682.8211.01
ZimbabweZWE199812153.8523.679109574.062799.8577.6610.75
ZimbabweZWE199912388.3238.301200876.122770.4876.8910.73
ZimbabweZWE200012627.0044.417919169.482607.0369.238.62
+ + + + + + +

+
+
+
+
+
+
+
+
+
diff --git a/dist/tablefilter/tf-0-9d658b4393a2055798cb.js b/dist/tablefilter/tf-0-9d658b4393a2055798cb.js
new file mode 100644
index 00000000..b21ef99e
--- /dev/null
+++ b/dist/tablefilter/tf-0-9d658b4393a2055798cb.js
@@ -0,0 +1,8 @@
+/** 
+ *	 tablefilter v0.6.7 by Max Guglielmi
+ *	 build date: 2017-12-07T08:57:15.961Z 
+ *	 MIT License  
+ */ 
+
+webpackJsonp([0],{440:function(t,e,n){function i(t){return n(o(t))}function o(t){var e=s[t];if(!(e+1))throw new Error("Cannot find module '"+t+"'.");return e}var s={"./array":70,"./array.js":70,"./const":15,"./const.js":15,"./cookie":116,"./cookie.js":116,"./dom":10,"./dom.js":10,"./emitter":109,"./emitter.js":109,"./event":19,"./event.js":19,"./extensions/advancedGrid/adapterEzEditTable":441,"./extensions/advancedGrid/adapterEzEditTable.js":441,"./extensions/advancedGrid/advancedGrid":443,"./extensions/advancedGrid/advancedGrid.js":443,"./extensions/colOps/colOps":444,"./extensions/colOps/colOps.js":444,"./extensions/colsVisibility/colsVisibility":445,"./extensions/colsVisibility/colsVisibility.js":445,"./extensions/filtersVisibility/filtersVisibility":446,"./extensions/filtersVisibility/filtersVisibility.js":446,"./extensions/sort/adapterSortabletable":442,"./extensions/sort/adapterSortabletable.js":442,"./extensions/sort/sort":447,"./extensions/sort/sort.js":447,"./feature":11,"./feature.js":11,"./modules/alternateRows":125,"./modules/alternateRows.js":125,"./modules/baseDropdown":69,"./modules/baseDropdown.js":69,"./modules/checkList":128,"./modules/checkList.js":128,"./modules/clearButton":124,"./modules/clearButton.js":124,"./modules/dateType":111,"./modules/dateType.js":111,"./modules/dropdown":110,"./modules/dropdown.js":110,"./modules/gridLayout":117,"./modules/gridLayout.js":117,"./modules/hash":114,"./modules/hash.js":114,"./modules/help":112,"./modules/help.js":112,"./modules/highlightKeywords":119,"./modules/highlightKeywords.js":119,"./modules/loader":118,"./modules/loader.js":118,"./modules/markActiveColumns":121,"./modules/markActiveColumns.js":121,"./modules/noResults":126,"./modules/noResults.js":126,"./modules/paging":127,"./modules/paging.js":127,"./modules/popupFilter":120,"./modules/popupFilter.js":120,"./modules/rowsCounter":122,"./modules/rowsCounter.js":122,"./modules/state":113,"./modules/state.js":113,"./modules/statusBar":123,"./modules/statusBar.js":123,"./modules/storage":115,"./modules/storage.js":115,"./modules/toolbar":33,"./modules/toolbar.js":33,"./number":68,"./number.js":68,"./root":16,"./root.js":16,"./settings":7,"./settings.js":7,"./sort":107,"./sort.js":107,"./string":21,"./string.js":21,"./tablefilter":108,"./tablefilter.js":108,"./types":3,"./types.js":3};i.keys=function(){return Object.keys(s)},i.resolve=o,t.exports=i,i.id=440},441:function(t,e,n){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(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 s(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)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;n0&&!n.startRow?void 0:n.startRow||t.refRow,n.base_path=n.base_path||t.basePath+"ezEditTable/";var i=n.editable,o=n.selection;o&&(n.default_selection=n.default_selection||"row"),n.active_cell_css=n.active_cell_css||"ezETSelectedCell";var s=0,r=0;if(o){var a=function(e,n,i){var o=e.Selection,a=function(i){if("row"===e.defaultSelection)o.SelectRowByIndex(i);else{e.ClearSelections();var s=n.cellIndex,r=t.dom().rows[i];"both"===e.defaultSelection&&o.SelectRowByIndex(i),r&&o.SelectCell(r.cells[s])}if(t.validRowsIndex.length!==t.getRowsNb()){var a=t.dom().rows[i];a&&a.scrollIntoView(!1),c&&(c.cellIndex===t.getCellsNb()-1&&t.gridLayout?t.tblCont.scrollLeft=1e8:0===c.cellIndex&&t.gridLayout?t.tblCont.scrollLeft=0:c.scrollIntoView(!1))}};if(t.validRowsIndex){var l=t.validRowsIndex,d=l.length,u="row"!==e.defaultSelection?n.parentNode:n,c="TD"===n.nodeName?n:null,f=void 0!==i?e.Event.GetKey(i):0,h=-1!==l.indexOf(u.rowIndex),p=void 0,b=t.feature("paging"),m=34===f||33===f?b&&b.pageLength||e.nbRowsPerPage:1;if(h)34!==f&&33!==f?(s=l.indexOf(u.rowIndex),r=u.rowIndex):(p=34===f?s+m<=d-1?l[s+m]:[d-1]:s-m<=l[0]?l[0]:l[s-m],r=p,s=l.indexOf(p),a(p));else{if(u.rowIndex>r)if(u.rowIndex>=l[d-1])p=l[d-1];else{var g=s+m;p=g>d-1?l[d-1]:l[g]}else if(u.rowIndex<=l[0])p=l[0];else{var v=l[s-m];p=v||l[0]}r=u.rowIndex,a(p)}}},d=function(e,n){var i="row"!==e.defaultSelection?n.parentNode:n;if(t.paging&&t.feature("paging").nbPages>1){var o=t.feature("paging");e.nbRowsPerPage=o.pageLength;var s=t.validRowsIndex,r=s.length,a=parseInt(o.startPagingRow,10)+parseInt(o.pageLength,10),l=i.rowIndex;l===s[r-1]&&o.currentPageNb!==o.nbPages?o.setPage("last"):l===s[0]&&1!==o.currentPageNb?o.setPage("first"):l>s[a-1]&&ls[0]&&o.setPage("previous")}};if(t.paging&&(t.feature("paging").onAfterChangePage=function(t){var e=t.tf.extension("advancedGrid"),n=e._ezEditTable,i=n.Selection,o=i.GetActiveRow();o&&o.scrollIntoView(!1);var s=i.GetActiveCell();s&&s.scrollIntoView(!1)}),"row"===n.default_selection){var u=n.on_before_selected_row;n.on_before_selected_row=function(){var t=arguments;d(t[0],t[1],t[2]),u&&u.call(null,t[0],t[1],t[2])};var c=n.on_after_selected_row;n.on_after_selected_row=function(){var t=arguments;a(t[0],t[1],t[2]),c&&c.call(null,t[0],t[1],t[2])}}else{var f=n.on_before_selected_cell;n.on_before_selected_cell=function(){var t=arguments;d(t[0],t[1],t[2]),f&&f.call(null,t[0],t[1],t[2])};var h=n.on_after_selected_cell;n.on_after_selected_cell=function(){var t=arguments;a(t[0],t[1],t[2]),h&&h.call(null,t[0],t[1],t[2])}}}if(i){var p=n.on_added_dom_row;if(n.on_added_dom_row=function(){var e=arguments;t.nbFilterableRows++,t.paging?(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(),p&&p.call(null,e[0],e[1],e[2])},n.actions&&n.actions.delete){var b=n.actions.delete.on_after_submit;n.actions.delete.on_after_submit=function(){var e=arguments;t.nbFilterableRows--,t.paging?(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(),b&&b.call(null,e[0],e[1])}}}try{this._ezEditTable=new EditTable(t.id,n,e),this._ezEditTable.Init()}catch(t){throw new Error('Failed to instantiate EditTable object.\n    \n"ezEditTable" dependency not found.')}this.initialized=!0}},{key:"reset",value:function(){var t=this._ezEditTable;t&&(this.cfg.selection&&t.Selection.Set(),this.cfg.editable&&t.Editable.Set())}},{key:"toggle",value:function(){var t=this._ezEditTable;t.editable?t.Editable.Remove():t.Editable.Set(),t.selection?t.Selection.Remove():t.Selection.Set()}},{key:"_toggleForInputFilter",value:function(){var t=this.tf;if(t.getActiveFilterId()){var e=t.getColumnIndexFromFilterId(t.getActiveFilterId());t.getFilterType(e)===d.INPUT&&this.toggle()}}},{key:"destroy",value:function(){var t=this;if(this.initialized){var e=this._ezEditTable;e&&(this.cfg.selection&&(e.Selection.ClearSelections(),e.Selection.Remove()),this.cfg.editable&&e.Editable.Remove()),this.emitter.off(["filter-focus","filter-blur"],function(){return t._toggleForInputFilter()}),this.initialized=!1}}}]),e}(a.Feature);e.default=f},442:function(t,e,n){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(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 s(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)}function r(t){var e=t.split(".");for(var n in e){for(var i=e[n];3>i.length;)i="0"+i;e[n]=i}return e.join(".")}function a(t,e){var n=r(t.value.toLowerCase()),i=r(e.value.toLowerCase());return n===i?0:n0){var s=t.triggerIds;n=[],i=s.length;for(var r=0;r0&&function(){for(var e=t.triggerIds,n=0;n1&&void 0!==arguments[1]?arguments[1]:"sum",n=arguments[2],i=this.excludeRows||[],o=tf.getVisibleColumnData(t,!1,i);return Number(this.calc(o,e,n))}},{key:"calc",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"sum",n=arguments[2],i=0;switch("q1"!==e&&"q3"!==e&&"median"!==e||(t=this.sortColumnValues(t,u.numSortAsc)),e){case"mean":i=this.calcMean(t);break;case"sum":i=this.calcSum(t);break;case"min":i=this.calcMin(t);break;case"max":i=this.calcMax(t);break;case"median":i=this.calcMedian(t);break;case"q1":i=this.calcQ1(t);break;case"q3":i=this.calcQ3(t)}return(0,d.isEmpty)(n)?i:i.toFixed(n)}},{key:"calcSum",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return(0,d.isEmpty)(t)?0:t.reduce(function(t,e){return Number(t)+Number(e)})}},{key:"calcMean",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=this.calcSum(t)/t.length;return Number(e)}},{key:"calcMax",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return Math.max.apply(null,t)}},{key:"calcMin",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return Math.min.apply(null,t)}},{key:"calcMedian",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=t.length,n=0;return e%2==1?(n=Math.floor(e/2),Number(t[n])):(Number(t[e/2])+Number(t[e/2-1]))/2}},{key:"calcQ1",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=t.length,n=0;return n=Math.floor(e/4),4*n===e?(Number(t[n-1])+Number(t[n]))/2:Number(t[n])}},{key:"calcQ3",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=t.length,n=0,i=0;return n=Math.floor(e/4),4*n===e?(i=3*n,(Number(t[i])+Number(t[i-1]))/2):Number(t[e-n-1])}},{key:"sortColumnValues",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments[1];return t.sort(e)}},{key:"writeResult",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"innerhtml",i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:2,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},s=(0,l.elm)(e);if(s)switch(t=t.toFixed(i),t=isNaN(t)||!isFinite(t)?"":(0,h.default)(o)(t),n.toLowerCase()){case"innerhtml":s.innerHTML=t;break;case"setvalue":s.value=t;break;case"createtextnode":var r=s.firstChild,a=(0,l.createText)(t);s.replaceChild(a,r)}}},{key:"configureFormat",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.tf;if(n.hasType(t,[c.FORMATTED_NUMBER])){var i=n.colTypes[t];i.decimal&&!e.decimal&&(e.decimal=i.decimal),i.thousands&&!e.integerSeparator&&(e.integerSeparator=i.thousands)}else e.decimal=e.decimal||"",e.integerSeparator=e.integerSeparator||"";return e}},{key:"destroy",value:function(){var t=this;this.initialized&&(this.emitter.off(b,function(){return t.calcAll()}),this.initialized=!1)}}]),e}(a.Feature);e.default=m},445:function(t,e,n){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(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 s(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)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;n',s.icnCollapseHtml='Collapse filters',s.defaultText="Toggle filters",s.targetId=n.target_id||null,s.enableIcon=(0,c.defaultsBool)(n.enable_icon,!0),s.btnText=(0,c.defaultsStr)(n.btn_text,""),s.collapseBtnHtml=s.enableIcon?s.icnCollapseHtml+s.btnText:s.btnText||s.defaultText,s.expandBtnHtml=s.enableIcon?s.icnExpandHtml+s.btnText:s.btnText||s.defaultText,s.btnHtml=(0,c.defaultsStr)(n.btn_html,null),s.btnCssClass=(0,c.defaultsStr)(n.btn_css_class,"btnExpClpFlt"),s.contCssClass=(0,c.defaultsStr)(n.cont_css_class,"expClpFlt"),s.filtersRowIndex=(0,c.defaultsNb)(n.filters_row_index,t.getFiltersRowIndex()),s.visibleAtStart=(0,c.defaultsNb)(n.visible_at_start,!0),s.toolbarPosition=(0,c.defaultsStr)(n.toolbar_position,f.RIGHT),s.onBeforeShow=(0,c.defaultsFn)(n.on_before_show,d.EMPTY_FN),s.onAfterShow=(0,c.defaultsFn)(n.on_after_show,d.EMPTY_FN),s.onBeforeHide=(0,c.defaultsFn)(n.on_before_hide,d.EMPTY_FN),s.onAfterHide=(0,c.defaultsFn)(n.on_after_hide,d.EMPTY_FN),t.import(n.name+"Style",t.getStylePath()+s.stylesheet,null,"link"),s.enable(),s}return s(e,t),r(e,[{key:"init",value:function(){var t=this;this.initialized||(this.emitter.emit("initializing-extension",this,!(0,d.isNull)(this.targetId)),this.buildUI(),this.initialized=!0,this.emitter.on(["show-filters"],function(e,n){return t.show(n)}),this.emitter.emit("filters-visibility-initialized",this.tf,this),this.emitter.emit("extension-initialized",this))}},{key:"buildUI",value:function(){var t=this,e=this.tf,n=(0,l.createElm)("span");n.className=this.contCssClass;var i=this.targetId?(0,l.elm)(this.targetId):e.feature("toolbar").container(this.toolbarPosition);if(this.targetId)i.appendChild(n);else{var o=i.firstChild;o.parentNode.insertBefore(n,o)}var s=void 0;this.btnHtml?(n.innerHTML=this.btnHtml,s=n.firstChild):(s=(0,l.createElm)("a",["href","javascript:void(0);"]),s.className=this.btnCssClass,s.title=this.btnText||this.defaultText,s.innerHTML=this.collapseBtnHtml,n.appendChild(s)),(0,u.addEvt)(s,"click",function(){return t.toggle()}),this.contEl=n,this.btnEl=s,this.visibleAtStart||this.toggle()}},{key:"toggle",value:function(){var t=this.tf,e=t.gridLayout?t.feature("gridLayout").headTbl:t.dom(),n=e.rows[this.filtersRowIndex],i=""===n.style.display;this.show(!i)}},{key:"show",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=this.tf,n=e.gridLayout?e.feature("gridLayout").headTbl:e.dom(),i=n.rows[this.filtersRowIndex];t&&this.onBeforeShow(this),t||this.onBeforeHide(this),i.style.display=t?"":"none",this.enableIcon&&!this.btnHtml&&(this.btnEl.innerHTML=t?this.collapseBtnHtml:this.expandBtnHtml),t&&this.onAfterShow(this),t||this.onAfterHide(this),this.emitter.emit("filters-toggled",e,this,t)}},{key:"destroy",value:function(){var t=this;this.initialized&&(this.emitter.off(["show-filters"],function(e,n){return t.show(n)}),this.btnEl.innerHTML="",(0,l.removeElm)(this.btnEl),this.btnEl=null,this.contEl.innerHTML="",(0,l.removeElm)(this.contEl),this.contEl=null,this.initialized=!1)}}]),e}(a.Feature);e.default=h},447:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(442),o=function(t){return t&&t.__esModule?t:{default:t}}(i);n(16).root.SortableTable||n(449),e.default=o.default},448:function(t,e){function n(t){function e(e,n){if(n=n||{},!e&&0!==e)return"";e=""+e;var d=[],u="-"===e.charAt(0);return e=e.replace(/^\-/g,""),t.negativeLeftOut||n.noUnits||d.push(t.prefix),u&&d.push(t.negativeLeftSymbol),t.negativeLeftOut&&!n.noUnits&&d.push(t.prefix),e=e.split("."),null!=t.round&&l(e,t.round),null!=t.truncate&&(e[1]=a(e[1],t.truncate)),t.padLeft>0&&(e[0]=s(e[0],t.padLeft)),t.padRight>0&&(e[1]=r(e[1],t.padRight)),!n.noSeparator&&e[1]&&(e[1]=o(e[1],t.decimalsSeparator)),!n.noSeparator&&e[0]&&(e[0]=i(e[0],t.integerSeparator)),d.push(e[0]),e[1]&&(d.push(t.decimal),d.push(e[1])),t.negativeRightOut&&!n.noUnits&&d.push(t.suffix),u&&d.push(t.negativeRightSymbol),t.negativeRightOut||n.noUnits||d.push(t.suffix),d.join("")}function n(e,n){n=n||[],t.allowedSeparators&&t.allowedSeparators.forEach(function(t){n.push(t)}),n.push(t.integerSeparator),n.push(t.decimalsSeparator),e=e.replace(t.prefix,""),e=e.replace(t.suffix,"");var i=e;do{e=i;for(var o=0;oe?t.substr(0,e):t}function l(t,e){if(t[1]&&e>=0&&t[1].length>e){var n=t[1].slice(0,e);if(+t[1].substr(e,1)>=5){for(var i="";"0"===n.charAt(0);)i+="0",n=n.substr(1);n=+n+1+"",n=i+n,n.length>e&&(t[0]=+t[0]+ +n.charAt(0)+"",n=n.substring(1))}t[1]=n}return t}t.exports=n,t.exports.default=n},449:function(t,e,n){n(450)(n(451))},450:function(t,e){t.exports=function(t){function e(t){"undefined"!=typeof console&&(console.error||console.log)("[Script Loader]",t)}try{"undefined"!=typeof execScript&&function(){return"undefined"!=typeof attachEvent&&"undefined"==typeof addEventListener}()?execScript(t):"undefined"!=typeof eval?eval.call(null,t):e("EvalError: No eval function available")}catch(t){e(t)}}},451:function(t,e){t.exports='/*----------------------------------------------------------------------------\\\n|                            Sortable Table 1.12                              |\n|-----------------------------------------------------------------------------|\n|                         Created by Erik Arvidsson                           |\n|                  (http://webfx.eae.net/contact.html#erik)                   |\n|                      For WebFX (http://webfx.eae.net/)                      |\n|-----------------------------------------------------------------------------|\n| A DOM 1 based script that allows an ordinary HTML table to be sortable.     |\n|-----------------------------------------------------------------------------|\n|                  Copyright (c) 1998 - 2006 Erik Arvidsson                   |\n|-----------------------------------------------------------------------------|\n| Licensed under the Apache License, Version 2.0 (the "License"); you may not |\n| use this file except in compliance with the License.  You may obtain a copy |\n| of the License at http://www.apache.org/licenses/LICENSE-2.0                |\n| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\n| Unless  required  by  applicable law or  agreed  to  in  writing,  software |\n| distributed under the License is distributed on an  "AS IS" BASIS,  WITHOUT |\n| WARRANTIES OR  CONDITIONS OF ANY KIND,  either express or implied.  See the |\n| License  for the  specific language  governing permissions  and limitations |\n| under the License.                                                          |\n|-----------------------------------------------------------------------------|\n| 2003-01-10 | First version                                                  |\n| 2003-01-19 | Minor changes to the date parsing                              |\n| 2003-01-28 | JScript 5.0 fixes (no support for \'in\' operator)               |\n| 2003-02-01 | Sloppy typo like error fixed in getInnerText                   |\n| 2003-07-04 | Added workaround for IE cellIndex bug.                         |\n| 2003-11-09 | The bDescending argument to sort was not correctly working     |\n|            | Using onclick DOM0 event if no support for addEventListener    |\n|            | or attachEvent                                                 |\n| 2004-01-13 | Adding addSortType and removeSortType which makes it a lot     |\n|            | easier to add new, custom sort types.                          |\n| 2004-01-27 | Switch to use descending = false as the default sort order.    |\n|            | Change defaultDescending to suit your needs.                   |\n| 2004-03-14 | Improved sort type None look and feel a bit                    |\n| 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you    |\n|            | can use another tHead or no tHead, and you can chose some      |\n|            | other tBody.                                                   |\n| 2006-04-25 | Changed license to Apache Software License 2.0                 |\n|-----------------------------------------------------------------------------|\n| Created 2003-01-10 | All changes are in the log above. | Updated 2006-04-25 |\n\\----------------------------------------------------------------------------*/\n\n\nfunction SortableTable(oTable, oSortTypes) {\n\n\tthis.sortTypes = oSortTypes || [];\n\n\tthis.sortColumn = null;\n\tthis.descending = null;\n\n\tvar oThis = this;\n\tthis._headerOnclick = function (e) {\n\t\toThis.headerOnclick(e);\n\t};\n\n\tif (oTable) {\n\t\tthis.setTable( oTable );\n\t\tthis.document = oTable.ownerDocument || oTable.document;\n\t}\n\telse {\n\t\tthis.document = document;\n\t}\n\n\n\t// only IE needs this\n\tvar win = this.document.defaultView || this.document.parentWindow;\n\tthis._onunload = function () {\n\t\toThis.destroy();\n\t};\n\tif (win && typeof win.attachEvent != "undefined") {\n\t\twin.attachEvent("onunload", this._onunload);\n\t}\n}\n\nSortableTable.gecko = navigator.product == "Gecko";\nSortableTable.msie = /msie/i.test(navigator.userAgent);\n// Mozilla is faster when doing the DOM manipulations on\n// an orphaned element. MSIE is not\nSortableTable.removeBeforeSort = SortableTable.gecko;\n\nSortableTable.prototype.onsort = function () {};\n\n// default sort order. true -> descending, false -> ascending\nSortableTable.prototype.defaultDescending = false;\n\n// shared between all instances. This is intentional to allow external files\n// to modify the prototype\nSortableTable.prototype._sortTypeInfo = {};\n\nSortableTable.prototype.setTable = function (oTable) {\n\tif ( this.tHead )\n\t\tthis.uninitHeader();\n\tthis.element = oTable;\n\tthis.setTHead( oTable.tHead );\n\tthis.setTBody( oTable.tBodies[0] );\n};\n\nSortableTable.prototype.setTHead = function (oTHead) {\n\tif (this.tHead && this.tHead != oTHead )\n\t\tthis.uninitHeader();\n\tthis.tHead = oTHead;\n\tthis.initHeader( this.sortTypes );\n};\n\nSortableTable.prototype.setTBody = function (oTBody) {\n\tthis.tBody = oTBody;\n};\n\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\n\tif ( this.tHead )\n\t\tthis.uninitHeader();\n\tthis.sortTypes = oSortTypes || [];\n\tif ( this.tHead )\n\t\tthis.initHeader( this.sortTypes );\n};\n\n// adds arrow containers and events\n// also binds sort type to the header cells so that reordering columns does\n// not break the sort types\nSortableTable.prototype.initHeader = function (oSortTypes) {\n\tif (!this.tHead) return;\n\tvar cells = this.tHead.rows[0].cells;\n\tvar doc = this.tHead.ownerDocument || this.tHead.document;\n\tthis.sortTypes = oSortTypes || [];\n\tvar l = cells.length;\n\tvar img, c;\n\tfor (var i = 0; i < l; i++) {\n\t\tc = cells[i];\n\t\tif (this.sortTypes[i] != null && this.sortTypes[i] != "None") {\n\t\t\timg = doc.createElement("IMG");\n\t\t\timg.src = "images/blank.png";\n\t\t\tc.appendChild(img);\n\t\t\tif (this.sortTypes[i] != null)\n\t\t\t\tc._sortType = this.sortTypes[i];\n\t\t\tif (typeof c.addEventListener != "undefined")\n\t\t\t\tc.addEventListener("click", this._headerOnclick, false);\n\t\t\telse if (typeof c.attachEvent != "undefined")\n\t\t\t\tc.attachEvent("onclick", this._headerOnclick);\n\t\t\telse\n\t\t\t\tc.onclick = this._headerOnclick;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tc.setAttribute( "_sortType", oSortTypes[i] );\n\t\t\tc._sortType = "None";\n\t\t}\n\t}\n\tthis.updateHeaderArrows();\n};\n\n// remove arrows and events\nSortableTable.prototype.uninitHeader = function () {\n\tif (!this.tHead) return;\n\tvar cells = this.tHead.rows[0].cells;\n\tvar l = cells.length;\n\tvar c;\n\tfor (var i = 0; i < l; i++) {\n\t\tc = cells[i];\n\t\tif (c._sortType != null && c._sortType != "None") {\n\t\t\tc.removeChild(c.lastChild);\n\t\t\tif (typeof c.removeEventListener != "undefined")\n\t\t\t\tc.removeEventListener("click", this._headerOnclick, false);\n\t\t\telse if (typeof c.detachEvent != "undefined")\n\t\t\t\tc.detachEvent("onclick", this._headerOnclick);\n\t\t\tc._sortType = null;\n\t\t\tc.removeAttribute( "_sortType" );\n\t\t}\n\t}\n};\n\nSortableTable.prototype.updateHeaderArrows = function () {\n\tif (!this.tHead) return;\n\tvar cells = this.tHead.rows[0].cells;\n\tvar l = cells.length;\n\tvar img;\n\tfor (var i = 0; i < l; i++) {\n\t\tif (cells[i]._sortType != null && cells[i]._sortType != "None") {\n\t\t\timg = cells[i].lastChild;\n\t\t\tif (i == this.sortColumn)\n\t\t\t\timg.className = "sort-arrow " + (this.descending ? "descending" : "ascending");\n\t\t\telse\n\t\t\t\timg.className = "sort-arrow";\n\t\t}\n\t}\n};\n\nSortableTable.prototype.headerOnclick = function (e) {\n\t// find TD element\n\tvar el = e.target || e.srcElement;\n\twhile (el.tagName != "TD")\n\t\tel = el.parentNode;\n\n\tthis.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\n};\n\n// IE returns wrong cellIndex when columns are hidden\nSortableTable.getCellIndex = function (oTd) {\n\tvar cells = oTd.parentNode.childNodes\n\tvar l = cells.length;\n\tvar i;\n\tfor (i = 0; cells[i] != oTd && i < l; i++)\n\t\t;\n\treturn i;\n};\n\nSortableTable.prototype.getSortType = function (nColumn) {\n\treturn this.sortTypes[nColumn] || "String";\n};\n\n// only nColumn is required\n// if bDescending is left out the old value is taken into account\n// if sSortType is left out the sort type is found from the sortTypes array\n\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\n\tif (!this.tBody) return;\n\tif (sSortType == null)\n\t\tsSortType = this.getSortType(nColumn);\n\n\t// exit if None\n\tif (sSortType == "None")\n\t\treturn;\n\n\tif (bDescending == null) {\n\t\tif (this.sortColumn != nColumn)\n\t\t\tthis.descending = this.defaultDescending;\n\t\telse\n\t\t\tthis.descending = !this.descending;\n\t}\n\telse\n\t\tthis.descending = bDescending;\n\n\tthis.sortColumn = nColumn;\n\n\tif (typeof this.onbeforesort == "function")\n\t\tthis.onbeforesort();\n\n\tvar f = this.getSortFunction(sSortType, nColumn);\n\tvar a = this.getCache(sSortType, nColumn);\n\tvar tBody = this.tBody;\n\n\ta.sort(f);\n\n\tif (this.descending)\n\t\ta.reverse();\n\n\tif (SortableTable.removeBeforeSort) {\n\t\t// remove from doc\n\t\tvar nextSibling = tBody.nextSibling;\n\t\tvar p = tBody.parentNode;\n\t\tp.removeChild(tBody);\n\t}\n\n\t// insert in the new order\n\tvar l = a.length;\n\tfor (var i = 0; i < l; i++)\n\t\ttBody.appendChild(a[i].element);\n\n\tif (SortableTable.removeBeforeSort) {\n\t\t// insert into doc\n\t\tp.insertBefore(tBody, nextSibling);\n\t}\n\n\tthis.updateHeaderArrows();\n\n\tthis.destroyCache(a);\n\n\tif (typeof this.onsort == "function")\n\t\tthis.onsort();\n};\n\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\n\tvar oThis = this;\n\tthis._asyncsort = function () {\n\t\toThis.sort(nColumn, bDescending, sSortType);\n\t};\n\twindow.setTimeout(this._asyncsort, 1);\n};\n\nSortableTable.prototype.getCache = function (sType, nColumn) {\n\tif (!this.tBody) return [];\n\tvar rows = this.tBody.rows;\n\tvar l = rows.length;\n\tvar a = new Array(l);\n\tvar r;\n\tfor (var i = 0; i < l; i++) {\n\t\tr = rows[i];\n\t\ta[i] = {\n\t\t\tvalue:\t\tthis.getRowValue(r, sType, nColumn),\n\t\t\telement:\tr\n\t\t};\n\t};\n\treturn a;\n};\n\nSortableTable.prototype.destroyCache = function (oArray) {\n\tvar l = oArray.length;\n\tfor (var i = 0; i < l; i++) {\n\t\toArray[i].value = null;\n\t\toArray[i].element = null;\n\t\toArray[i] = null;\n\t}\n};\n\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\n\t// if we have defined a custom getRowValue use that\n\tif (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\n\t\treturn this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\n\n\tvar s;\n\tvar c = oRow.cells[nColumn];\n\tif (typeof c.innerText != "undefined")\n\t\ts = c.innerText;\n\telse\n\t\ts = SortableTable.getInnerText(c);\n\treturn this.getValueFromString(s, sType);\n};\n\nSortableTable.getInnerText = function (oNode) {\n\tvar s = "";\n\tvar cs = oNode.childNodes;\n\tvar l = cs.length;\n\tfor (var i = 0; i < l; i++) {\n\t\tswitch (cs[i].nodeType) {\n\t\t\tcase 1: //ELEMENT_NODE\n\t\t\t\ts += SortableTable.getInnerText(cs[i]);\n\t\t\t\tbreak;\n\t\t\tcase 3:\t//TEXT_NODE\n\t\t\t\ts += cs[i].nodeValue;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn s;\n};\n\nSortableTable.prototype.getValueFromString = function (sText, sType) {\n\tif (this._sortTypeInfo[sType])\n\t\treturn this._sortTypeInfo[sType].getValueFromString( sText );\n\treturn sText;\n\t/*\n\tswitch (sType) {\n\t\tcase "Number":\n\t\t\treturn Number(sText);\n\t\tcase "CaseInsensitiveString":\n\t\t\treturn sText.toUpperCase();\n\t\tcase "Date":\n\t\t\tvar parts = sText.split("-");\n\t\t\tvar d = new Date(0);\n\t\t\td.setFullYear(parts[0]);\n\t\t\td.setDate(parts[2]);\n\t\t\td.setMonth(parts[1] - 1);\n\t\t\treturn d.valueOf();\n\t}\n\treturn sText;\n\t*/\n\t};\n\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\n\tif (this._sortTypeInfo[sType])\n\t\treturn this._sortTypeInfo[sType].compare;\n\treturn SortableTable.basicCompare;\n};\n\nSortableTable.prototype.destroy = function () {\n\tthis.uninitHeader();\n\tvar win = this.document.parentWindow;\n\tif (win && typeof win.detachEvent != "undefined") {\t// only IE needs this\n\t\twin.detachEvent("onunload", this._onunload);\n\t}\n\tthis._onunload = null;\n\tthis.element = null;\n\tthis.tHead = null;\n\tthis.tBody = null;\n\tthis.document = null;\n\tthis._headerOnclick = null;\n\tthis.sortTypes = null;\n\tthis._asyncsort = null;\n\tthis.onsort = null;\n};\n\n// Adds a sort type to all instance of SortableTable\n// sType : String - the identifier of the sort type\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\n//    string and casts it to a desired format. If left out the string is just\n//    returned\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\n//    compare function. Takes two values and compares them. If left out less than,\n//    <, compare is used\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\n//    that takes the row and the column index and returns the value used to compare.\n//    If left out then the innerText is first taken for the cell and then the\n//    fGetValueFromString is used to convert that string the desired value and type\n\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\n\tthis._sortTypeInfo[sType] = {\n\t\ttype:\t\t\t\tsType,\n\t\tgetValueFromString:\tfGetValueFromString || SortableTable.idFunction,\n\t\tcompare:\t\t\tfCompareFunction || SortableTable.basicCompare,\n\t\tgetRowValue:\t\tfGetRowValue\n\t};\n};\n\n// this removes the sort type from all instances of SortableTable\nSortableTable.prototype.removeSortType = function (sType) {\n\tdelete this._sortTypeInfo[sType];\n};\n\nSortableTable.basicCompare = function compare(n1, n2) {\n\tif (n1.value < n2.value)\n\t\treturn -1;\n\tif (n2.value < n1.value)\n\t\treturn 1;\n\treturn 0;\n};\n\nSortableTable.idFunction = function (x) {\n\treturn x;\n};\n\nSortableTable.toUpperCase = function (s) {\n\treturn s.toUpperCase();\n};\n\nSortableTable.toDate = function (s) {\n\tvar parts = s.split("-");\n\tvar d = new Date(0);\n\td.setFullYear(parts[0]);\n\td.setDate(parts[2]);\n\td.setMonth(parts[1] - 1);\n\treturn d.valueOf();\n};\n\n\n// add sort types\nSortableTable.prototype.addSortType("Number", Number);\nSortableTable.prototype.addSortType("CaseInsensitiveString", SortableTable.toUpperCase);\nSortableTable.prototype.addSortType("Date", SortableTable.toDate);\nSortableTable.prototype.addSortType("String");\n// None is a special case\n'}});
+//# sourceMappingURL=tf-0-9d658b4393a2055798cb.js.map
\ No newline at end of file
diff --git a/dist/tablefilter/tf-0-9d658b4393a2055798cb.js.map b/dist/tablefilter/tf-0-9d658b4393a2055798cb.js.map
new file mode 100644
index 00000000..304256a2
--- /dev/null
+++ b/dist/tablefilter/tf-0-9d658b4393a2055798cb.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///tf-0-9d658b4393a2055798cb.js","webpack:///./src ^\\.\\/.*$","webpack:///./src/extensions/advancedGrid/adapterEzEditTable.js","webpack:///./src/extensions/sort/adapterSortabletable.js","webpack:///./src/extensions/advancedGrid/advancedGrid.js","webpack:///./src/extensions/colOps/colOps.js","webpack:///./src/extensions/colsVisibility/colsVisibility.js","webpack:///./src/extensions/filtersVisibility/filtersVisibility.js","webpack:///./src/extensions/sort/sort.js","webpack:///./node_modules/format-number/index.js","webpack:///./libs/sortabletable.js?75ef","webpack:///./node_modules/script-loader/addScript.js","webpack:///./libs/sortabletable.js"],"names":["webpackJsonp","440","module","exports","__webpack_require__","webpackContext","req","webpackContextResolve","id","map","Error","./array","./array.js","./const","./const.js","./cookie","./cookie.js","./dom","./dom.js","./emitter","./emitter.js","./event","./event.js","./extensions/advancedGrid/adapterEzEditTable","./extensions/advancedGrid/adapterEzEditTable.js","./extensions/advancedGrid/advancedGrid","./extensions/advancedGrid/advancedGrid.js","./extensions/colOps/colOps","./extensions/colOps/colOps.js","./extensions/colsVisibility/colsVisibility","./extensions/colsVisibility/colsVisibility.js","./extensions/filtersVisibility/filtersVisibility","./extensions/filtersVisibility/filtersVisibility.js","./extensions/sort/adapterSortabletable","./extensions/sort/adapterSortabletable.js","./extensions/sort/sort","./extensions/sort/sort.js","./feature","./feature.js","./modules/alternateRows","./modules/alternateRows.js","./modules/baseDropdown","./modules/baseDropdown.js","./modules/checkList","./modules/checkList.js","./modules/clearButton","./modules/clearButton.js","./modules/dateType","./modules/dateType.js","./modules/dropdown","./modules/dropdown.js","./modules/gridLayout","./modules/gridLayout.js","./modules/hash","./modules/hash.js","./modules/help","./modules/help.js","./modules/highlightKeywords","./modules/highlightKeywords.js","./modules/loader","./modules/loader.js","./modules/markActiveColumns","./modules/markActiveColumns.js","./modules/noResults","./modules/noResults.js","./modules/paging","./modules/paging.js","./modules/popupFilter","./modules/popupFilter.js","./modules/rowsCounter","./modules/rowsCounter.js","./modules/state","./modules/state.js","./modules/statusBar","./modules/statusBar.js","./modules/storage","./modules/storage.js","./modules/toolbar","./modules/toolbar.js","./number","./number.js","./root","./root.js","./settings","./settings.js","./sort","./sort.js","./string","./string.js","./tablefilter","./tablefilter.js","./types","./types.js","keys","Object","resolve","441","_classCallCheck","instance","Constructor","TypeError","_possibleConstructorReturn","self","call","ReferenceError","_inherits","subClass","superClass","prototype","create","constructor","value","enumerable","writable","configurable","setPrototypeOf","__proto__","defineProperty","_createClass","defineProperties","target","props","i","length","descriptor","key","protoProps","staticProps","_feature","_dom","_const","_settings","_root","AdapterEzEditTable","_Feature","tf","cfg","this","_this","getPrototypeOf","name","desc","defaultsStr","description","filename","vendorPath","vendor_path","loadStylesheet","Boolean","load_stylesheet","stylesheet","stylesheetName","stylesheet_name","scroll_into_view","gridLayout","_ezEditTable","enable","_this2","initialized","root","EditTable","_setAdvancedGrid","path","import","isImported","emitter","on","_toggleForInputFilter","startRow","tag","dom","undefined","refRow","base_path","basePath","editable","selectable","selection","default_selection","active_cell_css","_lastValidRowIndex","_lastRowIndex","onAfterSelection","et","selectedElm","e","slc","Selection","doSelect","nextRowIndex","defaultSelection","SelectRowByIndex","ClearSelections","cellIndex","row","rows","SelectCell","cells","validRowsIndex","getRowsNb","r","scrollIntoView","cell","getCellsNb","tblCont","scrollLeft","validIndexes","validIdxLen","parentNode","nodeName","keyCode","Event","GetKey","isRowValid","indexOf","rowIndex","paging","feature","d","pageLength","nbRowsPerPage","calcRowIndex","v","onBeforeSelection","nbPages","pagingEndRow","parseInt","startPagingRow","currentPageNb","setPage","onAfterChangePage","advGrid","extension","GetActiveRow","GetActiveCell","fnB","on_before_selected_row","args","arguments","fnA","on_after_selected_row","fnD","on_before_selected_cell","fnC","on_after_selected_cell","fnE","on_added_dom_row","nbFilterableRows","destroy","reset","emit","alternateRows","init","actions","fnF","on_after_submit","Init","INSTANTIATION_ERROR","ezEditTable","Set","Editable","Remove","getActiveFilterId","colIndex","getColumnIndexFromFilterId","getFilterType","filterType","toggle","_this3","off","Feature","default","442","ipAddress","vals","split","x","val","join","sortIP","a","b","aa","toLowerCase","bb","_types","_event","_number","AdapterSortableTable","opts","sorted","sortTypes","defaultsArr","types","colTypes","sortColAtStart","sort_col_at_start","asyncSort","async_sort","triggerIds","trigger_ids","imgPath","images_path","themesPath","imgBlank","image_blank","imgClassName","image_class_name","imgAscClassName","image_asc_class_name","imgDescClassName","image_desc_class_name","customKey","custom_key","onSortLoaded","defaultsFn","on_sort_loaded","EMPTY_FN","onBeforeSort","on_before_sort","onAfterSort","on_after_sort","stt","adpt","isUndef","SortableTable","overrideSortableTable","setSortTypes","onbeforesort","sortColumn","disable","onsort","paginator","getValidRows","getPage","descending","sort","colIdx","sortByColumnIndex","headerOnclick","evt","el","srcElement","tagName","CELL_TAG","HEADER_TAG","msie","getCellIndex","oTd","l","initHeader","oSortTypes","tHead","headTbl","headersRow","img","c","style","cursor","createElm","appendChild","setAttribute","addEvt","_headerOnclick","_sortType","updateHeaderArrows","triggers","j","push","elm","cellAttr","getAttribute","lastChild","className","getRowValue","oRow","sType","nColumn","sortTypeInfo","_sortTypeInfo","s","getInnerText","getValueFromString","oNode","getText","_len","Array","_key","caster","sorter","addSortType","_sortTypes","eachCol","colType","isObj","type","DATE","_addDateType","FORMATTED_NUMBER","decimal","decimalSeparator","_addNumberType","toUpperCase","STRING","IP_ADDRESS","trigger","dateType","locale","getOptions","parsedDate","parse","isNaN","Date","_this4","ids","getFiltersId","idx","header","getHeaderElement","removeChild","443","_adapterEzEditTable","_adapterEzEditTable2","obj","__esModule","444","_sort","_formatNumber","_formatNumber2","EVENTS","ColOps","onBeforeOperation","on_before_operation","onAfterOperation","on_after_operation","labelIds","colIndexes","col","operations","operation","outputTypes","write_method","formatResults","format_result","totRowIndexes","tot_row_index","excludeRows","exclude_row","decimalPrecisions","decimal_precision","calcAll","isInitialized","colOperations","uIndexes","forEach","nbCols","colValues","u","getVisibleColumnData","curValues","result","precisions","labels","writeType","formatResult","k","isArray","configureFormat","Number","calc","writeResult","totRow","display","precision","sortColumnValues","numSortAsc","calcMean","calcSum","calcMin","calcMax","calcMedian","calcQ1","calcQ3","isEmpty","toFixed","values","reduce","y","Math","max","apply","min","nbValues","aux","floor","posa","posb","label","format","labelElm","isFinite","innerHTML","oldNode","firstChild","txtNode","createText","replaceChild","hasType","thousands","integerSeparator","445","_toolbar","ColsVisibility","f","config","spanEl","btnEl","contEl","tickToHide","defaultsBool","tick_to_hide","manager","headersTbl","headers_table","headersIndex","defaultsNb","headers_index","contElTgtId","container_target_id","headersText","headers_text","btnTgtId","btn_target_id","btnText","btn_text","btnHtml","btn_html","btnCssClass","btn_css_class","btnCloseText","btn_close_text","btnCloseHtml","btn_close_html","btnCloseCssClass","btn_close_css_class","spanCssClass","span_css_class","contCssClass","cont_css_class","listCssClass","list_css_class","listItemCssClass","checklist_item_css_class","listSlcItemCssClass","checklist_selected_item_css_class","text","atStart","at_start","enableHover","enable_hover","enableTickAll","enable_tick_all","tickAllText","tick_all_text","toolbarPosition","toolbar_position","RIGHT","hiddenCols","boundMouseup","onLoaded","on_loaded","onBeforeOpen","on_before_open","onAfterOpen","on_after_open","onBeforeClose","on_before_close","onAfterClose","on_after_close","onBeforeColHidden","on_before_col_hidden","onAfterColHidden","on_after_col_hidden","onBeforeColDisplayed","on_before_col_displayed","onAfterColDisplayed","on_after_col_displayed","getStylePath","targetElm","targetEvt","removeEvt","contDisplay","NONE","lbl","li","isChecked","checked","addClass","removeClass","hide","setHidden","isNull","hideCol","buildBtn","buildManager","onMouseup","bind","_hideAtStart","span","targetEl","container","insertBefore","colVisEl","btn","title","extNameLabel","ul","tbl","headerIndex","getHeadersRowIndex","headerRow","createCheckItem","check","h","itm","click","cellText","_getHeaderText","liElm","checkItem","p","_hideElements","itemIndex","splice","isColHidden","showCol","_this5","removeElm","hasChildNodes","childNodes","n","nodeType","nodeValue","_hideCells","_hideCol","colElms","_this6","446","FiltersVisibility","icnExpand","expand_icon_name","icnCollapse","collapse_icon_name","icnExpandHtml","icnCollapseHtml","defaultText","targetId","target_id","enableIcon","enable_icon","collapseBtnHtml","expandBtnHtml","filtersRowIndex","filters_row_index","getFiltersRowIndex","visibleAtStart","visible_at_start","onBeforeShow","on_before_show","onAfterShow","on_after_show","onBeforeHide","on_before_hide","onAfterHide","on_after_hide","buildUI","visible","show","fltRow","isDisplayed","447","_adapterSortabletable","_adapterSortabletable2","448","formatter","options","number","overrideOptions","output","negative","charAt","replace","negativeLeftOut","noUnits","prefix","negativeLeftSymbol","round","truncate","padLeft","padRight","noSeparator","addDecimalSeparators","decimalsSeparator","addIntegerSeparators","negativeRightOut","suffix","negativeRightSymbol","unformat","allowedSeparators","newNumber","negativeType","negativeOut","separator","separate","rgx","test","padding","buf","substr","places","decim","slice","leadingzeros","substring","449","450","src","log","error","console","execScript","attachEvent","addEventListener","eval","451"],"mappings":"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","file":"tf-0-9d658b4393a2055798cb.js","sourcesContent":["webpackJsonp([0],{\n\n/***/ 440:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar map = {\n\t\"./array\": 70,\n\t\"./array.js\": 70,\n\t\"./const\": 15,\n\t\"./const.js\": 15,\n\t\"./cookie\": 116,\n\t\"./cookie.js\": 116,\n\t\"./dom\": 10,\n\t\"./dom.js\": 10,\n\t\"./emitter\": 109,\n\t\"./emitter.js\": 109,\n\t\"./event\": 19,\n\t\"./event.js\": 19,\n\t\"./extensions/advancedGrid/adapterEzEditTable\": 441,\n\t\"./extensions/advancedGrid/adapterEzEditTable.js\": 441,\n\t\"./extensions/advancedGrid/advancedGrid\": 443,\n\t\"./extensions/advancedGrid/advancedGrid.js\": 443,\n\t\"./extensions/colOps/colOps\": 444,\n\t\"./extensions/colOps/colOps.js\": 444,\n\t\"./extensions/colsVisibility/colsVisibility\": 445,\n\t\"./extensions/colsVisibility/colsVisibility.js\": 445,\n\t\"./extensions/filtersVisibility/filtersVisibility\": 446,\n\t\"./extensions/filtersVisibility/filtersVisibility.js\": 446,\n\t\"./extensions/sort/adapterSortabletable\": 442,\n\t\"./extensions/sort/adapterSortabletable.js\": 442,\n\t\"./extensions/sort/sort\": 447,\n\t\"./extensions/sort/sort.js\": 447,\n\t\"./feature\": 11,\n\t\"./feature.js\": 11,\n\t\"./modules/alternateRows\": 125,\n\t\"./modules/alternateRows.js\": 125,\n\t\"./modules/baseDropdown\": 69,\n\t\"./modules/baseDropdown.js\": 69,\n\t\"./modules/checkList\": 128,\n\t\"./modules/checkList.js\": 128,\n\t\"./modules/clearButton\": 124,\n\t\"./modules/clearButton.js\": 124,\n\t\"./modules/dateType\": 111,\n\t\"./modules/dateType.js\": 111,\n\t\"./modules/dropdown\": 110,\n\t\"./modules/dropdown.js\": 110,\n\t\"./modules/gridLayout\": 117,\n\t\"./modules/gridLayout.js\": 117,\n\t\"./modules/hash\": 114,\n\t\"./modules/hash.js\": 114,\n\t\"./modules/help\": 112,\n\t\"./modules/help.js\": 112,\n\t\"./modules/highlightKeywords\": 119,\n\t\"./modules/highlightKeywords.js\": 119,\n\t\"./modules/loader\": 118,\n\t\"./modules/loader.js\": 118,\n\t\"./modules/markActiveColumns\": 121,\n\t\"./modules/markActiveColumns.js\": 121,\n\t\"./modules/noResults\": 126,\n\t\"./modules/noResults.js\": 126,\n\t\"./modules/paging\": 127,\n\t\"./modules/paging.js\": 127,\n\t\"./modules/popupFilter\": 120,\n\t\"./modules/popupFilter.js\": 120,\n\t\"./modules/rowsCounter\": 122,\n\t\"./modules/rowsCounter.js\": 122,\n\t\"./modules/state\": 113,\n\t\"./modules/state.js\": 113,\n\t\"./modules/statusBar\": 123,\n\t\"./modules/statusBar.js\": 123,\n\t\"./modules/storage\": 115,\n\t\"./modules/storage.js\": 115,\n\t\"./modules/toolbar\": 33,\n\t\"./modules/toolbar.js\": 33,\n\t\"./number\": 68,\n\t\"./number.js\": 68,\n\t\"./root\": 16,\n\t\"./root.js\": 16,\n\t\"./settings\": 7,\n\t\"./settings.js\": 7,\n\t\"./sort\": 107,\n\t\"./sort.js\": 107,\n\t\"./string\": 21,\n\t\"./string.js\": 21,\n\t\"./tablefilter\": 108,\n\t\"./tablefilter.js\": 108,\n\t\"./types\": 3,\n\t\"./types.js\": 3\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 440;\n\n/***/ }),\n\n/***/ 441:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _feature = __webpack_require__(11);\n\nvar _dom = __webpack_require__(10);\n\nvar _const = __webpack_require__(15);\n\nvar _settings = __webpack_require__(7);\n\nvar _root = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar INSTANTIATION_ERROR = 'Failed to instantiate EditTable object.\\n    \\n\"ezEditTable\" dependency not found.';\n\n/**\n * Adapter module for ezEditTable, an external library providing advanced\n * grid features (selection and edition):\n * http://codecanyon.net/item/ezedittable-enhance-html-tables/2425123?ref=koalyptus\n */\n\nvar AdapterEzEditTable = function (_Feature) {\n    _inherits(AdapterEzEditTable, _Feature);\n\n    /**\n     * Creates an instance of AdapterEzEditTable\n     *\n     * @param {TableFilter} tf TableFilter instance\n     * @param {Object} cfg Configuration options for ezEditTable library\n     */\n    function AdapterEzEditTable(tf, cfg) {\n        _classCallCheck(this, AdapterEzEditTable);\n\n        /**\n         * Module description\n         * @type {String}\n         */\n        var _this = _possibleConstructorReturn(this, (AdapterEzEditTable.__proto__ || Object.getPrototypeOf(AdapterEzEditTable)).call(this, tf, cfg.name));\n\n        _this.desc = (0, _settings.defaultsStr)(cfg.description, 'ezEditTable adapter');\n\n        /**\n         * Filename of ezEditTable library\n         * @type {String}\n         */\n        _this.filename = (0, _settings.defaultsStr)(cfg.filename, 'ezEditTable.js');\n\n        /**\n         * Path to ezEditTable library\n         * @type {String}\n         */\n        _this.vendorPath = cfg.vendor_path;\n\n        /**\n         * Load ezEditTable stylesheet\n         * @type {Boolean}\n         */\n        _this.loadStylesheet = Boolean(cfg.load_stylesheet);\n\n        /**\n         * Path to ezEditTable stylesheet\n         * @type {String}\n         */\n        _this.stylesheet = (0, _settings.defaultsStr)(cfg.stylesheet, _this.vendorPath + 'ezEditTable.css');\n\n        /**\n         * Name of ezEditTable stylesheet\n         * @type {String}\n         */\n        _this.stylesheetName = (0, _settings.defaultsStr)(cfg.stylesheet_name, 'ezEditTableCss');\n\n        // Enable the ezEditTable's scroll into view behaviour if grid layout on\n        cfg.scroll_into_view = cfg.scroll_into_view === false ? false : tf.gridLayout;\n\n        /**\n         * ezEditTable instance\n         * @type {EditTable}\n         * @private\n         */\n        _this._ezEditTable = null;\n\n        /**\n         * ezEditTable configuration\n         * @private\n         */\n        _this.cfg = cfg;\n\n        _this.enable();\n        return _this;\n    }\n\n    /**\n     * Conditionally load ezEditTable library and set advanced grid\n     */\n\n\n    _createClass(AdapterEzEditTable, [{\n        key: 'init',\n        value: function init() {\n            var _this2 = this;\n\n            if (this.initialized) {\n                return;\n            }\n            var tf = this.tf;\n            if (_root.root.EditTable) {\n                this._setAdvancedGrid();\n            } else {\n                var path = this.vendorPath + this.filename;\n                tf.import(this.filename, path, function () {\n                    return _this2._setAdvancedGrid();\n                });\n            }\n            if (this.loadStylesheet && !tf.isImported(this.stylesheet, 'link')) {\n                tf.import(this.stylesheetName, this.stylesheet, null, 'link');\n            }\n\n            // TODO: hack to prevent ezEditTable enter key event hijaking.\n            // Needs to be fixed in the vendor's library\n            this.emitter.on(['filter-focus', 'filter-blur'], function () {\n                return _this2._toggleForInputFilter();\n            });\n\n            /**\n             * @inherited\n             */\n            this.initialized = true;\n        }\n\n        /**\n         * Instantiate ezEditTable component for advanced grid features\n         * @private\n         */\n\n    }, {\n        key: '_setAdvancedGrid',\n        value: function _setAdvancedGrid() {\n            var tf = this.tf;\n\n            //start row for EditTable constructor needs to be calculated\n            var startRow = void 0,\n                cfg = this.cfg,\n                thead = (0, _dom.tag)(tf.dom(), 'thead');\n\n            //if thead exists and startRow not specified, startRow is calculated\n            //automatically by EditTable\n            if (thead.length > 0 && !cfg.startRow) {\n                startRow = undefined;\n            }\n            //otherwise startRow config property if any or TableFilter refRow\n            else {\n                    startRow = cfg.startRow || tf.refRow;\n                }\n\n            cfg.base_path = cfg.base_path || tf.basePath + 'ezEditTable/';\n            var editable = cfg.editable;\n            var selectable = cfg.selection;\n\n            if (selectable) {\n                cfg.default_selection = cfg.default_selection || 'row';\n            }\n            //CSS Styles\n            cfg.active_cell_css = cfg.active_cell_css || 'ezETSelectedCell';\n\n            var _lastValidRowIndex = 0;\n            var _lastRowIndex = 0;\n\n            if (selectable) {\n                //Row navigation needs to be calculated according to TableFilter's\n                //validRowsIndex array\n                var onAfterSelection = function onAfterSelection(et, selectedElm, e) {\n                    var slc = et.Selection;\n                    //Next valid filtered row needs to be selected\n                    var doSelect = function doSelect(nextRowIndex) {\n                        if (et.defaultSelection === 'row') {\n                            /* eslint-disable */\n                            slc.SelectRowByIndex(nextRowIndex);\n                            /* eslint-enable */\n                        } else {\n                            /* eslint-disable */\n                            et.ClearSelections();\n                            /* eslint-enable */\n                            var cellIndex = selectedElm.cellIndex,\n                                _row = tf.dom().rows[nextRowIndex];\n                            if (et.defaultSelection === 'both') {\n                                /* eslint-disable */\n                                slc.SelectRowByIndex(nextRowIndex);\n                                /* eslint-enable */\n                            }\n                            if (_row) {\n                                /* eslint-disable */\n                                slc.SelectCell(_row.cells[cellIndex]);\n                                /* eslint-enable */\n                            }\n                        }\n                        //Table is filtered\n                        if (tf.validRowsIndex.length !== tf.getRowsNb()) {\n                            var r = tf.dom().rows[nextRowIndex];\n                            if (r) {\n                                r.scrollIntoView(false);\n                            }\n                            if (cell) {\n                                if (cell.cellIndex === tf.getCellsNb() - 1 && tf.gridLayout) {\n                                    tf.tblCont.scrollLeft = 100000000;\n                                } else if (cell.cellIndex === 0 && tf.gridLayout) {\n                                    tf.tblCont.scrollLeft = 0;\n                                } else {\n                                    cell.scrollIntoView(false);\n                                }\n                            }\n                        }\n                    };\n\n                    //table is not filtered\n                    if (!tf.validRowsIndex) {\n                        return;\n                    }\n                    var validIndexes = tf.validRowsIndex,\n                        validIdxLen = validIndexes.length,\n                        row = et.defaultSelection !== 'row' ? selectedElm.parentNode : selectedElm,\n\n                    //cell for default_selection = 'both' or 'cell'\n                    cell = selectedElm.nodeName === 'TD' ? selectedElm : null,\n\n                    /* eslint-disable */\n                    keyCode = e !== undefined ? et.Event.GetKey(e) : 0,\n\n                    /* eslint-enable */\n                    isRowValid = validIndexes.indexOf(row.rowIndex) !== -1,\n                        nextRowIndex = void 0,\n                        paging = tf.feature('paging'),\n\n                    //pgup/pgdown keys\n                    d = keyCode === 34 || keyCode === 33 ? paging && paging.pageLength || et.nbRowsPerPage : 1;\n\n                    //If next row is not valid, next valid filtered row needs to be\n                    //calculated\n                    if (!isRowValid) {\n                        //Selection direction up/down\n                        if (row.rowIndex > _lastRowIndex) {\n                            //last row\n                            if (row.rowIndex >= validIndexes[validIdxLen - 1]) {\n                                nextRowIndex = validIndexes[validIdxLen - 1];\n                            } else {\n                                var calcRowIndex = _lastValidRowIndex + d;\n                                if (calcRowIndex > validIdxLen - 1) {\n                                    nextRowIndex = validIndexes[validIdxLen - 1];\n                                } else {\n                                    nextRowIndex = validIndexes[calcRowIndex];\n                                }\n                            }\n                        } else {\n                            //first row\n                            if (row.rowIndex <= validIndexes[0]) {\n                                nextRowIndex = validIndexes[0];\n                            } else {\n                                var v = validIndexes[_lastValidRowIndex - d];\n                                nextRowIndex = v ? v : validIndexes[0];\n                            }\n                        }\n                        _lastRowIndex = row.rowIndex;\n                        doSelect(nextRowIndex);\n                    } else {\n                        //If filtered row is valid, special calculation for\n                        //pgup/pgdown keys\n                        if (keyCode !== 34 && keyCode !== 33) {\n                            _lastValidRowIndex = validIndexes.indexOf(row.rowIndex);\n                            _lastRowIndex = row.rowIndex;\n                        } else {\n                            if (keyCode === 34) {\n                                //pgdown\n                                //last row\n                                if (_lastValidRowIndex + d <= validIdxLen - 1) {\n                                    nextRowIndex = validIndexes[_lastValidRowIndex + d];\n                                } else {\n                                    nextRowIndex = [validIdxLen - 1];\n                                }\n                            } else {\n                                //pgup\n                                //first row\n                                if (_lastValidRowIndex - d <= validIndexes[0]) {\n                                    nextRowIndex = validIndexes[0];\n                                } else {\n                                    nextRowIndex = validIndexes[_lastValidRowIndex - d];\n                                }\n                            }\n                            _lastRowIndex = nextRowIndex;\n                            _lastValidRowIndex = validIndexes.indexOf(nextRowIndex);\n                            doSelect(nextRowIndex);\n                        }\n                    }\n                };\n\n                //Page navigation has to be enforced whenever selected row is out of\n                //the current page range\n                var onBeforeSelection = function onBeforeSelection(et, selectedElm) {\n                    var row = et.defaultSelection !== 'row' ? selectedElm.parentNode : selectedElm;\n                    if (tf.paging) {\n                        if (tf.feature('paging').nbPages > 1) {\n                            var paging = tf.feature('paging');\n                            //page length is re-assigned in case it has changed\n                            et.nbRowsPerPage = paging.pageLength;\n                            var validIndexes = tf.validRowsIndex,\n                                validIdxLen = validIndexes.length,\n                                pagingEndRow = parseInt(paging.startPagingRow, 10) + parseInt(paging.pageLength, 10);\n                            var rowIndex = row.rowIndex;\n\n                            if (rowIndex === validIndexes[validIdxLen - 1] && paging.currentPageNb !== paging.nbPages) {\n                                paging.setPage('last');\n                            } else if (rowIndex === validIndexes[0] && paging.currentPageNb !== 1) {\n                                paging.setPage('first');\n                            } else if (rowIndex > validIndexes[pagingEndRow - 1] && rowIndex < validIndexes[validIdxLen - 1]) {\n                                paging.setPage('next');\n                            } else if (rowIndex < validIndexes[paging.startPagingRow] && rowIndex > validIndexes[0]) {\n                                paging.setPage('previous');\n                            }\n                        }\n                    }\n                };\n\n                //Selected row needs to be visible when paging is activated\n                if (tf.paging) {\n                    tf.feature('paging').onAfterChangePage = function (paging) {\n                        var advGrid = paging.tf.extension('advancedGrid');\n                        var et = advGrid._ezEditTable;\n                        var slc = et.Selection;\n                        /* eslint-disable */\n                        var row = slc.GetActiveRow();\n                        /* eslint-enable */\n                        if (row) {\n                            row.scrollIntoView(false);\n                        }\n                        /* eslint-disable */\n                        var cell = slc.GetActiveCell();\n                        /* eslint-enable */\n                        if (cell) {\n                            cell.scrollIntoView(false);\n                        }\n                    };\n                }\n\n                //Rows navigation when rows are filtered is performed with the\n                //EditTable row selection callback events\n                if (cfg.default_selection === 'row') {\n                    var fnB = cfg.on_before_selected_row;\n                    cfg.on_before_selected_row = function () {\n                        var args = arguments;\n                        onBeforeSelection(args[0], args[1], args[2]);\n                        if (fnB) {\n                            fnB.call(null, args[0], args[1], args[2]);\n                        }\n                    };\n                    var fnA = cfg.on_after_selected_row;\n                    cfg.on_after_selected_row = function () {\n                        var args = arguments;\n                        onAfterSelection(args[0], args[1], args[2]);\n                        if (fnA) {\n                            fnA.call(null, args[0], args[1], args[2]);\n                        }\n                    };\n                } else {\n                    var fnD = cfg.on_before_selected_cell;\n                    cfg.on_before_selected_cell = function () {\n                        var args = arguments;\n                        onBeforeSelection(args[0], args[1], args[2]);\n                        if (fnD) {\n                            fnD.call(null, args[0], args[1], args[2]);\n                        }\n                    };\n                    var fnC = cfg.on_after_selected_cell;\n                    cfg.on_after_selected_cell = function () {\n                        var args = arguments;\n                        onAfterSelection(args[0], args[1], args[2]);\n                        if (fnC) {\n                            fnC.call(null, args[0], args[1], args[2]);\n                        }\n                    };\n                }\n            }\n            if (editable) {\n                //Added or removed rows, TF rows number needs to be re-calculated\n                var fnE = cfg.on_added_dom_row;\n                cfg.on_added_dom_row = function () {\n                    var args = arguments;\n                    tf.nbFilterableRows++;\n                    if (!tf.paging) {\n                        tf.emitter.emit('rows-changed', tf, this);\n                    } else {\n                        tf.nbFilterableRows++;\n                        tf.paging = false;\n                        tf.feature('paging').destroy();\n                        tf.feature('paging').reset();\n                    }\n                    if (tf.alternateRows) {\n                        tf.feature('alternateRows').init();\n                    }\n                    if (fnE) {\n                        fnE.call(null, args[0], args[1], args[2]);\n                    }\n                };\n                if (cfg.actions && cfg.actions['delete']) {\n                    var fnF = cfg.actions['delete'].on_after_submit;\n                    cfg.actions['delete'].on_after_submit = function () {\n                        var args = arguments;\n                        tf.nbFilterableRows--;\n                        if (!tf.paging) {\n                            tf.emitter.emit('rows-changed', tf, this);\n                        } else {\n                            tf.nbFilterableRows--;\n                            tf.paging = false;\n                            tf.feature('paging').destroy();\n                            tf.feature('paging').reset(false);\n                        }\n                        if (tf.alternateRows) {\n                            tf.feature('alternateRows').init();\n                        }\n                        if (fnF) {\n                            fnF.call(null, args[0], args[1]);\n                        }\n                    };\n                }\n            }\n\n            try {\n                /* eslint-disable */\n                this._ezEditTable = new EditTable(tf.id, cfg, startRow);\n                this._ezEditTable.Init();\n                /* eslint-enable */\n            } catch (e) {\n                throw new Error(INSTANTIATION_ERROR);\n            }\n\n            this.initialized = true;\n        }\n\n        /**\n         * Reset advanced grid when previously removed\n         */\n\n    }, {\n        key: 'reset',\n        value: function reset() {\n            var ezEditTable = this._ezEditTable;\n            if (ezEditTable) {\n                if (this.cfg.selection) {\n                    /* eslint-disable */\n                    ezEditTable.Selection.Set();\n                    /* eslint-enable */\n                }\n                if (this.cfg.editable) {\n                    /* eslint-disable */\n                    ezEditTable.Editable.Set();\n                    /* eslint-enable */\n                }\n            }\n        }\n\n        /**\n         * Toggle behaviour\n         */\n\n    }, {\n        key: 'toggle',\n        value: function toggle() {\n            var ezEditTable = this._ezEditTable;\n            if (ezEditTable.editable) {\n                /* eslint-disable */\n                ezEditTable.Editable.Remove();\n                /* eslint-enable */\n            } else {\n                /* eslint-disable */\n                ezEditTable.Editable.Set();\n                /* eslint-enable */\n            }\n            if (ezEditTable.selection) {\n                /* eslint-disable */\n                ezEditTable.Selection.Remove();\n                /* eslint-enable */\n            } else {\n                /* eslint-disable */\n                ezEditTable.Selection.Set();\n                /* eslint-enable */\n            }\n        }\n    }, {\n        key: '_toggleForInputFilter',\n        value: function _toggleForInputFilter() {\n            var tf = this.tf;\n            if (!tf.getActiveFilterId()) {\n                return;\n            }\n            var colIndex = tf.getColumnIndexFromFilterId(tf.getActiveFilterId());\n            var filterType = tf.getFilterType(colIndex);\n            if (filterType === _const.INPUT) {\n                this.toggle();\n            }\n        }\n\n        /**\n         * Remove advanced grid\n         */\n\n    }, {\n        key: 'destroy',\n        value: function destroy() {\n            var _this3 = this;\n\n            if (!this.initialized) {\n                return;\n            }\n            var ezEditTable = this._ezEditTable;\n            if (ezEditTable) {\n                if (this.cfg.selection) {\n                    /* eslint-disable */\n                    ezEditTable.Selection.ClearSelections();\n                    ezEditTable.Selection.Remove();\n                    /* eslint-enable */\n                }\n                if (this.cfg.editable) {\n                    /* eslint-disable */\n                    ezEditTable.Editable.Remove();\n                    /* eslint-enable */\n                }\n            }\n\n            this.emitter.off(['filter-focus', 'filter-blur'], function () {\n                return _this3._toggleForInputFilter();\n            });\n            this.initialized = false;\n        }\n    }]);\n\n    return AdapterEzEditTable;\n}(_feature.Feature);\n\nexports.default = AdapterEzEditTable;\n\n/***/ }),\n\n/***/ 442:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _feature = __webpack_require__(11);\n\nvar _types = __webpack_require__(3);\n\nvar _dom = __webpack_require__(10);\n\nvar _event = __webpack_require__(19);\n\nvar _number = __webpack_require__(68);\n\nvar _const = __webpack_require__(15);\n\nvar _settings = __webpack_require__(7);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * SortableTable Adapter module\n */\nvar AdapterSortableTable = function (_Feature) {\n    _inherits(AdapterSortableTable, _Feature);\n\n    /**\n     * Creates an instance of AdapterSortableTable\n     * @param {TableFilter} tf TableFilter instance\n     * @param {Object} opts Configuration object\n     */\n    function AdapterSortableTable(tf, opts) {\n        _classCallCheck(this, AdapterSortableTable);\n\n        /**\n         * Module name\n         * @type {String}\n         */\n        var _this = _possibleConstructorReturn(this, (AdapterSortableTable.__proto__ || Object.getPrototypeOf(AdapterSortableTable)).call(this, tf, opts.name));\n\n        _this.name = opts.name;\n\n        /**\n         * Module description\n         * @type {String}\n         */\n        _this.desc = (0, _settings.defaultsStr)(opts.description, 'Sortable table');\n\n        /**\n         * Indicate whether table previously sorted\n         * @type {Boolean}\n         * @private\n         */\n        _this.sorted = false;\n\n        /**\n         * List of sort type per column basis\n         * @type {Array}\n         */\n        _this.sortTypes = (0, _settings.defaultsArr)(opts.types, tf.colTypes);\n\n        /**\n         * Column to be sorted at initialization, ie:\n         * sort_col_at_start: [1, true]\n         * @type {Array}\n         */\n        _this.sortColAtStart = (0, _settings.defaultsArr)(opts.sort_col_at_start, null);\n\n        /**\n         * Enable asynchronous sort, if triggers are external\n         * @type {Boolean}\n         */\n        _this.asyncSort = Boolean(opts.async_sort);\n\n        /**\n         * List of element IDs triggering sort on a per column basis\n         * @type {Array}\n         */\n        _this.triggerIds = (0, _settings.defaultsArr)(opts.trigger_ids, []);\n\n        // edit .sort-arrow.descending / .sort-arrow.ascending in\n        // tablefilter.css to reflect any path change\n        /**\n         * Path to images\n         * @type {String}\n         */\n        _this.imgPath = (0, _settings.defaultsStr)(opts.images_path, tf.themesPath);\n\n        /**\n         * Blank image file name\n         * @type {String}\n         */\n        _this.imgBlank = (0, _settings.defaultsStr)(opts.image_blank, 'blank.png');\n\n        /**\n         * Css class for sort indicator image\n         * @type {String}\n         */\n        _this.imgClassName = (0, _settings.defaultsStr)(opts.image_class_name, 'sort-arrow');\n\n        /**\n         * Css class for ascending sort indicator image\n         * @type {String}\n         */\n        _this.imgAscClassName = (0, _settings.defaultsStr)(opts.image_asc_class_name, 'ascending');\n\n        /**\n         * Css class for descending sort indicator image\n         * @type {String}\n         */\n        _this.imgDescClassName = (0, _settings.defaultsStr)(opts.image_desc_class_name, 'descending');\n\n        /**\n         * Cell attribute key storing custom value used for sorting\n         * @type {String}\n         */\n        _this.customKey = (0, _settings.defaultsStr)(opts.custom_key, 'data-tf-sortKey');\n\n        /**\n         * Callback fired when sort extension is instanciated\n         * @type {Function}\n         */\n        _this.onSortLoaded = (0, _settings.defaultsFn)(opts.on_sort_loaded, _types.EMPTY_FN);\n\n        /**\n         * Callback fired before a table column is sorted\n         * @type {Function}\n         */\n        _this.onBeforeSort = (0, _settings.defaultsFn)(opts.on_before_sort, _types.EMPTY_FN);\n\n        /**\n         * Callback fired after a table column is sorted\n         * @type {Function}\n         */\n        _this.onAfterSort = (0, _settings.defaultsFn)(opts.on_after_sort, _types.EMPTY_FN);\n\n        /**\n         * SortableTable instance\n         * @private\n         */\n        _this.stt = null;\n\n        _this.enable();\n        return _this;\n    }\n\n    /**\n     * Initializes AdapterSortableTable instance\n     */\n\n\n    _createClass(AdapterSortableTable, [{\n        key: 'init',\n        value: function init() {\n            var _this2 = this;\n\n            if (this.initialized) {\n                return;\n            }\n            var tf = this.tf;\n            var adpt = this;\n\n            // SortableTable class sanity check (sortabletable.js)\n            if ((0, _types.isUndef)(SortableTable)) {\n                throw new Error('SortableTable class not found.');\n            }\n\n            // Add any date format if needed\n            this.emitter.emit('add-date-type-formats', this.tf, this.sortTypes);\n\n            this.overrideSortableTable();\n            this.setSortTypes();\n\n            this.onSortLoaded(tf, this);\n\n            /*** SortableTable callbacks ***/\n            this.stt.onbeforesort = function () {\n                adpt.onBeforeSort(tf, adpt.stt.sortColumn);\n\n                /*** sort behaviour for paging ***/\n                if (tf.paging) {\n                    tf.feature('paging').disable();\n                }\n            };\n\n            this.stt.onsort = function () {\n                adpt.sorted = true;\n\n                //sort behaviour for paging\n                if (tf.paging) {\n                    var paginator = tf.feature('paging');\n                    // recalculate valid rows index as sorting may have change it\n                    tf.getValidRows(true);\n                    paginator.enable();\n                    paginator.setPage(paginator.getPage());\n                }\n\n                adpt.onAfterSort(tf, adpt.stt.sortColumn, adpt.stt.descending);\n                adpt.emitter.emit('column-sorted', tf, adpt.stt.sortColumn, adpt.stt.descending);\n            };\n\n            // Column sort at start\n            var sortColAtStart = adpt.sortColAtStart;\n            if (sortColAtStart) {\n                this.stt.sort(sortColAtStart[0], sortColAtStart[1]);\n            }\n\n            this.emitter.on(['sort'], function (tf, colIdx, desc) {\n                return _this2.sortByColumnIndex(colIdx, desc);\n            });\n\n            /** @inherited */\n            this.initialized = true;\n\n            this.emitter.emit('sort-initialized', tf, this);\n        }\n\n        /**\n         * Sort specified column\n         * @param {Number} colIdx Column index\n         * @param {Boolean} desc Optional: descending manner\n         */\n\n    }, {\n        key: 'sortByColumnIndex',\n        value: function sortByColumnIndex(colIdx, desc) {\n            this.stt.sort(colIdx, desc);\n        }\n\n        /**\n         * Set SortableTable overrides for TableFilter integration\n         */\n\n    }, {\n        key: 'overrideSortableTable',\n        value: function overrideSortableTable() {\n            var adpt = this,\n                tf = this.tf;\n\n            /**\n             * Overrides headerOnclick method in order to handle th event\n             * @param  {Object} e [description]\n             */\n            SortableTable.prototype.headerOnclick = function (evt) {\n                if (!adpt.initialized) {\n                    return;\n                }\n\n                // find Header element\n                var el = evt.target || evt.srcElement;\n\n                while (el.tagName !== _const.CELL_TAG && el.tagName !== _const.HEADER_TAG) {\n                    el = el.parentNode;\n                }\n\n                this.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\n            };\n\n            /**\n             * Overrides getCellIndex IE returns wrong cellIndex when columns are\n             * hidden\n             * @param  {Object} oTd TD element\n             * @return {Number}     Cell index\n             */\n            SortableTable.getCellIndex = function (oTd) {\n                var cells = oTd.parentNode.cells,\n                    l = cells.length,\n                    i = void 0;\n                for (i = 0; cells[i] !== oTd && i < l; i++) {}\n                return i;\n            };\n\n            /**\n             * Overrides initHeader in order to handle filters row position\n             * @param  {Array} oSortTypes\n             */\n            SortableTable.prototype.initHeader = function (oSortTypes) {\n                var stt = this;\n                if (!stt.tHead) {\n                    if (tf.gridLayout) {\n                        stt.tHead = tf.feature('gridLayout').headTbl.tHead;\n                    } else {\n                        return;\n                    }\n                }\n\n                stt.headersRow = tf.headersRow;\n                var cells = stt.tHead.rows[stt.headersRow].cells;\n                stt.sortTypes = oSortTypes || [];\n                var l = cells.length;\n                var img = void 0,\n                    c = void 0;\n\n                for (var i = 0; i < l; i++) {\n                    c = cells[i];\n                    if (stt.sortTypes[i] !== null && stt.sortTypes[i] !== 'None') {\n                        c.style.cursor = 'pointer';\n                        img = (0, _dom.createElm)('img', ['src', adpt.imgPath + adpt.imgBlank]);\n                        c.appendChild(img);\n                        if (stt.sortTypes[i] !== null) {\n                            c.setAttribute('_sortType', stt.sortTypes[i]);\n                        }\n                        (0, _event.addEvt)(c, 'click', stt._headerOnclick);\n                    } else {\n                        c.setAttribute('_sortType', oSortTypes[i]);\n                        c._sortType = 'None';\n                    }\n                }\n                stt.updateHeaderArrows();\n            };\n\n            /**\n             * Overrides updateHeaderArrows in order to handle arrows indicators\n             */\n            SortableTable.prototype.updateHeaderArrows = function () {\n                var stt = this;\n                var cells = void 0,\n                    l = void 0,\n                    img = void 0;\n\n                // external headers\n                if (adpt.asyncSort && adpt.triggerIds.length > 0) {\n                    var triggers = adpt.triggerIds;\n                    cells = [];\n                    l = triggers.length;\n                    for (var j = 0; j < l; j++) {\n                        cells.push((0, _dom.elm)(triggers[j]));\n                    }\n                } else {\n                    if (!this.tHead) {\n                        return;\n                    }\n                    cells = stt.tHead.rows[stt.headersRow].cells;\n                    l = cells.length;\n                }\n                for (var i = 0; i < l; i++) {\n                    var cell = cells[i];\n                    if (!cell) {\n                        continue;\n                    }\n                    var cellAttr = cell.getAttribute('_sortType');\n                    if (cellAttr !== null && cellAttr !== 'None') {\n                        img = cell.lastChild || cell;\n                        if (img.nodeName.toLowerCase() !== 'img') {\n                            img = (0, _dom.createElm)('img', ['src', adpt.imgPath + adpt.imgBlank]);\n                            cell.appendChild(img);\n                        }\n                        if (i === stt.sortColumn) {\n                            img.className = adpt.imgClassName + ' ' + (this.descending ? adpt.imgDescClassName : adpt.imgAscClassName);\n                        } else {\n                            img.className = adpt.imgClassName;\n                        }\n                    }\n                }\n            };\n\n            /**\n             * Overrides getRowValue for custom key value feature\n             * @param  {Object} oRow    Row element\n             * @param  {String} sType\n             * @param  {Number} nColumn\n             * @return {String}\n             */\n            SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\n                var stt = this;\n                // if we have defined a custom getRowValue use that\n                var sortTypeInfo = stt._sortTypeInfo[sType];\n                if (sortTypeInfo && sortTypeInfo.getRowValue) {\n                    return sortTypeInfo.getRowValue(oRow, nColumn);\n                }\n                var c = oRow.cells[nColumn];\n                var s = SortableTable.getInnerText(c);\n                return stt.getValueFromString(s, sType);\n            };\n\n            /**\n             * Overrides getInnerText in order to avoid Firefox unexpected sorting\n             * behaviour with untrimmed text elements\n             * @param  {Object} oNode DOM element\n             * @return {String}       DOM element inner text\n             */\n            SortableTable.getInnerText = function (oNode) {\n                if (!oNode) {\n                    return;\n                }\n                if (oNode.getAttribute(adpt.customKey)) {\n                    return oNode.getAttribute(adpt.customKey);\n                } else {\n                    return (0, _dom.getText)(oNode);\n                }\n            };\n        }\n\n        /**\n         * Adds a sort type\n         */\n\n    }, {\n        key: 'addSortType',\n        value: function addSortType() {\n            for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n                args[_key] = arguments[_key];\n            }\n\n            // Extract the arguments\n            var id = args[0],\n                caster = args[1],\n                sorter = args[2];\n\n            SortableTable.prototype.addSortType(id, caster, sorter);\n        }\n\n        /**\n         * Sets the sort types on a column basis\n         * @private\n         */\n\n    }, {\n        key: 'setSortTypes',\n        value: function setSortTypes() {\n            var _this3 = this;\n\n            var tf = this.tf,\n                sortTypes = this.sortTypes,\n                _sortTypes = [];\n\n            tf.eachCol(function (i) {\n                var colType = void 0;\n                if (sortTypes[i]) {\n                    colType = sortTypes[i];\n                    if ((0, _types.isObj)(colType)) {\n                        if (colType.type === _const.DATE) {\n                            colType = _this3._addDateType(i, sortTypes);\n                        } else if (colType.type === _const.FORMATTED_NUMBER) {\n                            var decimal = colType.decimal || tf.decimalSeparator;\n                            colType = _this3._addNumberType(i, decimal);\n                        }\n                    } else {\n                        colType = colType.toLowerCase();\n                        if (colType === _const.DATE) {\n                            colType = _this3._addDateType(i, sortTypes);\n                        } else if (colType === _const.FORMATTED_NUMBER || colType === _const.NUMBER) {\n                            colType = _this3._addNumberType(i, tf.decimalSeparator);\n                        } else if (colType === _const.NONE) {\n                            // TODO: normalise 'none' vs 'None'\n                            colType = 'None';\n                        }\n                    }\n                } else {\n                    colType = _const.STRING;\n                }\n                _sortTypes.push(colType);\n            });\n\n            //Public TF method to add sort type\n\n            //Custom sort types\n            this.addSortType('caseinsensitivestring', SortableTable.toUpperCase);\n            this.addSortType(_const.STRING);\n            this.addSortType(_const.IP_ADDRESS, ipAddress, sortIP);\n\n            this.stt = new SortableTable(tf.dom(), _sortTypes);\n\n            /*** external table headers adapter ***/\n            if (this.asyncSort && this.triggerIds.length > 0) {\n                (function () {\n                    var triggers = _this3.triggerIds;\n                    for (var j = 0; j < triggers.length; j++) {\n                        if (triggers[j] === null) {\n                            continue;\n                        }\n                        var trigger = (0, _dom.elm)(triggers[j]);\n                        if (trigger) {\n                            trigger.style.cursor = 'pointer';\n\n                            (0, _event.addEvt)(trigger, 'click', function (evt) {\n                                var elm = evt.target;\n                                if (!_this3.tf.sort) {\n                                    return;\n                                }\n                                _this3.stt.asyncSort(triggers.indexOf(elm.id));\n                            });\n                            trigger.setAttribute('_sortType', _sortTypes[j]);\n                        }\n                    }\n                })();\n            }\n        }\n    }, {\n        key: '_addDateType',\n        value: function _addDateType(colIndex, types) {\n            var tf = this.tf;\n            var dateType = tf.feature('dateType');\n            var locale = dateType.getOptions(colIndex, types).locale || tf.locale;\n            var colType = _const.DATE + '-' + locale;\n\n            this.addSortType(colType, function (value) {\n                var parsedDate = dateType.parse(value, locale);\n                // Invalid date defaults to Wed Feb 04 -768 11:00:00\n                return isNaN(+parsedDate) ? new Date(-86400000000000) : parsedDate;\n            });\n            return colType;\n        }\n    }, {\n        key: '_addNumberType',\n        value: function _addNumberType(colIndex, decimal) {\n            var colType = '' + _const.FORMATTED_NUMBER + (decimal === '.' ? '' : '-custom');\n\n            this.addSortType(colType, function (value) {\n                return (0, _number.parse)(value, decimal);\n            });\n            return colType;\n        }\n\n        /**\n         * Remove extension\n         */\n\n    }, {\n        key: 'destroy',\n        value: function destroy() {\n            var _this4 = this;\n\n            if (!this.initialized) {\n                return;\n            }\n            var tf = this.tf;\n            this.emitter.off(['sort'], function (tf, colIdx, desc) {\n                return _this4.sortByColumnIndex(colIdx, desc);\n            });\n            this.sorted = false;\n            this.stt.destroy();\n\n            var ids = tf.getFiltersId();\n            for (var idx = 0; idx < ids.length; idx++) {\n                var header = tf.getHeaderElement(idx);\n                var img = (0, _dom.tag)(header, 'img');\n\n                if (img.length === 1) {\n                    header.removeChild(img[0]);\n                }\n            }\n            this.initialized = false;\n        }\n    }]);\n\n    return AdapterSortableTable;\n}(_feature.Feature);\n\n//Converters\n\n\nexports.default = AdapterSortableTable;\nfunction ipAddress(value) {\n    var vals = value.split('.');\n    for (var x in vals) {\n        var val = vals[x];\n        while (3 > val.length) {\n            val = '0' + val;\n        }\n        vals[x] = val;\n    }\n    return vals.join('.');\n}\n\nfunction sortIP(a, b) {\n    var aa = ipAddress(a.value.toLowerCase());\n    var bb = ipAddress(b.value.toLowerCase());\n    if (aa === bb) {\n        return 0;\n    } else if (aa < bb) {\n        return -1;\n    } else {\n        return 1;\n    }\n}\n\n/***/ }),\n\n/***/ 443:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _adapterEzEditTable = __webpack_require__(441);\n\nvar _adapterEzEditTable2 = _interopRequireDefault(_adapterEzEditTable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _adapterEzEditTable2.default;\n\n/***/ }),\n\n/***/ 444:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _feature = __webpack_require__(11);\n\nvar _dom = __webpack_require__(10);\n\nvar _types = __webpack_require__(3);\n\nvar _sort = __webpack_require__(107);\n\nvar _const = __webpack_require__(15);\n\nvar _formatNumber = __webpack_require__(448);\n\nvar _formatNumber2 = _interopRequireDefault(_formatNumber);\n\nvar _settings = __webpack_require__(7);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar EVENTS = ['after-filtering', 'after-page-change', 'after-page-length-change'];\n\nvar SUM = 'sum';\nvar MEAN = 'mean';\nvar MIN = 'min';\nvar MAX = 'max';\nvar MEDIAN = 'median';\nvar Q1 = 'q1';\nvar Q3 = 'q3';\n\n/**\n * Column calculations extension\n */\n\nvar ColOps = function (_Feature) {\n    _inherits(ColOps, _Feature);\n\n    /**\n     * Creates an instance of ColOps\n     *\n     * @param {TableFilter} tf TableFilter instance\n     * @param {Object} opts Configuration object\n     */\n    function ColOps(tf, opts) {\n        _classCallCheck(this, ColOps);\n\n        /**\n         * Callback fired before columns operations start\n         * @type {Function}\n         */\n        var _this = _possibleConstructorReturn(this, (ColOps.__proto__ || Object.getPrototypeOf(ColOps)).call(this, tf, opts.name));\n\n        _this.onBeforeOperation = (0, _settings.defaultsFn)(opts.on_before_operation, _types.EMPTY_FN);\n\n        /**\n         * Callback fired after columns operations are completed\n         * @type {Function}\n         */\n        _this.onAfterOperation = (0, _settings.defaultsFn)(opts.on_after_operation, _types.EMPTY_FN);\n\n        /**\n         * Configuration options\n         * @type {Object}\n         */\n        _this.opts = opts;\n\n        /**\n         * List of DOM element IDs containing column's calculation result\n         * @type {Array}\n         */\n        _this.labelIds = (0, _settings.defaultsArr)(opts.id, []);\n\n        /**\n         * List of columns' indexes for calculations\n         * @type {Array}\n         */\n        _this.colIndexes = (0, _settings.defaultsArr)(opts.col, []);\n\n        /**\n         * List of operations - possible values: 'sum', 'mean', 'min', 'max',\n         * 'median', 'q1', 'q3'\n         * @type {Array}\n         */\n        _this.operations = (0, _settings.defaultsArr)(opts.operation, []);\n\n        /**\n         * List of write methods used to write the result - possible values:\n         * 'innerHTML', 'setValue', 'createTextNode'\n         * @type {Array}\n         */\n        _this.outputTypes = (0, _settings.defaultsArr)(opts.write_method, []);\n\n        /**\n         * List of format objects used for formatting the result -\n         * refer to https://github.com/componitable/format-number to check\n         * configuration options\n         * @type {Array}\n         */\n        _this.formatResults = (0, _settings.defaultsArr)(opts.format_result, []);\n\n        /**\n         * List of row indexes displaying the results\n         * @type {Array}\n         */\n        _this.totRowIndexes = (0, _settings.defaultsArr)(opts.tot_row_index, []);\n\n        /**\n         * List of row indexes excluded from calculations\n         * @type {Array}\n         */\n        _this.excludeRows = (0, _settings.defaultsArr)(opts.exclude_row, []);\n\n        /**\n         * List of decimal precision for calculation results\n         * @type {Array}\n         */\n        _this.decimalPrecisions = (0, _settings.defaultsArr)(opts.decimal_precision, 2);\n\n        _this.enable();\n        return _this;\n    }\n\n    /**\n     * Initializes ColOps instance\n     */\n\n\n    _createClass(ColOps, [{\n        key: 'init',\n        value: function init() {\n            var _this2 = this;\n\n            if (this.initialized) {\n                return;\n            }\n            // subscribe to events\n            this.emitter.on(EVENTS, function () {\n                return _this2.calcAll();\n            });\n\n            this.calcAll();\n\n            /** @inherited */\n            this.initialized = true;\n        }\n\n        /**\n         * Calculates columns' values\n         * Configuration options are stored in 'opts' property\n         * - 'id' contains ids of elements showing result (array)\n         * - 'col' contains the columns' indexes (array)\n         * - 'operation' contains operation type (array, values: 'sum', 'mean',\n         *   'min', 'max', 'median', 'q1', 'q3')\n         * - 'write_method' array defines which method to use for displaying the\n         *    result (innerHTML, setValue, createTextNode) - default: 'innerHTML'\n         * - 'tot_row_index' defines in which row results are displayed\n         *   (integers array)\n         *\n         * - changes made by Nuovella:\n         * (1) optimized the routine (now it will only process each column once),\n         * (2) added calculations for the median, lower and upper quartile.\n         */\n\n    }, {\n        key: 'calcAll',\n        value: function calcAll() {\n            var tf = this.tf;\n            if (!tf.isInitialized()) {\n                return;\n            }\n\n            this.onBeforeOperation(tf, this);\n            this.emitter.emit('before-column-operation', tf, this);\n\n            var colIndexes = this.colIndexes,\n                colOperations = this.operations,\n                outputTypes = this.outputTypes,\n                totRowIndexes = this.totRowIndexes,\n                excludeRows = this.excludeRows,\n                formatResults = this.formatResults,\n                decimalPrecisions = this.decimalPrecisions;\n\n            //nuovella: determine unique list of columns to operate on\n\n            var uIndexes = [];\n            colIndexes.forEach(function (val) {\n                if (uIndexes.indexOf(val) === -1) {\n                    uIndexes.push(val);\n                }\n            });\n\n            var nbCols = uIndexes.length,\n                rows = tf.dom().rows,\n                colValues = [];\n\n            for (var u = 0; u < nbCols; u++) {\n                //this retrieves col values\n                //use uIndexes because we only want to pass through this loop\n                //once for each column get the values in this unique column\n                colValues.push(tf.getVisibleColumnData(uIndexes[u], false, excludeRows));\n\n                var curValues = colValues[u];\n\n                //next: calculate all operations for this column\n                var result = 0,\n                    operations = [],\n                    precisions = [],\n                    labels = [],\n                    writeType = void 0,\n                    formatResult = [],\n                    idx = 0;\n\n                for (var k = 0; k < colIndexes.length; k++) {\n                    if (colIndexes[k] !== uIndexes[u]) {\n                        continue;\n                    }\n                    operations[idx] = (colOperations[k] || 'sum').toLowerCase();\n                    precisions[idx] = decimalPrecisions[k];\n                    labels[idx] = this.labelIds[k];\n                    writeType = (0, _types.isArray)(outputTypes) ? outputTypes[k] : null;\n                    formatResult[idx] = this.configureFormat(uIndexes[u], formatResults[k]);\n                    idx++;\n                }\n\n                for (var i = 0; i < idx; i++) {\n                    // emit values before column calculation\n                    this.emitter.emit('before-column-calc', tf, this, uIndexes[u], curValues, operations[i], precisions[i]);\n\n                    result = Number(this.calc(curValues, operations[i], null));\n\n                    // emit column calculation result\n                    this.emitter.emit('column-calc', tf, this, uIndexes[u], result, operations[i], precisions[i]);\n\n                    // write result in expected DOM element\n                    this.writeResult(result, labels[i], writeType, precisions[i], formatResult[i]);\n                } //for i\n\n                // row(s) with result are always visible\n                var totRow = totRowIndexes && totRowIndexes[u] ? rows[totRowIndexes[u]] : null;\n                if (totRow) {\n                    totRow.style.display = '';\n                }\n            } //for u\n\n            this.onAfterOperation(tf, this);\n            this.emitter.emit('after-column-operation', tf, this);\n        }\n\n        /**\n         * Make desired calculation on specified column.\n         * @param {Number} colIndex Column index\n         * @param {String} [operation=SUM] Operation type\n         * @param {Number} precision Decimal precision\n         * @returns {Number}\n         */\n\n    }, {\n        key: 'columnCalc',\n        value: function columnCalc(colIndex) {\n            var operation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SUM;\n            var precision = arguments[2];\n\n            var excludeRows = this.excludeRows || [];\n            var colValues = tf.getVisibleColumnData(colIndex, false, excludeRows);\n\n            return Number(this.calc(colValues, operation, precision));\n        }\n\n        /**\n         * Make calculation on passed values.\n         * @param {Array} values List of values\n         * @param {String} [operation=SUM] Optional operation type\n         * @param {Number} precision Optional result precision\n         * @returns {Number}\n         * @private\n         */\n\n    }, {\n        key: 'calc',\n        value: function calc(colValues) {\n            var operation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SUM;\n            var precision = arguments[2];\n\n            var result = 0;\n\n            if (operation === Q1 || operation === Q3 || operation === MEDIAN) {\n                colValues = this.sortColumnValues(colValues, _sort.numSortAsc);\n            }\n\n            switch (operation) {\n                case MEAN:\n                    result = this.calcMean(colValues);\n                    break;\n                case SUM:\n                    result = this.calcSum(colValues);\n                    break;\n                case MIN:\n                    result = this.calcMin(colValues);\n                    break;\n                case MAX:\n                    result = this.calcMax(colValues);\n                    break;\n                case MEDIAN:\n                    result = this.calcMedian(colValues);\n                    break;\n                case Q1:\n                    result = this.calcQ1(colValues);\n                    break;\n                case Q3:\n                    result = this.calcQ3(colValues);\n                    break;\n            }\n\n            return (0, _types.isEmpty)(precision) ? result : result.toFixed(precision);\n        }\n\n        /**\n         * Calculate the sum of passed values.\n         * @param {Array} [values=[]] List of values\n         * @returns {Number}\n         */\n\n    }, {\n        key: 'calcSum',\n        value: function calcSum() {\n            var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n            if ((0, _types.isEmpty)(values)) {\n                return 0;\n            }\n            var result = values.reduce(function (x, y) {\n                return Number(x) + Number(y);\n            });\n            return result;\n        }\n\n        /**\n         * Calculate the mean of passed values.\n         * @param {Array} [values=[]] List of values\n         * @returns {Number}\n         */\n\n    }, {\n        key: 'calcMean',\n        value: function calcMean() {\n            var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n            var result = this.calcSum(values) / values.length;\n            return Number(result);\n        }\n\n        /**\n         * Calculate the max value of passed values.\n         * @param {Array} [values=[]] List of values\n         * @returns {Number}\n         */\n\n    }, {\n        key: 'calcMax',\n        value: function calcMax() {\n            var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n            return Math.max.apply(null, values);\n        }\n\n        /**\n         * Calculate the min value of passed values.\n         * @param {Array} [values=[]] List of values\n         * @returns {Number}\n         */\n\n    }, {\n        key: 'calcMin',\n        value: function calcMin() {\n            var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n            return Math.min.apply(null, values);\n        }\n\n        /**\n         * Calculate the median of passed values.\n         * @param {Array} [values=[]] List of values\n         * @returns {Number}\n         */\n\n    }, {\n        key: 'calcMedian',\n        value: function calcMedian() {\n            var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n            var nbValues = values.length;\n            var aux = 0;\n            if (nbValues % 2 === 1) {\n                aux = Math.floor(nbValues / 2);\n                return Number(values[aux]);\n            }\n            return (Number(values[nbValues / 2]) + Number(values[nbValues / 2 - 1])) / 2;\n        }\n\n        /**\n         * Calculate the lower quartile of passed values.\n         * @param {Array} [values=[]] List of values\n         * @returns {Number}\n         */\n\n    }, {\n        key: 'calcQ1',\n        value: function calcQ1() {\n            var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n            var nbValues = values.length;\n            var posa = 0.0;\n            posa = Math.floor(nbValues / 4);\n            if (4 * posa === nbValues) {\n                return (Number(values[posa - 1]) + Number(values[posa])) / 2;\n            }\n            return Number(values[posa]);\n        }\n\n        /**\n         * Calculate the upper quartile of passed values.\n         * @param {Array} [values=[]] List of values\n         * @returns {Number}\n         */\n\n    }, {\n        key: 'calcQ3',\n        value: function calcQ3() {\n            var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n            var nbValues = values.length;\n            var posa = 0.0;\n            var posb = 0.0;\n            posa = Math.floor(nbValues / 4);\n            if (4 * posa === nbValues) {\n                posb = 3 * posa;\n                return (Number(values[posb]) + Number(values[posb - 1])) / 2;\n            }\n            return Number(values[nbValues - posa - 1]);\n        }\n\n        /**\n         * Sort passed values with supplied sorter function.\n         * @param {Array} [values=[]] List of values to be sorted\n         * @param {Function} sorter Sorter function\n         * @returns {Array}\n         */\n\n    }, {\n        key: 'sortColumnValues',\n        value: function sortColumnValues() {\n            var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n            var sorter = arguments[1];\n\n            return values.sort(sorter);\n        }\n\n        /**\n         * Write calculation result in passed DOM element with supplied write method\n         * and decimal precision.\n         * @param {Number} [result=0] Calculation result\n         * @param {DOMElement} label DOM element\n         * @param {String} [writeType='innerhtml'] Write method\n         * @param {Number} [precision=2] Applied decimal precision\n         * @private\n         */\n\n    }, {\n        key: 'writeResult',\n        value: function writeResult() {\n            var result = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n            var label = arguments[1];\n            var writeType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'innerhtml';\n            var precision = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 2;\n            var format = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n\n            var labelElm = (0, _dom.elm)(label);\n\n            if (!labelElm) {\n                return;\n            }\n\n            result = result.toFixed(precision);\n            if (isNaN(result) || !isFinite(result)) {\n                result = '';\n            } else {\n                result = (0, _formatNumber2.default)(format)(result);\n            }\n\n            switch (writeType.toLowerCase()) {\n                case 'innerhtml':\n                    labelElm.innerHTML = result;\n                    break;\n                case 'setvalue':\n                    labelElm.value = result;\n                    break;\n                case 'createtextnode':\n                    var oldNode = labelElm.firstChild;\n                    var txtNode = (0, _dom.createText)(result);\n                    labelElm.replaceChild(txtNode, oldNode);\n                    break;\n            }\n        }\n\n        /**\n         * Configure the format options used to format the operation result based\n         * on column type.\n         * @param {Number} colIndex Column index\n         * @param {Object} [format={}] Format object\n         * @returns {Object}\n         * @private\n         */\n\n    }, {\n        key: 'configureFormat',\n        value: function configureFormat(colIndex) {\n            var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n            var tf = this.tf;\n            if (tf.hasType(colIndex, [_const.FORMATTED_NUMBER])) {\n                var colType = tf.colTypes[colIndex];\n                if (colType.decimal && !format.decimal) {\n                    format.decimal = colType.decimal;\n                }\n                if (colType.thousands && !format.integerSeparator) {\n                    format.integerSeparator = colType.thousands;\n                }\n            } else {\n                format.decimal = format.decimal || '';\n                format.integerSeparator = format.integerSeparator || '';\n            }\n            return format;\n        }\n\n        /** Remove extension */\n\n    }, {\n        key: 'destroy',\n        value: function destroy() {\n            var _this3 = this;\n\n            if (!this.initialized) {\n                return;\n            }\n            // unsubscribe to events\n            this.emitter.off(EVENTS, function () {\n                return _this3.calcAll();\n            });\n\n            this.initialized = false;\n        }\n    }]);\n\n    return ColOps;\n}(_feature.Feature);\n\nexports.default = ColOps;\n\n/***/ }),\n\n/***/ 445:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _feature = __webpack_require__(11);\n\nvar _dom = __webpack_require__(10);\n\nvar _types = __webpack_require__(3);\n\nvar _event = __webpack_require__(19);\n\nvar _root = __webpack_require__(16);\n\nvar _const = __webpack_require__(15);\n\nvar _settings = __webpack_require__(7);\n\nvar _toolbar = __webpack_require__(33);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * Columns Visibility extension\n */\nvar ColsVisibility = function (_Feature) {\n    _inherits(ColsVisibility, _Feature);\n\n    /**\n     * Creates an instance of ColsVisibility\n     * @param {TableFilter} tf TableFilter instance\n     * @param {Object} Configuration object\n     */\n    function ColsVisibility(tf, f) {\n        _classCallCheck(this, ColsVisibility);\n\n        // Configuration object\n        var _this = _possibleConstructorReturn(this, (ColsVisibility.__proto__ || Object.getPrototypeOf(ColsVisibility)).call(this, tf, f.name));\n\n        var cfg = _this.config;\n\n        /**\n         * Module name\n         * @type {String}\n         */\n        _this.name = f.name;\n\n        /**\n         * Module description\n         * @type {String}\n         */\n        _this.desc = (0, _settings.defaultsStr)(f.description, 'Columns visibility manager');\n\n        /**\n         * show/hide columns container element\n         * @private\n         */\n        _this.spanEl = null;\n\n        /**\n         * show/hide columns button element\n         * @private\n         */\n        _this.btnEl = null;\n\n        /**\n         * show/hide columns main container element\n         * @private\n         */\n        _this.contEl = null;\n\n        /**\n         * Enable tick to hide a column, defaults to true\n         * @type {Boolean}\n         */\n        _this.tickToHide = (0, _settings.defaultsBool)(f.tick_to_hide, true);\n\n        /**\n         * Enable columns manager UI, defaults to true\n         * @type {Boolean}\n         */\n        _this.manager = (0, _settings.defaultsBool)(f.manager, true);\n\n        /**\n         * Headers HTML table reference only if headers are external\n         * @type {DOMElement}\n         */\n        _this.headersTbl = f.headers_table || null;\n\n        /**\n         * Headers row index only if headers are external\n         * @type {Number}\n         */\n        _this.headersIndex = (0, _settings.defaultsNb)(f.headers_index, 1);\n\n        /**\n         * ID of main container element\n         * @type {String}\n         */\n        _this.contElTgtId = (0, _settings.defaultsStr)(f.container_target_id, null);\n\n        /**\n         * Alternative text for column headers in column manager UI\n         * @type {Array}\n         */\n        _this.headersText = (0, _settings.defaultsArr)(f.headers_text, []);\n\n        /**\n         * ID of button's container element\n         * @type {String}\n         */\n        _this.btnTgtId = (0, _settings.defaultsStr)(f.btn_target_id, null);\n\n        /**\n         * Button's text, defaults to Columns▼\n         * @type {String}\n         */\n        _this.btnText = (0, _settings.defaultsStr)(f.btn_text, 'Columns▼');\n\n        /**\n         * Button's inner HTML\n         * @type {String}\n         */\n        _this.btnHtml = (0, _settings.defaultsStr)(f.btn_html, null);\n\n        /**\n         * Css class for button\n         * @type {String}\n         */\n        _this.btnCssClass = (0, _settings.defaultsStr)(f.btn_css_class, 'colVis');\n\n        /**\n         * Columns manager UI close link text, defaults to 'Close'\n         * @type {String}\n         */\n        _this.btnCloseText = (0, _settings.defaultsStr)(f.btn_close_text, 'Close');\n\n        /**\n         * Columns manager UI close link HTML\n         * @type {String}\n         */\n        _this.btnCloseHtml = (0, _settings.defaultsStr)(f.btn_close_html, null);\n\n        /**\n         * Css for columns manager UI close link\n         * @type {String}\n         */\n        _this.btnCloseCssClass = (0, _settings.defaultsStr)(f.btn_close_css_class, _this.btnCssClass);\n\n        /**\n         * Extension's stylesheet filename\n         * @type {String}\n         */\n        _this.stylesheet = (0, _settings.defaultsStr)(f.stylesheet, 'colsVisibility.css');\n\n        /**\n         * Css for columns manager UI span\n         * @type {String}\n         */\n        _this.spanCssClass = (0, _settings.defaultsStr)(f.span_css_class, 'colVisSpan');\n\n        /**\n         * Css for columns manager UI main container\n         * @type {String}\n         */\n        _this.contCssClass = (0, _settings.defaultsStr)(f.cont_css_class, 'colVisCont');\n\n        /**\n         * Css for columns manager UI checklist (ul)\n         * @type {String}\n         */\n        _this.listCssClass = (0, _settings.defaultsStr)(cfg.list_css_class, 'cols_checklist');\n\n        /**\n         * Css for columns manager UI checklist item (li)\n         * @type {String}\n         */\n        _this.listItemCssClass = (0, _settings.defaultsStr)(cfg.checklist_item_css_class, 'cols_checklist_item');\n\n        /**\n         * Css for columns manager UI checklist item selected state (li)\n         * @type {String}\n         */\n        _this.listSlcItemCssClass = (0, _settings.defaultsStr)(cfg.checklist_selected_item_css_class, 'cols_checklist_slc_item');\n\n        /**\n         * Text preceding the columns list, defaults to 'Hide' or 'Show'\n         * depending on tick mode (tick_to_hide option)\n         * @type {String}\n         */\n        _this.text = (0, _settings.defaultsStr)(f.text, _this.tickToHide ? 'Hide: ' : 'Show: ');\n\n        /**\n         * List of columns indexes to be hidden at initialization\n         * @type {Array}\n         */\n        _this.atStart = (0, _settings.defaultsArr)(f.at_start, []);\n\n        /**\n         * Enable hover behaviour on columns manager button/link\n         * @type {Boolean}\n         */\n        _this.enableHover = Boolean(f.enable_hover);\n\n        /**\n         * Enable select all option, disabled by default\n         * @type {Boolean}\n         */\n        _this.enableTickAll = Boolean(f.enable_tick_all);\n\n        /**\n         * Text for select all option, defaults to 'Select all:'\n         * @type {String}\n         */\n        _this.tickAllText = (0, _settings.defaultsStr)(f.tick_all_text, 'Select all:');\n\n        /**\n         * Default position in toolbar ('left'|'center'|'right')\n         * @type {String}\n         */\n        _this.toolbarPosition = (0, _settings.defaultsStr)(f.toolbar_position, _toolbar.RIGHT);\n\n        /**\n         * List of indexes of hidden columns\n         * @private\n         */\n        _this.hiddenCols = [];\n\n        /**\n         * Bound mouseup wrapper\n         * @private\n         */\n        _this.boundMouseup = null;\n\n        /**\n         * Callback fired when the extension is initialized\n         * @type {Function}\n         */\n        _this.onLoaded = (0, _settings.defaultsFn)(f.on_loaded, _types.EMPTY_FN);\n\n        /**\n         * Callback fired before the columns manager is opened\n         * @type {Function}\n         */\n        _this.onBeforeOpen = (0, _settings.defaultsFn)(f.on_before_open, _types.EMPTY_FN);\n\n        /**\n         * Callback fired after the columns manager is opened\n         * @type {Function}\n         */\n        _this.onAfterOpen = (0, _settings.defaultsFn)(f.on_after_open, _types.EMPTY_FN);\n\n        /**\n         * Callback fired before the columns manager is closed\n         * @type {Function}\n         */\n        _this.onBeforeClose = (0, _settings.defaultsFn)(f.on_before_close, _types.EMPTY_FN);\n\n        /**\n         * Callback fired after the columns manager is closed\n         * @type {Function}\n         */\n        _this.onAfterClose = (0, _settings.defaultsFn)(f.on_after_close, _types.EMPTY_FN);\n\n        /**\n         * Callback fired before a column is hidden\n         * @type {Function}\n         */\n        _this.onBeforeColHidden = (0, _settings.defaultsFn)(f.on_before_col_hidden, _types.EMPTY_FN);\n\n        /**\n         * Callback fired after a column is hidden\n         * @type {Function}\n         */\n        _this.onAfterColHidden = (0, _settings.defaultsFn)(f.on_after_col_hidden, _types.EMPTY_FN);\n\n        /**\n         * Callback fired before a column is displayed\n         * @type {Function}\n         */\n        _this.onBeforeColDisplayed = (0, _settings.defaultsFn)(f.on_before_col_displayed, _types.EMPTY_FN);\n\n        /**\n         * Callback fired after a column is displayed\n         * @type {Function}\n         */\n        _this.onAfterColDisplayed = (0, _settings.defaultsFn)(f.on_after_col_displayed, _types.EMPTY_FN);\n\n        //Grid layout support\n        if (tf.gridLayout) {\n            _this.headersTbl = tf.feature('gridLayout').headTbl; //headers table\n            _this.headersIndex = 0; //headers index\n        }\n\n        //Loads extension stylesheet\n        tf.import(f.name + 'Style', tf.getStylePath() + _this.stylesheet, null, 'link');\n\n        _this.enable();\n        return _this;\n    }\n\n    /**\n     * Mouse-up event handler handling popup auto-close behaviour\n     * @private\n     */\n\n\n    _createClass(ColsVisibility, [{\n        key: 'onMouseup',\n        value: function onMouseup(evt) {\n            var targetElm = (0, _event.targetEvt)(evt);\n\n            while (targetElm && targetElm !== this.contEl && targetElm !== this.btnEl) {\n                targetElm = targetElm.parentNode;\n            }\n\n            if (targetElm !== this.contEl && targetElm !== this.btnEl) {\n                this.toggle();\n            }\n\n            return;\n        }\n\n        /**\n         * Toggle columns manager UI\n         */\n\n    }, {\n        key: 'toggle',\n        value: function toggle() {\n            // ensure mouseup event handler is removed\n            (0, _event.removeEvt)(_root.root, 'mouseup', this.boundMouseup);\n\n            var contDisplay = this.contEl.style.display;\n\n            if (contDisplay !== 'inline') {\n                this.onBeforeOpen(this);\n            }\n            if (contDisplay === 'inline') {\n                this.onBeforeClose(this);\n            }\n\n            this.contEl.style.display = contDisplay === 'inline' ? _const.NONE : 'inline';\n\n            if (contDisplay !== 'inline') {\n                this.onAfterOpen(this);\n                (0, _event.addEvt)(_root.root, 'mouseup', this.boundMouseup);\n            }\n            if (contDisplay === 'inline') {\n                this.onAfterClose(this);\n            }\n        }\n\n        /**\n         * Check an item in columns manager UI\n         * @private\n         */\n\n    }, {\n        key: 'checkItem',\n        value: function checkItem(lbl) {\n            var li = lbl.parentNode;\n            if (!li || !lbl) {\n                return;\n            }\n            var isChecked = lbl.firstChild.checked;\n            var colIndex = lbl.firstChild.getAttribute('id').split('_')[1];\n            colIndex = parseInt(colIndex, 10);\n            if (isChecked) {\n                (0, _dom.addClass)(li, this.listSlcItemCssClass);\n            } else {\n                (0, _dom.removeClass)(li, this.listSlcItemCssClass);\n            }\n\n            var hide = false;\n            if (this.tickToHide && isChecked || !this.tickToHide && !isChecked) {\n                hide = true;\n            }\n            this.setHidden(colIndex, hide);\n        }\n\n        /**\n         * Initializes ColsVisibility instance\n         */\n\n    }, {\n        key: 'init',\n        value: function init() {\n            var _this2 = this;\n\n            if (this.initialized || !this.manager) {\n                return;\n            }\n\n            this.emitter.emit('initializing-extension', this, !(0, _types.isNull)(this.btnTgtId));\n\n            this.emitter.on(['hide-column'], function (tf, colIndex) {\n                return _this2.hideCol(colIndex);\n            });\n\n            this.buildBtn();\n            this.buildManager();\n\n            /** @inherited */\n            this.initialized = true;\n\n            this.boundMouseup = this.onMouseup.bind(this);\n\n            this.emitter.emit('columns-visibility-initialized', this.tf, this);\n            this.emitter.emit('extension-initialized', this);\n\n            // Hide columns at start at very end of initialization, do not move\n            // as order is important\n            this._hideAtStart();\n        }\n\n        /**\n         * Build main button UI\n         */\n\n    }, {\n        key: 'buildBtn',\n        value: function buildBtn() {\n            var _this3 = this;\n\n            if (this.btnEl) {\n                return;\n            }\n            var tf = this.tf;\n            var span = (0, _dom.createElm)('span');\n            span.className = this.spanCssClass;\n\n            // Container element (rdiv or custom element)\n            var targetEl = !this.btnTgtId ? tf.feature('toolbar').container(this.toolbarPosition) : (0, _dom.elm)(this.btnTgtId);\n\n            if (!this.btnTgtId) {\n                var firstChild = targetEl.firstChild;\n                firstChild.parentNode.insertBefore(span, firstChild);\n            } else {\n                targetEl.appendChild(span);\n            }\n\n            if (!this.btnHtml) {\n                var btn = (0, _dom.createElm)('a', ['href', 'javascript:;']);\n                btn.className = this.btnCssClass;\n                btn.title = this.desc;\n\n                btn.innerHTML = this.btnText;\n                span.appendChild(btn);\n                if (!this.enableHover) {\n                    (0, _event.addEvt)(btn, 'click', function (evt) {\n                        return _this3.toggle(evt);\n                    });\n                } else {\n                    (0, _event.addEvt)(btn, 'mouseover', function (evt) {\n                        return _this3.toggle(evt);\n                    });\n                }\n            } else {\n                // Custom html\n                span.innerHTML = this.btnHtml;\n                var colVisEl = span.firstChild;\n                if (!this.enableHover) {\n                    (0, _event.addEvt)(colVisEl, 'click', function (evt) {\n                        return _this3.toggle(evt);\n                    });\n                } else {\n                    (0, _event.addEvt)(colVisEl, 'mouseover', function (evt) {\n                        return _this3.toggle(evt);\n                    });\n                }\n            }\n\n            this.spanEl = span;\n            this.btnEl = this.spanEl.firstChild;\n\n            this.onLoaded(this);\n        }\n\n        /**\n         * Build columns manager UI\n         */\n\n    }, {\n        key: 'buildManager',\n        value: function buildManager() {\n            var _this4 = this;\n\n            var tf = this.tf;\n\n            var container = !this.contElTgtId ? (0, _dom.createElm)('div') : (0, _dom.elm)(this.contElTgtId);\n            container.className = this.contCssClass;\n\n            //Extension description\n            var extNameLabel = (0, _dom.createElm)('p');\n            extNameLabel.innerHTML = this.text;\n            container.appendChild(extNameLabel);\n\n            //Headers list\n            var ul = (0, _dom.createElm)('ul');\n            ul.className = this.listCssClass;\n\n            var tbl = this.headersTbl || tf.dom();\n            var headerIndex = this.headersTbl ? this.headersIndex : tf.getHeadersRowIndex();\n            var headerRow = tbl.rows[headerIndex];\n\n            //Tick all option\n            if (this.enableTickAll) {\n                var li = (0, _dom.createCheckItem)('col__' + tf.id, this.tickAllText, this.tickAllText);\n                (0, _dom.addClass)(li, this.listItemCssClass);\n                ul.appendChild(li);\n                li.check.checked = !this.tickToHide;\n\n                (0, _event.addEvt)(li.check, 'click', function () {\n                    for (var h = 0; h < headerRow.cells.length; h++) {\n                        var itm = (0, _dom.elm)('col_' + h + '_' + tf.id);\n                        if (itm && li.check.checked !== itm.checked) {\n                            itm.click();\n                            itm.checked = li.check.checked;\n                        }\n                    }\n                });\n            }\n\n            for (var i = 0; i < headerRow.cells.length; i++) {\n                var cell = headerRow.cells[i];\n                var cellText = this.headersText[i] || this._getHeaderText(cell);\n                var liElm = (0, _dom.createCheckItem)('col_' + i + '_' + tf.id, cellText, cellText);\n                (0, _dom.addClass)(liElm, this.listItemCssClass);\n                if (!this.tickToHide) {\n                    (0, _dom.addClass)(liElm, this.listSlcItemCssClass);\n                }\n                ul.appendChild(liElm);\n                if (!this.tickToHide) {\n                    liElm.check.checked = true;\n                }\n\n                (0, _event.addEvt)(liElm.check, 'click', function (evt) {\n                    var elm = (0, _event.targetEvt)(evt);\n                    var lbl = elm.parentNode;\n                    _this4.checkItem(lbl);\n                });\n            }\n\n            //separator\n            var p = (0, _dom.createElm)('p', ['align', 'center']);\n            var btn = void 0;\n            //Close link\n            if (!this.btnCloseHtml) {\n                btn = (0, _dom.createElm)('a', ['href', 'javascript:;']);\n                btn.className = this.btnCloseCssClass;\n                btn.innerHTML = this.btnCloseText;\n                (0, _event.addEvt)(btn, 'click', function (evt) {\n                    return _this4.toggle(evt);\n                });\n                p.appendChild(btn);\n            } else {\n                p.innerHTML = this.btnCloseHtml;\n                btn = p.firstChild;\n                (0, _event.addEvt)(btn, 'click', function (evt) {\n                    return _this4.toggle(evt);\n                });\n            }\n\n            container.appendChild(ul);\n            container.appendChild(p);\n\n            this.btnEl.parentNode.insertBefore(container, this.btnEl);\n            this.contEl = container;\n        }\n\n        /**\n         * Hide or show specified columns\n         * @param {Number} colIndex Column index\n         * @param {Boolean} hide    Hide column if true or show if false\n         */\n\n    }, {\n        key: 'setHidden',\n        value: function setHidden(colIndex, hide) {\n            var tf = this.tf;\n            var tbl = tf.dom();\n\n            if (hide) {\n                this.onBeforeColHidden(this, colIndex);\n            } else {\n                this.onBeforeColDisplayed(this, colIndex);\n            }\n\n            this._hideElements(tbl, colIndex, hide);\n            if (this.headersTbl) {\n                this._hideElements(this.headersTbl, colIndex, hide);\n            }\n\n            var hiddenCols = this.hiddenCols;\n            var itemIndex = hiddenCols.indexOf(colIndex);\n            if (hide) {\n                if (itemIndex === -1) {\n                    this.hiddenCols.push(colIndex);\n                }\n            } else {\n                if (itemIndex !== -1) {\n                    this.hiddenCols.splice(itemIndex, 1);\n                }\n            }\n\n            if (hide) {\n                this.onAfterColHidden(this, colIndex);\n                this.emitter.emit('column-hidden', tf, this, colIndex, this.hiddenCols);\n            } else {\n                this.onAfterColDisplayed(this, colIndex);\n                this.emitter.emit('column-shown', tf, this, colIndex, this.hiddenCols);\n            }\n        }\n\n        /**\n         * Show specified column\n         * @param  {Number} colIndex Column index\n         */\n\n    }, {\n        key: 'showCol',\n        value: function showCol(colIndex) {\n            if ((0, _types.isUndef)(colIndex) || !this.isColHidden(colIndex)) {\n                return;\n            }\n            if (this.manager && this.contEl) {\n                var itm = (0, _dom.elm)('col_' + colIndex + '_' + this.tf.id);\n                if (itm) {\n                    itm.click();\n                }\n            } else {\n                this.setHidden(colIndex, false);\n            }\n        }\n\n        /**\n         * Hide specified column\n         * @param  {Number} colIndex Column index\n         */\n\n    }, {\n        key: 'hideCol',\n        value: function hideCol(colIndex) {\n            if ((0, _types.isUndef)(colIndex) || this.isColHidden(colIndex)) {\n                return;\n            }\n            if (this.manager && this.contEl) {\n                var itm = (0, _dom.elm)('col_' + colIndex + '_' + this.tf.id);\n                if (itm) {\n                    itm.click();\n                }\n            } else {\n                this.setHidden(colIndex, true);\n            }\n        }\n\n        /**\n         * Determine if specified column is hidden\n         * @param  {Number} colIndex Column index\n         */\n\n    }, {\n        key: 'isColHidden',\n        value: function isColHidden(colIndex) {\n            if (this.hiddenCols.indexOf(colIndex) !== -1) {\n                return true;\n            }\n            return false;\n        }\n\n        /**\n         * Toggle visibility of specified column\n         * @param  {Number} colIndex Column index\n         */\n\n    }, {\n        key: 'toggleCol',\n        value: function toggleCol(colIndex) {\n            if ((0, _types.isUndef)(colIndex) || this.isColHidden(colIndex)) {\n                this.showCol(colIndex);\n            } else {\n                this.hideCol(colIndex);\n            }\n        }\n\n        /**\n         * Return the indexes of the columns currently hidden\n         * @return {Array} column indexes\n         */\n\n    }, {\n        key: 'getHiddenCols',\n        value: function getHiddenCols() {\n            return this.hiddenCols;\n        }\n\n        /**\n         * Remove the columns manager\n         */\n\n    }, {\n        key: 'destroy',\n        value: function destroy() {\n            var _this5 = this;\n\n            if (!this.initialized) {\n                return;\n            }\n            if ((0, _dom.elm)(this.contElTgtId)) {\n                (0, _dom.elm)(this.contElTgtId).innerHTML = '';\n            } else {\n                this.contEl.innerHTML = '';\n                (0, _dom.removeElm)(this.contEl);\n                this.contEl = null;\n            }\n            this.btnEl.innerHTML = '';\n            (0, _dom.removeElm)(this.btnEl);\n            this.btnEl = null;\n\n            this.emitter.off(['hide-column'], function (tf, colIndex) {\n                return _this5.hideCol(colIndex);\n            });\n\n            this.boundMouseup = null;\n\n            this.initialized = false;\n        }\n    }, {\n        key: '_getHeaderText',\n        value: function _getHeaderText(cell) {\n            if (!cell.hasChildNodes) {\n                return '';\n            }\n\n            for (var i = 0; i < cell.childNodes.length; i++) {\n                var n = cell.childNodes[i];\n                if (n.nodeType === 3) {\n                    return n.nodeValue;\n                } else if (n.nodeType === 1) {\n                    if (n.id && n.id.indexOf('popUp') !== -1) {\n                        continue;\n                    } else {\n                        return (0, _dom.getText)(n);\n                    }\n                }\n                continue;\n            }\n            return '';\n        }\n    }, {\n        key: '_hideElements',\n        value: function _hideElements(tbl, colIdx, hide) {\n            this._hideCells(tbl, colIdx, hide);\n            this._hideCol(tbl, colIdx, hide);\n        }\n    }, {\n        key: '_hideCells',\n        value: function _hideCells(tbl, colIdx, hide) {\n            for (var i = 0; i < tbl.rows.length; i++) {\n                var row = tbl.rows[i];\n                var cell = row.cells[colIdx];\n                if (cell) {\n                    cell.style.display = hide ? _const.NONE : '';\n                }\n            }\n        }\n    }, {\n        key: '_hideCol',\n        value: function _hideCol(tbl, colIdx, hide) {\n            var colElms = (0, _dom.tag)(this.tf.dom(), 'col');\n            if (colElms.length === 0) {\n                return;\n            }\n            colElms[colIdx].style.display = hide ? _const.NONE : '';\n        }\n    }, {\n        key: '_hideAtStart',\n        value: function _hideAtStart() {\n            var _this6 = this;\n\n            this.atStart.forEach(function (colIdx) {\n                _this6.hideCol(colIdx);\n            });\n        }\n    }]);\n\n    return ColsVisibility;\n}(_feature.Feature);\n\nexports.default = ColsVisibility;\n\n/***/ }),\n\n/***/ 446:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _feature = __webpack_require__(11);\n\nvar _dom = __webpack_require__(10);\n\nvar _types = __webpack_require__(3);\n\nvar _event = __webpack_require__(19);\n\nvar _settings = __webpack_require__(7);\n\nvar _toolbar = __webpack_require__(33);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * Filters Visibility extension\n */\nvar FiltersVisibility = function (_Feature) {\n  _inherits(FiltersVisibility, _Feature);\n\n  /**\n   * Creates an instance of FiltersVisibility\n   * @param {TableFilter} tf TableFilter instance\n   * @param {Object} Configuration object\n   */\n  function FiltersVisibility(tf, f) {\n    _classCallCheck(this, FiltersVisibility);\n\n    /**\n     * Module name\n     * @type {String}\n     */\n    var _this = _possibleConstructorReturn(this, (FiltersVisibility.__proto__ || Object.getPrototypeOf(FiltersVisibility)).call(this, tf, f.name));\n\n    _this.name = f.name;\n\n    /**\n     * Module description\n     * @type {String}\n     */\n    _this.desc = (0, _settings.defaultsStr)(f.description, 'Filters row visibility manager');\n\n    /**\n     * Extension's stylesheet filename\n     * @type {String}\n     */\n    _this.stylesheet = (0, _settings.defaultsStr)(f.stylesheet, 'filtersVisibility.css');\n\n    /**\n     * Expand icon filename\n     * @type {String}\n     */\n    _this.icnExpand = (0, _settings.defaultsStr)(f.expand_icon_name, 'icn_exp.png');\n\n    /**\n     * Collapse icon filename\n     * @type {String}\n     */\n    _this.icnCollapse = (0, _settings.defaultsStr)(f.collapse_icon_name, 'icn_clp.png');\n\n    /**\n     * Main container element\n     * @private\n     */\n    _this.contEl = null;\n\n    /**\n     * Button element\n     * @private\n     */\n    _this.btnEl = null;\n\n    /**\n     * Expand icon HTML\n     * @private\n     */\n    _this.icnExpandHtml = '\"Expand';\n\n    /**\n     * Collapse icon HTML\n     * @private\n     */\n    _this.icnCollapseHtml = '\"Collapse';\n\n    /**\n     * Default text\n     * @private\n     */\n    _this.defaultText = 'Toggle filters';\n\n    /**\n     * ID of main container element\n     * @type {String}\n     */\n    _this.targetId = f.target_id || null;\n\n    /**\n     * Enable expand/collapse icon, defaults to true\n     * @type {Boolean}\n     */\n    _this.enableIcon = (0, _settings.defaultsBool)(f.enable_icon, true);\n\n    /**\n     * Custom text for button\n     * @type {String}\n     */\n    _this.btnText = (0, _settings.defaultsStr)(f.btn_text, '');\n\n    /**\n     * Collapse button HTML\n     * @private\n     */\n    _this.collapseBtnHtml = _this.enableIcon ? _this.icnCollapseHtml + _this.btnText : _this.btnText || _this.defaultText;\n\n    /**\n     * Expand button HTML\n     * @private\n     */\n    _this.expandBtnHtml = _this.enableIcon ? _this.icnExpandHtml + _this.btnText : _this.btnText || _this.defaultText;\n\n    /**\n     * Button's custom HTML\n     * @type {String}\n     */\n    _this.btnHtml = (0, _settings.defaultsStr)(f.btn_html, null);\n\n    /**\n     * Css class for expand/collapse filters button\n     * @type {String}\n     */\n    _this.btnCssClass = (0, _settings.defaultsStr)(f.btn_css_class, 'btnExpClpFlt');\n\n    /**\n     * Css class for main container\n     * @type {String}\n     */\n    _this.contCssClass = (0, _settings.defaultsStr)(f.cont_css_class, 'expClpFlt');\n\n    /**\n     * Filters row index\n     * @type {Number}\n     */\n    _this.filtersRowIndex = (0, _settings.defaultsNb)(f.filters_row_index, tf.getFiltersRowIndex());\n\n    /**\n     * Make filters visible at initialization, defaults to true\n     * @type {Boolean}\n     */\n    _this.visibleAtStart = (0, _settings.defaultsNb)(f.visible_at_start, true);\n\n    /**\n     * Default position in toolbar ('left'|'center'|'right')\n     * @type {String}\n     */\n    _this.toolbarPosition = (0, _settings.defaultsStr)(f.toolbar_position, _toolbar.RIGHT);\n\n    /**\n     * Callback fired before filters row is shown\n     * @type {Function}\n     */\n    _this.onBeforeShow = (0, _settings.defaultsFn)(f.on_before_show, _types.EMPTY_FN);\n\n    /**\n     * Callback fired after filters row is shown\n     * @type {Function}\n     */\n    _this.onAfterShow = (0, _settings.defaultsFn)(f.on_after_show, _types.EMPTY_FN);\n\n    /**\n     * Callback fired before filters row is hidden\n     * @type {Function}\n     */\n    _this.onBeforeHide = (0, _settings.defaultsFn)(f.on_before_hide, _types.EMPTY_FN);\n\n    /**\n     * Callback fired after filters row is hidden\n     * @type {Function}\n     */\n    _this.onAfterHide = (0, _settings.defaultsFn)(f.on_after_hide, _types.EMPTY_FN);\n\n    //Import extension's stylesheet\n    tf.import(f.name + 'Style', tf.getStylePath() + _this.stylesheet, null, 'link');\n\n    _this.enable();\n    return _this;\n  }\n\n  /**\n   * Initialise extension\n   */\n\n\n  _createClass(FiltersVisibility, [{\n    key: 'init',\n    value: function init() {\n      var _this2 = this;\n\n      if (this.initialized) {\n        return;\n      }\n\n      this.emitter.emit('initializing-extension', this, !(0, _types.isNull)(this.targetId));\n\n      this.buildUI();\n\n      /** @inherited */\n      this.initialized = true;\n\n      this.emitter.on(['show-filters'], function (tf, visible) {\n        return _this2.show(visible);\n      });\n      this.emitter.emit('filters-visibility-initialized', this.tf, this);\n      this.emitter.emit('extension-initialized', this);\n    }\n\n    /**\n     * Build UI elements\n     */\n\n  }, {\n    key: 'buildUI',\n    value: function buildUI() {\n      var _this3 = this;\n\n      var tf = this.tf;\n      var span = (0, _dom.createElm)('span');\n      span.className = this.contCssClass;\n\n      // Container element (rdiv or custom element)\n      var targetEl = !this.targetId ? tf.feature('toolbar').container(this.toolbarPosition) : (0, _dom.elm)(this.targetId);\n\n      if (!this.targetId) {\n        var firstChild = targetEl.firstChild;\n        firstChild.parentNode.insertBefore(span, firstChild);\n      } else {\n        targetEl.appendChild(span);\n      }\n\n      var btn = void 0;\n      if (!this.btnHtml) {\n        btn = (0, _dom.createElm)('a', ['href', 'javascript:void(0);']);\n        btn.className = this.btnCssClass;\n        btn.title = this.btnText || this.defaultText;\n        btn.innerHTML = this.collapseBtnHtml;\n        span.appendChild(btn);\n      } else {\n        // Custom html\n        span.innerHTML = this.btnHtml;\n        btn = span.firstChild;\n      }\n\n      (0, _event.addEvt)(btn, 'click', function () {\n        return _this3.toggle();\n      });\n\n      this.contEl = span;\n      this.btnEl = btn;\n\n      if (!this.visibleAtStart) {\n        this.toggle();\n      }\n    }\n\n    /**\n     * Toggle filters visibility\n     */\n\n  }, {\n    key: 'toggle',\n    value: function toggle() {\n      var tf = this.tf;\n      var tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();\n      var fltRow = tbl.rows[this.filtersRowIndex];\n      var isDisplayed = fltRow.style.display === '';\n\n      this.show(!isDisplayed);\n    }\n\n    /**\n     * Show or hide filters\n     *\n     * @param {boolean} [visible=true] Visibility flag\n     */\n\n  }, {\n    key: 'show',\n    value: function show() {\n      var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      var tf = this.tf;\n      var tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();\n      var fltRow = tbl.rows[this.filtersRowIndex];\n\n      if (visible) {\n        this.onBeforeShow(this);\n      }\n      if (!visible) {\n        this.onBeforeHide(this);\n      }\n\n      fltRow.style.display = visible ? '' : 'none';\n      if (this.enableIcon && !this.btnHtml) {\n        this.btnEl.innerHTML = visible ? this.collapseBtnHtml : this.expandBtnHtml;\n      }\n\n      if (visible) {\n        this.onAfterShow(this);\n      }\n      if (!visible) {\n        this.onAfterHide(this);\n      }\n\n      this.emitter.emit('filters-toggled', tf, this, visible);\n    }\n\n    /**\n     * Destroy the UI\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      var _this4 = this;\n\n      if (!this.initialized) {\n        return;\n      }\n\n      this.emitter.off(['show-filters'], function (tf, visible) {\n        return _this4.show(visible);\n      });\n\n      this.btnEl.innerHTML = '';\n      (0, _dom.removeElm)(this.btnEl);\n      this.btnEl = null;\n\n      this.contEl.innerHTML = '';\n      (0, _dom.removeElm)(this.contEl);\n      this.contEl = null;\n      this.initialized = false;\n    }\n  }]);\n\n  return FiltersVisibility;\n}(_feature.Feature);\n\nexports.default = FiltersVisibility;\n\n/***/ }),\n\n/***/ 447:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\n\nvar _adapterSortabletable = __webpack_require__(442);\n\nvar _adapterSortabletable2 = _interopRequireDefault(_adapterSortabletable);\n\nvar _root = __webpack_require__(16);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nif (!_root.root.SortableTable) {\n    __webpack_require__(449);\n}\n\nexports.default = _adapterSortabletable2.default;\n\n/***/ }),\n\n/***/ 448:\n/***/ (function(module, exports) {\n\n\nmodule.exports = formatter;\nmodule.exports.default = formatter;\n\nfunction formatter(options) {\n  options = options || {};\n\n\n  // *********************************************************************************************\n  // Set defaults for negatives\n  // options.negative, options.negativeOut, options.separator retained for backward compatibility\n  // *********************************************************************************************\n\n  // type of negative; default left\n  options.negativeType = options.negativeType || (options.negative === 'R' ? 'right' : 'left')\n\n  // negative symbols '-' or '()'\n  if (typeof options.negativeLeftSymbol !== 'string') {\n    switch (options.negativeType) {\n      case 'left':\n        options.negativeLeftSymbol = '-';\n        break;\n      case 'brackets':\n        options.negativeLeftSymbol = '(';\n        break;\n      default:\n        options.negativeLeftSymbol = '';\n    }\n  }\n  if (typeof options.negativeRightSymbol !== 'string') {\n    switch (options.negativeType) {\n      case 'right':\n        options.negativeRightSymbol = '-';\n        break;\n      case 'brackets':\n        options.negativeRightSymbol = ')';\n        break;\n      default:\n        options.negativeRightSymbol = '';\n    }\n  }\n\n  // whether negative symbol should be inside/outside prefix and suffix\n\n  if (typeof options.negativeLeftOut !== \"boolean\") {\n    options.negativeLeftOut = (options.negativeOut === false ? false : true);\n  }\n  if (typeof options.negativeRightOut !== \"boolean\") {\n    options.negativeRightOut = (options.negativeOut === false ? false : true);\n  }\n\n  //prefix and suffix\n  options.prefix = options.prefix || '';\n  options.suffix = options.suffix || '';\n\n  //separators\n  if (typeof options.integerSeparator !== 'string') {\n    options.integerSeparator = (typeof options.separator === 'string' ? options.separator : ',');\n  }\n  options.decimalsSeparator = typeof options.decimalsSeparator === 'string' ? options.decimalsSeparator : '';\n  options.decimal = options.decimal || '.';\n\n  //padders\n  options.padLeft = options.padLeft || -1 //default no padding\n  options.padRight = options.padRight || -1 //default no padding\n\n  function format(number, overrideOptions) {\n    overrideOptions = overrideOptions || {};\n\n    if (number || number === 0) {\n      number = '' + number;//convert number to string if it isn't already\n    } else {\n      return '';\n    }\n\n    //identify a negative number and make it absolute\n    var output = [];\n    var negative = number.charAt(0) === '-';\n    number = number.replace(/^\\-/g, '');\n\n    //Prepare output with left hand negative and/or prefix\n    if (!options.negativeLeftOut && !overrideOptions.noUnits) {\n      output.push(options.prefix);\n    }\n    if (negative) {\n      output.push(options.negativeLeftSymbol);\n    }\n    if (options.negativeLeftOut && !overrideOptions.noUnits) {\n      output.push(options.prefix);\n    }\n\n    //Format core number\n    number = number.split('.');\n    if (options.round != null) round(number, options.round);\n    if (options.truncate != null) number[1] = truncate(number[1], options.truncate);\n    if (options.padLeft > 0) number[0] = padLeft(number[0], options.padLeft);\n    if (options.padRight > 0) number[1] = padRight(number[1], options.padRight);\n    if (!overrideOptions.noSeparator && number[1]) number[1] = addDecimalSeparators(number[1], options.decimalsSeparator);\n    if (!overrideOptions.noSeparator && number[0]) number[0] = addIntegerSeparators(number[0], options.integerSeparator);\n    output.push(number[0]);\n    if (number[1]) {\n      output.push(options.decimal);\n      output.push(number[1]);\n    }\n\n    //Prepare output with right hand negative and/or prefix\n    if (options.negativeRightOut && !overrideOptions.noUnits) {\n      output.push(options.suffix);\n    }\n    if (negative) {\n      output.push(options.negativeRightSymbol);\n    }\n    if (!options.negativeRightOut && !overrideOptions.noUnits) {\n      output.push(options.suffix);\n    }\n\n    //join output and return\n    return output.join('');\n  }\n\n  format.negative = options.negative;\n  format.negativeOut = options.negativeOut;\n  format.negativeType = options.negativeType;\n  format.negativeLeftOut = options.negativeLeftOut;\n  format.negativeLeftSymbol = options.negativeLeftSymbol;\n  format.negativeRightOut = options.negativeRightOut;\n  format.negativeRightSymbol = options.negativeRightSymbol;\n  format.prefix = options.prefix;\n  format.suffix = options.suffix;\n  format.separate = options.separate;\n  format.integerSeparator = options.integerSeparator;\n  format.decimalsSeparator = options.decimalsSeparator;\n  format.decimal = options.decimal;\n  format.padLeft = options.padLeft;\n  format.padRight = options.padRight;\n  format.truncate = options.truncate;\n  format.round = options.round;\n\n  function unformat(number, allowedSeparators) {\n    allowedSeparators = allowedSeparators || [];\n    if (options.allowedSeparators) {\n      options.allowedSeparators.forEach(function (s) { allowedSeparators.push (s); });\n    }\n    allowedSeparators.push(options.integerSeparator);\n    allowedSeparators.push(options.decimalsSeparator);\n    number = number.replace(options.prefix, '');\n    number = number.replace(options.suffix, '');\n    var newNumber = number;\n    do {\n      number = newNumber;\n      for (var i = 0; i < allowedSeparators.length; i++) {\n        newNumber = newNumber.replace(allowedSeparators[i], '');\n      }\n    } while (newNumber != number);\n    return number;\n  }\n  format.unformat = unformat;\n\n  function validate(number, allowedSeparators) {\n    number = unformat(number, allowedSeparators);\n    number = number.split(options.decimal);\n    if (number.length > 2) {\n      return false;\n    } else if (options.truncate != null && number[1] && number[1].length > options.truncate) {\n      return false;\n    }  else if (options.round != null && number[1] && number[1].length > options.round) {\n      return false;\n    } else {\n      return /^-?\\d+\\.?\\d*$/.test(number);\n    }\n  }\n  return format;\n}\n\n//where x is already the integer part of the number\nfunction addIntegerSeparators(x, separator) {\n  x += '';\n  if (!separator) return x;\n  var rgx = /(\\d+)(\\d{3})/;\n  while (rgx.test(x)) {\n    x = x.replace(rgx, '$1' + separator + '$2');\n  }\n  return x;\n}\n\n//where x is already the decimal part of the number\nfunction addDecimalSeparators(x, separator) {\n  x += '';\n  if (!separator) return x;\n  var rgx = /(\\d{3})(\\d+)/;\n  while (rgx.test(x)) {\n    x = x.replace(rgx, '$1' + separator + '$2');\n  }\n  return x;\n}\n\n//where x is the integer part of the number\nfunction padLeft(x, padding) {\n  x = x + '';\n  var buf = [];\n  while (buf.length + x.length < padding) {\n    buf.push('0');\n  }\n  return buf.join('') + x;\n}\n\n//where x is the decimals part of the number\nfunction padRight(x, padding) {\n  if (x) {\n    x += '';\n  } else {\n    x = '';\n  }\n  var buf = [];\n  while (buf.length + x.length < padding) {\n    buf.push('0');\n  }\n  return x + buf.join('');\n}\nfunction truncate(x, length) {\n  if (x) {\n    x += '';\n  }\n  if (x && x.length > length) {\n    return x.substr(0, length);\n  } else {\n    return x;\n  }\n}\n\n//where number is an array with 0th item as integer string and 1st item as decimal string (no negatives)\nfunction round(number, places) {\n  if (number[1] && places >= 0 && number[1].length > places) {\n    //truncate to correct number of decimal places\n    var decim = number[1].slice(0, places);\n    //if next digit was >= 5 we need to round up\n    if (+(number[1].substr(places, 1)) >= 5) {\n      //But first count leading zeros as converting to a number will loose them\n      var leadingzeros = \"\";\n      while (decim.charAt(0)===\"0\") {\n        leadingzeros = leadingzeros + \"0\";\n        decim = decim.substr(1);\n      }\n      //Then we can change decim to a number and add 1 before replacing leading zeros\n      decim = (+decim + 1) + '';\n      decim = leadingzeros + decim;\n      if (decim.length > places) {\n        //adding one has made it longer\n        number[0] = (+number[0]+ +decim.charAt(0)) + ''; //add value of firstchar to the integer part\n        decim = decim.substring(1);   //ignore the 1st char at the beginning which is the carry to the integer part\n      }\n    }\n    number[1] = decim;\n  }\n  return number;\n}\n\n\n/***/ }),\n\n/***/ 449:\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(450)(__webpack_require__(451))\n\n/***/ }),\n\n/***/ 450:\n/***/ (function(module, exports) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nmodule.exports = function(src) {\n\tfunction log(error) {\n\t\t(typeof console !== \"undefined\")\n\t\t&& (console.error || console.log)(\"[Script Loader]\", error);\n\t}\n\n\t// Check for IE =< 8\n\tfunction isIE() {\n\t\treturn typeof attachEvent !== \"undefined\" && typeof addEventListener === \"undefined\";\n\t}\n\n\ttry {\n\t\tif (typeof execScript !== \"undefined\" && isIE()) {\n\t\t\texecScript(src);\n\t\t} else if (typeof eval !== \"undefined\") {\n\t\t\teval.call(null, src);\n\t\t} else {\n\t\t\tlog(\"EvalError: No eval function available\");\n\t\t}\n\t} catch (error) {\n\t\tlog(error);\n\t}\n}\n\n\n/***/ }),\n\n/***/ 451:\n/***/ (function(module, exports) {\n\nmodule.exports = \"/*----------------------------------------------------------------------------\\\\\\n|                            Sortable Table 1.12                              |\\n|-----------------------------------------------------------------------------|\\n|                         Created by Erik Arvidsson                           |\\n|                  (http://webfx.eae.net/contact.html#erik)                   |\\n|                      For WebFX (http://webfx.eae.net/)                      |\\n|-----------------------------------------------------------------------------|\\n| A DOM 1 based script that allows an ordinary HTML table to be sortable.     |\\n|-----------------------------------------------------------------------------|\\n|                  Copyright (c) 1998 - 2006 Erik Arvidsson                   |\\n|-----------------------------------------------------------------------------|\\n| Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not |\\n| use this file except in compliance with the License.  You may obtain a copy |\\n| of the License at http://www.apache.org/licenses/LICENSE-2.0                |\\n| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\\n| Unless  required  by  applicable law or  agreed  to  in  writing,  software |\\n| distributed under the License is distributed on an  \\\"AS IS\\\" BASIS,  WITHOUT |\\n| WARRANTIES OR  CONDITIONS OF ANY KIND,  either express or implied.  See the |\\n| License  for the  specific language  governing permissions  and limitations |\\n| under the License.                                                          |\\n|-----------------------------------------------------------------------------|\\n| 2003-01-10 | First version                                                  |\\n| 2003-01-19 | Minor changes to the date parsing                              |\\n| 2003-01-28 | JScript 5.0 fixes (no support for 'in' operator)               |\\n| 2003-02-01 | Sloppy typo like error fixed in getInnerText                   |\\n| 2003-07-04 | Added workaround for IE cellIndex bug.                         |\\n| 2003-11-09 | The bDescending argument to sort was not correctly working     |\\n|            | Using onclick DOM0 event if no support for addEventListener    |\\n|            | or attachEvent                                                 |\\n| 2004-01-13 | Adding addSortType and removeSortType which makes it a lot     |\\n|            | easier to add new, custom sort types.                          |\\n| 2004-01-27 | Switch to use descending = false as the default sort order.    |\\n|            | Change defaultDescending to suit your needs.                   |\\n| 2004-03-14 | Improved sort type None look and feel a bit                    |\\n| 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you    |\\n|            | can use another tHead or no tHead, and you can chose some      |\\n|            | other tBody.                                                   |\\n| 2006-04-25 | Changed license to Apache Software License 2.0                 |\\n|-----------------------------------------------------------------------------|\\n| Created 2003-01-10 | All changes are in the log above. | Updated 2006-04-25 |\\n\\\\----------------------------------------------------------------------------*/\\n\\n\\nfunction SortableTable(oTable, oSortTypes) {\\n\\n\\tthis.sortTypes = oSortTypes || [];\\n\\n\\tthis.sortColumn = null;\\n\\tthis.descending = null;\\n\\n\\tvar oThis = this;\\n\\tthis._headerOnclick = function (e) {\\n\\t\\toThis.headerOnclick(e);\\n\\t};\\n\\n\\tif (oTable) {\\n\\t\\tthis.setTable( oTable );\\n\\t\\tthis.document = oTable.ownerDocument || oTable.document;\\n\\t}\\n\\telse {\\n\\t\\tthis.document = document;\\n\\t}\\n\\n\\n\\t// only IE needs this\\n\\tvar win = this.document.defaultView || this.document.parentWindow;\\n\\tthis._onunload = function () {\\n\\t\\toThis.destroy();\\n\\t};\\n\\tif (win && typeof win.attachEvent != \\\"undefined\\\") {\\n\\t\\twin.attachEvent(\\\"onunload\\\", this._onunload);\\n\\t}\\n}\\n\\nSortableTable.gecko = navigator.product == \\\"Gecko\\\";\\nSortableTable.msie = /msie/i.test(navigator.userAgent);\\n// Mozilla is faster when doing the DOM manipulations on\\n// an orphaned element. MSIE is not\\nSortableTable.removeBeforeSort = SortableTable.gecko;\\n\\nSortableTable.prototype.onsort = function () {};\\n\\n// default sort order. true -> descending, false -> ascending\\nSortableTable.prototype.defaultDescending = false;\\n\\n// shared between all instances. This is intentional to allow external files\\n// to modify the prototype\\nSortableTable.prototype._sortTypeInfo = {};\\n\\nSortableTable.prototype.setTable = function (oTable) {\\n\\tif ( this.tHead )\\n\\t\\tthis.uninitHeader();\\n\\tthis.element = oTable;\\n\\tthis.setTHead( oTable.tHead );\\n\\tthis.setTBody( oTable.tBodies[0] );\\n};\\n\\nSortableTable.prototype.setTHead = function (oTHead) {\\n\\tif (this.tHead && this.tHead != oTHead )\\n\\t\\tthis.uninitHeader();\\n\\tthis.tHead = oTHead;\\n\\tthis.initHeader( this.sortTypes );\\n};\\n\\nSortableTable.prototype.setTBody = function (oTBody) {\\n\\tthis.tBody = oTBody;\\n};\\n\\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\\n\\tif ( this.tHead )\\n\\t\\tthis.uninitHeader();\\n\\tthis.sortTypes = oSortTypes || [];\\n\\tif ( this.tHead )\\n\\t\\tthis.initHeader( this.sortTypes );\\n};\\n\\n// adds arrow containers and events\\n// also binds sort type to the header cells so that reordering columns does\\n// not break the sort types\\nSortableTable.prototype.initHeader = function (oSortTypes) {\\n\\tif (!this.tHead) return;\\n\\tvar cells = this.tHead.rows[0].cells;\\n\\tvar doc = this.tHead.ownerDocument || this.tHead.document;\\n\\tthis.sortTypes = oSortTypes || [];\\n\\tvar l = cells.length;\\n\\tvar img, c;\\n\\tfor (var i = 0; i < l; i++) {\\n\\t\\tc = cells[i];\\n\\t\\tif (this.sortTypes[i] != null && this.sortTypes[i] != \\\"None\\\") {\\n\\t\\t\\timg = doc.createElement(\\\"IMG\\\");\\n\\t\\t\\timg.src = \\\"images/blank.png\\\";\\n\\t\\t\\tc.appendChild(img);\\n\\t\\t\\tif (this.sortTypes[i] != null)\\n\\t\\t\\t\\tc._sortType = this.sortTypes[i];\\n\\t\\t\\tif (typeof c.addEventListener != \\\"undefined\\\")\\n\\t\\t\\t\\tc.addEventListener(\\\"click\\\", this._headerOnclick, false);\\n\\t\\t\\telse if (typeof c.attachEvent != \\\"undefined\\\")\\n\\t\\t\\t\\tc.attachEvent(\\\"onclick\\\", this._headerOnclick);\\n\\t\\t\\telse\\n\\t\\t\\t\\tc.onclick = this._headerOnclick;\\n\\t\\t}\\n\\t\\telse\\n\\t\\t{\\n\\t\\t\\tc.setAttribute( \\\"_sortType\\\", oSortTypes[i] );\\n\\t\\t\\tc._sortType = \\\"None\\\";\\n\\t\\t}\\n\\t}\\n\\tthis.updateHeaderArrows();\\n};\\n\\n// remove arrows and events\\nSortableTable.prototype.uninitHeader = function () {\\n\\tif (!this.tHead) return;\\n\\tvar cells = this.tHead.rows[0].cells;\\n\\tvar l = cells.length;\\n\\tvar c;\\n\\tfor (var i = 0; i < l; i++) {\\n\\t\\tc = cells[i];\\n\\t\\tif (c._sortType != null && c._sortType != \\\"None\\\") {\\n\\t\\t\\tc.removeChild(c.lastChild);\\n\\t\\t\\tif (typeof c.removeEventListener != \\\"undefined\\\")\\n\\t\\t\\t\\tc.removeEventListener(\\\"click\\\", this._headerOnclick, false);\\n\\t\\t\\telse if (typeof c.detachEvent != \\\"undefined\\\")\\n\\t\\t\\t\\tc.detachEvent(\\\"onclick\\\", this._headerOnclick);\\n\\t\\t\\tc._sortType = null;\\n\\t\\t\\tc.removeAttribute( \\\"_sortType\\\" );\\n\\t\\t}\\n\\t}\\n};\\n\\nSortableTable.prototype.updateHeaderArrows = function () {\\n\\tif (!this.tHead) return;\\n\\tvar cells = this.tHead.rows[0].cells;\\n\\tvar l = cells.length;\\n\\tvar img;\\n\\tfor (var i = 0; i < l; i++) {\\n\\t\\tif (cells[i]._sortType != null && cells[i]._sortType != \\\"None\\\") {\\n\\t\\t\\timg = cells[i].lastChild;\\n\\t\\t\\tif (i == this.sortColumn)\\n\\t\\t\\t\\timg.className = \\\"sort-arrow \\\" + (this.descending ? \\\"descending\\\" : \\\"ascending\\\");\\n\\t\\t\\telse\\n\\t\\t\\t\\timg.className = \\\"sort-arrow\\\";\\n\\t\\t}\\n\\t}\\n};\\n\\nSortableTable.prototype.headerOnclick = function (e) {\\n\\t// find TD element\\n\\tvar el = e.target || e.srcElement;\\n\\twhile (el.tagName != \\\"TD\\\")\\n\\t\\tel = el.parentNode;\\n\\n\\tthis.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\\n};\\n\\n// IE returns wrong cellIndex when columns are hidden\\nSortableTable.getCellIndex = function (oTd) {\\n\\tvar cells = oTd.parentNode.childNodes\\n\\tvar l = cells.length;\\n\\tvar i;\\n\\tfor (i = 0; cells[i] != oTd && i < l; i++)\\n\\t\\t;\\n\\treturn i;\\n};\\n\\nSortableTable.prototype.getSortType = function (nColumn) {\\n\\treturn this.sortTypes[nColumn] || \\\"String\\\";\\n};\\n\\n// only nColumn is required\\n// if bDescending is left out the old value is taken into account\\n// if sSortType is left out the sort type is found from the sortTypes array\\n\\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\\n\\tif (!this.tBody) return;\\n\\tif (sSortType == null)\\n\\t\\tsSortType = this.getSortType(nColumn);\\n\\n\\t// exit if None\\n\\tif (sSortType == \\\"None\\\")\\n\\t\\treturn;\\n\\n\\tif (bDescending == null) {\\n\\t\\tif (this.sortColumn != nColumn)\\n\\t\\t\\tthis.descending = this.defaultDescending;\\n\\t\\telse\\n\\t\\t\\tthis.descending = !this.descending;\\n\\t}\\n\\telse\\n\\t\\tthis.descending = bDescending;\\n\\n\\tthis.sortColumn = nColumn;\\n\\n\\tif (typeof this.onbeforesort == \\\"function\\\")\\n\\t\\tthis.onbeforesort();\\n\\n\\tvar f = this.getSortFunction(sSortType, nColumn);\\n\\tvar a = this.getCache(sSortType, nColumn);\\n\\tvar tBody = this.tBody;\\n\\n\\ta.sort(f);\\n\\n\\tif (this.descending)\\n\\t\\ta.reverse();\\n\\n\\tif (SortableTable.removeBeforeSort) {\\n\\t\\t// remove from doc\\n\\t\\tvar nextSibling = tBody.nextSibling;\\n\\t\\tvar p = tBody.parentNode;\\n\\t\\tp.removeChild(tBody);\\n\\t}\\n\\n\\t// insert in the new order\\n\\tvar l = a.length;\\n\\tfor (var i = 0; i < l; i++)\\n\\t\\ttBody.appendChild(a[i].element);\\n\\n\\tif (SortableTable.removeBeforeSort) {\\n\\t\\t// insert into doc\\n\\t\\tp.insertBefore(tBody, nextSibling);\\n\\t}\\n\\n\\tthis.updateHeaderArrows();\\n\\n\\tthis.destroyCache(a);\\n\\n\\tif (typeof this.onsort == \\\"function\\\")\\n\\t\\tthis.onsort();\\n};\\n\\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\\n\\tvar oThis = this;\\n\\tthis._asyncsort = function () {\\n\\t\\toThis.sort(nColumn, bDescending, sSortType);\\n\\t};\\n\\twindow.setTimeout(this._asyncsort, 1);\\n};\\n\\nSortableTable.prototype.getCache = function (sType, nColumn) {\\n\\tif (!this.tBody) return [];\\n\\tvar rows = this.tBody.rows;\\n\\tvar l = rows.length;\\n\\tvar a = new Array(l);\\n\\tvar r;\\n\\tfor (var i = 0; i < l; i++) {\\n\\t\\tr = rows[i];\\n\\t\\ta[i] = {\\n\\t\\t\\tvalue:\\t\\tthis.getRowValue(r, sType, nColumn),\\n\\t\\t\\telement:\\tr\\n\\t\\t};\\n\\t};\\n\\treturn a;\\n};\\n\\nSortableTable.prototype.destroyCache = function (oArray) {\\n\\tvar l = oArray.length;\\n\\tfor (var i = 0; i < l; i++) {\\n\\t\\toArray[i].value = null;\\n\\t\\toArray[i].element = null;\\n\\t\\toArray[i] = null;\\n\\t}\\n};\\n\\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\\n\\t// if we have defined a custom getRowValue use that\\n\\tif (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\\n\\t\\treturn this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\\n\\n\\tvar s;\\n\\tvar c = oRow.cells[nColumn];\\n\\tif (typeof c.innerText != \\\"undefined\\\")\\n\\t\\ts = c.innerText;\\n\\telse\\n\\t\\ts = SortableTable.getInnerText(c);\\n\\treturn this.getValueFromString(s, sType);\\n};\\n\\nSortableTable.getInnerText = function (oNode) {\\n\\tvar s = \\\"\\\";\\n\\tvar cs = oNode.childNodes;\\n\\tvar l = cs.length;\\n\\tfor (var i = 0; i < l; i++) {\\n\\t\\tswitch (cs[i].nodeType) {\\n\\t\\t\\tcase 1: //ELEMENT_NODE\\n\\t\\t\\t\\ts += SortableTable.getInnerText(cs[i]);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase 3:\\t//TEXT_NODE\\n\\t\\t\\t\\ts += cs[i].nodeValue;\\n\\t\\t\\t\\tbreak;\\n\\t\\t}\\n\\t}\\n\\treturn s;\\n};\\n\\nSortableTable.prototype.getValueFromString = function (sText, sType) {\\n\\tif (this._sortTypeInfo[sType])\\n\\t\\treturn this._sortTypeInfo[sType].getValueFromString( sText );\\n\\treturn sText;\\n\\t/*\\n\\tswitch (sType) {\\n\\t\\tcase \\\"Number\\\":\\n\\t\\t\\treturn Number(sText);\\n\\t\\tcase \\\"CaseInsensitiveString\\\":\\n\\t\\t\\treturn sText.toUpperCase();\\n\\t\\tcase \\\"Date\\\":\\n\\t\\t\\tvar parts = sText.split(\\\"-\\\");\\n\\t\\t\\tvar d = new Date(0);\\n\\t\\t\\td.setFullYear(parts[0]);\\n\\t\\t\\td.setDate(parts[2]);\\n\\t\\t\\td.setMonth(parts[1] - 1);\\n\\t\\t\\treturn d.valueOf();\\n\\t}\\n\\treturn sText;\\n\\t*/\\n\\t};\\n\\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\\n\\tif (this._sortTypeInfo[sType])\\n\\t\\treturn this._sortTypeInfo[sType].compare;\\n\\treturn SortableTable.basicCompare;\\n};\\n\\nSortableTable.prototype.destroy = function () {\\n\\tthis.uninitHeader();\\n\\tvar win = this.document.parentWindow;\\n\\tif (win && typeof win.detachEvent != \\\"undefined\\\") {\\t// only IE needs this\\n\\t\\twin.detachEvent(\\\"onunload\\\", this._onunload);\\n\\t}\\n\\tthis._onunload = null;\\n\\tthis.element = null;\\n\\tthis.tHead = null;\\n\\tthis.tBody = null;\\n\\tthis.document = null;\\n\\tthis._headerOnclick = null;\\n\\tthis.sortTypes = null;\\n\\tthis._asyncsort = null;\\n\\tthis.onsort = null;\\n};\\n\\n// Adds a sort type to all instance of SortableTable\\n// sType : String - the identifier of the sort type\\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\\n//    string and casts it to a desired format. If left out the string is just\\n//    returned\\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\\n//    compare function. Takes two values and compares them. If left out less than,\\n//    <, compare is used\\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\\n//    that takes the row and the column index and returns the value used to compare.\\n//    If left out then the innerText is first taken for the cell and then the\\n//    fGetValueFromString is used to convert that string the desired value and type\\n\\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\\n\\tthis._sortTypeInfo[sType] = {\\n\\t\\ttype:\\t\\t\\t\\tsType,\\n\\t\\tgetValueFromString:\\tfGetValueFromString || SortableTable.idFunction,\\n\\t\\tcompare:\\t\\t\\tfCompareFunction || SortableTable.basicCompare,\\n\\t\\tgetRowValue:\\t\\tfGetRowValue\\n\\t};\\n};\\n\\n// this removes the sort type from all instances of SortableTable\\nSortableTable.prototype.removeSortType = function (sType) {\\n\\tdelete this._sortTypeInfo[sType];\\n};\\n\\nSortableTable.basicCompare = function compare(n1, n2) {\\n\\tif (n1.value < n2.value)\\n\\t\\treturn -1;\\n\\tif (n2.value < n1.value)\\n\\t\\treturn 1;\\n\\treturn 0;\\n};\\n\\nSortableTable.idFunction = function (x) {\\n\\treturn x;\\n};\\n\\nSortableTable.toUpperCase = function (s) {\\n\\treturn s.toUpperCase();\\n};\\n\\nSortableTable.toDate = function (s) {\\n\\tvar parts = s.split(\\\"-\\\");\\n\\tvar d = new Date(0);\\n\\td.setFullYear(parts[0]);\\n\\td.setDate(parts[2]);\\n\\td.setMonth(parts[1] - 1);\\n\\treturn d.valueOf();\\n};\\n\\n\\n// add sort types\\nSortableTable.prototype.addSortType(\\\"Number\\\", Number);\\nSortableTable.prototype.addSortType(\\\"CaseInsensitiveString\\\", SortableTable.toUpperCase);\\nSortableTable.prototype.addSortType(\\\"Date\\\", SortableTable.toDate);\\nSortableTable.prototype.addSortType(\\\"String\\\");\\n// None is a special case\\n\"\n\n/***/ })\n\n});\n\n\n// WEBPACK FOOTER //\n// tf-0-9d658b4393a2055798cb.js","var map = {\n\t\"./array\": 70,\n\t\"./array.js\": 70,\n\t\"./const\": 15,\n\t\"./const.js\": 15,\n\t\"./cookie\": 116,\n\t\"./cookie.js\": 116,\n\t\"./dom\": 10,\n\t\"./dom.js\": 10,\n\t\"./emitter\": 109,\n\t\"./emitter.js\": 109,\n\t\"./event\": 19,\n\t\"./event.js\": 19,\n\t\"./extensions/advancedGrid/adapterEzEditTable\": 441,\n\t\"./extensions/advancedGrid/adapterEzEditTable.js\": 441,\n\t\"./extensions/advancedGrid/advancedGrid\": 443,\n\t\"./extensions/advancedGrid/advancedGrid.js\": 443,\n\t\"./extensions/colOps/colOps\": 444,\n\t\"./extensions/colOps/colOps.js\": 444,\n\t\"./extensions/colsVisibility/colsVisibility\": 445,\n\t\"./extensions/colsVisibility/colsVisibility.js\": 445,\n\t\"./extensions/filtersVisibility/filtersVisibility\": 446,\n\t\"./extensions/filtersVisibility/filtersVisibility.js\": 446,\n\t\"./extensions/sort/adapterSortabletable\": 442,\n\t\"./extensions/sort/adapterSortabletable.js\": 442,\n\t\"./extensions/sort/sort\": 447,\n\t\"./extensions/sort/sort.js\": 447,\n\t\"./feature\": 11,\n\t\"./feature.js\": 11,\n\t\"./modules/alternateRows\": 125,\n\t\"./modules/alternateRows.js\": 125,\n\t\"./modules/baseDropdown\": 69,\n\t\"./modules/baseDropdown.js\": 69,\n\t\"./modules/checkList\": 128,\n\t\"./modules/checkList.js\": 128,\n\t\"./modules/clearButton\": 124,\n\t\"./modules/clearButton.js\": 124,\n\t\"./modules/dateType\": 111,\n\t\"./modules/dateType.js\": 111,\n\t\"./modules/dropdown\": 110,\n\t\"./modules/dropdown.js\": 110,\n\t\"./modules/gridLayout\": 117,\n\t\"./modules/gridLayout.js\": 117,\n\t\"./modules/hash\": 114,\n\t\"./modules/hash.js\": 114,\n\t\"./modules/help\": 112,\n\t\"./modules/help.js\": 112,\n\t\"./modules/highlightKeywords\": 119,\n\t\"./modules/highlightKeywords.js\": 119,\n\t\"./modules/loader\": 118,\n\t\"./modules/loader.js\": 118,\n\t\"./modules/markActiveColumns\": 121,\n\t\"./modules/markActiveColumns.js\": 121,\n\t\"./modules/noResults\": 126,\n\t\"./modules/noResults.js\": 126,\n\t\"./modules/paging\": 127,\n\t\"./modules/paging.js\": 127,\n\t\"./modules/popupFilter\": 120,\n\t\"./modules/popupFilter.js\": 120,\n\t\"./modules/rowsCounter\": 122,\n\t\"./modules/rowsCounter.js\": 122,\n\t\"./modules/state\": 113,\n\t\"./modules/state.js\": 113,\n\t\"./modules/statusBar\": 123,\n\t\"./modules/statusBar.js\": 123,\n\t\"./modules/storage\": 115,\n\t\"./modules/storage.js\": 115,\n\t\"./modules/toolbar\": 33,\n\t\"./modules/toolbar.js\": 33,\n\t\"./number\": 68,\n\t\"./number.js\": 68,\n\t\"./root\": 16,\n\t\"./root.js\": 16,\n\t\"./settings\": 7,\n\t\"./settings.js\": 7,\n\t\"./sort\": 107,\n\t\"./sort.js\": 107,\n\t\"./string\": 21,\n\t\"./string.js\": 21,\n\t\"./tablefilter\": 108,\n\t\"./tablefilter.js\": 108,\n\t\"./types\": 3,\n\t\"./types.js\": 3\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 440;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src ^\\.\\/.*$\n// module id = 440\n// module chunks = 0","import {Feature} from '../../feature';\nimport {tag} from '../../dom';\nimport {INPUT} from '../../const';\nimport {defaultsStr} from '../../settings';\nimport {root} from '../../root';\n\nconst INSTANTIATION_ERROR = `Failed to instantiate EditTable object.\n    \\n\"ezEditTable\" dependency not found.`;\n\n/**\n * Adapter module for ezEditTable, an external library providing advanced\n * grid features (selection and edition):\n * http://codecanyon.net/item/ezedittable-enhance-html-tables/2425123?ref=koalyptus\n */\nexport default class AdapterEzEditTable extends Feature {\n\n    /**\n     * Creates an instance of AdapterEzEditTable\n     *\n     * @param {TableFilter} tf TableFilter instance\n     * @param {Object} cfg Configuration options for ezEditTable library\n     */\n    constructor(tf, cfg) {\n        super(tf, cfg.name);\n\n        /**\n         * Module description\n         * @type {String}\n         */\n        this.desc = defaultsStr(cfg.description, 'ezEditTable adapter');\n\n        /**\n         * Filename of ezEditTable library\n         * @type {String}\n         */\n        this.filename = defaultsStr(cfg.filename, 'ezEditTable.js');\n\n        /**\n         * Path to ezEditTable library\n         * @type {String}\n         */\n        this.vendorPath = cfg.vendor_path;\n\n        /**\n         * Load ezEditTable stylesheet\n         * @type {Boolean}\n         */\n        this.loadStylesheet = Boolean(cfg.load_stylesheet);\n\n        /**\n         * Path to ezEditTable stylesheet\n         * @type {String}\n         */\n        this.stylesheet = defaultsStr(cfg.stylesheet,\n            this.vendorPath + 'ezEditTable.css');\n\n        /**\n         * Name of ezEditTable stylesheet\n         * @type {String}\n         */\n        this.stylesheetName = defaultsStr(cfg.stylesheet_name,\n            'ezEditTableCss');\n\n        // Enable the ezEditTable's scroll into view behaviour if grid layout on\n        cfg.scroll_into_view = cfg.scroll_into_view === false ?\n            false : tf.gridLayout;\n\n        /**\n         * ezEditTable instance\n         * @type {EditTable}\n         * @private\n         */\n        this._ezEditTable = null;\n\n        /**\n         * ezEditTable configuration\n         * @private\n         */\n        this.cfg = cfg;\n\n        this.enable();\n    }\n\n    /**\n     * Conditionally load ezEditTable library and set advanced grid\n     */\n    init() {\n        if (this.initialized) {\n            return;\n        }\n        let tf = this.tf;\n        if (root.EditTable) {\n            this._setAdvancedGrid();\n        } else {\n            let path = this.vendorPath + this.filename;\n            tf.import(this.filename, path, () => this._setAdvancedGrid());\n        }\n        if (this.loadStylesheet && !tf.isImported(this.stylesheet, 'link')) {\n            tf.import(this.stylesheetName, this.stylesheet, null, 'link');\n        }\n\n        // TODO: hack to prevent ezEditTable enter key event hijaking.\n        // Needs to be fixed in the vendor's library\n        this.emitter.on(['filter-focus', 'filter-blur'],\n            () => this._toggleForInputFilter());\n\n        /**\n         * @inherited\n         */\n        this.initialized = true;\n    }\n\n    /**\n     * Instantiate ezEditTable component for advanced grid features\n     * @private\n     */\n    _setAdvancedGrid() {\n        let tf = this.tf;\n\n        //start row for EditTable constructor needs to be calculated\n        let startRow,\n            cfg = this.cfg,\n            thead = tag(tf.dom(), 'thead');\n\n        //if thead exists and startRow not specified, startRow is calculated\n        //automatically by EditTable\n        if (thead.length > 0 && !cfg.startRow) {\n            startRow = undefined;\n        }\n        //otherwise startRow config property if any or TableFilter refRow\n        else {\n            startRow = cfg.startRow || tf.refRow;\n        }\n\n        cfg.base_path = cfg.base_path || tf.basePath + 'ezEditTable/';\n        let editable = cfg.editable;\n        let selectable = cfg.selection;\n\n        if (selectable) {\n            cfg.default_selection = cfg.default_selection || 'row';\n        }\n        //CSS Styles\n        cfg.active_cell_css = cfg.active_cell_css || 'ezETSelectedCell';\n\n        let _lastValidRowIndex = 0;\n        let _lastRowIndex = 0;\n\n        if (selectable) {\n            //Row navigation needs to be calculated according to TableFilter's\n            //validRowsIndex array\n            let onAfterSelection = function (et, selectedElm, e) {\n                let slc = et.Selection;\n                //Next valid filtered row needs to be selected\n                let doSelect = function (nextRowIndex) {\n                    if (et.defaultSelection === 'row') {\n                        /* eslint-disable */\n                        slc.SelectRowByIndex(nextRowIndex);\n                        /* eslint-enable */\n                    } else {\n                        /* eslint-disable */\n                        et.ClearSelections();\n                        /* eslint-enable */\n                        let cellIndex = selectedElm.cellIndex,\n                            row = tf.dom().rows[nextRowIndex];\n                        if (et.defaultSelection === 'both') {\n                            /* eslint-disable */\n                            slc.SelectRowByIndex(nextRowIndex);\n                            /* eslint-enable */\n                        }\n                        if (row) {\n                            /* eslint-disable */\n                            slc.SelectCell(row.cells[cellIndex]);\n                            /* eslint-enable */\n                        }\n                    }\n                    //Table is filtered\n                    if (tf.validRowsIndex.length !== tf.getRowsNb()) {\n                        let r = tf.dom().rows[nextRowIndex];\n                        if (r) {\n                            r.scrollIntoView(false);\n                        }\n                        if (cell) {\n                            if (cell.cellIndex === (tf.getCellsNb() - 1) &&\n                                tf.gridLayout) {\n                                tf.tblCont.scrollLeft = 100000000;\n                            }\n                            else if (cell.cellIndex === 0 && tf.gridLayout) {\n                                tf.tblCont.scrollLeft = 0;\n                            } else {\n                                cell.scrollIntoView(false);\n                            }\n                        }\n                    }\n                };\n\n                //table is not filtered\n                if (!tf.validRowsIndex) {\n                    return;\n                }\n                let validIndexes = tf.validRowsIndex,\n                    validIdxLen = validIndexes.length,\n                    row = et.defaultSelection !== 'row' ?\n                        selectedElm.parentNode : selectedElm,\n                    //cell for default_selection = 'both' or 'cell'\n                    cell = selectedElm.nodeName === 'TD' ? selectedElm : null,\n                    /* eslint-disable */\n                    keyCode = e !== undefined ? et.Event.GetKey(e) : 0,\n                    /* eslint-enable */\n                    isRowValid = validIndexes.indexOf(row.rowIndex) !== -1,\n                    nextRowIndex,\n                    paging = tf.feature('paging'),\n                    //pgup/pgdown keys\n                    d = keyCode === 34 || keyCode === 33 ?\n                        (paging && paging.pageLength || et.nbRowsPerPage) :\n                        1;\n\n                //If next row is not valid, next valid filtered row needs to be\n                //calculated\n                if (!isRowValid) {\n                    //Selection direction up/down\n                    if (row.rowIndex > _lastRowIndex) {\n                        //last row\n                        if (row.rowIndex >= validIndexes[validIdxLen - 1]) {\n                            nextRowIndex = validIndexes[validIdxLen - 1];\n                        } else {\n                            let calcRowIndex = (_lastValidRowIndex + d);\n                            if (calcRowIndex > (validIdxLen - 1)) {\n                                nextRowIndex = validIndexes[validIdxLen - 1];\n                            } else {\n                                nextRowIndex = validIndexes[calcRowIndex];\n                            }\n                        }\n                    } else {\n                        //first row\n                        if (row.rowIndex <= validIndexes[0]) {\n                            nextRowIndex = validIndexes[0];\n                        } else {\n                            let v = validIndexes[_lastValidRowIndex - d];\n                            nextRowIndex = v ? v : validIndexes[0];\n                        }\n                    }\n                    _lastRowIndex = row.rowIndex;\n                    doSelect(nextRowIndex);\n                } else {\n                    //If filtered row is valid, special calculation for\n                    //pgup/pgdown keys\n                    if (keyCode !== 34 && keyCode !== 33) {\n                        _lastValidRowIndex = validIndexes.indexOf(row.rowIndex);\n                        _lastRowIndex = row.rowIndex;\n                    } else {\n                        if (keyCode === 34) { //pgdown\n                            //last row\n                            if ((_lastValidRowIndex + d) <= (validIdxLen - 1)) {\n                                nextRowIndex = validIndexes[\n                                    _lastValidRowIndex + d];\n                            } else {\n                                nextRowIndex = [validIdxLen - 1];\n                            }\n                        } else { //pgup\n                            //first row\n                            if ((_lastValidRowIndex - d) <= validIndexes[0]) {\n                                nextRowIndex = validIndexes[0];\n                            } else {\n                                nextRowIndex = validIndexes[\n                                    _lastValidRowIndex - d];\n                            }\n                        }\n                        _lastRowIndex = nextRowIndex;\n                        _lastValidRowIndex = validIndexes.indexOf(nextRowIndex);\n                        doSelect(nextRowIndex);\n                    }\n                }\n            };\n\n            //Page navigation has to be enforced whenever selected row is out of\n            //the current page range\n            let onBeforeSelection = function (et, selectedElm) {\n                let row = et.defaultSelection !== 'row' ?\n                    selectedElm.parentNode : selectedElm;\n                if (tf.paging) {\n                    if (tf.feature('paging').nbPages > 1) {\n                        let paging = tf.feature('paging');\n                        //page length is re-assigned in case it has changed\n                        et.nbRowsPerPage = paging.pageLength;\n                        let validIndexes = tf.validRowsIndex,\n                            validIdxLen = validIndexes.length,\n                            pagingEndRow = parseInt(paging.startPagingRow, 10) +\n                                parseInt(paging.pageLength, 10);\n                        let rowIndex = row.rowIndex;\n\n                        if ((rowIndex === validIndexes[validIdxLen - 1]) &&\n                            paging.currentPageNb !== paging.nbPages) {\n                            paging.setPage('last');\n                        }\n                        else if ((rowIndex === validIndexes[0]) &&\n                            paging.currentPageNb !== 1) {\n                            paging.setPage('first');\n                        }\n                        else if (rowIndex > validIndexes[pagingEndRow - 1] &&\n                            rowIndex < validIndexes[validIdxLen - 1]) {\n                            paging.setPage('next');\n                        }\n                        else if (\n                            rowIndex < validIndexes[paging.startPagingRow] &&\n                            rowIndex > validIndexes[0]) {\n                            paging.setPage('previous');\n                        }\n                    }\n                }\n            };\n\n            //Selected row needs to be visible when paging is activated\n            if (tf.paging) {\n                tf.feature('paging').onAfterChangePage = function (paging) {\n                    let advGrid = paging.tf.extension('advancedGrid');\n                    let et = advGrid._ezEditTable;\n                    let slc = et.Selection;\n                    /* eslint-disable */\n                    let row = slc.GetActiveRow();\n                    /* eslint-enable */\n                    if (row) {\n                        row.scrollIntoView(false);\n                    }\n                    /* eslint-disable */\n                    let cell = slc.GetActiveCell();\n                    /* eslint-enable */\n                    if (cell) {\n                        cell.scrollIntoView(false);\n                    }\n                };\n            }\n\n            //Rows navigation when rows are filtered is performed with the\n            //EditTable row selection callback events\n            if (cfg.default_selection === 'row') {\n                let fnB = cfg.on_before_selected_row;\n                cfg.on_before_selected_row = function () {\n                    var args = arguments;\n                    onBeforeSelection(args[0], args[1], args[2]);\n                    if (fnB) {\n                        fnB.call(null, args[0], args[1], args[2]);\n                    }\n                };\n                let fnA = cfg.on_after_selected_row;\n                cfg.on_after_selected_row = function () {\n                    var args = arguments;\n                    onAfterSelection(args[0], args[1], args[2]);\n                    if (fnA) {\n                        fnA.call(null, args[0], args[1], args[2]);\n                    }\n                };\n            } else {\n                let fnD = cfg.on_before_selected_cell;\n                cfg.on_before_selected_cell = function () {\n                    var args = arguments;\n                    onBeforeSelection(args[0], args[1], args[2]);\n                    if (fnD) {\n                        fnD.call(null, args[0], args[1], args[2]);\n                    }\n                };\n                let fnC = cfg.on_after_selected_cell;\n                cfg.on_after_selected_cell = function () {\n                    var args = arguments;\n                    onAfterSelection(args[0], args[1], args[2]);\n                    if (fnC) {\n                        fnC.call(null, args[0], args[1], args[2]);\n                    }\n                };\n            }\n        }\n        if (editable) {\n            //Added or removed rows, TF rows number needs to be re-calculated\n            let fnE = cfg.on_added_dom_row;\n            cfg.on_added_dom_row = function () {\n                var args = arguments;\n                tf.nbFilterableRows++;\n                if (!tf.paging) {\n                    tf.emitter.emit('rows-changed', tf, this);\n                } else {\n                    tf.nbFilterableRows++;\n                    tf.paging = false;\n                    tf.feature('paging').destroy();\n                    tf.feature('paging').reset();\n                }\n                if (tf.alternateRows) {\n                    tf.feature('alternateRows').init();\n                }\n                if (fnE) {\n                    fnE.call(null, args[0], args[1], args[2]);\n                }\n            };\n            if (cfg.actions && cfg.actions['delete']) {\n                let fnF = cfg.actions['delete'].on_after_submit;\n                cfg.actions['delete'].on_after_submit = function () {\n                    var args = arguments;\n                    tf.nbFilterableRows--;\n                    if (!tf.paging) {\n                        tf.emitter.emit('rows-changed', tf, this);\n                    } else {\n                        tf.nbFilterableRows--;\n                        tf.paging = false;\n                        tf.feature('paging').destroy();\n                        tf.feature('paging').reset(false);\n                    }\n                    if (tf.alternateRows) {\n                        tf.feature('alternateRows').init();\n                    }\n                    if (fnF) {\n                        fnF.call(null, args[0], args[1]);\n                    }\n                };\n            }\n        }\n\n        try {\n            /* eslint-disable */\n            this._ezEditTable = new EditTable(tf.id, cfg, startRow);\n            this._ezEditTable.Init();\n            /* eslint-enable */\n        } catch (e) { throw new Error(INSTANTIATION_ERROR); }\n\n        this.initialized = true;\n    }\n\n    /**\n     * Reset advanced grid when previously removed\n     */\n    reset() {\n        let ezEditTable = this._ezEditTable;\n        if (ezEditTable) {\n            if (this.cfg.selection) {\n                /* eslint-disable */\n                ezEditTable.Selection.Set();\n                /* eslint-enable */\n            }\n            if (this.cfg.editable) {\n                /* eslint-disable */\n                ezEditTable.Editable.Set();\n                /* eslint-enable */\n            }\n        }\n    }\n\n    /**\n     * Toggle behaviour\n     */\n    toggle() {\n        let ezEditTable = this._ezEditTable;\n        if (ezEditTable.editable) {\n            /* eslint-disable */\n            ezEditTable.Editable.Remove();\n            /* eslint-enable */\n        } else {\n            /* eslint-disable */\n            ezEditTable.Editable.Set();\n            /* eslint-enable */\n        }\n        if (ezEditTable.selection) {\n            /* eslint-disable */\n            ezEditTable.Selection.Remove();\n            /* eslint-enable */\n        } else {\n            /* eslint-disable */\n            ezEditTable.Selection.Set();\n            /* eslint-enable */\n        }\n    }\n\n    _toggleForInputFilter() {\n        let tf = this.tf;\n        if (!tf.getActiveFilterId()) {\n            return;\n        }\n        let colIndex = tf.getColumnIndexFromFilterId(tf.getActiveFilterId());\n        let filterType = tf.getFilterType(colIndex);\n        if (filterType === INPUT) {\n            this.toggle();\n        }\n    }\n\n    /**\n     * Remove advanced grid\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n        let ezEditTable = this._ezEditTable;\n        if (ezEditTable) {\n            if (this.cfg.selection) {\n                /* eslint-disable */\n                ezEditTable.Selection.ClearSelections();\n                ezEditTable.Selection.Remove();\n                /* eslint-enable */\n            }\n            if (this.cfg.editable) {\n                /* eslint-disable */\n                ezEditTable.Editable.Remove();\n                /* eslint-enable */\n            }\n        }\n\n        this.emitter.off(['filter-focus', 'filter-blur'],\n            () => this._toggleForInputFilter());\n        this.initialized = false;\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/extensions/advancedGrid/adapterEzEditTable.js","import {Feature} from '../../feature';\nimport {isUndef, isObj, EMPTY_FN} from '../../types';\nimport {createElm, elm, getText, tag} from '../../dom';\nimport {addEvt} from '../../event';\nimport {parse as parseNb} from '../../number';\nimport {\n    NONE, CELL_TAG, HEADER_TAG, STRING, NUMBER, DATE, FORMATTED_NUMBER,\n    IP_ADDRESS\n} from '../../const';\nimport {defaultsStr, defaultsFn, defaultsArr} from '../../settings';\n\n/**\n * SortableTable Adapter module\n */\nexport default class AdapterSortableTable extends Feature {\n\n    /**\n     * Creates an instance of AdapterSortableTable\n     * @param {TableFilter} tf TableFilter instance\n     * @param {Object} opts Configuration object\n     */\n    constructor(tf, opts) {\n        super(tf, opts.name);\n\n        /**\n         * Module name\n         * @type {String}\n         */\n        this.name = opts.name;\n\n        /**\n         * Module description\n         * @type {String}\n         */\n        this.desc = defaultsStr(opts.description, 'Sortable table');\n\n        /**\n         * Indicate whether table previously sorted\n         * @type {Boolean}\n         * @private\n         */\n        this.sorted = false;\n\n        /**\n         * List of sort type per column basis\n         * @type {Array}\n         */\n        this.sortTypes = defaultsArr(opts.types, tf.colTypes);\n\n        /**\n         * Column to be sorted at initialization, ie:\n         * sort_col_at_start: [1, true]\n         * @type {Array}\n         */\n        this.sortColAtStart = defaultsArr(opts.sort_col_at_start, null);\n\n        /**\n         * Enable asynchronous sort, if triggers are external\n         * @type {Boolean}\n         */\n        this.asyncSort = Boolean(opts.async_sort);\n\n        /**\n         * List of element IDs triggering sort on a per column basis\n         * @type {Array}\n         */\n        this.triggerIds = defaultsArr(opts.trigger_ids, []);\n\n        // edit .sort-arrow.descending / .sort-arrow.ascending in\n        // tablefilter.css to reflect any path change\n        /**\n         * Path to images\n         * @type {String}\n         */\n        this.imgPath = defaultsStr(opts.images_path, tf.themesPath);\n\n        /**\n         * Blank image file name\n         * @type {String}\n         */\n        this.imgBlank = defaultsStr(opts.image_blank, 'blank.png');\n\n        /**\n         * Css class for sort indicator image\n         * @type {String}\n         */\n        this.imgClassName = defaultsStr(opts.image_class_name, 'sort-arrow');\n\n        /**\n         * Css class for ascending sort indicator image\n         * @type {String}\n         */\n        this.imgAscClassName = defaultsStr(opts.image_asc_class_name,\n            'ascending');\n\n        /**\n         * Css class for descending sort indicator image\n         * @type {String}\n         */\n        this.imgDescClassName = defaultsStr(opts.image_desc_class_name,\n            'descending');\n\n        /**\n         * Cell attribute key storing custom value used for sorting\n         * @type {String}\n         */\n        this.customKey = defaultsStr(opts.custom_key, 'data-tf-sortKey');\n\n        /**\n         * Callback fired when sort extension is instanciated\n         * @type {Function}\n         */\n        this.onSortLoaded = defaultsFn(opts.on_sort_loaded, EMPTY_FN);\n\n        /**\n         * Callback fired before a table column is sorted\n         * @type {Function}\n         */\n        this.onBeforeSort = defaultsFn(opts.on_before_sort, EMPTY_FN);\n\n        /**\n         * Callback fired after a table column is sorted\n         * @type {Function}\n         */\n        this.onAfterSort = defaultsFn(opts.on_after_sort, EMPTY_FN);\n\n        /**\n         * SortableTable instance\n         * @private\n         */\n        this.stt = null;\n\n        this.enable();\n    }\n\n    /**\n     * Initializes AdapterSortableTable instance\n     */\n    init() {\n        if (this.initialized) {\n            return;\n        }\n        let tf = this.tf;\n        let adpt = this;\n\n        // SortableTable class sanity check (sortabletable.js)\n        if (isUndef(SortableTable)) {\n            throw new Error('SortableTable class not found.');\n        }\n\n        // Add any date format if needed\n        this.emitter.emit('add-date-type-formats', this.tf, this.sortTypes);\n\n        this.overrideSortableTable();\n        this.setSortTypes();\n\n        this.onSortLoaded(tf, this);\n\n        /*** SortableTable callbacks ***/\n        this.stt.onbeforesort = function () {\n            adpt.onBeforeSort(tf, adpt.stt.sortColumn);\n\n            /*** sort behaviour for paging ***/\n            if (tf.paging) {\n                tf.feature('paging').disable();\n            }\n        };\n\n        this.stt.onsort = function () {\n            adpt.sorted = true;\n\n            //sort behaviour for paging\n            if (tf.paging) {\n                let paginator = tf.feature('paging');\n                // recalculate valid rows index as sorting may have change it\n                tf.getValidRows(true);\n                paginator.enable();\n                paginator.setPage(paginator.getPage());\n            }\n\n            adpt.onAfterSort(tf, adpt.stt.sortColumn, adpt.stt.descending);\n            adpt.emitter.emit('column-sorted', tf, adpt.stt.sortColumn,\n                adpt.stt.descending);\n        };\n\n        // Column sort at start\n        let sortColAtStart = adpt.sortColAtStart;\n        if (sortColAtStart) {\n            this.stt.sort(sortColAtStart[0], sortColAtStart[1]);\n        }\n\n        this.emitter.on(['sort'],\n            (tf, colIdx, desc) => this.sortByColumnIndex(colIdx, desc));\n\n        /** @inherited */\n        this.initialized = true;\n\n        this.emitter.emit('sort-initialized', tf, this);\n    }\n\n    /**\n     * Sort specified column\n     * @param {Number} colIdx Column index\n     * @param {Boolean} desc Optional: descending manner\n     */\n    sortByColumnIndex(colIdx, desc) {\n        this.stt.sort(colIdx, desc);\n    }\n\n    /**\n     * Set SortableTable overrides for TableFilter integration\n     */\n    overrideSortableTable() {\n        let adpt = this,\n            tf = this.tf;\n\n        /**\n         * Overrides headerOnclick method in order to handle th event\n         * @param  {Object} e [description]\n         */\n        SortableTable.prototype.headerOnclick = function (evt) {\n            if (!adpt.initialized) {\n                return;\n            }\n\n            // find Header element\n            let el = evt.target || evt.srcElement;\n\n            while (el.tagName !== CELL_TAG && el.tagName !== HEADER_TAG) {\n                el = el.parentNode;\n            }\n\n            this.sort(\n                SortableTable.msie ?\n                    SortableTable.getCellIndex(el) : el.cellIndex\n            );\n        };\n\n        /**\n         * Overrides getCellIndex IE returns wrong cellIndex when columns are\n         * hidden\n         * @param  {Object} oTd TD element\n         * @return {Number}     Cell index\n         */\n        SortableTable.getCellIndex = function (oTd) {\n            let cells = oTd.parentNode.cells,\n                l = cells.length, i;\n            for (i = 0; cells[i] !== oTd && i < l; i++) { }\n            return i;\n        };\n\n        /**\n         * Overrides initHeader in order to handle filters row position\n         * @param  {Array} oSortTypes\n         */\n        SortableTable.prototype.initHeader = function (oSortTypes) {\n            let stt = this;\n            if (!stt.tHead) {\n                if (tf.gridLayout) {\n                    stt.tHead = tf.feature('gridLayout').headTbl.tHead;\n                } else {\n                    return;\n                }\n            }\n\n            stt.headersRow = tf.headersRow;\n            let cells = stt.tHead.rows[stt.headersRow].cells;\n            stt.sortTypes = oSortTypes || [];\n            let l = cells.length;\n            let img, c;\n\n            for (let i = 0; i < l; i++) {\n                c = cells[i];\n                if (stt.sortTypes[i] !== null && stt.sortTypes[i] !== 'None') {\n                    c.style.cursor = 'pointer';\n                    img = createElm('img',\n                        ['src', adpt.imgPath + adpt.imgBlank]);\n                    c.appendChild(img);\n                    if (stt.sortTypes[i] !== null) {\n                        c.setAttribute('_sortType', stt.sortTypes[i]);\n                    }\n                    addEvt(c, 'click', stt._headerOnclick);\n                } else {\n                    c.setAttribute('_sortType', oSortTypes[i]);\n                    c._sortType = 'None';\n                }\n            }\n            stt.updateHeaderArrows();\n        };\n\n        /**\n         * Overrides updateHeaderArrows in order to handle arrows indicators\n         */\n        SortableTable.prototype.updateHeaderArrows = function () {\n            let stt = this;\n            let cells, l, img;\n\n            // external headers\n            if (adpt.asyncSort && adpt.triggerIds.length > 0) {\n                let triggers = adpt.triggerIds;\n                cells = [];\n                l = triggers.length;\n                for (let j = 0; j < l; j++) {\n                    cells.push(elm(triggers[j]));\n                }\n            } else {\n                if (!this.tHead) {\n                    return;\n                }\n                cells = stt.tHead.rows[stt.headersRow].cells;\n                l = cells.length;\n            }\n            for (let i = 0; i < l; i++) {\n                let cell = cells[i];\n                if (!cell) {\n                    continue;\n                }\n                let cellAttr = cell.getAttribute('_sortType');\n                if (cellAttr !== null && cellAttr !== 'None') {\n                    img = cell.lastChild || cell;\n                    if (img.nodeName.toLowerCase() !== 'img') {\n                        img = createElm('img',\n                            ['src', adpt.imgPath + adpt.imgBlank]);\n                        cell.appendChild(img);\n                    }\n                    if (i === stt.sortColumn) {\n                        img.className = adpt.imgClassName + ' ' +\n                            (this.descending ?\n                                adpt.imgDescClassName :\n                                adpt.imgAscClassName);\n                    } else {\n                        img.className = adpt.imgClassName;\n                    }\n                }\n            }\n        };\n\n        /**\n         * Overrides getRowValue for custom key value feature\n         * @param  {Object} oRow    Row element\n         * @param  {String} sType\n         * @param  {Number} nColumn\n         * @return {String}\n         */\n        SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\n            let stt = this;\n            // if we have defined a custom getRowValue use that\n            let sortTypeInfo = stt._sortTypeInfo[sType];\n            if (sortTypeInfo && sortTypeInfo.getRowValue) {\n                return sortTypeInfo.getRowValue(oRow, nColumn);\n            }\n            let c = oRow.cells[nColumn];\n            let s = SortableTable.getInnerText(c);\n            return stt.getValueFromString(s, sType);\n        };\n\n        /**\n         * Overrides getInnerText in order to avoid Firefox unexpected sorting\n         * behaviour with untrimmed text elements\n         * @param  {Object} oNode DOM element\n         * @return {String}       DOM element inner text\n         */\n        SortableTable.getInnerText = function (oNode) {\n            if (!oNode) {\n                return;\n            }\n            if (oNode.getAttribute(adpt.customKey)) {\n                return oNode.getAttribute(adpt.customKey);\n            } else {\n                return getText(oNode);\n            }\n        };\n    }\n\n    /**\n     * Adds a sort type\n     */\n    addSortType(...args) {\n        // Extract the arguments\n        let [id, caster, sorter] = args;\n        SortableTable.prototype.addSortType(id, caster, sorter);\n    }\n\n    /**\n     * Sets the sort types on a column basis\n     * @private\n     */\n    setSortTypes() {\n        let tf = this.tf,\n            sortTypes = this.sortTypes,\n            _sortTypes = [];\n\n        tf.eachCol((i) => {\n            let colType;\n            if (sortTypes[i]) {\n                colType = sortTypes[i];\n                if (isObj(colType)) {\n                    if (colType.type === DATE) {\n                        colType = this._addDateType(i, sortTypes);\n                    }\n                    else if (colType.type === FORMATTED_NUMBER) {\n                        let decimal = colType.decimal || tf.decimalSeparator;\n                        colType = this._addNumberType(i, decimal);\n                    }\n                } else {\n                    colType = colType.toLowerCase();\n                    if (colType === DATE) {\n                        colType = this._addDateType(i, sortTypes);\n                    }\n                    else if (colType === FORMATTED_NUMBER ||\n                        colType === NUMBER) {\n                        colType = this._addNumberType(i, tf.decimalSeparator);\n                    }\n                    else if (colType === NONE) {\n                        // TODO: normalise 'none' vs 'None'\n                        colType = 'None';\n                    }\n                }\n            } else {\n                colType = STRING;\n            }\n            _sortTypes.push(colType);\n        });\n\n        //Public TF method to add sort type\n\n        //Custom sort types\n        this.addSortType('caseinsensitivestring', SortableTable.toUpperCase);\n        this.addSortType(STRING);\n        this.addSortType(IP_ADDRESS, ipAddress, sortIP);\n\n        this.stt = new SortableTable(tf.dom(), _sortTypes);\n\n        /*** external table headers adapter ***/\n        if (this.asyncSort && this.triggerIds.length > 0) {\n            let triggers = this.triggerIds;\n            for (let j = 0; j < triggers.length; j++) {\n                if (triggers[j] === null) {\n                    continue;\n                }\n                let trigger = elm(triggers[j]);\n                if (trigger) {\n                    trigger.style.cursor = 'pointer';\n\n                    addEvt(trigger, 'click', (evt) => {\n                        let elm = evt.target;\n                        if (!this.tf.sort) {\n                            return;\n                        }\n                        this.stt.asyncSort(triggers.indexOf(elm.id));\n                    });\n                    trigger.setAttribute('_sortType', _sortTypes[j]);\n                }\n            }\n        }\n    }\n\n    _addDateType(colIndex, types) {\n        let tf = this.tf;\n        let dateType = tf.feature('dateType');\n        let locale = dateType.getOptions(colIndex, types).locale || tf.locale;\n        let colType = `${DATE}-${locale}`;\n\n        this.addSortType(colType, (value) => {\n            let parsedDate = dateType.parse(value, locale);\n            // Invalid date defaults to Wed Feb 04 -768 11:00:00\n            return isNaN(+parsedDate) ? new Date(-86400000000000) : parsedDate;\n        });\n        return colType;\n    }\n\n    _addNumberType(colIndex, decimal) {\n        let colType = `${FORMATTED_NUMBER}${decimal === '.' ? '' : '-custom'}`;\n\n        this.addSortType(colType, (value) => {\n            return parseNb(value, decimal);\n        });\n        return colType;\n    }\n\n    /**\n     * Remove extension\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n        let tf = this.tf;\n        this.emitter.off(['sort'],\n            (tf, colIdx, desc) => this.sortByColumnIndex(colIdx, desc));\n        this.sorted = false;\n        this.stt.destroy();\n\n        let ids = tf.getFiltersId();\n        for (let idx = 0; idx < ids.length; idx++) {\n            let header = tf.getHeaderElement(idx);\n            let img = tag(header, 'img');\n\n            if (img.length === 1) {\n                header.removeChild(img[0]);\n            }\n        }\n        this.initialized = false;\n    }\n\n}\n\n//Converters\nfunction ipAddress(value) {\n    let vals = value.split('.');\n    for (let x in vals) {\n        let val = vals[x];\n        while (3 > val.length) {\n            val = '0' + val;\n        }\n        vals[x] = val;\n    }\n    return vals.join('.');\n}\n\nfunction sortIP(a, b) {\n    let aa = ipAddress(a.value.toLowerCase());\n    let bb = ipAddress(b.value.toLowerCase());\n    if (aa === bb) {\n        return 0;\n    } else if (aa < bb) {\n        return -1;\n    } else {\n        return 1;\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/extensions/sort/adapterSortabletable.js","import AdapterEzEditTable from './adapterEzEditTable';\n\nexport default AdapterEzEditTable;\n\n\n// WEBPACK FOOTER //\n// ./src/extensions/advancedGrid/advancedGrid.js","import {Feature} from '../../feature';\nimport {createText, elm} from '../../dom';\nimport {isArray, isEmpty, EMPTY_FN} from '../../types';\nimport {numSortAsc} from '../../sort';\nimport {FORMATTED_NUMBER} from '../../const';\nimport formatNumber from 'format-number';\nimport {defaultsFn, defaultsArr} from '../../settings';\n\nconst EVENTS = [\n    'after-filtering',\n    'after-page-change',\n    'after-page-length-change'\n];\n\nconst SUM = 'sum';\nconst MEAN = 'mean';\nconst MIN = 'min';\nconst MAX = 'max';\nconst MEDIAN = 'median';\nconst Q1 = 'q1';\nconst Q3 = 'q3';\n\n/**\n * Column calculations extension\n */\nexport default class ColOps extends Feature {\n\n    /**\n     * Creates an instance of ColOps\n     *\n     * @param {TableFilter} tf TableFilter instance\n     * @param {Object} opts Configuration object\n     */\n    constructor(tf, opts) {\n        super(tf, opts.name);\n\n        /**\n         * Callback fired before columns operations start\n         * @type {Function}\n         */\n        this.onBeforeOperation = defaultsFn(opts.on_before_operation, EMPTY_FN);\n\n        /**\n         * Callback fired after columns operations are completed\n         * @type {Function}\n         */\n        this.onAfterOperation = defaultsFn(opts.on_after_operation, EMPTY_FN);\n\n        /**\n         * Configuration options\n         * @type {Object}\n         */\n        this.opts = opts;\n\n        /**\n         * List of DOM element IDs containing column's calculation result\n         * @type {Array}\n         */\n        this.labelIds = defaultsArr(opts.id, []);\n\n        /**\n         * List of columns' indexes for calculations\n         * @type {Array}\n         */\n        this.colIndexes = defaultsArr(opts.col, []);\n\n        /**\n         * List of operations - possible values: 'sum', 'mean', 'min', 'max',\n         * 'median', 'q1', 'q3'\n         * @type {Array}\n         */\n        this.operations = defaultsArr(opts.operation, []);\n\n        /**\n         * List of write methods used to write the result - possible values:\n         * 'innerHTML', 'setValue', 'createTextNode'\n         * @type {Array}\n         */\n        this.outputTypes = defaultsArr(opts.write_method, []);\n\n        /**\n         * List of format objects used for formatting the result -\n         * refer to https://github.com/componitable/format-number to check\n         * configuration options\n         * @type {Array}\n         */\n        this.formatResults = defaultsArr(opts.format_result, []);\n\n        /**\n         * List of row indexes displaying the results\n         * @type {Array}\n         */\n        this.totRowIndexes = defaultsArr(opts.tot_row_index, []);\n\n        /**\n         * List of row indexes excluded from calculations\n         * @type {Array}\n         */\n        this.excludeRows = defaultsArr(opts.exclude_row, []);\n\n        /**\n         * List of decimal precision for calculation results\n         * @type {Array}\n         */\n        this.decimalPrecisions = defaultsArr(opts.decimal_precision, 2);\n\n        this.enable();\n    }\n\n    /**\n     * Initializes ColOps instance\n     */\n    init() {\n        if (this.initialized) {\n            return;\n        }\n        // subscribe to events\n        this.emitter.on(EVENTS, () => this.calcAll());\n\n        this.calcAll();\n\n        /** @inherited */\n        this.initialized = true;\n    }\n\n    /**\n     * Calculates columns' values\n     * Configuration options are stored in 'opts' property\n     * - 'id' contains ids of elements showing result (array)\n     * - 'col' contains the columns' indexes (array)\n     * - 'operation' contains operation type (array, values: 'sum', 'mean',\n     *   'min', 'max', 'median', 'q1', 'q3')\n     * - 'write_method' array defines which method to use for displaying the\n     *    result (innerHTML, setValue, createTextNode) - default: 'innerHTML'\n     * - 'tot_row_index' defines in which row results are displayed\n     *   (integers array)\n     *\n     * - changes made by Nuovella:\n     * (1) optimized the routine (now it will only process each column once),\n     * (2) added calculations for the median, lower and upper quartile.\n     */\n    calcAll() {\n        let tf = this.tf;\n        if (!tf.isInitialized()) {\n            return;\n        }\n\n        this.onBeforeOperation(tf, this);\n        this.emitter.emit('before-column-operation', tf, this);\n\n        let { colIndexes, operations: colOperations, outputTypes,\n            totRowIndexes, excludeRows, formatResults,\n            decimalPrecisions } = this;\n\n        //nuovella: determine unique list of columns to operate on\n        let uIndexes = [];\n        colIndexes.forEach((val) => {\n            if (uIndexes.indexOf(val) === -1) {\n                uIndexes.push(val);\n            }\n        });\n\n        let nbCols = uIndexes.length,\n            rows = tf.dom().rows,\n            colValues = [];\n\n        for (let u = 0; u < nbCols; u++) {\n            //this retrieves col values\n            //use uIndexes because we only want to pass through this loop\n            //once for each column get the values in this unique column\n            colValues.push(\n                tf.getVisibleColumnData(uIndexes[u], false, excludeRows)\n            );\n\n            let curValues = colValues[u];\n\n            //next: calculate all operations for this column\n            let result = 0,\n                operations = [],\n                precisions = [],\n                labels = [],\n                writeType,\n                formatResult = [],\n                idx = 0;\n\n            for (let k = 0; k < colIndexes.length; k++) {\n                if (colIndexes[k] !== uIndexes[u]) {\n                    continue;\n                }\n                operations[idx] = (colOperations[k] || 'sum').toLowerCase();\n                precisions[idx] = decimalPrecisions[k];\n                labels[idx] = this.labelIds[k];\n                writeType = isArray(outputTypes) ? outputTypes[k] : null;\n                formatResult[idx] =\n                    this.configureFormat(uIndexes[u], formatResults[k]);\n                idx++;\n            }\n\n            for (let i = 0; i < idx; i++) {\n                // emit values before column calculation\n                this.emitter.emit(\n                    'before-column-calc',\n                    tf,\n                    this,\n                    uIndexes[u],\n                    curValues,\n                    operations[i],\n                    precisions[i]\n                );\n\n                result = Number(this.calc(curValues, operations[i], null));\n\n                // emit column calculation result\n                this.emitter.emit(\n                    'column-calc',\n                    tf,\n                    this,\n                    uIndexes[u],\n                    result,\n                    operations[i],\n                    precisions[i]\n                );\n\n                // write result in expected DOM element\n                this.writeResult(\n                    result,\n                    labels[i],\n                    writeType,\n                    precisions[i],\n                    formatResult[i]\n                );\n\n            }//for i\n\n            // row(s) with result are always visible\n            let totRow = totRowIndexes && totRowIndexes[u] ?\n                rows[totRowIndexes[u]] : null;\n            if (totRow) {\n                totRow.style.display = '';\n            }\n        }//for u\n\n        this.onAfterOperation(tf, this);\n        this.emitter.emit('after-column-operation', tf, this);\n    }\n\n    /**\n     * Make desired calculation on specified column.\n     * @param {Number} colIndex Column index\n     * @param {String} [operation=SUM] Operation type\n     * @param {Number} precision Decimal precision\n     * @returns {Number}\n     */\n    columnCalc(colIndex, operation = SUM, precision) {\n        let excludeRows = this.excludeRows || [];\n        let colValues = tf.getVisibleColumnData(colIndex, false, excludeRows);\n\n        return Number(this.calc(colValues, operation, precision));\n    }\n\n    /**\n     * Make calculation on passed values.\n     * @param {Array} values List of values\n     * @param {String} [operation=SUM] Optional operation type\n     * @param {Number} precision Optional result precision\n     * @returns {Number}\n     * @private\n     */\n    calc(colValues, operation = SUM, precision) {\n        let result = 0;\n\n        if (operation === Q1 || operation === Q3 || operation === MEDIAN) {\n            colValues = this.sortColumnValues(colValues, numSortAsc);\n        }\n\n        switch (operation) {\n            case MEAN:\n                result = this.calcMean(colValues);\n                break;\n            case SUM:\n                result = this.calcSum(colValues);\n                break;\n            case MIN:\n                result = this.calcMin(colValues);\n                break;\n            case MAX:\n                result = this.calcMax(colValues);\n                break;\n            case MEDIAN:\n                result = this.calcMedian(colValues);\n                break;\n            case Q1:\n                result = this.calcQ1(colValues);\n                break;\n            case Q3:\n                result = this.calcQ3(colValues);\n                break;\n        }\n\n        return isEmpty(precision) ? result : result.toFixed(precision);\n    }\n\n    /**\n     * Calculate the sum of passed values.\n     * @param {Array} [values=[]] List of values\n     * @returns {Number}\n     */\n    calcSum(values = []) {\n        if (isEmpty(values)) {\n            return 0;\n        }\n        let result = values.reduce((x, y) => Number(x) + Number(y));\n        return result;\n    }\n\n    /**\n     * Calculate the mean of passed values.\n     * @param {Array} [values=[]] List of values\n     * @returns {Number}\n     */\n    calcMean(values = []) {\n        let result = this.calcSum(values) / values.length;\n        return Number(result);\n    }\n\n    /**\n     * Calculate the max value of passed values.\n     * @param {Array} [values=[]] List of values\n     * @returns {Number}\n     */\n    calcMax(values = []) {\n        return Math.max.apply(null, values);\n    }\n\n    /**\n     * Calculate the min value of passed values.\n     * @param {Array} [values=[]] List of values\n     * @returns {Number}\n     */\n    calcMin(values = []) {\n        return Math.min.apply(null, values);\n    }\n\n    /**\n     * Calculate the median of passed values.\n     * @param {Array} [values=[]] List of values\n     * @returns {Number}\n     */\n    calcMedian(values = []) {\n        let nbValues = values.length;\n        let aux = 0;\n        if (nbValues % 2 === 1) {\n            aux = Math.floor(nbValues / 2);\n            return Number(values[aux]);\n        }\n        return (Number(values[nbValues / 2]) +\n            Number(values[((nbValues / 2) - 1)])) / 2;\n    }\n\n    /**\n     * Calculate the lower quartile of passed values.\n     * @param {Array} [values=[]] List of values\n     * @returns {Number}\n     */\n    calcQ1(values = []) {\n        let nbValues = values.length;\n        let posa = 0.0;\n        posa = Math.floor(nbValues / 4);\n        if (4 * posa === nbValues) {\n            return (Number(values[posa - 1]) +\n                Number(values[posa])) / 2;\n        }\n        return Number(values[posa]);\n    }\n\n    /**\n     * Calculate the upper quartile of passed values.\n     * @param {Array} [values=[]] List of values\n     * @returns {Number}\n     */\n    calcQ3(values = []) {\n        let nbValues = values.length;\n        let posa = 0.0;\n        let posb = 0.0;\n        posa = Math.floor(nbValues / 4);\n        if (4 * posa === nbValues) {\n            posb = 3 * posa;\n            return (Number(values[posb]) +\n                Number(values[posb - 1])) / 2;\n        }\n        return Number(values[nbValues - posa - 1]);\n    }\n\n    /**\n     * Sort passed values with supplied sorter function.\n     * @param {Array} [values=[]] List of values to be sorted\n     * @param {Function} sorter Sorter function\n     * @returns {Array}\n     */\n    sortColumnValues(values = [], sorter) {\n        return values.sort(sorter);\n    }\n\n    /**\n     * Write calculation result in passed DOM element with supplied write method\n     * and decimal precision.\n     * @param {Number} [result=0] Calculation result\n     * @param {DOMElement} label DOM element\n     * @param {String} [writeType='innerhtml'] Write method\n     * @param {Number} [precision=2] Applied decimal precision\n     * @private\n     */\n    writeResult(result = 0, label, writeType = 'innerhtml',\n        precision = 2, format = {}) {\n        let labelElm = elm(label);\n\n        if (!labelElm) {\n            return;\n        }\n\n        result = result.toFixed(precision);\n        if (isNaN(result) || !isFinite(result)) {\n            result = '';\n        } else {\n            result = formatNumber(format)(result);\n        }\n\n        switch (writeType.toLowerCase()) {\n            case 'innerhtml':\n                labelElm.innerHTML = result;\n                break;\n            case 'setvalue':\n                labelElm.value = result;\n                break;\n            case 'createtextnode':\n                let oldNode = labelElm.firstChild;\n                let txtNode = createText(result);\n                labelElm.replaceChild(txtNode, oldNode);\n                break;\n        }\n    }\n\n    /**\n     * Configure the format options used to format the operation result based\n     * on column type.\n     * @param {Number} colIndex Column index\n     * @param {Object} [format={}] Format object\n     * @returns {Object}\n     * @private\n     */\n    configureFormat(colIndex, format = {}) {\n        let tf = this.tf;\n        if (tf.hasType(colIndex, [FORMATTED_NUMBER])) {\n            let colType = tf.colTypes[colIndex];\n            if (colType.decimal && !format.decimal) {\n                format.decimal = colType.decimal;\n            }\n            if (colType.thousands && !format.integerSeparator) {\n                format.integerSeparator = colType.thousands;\n            }\n        } else {\n            format.decimal = format.decimal || '';\n            format.integerSeparator = format.integerSeparator || '';\n        }\n        return format;\n    }\n\n    /** Remove extension */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n        // unsubscribe to events\n        this.emitter.off(EVENTS, () => this.calcAll());\n\n        this.initialized = false;\n    }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/extensions/colOps/colOps.js","import {Feature} from '../../feature';\nimport {\n    addClass, removeClass, createCheckItem, createElm, elm, removeElm,\n    getText, tag\n} from '../../dom';\nimport {isUndef, EMPTY_FN, isNull} from '../../types';\nimport {addEvt, targetEvt, removeEvt} from '../../event';\nimport {root} from '../../root';\nimport {NONE} from '../../const';\nimport {\n    defaultsBool, defaultsStr, defaultsFn, defaultsNb, defaultsArr\n} from '../../settings';\nimport {RIGHT} from '../../modules/toolbar';\n\n/**\n * Columns Visibility extension\n */\nexport default class ColsVisibility extends Feature {\n\n    /**\n     * Creates an instance of ColsVisibility\n     * @param {TableFilter} tf TableFilter instance\n     * @param {Object} Configuration object\n     */\n    constructor(tf, f) {\n        super(tf, f.name);\n\n        // Configuration object\n        let cfg = this.config;\n\n        /**\n         * Module name\n         * @type {String}\n         */\n        this.name = f.name;\n\n        /**\n         * Module description\n         * @type {String}\n         */\n        this.desc = defaultsStr(f.description, 'Columns visibility manager');\n\n        /**\n         * show/hide columns container element\n         * @private\n         */\n        this.spanEl = null;\n\n        /**\n         * show/hide columns button element\n         * @private\n         */\n        this.btnEl = null;\n\n        /**\n         * show/hide columns main container element\n         * @private\n         */\n        this.contEl = null;\n\n        /**\n         * Enable tick to hide a column, defaults to true\n         * @type {Boolean}\n         */\n        this.tickToHide = defaultsBool(f.tick_to_hide, true);\n\n        /**\n         * Enable columns manager UI, defaults to true\n         * @type {Boolean}\n         */\n        this.manager = defaultsBool(f.manager, true);\n\n        /**\n         * Headers HTML table reference only if headers are external\n         * @type {DOMElement}\n         */\n        this.headersTbl = f.headers_table || null;\n\n        /**\n         * Headers row index only if headers are external\n         * @type {Number}\n         */\n        this.headersIndex = defaultsNb(f.headers_index, 1);\n\n        /**\n         * ID of main container element\n         * @type {String}\n         */\n        this.contElTgtId = defaultsStr(f.container_target_id, null);\n\n        /**\n         * Alternative text for column headers in column manager UI\n         * @type {Array}\n         */\n        this.headersText = defaultsArr(f.headers_text, []);\n\n        /**\n         * ID of button's container element\n         * @type {String}\n         */\n        this.btnTgtId = defaultsStr(f.btn_target_id, null);\n\n        /**\n         * Button's text, defaults to Columns▼\n         * @type {String}\n         */\n        this.btnText = defaultsStr(f.btn_text, 'Columns▼');\n\n        /**\n         * Button's inner HTML\n         * @type {String}\n         */\n        this.btnHtml = defaultsStr(f.btn_html, null);\n\n        /**\n         * Css class for button\n         * @type {String}\n         */\n        this.btnCssClass = defaultsStr(f.btn_css_class, 'colVis');\n\n        /**\n         * Columns manager UI close link text, defaults to 'Close'\n         * @type {String}\n         */\n        this.btnCloseText = defaultsStr(f.btn_close_text, 'Close');\n\n        /**\n         * Columns manager UI close link HTML\n         * @type {String}\n         */\n        this.btnCloseHtml = defaultsStr(f.btn_close_html, null);\n\n        /**\n         * Css for columns manager UI close link\n         * @type {String}\n         */\n        this.btnCloseCssClass = defaultsStr(f.btn_close_css_class,\n            this.btnCssClass);\n\n        /**\n         * Extension's stylesheet filename\n         * @type {String}\n         */\n        this.stylesheet = defaultsStr(f.stylesheet, 'colsVisibility.css');\n\n        /**\n         * Css for columns manager UI span\n         * @type {String}\n         */\n        this.spanCssClass = defaultsStr(f.span_css_class, 'colVisSpan');\n\n        /**\n         * Css for columns manager UI main container\n         * @type {String}\n         */\n        this.contCssClass = defaultsStr(f.cont_css_class, 'colVisCont');\n\n        /**\n         * Css for columns manager UI checklist (ul)\n         * @type {String}\n         */\n        this.listCssClass = defaultsStr(cfg.list_css_class, 'cols_checklist');\n\n        /**\n         * Css for columns manager UI checklist item (li)\n         * @type {String}\n         */\n        this.listItemCssClass = defaultsStr(cfg.checklist_item_css_class,\n            'cols_checklist_item');\n\n        /**\n         * Css for columns manager UI checklist item selected state (li)\n         * @type {String}\n         */\n        this.listSlcItemCssClass = defaultsStr(\n            cfg.checklist_selected_item_css_class,\n            'cols_checklist_slc_item'\n        );\n\n        /**\n         * Text preceding the columns list, defaults to 'Hide' or 'Show'\n         * depending on tick mode (tick_to_hide option)\n         * @type {String}\n         */\n        this.text = defaultsStr(f.text, this.tickToHide ? 'Hide: ' : 'Show: ');\n\n        /**\n         * List of columns indexes to be hidden at initialization\n         * @type {Array}\n         */\n        this.atStart = defaultsArr(f.at_start, []);\n\n        /**\n         * Enable hover behaviour on columns manager button/link\n         * @type {Boolean}\n         */\n        this.enableHover = Boolean(f.enable_hover);\n\n        /**\n         * Enable select all option, disabled by default\n         * @type {Boolean}\n         */\n        this.enableTickAll = Boolean(f.enable_tick_all);\n\n        /**\n         * Text for select all option, defaults to 'Select all:'\n         * @type {String}\n         */\n        this.tickAllText = defaultsStr(f.tick_all_text, 'Select all:');\n\n        /**\n         * Default position in toolbar ('left'|'center'|'right')\n         * @type {String}\n         */\n        this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\n\n        /**\n         * List of indexes of hidden columns\n         * @private\n         */\n        this.hiddenCols = [];\n\n        /**\n         * Bound mouseup wrapper\n         * @private\n         */\n        this.boundMouseup = null;\n\n        /**\n         * Callback fired when the extension is initialized\n         * @type {Function}\n         */\n        this.onLoaded = defaultsFn(f.on_loaded, EMPTY_FN);\n\n        /**\n         * Callback fired before the columns manager is opened\n         * @type {Function}\n         */\n        this.onBeforeOpen = defaultsFn(f.on_before_open, EMPTY_FN);\n\n        /**\n         * Callback fired after the columns manager is opened\n         * @type {Function}\n         */\n        this.onAfterOpen = defaultsFn(f.on_after_open, EMPTY_FN);\n\n        /**\n         * Callback fired before the columns manager is closed\n         * @type {Function}\n         */\n        this.onBeforeClose = defaultsFn(f.on_before_close, EMPTY_FN);\n\n        /**\n         * Callback fired after the columns manager is closed\n         * @type {Function}\n         */\n        this.onAfterClose = defaultsFn(f.on_after_close, EMPTY_FN);\n\n        /**\n         * Callback fired before a column is hidden\n         * @type {Function}\n         */\n        this.onBeforeColHidden = defaultsFn(f.on_before_col_hidden, EMPTY_FN);\n\n        /**\n         * Callback fired after a column is hidden\n         * @type {Function}\n         */\n        this.onAfterColHidden = defaultsFn(f.on_after_col_hidden, EMPTY_FN);\n\n        /**\n         * Callback fired before a column is displayed\n         * @type {Function}\n         */\n        this.onBeforeColDisplayed = defaultsFn(f.on_before_col_displayed,\n            EMPTY_FN);\n\n        /**\n         * Callback fired after a column is displayed\n         * @type {Function}\n         */\n        this.onAfterColDisplayed = defaultsFn(f.on_after_col_displayed,\n            EMPTY_FN);\n\n        //Grid layout support\n        if (tf.gridLayout) {\n            this.headersTbl = tf.feature('gridLayout').headTbl; //headers table\n            this.headersIndex = 0; //headers index\n        }\n\n        //Loads extension stylesheet\n        tf.import(f.name + 'Style', tf.getStylePath() + this.stylesheet, null,\n            'link');\n\n        this.enable();\n    }\n\n    /**\n     * Mouse-up event handler handling popup auto-close behaviour\n     * @private\n     */\n    onMouseup(evt) {\n        let targetElm = targetEvt(evt);\n\n        while (targetElm && targetElm !== this.contEl\n            && targetElm !== this.btnEl) {\n            targetElm = targetElm.parentNode;\n        }\n\n        if (targetElm !== this.contEl && targetElm !== this.btnEl) {\n            this.toggle();\n        }\n\n        return;\n    }\n\n    /**\n     * Toggle columns manager UI\n     */\n    toggle() {\n        // ensure mouseup event handler is removed\n        removeEvt(root, 'mouseup', this.boundMouseup);\n\n        let contDisplay = this.contEl.style.display;\n\n        if (contDisplay !== 'inline') {\n            this.onBeforeOpen(this);\n        }\n        if (contDisplay === 'inline') {\n            this.onBeforeClose(this);\n        }\n\n        this.contEl.style.display = contDisplay === 'inline' ?\n            NONE : 'inline';\n\n        if (contDisplay !== 'inline') {\n            this.onAfterOpen(this);\n            addEvt(root, 'mouseup', this.boundMouseup);\n        }\n        if (contDisplay === 'inline') {\n            this.onAfterClose(this);\n        }\n    }\n\n    /**\n     * Check an item in columns manager UI\n     * @private\n     */\n    checkItem(lbl) {\n        let li = lbl.parentNode;\n        if (!li || !lbl) {\n            return;\n        }\n        let isChecked = lbl.firstChild.checked;\n        let colIndex = lbl.firstChild.getAttribute('id').split('_')[1];\n        colIndex = parseInt(colIndex, 10);\n        if (isChecked) {\n            addClass(li, this.listSlcItemCssClass);\n        } else {\n            removeClass(li, this.listSlcItemCssClass);\n        }\n\n        let hide = false;\n        if ((this.tickToHide && isChecked) ||\n            (!this.tickToHide && !isChecked)) {\n            hide = true;\n        }\n        this.setHidden(colIndex, hide);\n    }\n\n    /**\n     * Initializes ColsVisibility instance\n     */\n    init() {\n        if (this.initialized || !this.manager) {\n            return;\n        }\n\n        this.emitter.emit('initializing-extension', this,\n            !isNull(this.btnTgtId));\n\n        this.emitter.on(['hide-column'],\n            (tf, colIndex) => this.hideCol(colIndex));\n\n        this.buildBtn();\n        this.buildManager();\n\n        /** @inherited */\n        this.initialized = true;\n\n        this.boundMouseup = this.onMouseup.bind(this);\n\n        this.emitter.emit('columns-visibility-initialized', this.tf, this);\n        this.emitter.emit('extension-initialized', this);\n\n        // Hide columns at start at very end of initialization, do not move\n        // as order is important\n        this._hideAtStart();\n    }\n\n    /**\n     * Build main button UI\n     */\n    buildBtn() {\n        if (this.btnEl) {\n            return;\n        }\n        let tf = this.tf;\n        let span = createElm('span');\n        span.className = this.spanCssClass;\n\n        // Container element (rdiv or custom element)\n        let targetEl = !this.btnTgtId ?\n            tf.feature('toolbar').container(this.toolbarPosition) :\n            elm(this.btnTgtId);\n\n        if (!this.btnTgtId) {\n            let firstChild = targetEl.firstChild;\n            firstChild.parentNode.insertBefore(span, firstChild);\n        } else {\n            targetEl.appendChild(span);\n        }\n\n        if (!this.btnHtml) {\n            let btn = createElm('a', ['href', 'javascript:;']);\n            btn.className = this.btnCssClass;\n            btn.title = this.desc;\n\n            btn.innerHTML = this.btnText;\n            span.appendChild(btn);\n            if (!this.enableHover) {\n                addEvt(btn, 'click', (evt) => this.toggle(evt));\n            } else {\n                addEvt(btn, 'mouseover', (evt) => this.toggle(evt));\n            }\n        } else { // Custom html\n            span.innerHTML = this.btnHtml;\n            let colVisEl = span.firstChild;\n            if (!this.enableHover) {\n                addEvt(colVisEl, 'click', (evt) => this.toggle(evt));\n            } else {\n                addEvt(colVisEl, 'mouseover', (evt) => this.toggle(evt));\n            }\n        }\n\n        this.spanEl = span;\n        this.btnEl = this.spanEl.firstChild;\n\n        this.onLoaded(this);\n    }\n\n    /**\n     * Build columns manager UI\n     */\n    buildManager() {\n        let tf = this.tf;\n\n        let container = !this.contElTgtId ?\n            createElm('div') :\n            elm(this.contElTgtId);\n        container.className = this.contCssClass;\n\n        //Extension description\n        let extNameLabel = createElm('p');\n        extNameLabel.innerHTML = this.text;\n        container.appendChild(extNameLabel);\n\n        //Headers list\n        let ul = createElm('ul');\n        ul.className = this.listCssClass;\n\n        let tbl = this.headersTbl || tf.dom();\n        let headerIndex = this.headersTbl ?\n            this.headersIndex : tf.getHeadersRowIndex();\n        let headerRow = tbl.rows[headerIndex];\n\n        //Tick all option\n        if (this.enableTickAll) {\n            let li = createCheckItem('col__' + tf.id, this.tickAllText,\n                this.tickAllText);\n            addClass(li, this.listItemCssClass);\n            ul.appendChild(li);\n            li.check.checked = !this.tickToHide;\n\n            addEvt(li.check, 'click', () => {\n                for (let h = 0; h < headerRow.cells.length; h++) {\n                    let itm = elm('col_' + h + '_' + tf.id);\n                    if (itm && li.check.checked !== itm.checked) {\n                        itm.click();\n                        itm.checked = li.check.checked;\n                    }\n                }\n            });\n        }\n\n        for (let i = 0; i < headerRow.cells.length; i++) {\n            let cell = headerRow.cells[i];\n            let cellText = this.headersText[i] || this._getHeaderText(cell);\n            let liElm = createCheckItem('col_' + i + '_' + tf.id, cellText,\n                cellText);\n            addClass(liElm, this.listItemCssClass);\n            if (!this.tickToHide) {\n                addClass(liElm, this.listSlcItemCssClass);\n            }\n            ul.appendChild(liElm);\n            if (!this.tickToHide) {\n                liElm.check.checked = true;\n            }\n\n            addEvt(liElm.check, 'click', (evt) => {\n                let elm = targetEvt(evt);\n                let lbl = elm.parentNode;\n                this.checkItem(lbl);\n            });\n        }\n\n        //separator\n        let p = createElm('p', ['align', 'center']);\n        let btn;\n        //Close link\n        if (!this.btnCloseHtml) {\n            btn = createElm('a', ['href', 'javascript:;']);\n            btn.className = this.btnCloseCssClass;\n            btn.innerHTML = this.btnCloseText;\n            addEvt(btn, 'click', (evt) => this.toggle(evt));\n            p.appendChild(btn);\n        } else {\n            p.innerHTML = this.btnCloseHtml;\n            btn = p.firstChild;\n            addEvt(btn, 'click', (evt) => this.toggle(evt));\n        }\n\n        container.appendChild(ul);\n        container.appendChild(p);\n\n        this.btnEl.parentNode.insertBefore(container, this.btnEl);\n        this.contEl = container;\n    }\n\n    /**\n     * Hide or show specified columns\n     * @param {Number} colIndex Column index\n     * @param {Boolean} hide    Hide column if true or show if false\n     */\n    setHidden(colIndex, hide) {\n        let tf = this.tf;\n        let tbl = tf.dom();\n\n        if (hide) {\n            this.onBeforeColHidden(this, colIndex);\n        } else {\n            this.onBeforeColDisplayed(this, colIndex);\n        }\n\n        this._hideElements(tbl, colIndex, hide);\n        if (this.headersTbl) {\n            this._hideElements(this.headersTbl, colIndex, hide);\n        }\n\n        let hiddenCols = this.hiddenCols;\n        let itemIndex = hiddenCols.indexOf(colIndex);\n        if (hide) {\n            if (itemIndex === -1) {\n                this.hiddenCols.push(colIndex);\n            }\n        } else {\n            if (itemIndex !== -1) {\n                this.hiddenCols.splice(itemIndex, 1);\n            }\n        }\n\n        if (hide) {\n            this.onAfterColHidden(this, colIndex);\n            this.emitter.emit('column-hidden', tf, this, colIndex,\n                this.hiddenCols);\n        } else {\n            this.onAfterColDisplayed(this, colIndex);\n            this.emitter.emit('column-shown', tf, this, colIndex,\n                this.hiddenCols);\n        }\n    }\n\n    /**\n     * Show specified column\n     * @param  {Number} colIndex Column index\n     */\n    showCol(colIndex) {\n        if (isUndef(colIndex) || !this.isColHidden(colIndex)) {\n            return;\n        }\n        if (this.manager && this.contEl) {\n            let itm = elm('col_' + colIndex + '_' + this.tf.id);\n            if (itm) {\n                itm.click();\n            }\n        } else {\n            this.setHidden(colIndex, false);\n        }\n    }\n\n    /**\n     * Hide specified column\n     * @param  {Number} colIndex Column index\n     */\n    hideCol(colIndex) {\n        if (isUndef(colIndex) || this.isColHidden(colIndex)) {\n            return;\n        }\n        if (this.manager && this.contEl) {\n            let itm = elm('col_' + colIndex + '_' + this.tf.id);\n            if (itm) {\n                itm.click();\n            }\n        } else {\n            this.setHidden(colIndex, true);\n        }\n    }\n\n    /**\n     * Determine if specified column is hidden\n     * @param  {Number} colIndex Column index\n     */\n    isColHidden(colIndex) {\n        if (this.hiddenCols.indexOf(colIndex) !== -1) {\n            return true;\n        }\n        return false;\n    }\n\n    /**\n     * Toggle visibility of specified column\n     * @param  {Number} colIndex Column index\n     */\n    toggleCol(colIndex) {\n        if (isUndef(colIndex) || this.isColHidden(colIndex)) {\n            this.showCol(colIndex);\n        } else {\n            this.hideCol(colIndex);\n        }\n    }\n\n    /**\n     * Return the indexes of the columns currently hidden\n     * @return {Array} column indexes\n     */\n    getHiddenCols() {\n        return this.hiddenCols;\n    }\n\n    /**\n     * Remove the columns manager\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n        if (elm(this.contElTgtId)) {\n            elm(this.contElTgtId).innerHTML = '';\n        } else {\n            this.contEl.innerHTML = '';\n            removeElm(this.contEl);\n            this.contEl = null;\n        }\n        this.btnEl.innerHTML = '';\n        removeElm(this.btnEl);\n        this.btnEl = null;\n\n        this.emitter.off(['hide-column'],\n            (tf, colIndex) => this.hideCol(colIndex));\n\n        this.boundMouseup = null;\n\n        this.initialized = false;\n    }\n\n    _getHeaderText(cell) {\n        if (!cell.hasChildNodes) {\n            return '';\n        }\n\n        for (let i = 0; i < cell.childNodes.length; i++) {\n            let n = cell.childNodes[i];\n            if (n.nodeType === 3) {\n                return n.nodeValue;\n            } else if (n.nodeType === 1) {\n                if (n.id && n.id.indexOf('popUp') !== -1) {\n                    continue;\n                } else {\n                    return getText(n);\n                }\n            }\n            continue;\n        }\n        return '';\n    }\n\n    _hideElements(tbl, colIdx, hide) {\n        this._hideCells(tbl, colIdx, hide);\n        this._hideCol(tbl, colIdx, hide);\n    }\n\n    _hideCells(tbl, colIdx, hide) {\n        for (let i = 0; i < tbl.rows.length; i++) {\n            let row = tbl.rows[i];\n            let cell = row.cells[colIdx];\n            if (cell) {\n                cell.style.display = hide ? NONE : '';\n            }\n        }\n    }\n\n    _hideCol(tbl, colIdx, hide) {\n        let colElms = tag(this.tf.dom(), 'col');\n        if (colElms.length === 0) {\n            return;\n        }\n        colElms[colIdx].style.display = hide ? NONE : '';\n    }\n\n    _hideAtStart() {\n        this.atStart.forEach((colIdx) => {\n            this.hideCol(colIdx);\n        });\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/extensions/colsVisibility/colsVisibility.js","import {Feature} from '../../feature';\nimport {createElm, removeElm, elm} from '../../dom';\nimport {EMPTY_FN, isNull} from '../../types';\nimport {addEvt} from '../../event';\nimport {\n    defaultsBool, defaultsStr, defaultsFn, defaultsNb,\n} from '../../settings';\nimport {RIGHT} from '../../modules/toolbar';\n\n/**\n * Filters Visibility extension\n */\nexport default class FiltersVisibility extends Feature {\n\n    /**\n     * Creates an instance of FiltersVisibility\n     * @param {TableFilter} tf TableFilter instance\n     * @param {Object} Configuration object\n     */\n    constructor(tf, f) {\n        super(tf, f.name);\n\n        /**\n         * Module name\n         * @type {String}\n         */\n        this.name = f.name;\n\n        /**\n         * Module description\n         * @type {String}\n         */\n        this.desc = defaultsStr(f.description,\n            'Filters row visibility manager');\n\n        /**\n         * Extension's stylesheet filename\n         * @type {String}\n         */\n        this.stylesheet = defaultsStr(f.stylesheet , 'filtersVisibility.css');\n\n        /**\n         * Expand icon filename\n         * @type {String}\n         */\n        this.icnExpand = defaultsStr(f.expand_icon_name, 'icn_exp.png');\n\n        /**\n         * Collapse icon filename\n         * @type {String}\n         */\n        this.icnCollapse = defaultsStr(f.collapse_icon_name, 'icn_clp.png');\n\n        /**\n         * Main container element\n         * @private\n         */\n        this.contEl = null;\n\n        /**\n         * Button element\n         * @private\n         */\n        this.btnEl = null;\n\n        /**\n         * Expand icon HTML\n         * @private\n         */\n        this.icnExpandHtml = '\"Expand';\n\n        /**\n         * Collapse icon HTML\n         * @private\n         */\n        this.icnCollapseHtml = '\"Collapse';\n\n        /**\n         * Default text\n         * @private\n         */\n        this.defaultText = 'Toggle filters';\n\n        /**\n         * ID of main container element\n         * @type {String}\n         */\n        this.targetId = f.target_id || null;\n\n        /**\n         * Enable expand/collapse icon, defaults to true\n         * @type {Boolean}\n         */\n        this.enableIcon = defaultsBool(f.enable_icon, true);\n\n        /**\n         * Custom text for button\n         * @type {String}\n         */\n        this.btnText = defaultsStr(f.btn_text, '');\n\n        /**\n         * Collapse button HTML\n         * @private\n         */\n        this.collapseBtnHtml = this.enableIcon ?\n            this.icnCollapseHtml + this.btnText :\n            this.btnText || this.defaultText;\n\n        /**\n         * Expand button HTML\n         * @private\n         */\n        this.expandBtnHtml = this.enableIcon ?\n            this.icnExpandHtml + this.btnText :\n            this.btnText || this.defaultText;\n\n        /**\n         * Button's custom HTML\n         * @type {String}\n         */\n        this.btnHtml = defaultsStr(f.btn_html, null);\n\n        /**\n         * Css class for expand/collapse filters button\n         * @type {String}\n         */\n        this.btnCssClass = defaultsStr(f.btn_css_class, 'btnExpClpFlt');\n\n        /**\n         * Css class for main container\n         * @type {String}\n         */\n        this.contCssClass = defaultsStr(f.cont_css_class, 'expClpFlt');\n\n        /**\n         * Filters row index\n         * @type {Number}\n         */\n        this.filtersRowIndex = defaultsNb(f.filters_row_index,\n            tf.getFiltersRowIndex());\n\n        /**\n         * Make filters visible at initialization, defaults to true\n         * @type {Boolean}\n         */\n        this.visibleAtStart = defaultsNb(f.visible_at_start, true);\n\n        /**\n         * Default position in toolbar ('left'|'center'|'right')\n         * @type {String}\n         */\n        this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\n\n        /**\n         * Callback fired before filters row is shown\n         * @type {Function}\n         */\n        this.onBeforeShow = defaultsFn(f.on_before_show, EMPTY_FN);\n\n        /**\n         * Callback fired after filters row is shown\n         * @type {Function}\n         */\n        this.onAfterShow = defaultsFn(f.on_after_show, EMPTY_FN);\n\n        /**\n         * Callback fired before filters row is hidden\n         * @type {Function}\n         */\n        this.onBeforeHide = defaultsFn(f.on_before_hide, EMPTY_FN);\n\n        /**\n         * Callback fired after filters row is hidden\n         * @type {Function}\n         */\n        this.onAfterHide = defaultsFn(f.on_after_hide, EMPTY_FN);\n\n        //Import extension's stylesheet\n        tf.import(f.name + 'Style', tf.getStylePath() + this.stylesheet, null,\n            'link');\n\n        this.enable();\n    }\n\n    /**\n     * Initialise extension\n     */\n    init() {\n        if (this.initialized) {\n            return;\n        }\n\n        this.emitter.emit('initializing-extension', this,\n            !isNull(this.targetId));\n\n        this.buildUI();\n\n        /** @inherited */\n        this.initialized = true;\n\n        this.emitter.on(['show-filters'], (tf, visible) => this.show(visible));\n        this.emitter.emit('filters-visibility-initialized', this.tf, this);\n        this.emitter.emit('extension-initialized', this);\n    }\n\n    /**\n     * Build UI elements\n     */\n    buildUI() {\n        let tf = this.tf;\n        let span = createElm('span');\n        span.className = this.contCssClass;\n\n        // Container element (rdiv or custom element)\n        let targetEl = !this.targetId ?\n            tf.feature('toolbar').container(this.toolbarPosition) :\n            elm(this.targetId);\n\n        if (!this.targetId) {\n            let firstChild = targetEl.firstChild;\n            firstChild.parentNode.insertBefore(span, firstChild);\n        } else {\n            targetEl.appendChild(span);\n        }\n\n        let btn;\n        if (!this.btnHtml) {\n            btn = createElm('a', ['href', 'javascript:void(0);']);\n            btn.className = this.btnCssClass;\n            btn.title = this.btnText || this.defaultText;\n            btn.innerHTML = this.collapseBtnHtml;\n            span.appendChild(btn);\n        } else { // Custom html\n            span.innerHTML = this.btnHtml;\n            btn = span.firstChild;\n        }\n\n        addEvt(btn, 'click', () => this.toggle());\n\n        this.contEl = span;\n        this.btnEl = btn;\n\n        if (!this.visibleAtStart) {\n            this.toggle();\n        }\n    }\n\n    /**\n     * Toggle filters visibility\n     */\n    toggle() {\n        let tf = this.tf;\n        let tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();\n        let fltRow = tbl.rows[this.filtersRowIndex];\n        let isDisplayed = fltRow.style.display === '';\n\n        this.show(!isDisplayed);\n    }\n\n    /**\n     * Show or hide filters\n     *\n     * @param {boolean} [visible=true] Visibility flag\n     */\n    show(visible = true) {\n        let tf = this.tf;\n        let tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();\n        let fltRow = tbl.rows[this.filtersRowIndex];\n\n        if (visible) {\n            this.onBeforeShow(this);\n        }\n        if (!visible) {\n            this.onBeforeHide(this);\n        }\n\n        fltRow.style.display = visible ? '' : 'none';\n        if (this.enableIcon && !this.btnHtml) {\n            this.btnEl.innerHTML = visible ?\n                this.collapseBtnHtml : this.expandBtnHtml;\n        }\n\n        if (visible) {\n            this.onAfterShow(this);\n        }\n        if (!visible) {\n            this.onAfterHide(this);\n        }\n\n        this.emitter.emit('filters-toggled', tf, this, visible);\n    }\n\n    /**\n     * Destroy the UI\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n\n        this.emitter.off(['show-filters'], (tf, visible) => this.show(visible));\n\n        this.btnEl.innerHTML = '';\n        removeElm(this.btnEl);\n        this.btnEl = null;\n\n        this.contEl.innerHTML = '';\n        removeElm(this.contEl);\n        this.contEl = null;\n        this.initialized = false;\n    }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/extensions/filtersVisibility/filtersVisibility.js","import AdapterSortableTable from './adapterSortabletable';\nimport {root} from '../../root';\n\nif (!root.SortableTable) {\n    require('script-loader!sortabletable');\n}\n\nexport default AdapterSortableTable;\n\n\n\n// WEBPACK FOOTER //\n// ./src/extensions/sort/sort.js","\nmodule.exports = formatter;\nmodule.exports.default = formatter;\n\nfunction formatter(options) {\n  options = options || {};\n\n\n  // *********************************************************************************************\n  // Set defaults for negatives\n  // options.negative, options.negativeOut, options.separator retained for backward compatibility\n  // *********************************************************************************************\n\n  // type of negative; default left\n  options.negativeType = options.negativeType || (options.negative === 'R' ? 'right' : 'left')\n\n  // negative symbols '-' or '()'\n  if (typeof options.negativeLeftSymbol !== 'string') {\n    switch (options.negativeType) {\n      case 'left':\n        options.negativeLeftSymbol = '-';\n        break;\n      case 'brackets':\n        options.negativeLeftSymbol = '(';\n        break;\n      default:\n        options.negativeLeftSymbol = '';\n    }\n  }\n  if (typeof options.negativeRightSymbol !== 'string') {\n    switch (options.negativeType) {\n      case 'right':\n        options.negativeRightSymbol = '-';\n        break;\n      case 'brackets':\n        options.negativeRightSymbol = ')';\n        break;\n      default:\n        options.negativeRightSymbol = '';\n    }\n  }\n\n  // whether negative symbol should be inside/outside prefix and suffix\n\n  if (typeof options.negativeLeftOut !== \"boolean\") {\n    options.negativeLeftOut = (options.negativeOut === false ? false : true);\n  }\n  if (typeof options.negativeRightOut !== \"boolean\") {\n    options.negativeRightOut = (options.negativeOut === false ? false : true);\n  }\n\n  //prefix and suffix\n  options.prefix = options.prefix || '';\n  options.suffix = options.suffix || '';\n\n  //separators\n  if (typeof options.integerSeparator !== 'string') {\n    options.integerSeparator = (typeof options.separator === 'string' ? options.separator : ',');\n  }\n  options.decimalsSeparator = typeof options.decimalsSeparator === 'string' ? options.decimalsSeparator : '';\n  options.decimal = options.decimal || '.';\n\n  //padders\n  options.padLeft = options.padLeft || -1 //default no padding\n  options.padRight = options.padRight || -1 //default no padding\n\n  function format(number, overrideOptions) {\n    overrideOptions = overrideOptions || {};\n\n    if (number || number === 0) {\n      number = '' + number;//convert number to string if it isn't already\n    } else {\n      return '';\n    }\n\n    //identify a negative number and make it absolute\n    var output = [];\n    var negative = number.charAt(0) === '-';\n    number = number.replace(/^\\-/g, '');\n\n    //Prepare output with left hand negative and/or prefix\n    if (!options.negativeLeftOut && !overrideOptions.noUnits) {\n      output.push(options.prefix);\n    }\n    if (negative) {\n      output.push(options.negativeLeftSymbol);\n    }\n    if (options.negativeLeftOut && !overrideOptions.noUnits) {\n      output.push(options.prefix);\n    }\n\n    //Format core number\n    number = number.split('.');\n    if (options.round != null) round(number, options.round);\n    if (options.truncate != null) number[1] = truncate(number[1], options.truncate);\n    if (options.padLeft > 0) number[0] = padLeft(number[0], options.padLeft);\n    if (options.padRight > 0) number[1] = padRight(number[1], options.padRight);\n    if (!overrideOptions.noSeparator && number[1]) number[1] = addDecimalSeparators(number[1], options.decimalsSeparator);\n    if (!overrideOptions.noSeparator && number[0]) number[0] = addIntegerSeparators(number[0], options.integerSeparator);\n    output.push(number[0]);\n    if (number[1]) {\n      output.push(options.decimal);\n      output.push(number[1]);\n    }\n\n    //Prepare output with right hand negative and/or prefix\n    if (options.negativeRightOut && !overrideOptions.noUnits) {\n      output.push(options.suffix);\n    }\n    if (negative) {\n      output.push(options.negativeRightSymbol);\n    }\n    if (!options.negativeRightOut && !overrideOptions.noUnits) {\n      output.push(options.suffix);\n    }\n\n    //join output and return\n    return output.join('');\n  }\n\n  format.negative = options.negative;\n  format.negativeOut = options.negativeOut;\n  format.negativeType = options.negativeType;\n  format.negativeLeftOut = options.negativeLeftOut;\n  format.negativeLeftSymbol = options.negativeLeftSymbol;\n  format.negativeRightOut = options.negativeRightOut;\n  format.negativeRightSymbol = options.negativeRightSymbol;\n  format.prefix = options.prefix;\n  format.suffix = options.suffix;\n  format.separate = options.separate;\n  format.integerSeparator = options.integerSeparator;\n  format.decimalsSeparator = options.decimalsSeparator;\n  format.decimal = options.decimal;\n  format.padLeft = options.padLeft;\n  format.padRight = options.padRight;\n  format.truncate = options.truncate;\n  format.round = options.round;\n\n  function unformat(number, allowedSeparators) {\n    allowedSeparators = allowedSeparators || [];\n    if (options.allowedSeparators) {\n      options.allowedSeparators.forEach(function (s) { allowedSeparators.push (s); });\n    }\n    allowedSeparators.push(options.integerSeparator);\n    allowedSeparators.push(options.decimalsSeparator);\n    number = number.replace(options.prefix, '');\n    number = number.replace(options.suffix, '');\n    var newNumber = number;\n    do {\n      number = newNumber;\n      for (var i = 0; i < allowedSeparators.length; i++) {\n        newNumber = newNumber.replace(allowedSeparators[i], '');\n      }\n    } while (newNumber != number);\n    return number;\n  }\n  format.unformat = unformat;\n\n  function validate(number, allowedSeparators) {\n    number = unformat(number, allowedSeparators);\n    number = number.split(options.decimal);\n    if (number.length > 2) {\n      return false;\n    } else if (options.truncate != null && number[1] && number[1].length > options.truncate) {\n      return false;\n    }  else if (options.round != null && number[1] && number[1].length > options.round) {\n      return false;\n    } else {\n      return /^-?\\d+\\.?\\d*$/.test(number);\n    }\n  }\n  return format;\n}\n\n//where x is already the integer part of the number\nfunction addIntegerSeparators(x, separator) {\n  x += '';\n  if (!separator) return x;\n  var rgx = /(\\d+)(\\d{3})/;\n  while (rgx.test(x)) {\n    x = x.replace(rgx, '$1' + separator + '$2');\n  }\n  return x;\n}\n\n//where x is already the decimal part of the number\nfunction addDecimalSeparators(x, separator) {\n  x += '';\n  if (!separator) return x;\n  var rgx = /(\\d{3})(\\d+)/;\n  while (rgx.test(x)) {\n    x = x.replace(rgx, '$1' + separator + '$2');\n  }\n  return x;\n}\n\n//where x is the integer part of the number\nfunction padLeft(x, padding) {\n  x = x + '';\n  var buf = [];\n  while (buf.length + x.length < padding) {\n    buf.push('0');\n  }\n  return buf.join('') + x;\n}\n\n//where x is the decimals part of the number\nfunction padRight(x, padding) {\n  if (x) {\n    x += '';\n  } else {\n    x = '';\n  }\n  var buf = [];\n  while (buf.length + x.length < padding) {\n    buf.push('0');\n  }\n  return x + buf.join('');\n}\nfunction truncate(x, length) {\n  if (x) {\n    x += '';\n  }\n  if (x && x.length > length) {\n    return x.substr(0, length);\n  } else {\n    return x;\n  }\n}\n\n//where number is an array with 0th item as integer string and 1st item as decimal string (no negatives)\nfunction round(number, places) {\n  if (number[1] && places >= 0 && number[1].length > places) {\n    //truncate to correct number of decimal places\n    var decim = number[1].slice(0, places);\n    //if next digit was >= 5 we need to round up\n    if (+(number[1].substr(places, 1)) >= 5) {\n      //But first count leading zeros as converting to a number will loose them\n      var leadingzeros = \"\";\n      while (decim.charAt(0)===\"0\") {\n        leadingzeros = leadingzeros + \"0\";\n        decim = decim.substr(1);\n      }\n      //Then we can change decim to a number and add 1 before replacing leading zeros\n      decim = (+decim + 1) + '';\n      decim = leadingzeros + decim;\n      if (decim.length > places) {\n        //adding one has made it longer\n        number[0] = (+number[0]+ +decim.charAt(0)) + ''; //add value of firstchar to the integer part\n        decim = decim.substring(1);   //ignore the 1st char at the beginning which is the carry to the integer part\n      }\n    }\n    number[1] = decim;\n  }\n  return number;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/format-number/index.js\n// module id = 448\n// module chunks = 0","require(\"!!/home/msitarz/workspaces/IS_Connectivity/PatchListing_TableFilter/TableFilter/node_modules/script-loader/addScript.js\")(require(\"!!/home/msitarz/workspaces/IS_Connectivity/PatchListing_TableFilter/TableFilter/node_modules/raw-loader/index.js!/home/msitarz/workspaces/IS_Connectivity/PatchListing_TableFilter/TableFilter/libs/sortabletable.js\"))\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/script-loader!./libs/sortabletable.js\n// module id = 449\n// module chunks = 0","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nmodule.exports = function(src) {\n\tfunction log(error) {\n\t\t(typeof console !== \"undefined\")\n\t\t&& (console.error || console.log)(\"[Script Loader]\", error);\n\t}\n\n\t// Check for IE =< 8\n\tfunction isIE() {\n\t\treturn typeof attachEvent !== \"undefined\" && typeof addEventListener === \"undefined\";\n\t}\n\n\ttry {\n\t\tif (typeof execScript !== \"undefined\" && isIE()) {\n\t\t\texecScript(src);\n\t\t} else if (typeof eval !== \"undefined\") {\n\t\t\teval.call(null, src);\n\t\t} else {\n\t\t\tlog(\"EvalError: No eval function available\");\n\t\t}\n\t} catch (error) {\n\t\tlog(error);\n\t}\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/script-loader/addScript.js\n// module id = 450\n// module chunks = 0","module.exports = \"/*----------------------------------------------------------------------------\\\\\\n|                            Sortable Table 1.12                              |\\n|-----------------------------------------------------------------------------|\\n|                         Created by Erik Arvidsson                           |\\n|                  (http://webfx.eae.net/contact.html#erik)                   |\\n|                      For WebFX (http://webfx.eae.net/)                      |\\n|-----------------------------------------------------------------------------|\\n| A DOM 1 based script that allows an ordinary HTML table to be sortable.     |\\n|-----------------------------------------------------------------------------|\\n|                  Copyright (c) 1998 - 2006 Erik Arvidsson                   |\\n|-----------------------------------------------------------------------------|\\n| Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not |\\n| use this file except in compliance with the License.  You may obtain a copy |\\n| of the License at http://www.apache.org/licenses/LICENSE-2.0                |\\n| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\\n| Unless  required  by  applicable law or  agreed  to  in  writing,  software |\\n| distributed under the License is distributed on an  \\\"AS IS\\\" BASIS,  WITHOUT |\\n| WARRANTIES OR  CONDITIONS OF ANY KIND,  either express or implied.  See the |\\n| License  for the  specific language  governing permissions  and limitations |\\n| under the License.                                                          |\\n|-----------------------------------------------------------------------------|\\n| 2003-01-10 | First version                                                  |\\n| 2003-01-19 | Minor changes to the date parsing                              |\\n| 2003-01-28 | JScript 5.0 fixes (no support for 'in' operator)               |\\n| 2003-02-01 | Sloppy typo like error fixed in getInnerText                   |\\n| 2003-07-04 | Added workaround for IE cellIndex bug.                         |\\n| 2003-11-09 | The bDescending argument to sort was not correctly working     |\\n|            | Using onclick DOM0 event if no support for addEventListener    |\\n|            | or attachEvent                                                 |\\n| 2004-01-13 | Adding addSortType and removeSortType which makes it a lot     |\\n|            | easier to add new, custom sort types.                          |\\n| 2004-01-27 | Switch to use descending = false as the default sort order.    |\\n|            | Change defaultDescending to suit your needs.                   |\\n| 2004-03-14 | Improved sort type None look and feel a bit                    |\\n| 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you    |\\n|            | can use another tHead or no tHead, and you can chose some      |\\n|            | other tBody.                                                   |\\n| 2006-04-25 | Changed license to Apache Software License 2.0                 |\\n|-----------------------------------------------------------------------------|\\n| Created 2003-01-10 | All changes are in the log above. | Updated 2006-04-25 |\\n\\\\----------------------------------------------------------------------------*/\\n\\n\\nfunction SortableTable(oTable, oSortTypes) {\\n\\n\\tthis.sortTypes = oSortTypes || [];\\n\\n\\tthis.sortColumn = null;\\n\\tthis.descending = null;\\n\\n\\tvar oThis = this;\\n\\tthis._headerOnclick = function (e) {\\n\\t\\toThis.headerOnclick(e);\\n\\t};\\n\\n\\tif (oTable) {\\n\\t\\tthis.setTable( oTable );\\n\\t\\tthis.document = oTable.ownerDocument || oTable.document;\\n\\t}\\n\\telse {\\n\\t\\tthis.document = document;\\n\\t}\\n\\n\\n\\t// only IE needs this\\n\\tvar win = this.document.defaultView || this.document.parentWindow;\\n\\tthis._onunload = function () {\\n\\t\\toThis.destroy();\\n\\t};\\n\\tif (win && typeof win.attachEvent != \\\"undefined\\\") {\\n\\t\\twin.attachEvent(\\\"onunload\\\", this._onunload);\\n\\t}\\n}\\n\\nSortableTable.gecko = navigator.product == \\\"Gecko\\\";\\nSortableTable.msie = /msie/i.test(navigator.userAgent);\\n// Mozilla is faster when doing the DOM manipulations on\\n// an orphaned element. MSIE is not\\nSortableTable.removeBeforeSort = SortableTable.gecko;\\n\\nSortableTable.prototype.onsort = function () {};\\n\\n// default sort order. true -> descending, false -> ascending\\nSortableTable.prototype.defaultDescending = false;\\n\\n// shared between all instances. This is intentional to allow external files\\n// to modify the prototype\\nSortableTable.prototype._sortTypeInfo = {};\\n\\nSortableTable.prototype.setTable = function (oTable) {\\n\\tif ( this.tHead )\\n\\t\\tthis.uninitHeader();\\n\\tthis.element = oTable;\\n\\tthis.setTHead( oTable.tHead );\\n\\tthis.setTBody( oTable.tBodies[0] );\\n};\\n\\nSortableTable.prototype.setTHead = function (oTHead) {\\n\\tif (this.tHead && this.tHead != oTHead )\\n\\t\\tthis.uninitHeader();\\n\\tthis.tHead = oTHead;\\n\\tthis.initHeader( this.sortTypes );\\n};\\n\\nSortableTable.prototype.setTBody = function (oTBody) {\\n\\tthis.tBody = oTBody;\\n};\\n\\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\\n\\tif ( this.tHead )\\n\\t\\tthis.uninitHeader();\\n\\tthis.sortTypes = oSortTypes || [];\\n\\tif ( this.tHead )\\n\\t\\tthis.initHeader( this.sortTypes );\\n};\\n\\n// adds arrow containers and events\\n// also binds sort type to the header cells so that reordering columns does\\n// not break the sort types\\nSortableTable.prototype.initHeader = function (oSortTypes) {\\n\\tif (!this.tHead) return;\\n\\tvar cells = this.tHead.rows[0].cells;\\n\\tvar doc = this.tHead.ownerDocument || this.tHead.document;\\n\\tthis.sortTypes = oSortTypes || [];\\n\\tvar l = cells.length;\\n\\tvar img, c;\\n\\tfor (var i = 0; i < l; i++) {\\n\\t\\tc = cells[i];\\n\\t\\tif (this.sortTypes[i] != null && this.sortTypes[i] != \\\"None\\\") {\\n\\t\\t\\timg = doc.createElement(\\\"IMG\\\");\\n\\t\\t\\timg.src = \\\"images/blank.png\\\";\\n\\t\\t\\tc.appendChild(img);\\n\\t\\t\\tif (this.sortTypes[i] != null)\\n\\t\\t\\t\\tc._sortType = this.sortTypes[i];\\n\\t\\t\\tif (typeof c.addEventListener != \\\"undefined\\\")\\n\\t\\t\\t\\tc.addEventListener(\\\"click\\\", this._headerOnclick, false);\\n\\t\\t\\telse if (typeof c.attachEvent != \\\"undefined\\\")\\n\\t\\t\\t\\tc.attachEvent(\\\"onclick\\\", this._headerOnclick);\\n\\t\\t\\telse\\n\\t\\t\\t\\tc.onclick = this._headerOnclick;\\n\\t\\t}\\n\\t\\telse\\n\\t\\t{\\n\\t\\t\\tc.setAttribute( \\\"_sortType\\\", oSortTypes[i] );\\n\\t\\t\\tc._sortType = \\\"None\\\";\\n\\t\\t}\\n\\t}\\n\\tthis.updateHeaderArrows();\\n};\\n\\n// remove arrows and events\\nSortableTable.prototype.uninitHeader = function () {\\n\\tif (!this.tHead) return;\\n\\tvar cells = this.tHead.rows[0].cells;\\n\\tvar l = cells.length;\\n\\tvar c;\\n\\tfor (var i = 0; i < l; i++) {\\n\\t\\tc = cells[i];\\n\\t\\tif (c._sortType != null && c._sortType != \\\"None\\\") {\\n\\t\\t\\tc.removeChild(c.lastChild);\\n\\t\\t\\tif (typeof c.removeEventListener != \\\"undefined\\\")\\n\\t\\t\\t\\tc.removeEventListener(\\\"click\\\", this._headerOnclick, false);\\n\\t\\t\\telse if (typeof c.detachEvent != \\\"undefined\\\")\\n\\t\\t\\t\\tc.detachEvent(\\\"onclick\\\", this._headerOnclick);\\n\\t\\t\\tc._sortType = null;\\n\\t\\t\\tc.removeAttribute( \\\"_sortType\\\" );\\n\\t\\t}\\n\\t}\\n};\\n\\nSortableTable.prototype.updateHeaderArrows = function () {\\n\\tif (!this.tHead) return;\\n\\tvar cells = this.tHead.rows[0].cells;\\n\\tvar l = cells.length;\\n\\tvar img;\\n\\tfor (var i = 0; i < l; i++) {\\n\\t\\tif (cells[i]._sortType != null && cells[i]._sortType != \\\"None\\\") {\\n\\t\\t\\timg = cells[i].lastChild;\\n\\t\\t\\tif (i == this.sortColumn)\\n\\t\\t\\t\\timg.className = \\\"sort-arrow \\\" + (this.descending ? \\\"descending\\\" : \\\"ascending\\\");\\n\\t\\t\\telse\\n\\t\\t\\t\\timg.className = \\\"sort-arrow\\\";\\n\\t\\t}\\n\\t}\\n};\\n\\nSortableTable.prototype.headerOnclick = function (e) {\\n\\t// find TD element\\n\\tvar el = e.target || e.srcElement;\\n\\twhile (el.tagName != \\\"TD\\\")\\n\\t\\tel = el.parentNode;\\n\\n\\tthis.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\\n};\\n\\n// IE returns wrong cellIndex when columns are hidden\\nSortableTable.getCellIndex = function (oTd) {\\n\\tvar cells = oTd.parentNode.childNodes\\n\\tvar l = cells.length;\\n\\tvar i;\\n\\tfor (i = 0; cells[i] != oTd && i < l; i++)\\n\\t\\t;\\n\\treturn i;\\n};\\n\\nSortableTable.prototype.getSortType = function (nColumn) {\\n\\treturn this.sortTypes[nColumn] || \\\"String\\\";\\n};\\n\\n// only nColumn is required\\n// if bDescending is left out the old value is taken into account\\n// if sSortType is left out the sort type is found from the sortTypes array\\n\\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\\n\\tif (!this.tBody) return;\\n\\tif (sSortType == null)\\n\\t\\tsSortType = this.getSortType(nColumn);\\n\\n\\t// exit if None\\n\\tif (sSortType == \\\"None\\\")\\n\\t\\treturn;\\n\\n\\tif (bDescending == null) {\\n\\t\\tif (this.sortColumn != nColumn)\\n\\t\\t\\tthis.descending = this.defaultDescending;\\n\\t\\telse\\n\\t\\t\\tthis.descending = !this.descending;\\n\\t}\\n\\telse\\n\\t\\tthis.descending = bDescending;\\n\\n\\tthis.sortColumn = nColumn;\\n\\n\\tif (typeof this.onbeforesort == \\\"function\\\")\\n\\t\\tthis.onbeforesort();\\n\\n\\tvar f = this.getSortFunction(sSortType, nColumn);\\n\\tvar a = this.getCache(sSortType, nColumn);\\n\\tvar tBody = this.tBody;\\n\\n\\ta.sort(f);\\n\\n\\tif (this.descending)\\n\\t\\ta.reverse();\\n\\n\\tif (SortableTable.removeBeforeSort) {\\n\\t\\t// remove from doc\\n\\t\\tvar nextSibling = tBody.nextSibling;\\n\\t\\tvar p = tBody.parentNode;\\n\\t\\tp.removeChild(tBody);\\n\\t}\\n\\n\\t// insert in the new order\\n\\tvar l = a.length;\\n\\tfor (var i = 0; i < l; i++)\\n\\t\\ttBody.appendChild(a[i].element);\\n\\n\\tif (SortableTable.removeBeforeSort) {\\n\\t\\t// insert into doc\\n\\t\\tp.insertBefore(tBody, nextSibling);\\n\\t}\\n\\n\\tthis.updateHeaderArrows();\\n\\n\\tthis.destroyCache(a);\\n\\n\\tif (typeof this.onsort == \\\"function\\\")\\n\\t\\tthis.onsort();\\n};\\n\\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\\n\\tvar oThis = this;\\n\\tthis._asyncsort = function () {\\n\\t\\toThis.sort(nColumn, bDescending, sSortType);\\n\\t};\\n\\twindow.setTimeout(this._asyncsort, 1);\\n};\\n\\nSortableTable.prototype.getCache = function (sType, nColumn) {\\n\\tif (!this.tBody) return [];\\n\\tvar rows = this.tBody.rows;\\n\\tvar l = rows.length;\\n\\tvar a = new Array(l);\\n\\tvar r;\\n\\tfor (var i = 0; i < l; i++) {\\n\\t\\tr = rows[i];\\n\\t\\ta[i] = {\\n\\t\\t\\tvalue:\\t\\tthis.getRowValue(r, sType, nColumn),\\n\\t\\t\\telement:\\tr\\n\\t\\t};\\n\\t};\\n\\treturn a;\\n};\\n\\nSortableTable.prototype.destroyCache = function (oArray) {\\n\\tvar l = oArray.length;\\n\\tfor (var i = 0; i < l; i++) {\\n\\t\\toArray[i].value = null;\\n\\t\\toArray[i].element = null;\\n\\t\\toArray[i] = null;\\n\\t}\\n};\\n\\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\\n\\t// if we have defined a custom getRowValue use that\\n\\tif (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\\n\\t\\treturn this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\\n\\n\\tvar s;\\n\\tvar c = oRow.cells[nColumn];\\n\\tif (typeof c.innerText != \\\"undefined\\\")\\n\\t\\ts = c.innerText;\\n\\telse\\n\\t\\ts = SortableTable.getInnerText(c);\\n\\treturn this.getValueFromString(s, sType);\\n};\\n\\nSortableTable.getInnerText = function (oNode) {\\n\\tvar s = \\\"\\\";\\n\\tvar cs = oNode.childNodes;\\n\\tvar l = cs.length;\\n\\tfor (var i = 0; i < l; i++) {\\n\\t\\tswitch (cs[i].nodeType) {\\n\\t\\t\\tcase 1: //ELEMENT_NODE\\n\\t\\t\\t\\ts += SortableTable.getInnerText(cs[i]);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase 3:\\t//TEXT_NODE\\n\\t\\t\\t\\ts += cs[i].nodeValue;\\n\\t\\t\\t\\tbreak;\\n\\t\\t}\\n\\t}\\n\\treturn s;\\n};\\n\\nSortableTable.prototype.getValueFromString = function (sText, sType) {\\n\\tif (this._sortTypeInfo[sType])\\n\\t\\treturn this._sortTypeInfo[sType].getValueFromString( sText );\\n\\treturn sText;\\n\\t/*\\n\\tswitch (sType) {\\n\\t\\tcase \\\"Number\\\":\\n\\t\\t\\treturn Number(sText);\\n\\t\\tcase \\\"CaseInsensitiveString\\\":\\n\\t\\t\\treturn sText.toUpperCase();\\n\\t\\tcase \\\"Date\\\":\\n\\t\\t\\tvar parts = sText.split(\\\"-\\\");\\n\\t\\t\\tvar d = new Date(0);\\n\\t\\t\\td.setFullYear(parts[0]);\\n\\t\\t\\td.setDate(parts[2]);\\n\\t\\t\\td.setMonth(parts[1] - 1);\\n\\t\\t\\treturn d.valueOf();\\n\\t}\\n\\treturn sText;\\n\\t*/\\n\\t};\\n\\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\\n\\tif (this._sortTypeInfo[sType])\\n\\t\\treturn this._sortTypeInfo[sType].compare;\\n\\treturn SortableTable.basicCompare;\\n};\\n\\nSortableTable.prototype.destroy = function () {\\n\\tthis.uninitHeader();\\n\\tvar win = this.document.parentWindow;\\n\\tif (win && typeof win.detachEvent != \\\"undefined\\\") {\\t// only IE needs this\\n\\t\\twin.detachEvent(\\\"onunload\\\", this._onunload);\\n\\t}\\n\\tthis._onunload = null;\\n\\tthis.element = null;\\n\\tthis.tHead = null;\\n\\tthis.tBody = null;\\n\\tthis.document = null;\\n\\tthis._headerOnclick = null;\\n\\tthis.sortTypes = null;\\n\\tthis._asyncsort = null;\\n\\tthis.onsort = null;\\n};\\n\\n// Adds a sort type to all instance of SortableTable\\n// sType : String - the identifier of the sort type\\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\\n//    string and casts it to a desired format. If left out the string is just\\n//    returned\\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\\n//    compare function. Takes two values and compares them. If left out less than,\\n//    <, compare is used\\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\\n//    that takes the row and the column index and returns the value used to compare.\\n//    If left out then the innerText is first taken for the cell and then the\\n//    fGetValueFromString is used to convert that string the desired value and type\\n\\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\\n\\tthis._sortTypeInfo[sType] = {\\n\\t\\ttype:\\t\\t\\t\\tsType,\\n\\t\\tgetValueFromString:\\tfGetValueFromString || SortableTable.idFunction,\\n\\t\\tcompare:\\t\\t\\tfCompareFunction || SortableTable.basicCompare,\\n\\t\\tgetRowValue:\\t\\tfGetRowValue\\n\\t};\\n};\\n\\n// this removes the sort type from all instances of SortableTable\\nSortableTable.prototype.removeSortType = function (sType) {\\n\\tdelete this._sortTypeInfo[sType];\\n};\\n\\nSortableTable.basicCompare = function compare(n1, n2) {\\n\\tif (n1.value < n2.value)\\n\\t\\treturn -1;\\n\\tif (n2.value < n1.value)\\n\\t\\treturn 1;\\n\\treturn 0;\\n};\\n\\nSortableTable.idFunction = function (x) {\\n\\treturn x;\\n};\\n\\nSortableTable.toUpperCase = function (s) {\\n\\treturn s.toUpperCase();\\n};\\n\\nSortableTable.toDate = function (s) {\\n\\tvar parts = s.split(\\\"-\\\");\\n\\tvar d = new Date(0);\\n\\td.setFullYear(parts[0]);\\n\\td.setDate(parts[2]);\\n\\td.setMonth(parts[1] - 1);\\n\\treturn d.valueOf();\\n};\\n\\n\\n// add sort types\\nSortableTable.prototype.addSortType(\\\"Number\\\", Number);\\nSortableTable.prototype.addSortType(\\\"CaseInsensitiveString\\\", SortableTable.toUpperCase);\\nSortableTable.prototype.addSortType(\\\"Date\\\", SortableTable.toDate);\\nSortableTable.prototype.addSortType(\\\"String\\\");\\n// None is a special case\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/raw-loader!./libs/sortabletable.js\n// module id = 451\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file