1
0
Fork 0
mirror of https://github.com/koalyptus/TableFilter.git synced 2024-05-07 17:06:40 +02:00
TableFilter/dist/tablefilter/tf-0-550b7c88a36d42262f0e.js.map
2017-05-07 16:05:36 +10:00

1 line
290 KiB
Plaintext

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