1
0
Fork 0
mirror of https://github.com/koalyptus/TableFilter.git synced 2024-05-03 07:03:33 +02:00
TableFilter/dist/tablefilter/tf-1-d93e97e989b71a9f7e7e.js.map
2019-08-09 12:24:02 +10:00

1 line
156 KiB
Plaintext

{"version":3,"sources":["webpack:///./src sync ^\\.\\/.*$","webpack:///./src/extensions/advancedGrid/adapterEzEditTable.js","webpack:///./src/extensions/sort/adapterSortabletable.js","webpack:///./src/extensions/advancedGrid/advancedGrid.js","webpack:///./src/extensions/colOps/colOps.js","webpack:///./src/extensions/colsVisibility/colsVisibility.js","webpack:///./src/extensions/filtersVisibility/filtersVisibility.js","webpack:///./src/extensions/sort/sort.js","webpack:///./node_modules/format-number/index.js","webpack:///./libs/sortabletable.js?8203","webpack:///./node_modules/script-loader/addScript.js","webpack:///./libs/sortabletable.js"],"names":["map","./array","./array.js","./const","./const.js","./cookie","./cookie.js","./dom","./dom.js","./emitter","./emitter.js","./event","./event.js","./extensions/advancedGrid/adapterEzEditTable","./extensions/advancedGrid/adapterEzEditTable.js","./extensions/advancedGrid/advancedGrid","./extensions/advancedGrid/advancedGrid.js","./extensions/colOps/colOps","./extensions/colOps/colOps.js","./extensions/colsVisibility/colsVisibility","./extensions/colsVisibility/colsVisibility.js","./extensions/filtersVisibility/filtersVisibility","./extensions/filtersVisibility/filtersVisibility.js","./extensions/sort/adapterSortabletable","./extensions/sort/adapterSortabletable.js","./extensions/sort/sort","./extensions/sort/sort.js","./feature","./feature.js","./modules/alternateRows","./modules/alternateRows.js","./modules/baseDropdown","./modules/baseDropdown.js","./modules/checkList","./modules/checkList.js","./modules/clearButton","./modules/clearButton.js","./modules/dateType","./modules/dateType.js","./modules/dropdown","./modules/dropdown.js","./modules/gridLayout","./modules/gridLayout.js","./modules/hash","./modules/hash.js","./modules/help","./modules/help.js","./modules/highlightKeywords","./modules/highlightKeywords.js","./modules/loader","./modules/loader.js","./modules/markActiveColumns","./modules/markActiveColumns.js","./modules/noResults","./modules/noResults.js","./modules/paging","./modules/paging.js","./modules/popupFilter","./modules/popupFilter.js","./modules/rowsCounter","./modules/rowsCounter.js","./modules/state","./modules/state.js","./modules/statusBar","./modules/statusBar.js","./modules/storage","./modules/storage.js","./modules/toolbar","./modules/toolbar.js","./number","./number.js","./root","./root.js","./settings","./settings.js","./sort","./sort.js","./string","./string.js","./tablefilter","./tablefilter.js","./types","./types.js","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","webpackContextKeys","Object","resolve","module","exports","AdapterEzEditTable","tf","cfg","_this","_classCallCheck","this","_possibleConstructorReturn","_getPrototypeOf","call","desc","defaultsStr","description","filename","vendorPath","vendor_path","loadStylesheet","Boolean","load_stylesheet","stylesheet","stylesheetName","stylesheet_name","scroll_into_view","gridLayout","_ezEditTable","enable","Feature","_this2","initialized","root","EditTable","_setAdvancedGrid","path","isImported","emitter","on","_toggleForInputFilter","startRow","tag","dom","length","undefined","refRow","base_path","basePath","editable","selectable","selection","default_selection","active_cell_css","_lastValidRowIndex","_lastRowIndex","onAfterSelection","et","selectedElm","doSelect","nextRowIndex","defaultSelection","slc","SelectRowByIndex","ClearSelections","cellIndex","row","rows","SelectCell","cells","validRowsIndex","getRowsNb","r","scrollIntoView","cell","getCellsNb","tblCont","scrollLeft","Selection","validIndexes","validIdxLen","parentNode","nodeName","keyCode","Event","GetKey","isRowValid","indexOf","rowIndex","paging","feature","d","pageLength","nbRowsPerPage","calcRowIndex","v","onBeforeSelection","nbPages","pagingEndRow","parseInt","startPagingRow","currentPageNb","setPage","onAfterChangePage","extension","GetActiveRow","GetActiveCell","fnB","on_before_selected_row","args","arguments","fnA","on_after_selected_row","fnD","on_before_selected_cell","fnC","on_after_selected_cell","fnE","on_added_dom_row","nbFilterableRows","destroy","reset","emit","alternateRows","init","actions","fnF","on_after_submit","Init","ezEditTable","Set","Editable","Remove","getActiveFilterId","colIndex","getColumnIndexFromFilterId","getFilterType","INPUT","toggle","_this3","off","meta","altName","AdapterSortableTable","opts","name","sorted","sortTypes","defaultsArr","types","colTypes","sortColAtStart","sort_col_at_start","asyncSort","async_sort","triggerIds","trigger_ids","imgPath","images_path","themesPath","imgBlank","image_blank","imgClassName","image_class_name","imgAscClassName","image_asc_class_name","imgDescClassName","image_desc_class_name","customKey","custom_key","onSortLoaded","defaultsFn","on_sort_loaded","EMPTY_FN","onBeforeSort","on_before_sort","onAfterSort","on_after_sort","stt","adpt","isUndef","SortableTable","overrideSortableTable","setSortTypes","onbeforesort","sortColumn","disable","onsort","paginator","getValidRows","getPage","descending","sort","bound","sortByColumnIndexHandler","colIdx","sortByColumnIndex","prototype","headerOnclick","evt","el","target","srcElement","tagName","CELL_TAG","HEADER_TAG","msie","getCellIndex","oTd","i","l","initHeader","oSortTypes","tHead","headTbl","headersRow","img","c","style","cursor","createElm","appendChild","setAttribute","addEvt","_headerOnclick","_sortType","updateHeaderArrows","triggers","j","push","elm","cellAttr","getAttribute","lastChild","toLowerCase","className","getRowValue","oRow","sType","nColumn","sortTypeInfo","_sortTypeInfo","s","getInnerText","getValueFromString","getCellValue","_len","Array","_key","caster","sorter","addSortType","_sortTypes","eachCol","colType","isObj","type","DATE","_addDateType","FORMATTED_NUMBER","decimal","decimalSeparator","_addNumberType","NUMBER","NONE","STRING","toUpperCase","IP_ADDRESS","ipAddress","sortIP","trigger","dateType","locale","getOptions","concat","value","parsedDate","parse","isNaN","Date","parseNb","ids","getFiltersId","idx","header","getHeaderElement","removeChild","vals","split","x","val","join","a","b","aa","bb","__webpack_exports__","_adapterEzEditTable__WEBPACK_IMPORTED_MODULE_0__","EVENTS","ColOps","onBeforeOperation","on_before_operation","onAfterOperation","on_after_operation","labelIds","colIndexes","col","operations","operation","outputTypes","write_method","formatResults","format_result","totRowIndexes","tot_row_index","excludeRows","exclude_row","decimalPrecisions","decimal_precision","calcAll","isInitialized","colOperations","uIndexes","forEach","nbCols","colValues","u","getVisibleColumnData","curValues","result","precisions","labels","writeType","formatResult","k","isArray","configureFormat","Number","calc","writeResult","totRow","display","precision","sortColumnValues","numSortAsc","calcMean","calcSum","calcMin","calcMax","calcMedian","calcQ1","calcQ3","isEmpty","toFixed","values","reduce","y","Math","max","apply","min","nbValues","aux","floor","posa","posb","label","format","labelElm","isFinite","formatNumber","innerHTML","oldNode","firstChild","txtNode","createText","replaceChild","hasType","thousands","integerSeparator","ColsVisibility","f","config","spanEl","btnEl","contEl","tickToHide","defaultsBool","tick_to_hide","manager","headersTbl","headers_table","headersIndex","defaultsNb","headers_index","contElTgtId","container_target_id","headersText","headers_text","btnTgtId","btn_target_id","btnText","btn_text","btnHtml","btn_html","btnCssClass","btn_css_class","btnCloseText","btn_close_text","btnCloseHtml","btn_close_html","btnCloseCssClass","btn_close_css_class","spanCssClass","span_css_class","contCssClass","cont_css_class","listCssClass","list_css_class","listItemCssClass","checklist_item_css_class","listSlcItemCssClass","checklist_selected_item_css_class","text","atStart","at_start","enableHover","enable_hover","enableTickAll","enable_tick_all","tickAllText","tick_all_text","toolbarPosition","toolbar_position","RIGHT","hiddenCols","boundMouseup","onLoaded","on_loaded","onBeforeOpen","on_before_open","onAfterOpen","on_after_open","onBeforeClose","on_before_close","onAfterClose","on_after_close","onBeforeColHidden","on_before_col_hidden","onAfterColHidden","on_after_col_hidden","onBeforeColDisplayed","on_before_col_displayed","onAfterColDisplayed","on_after_col_displayed","getStylePath","targetElm","targetEvt","removeEvt","contDisplay","lbl","li","isChecked","checked","addClass","removeClass","hide","setHidden","isNull","hideCol","buildBtn","buildManager","onMouseup","bind","_hideAtStart","span","targetEl","container","insertBefore","colVisEl","btn","title","_this4","extNameLabel","ul","tbl","headerIndex","getHeadersRowIndex","headerRow","createCheckItem","check","h","itm","click","cellText","_getHeaderText","liElm","checkItem","p","_hideElements","itemIndex","splice","isColHidden","showCol","_this5","removeElm","hasChildNodes","childNodes","n","nodeType","nodeValue","getText","_hideCells","_hideCol","colElms","_this6","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","isDisplayed","fltRow","_adapterSortabletable__WEBPACK_IMPORTED_MODULE_0__","require","formatter","options","negativeType","negative","negativeLeftSymbol","negativeRightSymbol","number","overrideOptions","output","charAt","replace","negativeLeftOut","noUnits","prefix","round","places","decim","slice","substr","leadingzeros","substring","truncate","padLeft","padding","buf","padRight","noSeparator","addDecimalSeparators","separator","rgx","test","decimalsSeparator","addIntegerSeparators","negativeRightOut","suffix","unformat","allowedSeparators","newNumber","negativeOut","separate","default","src","log","error","console","execScript","isIE","attachEvent","addEventListener","eval"],"mappings":"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","file":"tf-1-d93e97e989b71a9f7e7e.js","sourcesContent":["var map = {\n\t\"./array\": 20,\n\t\"./array.js\": 20,\n\t\"./const\": 4,\n\t\"./const.js\": 4,\n\t\"./cookie\": 60,\n\t\"./cookie.js\": 60,\n\t\"./dom\": 2,\n\t\"./dom.js\": 2,\n\t\"./emitter\": 89,\n\t\"./emitter.js\": 89,\n\t\"./event\": 5,\n\t\"./event.js\": 5,\n\t\"./extensions/advancedGrid/adapterEzEditTable\": 441,\n\t\"./extensions/advancedGrid/adapterEzEditTable.js\": 441,\n\t\"./extensions/advancedGrid/advancedGrid\": 443,\n\t\"./extensions/advancedGrid/advancedGrid.js\": 443,\n\t\"./extensions/colOps/colOps\": 444,\n\t\"./extensions/colOps/colOps.js\": 444,\n\t\"./extensions/colsVisibility/colsVisibility\": 445,\n\t\"./extensions/colsVisibility/colsVisibility.js\": 445,\n\t\"./extensions/filtersVisibility/filtersVisibility\": 446,\n\t\"./extensions/filtersVisibility/filtersVisibility.js\": 446,\n\t\"./extensions/sort/adapterSortabletable\": 442,\n\t\"./extensions/sort/adapterSortabletable.js\": 442,\n\t\"./extensions/sort/sort\": 447,\n\t\"./extensions/sort/sort.js\": 447,\n\t\"./feature\": 10,\n\t\"./feature.js\": 10,\n\t\"./modules/alternateRows\": 85,\n\t\"./modules/alternateRows.js\": 85,\n\t\"./modules/baseDropdown\": 48,\n\t\"./modules/baseDropdown.js\": 48,\n\t\"./modules/checkList\": 91,\n\t\"./modules/checkList.js\": 91,\n\t\"./modules/clearButton\": 84,\n\t\"./modules/clearButton.js\": 84,\n\t\"./modules/dateType\": 74,\n\t\"./modules/dateType.js\": 74,\n\t\"./modules/dropdown\": 90,\n\t\"./modules/dropdown.js\": 90,\n\t\"./modules/gridLayout\": 77,\n\t\"./modules/gridLayout.js\": 77,\n\t\"./modules/hash\": 92,\n\t\"./modules/hash.js\": 92,\n\t\"./modules/help\": 75,\n\t\"./modules/help.js\": 75,\n\t\"./modules/highlightKeywords\": 79,\n\t\"./modules/highlightKeywords.js\": 79,\n\t\"./modules/loader\": 78,\n\t\"./modules/loader.js\": 78,\n\t\"./modules/markActiveColumns\": 81,\n\t\"./modules/markActiveColumns.js\": 81,\n\t\"./modules/noResults\": 86,\n\t\"./modules/noResults.js\": 86,\n\t\"./modules/paging\": 87,\n\t\"./modules/paging.js\": 87,\n\t\"./modules/popupFilter\": 80,\n\t\"./modules/popupFilter.js\": 80,\n\t\"./modules/rowsCounter\": 82,\n\t\"./modules/rowsCounter.js\": 82,\n\t\"./modules/state\": 76,\n\t\"./modules/state.js\": 76,\n\t\"./modules/statusBar\": 83,\n\t\"./modules/statusBar.js\": 83,\n\t\"./modules/storage\": 93,\n\t\"./modules/storage.js\": 93,\n\t\"./modules/toolbar\": 18,\n\t\"./modules/toolbar.js\": 18,\n\t\"./number\": 22,\n\t\"./number.js\": 22,\n\t\"./root\": 9,\n\t\"./root.js\": 9,\n\t\"./settings\": 1,\n\t\"./settings.js\": 1,\n\t\"./sort\": 31,\n\t\"./sort.js\": 31,\n\t\"./string\": 8,\n\t\"./string.js\": 8,\n\t\"./tablefilter\": 127,\n\t\"./tablefilter.js\": 127,\n\t\"./types\": 3,\n\t\"./types.js\": 3\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 440;","import {Feature} from '../../feature';\r\nimport {tag} from '../../dom';\r\nimport {INPUT} from '../../const';\r\nimport {defaultsStr} from '../../settings';\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, AdapterEzEditTable);\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(cfg.description, 'ezEditTable adapter');\r\n\r\n /**\r\n * Filename of ezEditTable library\r\n * @type {String}\r\n */\r\n this.filename = defaultsStr(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 = defaultsStr(cfg.stylesheet,\r\n this.vendorPath + 'ezEditTable.css');\r\n\r\n /**\r\n * Name of ezEditTable stylesheet\r\n * @type {String}\r\n */\r\n this.stylesheetName = defaultsStr(cfg.stylesheet_name,\r\n '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.pageLength || 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.pageLength;\r\n let validIndexes = tf.validRowsIndex,\r\n validIdxLen = validIndexes.length,\r\n pagingEndRow = parseInt(paging.startPagingRow, 10) +\r\n parseInt(paging.pageLength, 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\r\nAdapterEzEditTable.meta = {altName: 'advancedGrid'};\r\n","import {Feature} from '../../feature';\r\nimport {isUndef, isObj, EMPTY_FN} from '../../types';\r\nimport {createElm, elm, tag} from '../../dom';\r\nimport {addEvt, bound} 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\nimport {defaultsStr, defaultsFn, defaultsArr} from '../../settings';\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, AdapterSortableTable);\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 = defaultsStr(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 = defaultsArr(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 = defaultsArr(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 = defaultsArr(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 = defaultsStr(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 = defaultsStr(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 = defaultsStr(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 = defaultsStr(opts.image_asc_class_name,\r\n 'ascending');\r\n\r\n /**\r\n * Css class for descending sort indicator image\r\n * @type {String}\r\n */\r\n this.imgDescClassName = defaultsStr(opts.image_desc_class_name,\r\n '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 = defaultsStr(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 = defaultsFn(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 = defaultsFn(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 = defaultsFn(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'], bound(this.sortByColumnIndexHandler, this));\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 /** @private */\r\n sortByColumnIndexHandler(tf, colIdx, desc) {\r\n this.sortByColumnIndex(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} cell DOM element\r\n * @return {String} DOM element inner text\r\n */\r\n SortableTable.getInnerText = function (cell) {\r\n if (!cell) {\r\n return;\r\n }\r\n if (cell.getAttribute(adpt.customKey)) {\r\n return cell.getAttribute(adpt.customKey);\r\n } else {\r\n return tf.getCellValue(cell);\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, getRowValue] = args;\r\n SortableTable.prototype.addSortType(id, caster, sorter, getRowValue);\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 tf.eachCol((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'], bound(this.sortByColumnIndexHandler, this));\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\nAdapterSortableTable.meta = {altName: 'sort'};\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","import AdapterEzEditTable from './adapterEzEditTable';\r\n\r\nexport default AdapterEzEditTable;","import {Feature} from '../../feature';\r\nimport {createText, elm} from '../../dom';\r\nimport {isArray, isEmpty, EMPTY_FN} from '../../types';\r\nimport {numSortAsc} from '../../sort';\r\nimport {FORMATTED_NUMBER} from '../../const';\r\nimport formatNumber from 'format-number';\r\nimport {defaultsFn, defaultsArr} from '../../settings';\r\nimport {bound} from '../../event';\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, ColOps);\r\n\r\n /**\r\n * Callback fired before columns operations start\r\n * @type {Function}\r\n */\r\n this.onBeforeOperation = defaultsFn(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 = defaultsFn(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 = defaultsArr(opts.id, []);\r\n\r\n /**\r\n * List of columns' indexes for calculations\r\n * @type {Array}\r\n */\r\n this.colIndexes = defaultsArr(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 = defaultsArr(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 = defaultsArr(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 = defaultsArr(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 = defaultsArr(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 = defaultsArr(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 = defaultsArr(opts.decimal_precision, 2);\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, bound(this.calcAll, this));\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,\r\n decimalPrecisions } = this;\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, bound(this.calcAll, this));\r\n\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {\r\n addClass, removeClass, createCheckItem, createElm, elm, removeElm,\r\n getText, tag\r\n} from '../../dom';\r\nimport {isUndef, EMPTY_FN, isNull} from '../../types';\r\nimport {addEvt, targetEvt, removeEvt} from '../../event';\r\nimport {root} from '../../root';\r\nimport {NONE} from '../../const';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsFn, defaultsNb, defaultsArr\r\n} from '../../settings';\r\nimport {RIGHT} from '../../modules/toolbar';\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, ColsVisibility);\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 = defaultsStr(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 = defaultsBool(f.tick_to_hide, true);\r\n\r\n /**\r\n * Enable columns manager UI, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.manager = defaultsBool(f.manager, 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 = defaultsNb(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 = defaultsStr(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 = defaultsArr(f.headers_text, []);\r\n\r\n /**\r\n * ID of button's container element\r\n * @type {String}\r\n */\r\n this.btnTgtId = defaultsStr(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 = defaultsStr(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 = defaultsStr(f.btn_html, null);\r\n\r\n /**\r\n * Css class for button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(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 = defaultsStr(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 = defaultsStr(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 = defaultsStr(f.btn_close_css_class,\r\n this.btnCssClass);\r\n\r\n /**\r\n * Extension's stylesheet filename\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(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 = defaultsStr(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 = defaultsStr(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 = defaultsStr(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 = defaultsStr(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 = defaultsStr(\r\n cfg.checklist_selected_item_css_class,\r\n 'cols_checklist_slc_item'\r\n );\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 = defaultsStr(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 = defaultsArr(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 = defaultsStr(f.tick_all_text, 'Select all:');\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\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 = defaultsFn(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 = defaultsFn(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 = defaultsFn(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 = defaultsFn(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 = defaultsFn(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 = defaultsFn(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 = defaultsFn(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 = defaultsFn(f.on_before_col_displayed,\r\n 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 = defaultsFn(f.on_after_col_displayed,\r\n 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 }\r\n\r\n //Loads extension stylesheet\r\n tf.import(f.name + 'Style', tf.getStylePath() + 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.emit('initializing-extension', this,\r\n !isNull(this.btnTgtId));\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 this.emitter.emit('extension-initialized', 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 let targetEl = !this.btnTgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n 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 || 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[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 } else {\r\n this.onBeforeColDisplayed(this, colIndex);\r\n }\r\n\r\n this._hideElements(tbl, colIndex, hide);\r\n if (this.headersTbl) {\r\n this._hideElements(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 if (hide) {\r\n this.onAfterColHidden(this, colIndex);\r\n this.emitter.emit('column-hidden', tf, this, colIndex,\r\n this.hiddenCols);\r\n } else {\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 (isUndef(colIndex) || !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 (isUndef(colIndex) || 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 (isUndef(colIndex) || 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 _hideElements(tbl, colIdx, hide) {\r\n this._hideCells(tbl, colIdx, hide);\r\n this._hideCol(tbl, colIdx, hide);\r\n }\r\n\r\n _hideCells(tbl, colIdx, 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[colIdx];\r\n if (cell) {\r\n cell.style.display = hide ? NONE : '';\r\n }\r\n }\r\n }\r\n\r\n _hideCol(tbl, colIdx, hide) {\r\n let colElms = tag(tbl, 'col');\r\n if (colElms.length === 0) {\r\n return;\r\n }\r\n colElms[colIdx].style.display = hide ? NONE : '';\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","import {Feature} from '../../feature';\r\nimport {createElm, removeElm, elm} from '../../dom';\r\nimport {EMPTY_FN, isNull} from '../../types';\r\nimport {addEvt} from '../../event';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsFn, defaultsNb,\r\n} from '../../settings';\r\nimport {RIGHT} from '../../modules/toolbar';\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, FiltersVisibility);\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 = defaultsStr(f.description,\r\n 'Filters row visibility manager');\r\n\r\n /**\r\n * Extension's stylesheet filename\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(f.stylesheet , 'filtersVisibility.css');\r\n\r\n /**\r\n * Expand icon filename\r\n * @type {String}\r\n */\r\n this.icnExpand = defaultsStr(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 = defaultsStr(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 = defaultsBool(f.enable_icon, true);\r\n\r\n /**\r\n * Custom text for button\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(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 = defaultsStr(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 = defaultsStr(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 = defaultsStr(f.cont_css_class, 'expClpFlt');\r\n\r\n /**\r\n * Filters row index\r\n * @type {Number}\r\n */\r\n this.filtersRowIndex = defaultsNb(f.filters_row_index,\r\n 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 = defaultsNb(f.visible_at_start, true);\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\r\n\r\n /**\r\n * Callback fired before filters row is shown\r\n * @type {Function}\r\n */\r\n this.onBeforeShow = defaultsFn(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 = defaultsFn(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 = defaultsFn(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 = defaultsFn(f.on_after_hide, EMPTY_FN);\r\n\r\n //Import extension's stylesheet\r\n tf.import(f.name + 'Style', tf.getStylePath() + 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.emitter.emit('initializing-extension', this,\r\n !isNull(this.targetId));\r\n\r\n this.buildUI();\r\n\r\n /** @inherited */\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 this.emitter.emit('extension-initialized', 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 let targetEl = !this.targetId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n 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","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","\nmodule.exports = formatter;\nmodule.exports.default = formatter;\n\nfunction formatter(options) {\n options = options || {};\n\n\n // *********************************************************************************************\n // Set defaults for negatives\n // options.negative, options.negativeOut, options.separator retained for backward compatibility\n // *********************************************************************************************\n\n // type of negative; default left\n options.negativeType = options.negativeType || (options.negative === 'R' ? 'right' : 'left')\n\n // negative symbols '-' or '()'\n if (typeof options.negativeLeftSymbol !== 'string') {\n switch (options.negativeType) {\n case 'left':\n options.negativeLeftSymbol = '-';\n break;\n case 'brackets':\n options.negativeLeftSymbol = '(';\n break;\n default:\n options.negativeLeftSymbol = '';\n }\n }\n if (typeof options.negativeRightSymbol !== 'string') {\n switch (options.negativeType) {\n case 'right':\n options.negativeRightSymbol = '-';\n break;\n case 'brackets':\n options.negativeRightSymbol = ')';\n break;\n default:\n options.negativeRightSymbol = '';\n }\n }\n\n // whether negative symbol should be inside/outside prefix and suffix\n\n if (typeof options.negativeLeftOut !== \"boolean\") {\n options.negativeLeftOut = (options.negativeOut === false ? false : true);\n }\n if (typeof options.negativeRightOut !== \"boolean\") {\n options.negativeRightOut = (options.negativeOut === false ? false : true);\n }\n\n //prefix and suffix\n options.prefix = options.prefix || '';\n options.suffix = options.suffix || '';\n\n //separators\n if (typeof options.integerSeparator !== 'string') {\n options.integerSeparator = (typeof options.separator === 'string' ? options.separator : ',');\n }\n options.decimalsSeparator = typeof options.decimalsSeparator === 'string' ? options.decimalsSeparator : '';\n options.decimal = options.decimal || '.';\n\n //padders\n options.padLeft = options.padLeft || -1 //default no padding\n options.padRight = options.padRight || -1 //default no padding\n\n function format(number, overrideOptions) {\n overrideOptions = overrideOptions || {};\n\n if (number || number === 0) {\n number = '' + number;//convert number to string if it isn't already\n } else {\n return '';\n }\n\n //identify a negative number and make it absolute\n var output = [];\n var negative = number.charAt(0) === '-';\n number = number.replace(/^\\-/g, '');\n\n //Prepare output with left hand negative and/or prefix\n if (!options.negativeLeftOut && !overrideOptions.noUnits) {\n output.push(options.prefix);\n }\n if (negative) {\n output.push(options.negativeLeftSymbol);\n }\n if (options.negativeLeftOut && !overrideOptions.noUnits) {\n output.push(options.prefix);\n }\n\n //Format core number\n number = number.split('.');\n if (options.round != null) round(number, options.round);\n if (options.truncate != null) number[1] = truncate(number[1], options.truncate);\n if (options.padLeft > 0) number[0] = padLeft(number[0], options.padLeft);\n if (options.padRight > 0) number[1] = padRight(number[1], options.padRight);\n if (!overrideOptions.noSeparator && number[1]) number[1] = addDecimalSeparators(number[1], options.decimalsSeparator);\n if (!overrideOptions.noSeparator && number[0]) number[0] = addIntegerSeparators(number[0], options.integerSeparator);\n output.push(number[0]);\n if (number[1]) {\n output.push(options.decimal);\n output.push(number[1]);\n }\n\n //Prepare output with right hand negative and/or prefix\n if (options.negativeRightOut && !overrideOptions.noUnits) {\n output.push(options.suffix);\n }\n if (negative) {\n output.push(options.negativeRightSymbol);\n }\n if (!options.negativeRightOut && !overrideOptions.noUnits) {\n output.push(options.suffix);\n }\n\n //join output and return\n return output.join('');\n }\n\n format.negative = options.negative;\n format.negativeOut = options.negativeOut;\n format.negativeType = options.negativeType;\n format.negativeLeftOut = options.negativeLeftOut;\n format.negativeLeftSymbol = options.negativeLeftSymbol;\n format.negativeRightOut = options.negativeRightOut;\n format.negativeRightSymbol = options.negativeRightSymbol;\n format.prefix = options.prefix;\n format.suffix = options.suffix;\n format.separate = options.separate;\n format.integerSeparator = options.integerSeparator;\n format.decimalsSeparator = options.decimalsSeparator;\n format.decimal = options.decimal;\n format.padLeft = options.padLeft;\n format.padRight = options.padRight;\n format.truncate = options.truncate;\n format.round = options.round;\n\n function unformat(number, allowedSeparators) {\n allowedSeparators = allowedSeparators || [];\n if (options.allowedSeparators) {\n options.allowedSeparators.forEach(function (s) { allowedSeparators.push (s); });\n }\n allowedSeparators.push(options.integerSeparator);\n allowedSeparators.push(options.decimalsSeparator);\n number = number.replace(options.prefix, '');\n number = number.replace(options.suffix, '');\n var newNumber = number;\n do {\n number = newNumber;\n for (var i = 0; i < allowedSeparators.length; i++) {\n newNumber = newNumber.replace(allowedSeparators[i], '');\n }\n } while (newNumber != number);\n return number;\n }\n format.unformat = unformat;\n\n function validate(number, allowedSeparators) {\n number = unformat(number, allowedSeparators);\n number = number.split(options.decimal);\n if (number.length > 2) {\n return false;\n } else if (options.truncate != null && number[1] && number[1].length > options.truncate) {\n return false;\n } else if (options.round != null && number[1] && number[1].length > options.round) {\n return false;\n } else {\n return /^-?\\d+\\.?\\d*$/.test(number);\n }\n }\n return format;\n}\n\n//where x is already the integer part of the number\nfunction addIntegerSeparators(x, separator) {\n x += '';\n if (!separator) return x;\n var rgx = /(\\d+)(\\d{3})/;\n while (rgx.test(x)) {\n x = x.replace(rgx, '$1' + separator + '$2');\n }\n return x;\n}\n\n//where x is already the decimal part of the number\nfunction addDecimalSeparators(x, separator) {\n x += '';\n if (!separator) return x;\n var rgx = /(\\d{3})(\\d+)/;\n while (rgx.test(x)) {\n x = x.replace(rgx, '$1' + separator + '$2');\n }\n return x;\n}\n\n//where x is the integer part of the number\nfunction padLeft(x, padding) {\n x = x + '';\n var buf = [];\n while (buf.length + x.length < padding) {\n buf.push('0');\n }\n return buf.join('') + x;\n}\n\n//where x is the decimals part of the number\nfunction padRight(x, padding) {\n if (x) {\n x += '';\n } else {\n x = '';\n }\n var buf = [];\n while (buf.length + x.length < padding) {\n buf.push('0');\n }\n return x + buf.join('');\n}\nfunction truncate(x, length) {\n if (x) {\n x += '';\n }\n if (x && x.length > length) {\n return x.substr(0, length);\n } else {\n return x;\n }\n}\n\n//where number is an array with 0th item as integer string and 1st item as decimal string (no negatives)\nfunction round(number, places) {\n if (number[1] && places >= 0 && number[1].length > places) {\n //truncate to correct number of decimal places\n var decim = number[1].slice(0, places);\n //if next digit was >= 5 we need to round up\n if (+(number[1].substr(places, 1)) >= 5) {\n //But first count leading zeros as converting to a number will loose them\n var leadingzeros = \"\";\n while (decim.charAt(0)===\"0\") {\n leadingzeros = leadingzeros + \"0\";\n decim = decim.substr(1);\n }\n //Then we can change decim to a number and add 1 before replacing leading zeros\n decim = (+decim + 1) + '';\n decim = leadingzeros + decim;\n if (decim.length > places) {\n //adding one has made it longer\n number[0] = (+number[0]+ +decim.charAt(0)) + ''; //add value of firstchar to the integer part\n decim = decim.substring(1); //ignore the 1st char at the beginning which is the carry to the integer part\n }\n }\n number[1] = decim;\n }\n return number;\n}\n","require(\"!!C:\\\\projects\\\\dev\\\\github\\\\TableFilter\\\\node_modules\\\\script-loader\\\\addScript.js\")(require(\"!!C:\\\\projects\\\\dev\\\\github\\\\TableFilter\\\\node_modules\\\\raw-loader\\\\index.js!C:\\\\projects\\\\dev\\\\github\\\\TableFilter\\\\libs\\\\sortabletable.js\"))","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nmodule.exports = function(src) {\n\tfunction log(error) {\n\t\t(typeof console !== \"undefined\")\n\t\t&& (console.error || console.log)(\"[Script Loader]\", error);\n\t}\n\n\t// Check for IE =< 8\n\tfunction isIE() {\n\t\treturn typeof attachEvent !== \"undefined\" && typeof addEventListener === \"undefined\";\n\t}\n\n\ttry {\n\t\tif (typeof execScript !== \"undefined\" && isIE()) {\n\t\t\texecScript(src);\n\t\t} else if (typeof eval !== \"undefined\") {\n\t\t\teval.call(null, src);\n\t\t} else {\n\t\t\tlog(\"EvalError: No eval function available\");\n\t\t}\n\t} catch (error) {\n\t\tlog(error);\n\t}\n}\n","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\""],"sourceRoot":""}