1
0
Fork 0
mirror of https://github.com/koalyptus/TableFilter.git synced 2024-05-17 13:56:38 +02:00
TableFilter/dist/tablefilter/tf-1-9cf3408ad22349da57bc.js.map
Max Guglielmi 51f8521ddd Prepare PR
2017-01-15 16:39:14 +11:00

1 line
264 KiB
Plaintext

{"version":3,"sources":["webpack:///tf-1-9cf3408ad22349da57bc.js","webpack:///./src ^\\.\\/.*$","webpack:///./src/extensions/advancedGrid/adapterEzEditTable.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/adapterSortabletable.js","webpack:///./src/extensions/sort/sort.js","webpack:///./libs/sortabletable.js","webpack:///./~/script-loader/addScript.js","webpack:///./libs/sortabletable.js?1c81"],"names":["webpackJsonp","435","module","exports","__webpack_require__","webpackContext","req","webpackContextResolve","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/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/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","./number","./number.js","./root","./root.js","./sort","./sort.js","./string","./string.js","./types","./types.js","keys","Object","resolve","id","436","_classCallCheck","instance","Constructor","TypeError","_possibleConstructorReturn","self","call","ReferenceError","_inherits","subClass","superClass","prototype","create","constructor","value","enumerable","writable","configurable","setPrototypeOf","__proto__","defineProperty","_feature","_dom","_const","_root","INSTANTIATION_ERROR","AdapterEzEditTable","_Feature","tf","cfg","this","_this","name","desc","description","filename","vendorPath","vendor_path","loadStylesheet","Boolean","load_stylesheet","stylesheet","stylesheetName","stylesheet_name","scroll_into_view","gridLayout","_ezEditTable","enable","init","_this2","initialized","root","EditTable","_setAdvancedGrid","path","import","isImported","emitter","on","_toggleForInputFilter","startRow","thead","tag","tbl","length","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","pagingLength","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","actions","fnF","on_after_submit","Init","ezEditTable","Set","Editable","toggle","Remove","getActiveFilterId","colIndex","getColumnIndexFromFilterId","filterType","getFilterType","_this3","off","Feature","default","437","_interopRequireDefault","obj","__esModule","_adapterEzEditTable","_adapterEzEditTable2","438","_types","_sort","EVENTS","SUM","MEAN","MIN","MAX","MEDIAN","Q1","Q3","ColOps","opts","onBeforeOperation","isFn","on_before_operation","EMPTY_FN","onAfterOperation","on_after_operation","labelIds","colIndexes","col","operations","operation","outputTypes","write_method","totRowIndexes","tot_row_index","excludeRows","exclude_row","decimalPrecisions","isUndef","decimal_precision","calcAll","isInitialized","colOperations","uIndexes","forEach","val","push","nbCols","colValues","u","getFilteredDataCol","curValues","result","precisions","labels","writeType","idx","k","toLowerCase","isArray","i","Number","calc","writeResult","totRow","style","display","columnCalc","precision","sortColumnValues","numSortAsc","calcMean","calcSum","calcMin","calcMax","calcMedian","calcQ1","calcQ3","isEmpty","toFixed","values","reduce","x","y","Math","max","apply","min","nbValues","aux","floor","posa","posb","sorter","sort","label","labelElm","elm","isNaN","isFinite","innerHTML","oldNode","firstChild","txtNode","createText","replaceChild","439","_event","ColsVisibility","f","config","spanEl","btnEl","contEl","tickToHide","tick_to_hide","manager","headersTbl","headers_table","headersIndex","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","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","headTbl","stylePath","onMouseup","evt","targetElm","targetEvt","removeEvt","contDisplay","addEvt","checkItem","lbl","li","isChecked","checked","getAttribute","split","addClass","removeClass","hide","setHidden","hideCol","buildBtn","buildManager","bind","_hideAtStart","span","createElm","className","setToolbar","targetEl","rDiv","appendChild","insertBefore","colVisEl","btn","title","_this4","container","extNameLabel","ul","headerIndex","getHeadersRowIndex","headerRow","createCheckItem","check","h","itm","click","cellText","_getHeaderText","liElm","p","_hideCells","itemIndex","splice","gridColElms","colElms","hiddenWidth","width","headTblW","showCol","isColHidden","toggleCol","getHiddenCols","_this5","removeElm","hasChildNodes","childNodes","n","nodeType","nodeValue","getText","_this6","colIdx","440","FiltersVisibility","icnExpand","expand_icon_name","icnCollapse","collapse_icon_name","icnExpandHtml","themesPath","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","441","ipAddress","vals","join","sortIP","a","b","aa","bb","_number","AdapterSortableTable","sorted","sortTypes","types","colTypes","sortColAtStart","sort_col_at_start","asyncSort","async_sort","triggerIds","trigger_ids","imgPath","images_path","imgBlank","image_blank","imgClassName","image_class_name","imgAscClassName","image_asc_class_name","imgDescClassName","image_desc_class_name","customKey","custom_key","onSortLoaded","on_sort_loaded","onBeforeSort","on_before_sort","onAfterSort","on_after_sort","stt","adpt","SortableTable","overrideSortableTable","setSortTypes","onbeforesort","sortColumn","disable","onsort","paginator","getValidRows","getPage","descending","sortByColumnIndex","headerOnclick","el","target","srcElement","tagName","CELL_TAG","HEADER_TAG","msie","getCellIndex","oTd","l","initHeader","oSortTypes","tHead","headersRow","img","c","cursor","setAttribute","_headerOnclick","_sortType","updateHeaderArrows","triggers","j","cellAttr","lastChild","getRowValue","oRow","sType","nColumn","sortTypeInfo","_sortTypeInfo","s","getInnerText","getValueFromString","oNode","addSortType","_len","Array","_key","caster","_sortTypes","nbCells","colType","isObj","type","DATE","_addDateType","FORMATTED_NUMBER","decimal","decimalSeparator","_addNumberType","toUpperCase","STRING","IP_ADDRESS","trigger","dateType","locale","getOptions","parsedDate","parse","Date","ids","getFiltersId","header","getHeaderElement","removeChild","442","_adapterSortabletable","_adapterSortabletable2","443","444","src","execScript","eval","445"],"mappings":"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","file":"tf-1-9cf3408ad22349da57bc.js","sourcesContent":["webpackJsonp([1],{\n\n/***/ 435:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./array\": 16,\n\t\t\"./array.js\": 16,\n\t\t\"./const\": 11,\n\t\t\"./const.js\": 11,\n\t\t\"./cookie\": 29,\n\t\t\"./cookie.js\": 29,\n\t\t\"./dom\": 3,\n\t\t\"./dom.js\": 3,\n\t\t\"./emitter\": 8,\n\t\t\"./emitter.js\": 8,\n\t\t\"./event\": 1,\n\t\t\"./event.js\": 1,\n\t\t\"./extensions/advancedGrid/adapterEzEditTable\": 436,\n\t\t\"./extensions/advancedGrid/adapterEzEditTable.js\": 436,\n\t\t\"./extensions/advancedGrid/advancedGrid\": 437,\n\t\t\"./extensions/advancedGrid/advancedGrid.js\": 437,\n\t\t\"./extensions/colOps/colOps\": 438,\n\t\t\"./extensions/colOps/colOps.js\": 438,\n\t\t\"./extensions/colsVisibility/colsVisibility\": 439,\n\t\t\"./extensions/colsVisibility/colsVisibility.js\": 439,\n\t\t\"./extensions/filtersVisibility/filtersVisibility\": 440,\n\t\t\"./extensions/filtersVisibility/filtersVisibility.js\": 440,\n\t\t\"./extensions/sort/adapterSortabletable\": 441,\n\t\t\"./extensions/sort/adapterSortabletable.js\": 441,\n\t\t\"./extensions/sort/sort\": 442,\n\t\t\"./extensions/sort/sort.js\": 442,\n\t\t\"./feature\": 10,\n\t\t\"./feature.js\": 10,\n\t\t\"./modules/alternateRows\": 24,\n\t\t\"./modules/alternateRows.js\": 24,\n\t\t\"./modules/checkList\": 18,\n\t\t\"./modules/checkList.js\": 18,\n\t\t\"./modules/clearButton\": 22,\n\t\t\"./modules/clearButton.js\": 22,\n\t\t\"./modules/dateType\": 30,\n\t\t\"./modules/dateType.js\": 30,\n\t\t\"./modules/dropdown\": 15,\n\t\t\"./modules/dropdown.js\": 15,\n\t\t\"./modules/gridLayout\": 9,\n\t\t\"./modules/gridLayout.js\": 9,\n\t\t\"./modules/hash\": 27,\n\t\t\"./modules/hash.js\": 27,\n\t\t\"./modules/help\": 23,\n\t\t\"./modules/help.js\": 23,\n\t\t\"./modules/highlightKeywords\": 13,\n\t\t\"./modules/highlightKeywords.js\": 13,\n\t\t\"./modules/loader\": 12,\n\t\t\"./modules/loader.js\": 12,\n\t\t\"./modules/noResults\": 25,\n\t\t\"./modules/noResults.js\": 25,\n\t\t\"./modules/paging\": 21,\n\t\t\"./modules/paging.js\": 21,\n\t\t\"./modules/popupFilter\": 14,\n\t\t\"./modules/popupFilter.js\": 14,\n\t\t\"./modules/rowsCounter\": 19,\n\t\t\"./modules/rowsCounter.js\": 19,\n\t\t\"./modules/state\": 26,\n\t\t\"./modules/state.js\": 26,\n\t\t\"./modules/statusBar\": 20,\n\t\t\"./modules/statusBar.js\": 20,\n\t\t\"./modules/storage\": 28,\n\t\t\"./modules/storage.js\": 28,\n\t\t\"./number\": 7,\n\t\t\"./number.js\": 7,\n\t\t\"./root\": 2,\n\t\t\"./root.js\": 2,\n\t\t\"./sort\": 17,\n\t\t\"./sort.js\": 17,\n\t\t\"./string\": 5,\n\t\t\"./string.js\": 5,\n\t\t\"./types\": 4,\n\t\t\"./types.js\": 4\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 435;\n\n\n/***/ },\n\n/***/ 436:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _feature = __webpack_require__(10);\n\t\n\tvar _dom = __webpack_require__(3);\n\t\n\tvar _const = __webpack_require__(11);\n\t\n\tvar _root = __webpack_require__(2);\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _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\t\n\tfunction _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\t\n\tvar INSTANTIATION_ERROR = 'Failed to instantiate EditTable object.\\n \\n\"ezEditTable\" dependency not found.';\n\t\n\t/**\n\t * Adapter module for ezEditTable, an external library providing advanced\n\t * grid features (selection and edition):\n\t * http://codecanyon.net/item/ezedittable-enhance-html-tables/2425123?ref=koalyptus\n\t */\n\t\n\tvar AdapterEzEditTable = function (_Feature) {\n\t _inherits(AdapterEzEditTable, _Feature);\n\t\n\t /**\n\t * Creates an instance of AdapterEzEditTable\n\t *\n\t * @param {TableFilter} tf TableFilter instance\n\t * @param {Object} cfg Configuration options for ezEditTable library\n\t */\n\t function AdapterEzEditTable(tf, cfg) {\n\t _classCallCheck(this, AdapterEzEditTable);\n\t\n\t /**\n\t * Module description\n\t * @type {String}\n\t */\n\t var _this = _possibleConstructorReturn(this, _Feature.call(this, tf, cfg.name));\n\t\n\t _this.desc = cfg.description || 'ezEditTable adapter';\n\t\n\t /**\n\t * Filename of ezEditTable library\n\t * @type {String}\n\t */\n\t _this.filename = cfg.filename || 'ezEditTable.js';\n\t\n\t /**\n\t * Path to ezEditTable library\n\t * @type {String}\n\t */\n\t _this.vendorPath = cfg.vendor_path;\n\t\n\t /**\n\t * Load ezEditTable stylesheet\n\t * @type {Boolean}\n\t */\n\t _this.loadStylesheet = Boolean(cfg.load_stylesheet);\n\t\n\t /**\n\t * Path to ezEditTable stylesheet\n\t * @type {String}\n\t */\n\t _this.stylesheet = cfg.stylesheet || _this.vendorPath + 'ezEditTable.css';\n\t\n\t /**\n\t * Name of ezEditTable stylesheet\n\t * @type {String}\n\t */\n\t _this.stylesheetName = cfg.stylesheet_name || 'ezEditTableCss';\n\t\n\t // Enable the ezEditTable's scroll into view behaviour if grid layout on\n\t cfg.scroll_into_view = cfg.scroll_into_view === false ? false : tf.gridLayout;\n\t\n\t /**\n\t * ezEditTable instance\n\t * @type {EditTable}\n\t * @private\n\t */\n\t _this._ezEditTable = null;\n\t\n\t /**\n\t * ezEditTable configuration\n\t * @private\n\t */\n\t _this.cfg = cfg;\n\t\n\t _this.enable();\n\t return _this;\n\t }\n\t\n\t /**\n\t * Conditionally load ezEditTable library and set advanced grid\n\t */\n\t\n\t\n\t AdapterEzEditTable.prototype.init = function init() {\n\t var _this2 = this;\n\t\n\t if (this.initialized) {\n\t return;\n\t }\n\t var tf = this.tf;\n\t if (_root.root.EditTable) {\n\t this._setAdvancedGrid();\n\t } else {\n\t var path = this.vendorPath + this.filename;\n\t tf.import(this.filename, path, function () {\n\t return _this2._setAdvancedGrid();\n\t });\n\t }\n\t if (this.loadStylesheet && !tf.isImported(this.stylesheet, 'link')) {\n\t tf.import(this.stylesheetName, this.stylesheet, null, 'link');\n\t }\n\t\n\t // TODO: hack to prevent ezEditTable enter key event hijaking.\n\t // Needs to be fixed in the vendor's library\n\t this.emitter.on(['filter-focus', 'filter-blur'], function () {\n\t return _this2._toggleForInputFilter();\n\t });\n\t\n\t /**\n\t * @inherited\n\t */\n\t this.initialized = true;\n\t };\n\t\n\t /**\n\t * Instantiate ezEditTable component for advanced grid features\n\t * @private\n\t */\n\t\n\t\n\t AdapterEzEditTable.prototype._setAdvancedGrid = function _setAdvancedGrid() {\n\t var tf = this.tf;\n\t\n\t //start row for EditTable constructor needs to be calculated\n\t var startRow = void 0,\n\t cfg = this.cfg,\n\t thead = (0, _dom.tag)(tf.tbl, 'thead');\n\t\n\t //if thead exists and startRow not specified, startRow is calculated\n\t //automatically by EditTable\n\t if (thead.length > 0 && !cfg.startRow) {\n\t startRow = undefined;\n\t }\n\t //otherwise startRow config property if any or TableFilter refRow\n\t else {\n\t startRow = cfg.startRow || tf.refRow;\n\t }\n\t\n\t cfg.base_path = cfg.base_path || tf.basePath + 'ezEditTable/';\n\t var editable = cfg.editable;\n\t var selectable = cfg.selection;\n\t\n\t if (selectable) {\n\t cfg.default_selection = cfg.default_selection || 'row';\n\t }\n\t //CSS Styles\n\t cfg.active_cell_css = cfg.active_cell_css || 'ezETSelectedCell';\n\t\n\t var _lastValidRowIndex = 0;\n\t var _lastRowIndex = 0;\n\t\n\t if (selectable) {\n\t (function () {\n\t //Row navigation needs to be calculated according to TableFilter's\n\t //validRowsIndex array\n\t var onAfterSelection = function onAfterSelection(et, selectedElm, e) {\n\t var slc = et.Selection;\n\t //Next valid filtered row needs to be selected\n\t var doSelect = function doSelect(nextRowIndex) {\n\t if (et.defaultSelection === 'row') {\n\t /* eslint-disable */\n\t slc.SelectRowByIndex(nextRowIndex);\n\t /* eslint-enable */\n\t } else {\n\t /* eslint-disable */\n\t et.ClearSelections();\n\t /* eslint-enable */\n\t var cellIndex = selectedElm.cellIndex,\n\t _row = tf.tbl.rows[nextRowIndex];\n\t if (et.defaultSelection === 'both') {\n\t /* eslint-disable */\n\t slc.SelectRowByIndex(nextRowIndex);\n\t /* eslint-enable */\n\t }\n\t if (_row) {\n\t /* eslint-disable */\n\t slc.SelectCell(_row.cells[cellIndex]);\n\t /* eslint-enable */\n\t }\n\t }\n\t //Table is filtered\n\t if (tf.validRowsIndex.length !== tf.getRowsNb()) {\n\t var r = tf.tbl.rows[nextRowIndex];\n\t if (r) {\n\t r.scrollIntoView(false);\n\t }\n\t if (cell) {\n\t if (cell.cellIndex === tf.getCellsNb() - 1 && tf.gridLayout) {\n\t tf.tblCont.scrollLeft = 100000000;\n\t } else if (cell.cellIndex === 0 && tf.gridLayout) {\n\t tf.tblCont.scrollLeft = 0;\n\t } else {\n\t cell.scrollIntoView(false);\n\t }\n\t }\n\t }\n\t };\n\t\n\t //table is not filtered\n\t if (!tf.validRowsIndex) {\n\t return;\n\t }\n\t var validIndexes = tf.validRowsIndex,\n\t validIdxLen = validIndexes.length,\n\t row = et.defaultSelection !== 'row' ? selectedElm.parentNode : selectedElm,\n\t\n\t //cell for default_selection = 'both' or 'cell'\n\t cell = selectedElm.nodeName === 'TD' ? selectedElm : null,\n\t\n\t /* eslint-disable */\n\t keyCode = e !== undefined ? et.Event.GetKey(e) : 0,\n\t\n\t /* eslint-enable */\n\t isRowValid = validIndexes.indexOf(row.rowIndex) !== -1,\n\t nextRowIndex = void 0,\n\t paging = tf.feature('paging'),\n\t\n\t //pgup/pgdown keys\n\t d = keyCode === 34 || keyCode === 33 ? paging && paging.pagingLength || et.nbRowsPerPage : 1;\n\t\n\t //If next row is not valid, next valid filtered row needs to be\n\t //calculated\n\t if (!isRowValid) {\n\t //Selection direction up/down\n\t if (row.rowIndex > _lastRowIndex) {\n\t //last row\n\t if (row.rowIndex >= validIndexes[validIdxLen - 1]) {\n\t nextRowIndex = validIndexes[validIdxLen - 1];\n\t } else {\n\t var calcRowIndex = _lastValidRowIndex + d;\n\t if (calcRowIndex > validIdxLen - 1) {\n\t nextRowIndex = validIndexes[validIdxLen - 1];\n\t } else {\n\t nextRowIndex = validIndexes[calcRowIndex];\n\t }\n\t }\n\t } else {\n\t //first row\n\t if (row.rowIndex <= validIndexes[0]) {\n\t nextRowIndex = validIndexes[0];\n\t } else {\n\t var v = validIndexes[_lastValidRowIndex - d];\n\t nextRowIndex = v ? v : validIndexes[0];\n\t }\n\t }\n\t _lastRowIndex = row.rowIndex;\n\t doSelect(nextRowIndex);\n\t } else {\n\t //If filtered row is valid, special calculation for\n\t //pgup/pgdown keys\n\t if (keyCode !== 34 && keyCode !== 33) {\n\t _lastValidRowIndex = validIndexes.indexOf(row.rowIndex);\n\t _lastRowIndex = row.rowIndex;\n\t } else {\n\t if (keyCode === 34) {\n\t //pgdown\n\t //last row\n\t if (_lastValidRowIndex + d <= validIdxLen - 1) {\n\t nextRowIndex = validIndexes[_lastValidRowIndex + d];\n\t } else {\n\t nextRowIndex = [validIdxLen - 1];\n\t }\n\t } else {\n\t //pgup\n\t //first row\n\t if (_lastValidRowIndex - d <= validIndexes[0]) {\n\t nextRowIndex = validIndexes[0];\n\t } else {\n\t nextRowIndex = validIndexes[_lastValidRowIndex - d];\n\t }\n\t }\n\t _lastRowIndex = nextRowIndex;\n\t _lastValidRowIndex = validIndexes.indexOf(nextRowIndex);\n\t doSelect(nextRowIndex);\n\t }\n\t }\n\t };\n\t\n\t //Page navigation has to be enforced whenever selected row is out of\n\t //the current page range\n\t var onBeforeSelection = function onBeforeSelection(et, selectedElm) {\n\t var row = et.defaultSelection !== 'row' ? selectedElm.parentNode : selectedElm;\n\t if (tf.paging) {\n\t if (tf.feature('paging').nbPages > 1) {\n\t var paging = tf.feature('paging');\n\t //page length is re-assigned in case it has changed\n\t et.nbRowsPerPage = paging.pagingLength;\n\t var validIndexes = tf.validRowsIndex,\n\t validIdxLen = validIndexes.length,\n\t pagingEndRow = parseInt(paging.startPagingRow, 10) + parseInt(paging.pagingLength, 10);\n\t var rowIndex = row.rowIndex;\n\t\n\t if (rowIndex === validIndexes[validIdxLen - 1] && paging.currentPageNb !== paging.nbPages) {\n\t paging.setPage('last');\n\t } else if (rowIndex === validIndexes[0] && paging.currentPageNb !== 1) {\n\t paging.setPage('first');\n\t } else if (rowIndex > validIndexes[pagingEndRow - 1] && rowIndex < validIndexes[validIdxLen - 1]) {\n\t paging.setPage('next');\n\t } else if (rowIndex < validIndexes[paging.startPagingRow] && rowIndex > validIndexes[0]) {\n\t paging.setPage('previous');\n\t }\n\t }\n\t }\n\t };\n\t\n\t //Selected row needs to be visible when paging is activated\n\t if (tf.paging) {\n\t tf.feature('paging').onAfterChangePage = function (paging) {\n\t var advGrid = paging.tf.extension('advancedGrid');\n\t var et = advGrid._ezEditTable;\n\t var slc = et.Selection;\n\t /* eslint-disable */\n\t var row = slc.GetActiveRow();\n\t /* eslint-enable */\n\t if (row) {\n\t row.scrollIntoView(false);\n\t }\n\t /* eslint-disable */\n\t var cell = slc.GetActiveCell();\n\t /* eslint-enable */\n\t if (cell) {\n\t cell.scrollIntoView(false);\n\t }\n\t };\n\t }\n\t\n\t //Rows navigation when rows are filtered is performed with the\n\t //EditTable row selection callback events\n\t if (cfg.default_selection === 'row') {\n\t (function () {\n\t var fnB = cfg.on_before_selected_row;\n\t cfg.on_before_selected_row = function () {\n\t var args = arguments;\n\t onBeforeSelection(args[0], args[1], args[2]);\n\t if (fnB) {\n\t fnB.call(null, args[0], args[1], args[2]);\n\t }\n\t };\n\t var fnA = cfg.on_after_selected_row;\n\t cfg.on_after_selected_row = function () {\n\t var args = arguments;\n\t onAfterSelection(args[0], args[1], args[2]);\n\t if (fnA) {\n\t fnA.call(null, args[0], args[1], args[2]);\n\t }\n\t };\n\t })();\n\t } else {\n\t (function () {\n\t var fnD = cfg.on_before_selected_cell;\n\t cfg.on_before_selected_cell = function () {\n\t var args = arguments;\n\t onBeforeSelection(args[0], args[1], args[2]);\n\t if (fnD) {\n\t fnD.call(null, args[0], args[1], args[2]);\n\t }\n\t };\n\t var fnC = cfg.on_after_selected_cell;\n\t cfg.on_after_selected_cell = function () {\n\t var args = arguments;\n\t onAfterSelection(args[0], args[1], args[2]);\n\t if (fnC) {\n\t fnC.call(null, args[0], args[1], args[2]);\n\t }\n\t };\n\t })();\n\t }\n\t })();\n\t }\n\t if (editable) {\n\t (function () {\n\t //Added or removed rows, TF rows number needs to be re-calculated\n\t var fnE = cfg.on_added_dom_row;\n\t cfg.on_added_dom_row = function () {\n\t var args = arguments;\n\t tf.nbFilterableRows++;\n\t if (!tf.paging) {\n\t tf.emitter.emit('rows-changed', tf, this);\n\t } else {\n\t tf.nbFilterableRows++;\n\t tf.paging = false;\n\t tf.feature('paging').destroy();\n\t tf.feature('paging').reset();\n\t }\n\t if (tf.alternateRows) {\n\t tf.feature('alternateRows').init();\n\t }\n\t if (fnE) {\n\t fnE.call(null, args[0], args[1], args[2]);\n\t }\n\t };\n\t if (cfg.actions && cfg.actions['delete']) {\n\t (function () {\n\t var fnF = cfg.actions['delete'].on_after_submit;\n\t cfg.actions['delete'].on_after_submit = function () {\n\t var args = arguments;\n\t tf.nbFilterableRows--;\n\t if (!tf.paging) {\n\t tf.emitter.emit('rows-changed', tf, this);\n\t } else {\n\t tf.nbFilterableRows--;\n\t tf.paging = false;\n\t tf.feature('paging').destroy();\n\t tf.feature('paging').reset(false);\n\t }\n\t if (tf.alternateRows) {\n\t tf.feature('alternateRows').init();\n\t }\n\t if (fnF) {\n\t fnF.call(null, args[0], args[1]);\n\t }\n\t };\n\t })();\n\t }\n\t })();\n\t }\n\t\n\t try {\n\t /* eslint-disable */\n\t this._ezEditTable = new EditTable(tf.id, cfg, startRow);\n\t this._ezEditTable.Init();\n\t /* eslint-enable */\n\t } catch (e) {\n\t throw new Error(INSTANTIATION_ERROR);\n\t }\n\t\n\t this.initialized = true;\n\t };\n\t\n\t /**\n\t * Reset advanced grid when previously removed\n\t */\n\t\n\t\n\t AdapterEzEditTable.prototype.reset = function reset() {\n\t var ezEditTable = this._ezEditTable;\n\t if (ezEditTable) {\n\t if (this.cfg.selection) {\n\t /* eslint-disable */\n\t ezEditTable.Selection.Set();\n\t /* eslint-enable */\n\t }\n\t if (this.cfg.editable) {\n\t /* eslint-disable */\n\t ezEditTable.Editable.Set();\n\t /* eslint-enable */\n\t }\n\t }\n\t };\n\t\n\t /**\n\t * Toggle behaviour\n\t */\n\t\n\t\n\t AdapterEzEditTable.prototype.toggle = function toggle() {\n\t var ezEditTable = this._ezEditTable;\n\t if (ezEditTable.editable) {\n\t /* eslint-disable */\n\t ezEditTable.Editable.Remove();\n\t /* eslint-enable */\n\t } else {\n\t /* eslint-disable */\n\t ezEditTable.Editable.Set();\n\t /* eslint-enable */\n\t }\n\t if (ezEditTable.selection) {\n\t /* eslint-disable */\n\t ezEditTable.Selection.Remove();\n\t /* eslint-enable */\n\t } else {\n\t /* eslint-disable */\n\t ezEditTable.Selection.Set();\n\t /* eslint-enable */\n\t }\n\t };\n\t\n\t AdapterEzEditTable.prototype._toggleForInputFilter = function _toggleForInputFilter() {\n\t var tf = this.tf;\n\t if (!tf.getActiveFilterId()) {\n\t return;\n\t }\n\t var colIndex = tf.getColumnIndexFromFilterId(tf.getActiveFilterId());\n\t var filterType = tf.getFilterType(colIndex);\n\t if (filterType === _const.INPUT) {\n\t this.toggle();\n\t }\n\t };\n\t\n\t /**\n\t * Remove advanced grid\n\t */\n\t\n\t\n\t AdapterEzEditTable.prototype.destroy = function destroy() {\n\t var _this3 = this;\n\t\n\t if (!this.initialized) {\n\t return;\n\t }\n\t var ezEditTable = this._ezEditTable;\n\t if (ezEditTable) {\n\t if (this.cfg.selection) {\n\t /* eslint-disable */\n\t ezEditTable.Selection.ClearSelections();\n\t ezEditTable.Selection.Remove();\n\t /* eslint-enable */\n\t }\n\t if (this.cfg.editable) {\n\t /* eslint-disable */\n\t ezEditTable.Editable.Remove();\n\t /* eslint-enable */\n\t }\n\t }\n\t\n\t this.emitter.off(['filter-focus', 'filter-blur'], function () {\n\t return _this3._toggleForInputFilter();\n\t });\n\t this.initialized = false;\n\t };\n\t\n\t return AdapterEzEditTable;\n\t}(_feature.Feature);\n\t\n\texports.default = AdapterEzEditTable;\n\n/***/ },\n\n/***/ 437:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _adapterEzEditTable = __webpack_require__(436);\n\t\n\tvar _adapterEzEditTable2 = _interopRequireDefault(_adapterEzEditTable);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = _adapterEzEditTable2.default;\n\n/***/ },\n\n/***/ 438:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _feature = __webpack_require__(10);\n\t\n\tvar _dom = __webpack_require__(3);\n\t\n\tvar _types = __webpack_require__(4);\n\t\n\tvar _sort = __webpack_require__(17);\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _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\t\n\tfunction _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\t\n\tvar EVENTS = ['after-filtering', 'after-page-change', 'after-page-length-change'];\n\t\n\tvar SUM = 'sum';\n\tvar MEAN = 'mean';\n\tvar MIN = 'min';\n\tvar MAX = 'max';\n\tvar MEDIAN = 'median';\n\tvar Q1 = 'q1';\n\tvar Q3 = 'q3';\n\t\n\t/**\r\n\t * Column calculations extension\r\n\t */\n\t\n\tvar ColOps = function (_Feature) {\n\t _inherits(ColOps, _Feature);\n\t\n\t /**\r\n\t * Creates an instance of ColOps\r\n\t *\r\n\t * @param {TableFilter} tf TableFilter instance\r\n\t * @param {Object} opts Configuration object\r\n\t */\n\t function ColOps(tf, opts) {\n\t _classCallCheck(this, ColOps);\n\t\n\t /**\r\n\t * Callback fired before columns operations start\r\n\t * @type {Function}\r\n\t */\n\t var _this = _possibleConstructorReturn(this, _Feature.call(this, tf, opts.name));\n\t\n\t _this.onBeforeOperation = (0, _types.isFn)(opts.on_before_operation) ? opts.on_before_operation : _types.EMPTY_FN;\n\t\n\t /**\r\n\t * Callback fired after columns operations are completed\r\n\t * @type {Function}\r\n\t */\n\t _this.onAfterOperation = (0, _types.isFn)(opts.on_after_operation) ? opts.on_after_operation : _types.EMPTY_FN;\n\t\n\t /**\r\n\t * Configuration options\r\n\t * @type {Object}\r\n\t */\n\t _this.opts = opts;\n\t\n\t /**\r\n\t * List of DOM element IDs containing column's calculation result\r\n\t * @type {Array}\r\n\t */\n\t _this.labelIds = opts.id || [];\n\t\n\t /**\r\n\t * List of columns' indexes for calculations\r\n\t * @type {Array}\r\n\t */\n\t _this.colIndexes = opts.col || [];\n\t\n\t /**\r\n\t * List of operations - possible values: 'sum', 'mean', 'min', 'max',\r\n\t * 'median', 'q1', 'q3'\r\n\t * @type {Array}\r\n\t */\n\t _this.operations = opts.operation || [];\n\t\n\t /**\r\n\t * List of write methods used to write the result - possible values:\r\n\t * 'innerHTML', 'setValue', 'createTextNode'\r\n\t * @type {Array}\r\n\t */\n\t _this.outputTypes = opts.write_method || [];\n\t\n\t /**\r\n\t * List of row indexes displaying the results\r\n\t * @type {Array}\r\n\t */\n\t _this.totRowIndexes = opts.tot_row_index || [];\n\t\n\t /**\r\n\t * List of row indexes excluded from calculations\r\n\t * @type {Array}\r\n\t */\n\t _this.excludeRows = opts.exclude_row || [];\n\t\n\t /**\r\n\t * List of decimal precision for calculation results\r\n\t * @type {Array}\r\n\t */\n\t _this.decimalPrecisions = (0, _types.isUndef)(opts.decimal_precision) ? 2 : opts.decimal_precision;\n\t\n\t _this.enable();\n\t return _this;\n\t }\n\t\n\t /**\r\n\t * Initializes ColOps instance\r\n\t */\n\t\n\t\n\t ColOps.prototype.init = function init() {\n\t var _this2 = this;\n\t\n\t if (this.initialized) {\n\t return;\n\t }\n\t // subscribe to events\n\t this.emitter.on(EVENTS, function () {\n\t return _this2.calcAll();\n\t });\n\t\n\t this.calcAll();\n\t\n\t /** @inherited */\n\t this.initialized = true;\n\t };\n\t\n\t /**\r\n\t * Calculates columns' values\r\n\t * Configuration options are stored in 'opts' property\r\n\t * - 'id' contains ids of elements showing result (array)\r\n\t * - 'col' contains the columns' indexes (array)\r\n\t * - 'operation' contains operation type (array, values: 'sum', 'mean',\r\n\t * 'min', 'max', 'median', 'q1', 'q3')\r\n\t * - 'write_method' array defines which method to use for displaying the\r\n\t * result (innerHTML, setValue, createTextNode) - default: 'innerHTML'\r\n\t * - 'tot_row_index' defines in which row results are displayed\r\n\t * (integers array)\r\n\t *\r\n\t * - changes made by Nuovella:\r\n\t * (1) optimized the routine (now it will only process each column once),\r\n\t * (2) added calculations for the median, lower and upper quartile.\r\n\t */\n\t\n\t\n\t ColOps.prototype.calcAll = function calcAll() {\n\t var tf = this.tf;\n\t if (!tf.isInitialized()) {\n\t return;\n\t }\n\t\n\t this.onBeforeOperation(tf, this);\n\t this.emitter.emit('before-column-operation', tf, this);\n\t\n\t var colIndexes = this.colIndexes,\n\t colOperations = this.operations,\n\t outputTypes = this.outputTypes,\n\t totRowIndexes = this.totRowIndexes,\n\t excludeRows = this.excludeRows,\n\t decimalPrecisions = (0, _types.isUndef)(this.decimalPrecisions) ? 2 : this.decimalPrecisions;\n\t\n\t //nuovella: determine unique list of columns to operate on\n\t var uIndexes = [];\n\t colIndexes.forEach(function (val) {\n\t if (uIndexes.indexOf(val) === -1) {\n\t uIndexes.push(val);\n\t }\n\t });\n\t\n\t var nbCols = uIndexes.length - 1,\n\t rows = tf.tbl.rows,\n\t colValues = [];\n\t\n\t for (var u = 0; u <= nbCols; u++) {\n\t //this retrieves col values\n\t //use uIndexes because we only want to pass through this loop\n\t //once for each column get the values in this unique column\n\t colValues.push(tf.getFilteredDataCol(uIndexes[u], false, true, excludeRows));\n\t\n\t var curValues = colValues[u];\n\t\n\t //next: calculate all operations for this column\n\t var result = 0,\n\t operations = [],\n\t precisions = [],\n\t labels = [],\n\t writeType = void 0,\n\t idx = 0;\n\t\n\t for (var k = 0; k < colIndexes.length; k++) {\n\t if (colIndexes[k] !== uIndexes[u]) {\n\t continue;\n\t }\n\t operations[idx] = colOperations[k].toLowerCase();\n\t precisions[idx] = decimalPrecisions[k];\n\t labels[idx] = this.labelIds[k];\n\t writeType = (0, _types.isArray)(outputTypes) ? outputTypes[k] : null;\n\t idx++;\n\t }\n\t\n\t for (var i = 0; i <= idx; i++) {\n\t // emit values before column calculation\n\t this.emitter.emit('before-column-calc', tf, this, uIndexes[u], curValues, operations[i], precisions[i]);\n\t\n\t result = Number(this.calc(curValues, operations[i], null));\n\t\n\t // emit column calculation result\n\t this.emitter.emit('column-calc', tf, this, uIndexes[u], result, operations[i], precisions[i]);\n\t\n\t // write result in expected DOM element\n\t this.writeResult(result, labels[i], writeType, precisions[i]);\n\t } //for i\n\t\n\t // row(s) with result are always visible\n\t var totRow = totRowIndexes && totRowIndexes[u] ? rows[totRowIndexes[u]] : null;\n\t if (totRow) {\n\t totRow.style.display = '';\n\t }\n\t } //for u\n\t\n\t this.onAfterOperation(tf, this);\n\t this.emitter.emit('after-column-operation', tf, this);\n\t };\n\t\n\t /**\r\n\t * Make desired calculation on specified column.\r\n\t * @param {Number} colIndex Column index\r\n\t * @param {any} [operation=SUM] Operation type\r\n\t * @param {any} precision Decimal precision\r\n\t * @returns {Number}\r\n\t */\n\t\n\t\n\t ColOps.prototype.columnCalc = function columnCalc(colIndex) {\n\t var operation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SUM;\n\t var precision = arguments[2];\n\t\n\t var excludeRows = this.excludeRows || [];\n\t var colValues = this.tf.getFilteredDataCol(colIndex, false, true, excludeRows);\n\t\n\t return this.calc(colValues, operation, precision);\n\t };\n\t\n\t /**\r\n\t * Make calculation on passed values.\r\n\t * @param {Array} values List of values\r\n\t * @param {String} [operation=SUM] Optional operation type\r\n\t * @param {Number} precision Optional result precision\r\n\t * @returns {Number}\r\n\t * @private\r\n\t */\n\t\n\t\n\t ColOps.prototype.calc = function calc(colValues) {\n\t var operation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SUM;\n\t var precision = arguments[2];\n\t\n\t var result = 0;\n\t\n\t if (operation === Q1 || operation === Q3 || operation === MEDIAN) {\n\t colValues = this.sortColumnValues(colValues, _sort.numSortAsc);\n\t }\n\t\n\t switch (operation) {\n\t case MEAN:\n\t result = this.calcMean(colValues);\n\t break;\n\t case SUM:\n\t result = this.calcSum(colValues);\n\t break;\n\t case MIN:\n\t result = this.calcMin(colValues);\n\t break;\n\t case MAX:\n\t result = this.calcMax(colValues);\n\t break;\n\t case MEDIAN:\n\t result = this.calcMedian(colValues);\n\t break;\n\t case Q1:\n\t result = this.calcQ1(colValues);\n\t break;\n\t case Q3:\n\t result = this.calcQ3(colValues);\n\t break;\n\t }\n\t\n\t return (0, _types.isEmpty)(precision) ? result : result.toFixed(precision);\n\t };\n\t\n\t /**\r\n\t * Calculate the sum of passed values.\r\n\t * @param {Array} [values=[]] List of values\r\n\t * @returns {Number}\r\n\t */\n\t\n\t\n\t ColOps.prototype.calcSum = function calcSum() {\n\t var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\t\n\t if ((0, _types.isEmpty)(values)) {\n\t return 0;\n\t }\n\t var result = values.reduce(function (x, y) {\n\t return x + y;\n\t });\n\t return Number(result);\n\t };\n\t\n\t /**\r\n\t * Calculate the mean of passed values.\r\n\t * @param {Array} [values=[]] List of values\r\n\t * @returns {Number}\r\n\t */\n\t\n\t\n\t ColOps.prototype.calcMean = function calcMean() {\n\t var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\t\n\t var result = this.calcSum(values) / values.length;\n\t return Number(result);\n\t };\n\t\n\t /**\r\n\t * Calculate the max value of passed values.\r\n\t * @param {Array} [values=[]] List of values\r\n\t * @returns {Number}\r\n\t */\n\t\n\t\n\t ColOps.prototype.calcMax = function calcMax() {\n\t var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\t\n\t return Math.max.apply(null, values);\n\t };\n\t\n\t /**\r\n\t * Calculate the min value of passed values.\r\n\t * @param {Array} [values=[]] List of values\r\n\t * @returns {Number}\r\n\t */\n\t\n\t\n\t ColOps.prototype.calcMin = function calcMin() {\n\t var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\t\n\t return Math.min.apply(null, values);\n\t };\n\t\n\t /**\r\n\t * Calculate the median of passed values.\r\n\t * @param {Array} [values=[]] List of values\r\n\t * @returns {Number}\r\n\t */\n\t\n\t\n\t ColOps.prototype.calcMedian = function calcMedian() {\n\t var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\t\n\t var nbValues = values.length;\n\t var aux = 0;\n\t if (nbValues % 2 === 1) {\n\t aux = Math.floor(nbValues / 2);\n\t return Number(values[aux]);\n\t }\n\t return Number((values[nbValues / 2] + values[nbValues / 2 - 1]) / 2);\n\t };\n\t\n\t /**\r\n\t * Calculate the lower quartile of passed values.\r\n\t * @param {Array} [values=[]] List of values\r\n\t * @returns {Number}\r\n\t */\n\t\n\t\n\t ColOps.prototype.calcQ1 = function calcQ1() {\n\t var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\t\n\t var nbValues = values.length;\n\t var posa = 0.0;\n\t posa = Math.floor(nbValues / 4);\n\t if (4 * posa === nbValues) {\n\t return Number((values[posa - 1] + values[posa]) / 2);\n\t }\n\t return Number(values[posa]);\n\t };\n\t\n\t /**\r\n\t * Calculate the upper quartile of passed values.\r\n\t * @param {Array} [values=[]] List of values\r\n\t * @returns {Number}\r\n\t */\n\t\n\t\n\t ColOps.prototype.calcQ3 = function calcQ3() {\n\t var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\t\n\t var nbValues = values.length;\n\t var posa = 0.0;\n\t var posb = 0.0;\n\t posa = Math.floor(nbValues / 4);\n\t if (4 * posa === nbValues) {\n\t posb = 3 * posa;\n\t return Number((values[posb] + values[posb - 1]) / 2);\n\t }\n\t return Number(values[nbValues - posa - 1]);\n\t };\n\t\n\t /**\r\n\t * Sort passed values with supplied sorter function.\r\n\t * @param {Array} [values=[]] List of values to be sorted\r\n\t * @param {Function} sorter Sorter function\r\n\t * @returns {Array}\r\n\t */\n\t\n\t\n\t ColOps.prototype.sortColumnValues = function sortColumnValues() {\n\t var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\t var sorter = arguments[1];\n\t\n\t return values.sort(sorter);\n\t };\n\t\n\t /**\r\n\t * Write calculation result in passed DOM element with supplied write method\r\n\t * and decimal precision.\r\n\t * @param {Number} [result=0] Calculation result\r\n\t * @param {DOMElement} label DOM element\r\n\t * @param {String} [writeType='innerhtml'] Write method\r\n\t * @param {Number} [precision=2] Applied decimal precision\r\n\t * @private\r\n\t */\n\t\n\t\n\t ColOps.prototype.writeResult = function writeResult() {\n\t var result = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\t var label = arguments[1];\n\t var writeType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'innerhtml';\n\t var precision = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 2;\n\t\n\t var labelElm = (0, _dom.elm)(label);\n\t\n\t if (!labelElm) {\n\t return;\n\t }\n\t\n\t result = result.toFixed(precision);\n\t if (isNaN(result) || !isFinite(result)) {\n\t result = '';\n\t }\n\t\n\t switch (writeType.toLowerCase()) {\n\t case 'innerhtml':\n\t labelElm.innerHTML = result;\n\t break;\n\t case 'setvalue':\n\t labelElm.value = result;\n\t break;\n\t case 'createtextnode':\n\t var oldNode = labelElm.firstChild;\n\t var txtNode = (0, _dom.createText)(result);\n\t labelElm.replaceChild(txtNode, oldNode);\n\t break;\n\t }\n\t };\n\t\n\t /** Remove extension */\n\t\n\t\n\t ColOps.prototype.destroy = function destroy() {\n\t var _this3 = this;\n\t\n\t if (!this.initialized) {\n\t return;\n\t }\n\t // unsubscribe to events\n\t this.emitter.off(EVENTS, function () {\n\t return _this3.calcAll();\n\t });\n\t\n\t this.initialized = false;\n\t };\n\t\n\t return ColOps;\n\t}(_feature.Feature);\n\t\n\texports.default = ColOps;\n\n/***/ },\n\n/***/ 439:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _feature = __webpack_require__(10);\n\t\n\tvar _dom = __webpack_require__(3);\n\t\n\tvar _types = __webpack_require__(4);\n\t\n\tvar _event = __webpack_require__(1);\n\t\n\tvar _root = __webpack_require__(2);\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _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\t\n\tfunction _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\t\n\t/**\n\t * Columns Visibility extension\n\t */\n\tvar ColsVisibility = function (_Feature) {\n\t _inherits(ColsVisibility, _Feature);\n\t\n\t /**\n\t * Creates an instance of ColsVisibility\n\t * @param {TableFilter} tf TableFilter instance\n\t * @param {Object} Configuration object\n\t */\n\t function ColsVisibility(tf, f) {\n\t _classCallCheck(this, ColsVisibility);\n\t\n\t // Configuration object\n\t var _this = _possibleConstructorReturn(this, _Feature.call(this, tf, f.name));\n\t\n\t var cfg = _this.config;\n\t\n\t /**\n\t * Module name\n\t * @type {String}\n\t */\n\t _this.name = f.name;\n\t\n\t /**\n\t * Module description\n\t * @type {String}\n\t */\n\t _this.desc = f.description || 'Columns visibility manager';\n\t\n\t /**\n\t * show/hide columns container element\n\t * @private\n\t */\n\t _this.spanEl = null;\n\t\n\t /**\n\t * show/hide columns button element\n\t * @private\n\t */\n\t _this.btnEl = null;\n\t\n\t /**\n\t * show/hide columns main container element\n\t * @private\n\t */\n\t _this.contEl = null;\n\t\n\t /**\n\t * Enable tick to hide a column, defaults to true\n\t * @type {Boolean}\n\t */\n\t _this.tickToHide = f.tick_to_hide === false ? false : true;\n\t\n\t /**\n\t * Enable columns manager UI, defaults to true\n\t * @type {Boolean}\n\t */\n\t _this.manager = f.manager === false ? false : true;\n\t\n\t /**\n\t * Headers HTML table reference only if headers are external\n\t * @type {DOMElement}\n\t */\n\t _this.headersTbl = f.headers_table || null;\n\t\n\t /**\n\t * Headers row index only if headers are external\n\t * @type {Number}\n\t */\n\t _this.headersIndex = f.headers_index || 1;\n\t\n\t /**\n\t * ID of main container element\n\t * @type {String}\n\t */\n\t _this.contElTgtId = f.container_target_id || null;\n\t\n\t /**\n\t * Alternative text for column headers in column manager UI\n\t * @type {Array}\n\t */\n\t _this.headersText = f.headers_text || null;\n\t\n\t /**\n\t * ID of button's container element\n\t * @type {String}\n\t */\n\t _this.btnTgtId = f.btn_target_id || null;\n\t\n\t /**\n\t * Button's text, defaults to Columns&#9660;\n\t * @type {String}\n\t */\n\t _this.btnText = f.btn_text || 'Columns&#9660;';\n\t\n\t /**\n\t * Button's inner HTML\n\t * @type {String}\n\t */\n\t _this.btnHtml = f.btn_html || null;\n\t\n\t /**\n\t * Css class for button\n\t * @type {String}\n\t */\n\t _this.btnCssClass = f.btn_css_class || 'colVis';\n\t\n\t /**\n\t * Columns manager UI close link text, defaults to 'Close'\n\t * @type {String}\n\t */\n\t _this.btnCloseText = f.btn_close_text || 'Close';\n\t\n\t /**\n\t * Columns manager UI close link HTML\n\t * @type {String}\n\t */\n\t _this.btnCloseHtml = f.btn_close_html || null;\n\t\n\t /**\n\t * Css for columns manager UI close link\n\t * @type {String}\n\t */\n\t _this.btnCloseCssClass = f.btn_close_css_class || _this.btnCssClass;\n\t\n\t /**\n\t * Extension's stylesheet filename\n\t * @type {String}\n\t */\n\t _this.stylesheet = f.stylesheet || 'colsVisibility.css';\n\t\n\t /**\n\t * Css for columns manager UI span\n\t * @type {String}\n\t */\n\t _this.spanCssClass = f.span_css_class || 'colVisSpan';\n\t\n\t /**\n\t * Css for columns manager UI main container\n\t * @type {String}\n\t */\n\t _this.contCssClass = f.cont_css_class || 'colVisCont';\n\t\n\t /**\n\t * Css for columns manager UI checklist (ul)\n\t * @type {String}\n\t */\n\t _this.listCssClass = cfg.list_css_class || 'cols_checklist';\n\t\n\t /**\n\t * Css for columns manager UI checklist item (li)\n\t * @type {String}\n\t */\n\t _this.listItemCssClass = cfg.checklist_item_css_class || 'cols_checklist_item';\n\t\n\t /**\n\t * Css for columns manager UI checklist item selected state (li)\n\t * @type {String}\n\t */\n\t _this.listSlcItemCssClass = cfg.checklist_selected_item_css_class || 'cols_checklist_slc_item';\n\t\n\t /**\n\t * Text preceding the columns list, defaults to 'Hide' or 'Show'\n\t * depending on tick mode (tick_to_hide option)\n\t * @type {String}\n\t */\n\t _this.text = f.text || (_this.tickToHide ? 'Hide: ' : 'Show: ');\n\t\n\t /**\n\t * List of columns indexes to be hidden at initialization\n\t * @type {Array}\n\t */\n\t _this.atStart = f.at_start || [];\n\t\n\t /**\n\t * Enable hover behaviour on columns manager button/link\n\t * @type {Boolean}\n\t */\n\t _this.enableHover = Boolean(f.enable_hover);\n\t\n\t /**\n\t * Enable select all option, disabled by default\n\t * @type {Boolean}\n\t */\n\t _this.enableTickAll = Boolean(f.enable_tick_all);\n\t\n\t /**\n\t * Text for select all option, defaults to 'Select all:'\n\t * @type {String}\n\t */\n\t _this.tickAllText = f.tick_all_text || 'Select all:';\n\t\n\t /**\n\t * List of indexes of hidden columns\n\t * @private\n\t */\n\t _this.hiddenCols = [];\n\t\n\t /**\n\t * Bound mouseup wrapper\n\t * @private\n\t */\n\t _this.boundMouseup = null;\n\t\n\t /**\n\t * Callback fired when the extension is initialized\n\t * @type {Function}\n\t */\n\t _this.onLoaded = (0, _types.isFn)(f.on_loaded) ? f.on_loaded : _types.EMPTY_FN;\n\t\n\t /**\n\t * Callback fired before the columns manager is opened\n\t * @type {Function}\n\t */\n\t _this.onBeforeOpen = (0, _types.isFn)(f.on_before_open) ? f.on_before_open : _types.EMPTY_FN;\n\t\n\t /**\n\t * Callback fired after the columns manager is opened\n\t * @type {Function}\n\t */\n\t _this.onAfterOpen = (0, _types.isFn)(f.on_after_open) ? f.on_after_open : _types.EMPTY_FN;\n\t\n\t /**\n\t * Callback fired before the columns manager is closed\n\t * @type {Function}\n\t */\n\t _this.onBeforeClose = (0, _types.isFn)(f.on_before_close) ? f.on_before_close : _types.EMPTY_FN;\n\t\n\t /**\n\t * Callback fired after the columns manager is closed\n\t * @type {Function}\n\t */\n\t _this.onAfterClose = (0, _types.isFn)(f.on_after_close) ? f.on_after_close : _types.EMPTY_FN;\n\t\n\t /**\n\t * Callback fired before a column is hidden\n\t * @type {Function}\n\t */\n\t _this.onBeforeColHidden = (0, _types.isFn)(f.on_before_col_hidden) ? f.on_before_col_hidden : _types.EMPTY_FN;\n\t\n\t /**\n\t * Callback fired after a column is hidden\n\t * @type {Function}\n\t */\n\t _this.onAfterColHidden = (0, _types.isFn)(f.on_after_col_hidden) ? f.on_after_col_hidden : _types.EMPTY_FN;\n\t\n\t /**\n\t * Callback fired before a column is displayed\n\t * @type {Function}\n\t */\n\t _this.onBeforeColDisplayed = (0, _types.isFn)(f.on_before_col_displayed) ? f.on_before_col_displayed : _types.EMPTY_FN;\n\t\n\t /**\n\t * Callback fired after a column is displayed\n\t * @type {Function}\n\t */\n\t _this.onAfterColDisplayed = (0, _types.isFn)(f.on_after_col_displayed) ? f.on_after_col_displayed : _types.EMPTY_FN;\n\t\n\t //Grid layout support\n\t if (tf.gridLayout) {\n\t _this.headersTbl = tf.feature('gridLayout').headTbl; //headers table\n\t _this.headersIndex = 0; //headers index\n\t _this.onAfterColDisplayed = function () {};\n\t _this.onAfterColHidden = function () {};\n\t }\n\t\n\t //Loads extension stylesheet\n\t tf.import(f.name + 'Style', tf.stylePath + _this.stylesheet, null, 'link');\n\t\n\t _this.enable();\n\t return _this;\n\t }\n\t\n\t /**\n\t * Mouse-up event handler handling popup auto-close behaviour\n\t * @private\n\t */\n\t\n\t\n\t ColsVisibility.prototype.onMouseup = function onMouseup(evt) {\n\t var targetElm = (0, _event.targetEvt)(evt);\n\t\n\t while (targetElm && targetElm !== this.contEl && targetElm !== this.btnEl) {\n\t targetElm = targetElm.parentNode;\n\t }\n\t\n\t if (targetElm !== this.contEl && targetElm !== this.btnEl) {\n\t this.toggle();\n\t }\n\t\n\t return;\n\t };\n\t\n\t /**\n\t * Toggle columns manager UI\n\t */\n\t\n\t\n\t ColsVisibility.prototype.toggle = function toggle() {\n\t // ensure mouseup event handler is removed\n\t (0, _event.removeEvt)(_root.root, 'mouseup', this.boundMouseup);\n\t\n\t var contDisplay = this.contEl.style.display;\n\t\n\t if (contDisplay !== 'inline') {\n\t this.onBeforeOpen(this);\n\t }\n\t if (contDisplay === 'inline') {\n\t this.onBeforeClose(this);\n\t }\n\t\n\t this.contEl.style.display = contDisplay === 'inline' ? 'none' : 'inline';\n\t\n\t if (contDisplay !== 'inline') {\n\t this.onAfterOpen(this);\n\t (0, _event.addEvt)(_root.root, 'mouseup', this.boundMouseup);\n\t }\n\t if (contDisplay === 'inline') {\n\t this.onAfterClose(this);\n\t }\n\t };\n\t\n\t /**\n\t * Check an item in columns manager UI\n\t * @private\n\t */\n\t\n\t\n\t ColsVisibility.prototype.checkItem = function checkItem(lbl) {\n\t var li = lbl.parentNode;\n\t if (!li || !lbl) {\n\t return;\n\t }\n\t var isChecked = lbl.firstChild.checked;\n\t var colIndex = lbl.firstChild.getAttribute('id').split('_')[1];\n\t colIndex = parseInt(colIndex, 10);\n\t if (isChecked) {\n\t (0, _dom.addClass)(li, this.listSlcItemCssClass);\n\t } else {\n\t (0, _dom.removeClass)(li, this.listSlcItemCssClass);\n\t }\n\t\n\t var hide = false;\n\t if (this.tickToHide && isChecked || !this.tickToHide && !isChecked) {\n\t hide = true;\n\t }\n\t this.setHidden(colIndex, hide);\n\t };\n\t\n\t /**\n\t * Initializes ColsVisibility instance\n\t */\n\t\n\t\n\t ColsVisibility.prototype.init = function init() {\n\t var _this2 = this;\n\t\n\t if (this.initialized || !this.manager) {\n\t return;\n\t }\n\t\n\t this.emitter.on(['hide-column'], function (tf, colIndex) {\n\t return _this2.hideCol(colIndex);\n\t });\n\t\n\t this.buildBtn();\n\t this.buildManager();\n\t\n\t /** @inherited */\n\t this.initialized = true;\n\t\n\t this.boundMouseup = this.onMouseup.bind(this);\n\t\n\t this.emitter.emit('columns-visibility-initialized', this.tf, this);\n\t\n\t // Hide columns at start at very end of initialization, do not move\n\t // as order is important\n\t this._hideAtStart();\n\t };\n\t\n\t /**\n\t * Build main button UI\n\t */\n\t\n\t\n\t ColsVisibility.prototype.buildBtn = function buildBtn() {\n\t var _this3 = this;\n\t\n\t if (this.btnEl) {\n\t return;\n\t }\n\t var tf = this.tf;\n\t var span = (0, _dom.createElm)('span');\n\t span.className = this.spanCssClass;\n\t\n\t //Container element (rdiv or custom element)\n\t if (!this.btnTgtId) {\n\t tf.setToolbar();\n\t }\n\t var targetEl = !this.btnTgtId ? tf.rDiv : (0, _dom.elm)(this.btnTgtId);\n\t\n\t if (!this.btnTgtId) {\n\t var firstChild = targetEl.firstChild;\n\t firstChild.parentNode.insertBefore(span, firstChild);\n\t } else {\n\t targetEl.appendChild(span);\n\t }\n\t\n\t if (!this.btnHtml) {\n\t var btn = (0, _dom.createElm)('a', ['href', 'javascript:;']);\n\t btn.className = this.btnCssClass;\n\t btn.title = this.desc;\n\t\n\t btn.innerHTML = this.btnText;\n\t span.appendChild(btn);\n\t if (!this.enableHover) {\n\t (0, _event.addEvt)(btn, 'click', function (evt) {\n\t return _this3.toggle(evt);\n\t });\n\t } else {\n\t (0, _event.addEvt)(btn, 'mouseover', function (evt) {\n\t return _this3.toggle(evt);\n\t });\n\t }\n\t } else {\n\t //Custom html\n\t span.innerHTML = this.btnHtml;\n\t var colVisEl = span.firstChild;\n\t if (!this.enableHover) {\n\t (0, _event.addEvt)(colVisEl, 'click', function (evt) {\n\t return _this3.toggle(evt);\n\t });\n\t } else {\n\t (0, _event.addEvt)(colVisEl, 'mouseover', function (evt) {\n\t return _this3.toggle(evt);\n\t });\n\t }\n\t }\n\t\n\t this.spanEl = span;\n\t this.btnEl = this.spanEl.firstChild;\n\t\n\t this.onLoaded(this);\n\t };\n\t\n\t /**\n\t * Build columns manager UI\n\t */\n\t\n\t\n\t ColsVisibility.prototype.buildManager = function buildManager() {\n\t var _this4 = this;\n\t\n\t var tf = this.tf;\n\t\n\t var container = !this.contElTgtId ? (0, _dom.createElm)('div') : (0, _dom.elm)(this.contElTgtId);\n\t container.className = this.contCssClass;\n\t\n\t //Extension description\n\t var extNameLabel = (0, _dom.createElm)('p');\n\t extNameLabel.innerHTML = this.text;\n\t container.appendChild(extNameLabel);\n\t\n\t //Headers list\n\t var ul = (0, _dom.createElm)('ul');\n\t ul.className = this.listCssClass;\n\t\n\t var tbl = this.headersTbl ? this.headersTbl : tf.tbl;\n\t var headerIndex = this.headersTbl ? this.headersIndex : tf.getHeadersRowIndex();\n\t var headerRow = tbl.rows[headerIndex];\n\t\n\t //Tick all option\n\t if (this.enableTickAll) {\n\t (function () {\n\t var li = (0, _dom.createCheckItem)('col__' + tf.id, _this4.tickAllText, _this4.tickAllText);\n\t (0, _dom.addClass)(li, _this4.listItemCssClass);\n\t ul.appendChild(li);\n\t li.check.checked = !_this4.tickToHide;\n\t\n\t (0, _event.addEvt)(li.check, 'click', function () {\n\t for (var h = 0; h < headerRow.cells.length; h++) {\n\t var itm = (0, _dom.elm)('col_' + h + '_' + tf.id);\n\t if (itm && li.check.checked !== itm.checked) {\n\t itm.click();\n\t itm.checked = li.check.checked;\n\t }\n\t }\n\t });\n\t })();\n\t }\n\t\n\t for (var i = 0; i < headerRow.cells.length; i++) {\n\t var cell = headerRow.cells[i];\n\t var cellText = this.headersText && this.headersText[i] ? this.headersText[i] : this._getHeaderText(cell);\n\t var liElm = (0, _dom.createCheckItem)('col_' + i + '_' + tf.id, cellText, cellText);\n\t (0, _dom.addClass)(liElm, this.listItemCssClass);\n\t if (!this.tickToHide) {\n\t (0, _dom.addClass)(liElm, this.listSlcItemCssClass);\n\t }\n\t ul.appendChild(liElm);\n\t if (!this.tickToHide) {\n\t liElm.check.checked = true;\n\t }\n\t\n\t (0, _event.addEvt)(liElm.check, 'click', function (evt) {\n\t var elm = (0, _event.targetEvt)(evt);\n\t var lbl = elm.parentNode;\n\t _this4.checkItem(lbl);\n\t });\n\t }\n\t\n\t //separator\n\t var p = (0, _dom.createElm)('p', ['align', 'center']);\n\t var btn = void 0;\n\t //Close link\n\t if (!this.btnCloseHtml) {\n\t btn = (0, _dom.createElm)('a', ['href', 'javascript:;']);\n\t btn.className = this.btnCloseCssClass;\n\t btn.innerHTML = this.btnCloseText;\n\t (0, _event.addEvt)(btn, 'click', function (evt) {\n\t return _this4.toggle(evt);\n\t });\n\t p.appendChild(btn);\n\t } else {\n\t p.innerHTML = this.btnCloseHtml;\n\t btn = p.firstChild;\n\t (0, _event.addEvt)(btn, 'click', function (evt) {\n\t return _this4.toggle(evt);\n\t });\n\t }\n\t\n\t container.appendChild(ul);\n\t container.appendChild(p);\n\t\n\t this.btnEl.parentNode.insertBefore(container, this.btnEl);\n\t this.contEl = container;\n\t };\n\t\n\t /**\n\t * Hide or show specified columns\n\t * @param {Number} colIndex Column index\n\t * @param {Boolean} hide Hide column if true or show if false\n\t */\n\t\n\t\n\t ColsVisibility.prototype.setHidden = function setHidden(colIndex, hide) {\n\t var tf = this.tf;\n\t var tbl = tf.tbl;\n\t\n\t if (hide) {\n\t this.onBeforeColHidden(this, colIndex);\n\t }\n\t if (!hide) {\n\t this.onBeforeColDisplayed(this, colIndex);\n\t }\n\t\n\t this._hideCells(tbl, colIndex, hide);\n\t if (this.headersTbl) {\n\t this._hideCells(this.headersTbl, colIndex, hide);\n\t }\n\t\n\t var hiddenCols = this.hiddenCols;\n\t var itemIndex = hiddenCols.indexOf(colIndex);\n\t if (hide) {\n\t if (itemIndex === -1) {\n\t this.hiddenCols.push(colIndex);\n\t }\n\t } else {\n\t if (itemIndex !== -1) {\n\t this.hiddenCols.splice(itemIndex, 1);\n\t }\n\t }\n\t\n\t var gridLayout = void 0;\n\t var headTbl = void 0;\n\t var gridColElms = void 0;\n\t if (hide) {\n\t //This event is fired just after a column is displayed for\n\t //grid_layout support\n\t //TODO: grid layout module should be responsible for those\n\t //calculations\n\t if (tf.gridLayout) {\n\t gridLayout = tf.feature('gridLayout');\n\t headTbl = gridLayout.headTbl;\n\t gridColElms = gridLayout.colElms;\n\t var hiddenWidth = parseInt(gridColElms[colIndex].style.width, 10);\n\t\n\t var headTblW = parseInt(headTbl.style.width, 10);\n\t headTbl.style.width = headTblW - hiddenWidth + 'px';\n\t tbl.style.width = headTbl.style.width;\n\t }\n\t\n\t this.onAfterColHidden(this, colIndex);\n\t this.emitter.emit('column-hidden', tf, this, colIndex, this.hiddenCols);\n\t }\n\t\n\t if (!hide) {\n\t //This event is fired just after a column is displayed for\n\t //grid_layout support\n\t //TODO: grid layout module should be responsible for those\n\t //calculations\n\t if (tf.gridLayout) {\n\t gridLayout = tf.feature('gridLayout');\n\t headTbl = gridLayout.headTbl;\n\t gridColElms = gridLayout.colElms;\n\t var width = parseInt(gridColElms[colIndex].style.width, 10);\n\t headTbl.style.width = parseInt(headTbl.style.width, 10) + width + 'px';\n\t tf.tbl.style.width = headTbl.style.width;\n\t }\n\t\n\t this.onAfterColDisplayed(this, colIndex);\n\t this.emitter.emit('column-shown', tf, this, colIndex, this.hiddenCols);\n\t }\n\t };\n\t\n\t /**\n\t * Show specified column\n\t * @param {Number} colIndex Column index\n\t */\n\t\n\t\n\t ColsVisibility.prototype.showCol = function showCol(colIndex) {\n\t if (colIndex === undefined || !this.isColHidden(colIndex)) {\n\t return;\n\t }\n\t if (this.manager && this.contEl) {\n\t var itm = (0, _dom.elm)('col_' + colIndex + '_' + this.tf.id);\n\t if (itm) {\n\t itm.click();\n\t }\n\t } else {\n\t this.setHidden(colIndex, false);\n\t }\n\t };\n\t\n\t /**\n\t * Hide specified column\n\t * @param {Number} colIndex Column index\n\t */\n\t\n\t\n\t ColsVisibility.prototype.hideCol = function hideCol(colIndex) {\n\t if (colIndex === undefined || this.isColHidden(colIndex)) {\n\t return;\n\t }\n\t if (this.manager && this.contEl) {\n\t var itm = (0, _dom.elm)('col_' + colIndex + '_' + this.tf.id);\n\t if (itm) {\n\t itm.click();\n\t }\n\t } else {\n\t this.setHidden(colIndex, true);\n\t }\n\t };\n\t\n\t /**\n\t * Determine if specified column is hidden\n\t * @param {Number} colIndex Column index\n\t */\n\t\n\t\n\t ColsVisibility.prototype.isColHidden = function isColHidden(colIndex) {\n\t if (this.hiddenCols.indexOf(colIndex) !== -1) {\n\t return true;\n\t }\n\t return false;\n\t };\n\t\n\t /**\n\t * Toggle visibility of specified column\n\t * @param {Number} colIndex Column index\n\t */\n\t\n\t\n\t ColsVisibility.prototype.toggleCol = function toggleCol(colIndex) {\n\t if (colIndex === undefined || this.isColHidden(colIndex)) {\n\t this.showCol(colIndex);\n\t } else {\n\t this.hideCol(colIndex);\n\t }\n\t };\n\t\n\t /**\n\t * Return the indexes of the columns currently hidden\n\t * @return {Array} column indexes\n\t */\n\t\n\t\n\t ColsVisibility.prototype.getHiddenCols = function getHiddenCols() {\n\t return this.hiddenCols;\n\t };\n\t\n\t /**\n\t * Remove the columns manager\n\t */\n\t\n\t\n\t ColsVisibility.prototype.destroy = function destroy() {\n\t var _this5 = this;\n\t\n\t if (!this.initialized) {\n\t return;\n\t }\n\t if ((0, _dom.elm)(this.contElTgtId)) {\n\t (0, _dom.elm)(this.contElTgtId).innerHTML = '';\n\t } else {\n\t this.contEl.innerHTML = '';\n\t (0, _dom.removeElm)(this.contEl);\n\t this.contEl = null;\n\t }\n\t this.btnEl.innerHTML = '';\n\t (0, _dom.removeElm)(this.btnEl);\n\t this.btnEl = null;\n\t\n\t this.emitter.off(['hide-column'], function (tf, colIndex) {\n\t return _this5.hideCol(colIndex);\n\t });\n\t\n\t this.boundMouseup = null;\n\t\n\t this.initialized = false;\n\t };\n\t\n\t ColsVisibility.prototype._getHeaderText = function _getHeaderText(cell) {\n\t if (!cell.hasChildNodes) {\n\t return '';\n\t }\n\t\n\t for (var i = 0; i < cell.childNodes.length; i++) {\n\t var n = cell.childNodes[i];\n\t if (n.nodeType === 3) {\n\t return n.nodeValue;\n\t } else if (n.nodeType === 1) {\n\t if (n.id && n.id.indexOf('popUp') !== -1) {\n\t continue;\n\t } else {\n\t return (0, _dom.getText)(n);\n\t }\n\t }\n\t continue;\n\t }\n\t return '';\n\t };\n\t\n\t ColsVisibility.prototype._hideCells = function _hideCells(tbl, colIndex, hide) {\n\t for (var i = 0; i < tbl.rows.length; i++) {\n\t var row = tbl.rows[i];\n\t var cell = row.cells[colIndex];\n\t if (cell) {\n\t cell.style.display = hide ? 'none' : '';\n\t }\n\t }\n\t };\n\t\n\t ColsVisibility.prototype._hideAtStart = function _hideAtStart() {\n\t var _this6 = this;\n\t\n\t this.atStart.forEach(function (colIdx) {\n\t _this6.hideCol(colIdx);\n\t });\n\t };\n\t\n\t return ColsVisibility;\n\t}(_feature.Feature);\n\t\n\texports.default = ColsVisibility;\n\n/***/ },\n\n/***/ 440:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _feature = __webpack_require__(10);\n\t\n\tvar _dom = __webpack_require__(3);\n\t\n\tvar _types = __webpack_require__(4);\n\t\n\tvar _event = __webpack_require__(1);\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _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\t\n\tfunction _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\t\n\t/**\r\n\t * Filters Visibility extension\r\n\t */\n\tvar FiltersVisibility = function (_Feature) {\n\t _inherits(FiltersVisibility, _Feature);\n\t\n\t /**\r\n\t * Creates an instance of FiltersVisibility\r\n\t * @param {TableFilter} tf TableFilter instance\r\n\t * @param {Object} Configuration object\r\n\t */\n\t function FiltersVisibility(tf, f) {\n\t _classCallCheck(this, FiltersVisibility);\n\t\n\t /**\r\n\t * Module name\r\n\t * @type {String}\r\n\t */\n\t var _this = _possibleConstructorReturn(this, _Feature.call(this, tf, f.name));\n\t\n\t _this.name = f.name;\n\t\n\t /**\r\n\t * Module description\r\n\t * @type {String}\r\n\t */\n\t _this.desc = f.description || 'Filters row visibility manager';\n\t\n\t /**\r\n\t * Extension's stylesheet filename\r\n\t * @type {String}\r\n\t */\n\t _this.stylesheet = f.stylesheet || 'filtersVisibility.css';\n\t\n\t /**\r\n\t * Expand icon filename\r\n\t * @type {String}\r\n\t */\n\t _this.icnExpand = f.expand_icon_name || 'icn_exp.png';\n\t\n\t /**\r\n\t * Collapse icon filename\r\n\t * @type {String}\r\n\t */\n\t _this.icnCollapse = f.collapse_icon_name || 'icn_clp.png';\n\t\n\t /**\r\n\t * Main container element\r\n\t * @private\r\n\t */\n\t _this.contEl = null;\n\t\n\t /**\r\n\t * Button element\r\n\t * @private\r\n\t */\n\t _this.btnEl = null;\n\t\n\t /**\r\n\t * Expand icon HTML\r\n\t * @private\r\n\t */\n\t _this.icnExpandHtml = '<img src=\"' + tf.themesPath + _this.icnExpand + '\" alt=\"Expand filters\" >';\n\t\n\t /**\r\n\t * Collapse icon HTML\r\n\t * @private\r\n\t */\n\t _this.icnCollapseHtml = '<img src=\"' + tf.themesPath + _this.icnCollapse + '\" alt=\"Collapse filters\" >';\n\t\n\t /**\r\n\t * Default text\r\n\t * @private\r\n\t */\n\t _this.defaultText = 'Toggle filters';\n\t\n\t /**\r\n\t * ID of main container element\r\n\t * @type {String}\r\n\t */\n\t _this.targetId = f.target_id || null;\n\t\n\t /**\r\n\t * Enable expand/collapse icon, defaults to true\r\n\t * @type {Boolean}\r\n\t */\n\t _this.enableIcon = f.enable_icon === false ? false : true;\n\t\n\t /**\r\n\t * Custom text for button\r\n\t * @type {String}\r\n\t */\n\t _this.btnText = f.btn_text || '';\n\t\n\t /**\r\n\t * Collapse button HTML\r\n\t * @private\r\n\t */\n\t _this.collapseBtnHtml = _this.enableIcon ? _this.icnCollapseHtml + _this.btnText : _this.btnText || _this.defaultText;\n\t\n\t /**\r\n\t * Expand button HTML\r\n\t * @private\r\n\t */\n\t _this.expandBtnHtml = _this.enableIcon ? _this.icnExpandHtml + _this.btnText : _this.btnText || _this.defaultText;\n\t\n\t /**\r\n\t * Button's custom HTML\r\n\t * @type {String}\r\n\t */\n\t _this.btnHtml = f.btn_html || null;\n\t\n\t /**\r\n\t * Css class for expand/collapse filters button\r\n\t * @type {String}\r\n\t */\n\t _this.btnCssClass = f.btn_css_class || 'btnExpClpFlt';\n\t\n\t /**\r\n\t * Css class for main container\r\n\t * @type {String}\r\n\t */\n\t _this.contCssClass = f.cont_css_class || 'expClpFlt';\n\t\n\t /**\r\n\t * Filters row index\r\n\t * @type {Number}\r\n\t */\n\t _this.filtersRowIndex = !(0, _types.isUndef)(f.filters_row_index) ? f.filters_row_index : tf.getFiltersRowIndex();\n\t\n\t /**\r\n\t * Make filters visible at initialization, defaults to true\r\n\t * @type {Boolean}\r\n\t */\n\t _this.visibleAtStart = !(0, _types.isUndef)(f.visible_at_start) ? Boolean(f.visible_at_start) : true;\n\t\n\t /**\r\n\t * Callback fired before filters row is shown\r\n\t * @type {Function}\r\n\t */\n\t _this.onBeforeShow = (0, _types.isFn)(f.on_before_show) ? f.on_before_show : _types.EMPTY_FN;\n\t\n\t /**\r\n\t * Callback fired after filters row is shown\r\n\t * @type {Function}\r\n\t */\n\t _this.onAfterShow = (0, _types.isFn)(f.on_after_show) ? f.on_after_show : _types.EMPTY_FN;\n\t\n\t /**\r\n\t * Callback fired before filters row is hidden\r\n\t * @type {Function}\r\n\t */\n\t _this.onBeforeHide = (0, _types.isFn)(f.on_before_hide) ? f.on_before_hide : _types.EMPTY_FN;\n\t\n\t /**\r\n\t * Callback fired after filters row is hidden\r\n\t * @type {Function}\r\n\t */\n\t _this.onAfterHide = (0, _types.isFn)(f.on_after_hide) ? f.on_after_hide : _types.EMPTY_FN;\n\t\n\t //Import extension's stylesheet\n\t tf.import(f.name + 'Style', tf.stylePath + _this.stylesheet, null, 'link');\n\t\n\t _this.enable();\n\t return _this;\n\t }\n\t\n\t /**\r\n\t * Initialise extension\r\n\t */\n\t\n\t\n\t FiltersVisibility.prototype.init = function init() {\n\t var _this2 = this;\n\t\n\t if (this.initialized) {\n\t return;\n\t }\n\t\n\t this.buildUI();\n\t\n\t /**\r\n\t * @inherited\r\n\t */\n\t this.initialized = true;\n\t\n\t this.emitter.on(['show-filters'], function (tf, visible) {\n\t return _this2.show(visible);\n\t });\n\t this.emitter.emit('filters-visibility-initialized', this.tf, this);\n\t };\n\t\n\t /**\r\n\t * Build UI elements\r\n\t */\n\t\n\t\n\t FiltersVisibility.prototype.buildUI = function buildUI() {\n\t var _this3 = this;\n\t\n\t var tf = this.tf;\n\t var span = (0, _dom.createElm)('span');\n\t span.className = this.contCssClass;\n\t\n\t //Container element (rdiv or custom element)\n\t if (!this.targetId) {\n\t tf.setToolbar();\n\t }\n\t var targetEl = !this.targetId ? tf.rDiv : (0, _dom.elm)(this.targetId);\n\t\n\t if (!this.targetId) {\n\t var firstChild = targetEl.firstChild;\n\t firstChild.parentNode.insertBefore(span, firstChild);\n\t } else {\n\t targetEl.appendChild(span);\n\t }\n\t\n\t var btn = void 0;\n\t if (!this.btnHtml) {\n\t btn = (0, _dom.createElm)('a', ['href', 'javascript:void(0);']);\n\t btn.className = this.btnCssClass;\n\t btn.title = this.btnText || this.defaultText;\n\t btn.innerHTML = this.collapseBtnHtml;\n\t span.appendChild(btn);\n\t } else {\n\t //Custom html\n\t span.innerHTML = this.btnHtml;\n\t btn = span.firstChild;\n\t }\n\t\n\t (0, _event.addEvt)(btn, 'click', function () {\n\t return _this3.toggle();\n\t });\n\t\n\t this.contEl = span;\n\t this.btnEl = btn;\n\t\n\t if (!this.visibleAtStart) {\n\t this.toggle();\n\t }\n\t };\n\t\n\t /**\r\n\t * Toggle filters visibility\r\n\t */\n\t\n\t\n\t FiltersVisibility.prototype.toggle = function toggle() {\n\t var tf = this.tf;\n\t var tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.tbl;\n\t var fltRow = tbl.rows[this.filtersRowIndex];\n\t var isDisplayed = fltRow.style.display === '';\n\t\n\t this.show(!isDisplayed);\n\t };\n\t\n\t /**\r\n\t * Show or hide filters\r\n\t *\r\n\t * @param {boolean} [visible=true] Visibility flag\r\n\t */\n\t\n\t\n\t FiltersVisibility.prototype.show = function show() {\n\t var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\t\n\t var tf = this.tf;\n\t var tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.tbl;\n\t var fltRow = tbl.rows[this.filtersRowIndex];\n\t\n\t if (visible) {\n\t this.onBeforeShow(this);\n\t }\n\t if (!visible) {\n\t this.onBeforeHide(this);\n\t }\n\t\n\t fltRow.style.display = visible ? '' : 'none';\n\t if (this.enableIcon && !this.btnHtml) {\n\t this.btnEl.innerHTML = visible ? this.collapseBtnHtml : this.expandBtnHtml;\n\t }\n\t\n\t if (visible) {\n\t this.onAfterShow(this);\n\t }\n\t if (!visible) {\n\t this.onAfterHide(this);\n\t }\n\t\n\t this.emitter.emit('filters-toggled', tf, this, visible);\n\t };\n\t\n\t /**\r\n\t * Destroy the UI\r\n\t */\n\t\n\t\n\t FiltersVisibility.prototype.destroy = function destroy() {\n\t var _this4 = this;\n\t\n\t if (!this.initialized) {\n\t return;\n\t }\n\t\n\t this.emitter.off(['show-filters'], function (tf, visible) {\n\t return _this4.show(visible);\n\t });\n\t\n\t this.btnEl.innerHTML = '';\n\t (0, _dom.removeElm)(this.btnEl);\n\t this.btnEl = null;\n\t\n\t this.contEl.innerHTML = '';\n\t (0, _dom.removeElm)(this.contEl);\n\t this.contEl = null;\n\t this.initialized = false;\n\t };\n\t\n\t return FiltersVisibility;\n\t}(_feature.Feature);\n\t\n\texports.default = FiltersVisibility;\n\n/***/ },\n\n/***/ 441:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _feature = __webpack_require__(10);\n\t\n\tvar _types = __webpack_require__(4);\n\t\n\tvar _dom = __webpack_require__(3);\n\t\n\tvar _event = __webpack_require__(1);\n\t\n\tvar _number = __webpack_require__(7);\n\t\n\tvar _const = __webpack_require__(11);\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _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\t\n\tfunction _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\t\n\t/**\r\n\t * SortableTable Adapter module\r\n\t */\n\tvar AdapterSortableTable = function (_Feature) {\n\t _inherits(AdapterSortableTable, _Feature);\n\t\n\t /**\r\n\t * Creates an instance of AdapterSortableTable\r\n\t * @param {TableFilter} tf TableFilter instance\r\n\t * @param {Object} opts Configuration object\r\n\t */\n\t function AdapterSortableTable(tf, opts) {\n\t _classCallCheck(this, AdapterSortableTable);\n\t\n\t /**\r\n\t * Module name\r\n\t * @type {String}\r\n\t */\n\t var _this = _possibleConstructorReturn(this, _Feature.call(this, tf, opts.name));\n\t\n\t _this.name = opts.name;\n\t\n\t /**\r\n\t * Module description\r\n\t * @type {String}\r\n\t */\n\t _this.desc = opts.description || 'Sortable table';\n\t\n\t /**\r\n\t * Indicate whether table previously sorted\r\n\t * @type {Boolean}\r\n\t * @private\r\n\t */\n\t _this.sorted = false;\n\t\n\t /**\r\n\t * List of sort type per column basis\r\n\t * @type {Array}\r\n\t */\n\t _this.sortTypes = (0, _types.isArray)(opts.types) ? opts.types : tf.colTypes;\n\t\n\t /**\r\n\t * Column to be sorted at initialization, ie:\r\n\t * sort_col_at_start: [1, true]\r\n\t * @type {Array}\r\n\t */\n\t _this.sortColAtStart = (0, _types.isArray)(opts.sort_col_at_start) ? opts.sort_col_at_start : null;\n\t\n\t /**\r\n\t * Enable asynchronous sort, if triggers are external\r\n\t * @type {Boolean}\r\n\t */\n\t _this.asyncSort = Boolean(opts.async_sort);\n\t\n\t /**\r\n\t * List of element IDs triggering sort on a per column basis\r\n\t * @type {Array}\r\n\t */\n\t _this.triggerIds = (0, _types.isArray)(opts.trigger_ids) ? opts.trigger_ids : [];\n\t\n\t // edit .sort-arrow.descending / .sort-arrow.ascending in\n\t // tablefilter.css to reflect any path change\n\t /**\r\n\t * Path to images\r\n\t * @type {String}\r\n\t */\n\t _this.imgPath = opts.images_path || tf.themesPath;\n\t\n\t /**\r\n\t * Blank image file name\r\n\t * @type {String}\r\n\t */\n\t _this.imgBlank = opts.image_blank || 'blank.png';\n\t\n\t /**\r\n\t * Css class for sort indicator image\r\n\t * @type {String}\r\n\t */\n\t _this.imgClassName = opts.image_class_name || 'sort-arrow';\n\t\n\t /**\r\n\t * Css class for ascending sort indicator image\r\n\t * @type {String}\r\n\t */\n\t _this.imgAscClassName = opts.image_asc_class_name || 'ascending';\n\t\n\t /**\r\n\t * Css class for descending sort indicator image\r\n\t * @type {String}\r\n\t */\n\t _this.imgDescClassName = opts.image_desc_class_name || 'descending';\n\t\n\t /**\r\n\t * Cell attribute key storing custom value used for sorting\r\n\t * @type {String}\r\n\t */\n\t _this.customKey = opts.custom_key || 'data-tf-sortKey';\n\t\n\t /**\r\n\t * Callback fired when sort extension is instanciated\r\n\t * @type {Function}\r\n\t */\n\t _this.onSortLoaded = (0, _types.isFn)(opts.on_sort_loaded) ? opts.on_sort_loaded : _types.EMPTY_FN;\n\t\n\t /**\r\n\t * Callback fired before a table column is sorted\r\n\t * @type {Function}\r\n\t */\n\t _this.onBeforeSort = (0, _types.isFn)(opts.on_before_sort) ? opts.on_before_sort : _types.EMPTY_FN;\n\t\n\t /**\r\n\t * Callback fired after a table column is sorted\r\n\t * @type {Function}\r\n\t */\n\t _this.onAfterSort = (0, _types.isFn)(opts.on_after_sort) ? opts.on_after_sort : _types.EMPTY_FN;\n\t\n\t /**\r\n\t * SortableTable instance\r\n\t * @private\r\n\t */\n\t _this.stt = null;\n\t\n\t _this.enable();\n\t return _this;\n\t }\n\t\n\t /**\r\n\t * Initializes AdapterSortableTable instance\r\n\t */\n\t\n\t\n\t AdapterSortableTable.prototype.init = function init() {\n\t var _this2 = this;\n\t\n\t if (this.initialized) {\n\t return;\n\t }\n\t var tf = this.tf;\n\t var adpt = this;\n\t\n\t // SortableTable class sanity check (sortabletable.js)\n\t if ((0, _types.isUndef)(SortableTable)) {\n\t throw new Error('SortableTable class not found.');\n\t }\n\t\n\t // Add any date format if needed\n\t this.emitter.emit('add-date-type-formats', this.tf, this.sortTypes);\n\t\n\t this.overrideSortableTable();\n\t this.setSortTypes();\n\t\n\t this.onSortLoaded(tf, this);\n\t\n\t /*** SortableTable callbacks ***/\n\t this.stt.onbeforesort = function () {\n\t adpt.onBeforeSort(tf, adpt.stt.sortColumn);\n\t\n\t /*** sort behaviour for paging ***/\n\t if (tf.paging) {\n\t tf.feature('paging').disable();\n\t }\n\t };\n\t\n\t this.stt.onsort = function () {\n\t adpt.sorted = true;\n\t\n\t //sort behaviour for paging\n\t if (tf.paging) {\n\t var paginator = tf.feature('paging');\n\t // recalculate valid rows index as sorting may have change it\n\t tf.getValidRows(true);\n\t paginator.enable();\n\t paginator.setPage(paginator.getPage());\n\t }\n\t\n\t adpt.onAfterSort(tf, adpt.stt.sortColumn, adpt.stt.descending);\n\t adpt.emitter.emit('column-sorted', tf, adpt.stt.sortColumn, adpt.stt.descending);\n\t };\n\t\n\t // Column sort at start\n\t var sortColAtStart = adpt.sortColAtStart;\n\t if (sortColAtStart) {\n\t this.stt.sort(sortColAtStart[0], sortColAtStart[1]);\n\t }\n\t\n\t this.emitter.on(['sort'], function (tf, colIdx, desc) {\n\t return _this2.sortByColumnIndex(colIdx, desc);\n\t });\n\t\n\t /** @inherited */\n\t this.initialized = true;\n\t\n\t this.emitter.emit('sort-initialized', tf, this);\n\t };\n\t\n\t /**\r\n\t * Sort specified column\r\n\t * @param {Number} colIdx Column index\r\n\t * @param {Boolean} desc Optional: descending manner\r\n\t */\n\t\n\t\n\t AdapterSortableTable.prototype.sortByColumnIndex = function sortByColumnIndex(colIdx, desc) {\n\t this.stt.sort(colIdx, desc);\n\t };\n\t\n\t /**\r\n\t * Set SortableTable overrides for TableFilter integration\r\n\t */\n\t\n\t\n\t AdapterSortableTable.prototype.overrideSortableTable = function overrideSortableTable() {\n\t var adpt = this,\n\t tf = this.tf;\n\t\n\t /**\r\n\t * Overrides headerOnclick method in order to handle th event\r\n\t * @param {Object} e [description]\r\n\t */\n\t SortableTable.prototype.headerOnclick = function (evt) {\n\t if (!adpt.initialized) {\n\t return;\n\t }\n\t\n\t // find Header element\n\t var el = evt.target || evt.srcElement;\n\t\n\t while (el.tagName !== _const.CELL_TAG && el.tagName !== _const.HEADER_TAG) {\n\t el = el.parentNode;\n\t }\n\t\n\t this.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\n\t };\n\t\n\t /**\r\n\t * Overrides getCellIndex IE returns wrong cellIndex when columns are\r\n\t * hidden\r\n\t * @param {Object} oTd TD element\r\n\t * @return {Number} Cell index\r\n\t */\n\t SortableTable.getCellIndex = function (oTd) {\n\t var cells = oTd.parentNode.cells,\n\t l = cells.length,\n\t i = void 0;\n\t for (i = 0; cells[i] !== oTd && i < l; i++) {}\n\t return i;\n\t };\n\t\n\t /**\r\n\t * Overrides initHeader in order to handle filters row position\r\n\t * @param {Array} oSortTypes\r\n\t */\n\t SortableTable.prototype.initHeader = function (oSortTypes) {\n\t var stt = this;\n\t if (!stt.tHead) {\n\t if (tf.gridLayout) {\n\t stt.tHead = tf.feature('gridLayout').headTbl.tHead;\n\t } else {\n\t return;\n\t }\n\t }\n\t\n\t stt.headersRow = tf.headersRow;\n\t var cells = stt.tHead.rows[stt.headersRow].cells;\n\t stt.sortTypes = oSortTypes || [];\n\t var l = cells.length;\n\t var img = void 0,\n\t c = void 0;\n\t\n\t for (var i = 0; i < l; i++) {\n\t c = cells[i];\n\t if (stt.sortTypes[i] !== null && stt.sortTypes[i] !== 'None') {\n\t c.style.cursor = 'pointer';\n\t img = (0, _dom.createElm)('img', ['src', adpt.imgPath + adpt.imgBlank]);\n\t c.appendChild(img);\n\t if (stt.sortTypes[i] !== null) {\n\t c.setAttribute('_sortType', stt.sortTypes[i]);\n\t }\n\t (0, _event.addEvt)(c, 'click', stt._headerOnclick);\n\t } else {\n\t c.setAttribute('_sortType', oSortTypes[i]);\n\t c._sortType = 'None';\n\t }\n\t }\n\t stt.updateHeaderArrows();\n\t };\n\t\n\t /**\r\n\t * Overrides updateHeaderArrows in order to handle arrows indicators\r\n\t */\n\t SortableTable.prototype.updateHeaderArrows = function () {\n\t var stt = this;\n\t var cells = void 0,\n\t l = void 0,\n\t img = void 0;\n\t\n\t // external headers\n\t if (adpt.asyncSort && adpt.triggerIds.length > 0) {\n\t var triggers = adpt.triggerIds;\n\t cells = [];\n\t l = triggers.length;\n\t for (var j = 0; j < l; j++) {\n\t cells.push((0, _dom.elm)(triggers[j]));\n\t }\n\t } else {\n\t if (!this.tHead) {\n\t return;\n\t }\n\t cells = stt.tHead.rows[stt.headersRow].cells;\n\t l = cells.length;\n\t }\n\t for (var i = 0; i < l; i++) {\n\t var cell = cells[i];\n\t if (!cell) {\n\t continue;\n\t }\n\t var cellAttr = cell.getAttribute('_sortType');\n\t if (cellAttr !== null && cellAttr !== 'None') {\n\t img = cell.lastChild || cell;\n\t if (img.nodeName.toLowerCase() !== 'img') {\n\t img = (0, _dom.createElm)('img', ['src', adpt.imgPath + adpt.imgBlank]);\n\t cell.appendChild(img);\n\t }\n\t if (i === stt.sortColumn) {\n\t img.className = adpt.imgClassName + ' ' + (this.descending ? adpt.imgDescClassName : adpt.imgAscClassName);\n\t } else {\n\t img.className = adpt.imgClassName;\n\t }\n\t }\n\t }\n\t };\n\t\n\t /**\r\n\t * Overrides getRowValue for custom key value feature\r\n\t * @param {Object} oRow Row element\r\n\t * @param {String} sType\r\n\t * @param {Number} nColumn\r\n\t * @return {String}\r\n\t */\n\t SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\n\t var stt = this;\n\t // if we have defined a custom getRowValue use that\n\t var sortTypeInfo = stt._sortTypeInfo[sType];\n\t if (sortTypeInfo && sortTypeInfo.getRowValue) {\n\t return sortTypeInfo.getRowValue(oRow, nColumn);\n\t }\n\t var c = oRow.cells[nColumn];\n\t var s = SortableTable.getInnerText(c);\n\t return stt.getValueFromString(s, sType);\n\t };\n\t\n\t /**\r\n\t * Overrides getInnerText in order to avoid Firefox unexpected sorting\r\n\t * behaviour with untrimmed text elements\r\n\t * @param {Object} oNode DOM element\r\n\t * @return {String} DOM element inner text\r\n\t */\n\t SortableTable.getInnerText = function (oNode) {\n\t if (!oNode) {\n\t return;\n\t }\n\t if (oNode.getAttribute(adpt.customKey)) {\n\t return oNode.getAttribute(adpt.customKey);\n\t } else {\n\t return (0, _dom.getText)(oNode);\n\t }\n\t };\n\t };\n\t\n\t /**\r\n\t * Adds a sort type\r\n\t */\n\t\n\t\n\t AdapterSortableTable.prototype.addSortType = function addSortType() {\n\t for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t args[_key] = arguments[_key];\n\t }\n\t\n\t // Extract the arguments\n\t var id = args[0],\n\t caster = args[1],\n\t sorter = args[2];\n\t\n\t SortableTable.prototype.addSortType(id, caster, sorter);\n\t };\n\t\n\t /**\r\n\t * Sets the sort types on a column basis\r\n\t * @private\r\n\t */\n\t\n\t\n\t AdapterSortableTable.prototype.setSortTypes = function setSortTypes() {\n\t var _this3 = this;\n\t\n\t var tf = this.tf,\n\t sortTypes = this.sortTypes,\n\t _sortTypes = [];\n\t\n\t for (var i = 0; i < tf.nbCells; i++) {\n\t var colType = void 0;\n\t if (sortTypes[i]) {\n\t colType = sortTypes[i];\n\t if ((0, _types.isObj)(colType)) {\n\t if (colType.type === _const.DATE) {\n\t colType = this._addDateType(i, sortTypes);\n\t } else if (colType.type === _const.FORMATTED_NUMBER) {\n\t var decimal = colType.decimal || tf.decimalSeparator;\n\t colType = this._addNumberType(i, decimal);\n\t }\n\t } else {\n\t colType = colType.toLowerCase();\n\t if (colType === _const.DATE) {\n\t colType = this._addDateType(i, sortTypes);\n\t } else if (colType === _const.FORMATTED_NUMBER || colType === _const.NUMBER) {\n\t colType = this._addNumberType(i, tf.decimalSeparator);\n\t } else if (colType === _const.NONE) {\n\t // TODO: normalise 'none' vs 'None'\n\t colType = 'None';\n\t }\n\t }\n\t } else {\n\t colType = _const.STRING;\n\t }\n\t _sortTypes.push(colType);\n\t }\n\t\n\t //Public TF method to add sort type\n\t\n\t //Custom sort types\n\t this.addSortType('caseinsensitivestring', SortableTable.toUpperCase);\n\t this.addSortType(_const.STRING);\n\t this.addSortType(_const.IP_ADDRESS, ipAddress, sortIP);\n\t\n\t this.stt = new SortableTable(tf.tbl, _sortTypes);\n\t\n\t /*** external table headers adapter ***/\n\t if (this.asyncSort && this.triggerIds.length > 0) {\n\t (function () {\n\t var triggers = _this3.triggerIds;\n\t for (var j = 0; j < triggers.length; j++) {\n\t if (triggers[j] === null) {\n\t continue;\n\t }\n\t var trigger = (0, _dom.elm)(triggers[j]);\n\t if (trigger) {\n\t trigger.style.cursor = 'pointer';\n\t\n\t (0, _event.addEvt)(trigger, 'click', function (evt) {\n\t var elm = evt.target;\n\t if (!_this3.tf.sort) {\n\t return;\n\t }\n\t _this3.stt.asyncSort(triggers.indexOf(elm.id));\n\t });\n\t trigger.setAttribute('_sortType', _sortTypes[j]);\n\t }\n\t }\n\t })();\n\t }\n\t };\n\t\n\t AdapterSortableTable.prototype._addDateType = function _addDateType(colIndex, types) {\n\t var tf = this.tf;\n\t var dateType = tf.feature('dateType');\n\t var locale = dateType.getOptions(colIndex, types).locale || tf.locale;\n\t var colType = _const.DATE + '-' + locale;\n\t\n\t this.addSortType(colType, function (value) {\n\t var parsedDate = dateType.parse(value, locale);\n\t // Invalid date defaults to Wed Feb 04 -768 11:00:00\n\t return isNaN(+parsedDate) ? new Date(-86400000000000) : parsedDate;\n\t });\n\t return colType;\n\t };\n\t\n\t AdapterSortableTable.prototype._addNumberType = function _addNumberType(colIndex, decimal) {\n\t var colType = '' + _const.FORMATTED_NUMBER + (decimal === '.' ? '' : '-custom');\n\t\n\t this.addSortType(colType, function (value) {\n\t return (0, _number.parse)(value, decimal);\n\t });\n\t return colType;\n\t };\n\t\n\t /**\r\n\t * Remove extension\r\n\t */\n\t\n\t\n\t AdapterSortableTable.prototype.destroy = function destroy() {\n\t var _this4 = this;\n\t\n\t if (!this.initialized) {\n\t return;\n\t }\n\t var tf = this.tf;\n\t this.emitter.off(['sort'], function (tf, colIdx, desc) {\n\t return _this4.sortByColumnIndex(colIdx, desc);\n\t });\n\t this.sorted = false;\n\t this.stt.destroy();\n\t\n\t var ids = tf.getFiltersId();\n\t for (var idx = 0; idx < ids.length; idx++) {\n\t var header = tf.getHeaderElement(idx);\n\t var img = (0, _dom.tag)(header, 'img');\n\t\n\t if (img.length === 1) {\n\t header.removeChild(img[0]);\n\t }\n\t }\n\t this.initialized = false;\n\t };\n\t\n\t return AdapterSortableTable;\n\t}(_feature.Feature);\n\t\n\t//Converters\n\t\n\t\n\texports.default = AdapterSortableTable;\n\tfunction ipAddress(value) {\n\t var vals = value.split('.');\n\t for (var x in vals) {\n\t var val = vals[x];\n\t while (3 > val.length) {\n\t val = '0' + val;\n\t }\n\t vals[x] = val;\n\t }\n\t return vals.join('.');\n\t}\n\t\n\tfunction sortIP(a, b) {\n\t var aa = ipAddress(a.value.toLowerCase());\n\t var bb = ipAddress(b.value.toLowerCase());\n\t if (aa === bb) {\n\t return 0;\n\t } else if (aa < bb) {\n\t return -1;\n\t } else {\n\t return 1;\n\t }\n\t}\n\n/***/ },\n\n/***/ 442:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _adapterSortabletable = __webpack_require__(441);\n\t\n\tvar _adapterSortabletable2 = _interopRequireDefault(_adapterSortabletable);\n\t\n\tvar _root = __webpack_require__(2);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tif (!_root.root.SortableTable) {\n\t __webpack_require__(443);\n\t}\n\t\n\texports.default = _adapterSortabletable2.default;\n\n/***/ },\n\n/***/ 443:\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(444)(__webpack_require__(445))\n\n/***/ },\n\n/***/ 444:\n/***/ function(module, exports) {\n\n\t/*\r\n\t\tMIT License http://www.opensource.org/licenses/mit-license.php\r\n\t\tAuthor Tobias Koppers @sokra\r\n\t*/\r\n\tmodule.exports = function(src) {\r\n\t\tif (typeof execScript !== \"undefined\")\r\n\t\t\texecScript(src);\r\n\t\telse\r\n\t\t\teval.call(null, src);\r\n\t}\r\n\n\n/***/ },\n\n/***/ 445:\n/***/ function(module, exports) {\n\n\tmodule.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-1-9cf3408ad22349da57bc.js","var map = {\n\t\"./array\": 16,\n\t\"./array.js\": 16,\n\t\"./const\": 11,\n\t\"./const.js\": 11,\n\t\"./cookie\": 29,\n\t\"./cookie.js\": 29,\n\t\"./dom\": 3,\n\t\"./dom.js\": 3,\n\t\"./emitter\": 8,\n\t\"./emitter.js\": 8,\n\t\"./event\": 1,\n\t\"./event.js\": 1,\n\t\"./extensions/advancedGrid/adapterEzEditTable\": 436,\n\t\"./extensions/advancedGrid/adapterEzEditTable.js\": 436,\n\t\"./extensions/advancedGrid/advancedGrid\": 437,\n\t\"./extensions/advancedGrid/advancedGrid.js\": 437,\n\t\"./extensions/colOps/colOps\": 438,\n\t\"./extensions/colOps/colOps.js\": 438,\n\t\"./extensions/colsVisibility/colsVisibility\": 439,\n\t\"./extensions/colsVisibility/colsVisibility.js\": 439,\n\t\"./extensions/filtersVisibility/filtersVisibility\": 440,\n\t\"./extensions/filtersVisibility/filtersVisibility.js\": 440,\n\t\"./extensions/sort/adapterSortabletable\": 441,\n\t\"./extensions/sort/adapterSortabletable.js\": 441,\n\t\"./extensions/sort/sort\": 442,\n\t\"./extensions/sort/sort.js\": 442,\n\t\"./feature\": 10,\n\t\"./feature.js\": 10,\n\t\"./modules/alternateRows\": 24,\n\t\"./modules/alternateRows.js\": 24,\n\t\"./modules/checkList\": 18,\n\t\"./modules/checkList.js\": 18,\n\t\"./modules/clearButton\": 22,\n\t\"./modules/clearButton.js\": 22,\n\t\"./modules/dateType\": 30,\n\t\"./modules/dateType.js\": 30,\n\t\"./modules/dropdown\": 15,\n\t\"./modules/dropdown.js\": 15,\n\t\"./modules/gridLayout\": 9,\n\t\"./modules/gridLayout.js\": 9,\n\t\"./modules/hash\": 27,\n\t\"./modules/hash.js\": 27,\n\t\"./modules/help\": 23,\n\t\"./modules/help.js\": 23,\n\t\"./modules/highlightKeywords\": 13,\n\t\"./modules/highlightKeywords.js\": 13,\n\t\"./modules/loader\": 12,\n\t\"./modules/loader.js\": 12,\n\t\"./modules/noResults\": 25,\n\t\"./modules/noResults.js\": 25,\n\t\"./modules/paging\": 21,\n\t\"./modules/paging.js\": 21,\n\t\"./modules/popupFilter\": 14,\n\t\"./modules/popupFilter.js\": 14,\n\t\"./modules/rowsCounter\": 19,\n\t\"./modules/rowsCounter.js\": 19,\n\t\"./modules/state\": 26,\n\t\"./modules/state.js\": 26,\n\t\"./modules/statusBar\": 20,\n\t\"./modules/statusBar.js\": 20,\n\t\"./modules/storage\": 28,\n\t\"./modules/storage.js\": 28,\n\t\"./number\": 7,\n\t\"./number.js\": 7,\n\t\"./root\": 2,\n\t\"./root.js\": 2,\n\t\"./sort\": 17,\n\t\"./sort.js\": 17,\n\t\"./string\": 5,\n\t\"./string.js\": 5,\n\t\"./types\": 4,\n\t\"./types.js\": 4\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 435;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src ^\\.\\/.*$\n// module id = 435\n// module chunks = 1","import {Feature} from '../../feature';\nimport {tag} from '../../dom';\nimport {INPUT} from '../../const';\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 = cfg.description || 'ezEditTable adapter';\n\n /**\n * Filename of ezEditTable library\n * @type {String}\n */\n this.filename = 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 = cfg.stylesheet || this.vendorPath + 'ezEditTable.css';\n\n /**\n * Name of ezEditTable stylesheet\n * @type {String}\n */\n this.stylesheetName = 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 ?\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.tbl, '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.tbl.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.tbl.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.pagingLength || 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.pagingLength;\n let validIndexes = tf.validRowsIndex,\n validIdxLen = validIndexes.length,\n pagingEndRow = parseInt(paging.startPagingRow, 10) +\n parseInt(paging.pagingLength, 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 AdapterEzEditTable from './adapterEzEditTable';\n\nexport default AdapterEzEditTable;\n\n\n// WEBPACK FOOTER //\n// ./src/extensions/advancedGrid/advancedGrid.js","import {Feature} from '../../feature';\r\nimport {createText, elm} from '../../dom';\r\nimport {isArray, isFn, isUndef, isEmpty, EMPTY_FN} from '../../types';\r\nimport {numSortAsc} from '../../sort';\r\n\r\nconst EVENTS = [\r\n 'after-filtering',\r\n 'after-page-change',\r\n 'after-page-length-change'\r\n];\r\n\r\nconst SUM = 'sum';\r\nconst MEAN = 'mean';\r\nconst MIN = 'min';\r\nconst MAX = 'max';\r\nconst MEDIAN = 'median';\r\nconst Q1 = 'q1';\r\nconst Q3 = 'q3';\r\n\r\n/**\r\n * Column calculations extension\r\n */\r\nexport default class ColOps extends Feature {\r\n\r\n /**\r\n * Creates an instance of ColOps\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} opts Configuration object\r\n */\r\n constructor(tf, opts) {\r\n super(tf, opts.name);\r\n\r\n /**\r\n * Callback fired before columns operations start\r\n * @type {Function}\r\n */\r\n this.onBeforeOperation = isFn(opts.on_before_operation) ?\r\n opts.on_before_operation : EMPTY_FN;\r\n\r\n /**\r\n * Callback fired after columns operations are completed\r\n * @type {Function}\r\n */\r\n this.onAfterOperation = isFn(opts.on_after_operation) ?\r\n opts.on_after_operation : EMPTY_FN;\r\n\r\n /**\r\n * Configuration options\r\n * @type {Object}\r\n */\r\n this.opts = opts;\r\n\r\n /**\r\n * List of DOM element IDs containing column's calculation result\r\n * @type {Array}\r\n */\r\n this.labelIds = opts.id || [];\r\n\r\n /**\r\n * List of columns' indexes for calculations\r\n * @type {Array}\r\n */\r\n this.colIndexes = opts.col || [];\r\n\r\n /**\r\n * List of operations - possible values: 'sum', 'mean', 'min', 'max',\r\n * 'median', 'q1', 'q3'\r\n * @type {Array}\r\n */\r\n this.operations = opts.operation || [];\r\n\r\n /**\r\n * List of write methods used to write the result - possible values:\r\n * 'innerHTML', 'setValue', 'createTextNode'\r\n * @type {Array}\r\n */\r\n this.outputTypes = opts.write_method || [];\r\n\r\n /**\r\n * List of row indexes displaying the results\r\n * @type {Array}\r\n */\r\n this.totRowIndexes = opts.tot_row_index || [];\r\n\r\n /**\r\n * List of row indexes excluded from calculations\r\n * @type {Array}\r\n */\r\n this.excludeRows = opts.exclude_row || [];\r\n\r\n /**\r\n * List of decimal precision for calculation results\r\n * @type {Array}\r\n */\r\n this.decimalPrecisions = isUndef(opts.decimal_precision) ?\r\n 2 : opts.decimal_precision;\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initializes ColOps instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n // subscribe to events\r\n this.emitter.on(EVENTS, () => this.calcAll());\r\n\r\n this.calcAll();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Calculates columns' values\r\n * Configuration options are stored in 'opts' property\r\n * - 'id' contains ids of elements showing result (array)\r\n * - 'col' contains the columns' indexes (array)\r\n * - 'operation' contains operation type (array, values: 'sum', 'mean',\r\n * 'min', 'max', 'median', 'q1', 'q3')\r\n * - 'write_method' array defines which method to use for displaying the\r\n * result (innerHTML, setValue, createTextNode) - default: 'innerHTML'\r\n * - 'tot_row_index' defines in which row results are displayed\r\n * (integers array)\r\n *\r\n * - changes made by Nuovella:\r\n * (1) optimized the routine (now it will only process each column once),\r\n * (2) added calculations for the median, lower and upper quartile.\r\n */\r\n calcAll() {\r\n let tf = this.tf;\r\n if (!tf.isInitialized()) {\r\n return;\r\n }\r\n\r\n this.onBeforeOperation(tf, this);\r\n this.emitter.emit('before-column-operation', tf, this);\r\n\r\n let colIndexes = this.colIndexes,\r\n colOperations = this.operations,\r\n outputTypes = this.outputTypes,\r\n totRowIndexes = this.totRowIndexes,\r\n excludeRows = this.excludeRows,\r\n decimalPrecisions = isUndef(this.decimalPrecisions) ?\r\n 2 : this.decimalPrecisions;\r\n\r\n //nuovella: determine unique list of columns to operate on\r\n let uIndexes = [];\r\n colIndexes.forEach((val) => {\r\n if (uIndexes.indexOf(val) === -1) {\r\n uIndexes.push(val);\r\n }\r\n });\r\n\r\n let nbCols = uIndexes.length - 1,\r\n rows = tf.tbl.rows,\r\n colValues = [];\r\n\r\n for (let u = 0; u <= nbCols; u++) {\r\n //this retrieves col values\r\n //use uIndexes because we only want to pass through this loop\r\n //once for each column get the values in this unique column\r\n colValues.push(tf\r\n .getFilteredDataCol(uIndexes[u], false, true, excludeRows)\r\n );\r\n\r\n let curValues = colValues[u];\r\n\r\n //next: calculate all operations for this column\r\n let result = 0,\r\n operations = [],\r\n precisions = [],\r\n labels = [],\r\n writeType,\r\n idx = 0;\r\n\r\n for (let k = 0; k < colIndexes.length; k++) {\r\n if (colIndexes[k] !== uIndexes[u]) {\r\n continue;\r\n }\r\n operations[idx] = colOperations[k].toLowerCase();\r\n precisions[idx] = decimalPrecisions[k];\r\n labels[idx] = this.labelIds[k];\r\n writeType = isArray(outputTypes) ? outputTypes[k] : null;\r\n idx++;\r\n }\r\n\r\n for (let i = 0; i <= idx; i++) {\r\n // emit values before column calculation\r\n this.emitter.emit(\r\n 'before-column-calc',\r\n tf,\r\n this,\r\n uIndexes[u],\r\n curValues,\r\n operations[i],\r\n precisions[i]\r\n );\r\n\r\n result = Number(this.calc(curValues, operations[i], null));\r\n\r\n // emit column calculation result\r\n this.emitter.emit(\r\n 'column-calc',\r\n tf,\r\n this,\r\n uIndexes[u],\r\n result,\r\n operations[i],\r\n precisions[i]\r\n );\r\n\r\n // write result in expected DOM element\r\n this.writeResult(\r\n result,\r\n labels[i],\r\n writeType,\r\n precisions[i]\r\n );\r\n\r\n }//for i\r\n\r\n // row(s) with result are always visible\r\n let totRow = totRowIndexes && totRowIndexes[u] ?\r\n rows[totRowIndexes[u]] : null;\r\n if (totRow) {\r\n totRow.style.display = '';\r\n }\r\n }//for u\r\n\r\n this.onAfterOperation(tf, this);\r\n this.emitter.emit('after-column-operation', tf, this);\r\n }\r\n\r\n /**\r\n * Make desired calculation on specified column.\r\n * @param {Number} colIndex Column index\r\n * @param {any} [operation=SUM] Operation type\r\n * @param {any} precision Decimal precision\r\n * @returns {Number}\r\n */\r\n columnCalc(colIndex, operation = SUM, precision) {\r\n let excludeRows = this.excludeRows || [];\r\n let colValues =\r\n this.tf.getFilteredDataCol(colIndex, false, true, excludeRows);\r\n\r\n return this.calc(colValues, operation, precision);\r\n }\r\n\r\n /**\r\n * Make calculation on passed values.\r\n * @param {Array} values List of values\r\n * @param {String} [operation=SUM] Optional operation type\r\n * @param {Number} precision Optional result precision\r\n * @returns {Number}\r\n * @private\r\n */\r\n calc(colValues, operation = SUM, precision) {\r\n let result = 0;\r\n\r\n if (operation === Q1 || operation === Q3 || operation === MEDIAN) {\r\n colValues = this.sortColumnValues(colValues, numSortAsc);\r\n }\r\n\r\n switch (operation) {\r\n case MEAN:\r\n result = this.calcMean(colValues);\r\n break;\r\n case SUM:\r\n result = this.calcSum(colValues);\r\n break;\r\n case MIN:\r\n result = this.calcMin(colValues);\r\n break;\r\n case MAX:\r\n result = this.calcMax(colValues);\r\n break;\r\n case MEDIAN:\r\n result = this.calcMedian(colValues);\r\n break;\r\n case Q1:\r\n result = this.calcQ1(colValues);\r\n break;\r\n case Q3:\r\n result = this.calcQ3(colValues);\r\n break;\r\n }\r\n\r\n return isEmpty(precision) ? result : result.toFixed(precision);\r\n }\r\n\r\n /**\r\n * Calculate the sum of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcSum(values = []) {\r\n if (isEmpty(values)) {\r\n return 0;\r\n }\r\n let result = values.reduce((x, y) => x + y);\r\n return Number(result);\r\n }\r\n\r\n /**\r\n * Calculate the mean of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMean(values = []) {\r\n let result = this.calcSum(values) / values.length;\r\n return Number(result);\r\n }\r\n\r\n /**\r\n * Calculate the max value of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMax(values = []) {\r\n return Math.max.apply(null, values);\r\n }\r\n\r\n /**\r\n * Calculate the min value of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMin(values = []) {\r\n return Math.min.apply(null, values);\r\n }\r\n\r\n /**\r\n * Calculate the median of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMedian(values = []) {\r\n let nbValues = values.length;\r\n let aux = 0;\r\n if (nbValues % 2 === 1) {\r\n aux = Math.floor(nbValues / 2);\r\n return Number(values[aux]);\r\n }\r\n return Number(\r\n (values[nbValues / 2] +\r\n values[((nbValues / 2) - 1)]) / 2\r\n );\r\n }\r\n\r\n /**\r\n * Calculate the lower quartile of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcQ1(values = []) {\r\n let nbValues = values.length;\r\n let posa = 0.0;\r\n posa = Math.floor(nbValues / 4);\r\n if (4 * posa === nbValues) {\r\n return Number(\r\n (values[posa - 1] + values[posa]) / 2\r\n );\r\n }\r\n return Number(values[posa]);\r\n }\r\n\r\n /**\r\n * Calculate the upper quartile of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcQ3(values = []) {\r\n let nbValues = values.length;\r\n let posa = 0.0;\r\n let posb = 0.0;\r\n posa = Math.floor(nbValues / 4);\r\n if (4 * posa === nbValues) {\r\n posb = 3 * posa;\r\n return Number(\r\n (values[posb] + values[posb - 1]) / 2\r\n );\r\n }\r\n return Number(values[nbValues - posa - 1]);\r\n }\r\n\r\n /**\r\n * Sort passed values with supplied sorter function.\r\n * @param {Array} [values=[]] List of values to be sorted\r\n * @param {Function} sorter Sorter function\r\n * @returns {Array}\r\n */\r\n sortColumnValues(values = [], sorter) {\r\n return values.sort(sorter);\r\n }\r\n\r\n /**\r\n * Write calculation result in passed DOM element with supplied write method\r\n * and decimal precision.\r\n * @param {Number} [result=0] Calculation result\r\n * @param {DOMElement} label DOM element\r\n * @param {String} [writeType='innerhtml'] Write method\r\n * @param {Number} [precision=2] Applied decimal precision\r\n * @private\r\n */\r\n writeResult(result = 0, label, writeType = 'innerhtml', precision = 2) {\r\n let labelElm = elm(label);\r\n\r\n if (!labelElm) {\r\n return;\r\n }\r\n\r\n result = result.toFixed(precision);\r\n if (isNaN(result) || !isFinite(result)) {\r\n result = '';\r\n }\r\n\r\n switch (writeType.toLowerCase()) {\r\n case 'innerhtml':\r\n labelElm.innerHTML = result;\r\n break;\r\n case 'setvalue':\r\n labelElm.value = result;\r\n break;\r\n case 'createtextnode':\r\n let oldNode = labelElm.firstChild;\r\n let txtNode = createText(result);\r\n labelElm.replaceChild(txtNode, oldNode);\r\n break;\r\n }\r\n }\r\n\r\n /** Remove extension */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n // unsubscribe to events\r\n this.emitter.off(EVENTS, () => this.calcAll());\r\n\r\n this.initialized = false;\r\n }\r\n\r\n}\r\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\n} from '../../dom';\nimport {isFn, EMPTY_FN} from '../../types';\nimport {addEvt, targetEvt, removeEvt} from '../../event';\nimport {root} from '../../root';\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 = 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 = f.tick_to_hide === false ? false : true;\n\n /**\n * Enable columns manager UI, defaults to true\n * @type {Boolean}\n */\n this.manager = f.manager === false ? false : 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 = f.headers_index || 1;\n\n /**\n * ID of main container element\n * @type {String}\n */\n this.contElTgtId = f.container_target_id || null;\n\n /**\n * Alternative text for column headers in column manager UI\n * @type {Array}\n */\n this.headersText = f.headers_text || null;\n\n /**\n * ID of button's container element\n * @type {String}\n */\n this.btnTgtId = f.btn_target_id || null;\n\n /**\n * Button's text, defaults to Columns&#9660;\n * @type {String}\n */\n this.btnText = f.btn_text || 'Columns&#9660;';\n\n /**\n * Button's inner HTML\n * @type {String}\n */\n this.btnHtml = f.btn_html || null;\n\n /**\n * Css class for button\n * @type {String}\n */\n this.btnCssClass = f.btn_css_class || 'colVis';\n\n /**\n * Columns manager UI close link text, defaults to 'Close'\n * @type {String}\n */\n this.btnCloseText = f.btn_close_text || 'Close';\n\n /**\n * Columns manager UI close link HTML\n * @type {String}\n */\n this.btnCloseHtml = f.btn_close_html || null;\n\n /**\n * Css for columns manager UI close link\n * @type {String}\n */\n this.btnCloseCssClass = f.btn_close_css_class || this.btnCssClass;\n\n /**\n * Extension's stylesheet filename\n * @type {String}\n */\n this.stylesheet = f.stylesheet || 'colsVisibility.css';\n\n /**\n * Css for columns manager UI span\n * @type {String}\n */\n this.spanCssClass = f.span_css_class || 'colVisSpan';\n\n /**\n * Css for columns manager UI main container\n * @type {String}\n */\n this.contCssClass = f.cont_css_class || 'colVisCont';\n\n /**\n * Css for columns manager UI checklist (ul)\n * @type {String}\n */\n this.listCssClass = cfg.list_css_class || 'cols_checklist';\n\n /**\n * Css for columns manager UI checklist item (li)\n * @type {String}\n */\n this.listItemCssClass = 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 = cfg.checklist_selected_item_css_class ||\n '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 = 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 = 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 = f.tick_all_text || 'Select all:';\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 = isFn(f.on_loaded) ? f.on_loaded : EMPTY_FN;\n\n /**\n * Callback fired before the columns manager is opened\n * @type {Function}\n */\n this.onBeforeOpen = isFn(f.on_before_open) ?\n f.on_before_open : EMPTY_FN;\n\n /**\n * Callback fired after the columns manager is opened\n * @type {Function}\n */\n this.onAfterOpen = isFn(f.on_after_open) ? f.on_after_open : EMPTY_FN;\n\n /**\n * Callback fired before the columns manager is closed\n * @type {Function}\n */\n this.onBeforeClose = isFn(f.on_before_close) ?\n f.on_before_close : EMPTY_FN;\n\n /**\n * Callback fired after the columns manager is closed\n * @type {Function}\n */\n this.onAfterClose = isFn(f.on_after_close) ?\n f.on_after_close : EMPTY_FN;\n\n /**\n * Callback fired before a column is hidden\n * @type {Function}\n */\n this.onBeforeColHidden = isFn(f.on_before_col_hidden) ?\n f.on_before_col_hidden : EMPTY_FN;\n\n /**\n * Callback fired after a column is hidden\n * @type {Function}\n */\n this.onAfterColHidden = isFn(f.on_after_col_hidden) ?\n f.on_after_col_hidden : EMPTY_FN;\n\n /**\n * Callback fired before a column is displayed\n * @type {Function}\n */\n this.onBeforeColDisplayed = isFn(f.on_before_col_displayed) ?\n f.on_before_col_displayed : EMPTY_FN;\n\n /**\n * Callback fired after a column is displayed\n * @type {Function}\n */\n this.onAfterColDisplayed = isFn(f.on_after_col_displayed) ?\n f.on_after_col_displayed : 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 this.onAfterColDisplayed = function () { };\n this.onAfterColHidden = function () { };\n }\n\n //Loads extension stylesheet\n tf.import(f.name + 'Style', tf.stylePath + 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.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\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 if (!this.btnTgtId) {\n tf.setToolbar();\n }\n let targetEl = !this.btnTgtId ? tf.rDiv : 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 ? this.headersTbl : tf.tbl;\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 && this.headersText[i] ?\n 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.tbl;\n\n if (hide) {\n this.onBeforeColHidden(this, colIndex);\n }\n if (!hide) {\n this.onBeforeColDisplayed(this, colIndex);\n }\n\n this._hideCells(tbl, colIndex, hide);\n if (this.headersTbl) {\n this._hideCells(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 let gridLayout;\n let headTbl;\n let gridColElms;\n if (hide) {\n //This event is fired just after a column is displayed for\n //grid_layout support\n //TODO: grid layout module should be responsible for those\n //calculations\n if (tf.gridLayout) {\n gridLayout = tf.feature('gridLayout');\n headTbl = gridLayout.headTbl;\n gridColElms = gridLayout.colElms;\n let hiddenWidth = parseInt(\n gridColElms[colIndex].style.width, 10);\n\n let headTblW = parseInt(headTbl.style.width, 10);\n headTbl.style.width = headTblW - hiddenWidth + 'px';\n tbl.style.width = headTbl.style.width;\n }\n\n this.onAfterColHidden(this, colIndex);\n this.emitter.emit('column-hidden', tf, this, colIndex,\n this.hiddenCols);\n }\n\n if (!hide) {\n //This event is fired just after a column is displayed for\n //grid_layout support\n //TODO: grid layout module should be responsible for those\n //calculations\n if (tf.gridLayout) {\n gridLayout = tf.feature('gridLayout');\n headTbl = gridLayout.headTbl;\n gridColElms = gridLayout.colElms;\n let width = parseInt(gridColElms[colIndex].style.width, 10);\n headTbl.style.width =\n (parseInt(headTbl.style.width, 10) + width) + 'px';\n tf.tbl.style.width = headTbl.style.width;\n }\n\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 (colIndex === undefined || !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 (colIndex === undefined || 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 (colIndex === undefined || 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 _hideCells(tbl, colIndex, hide) {\n for (let i = 0; i < tbl.rows.length; i++) {\n let row = tbl.rows[i];\n let cell = row.cells[colIndex];\n if (cell) {\n cell.style.display = hide ? 'none' : '';\n }\n }\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';\r\nimport {createElm, removeElm, elm} from '../../dom';\r\nimport {isFn, isUndef, EMPTY_FN} from '../../types';\r\nimport {addEvt} from '../../event';\r\n\r\n/**\r\n * Filters Visibility extension\r\n */\r\nexport default class FiltersVisibility extends Feature {\r\n\r\n /**\r\n * Creates an instance of FiltersVisibility\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} Configuration object\r\n */\r\n constructor(tf, f) {\r\n super(tf, f.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = f.description || 'Filters row visibility manager';\r\n\r\n /**\r\n * Extension's stylesheet filename\r\n * @type {String}\r\n */\r\n this.stylesheet = f.stylesheet || 'filtersVisibility.css';\r\n\r\n /**\r\n * Expand icon filename\r\n * @type {String}\r\n */\r\n this.icnExpand = f.expand_icon_name || 'icn_exp.png';\r\n\r\n /**\r\n * Collapse icon filename\r\n * @type {String}\r\n */\r\n this.icnCollapse = f.collapse_icon_name || 'icn_clp.png';\r\n\r\n /**\r\n * Main container element\r\n * @private\r\n */\r\n this.contEl = null;\r\n\r\n /**\r\n * Button element\r\n * @private\r\n */\r\n this.btnEl = null;\r\n\r\n /**\r\n * Expand icon HTML\r\n * @private\r\n */\r\n this.icnExpandHtml = '<img src=\"' + tf.themesPath + this.icnExpand +\r\n '\" alt=\"Expand filters\" >';\r\n\r\n /**\r\n * Collapse icon HTML\r\n * @private\r\n */\r\n this.icnCollapseHtml = '<img src=\"' + tf.themesPath + this.icnCollapse +\r\n '\" alt=\"Collapse filters\" >';\r\n\r\n /**\r\n * Default text\r\n * @private\r\n */\r\n this.defaultText = 'Toggle filters';\r\n\r\n /**\r\n * ID of main container element\r\n * @type {String}\r\n */\r\n this.targetId = f.target_id || null;\r\n\r\n /**\r\n * Enable expand/collapse icon, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.enableIcon = f.enable_icon === false ? false : true;\r\n\r\n /**\r\n * Custom text for button\r\n * @type {String}\r\n */\r\n this.btnText = f.btn_text || '';\r\n\r\n /**\r\n * Collapse button HTML\r\n * @private\r\n */\r\n this.collapseBtnHtml = this.enableIcon ?\r\n this.icnCollapseHtml + this.btnText :\r\n this.btnText || this.defaultText;\r\n\r\n /**\r\n * Expand button HTML\r\n * @private\r\n */\r\n this.expandBtnHtml = this.enableIcon ?\r\n this.icnExpandHtml + this.btnText :\r\n this.btnText || this.defaultText;\r\n\r\n /**\r\n * Button's custom HTML\r\n * @type {String}\r\n */\r\n this.btnHtml = f.btn_html || null;\r\n\r\n /**\r\n * Css class for expand/collapse filters button\r\n * @type {String}\r\n */\r\n this.btnCssClass = f.btn_css_class || 'btnExpClpFlt';\r\n\r\n /**\r\n * Css class for main container\r\n * @type {String}\r\n */\r\n this.contCssClass = f.cont_css_class || 'expClpFlt';\r\n\r\n /**\r\n * Filters row index\r\n * @type {Number}\r\n */\r\n this.filtersRowIndex = !isUndef(f.filters_row_index) ?\r\n f.filters_row_index : tf.getFiltersRowIndex();\r\n\r\n /**\r\n * Make filters visible at initialization, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.visibleAtStart = !isUndef(f.visible_at_start) ?\r\n Boolean(f.visible_at_start) : true;\r\n\r\n /**\r\n * Callback fired before filters row is shown\r\n * @type {Function}\r\n */\r\n this.onBeforeShow = isFn(f.on_before_show) ?\r\n f.on_before_show : EMPTY_FN;\r\n\r\n /**\r\n * Callback fired after filters row is shown\r\n * @type {Function}\r\n */\r\n this.onAfterShow = isFn(f.on_after_show) ? f.on_after_show : EMPTY_FN;\r\n\r\n /**\r\n * Callback fired before filters row is hidden\r\n * @type {Function}\r\n */\r\n this.onBeforeHide = isFn(f.on_before_hide) ?\r\n f.on_before_hide : EMPTY_FN;\r\n\r\n /**\r\n * Callback fired after filters row is hidden\r\n * @type {Function}\r\n */\r\n this.onAfterHide = isFn(f.on_after_hide) ? f.on_after_hide : EMPTY_FN;\r\n\r\n //Import extension's stylesheet\r\n tf.import(f.name + 'Style', tf.stylePath + this.stylesheet, null,\r\n 'link');\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initialise extension\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.buildUI();\r\n\r\n /**\r\n * @inherited\r\n */\r\n this.initialized = true;\r\n\r\n this.emitter.on(['show-filters'], (tf, visible) => this.show(visible));\r\n this.emitter.emit('filters-visibility-initialized', this.tf, this);\r\n }\r\n\r\n /**\r\n * Build UI elements\r\n */\r\n buildUI() {\r\n let tf = this.tf;\r\n let span = createElm('span');\r\n span.className = this.contCssClass;\r\n\r\n //Container element (rdiv or custom element)\r\n if (!this.targetId) {\r\n tf.setToolbar();\r\n }\r\n let targetEl = !this.targetId ? tf.rDiv : elm(this.targetId);\r\n\r\n if (!this.targetId) {\r\n let firstChild = targetEl.firstChild;\r\n firstChild.parentNode.insertBefore(span, firstChild);\r\n } else {\r\n targetEl.appendChild(span);\r\n }\r\n\r\n let btn;\r\n if (!this.btnHtml) {\r\n btn = createElm('a', ['href', 'javascript:void(0);']);\r\n btn.className = this.btnCssClass;\r\n btn.title = this.btnText || this.defaultText;\r\n btn.innerHTML = this.collapseBtnHtml;\r\n span.appendChild(btn);\r\n } else { //Custom html\r\n span.innerHTML = this.btnHtml;\r\n btn = span.firstChild;\r\n }\r\n\r\n addEvt(btn, 'click', () => this.toggle());\r\n\r\n this.contEl = span;\r\n this.btnEl = btn;\r\n\r\n if (!this.visibleAtStart) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n /**\r\n * Toggle filters visibility\r\n */\r\n toggle() {\r\n let tf = this.tf;\r\n let tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.tbl;\r\n let fltRow = tbl.rows[this.filtersRowIndex];\r\n let isDisplayed = fltRow.style.display === '';\r\n\r\n this.show(!isDisplayed);\r\n }\r\n\r\n /**\r\n * Show or hide filters\r\n *\r\n * @param {boolean} [visible=true] Visibility flag\r\n */\r\n show(visible = true) {\r\n let tf = this.tf;\r\n let tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.tbl;\r\n let fltRow = tbl.rows[this.filtersRowIndex];\r\n\r\n if (visible) {\r\n this.onBeforeShow(this);\r\n }\r\n if (!visible) {\r\n this.onBeforeHide(this);\r\n }\r\n\r\n fltRow.style.display = visible ? '' : 'none';\r\n if (this.enableIcon && !this.btnHtml) {\r\n this.btnEl.innerHTML = visible ?\r\n this.collapseBtnHtml : this.expandBtnHtml;\r\n }\r\n\r\n if (visible) {\r\n this.onAfterShow(this);\r\n }\r\n if (!visible) {\r\n this.onAfterHide(this);\r\n }\r\n\r\n this.emitter.emit('filters-toggled', tf, this, visible);\r\n }\r\n\r\n /**\r\n * Destroy the UI\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.off(['show-filters'], (tf, visible) => this.show(visible));\r\n\r\n this.btnEl.innerHTML = '';\r\n removeElm(this.btnEl);\r\n this.btnEl = null;\r\n\r\n this.contEl.innerHTML = '';\r\n removeElm(this.contEl);\r\n this.contEl = null;\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/extensions/filtersVisibility/filtersVisibility.js","import {Feature} from '../../feature';\r\nimport {isArray, isFn, isUndef, isObj, EMPTY_FN} from '../../types';\r\nimport {createElm, elm, getText, tag} from '../../dom';\r\nimport {addEvt} from '../../event';\r\nimport {parse as parseNb} from '../../number';\r\nimport {\r\n NONE, CELL_TAG, HEADER_TAG, STRING, NUMBER, DATE, FORMATTED_NUMBER,\r\n IP_ADDRESS\r\n} from '../../const';\r\n\r\n/**\r\n * SortableTable Adapter module\r\n */\r\nexport default class AdapterSortableTable extends Feature {\r\n\r\n /**\r\n * Creates an instance of AdapterSortableTable\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} opts Configuration object\r\n */\r\n constructor(tf, opts) {\r\n super(tf, opts.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = opts.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = opts.description || 'Sortable table';\r\n\r\n /**\r\n * Indicate whether table previously sorted\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.sorted = false;\r\n\r\n /**\r\n * List of sort type per column basis\r\n * @type {Array}\r\n */\r\n this.sortTypes = isArray(opts.types) ? opts.types : tf.colTypes;\r\n\r\n /**\r\n * Column to be sorted at initialization, ie:\r\n * sort_col_at_start: [1, true]\r\n * @type {Array}\r\n */\r\n this.sortColAtStart = isArray(opts.sort_col_at_start) ?\r\n opts.sort_col_at_start : null;\r\n\r\n /**\r\n * Enable asynchronous sort, if triggers are external\r\n * @type {Boolean}\r\n */\r\n this.asyncSort = Boolean(opts.async_sort);\r\n\r\n /**\r\n * List of element IDs triggering sort on a per column basis\r\n * @type {Array}\r\n */\r\n this.triggerIds = isArray(opts.trigger_ids) ? opts.trigger_ids : [];\r\n\r\n // edit .sort-arrow.descending / .sort-arrow.ascending in\r\n // tablefilter.css to reflect any path change\r\n /**\r\n * Path to images\r\n * @type {String}\r\n */\r\n this.imgPath = opts.images_path || tf.themesPath;\r\n\r\n /**\r\n * Blank image file name\r\n * @type {String}\r\n */\r\n this.imgBlank = opts.image_blank || 'blank.png';\r\n\r\n /**\r\n * Css class for sort indicator image\r\n * @type {String}\r\n */\r\n this.imgClassName = opts.image_class_name || 'sort-arrow';\r\n\r\n /**\r\n * Css class for ascending sort indicator image\r\n * @type {String}\r\n */\r\n this.imgAscClassName = opts.image_asc_class_name || 'ascending';\r\n\r\n /**\r\n * Css class for descending sort indicator image\r\n * @type {String}\r\n */\r\n this.imgDescClassName = opts.image_desc_class_name || 'descending';\r\n\r\n /**\r\n * Cell attribute key storing custom value used for sorting\r\n * @type {String}\r\n */\r\n this.customKey = opts.custom_key || 'data-tf-sortKey';\r\n\r\n /**\r\n * Callback fired when sort extension is instanciated\r\n * @type {Function}\r\n */\r\n this.onSortLoaded = isFn(opts.on_sort_loaded) ?\r\n opts.on_sort_loaded : EMPTY_FN;\r\n\r\n /**\r\n * Callback fired before a table column is sorted\r\n * @type {Function}\r\n */\r\n this.onBeforeSort = isFn(opts.on_before_sort) ?\r\n opts.on_before_sort : EMPTY_FN;\r\n\r\n /**\r\n * Callback fired after a table column is sorted\r\n * @type {Function}\r\n */\r\n this.onAfterSort = isFn(opts.on_after_sort) ?\r\n opts.on_after_sort : EMPTY_FN;\r\n\r\n /**\r\n * SortableTable instance\r\n * @private\r\n */\r\n this.stt = null;\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initializes AdapterSortableTable instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let adpt = this;\r\n\r\n // SortableTable class sanity check (sortabletable.js)\r\n if (isUndef(SortableTable)) {\r\n throw new Error('SortableTable class not found.');\r\n }\r\n\r\n // Add any date format if needed\r\n this.emitter.emit('add-date-type-formats', this.tf, this.sortTypes);\r\n\r\n this.overrideSortableTable();\r\n this.setSortTypes();\r\n\r\n this.onSortLoaded(tf, this);\r\n\r\n /*** SortableTable callbacks ***/\r\n this.stt.onbeforesort = function () {\r\n adpt.onBeforeSort(tf, adpt.stt.sortColumn);\r\n\r\n /*** sort behaviour for paging ***/\r\n if (tf.paging) {\r\n tf.feature('paging').disable();\r\n }\r\n };\r\n\r\n this.stt.onsort = function () {\r\n adpt.sorted = true;\r\n\r\n //sort behaviour for paging\r\n if (tf.paging) {\r\n let paginator = tf.feature('paging');\r\n // recalculate valid rows index as sorting may have change it\r\n tf.getValidRows(true);\r\n paginator.enable();\r\n paginator.setPage(paginator.getPage());\r\n }\r\n\r\n adpt.onAfterSort(tf, adpt.stt.sortColumn, adpt.stt.descending);\r\n adpt.emitter.emit('column-sorted', tf, adpt.stt.sortColumn,\r\n adpt.stt.descending);\r\n };\r\n\r\n // Column sort at start\r\n let sortColAtStart = adpt.sortColAtStart;\r\n if (sortColAtStart) {\r\n this.stt.sort(sortColAtStart[0], sortColAtStart[1]);\r\n }\r\n\r\n this.emitter.on(['sort'],\r\n (tf, colIdx, desc) => this.sortByColumnIndex(colIdx, desc));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('sort-initialized', tf, this);\r\n }\r\n\r\n /**\r\n * Sort specified column\r\n * @param {Number} colIdx Column index\r\n * @param {Boolean} desc Optional: descending manner\r\n */\r\n sortByColumnIndex(colIdx, desc) {\r\n this.stt.sort(colIdx, desc);\r\n }\r\n\r\n /**\r\n * Set SortableTable overrides for TableFilter integration\r\n */\r\n overrideSortableTable() {\r\n let adpt = this,\r\n tf = this.tf;\r\n\r\n /**\r\n * Overrides headerOnclick method in order to handle th event\r\n * @param {Object} e [description]\r\n */\r\n SortableTable.prototype.headerOnclick = function (evt) {\r\n if (!adpt.initialized) {\r\n return;\r\n }\r\n\r\n // find Header element\r\n let el = evt.target || evt.srcElement;\r\n\r\n while (el.tagName !== CELL_TAG && el.tagName !== HEADER_TAG) {\r\n el = el.parentNode;\r\n }\r\n\r\n this.sort(\r\n SortableTable.msie ?\r\n SortableTable.getCellIndex(el) : el.cellIndex\r\n );\r\n };\r\n\r\n /**\r\n * Overrides getCellIndex IE returns wrong cellIndex when columns are\r\n * hidden\r\n * @param {Object} oTd TD element\r\n * @return {Number} Cell index\r\n */\r\n SortableTable.getCellIndex = function (oTd) {\r\n let cells = oTd.parentNode.cells,\r\n l = cells.length, i;\r\n for (i = 0; cells[i] !== oTd && i < l; i++) { }\r\n return i;\r\n };\r\n\r\n /**\r\n * Overrides initHeader in order to handle filters row position\r\n * @param {Array} oSortTypes\r\n */\r\n SortableTable.prototype.initHeader = function (oSortTypes) {\r\n let stt = this;\r\n if (!stt.tHead) {\r\n if (tf.gridLayout) {\r\n stt.tHead = tf.feature('gridLayout').headTbl.tHead;\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n stt.headersRow = tf.headersRow;\r\n let cells = stt.tHead.rows[stt.headersRow].cells;\r\n stt.sortTypes = oSortTypes || [];\r\n let l = cells.length;\r\n let img, c;\r\n\r\n for (let i = 0; i < l; i++) {\r\n c = cells[i];\r\n if (stt.sortTypes[i] !== null && stt.sortTypes[i] !== 'None') {\r\n c.style.cursor = 'pointer';\r\n img = createElm('img',\r\n ['src', adpt.imgPath + adpt.imgBlank]);\r\n c.appendChild(img);\r\n if (stt.sortTypes[i] !== null) {\r\n c.setAttribute('_sortType', stt.sortTypes[i]);\r\n }\r\n addEvt(c, 'click', stt._headerOnclick);\r\n } else {\r\n c.setAttribute('_sortType', oSortTypes[i]);\r\n c._sortType = 'None';\r\n }\r\n }\r\n stt.updateHeaderArrows();\r\n };\r\n\r\n /**\r\n * Overrides updateHeaderArrows in order to handle arrows indicators\r\n */\r\n SortableTable.prototype.updateHeaderArrows = function () {\r\n let stt = this;\r\n let cells, l, img;\r\n\r\n // external headers\r\n if (adpt.asyncSort && adpt.triggerIds.length > 0) {\r\n let triggers = adpt.triggerIds;\r\n cells = [];\r\n l = triggers.length;\r\n for (let j = 0; j < l; j++) {\r\n cells.push(elm(triggers[j]));\r\n }\r\n } else {\r\n if (!this.tHead) {\r\n return;\r\n }\r\n cells = stt.tHead.rows[stt.headersRow].cells;\r\n l = cells.length;\r\n }\r\n for (let i = 0; i < l; i++) {\r\n let cell = cells[i];\r\n if (!cell) {\r\n continue;\r\n }\r\n let cellAttr = cell.getAttribute('_sortType');\r\n if (cellAttr !== null && cellAttr !== 'None') {\r\n img = cell.lastChild || cell;\r\n if (img.nodeName.toLowerCase() !== 'img') {\r\n img = createElm('img',\r\n ['src', adpt.imgPath + adpt.imgBlank]);\r\n cell.appendChild(img);\r\n }\r\n if (i === stt.sortColumn) {\r\n img.className = adpt.imgClassName + ' ' +\r\n (this.descending ?\r\n adpt.imgDescClassName :\r\n adpt.imgAscClassName);\r\n } else {\r\n img.className = adpt.imgClassName;\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Overrides getRowValue for custom key value feature\r\n * @param {Object} oRow Row element\r\n * @param {String} sType\r\n * @param {Number} nColumn\r\n * @return {String}\r\n */\r\n SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\r\n let stt = this;\r\n // if we have defined a custom getRowValue use that\r\n let sortTypeInfo = stt._sortTypeInfo[sType];\r\n if (sortTypeInfo && sortTypeInfo.getRowValue) {\r\n return sortTypeInfo.getRowValue(oRow, nColumn);\r\n }\r\n let c = oRow.cells[nColumn];\r\n let s = SortableTable.getInnerText(c);\r\n return stt.getValueFromString(s, sType);\r\n };\r\n\r\n /**\r\n * Overrides getInnerText in order to avoid Firefox unexpected sorting\r\n * behaviour with untrimmed text elements\r\n * @param {Object} oNode DOM element\r\n * @return {String} DOM element inner text\r\n */\r\n SortableTable.getInnerText = function (oNode) {\r\n if (!oNode) {\r\n return;\r\n }\r\n if (oNode.getAttribute(adpt.customKey)) {\r\n return oNode.getAttribute(adpt.customKey);\r\n } else {\r\n return getText(oNode);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Adds a sort type\r\n */\r\n addSortType(...args) {\r\n // Extract the arguments\r\n let [id, caster, sorter] = args;\r\n SortableTable.prototype.addSortType(id, caster, sorter);\r\n }\r\n\r\n /**\r\n * Sets the sort types on a column basis\r\n * @private\r\n */\r\n setSortTypes() {\r\n let tf = this.tf,\r\n sortTypes = this.sortTypes,\r\n _sortTypes = [];\r\n\r\n for (let i = 0; i < tf.nbCells; i++) {\r\n let colType;\r\n if (sortTypes[i]) {\r\n colType = sortTypes[i];\r\n if (isObj(colType)) {\r\n if (colType.type === DATE) {\r\n colType = this._addDateType(i, sortTypes);\r\n }\r\n else if (colType.type === FORMATTED_NUMBER) {\r\n let decimal = colType.decimal || tf.decimalSeparator;\r\n colType = this._addNumberType(i, decimal);\r\n }\r\n } else {\r\n colType = colType.toLowerCase();\r\n if (colType === DATE) {\r\n colType = this._addDateType(i, sortTypes);\r\n }\r\n else if (colType === FORMATTED_NUMBER ||\r\n colType === NUMBER) {\r\n colType = this._addNumberType(i, tf.decimalSeparator);\r\n }\r\n else if (colType === NONE) {\r\n // TODO: normalise 'none' vs 'None'\r\n colType = 'None';\r\n }\r\n }\r\n } else {\r\n colType = STRING;\r\n }\r\n _sortTypes.push(colType);\r\n }\r\n\r\n //Public TF method to add sort type\r\n\r\n //Custom sort types\r\n this.addSortType('caseinsensitivestring', SortableTable.toUpperCase);\r\n this.addSortType(STRING);\r\n this.addSortType(IP_ADDRESS, ipAddress, sortIP);\r\n\r\n this.stt = new SortableTable(tf.tbl, _sortTypes);\r\n\r\n /*** external table headers adapter ***/\r\n if (this.asyncSort && this.triggerIds.length > 0) {\r\n let triggers = this.triggerIds;\r\n for (let j = 0; j < triggers.length; j++) {\r\n if (triggers[j] === null) {\r\n continue;\r\n }\r\n let trigger = elm(triggers[j]);\r\n if (trigger) {\r\n trigger.style.cursor = 'pointer';\r\n\r\n addEvt(trigger, 'click', (evt) => {\r\n let elm = evt.target;\r\n if (!this.tf.sort) {\r\n return;\r\n }\r\n this.stt.asyncSort(triggers.indexOf(elm.id));\r\n });\r\n trigger.setAttribute('_sortType', _sortTypes[j]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _addDateType(colIndex, types) {\r\n let tf = this.tf;\r\n let dateType = tf.feature('dateType');\r\n let locale = dateType.getOptions(colIndex, types).locale || tf.locale;\r\n let colType = `${DATE}-${locale}`;\r\n\r\n this.addSortType(colType, (value) => {\r\n let parsedDate = dateType.parse(value, locale);\r\n // Invalid date defaults to Wed Feb 04 -768 11:00:00\r\n return isNaN(+parsedDate) ? new Date(-86400000000000) : parsedDate;\r\n });\r\n return colType;\r\n }\r\n\r\n _addNumberType(colIndex, decimal) {\r\n let colType = `${FORMATTED_NUMBER}${decimal === '.' ? '' : '-custom'}`;\r\n\r\n this.addSortType(colType, (value) => {\r\n return parseNb(value, decimal);\r\n });\r\n return colType;\r\n }\r\n\r\n /**\r\n * Remove extension\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n this.emitter.off(['sort'],\r\n (tf, colIdx, desc) => this.sortByColumnIndex(colIdx, desc));\r\n this.sorted = false;\r\n this.stt.destroy();\r\n\r\n let ids = tf.getFiltersId();\r\n for (let idx = 0; idx < ids.length; idx++) {\r\n let header = tf.getHeaderElement(idx);\r\n let img = tag(header, 'img');\r\n\r\n if (img.length === 1) {\r\n header.removeChild(img[0]);\r\n }\r\n }\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n\r\n//Converters\r\nfunction ipAddress(value) {\r\n let vals = value.split('.');\r\n for (let x in vals) {\r\n let val = vals[x];\r\n while (3 > val.length) {\r\n val = '0' + val;\r\n }\r\n vals[x] = val;\r\n }\r\n return vals.join('.');\r\n}\r\n\r\nfunction sortIP(a, b) {\r\n let aa = ipAddress(a.value.toLowerCase());\r\n let bb = ipAddress(b.value.toLowerCase());\r\n if (aa === bb) {\r\n return 0;\r\n } else if (aa < bb) {\r\n return -1;\r\n } else {\r\n return 1;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/extensions/sort/adapterSortabletable.js","import AdapterSortableTable from './adapterSortabletable';\nimport {root} from '../../root';\n\nif (!root.SortableTable) {\n require('script!sortabletable');\n}\n\nexport default AdapterSortableTable;\n\n\n\n// WEBPACK FOOTER //\n// ./src/extensions/sort/sort.js","require(\"!!C:\\\\Users\\\\max.guglielmi\\\\Documents\\\\dev\\\\perso\\\\javascript\\\\GitHub\\\\TableFilter\\\\node_modules\\\\script-loader\\\\addScript.js\")(require(\"!!C:\\\\Users\\\\max.guglielmi\\\\Documents\\\\dev\\\\perso\\\\javascript\\\\GitHub\\\\TableFilter\\\\node_modules\\\\script-loader\\\\node_modules\\\\raw-loader\\\\index.js!C:\\\\Users\\\\max.guglielmi\\\\Documents\\\\dev\\\\perso\\\\javascript\\\\GitHub\\\\TableFilter\\\\libs\\\\sortabletable.js\"))\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/script-loader!./libs/sortabletable.js\n// module id = 443\n// module chunks = 1","/*\r\n\tMIT License http://www.opensource.org/licenses/mit-license.php\r\n\tAuthor Tobias Koppers @sokra\r\n*/\r\nmodule.exports = function(src) {\r\n\tif (typeof execScript !== \"undefined\")\r\n\t\texecScript(src);\r\n\telse\r\n\t\teval.call(null, src);\r\n}\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/script-loader/addScript.js\n// module id = 444\n// module chunks = 1","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// ./~/script-loader/~/raw-loader!./libs/sortabletable.js\n// module id = 445\n// module chunks = 1"],"sourceRoot":""}