g)if(l.rowIndex>=r[a-1])n=r[a-1];else{var p=m+h;n=a-1o[s-1]&&ao[0]&&r.setPage("previous")}};if(y.paging&&(y.feature("paging").onAfterChangePage=function(t){var e=t.tf.extension("advancedGrid")._ezEditTable.Selection,n=e.GetActiveRow();n&&n.scrollIntoView(!1);var r=e.GetActiveCell();r&&r.scrollIntoView(!1)}),"row"===e.default_selection){var s=e.on_before_selected_row;e.on_before_selected_row=function(){var t=arguments;i(t[0],t[1],t[2]),s&&s.call(null,t[0],t[1],t[2])};var a=e.on_after_selected_row;e.on_after_selected_row=function(){var t=arguments;o(t[0],t[1],t[2]),a&&a.call(null,t[0],t[1],t[2])}}else{var l=e.on_before_selected_cell;e.on_before_selected_cell=function(){var t=arguments;i(t[0],t[1],t[2]),l&&l.call(null,t[0],t[1],t[2])};var c=e.on_after_selected_cell;e.on_after_selected_cell=function(){var t=arguments;o(t[0],t[1],t[2]),c&&c.call(null,t[0],t[1],t[2])}}}if(n){var d=e.on_added_dom_row;if(e.on_added_dom_row=function(){var t=arguments;y.nbFilterableRows++,y.paging?(y.nbFilterableRows++,y.paging=!1,y.feature("paging").destroy(),y.feature("paging").reset()):y.emitter.emit("rows-changed",y,this),y.alternateRows&&y.feature("alternateRows").init(),d&&d.call(null,t[0],t[1],t[2])},e.actions&&e.actions.delete){var u=e.actions.delete.on_after_submit;e.actions.delete.on_after_submit=function(){var t=arguments;y.nbFilterableRows--,y.paging?(y.nbFilterableRows--,y.paging=!1,y.feature("paging").destroy(),y.feature("paging").reset(!1)):y.emitter.emit("rows-changed",y,this),y.alternateRows&&y.feature("alternateRows").init(),u&&u.call(null,t[0],t[1])}}}try{this._ezEditTable=new EditTable(y.id,e,t),this._ezEditTable.Init()}catch(t){throw new Error('Failed to instantiate EditTable object.\n \n"ezEditTable" dependency not found.')}this.initialized=!0}},{key:"reset",value:function reset(){var t=this._ezEditTable;t&&(this.cfg.selection&&t.Selection.Set(),this.cfg.editable&&t.Editable.Set())}},{key:"toggle",value:function toggle(){var t=this._ezEditTable;t.editable?t.Editable.Remove():t.Editable.Set(),t.selection?t.Selection.Remove():t.Selection.Set()}},{key:"_toggleForInputFilter",value:function _toggleForInputFilter(){var t=this.tf;if(t.getActiveFilterId()){var e=t.getColumnIndexFromFilterId(t.getActiveFilterId());t.getFilterType(e)===o.INPUT&&this.toggle()}}},{key:"destroy",value:function destroy(){var t=this;if(this.initialized){var e=this._ezEditTable;e&&(this.cfg.selection&&(e.Selection.ClearSelections(),e.Selection.Remove()),this.cfg.editable&&e.Editable.Remove()),this.emitter.off(["filter-focus","filter-blur"],function(){return t._toggleForInputFilter()}),this.initialized=!1}}}]),AdapterEzEditTable}()},443:function(t,e,n){"use strict";n.r(e);var r=n(441);n(8).root.SortableTable||n(450),e.default=r.default},444:function(t,e,n){"use strict";n.r(e),n.d(e,"default",function(){return c});var r=n(10),s=n(2),o=n(3),a=n(5),i=n(1),l=n(19);function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(t){return typeof t}:function _typeof(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function _defineProperties(t,e){for(var n=0;n',n.icnCollapseHtml='',n.defaultText="Toggle filters",n.targetId=e.target_id||null,n.enableIcon=Object(i.defaultsBool)(e.enable_icon,!0),n.btnText=Object(i.defaultsStr)(e.btn_text,""),n.collapseBtnHtml=n.enableIcon?n.icnCollapseHtml+n.btnText:n.btnText||n.defaultText,n.expandBtnHtml=n.enableIcon?n.icnExpandHtml+n.btnText:n.btnText||n.defaultText,n.btnHtml=Object(i.defaultsStr)(e.btn_html,null),n.btnCssClass=Object(i.defaultsStr)(e.btn_css_class,"btnExpClpFlt"),n.contCssClass=Object(i.defaultsStr)(e.cont_css_class,"expClpFlt"),n.filtersRowIndex=Object(i.defaultsNb)(e.filters_row_index,t.getFiltersRowIndex()),n.visibleAtStart=Object(i.defaultsNb)(e.visible_at_start,!0),n.toolbarPosition=Object(i.defaultsStr)(e.toolbar_position,l.RIGHT),n.onBeforeShow=Object(i.defaultsFn)(e.on_before_show,o.EMPTY_FN),n.onAfterShow=Object(i.defaultsFn)(e.on_after_show,o.EMPTY_FN),n.onBeforeHide=Object(i.defaultsFn)(e.on_before_hide,o.EMPTY_FN),n.onAfterHide=Object(i.defaultsFn)(e.on_after_hide,o.EMPTY_FN),t.import(e.name+"Style",t.getStylePath()+n.stylesheet,null,"link"),n.enable(),n}return function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&_setPrototypeOf(t,e)}(FiltersVisibility,r["Feature"]),function _createClass(t,e,n){return e&&_defineProperties(t.prototype,e),n&&_defineProperties(t,n),t}(FiltersVisibility,[{key:"init",value:function init(){var n=this;this.initialized||(this.emitter.emit("initializing-extension",this,!Object(o.isNull)(this.targetId)),this.buildUI(),this.initialized=!0,this.emitter.on(["show-filters"],function(t,e){return n.show(e)}),this.emitter.emit("filters-visibility-initialized",this.tf,this),this.emitter.emit("extension-initialized",this))}},{key:"buildUI",value:function buildUI(){var t=this,e=this.tf,n=Object(s.createElm)("span");n.className=this.contCssClass;var r,o=this.targetId?Object(s.elm)(this.targetId):e.feature("toolbar").container(this.toolbarPosition);if(this.targetId)o.appendChild(n);else{var i=o.firstChild;i.parentNode.insertBefore(n,i)}this.btnHtml?(n.innerHTML=this.btnHtml,r=n.firstChild):((r=Object(s.createElm)("a",["href","javascript:void(0);"])).className=this.btnCssClass,r.title=this.btnText||this.defaultText,r.innerHTML=this.collapseBtnHtml,n.appendChild(r)),Object(a.addEvt)(r,"click",function(){return t.toggle()}),this.contEl=n,this.btnEl=r,this.visibleAtStart||this.toggle()}},{key:"toggle",value:function toggle(){var t=this.tf,e=""===(t.gridLayout?t.feature("gridLayout").headTbl:t.dom()).rows[this.filtersRowIndex].style.display;this.show(!e)}},{key:"show",value:function show(){var t=!(0 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'},449:function(t,e){t.exports=function(t){function log(t){"undefined"!=typeof console&&(console.error||console.log)("[Script Loader]",t)}try{"undefined"!=typeof execScript&&function isIE(){return"undefined"!=typeof attachEvent&&"undefined"==typeof addEventListener}()?execScript(t):"undefined"!=typeof eval?eval.call(null,t):log("EvalError: No eval function available")}catch(t){log(t)}}},450:function(t,e,n){n(449)(n(448))},451:function(t,e){function formatter(o){if((o=o||{}).negativeType=o.negativeType||("R"===o.negative?"right":"left"),"string"!=typeof o.negativeLeftSymbol)switch(o.negativeType){case"left":o.negativeLeftSymbol="-";break;case"brackets":o.negativeLeftSymbol="(";break;default:o.negativeLeftSymbol=""}if("string"!=typeof o.negativeRightSymbol)switch(o.negativeType){case"right":o.negativeRightSymbol="-";break;case"brackets":o.negativeRightSymbol=")";break;default:o.negativeRightSymbol=""}function format(t,e){if(e=e||{},!t&&0!==t)return"";var n=[],r="-"===(t=""+t).charAt(0);return t=t.replace(/^\-/g,""),o.negativeLeftOut||e.noUnits||n.push(o.prefix),r&&n.push(o.negativeLeftSymbol),o.negativeLeftOut&&!e.noUnits&&n.push(o.prefix),t=t.split("."),null!=o.round&&function round(t,e){if(t[1]&&0<=e&&t[1].length>e){var n=t[1].slice(0,e);if(5<=+t[1].substr(e,1)){for(var r="";"0"===n.charAt(0);)r+="0",n=n.substr(1);(n=r+(n=+n+1+"")).length>e&&(t[0]=+t[0]+ +n.charAt(0)+"",n=n.substring(1))}t[1]=n}return t}(t,o.round),null!=o.truncate&&(t[1]=function truncate(t,e){t&&(t+="");return t&&t.length>e?t.substr(0,e):t}(t[1],o.truncate)),0 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\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 {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, cfg.name);\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","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","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, f.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = 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 = '';\r\n\r\n /**\r\n * Collapse icon HTML\r\n * @private\r\n */\r\n this.icnCollapseHtml = '';\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 {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, f.name);\r\n\r\n // Configuration object\r\n let cfg = this.config;\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = 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▼\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, 'Columns▼');\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 {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, opts.name);\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 AdapterEzEditTable from './adapterEzEditTable';\r\n\r\nexport default AdapterEzEditTable;","module.exports = \"/*----------------------------------------------------------------------------\\\\\\r\\n| Sortable Table 1.12 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created by Erik Arvidsson |\\r\\n| (http://webfx.eae.net/contact.html#erik) |\\r\\n| For WebFX (http://webfx.eae.net/) |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| A DOM 1 based script that allows an ordinary HTML table to be sortable. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Copyright (c) 1998 - 2006 Erik Arvidsson |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not |\\r\\n| use this file except in compliance with the License. You may obtain a copy |\\r\\n| of the License at http://www.apache.org/licenses/LICENSE-2.0 |\\r\\n| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\\r\\n| Unless required by applicable law or agreed to in writing, software |\\r\\n| distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT |\\r\\n| WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |\\r\\n| License for the specific language governing permissions and limitations |\\r\\n| under the License. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| 2003-01-10 | First version |\\r\\n| 2003-01-19 | Minor changes to the date parsing |\\r\\n| 2003-01-28 | JScript 5.0 fixes (no support for 'in' operator) |\\r\\n| 2003-02-01 | Sloppy typo like error fixed in getInnerText |\\r\\n| 2003-07-04 | Added workaround for IE cellIndex bug. |\\r\\n| 2003-11-09 | The bDescending argument to sort was not correctly working |\\r\\n| | Using onclick DOM0 event if no support for addEventListener |\\r\\n| | or attachEvent |\\r\\n| 2004-01-13 | Adding addSortType and removeSortType which makes it a lot |\\r\\n| | easier to add new, custom sort types. |\\r\\n| 2004-01-27 | Switch to use descending = false as the default sort order. |\\r\\n| | Change defaultDescending to suit your needs. |\\r\\n| 2004-03-14 | Improved sort type None look and feel a bit |\\r\\n| 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you |\\r\\n| | can use another tHead or no tHead, and you can chose some |\\r\\n| | other tBody. |\\r\\n| 2006-04-25 | Changed license to Apache Software License 2.0 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created 2003-01-10 | All changes are in the log above. | Updated 2006-04-25 |\\r\\n\\\\----------------------------------------------------------------------------*/\\r\\n\\r\\n\\r\\nfunction SortableTable(oTable, oSortTypes) {\\r\\n\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\r\\n\\tthis.sortColumn = null;\\r\\n\\tthis.descending = null;\\r\\n\\r\\n\\tvar oThis = this;\\r\\n\\tthis._headerOnclick = function (e) {\\r\\n\\t\\toThis.headerOnclick(e);\\r\\n\\t};\\r\\n\\r\\n\\tif (oTable) {\\r\\n\\t\\tthis.setTable( oTable );\\r\\n\\t\\tthis.document = oTable.ownerDocument || oTable.document;\\r\\n\\t}\\r\\n\\telse {\\r\\n\\t\\tthis.document = document;\\r\\n\\t}\\r\\n\\r\\n\\r\\n\\t// only IE needs this\\r\\n\\tvar win = this.document.defaultView || this.document.parentWindow;\\r\\n\\tthis._onunload = function () {\\r\\n\\t\\toThis.destroy();\\r\\n\\t};\\r\\n\\tif (win && typeof win.attachEvent != \\\"undefined\\\") {\\r\\n\\t\\twin.attachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n}\\r\\n\\r\\nSortableTable.gecko = navigator.product == \\\"Gecko\\\";\\r\\nSortableTable.msie = /msie/i.test(navigator.userAgent);\\r\\n// Mozilla is faster when doing the DOM manipulations on\\r\\n// an orphaned element. MSIE is not\\r\\nSortableTable.removeBeforeSort = SortableTable.gecko;\\r\\n\\r\\nSortableTable.prototype.onsort = function () {};\\r\\n\\r\\n// default sort order. true -> descending, false -> ascending\\r\\nSortableTable.prototype.defaultDescending = false;\\r\\n\\r\\n// shared between all instances. This is intentional to allow external files\\r\\n// to modify the prototype\\r\\nSortableTable.prototype._sortTypeInfo = {};\\r\\n\\r\\nSortableTable.prototype.setTable = function (oTable) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.element = oTable;\\r\\n\\tthis.setTHead( oTable.tHead );\\r\\n\\tthis.setTBody( oTable.tBodies[0] );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTHead = function (oTHead) {\\r\\n\\tif (this.tHead && this.tHead != oTHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.tHead = oTHead;\\r\\n\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTBody = function (oTBody) {\\r\\n\\tthis.tBody = oTBody;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\n// adds arrow containers and events\\r\\n// also binds sort type to the header cells so that reordering columns does\\r\\n// not break the sort types\\r\\nSortableTable.prototype.initHeader = function (oSortTypes) {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar doc = this.tHead.ownerDocument || this.tHead.document;\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img, c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (this.sortTypes[i] != null && this.sortTypes[i] != \\\"None\\\") {\\r\\n\\t\\t\\timg = doc.createElement(\\\"IMG\\\");\\r\\n\\t\\t\\timg.src = \\\"images/blank.png\\\";\\r\\n\\t\\t\\tc.appendChild(img);\\r\\n\\t\\t\\tif (this.sortTypes[i] != null)\\r\\n\\t\\t\\t\\tc._sortType = this.sortTypes[i];\\r\\n\\t\\t\\tif (typeof c.addEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.addEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.attachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.attachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\tc.onclick = this._headerOnclick;\\r\\n\\t\\t}\\r\\n\\t\\telse\\r\\n\\t\\t{\\r\\n\\t\\t\\tc.setAttribute( \\\"_sortType\\\", oSortTypes[i] );\\r\\n\\t\\t\\tc._sortType = \\\"None\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\tthis.updateHeaderArrows();\\r\\n};\\r\\n\\r\\n// remove arrows and events\\r\\nSortableTable.prototype.uninitHeader = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (c._sortType != null && c._sortType != \\\"None\\\") {\\r\\n\\t\\t\\tc.removeChild(c.lastChild);\\r\\n\\t\\t\\tif (typeof c.removeEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.removeEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.detachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.detachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\tc._sortType = null;\\r\\n\\t\\t\\tc.removeAttribute( \\\"_sortType\\\" );\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.updateHeaderArrows = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tif (cells[i]._sortType != null && cells[i]._sortType != \\\"None\\\") {\\r\\n\\t\\t\\timg = cells[i].lastChild;\\r\\n\\t\\t\\tif (i == this.sortColumn)\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow \\\" + (this.descending ? \\\"descending\\\" : \\\"ascending\\\");\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.headerOnclick = function (e) {\\r\\n\\t// find TD element\\r\\n\\tvar el = e.target || e.srcElement;\\r\\n\\twhile (el.tagName != \\\"TD\\\")\\r\\n\\t\\tel = el.parentNode;\\r\\n\\r\\n\\tthis.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\\r\\n};\\r\\n\\r\\n// IE returns wrong cellIndex when columns are hidden\\r\\nSortableTable.getCellIndex = function (oTd) {\\r\\n\\tvar cells = oTd.parentNode.childNodes\\r\\n\\tvar l = cells.length;\\r\\n\\tvar i;\\r\\n\\tfor (i = 0; cells[i] != oTd && i < l; i++)\\r\\n\\t\\t;\\r\\n\\treturn i;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getSortType = function (nColumn) {\\r\\n\\treturn this.sortTypes[nColumn] || \\\"String\\\";\\r\\n};\\r\\n\\r\\n// only nColumn is required\\r\\n// if bDescending is left out the old value is taken into account\\r\\n// if sSortType is left out the sort type is found from the sortTypes array\\r\\n\\r\\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\\r\\n\\tif (!this.tBody) return;\\r\\n\\tif (sSortType == null)\\r\\n\\t\\tsSortType = this.getSortType(nColumn);\\r\\n\\r\\n\\t// exit if None\\r\\n\\tif (sSortType == \\\"None\\\")\\r\\n\\t\\treturn;\\r\\n\\r\\n\\tif (bDescending == null) {\\r\\n\\t\\tif (this.sortColumn != nColumn)\\r\\n\\t\\t\\tthis.descending = this.defaultDescending;\\r\\n\\t\\telse\\r\\n\\t\\t\\tthis.descending = !this.descending;\\r\\n\\t}\\r\\n\\telse\\r\\n\\t\\tthis.descending = bDescending;\\r\\n\\r\\n\\tthis.sortColumn = nColumn;\\r\\n\\r\\n\\tif (typeof this.onbeforesort == \\\"function\\\")\\r\\n\\t\\tthis.onbeforesort();\\r\\n\\r\\n\\tvar f = this.getSortFunction(sSortType, nColumn);\\r\\n\\tvar a = this.getCache(sSortType, nColumn);\\r\\n\\tvar tBody = this.tBody;\\r\\n\\r\\n\\ta.sort(f);\\r\\n\\r\\n\\tif (this.descending)\\r\\n\\t\\ta.reverse();\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// remove from doc\\r\\n\\t\\tvar nextSibling = tBody.nextSibling;\\r\\n\\t\\tvar p = tBody.parentNode;\\r\\n\\t\\tp.removeChild(tBody);\\r\\n\\t}\\r\\n\\r\\n\\t// insert in the new order\\r\\n\\tvar l = a.length;\\r\\n\\tfor (var i = 0; i < l; i++)\\r\\n\\t\\ttBody.appendChild(a[i].element);\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// insert into doc\\r\\n\\t\\tp.insertBefore(tBody, nextSibling);\\r\\n\\t}\\r\\n\\r\\n\\tthis.updateHeaderArrows();\\r\\n\\r\\n\\tthis.destroyCache(a);\\r\\n\\r\\n\\tif (typeof this.onsort == \\\"function\\\")\\r\\n\\t\\tthis.onsort();\\r\\n};\\r\\n\\r\\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\\r\\n\\tvar oThis = this;\\r\\n\\tthis._asyncsort = function () {\\r\\n\\t\\toThis.sort(nColumn, bDescending, sSortType);\\r\\n\\t};\\r\\n\\twindow.setTimeout(this._asyncsort, 1);\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getCache = function (sType, nColumn) {\\r\\n\\tif (!this.tBody) return [];\\r\\n\\tvar rows = this.tBody.rows;\\r\\n\\tvar l = rows.length;\\r\\n\\tvar a = new Array(l);\\r\\n\\tvar r;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tr = rows[i];\\r\\n\\t\\ta[i] = {\\r\\n\\t\\t\\tvalue:\\t\\tthis.getRowValue(r, sType, nColumn),\\r\\n\\t\\t\\telement:\\tr\\r\\n\\t\\t};\\r\\n\\t};\\r\\n\\treturn a;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroyCache = function (oArray) {\\r\\n\\tvar l = oArray.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\toArray[i].value = null;\\r\\n\\t\\toArray[i].element = null;\\r\\n\\t\\toArray[i] = null;\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\\r\\n\\t// if we have defined a custom getRowValue use that\\r\\n\\tif (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\\r\\n\\t\\treturn this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\\r\\n\\r\\n\\tvar s;\\r\\n\\tvar c = oRow.cells[nColumn];\\r\\n\\tif (typeof c.innerText != \\\"undefined\\\")\\r\\n\\t\\ts = c.innerText;\\r\\n\\telse\\r\\n\\t\\ts = SortableTable.getInnerText(c);\\r\\n\\treturn this.getValueFromString(s, sType);\\r\\n};\\r\\n\\r\\nSortableTable.getInnerText = function (oNode) {\\r\\n\\tvar s = \\\"\\\";\\r\\n\\tvar cs = oNode.childNodes;\\r\\n\\tvar l = cs.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tswitch (cs[i].nodeType) {\\r\\n\\t\\t\\tcase 1: //ELEMENT_NODE\\r\\n\\t\\t\\t\\ts += SortableTable.getInnerText(cs[i]);\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\tcase 3:\\t//TEXT_NODE\\r\\n\\t\\t\\t\\ts += cs[i].nodeValue;\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\treturn s;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getValueFromString = function (sText, sType) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].getValueFromString( sText );\\r\\n\\treturn sText;\\r\\n\\t/*\\r\\n\\tswitch (sType) {\\r\\n\\t\\tcase \\\"Number\\\":\\r\\n\\t\\t\\treturn Number(sText);\\r\\n\\t\\tcase \\\"CaseInsensitiveString\\\":\\r\\n\\t\\t\\treturn sText.toUpperCase();\\r\\n\\t\\tcase \\\"Date\\\":\\r\\n\\t\\t\\tvar parts = sText.split(\\\"-\\\");\\r\\n\\t\\t\\tvar d = new Date(0);\\r\\n\\t\\t\\td.setFullYear(parts[0]);\\r\\n\\t\\t\\td.setDate(parts[2]);\\r\\n\\t\\t\\td.setMonth(parts[1] - 1);\\r\\n\\t\\t\\treturn d.valueOf();\\r\\n\\t}\\r\\n\\treturn sText;\\r\\n\\t*/\\r\\n\\t};\\r\\n\\r\\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].compare;\\r\\n\\treturn SortableTable.basicCompare;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroy = function () {\\r\\n\\tthis.uninitHeader();\\r\\n\\tvar win = this.document.parentWindow;\\r\\n\\tif (win && typeof win.detachEvent != \\\"undefined\\\") {\\t// only IE needs this\\r\\n\\t\\twin.detachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n\\tthis._onunload = null;\\r\\n\\tthis.element = null;\\r\\n\\tthis.tHead = null;\\r\\n\\tthis.tBody = null;\\r\\n\\tthis.document = null;\\r\\n\\tthis._headerOnclick = null;\\r\\n\\tthis.sortTypes = null;\\r\\n\\tthis._asyncsort = null;\\r\\n\\tthis.onsort = null;\\r\\n};\\r\\n\\r\\n// Adds a sort type to all instance of SortableTable\\r\\n// sType : String - the identifier of the sort type\\r\\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\\r\\n// string and casts it to a desired format. If left out the string is just\\r\\n// returned\\r\\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\\r\\n// compare function. Takes two values and compares them. If left out less than,\\r\\n// <, compare is used\\r\\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\\r\\n// that takes the row and the column index and returns the value used to compare.\\r\\n// If left out then the innerText is first taken for the cell and then the\\r\\n// fGetValueFromString is used to convert that string the desired value and type\\r\\n\\r\\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\\r\\n\\tthis._sortTypeInfo[sType] = {\\r\\n\\t\\ttype:\\t\\t\\t\\tsType,\\r\\n\\t\\tgetValueFromString:\\tfGetValueFromString || SortableTable.idFunction,\\r\\n\\t\\tcompare:\\t\\t\\tfCompareFunction || SortableTable.basicCompare,\\r\\n\\t\\tgetRowValue:\\t\\tfGetRowValue\\r\\n\\t};\\r\\n};\\r\\n\\r\\n// this removes the sort type from all instances of SortableTable\\r\\nSortableTable.prototype.removeSortType = function (sType) {\\r\\n\\tdelete this._sortTypeInfo[sType];\\r\\n};\\r\\n\\r\\nSortableTable.basicCompare = function compare(n1, n2) {\\r\\n\\tif (n1.value < n2.value)\\r\\n\\t\\treturn -1;\\r\\n\\tif (n2.value < n1.value)\\r\\n\\t\\treturn 1;\\r\\n\\treturn 0;\\r\\n};\\r\\n\\r\\nSortableTable.idFunction = function (x) {\\r\\n\\treturn x;\\r\\n};\\r\\n\\r\\nSortableTable.toUpperCase = function (s) {\\r\\n\\treturn s.toUpperCase();\\r\\n};\\r\\n\\r\\nSortableTable.toDate = function (s) {\\r\\n\\tvar parts = s.split(\\\"-\\\");\\r\\n\\tvar d = new Date(0);\\r\\n\\td.setFullYear(parts[0]);\\r\\n\\td.setDate(parts[2]);\\r\\n\\td.setMonth(parts[1] - 1);\\r\\n\\treturn d.valueOf();\\r\\n};\\r\\n\\r\\n\\r\\n// add sort types\\r\\nSortableTable.prototype.addSortType(\\\"Number\\\", Number);\\r\\nSortableTable.prototype.addSortType(\\\"CaseInsensitiveString\\\", SortableTable.toUpperCase);\\r\\nSortableTable.prototype.addSortType(\\\"Date\\\", SortableTable.toDate);\\r\\nSortableTable.prototype.addSortType(\\\"String\\\");\\r\\n// None is a special case\\r\\n\"","/*\n\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","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\"))","\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"],"sourceRoot":""}
\ No newline at end of file
diff --git a/dist/tablefilter/tf-0-8ba4e8f28dcb16cfc50b.js b/dist/tablefilter/tf-0-8ba4e8f28dcb16cfc50b.js
deleted file mode 100644
index 042bf97d..00000000
--- a/dist/tablefilter/tf-0-8ba4e8f28dcb16cfc50b.js
+++ /dev/null
@@ -1,3480 +0,0 @@
-(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],{
-
-/***/ "./node_modules/format-number/index.js":
-/*!*********************************************!*\
- !*** ./node_modules/format-number/index.js ***!
- \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-
-module.exports = formatter;
-module.exports.default = formatter;
-
-function formatter(options) {
- options = options || {};
-
-
- // *********************************************************************************************
- // Set defaults for negatives
- // options.negative, options.negativeOut, options.separator retained for backward compatibility
- // *********************************************************************************************
-
- // type of negative; default left
- options.negativeType = options.negativeType || (options.negative === 'R' ? 'right' : 'left')
-
- // negative symbols '-' or '()'
- if (typeof options.negativeLeftSymbol !== 'string') {
- switch (options.negativeType) {
- case 'left':
- options.negativeLeftSymbol = '-';
- break;
- case 'brackets':
- options.negativeLeftSymbol = '(';
- break;
- default:
- options.negativeLeftSymbol = '';
- }
- }
- if (typeof options.negativeRightSymbol !== 'string') {
- switch (options.negativeType) {
- case 'right':
- options.negativeRightSymbol = '-';
- break;
- case 'brackets':
- options.negativeRightSymbol = ')';
- break;
- default:
- options.negativeRightSymbol = '';
- }
- }
-
- // whether negative symbol should be inside/outside prefix and suffix
-
- if (typeof options.negativeLeftOut !== "boolean") {
- options.negativeLeftOut = (options.negativeOut === false ? false : true);
- }
- if (typeof options.negativeRightOut !== "boolean") {
- options.negativeRightOut = (options.negativeOut === false ? false : true);
- }
-
- //prefix and suffix
- options.prefix = options.prefix || '';
- options.suffix = options.suffix || '';
-
- //separators
- if (typeof options.integerSeparator !== 'string') {
- options.integerSeparator = (typeof options.separator === 'string' ? options.separator : ',');
- }
- options.decimalsSeparator = typeof options.decimalsSeparator === 'string' ? options.decimalsSeparator : '';
- options.decimal = options.decimal || '.';
-
- //padders
- options.padLeft = options.padLeft || -1 //default no padding
- options.padRight = options.padRight || -1 //default no padding
-
- function format(number, overrideOptions) {
- overrideOptions = overrideOptions || {};
-
- if (number || number === 0) {
- number = '' + number;//convert number to string if it isn't already
- } else {
- return '';
- }
-
- //identify a negative number and make it absolute
- var output = [];
- var negative = number.charAt(0) === '-';
- number = number.replace(/^\-/g, '');
-
- //Prepare output with left hand negative and/or prefix
- if (!options.negativeLeftOut && !overrideOptions.noUnits) {
- output.push(options.prefix);
- }
- if (negative) {
- output.push(options.negativeLeftSymbol);
- }
- if (options.negativeLeftOut && !overrideOptions.noUnits) {
- output.push(options.prefix);
- }
-
- //Format core number
- number = number.split('.');
- if (options.round != null) round(number, options.round);
- if (options.truncate != null) number[1] = truncate(number[1], options.truncate);
- if (options.padLeft > 0) number[0] = padLeft(number[0], options.padLeft);
- if (options.padRight > 0) number[1] = padRight(number[1], options.padRight);
- if (!overrideOptions.noSeparator && number[1]) number[1] = addDecimalSeparators(number[1], options.decimalsSeparator);
- if (!overrideOptions.noSeparator && number[0]) number[0] = addIntegerSeparators(number[0], options.integerSeparator);
- output.push(number[0]);
- if (number[1]) {
- output.push(options.decimal);
- output.push(number[1]);
- }
-
- //Prepare output with right hand negative and/or prefix
- if (options.negativeRightOut && !overrideOptions.noUnits) {
- output.push(options.suffix);
- }
- if (negative) {
- output.push(options.negativeRightSymbol);
- }
- if (!options.negativeRightOut && !overrideOptions.noUnits) {
- output.push(options.suffix);
- }
-
- //join output and return
- return output.join('');
- }
-
- format.negative = options.negative;
- format.negativeOut = options.negativeOut;
- format.negativeType = options.negativeType;
- format.negativeLeftOut = options.negativeLeftOut;
- format.negativeLeftSymbol = options.negativeLeftSymbol;
- format.negativeRightOut = options.negativeRightOut;
- format.negativeRightSymbol = options.negativeRightSymbol;
- format.prefix = options.prefix;
- format.suffix = options.suffix;
- format.separate = options.separate;
- format.integerSeparator = options.integerSeparator;
- format.decimalsSeparator = options.decimalsSeparator;
- format.decimal = options.decimal;
- format.padLeft = options.padLeft;
- format.padRight = options.padRight;
- format.truncate = options.truncate;
- format.round = options.round;
-
- function unformat(number, allowedSeparators) {
- allowedSeparators = allowedSeparators || [];
- if (options.allowedSeparators) {
- options.allowedSeparators.forEach(function (s) { allowedSeparators.push (s); });
- }
- allowedSeparators.push(options.integerSeparator);
- allowedSeparators.push(options.decimalsSeparator);
- number = number.replace(options.prefix, '');
- number = number.replace(options.suffix, '');
- var newNumber = number;
- do {
- number = newNumber;
- for (var i = 0; i < allowedSeparators.length; i++) {
- newNumber = newNumber.replace(allowedSeparators[i], '');
- }
- } while (newNumber != number);
- return number;
- }
- format.unformat = unformat;
-
- function validate(number, allowedSeparators) {
- number = unformat(number, allowedSeparators);
- number = number.split(options.decimal);
- if (number.length > 2) {
- return false;
- } else if (options.truncate != null && number[1] && number[1].length > options.truncate) {
- return false;
- } else if (options.round != null && number[1] && number[1].length > options.round) {
- return false;
- } else {
- return /^-?\d+\.?\d*$/.test(number);
- }
- }
- return format;
-}
-
-//where x is already the integer part of the number
-function addIntegerSeparators(x, separator) {
- x += '';
- if (!separator) return x;
- var rgx = /(\d+)(\d{3})/;
- while (rgx.test(x)) {
- x = x.replace(rgx, '$1' + separator + '$2');
- }
- return x;
-}
-
-//where x is already the decimal part of the number
-function addDecimalSeparators(x, separator) {
- x += '';
- if (!separator) return x;
- var rgx = /(\d{3})(\d+)/;
- while (rgx.test(x)) {
- x = x.replace(rgx, '$1' + separator + '$2');
- }
- return x;
-}
-
-//where x is the integer part of the number
-function padLeft(x, padding) {
- x = x + '';
- var buf = [];
- while (buf.length + x.length < padding) {
- buf.push('0');
- }
- return buf.join('') + x;
-}
-
-//where x is the decimals part of the number
-function padRight(x, padding) {
- if (x) {
- x += '';
- } else {
- x = '';
- }
- var buf = [];
- while (buf.length + x.length < padding) {
- buf.push('0');
- }
- return x + buf.join('');
-}
-function truncate(x, length) {
- if (x) {
- x += '';
- }
- if (x && x.length > length) {
- return x.substr(0, length);
- } else {
- return x;
- }
-}
-
-//where number is an array with 0th item as integer string and 1st item as decimal string (no negatives)
-function round(number, places) {
- if (number[1] && places >= 0 && number[1].length > places) {
- //truncate to correct number of decimal places
- var decim = number[1].slice(0, places);
- //if next digit was >= 5 we need to round up
- if (+(number[1].substr(places, 1)) >= 5) {
- //But first count leading zeros as converting to a number will loose them
- var leadingzeros = "";
- while (decim.charAt(0)==="0") {
- leadingzeros = leadingzeros + "0";
- decim = decim.substr(1);
- }
- //Then we can change decim to a number and add 1 before replacing leading zeros
- decim = (+decim + 1) + '';
- decim = leadingzeros + decim;
- if (decim.length > places) {
- //adding one has made it longer
- number[0] = (+number[0]+ +decim.charAt(0)) + ''; //add value of firstchar to the integer part
- decim = decim.substring(1); //ignore the 1st char at the beginning which is the carry to the integer part
- }
- }
- number[1] = decim;
- }
- return number;
-}
-
-
-/***/ }),
-
-/***/ "./node_modules/raw-loader/index.js!./libs/sortabletable.js":
-/*!*********************************************************!*\
- !*** ./node_modules/raw-loader!./libs/sortabletable.js ***!
- \*********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-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"
-
-/***/ }),
-
-/***/ "./node_modules/script-loader/addScript.js":
-/*!*************************************************!*\
- !*** ./node_modules/script-loader/addScript.js ***!
- \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
-*/
-module.exports = function(src) {
- function log(error) {
- (typeof console !== "undefined")
- && (console.error || console.log)("[Script Loader]", error);
- }
-
- // Check for IE =< 8
- function isIE() {
- return typeof attachEvent !== "undefined" && typeof addEventListener === "undefined";
- }
-
- try {
- if (typeof execScript !== "undefined" && isIE()) {
- execScript(src);
- } else if (typeof eval !== "undefined") {
- eval.call(null, src);
- } else {
- log("EvalError: No eval function available");
- }
- } catch (error) {
- log(error);
- }
-}
-
-
-/***/ }),
-
-/***/ "./node_modules/script-loader/index.js!./libs/sortabletable.js":
-/*!************************************************************!*\
- !*** ./node_modules/script-loader!./libs/sortabletable.js ***!
- \************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-__webpack_require__(/*! !./node_modules/script-loader/addScript.js */ "./node_modules/script-loader/addScript.js")(__webpack_require__(/*! !./node_modules/raw-loader!./libs/sortabletable.js */ "./node_modules/raw-loader/index.js!./libs/sortabletable.js")+"\n\n// SCRIPT-LOADER FOOTER\n//# sourceURL=script:///C:/projects/dev/github/TableFilter/libs/sortabletable.js")
-
-/***/ }),
-
-/***/ "./src sync recursive ^\\.\\/.*$":
-/*!***************************!*\
- !*** ./src sync ^\.\/.*$ ***!
- \***************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var map = {
- "./array": "./src/array.js",
- "./array.js": "./src/array.js",
- "./const": "./src/const.js",
- "./const.js": "./src/const.js",
- "./cookie": "./src/cookie.js",
- "./cookie.js": "./src/cookie.js",
- "./dom": "./src/dom.js",
- "./dom.js": "./src/dom.js",
- "./emitter": "./src/emitter.js",
- "./emitter.js": "./src/emitter.js",
- "./event": "./src/event.js",
- "./event.js": "./src/event.js",
- "./extensions/advancedGrid/adapterEzEditTable": "./src/extensions/advancedGrid/adapterEzEditTable.js",
- "./extensions/advancedGrid/adapterEzEditTable.js": "./src/extensions/advancedGrid/adapterEzEditTable.js",
- "./extensions/advancedGrid/advancedGrid": "./src/extensions/advancedGrid/advancedGrid.js",
- "./extensions/advancedGrid/advancedGrid.js": "./src/extensions/advancedGrid/advancedGrid.js",
- "./extensions/colOps/colOps": "./src/extensions/colOps/colOps.js",
- "./extensions/colOps/colOps.js": "./src/extensions/colOps/colOps.js",
- "./extensions/colsVisibility/colsVisibility": "./src/extensions/colsVisibility/colsVisibility.js",
- "./extensions/colsVisibility/colsVisibility.js": "./src/extensions/colsVisibility/colsVisibility.js",
- "./extensions/filtersVisibility/filtersVisibility": "./src/extensions/filtersVisibility/filtersVisibility.js",
- "./extensions/filtersVisibility/filtersVisibility.js": "./src/extensions/filtersVisibility/filtersVisibility.js",
- "./extensions/sort/adapterSortabletable": "./src/extensions/sort/adapterSortabletable.js",
- "./extensions/sort/adapterSortabletable.js": "./src/extensions/sort/adapterSortabletable.js",
- "./extensions/sort/sort": "./src/extensions/sort/sort.js",
- "./extensions/sort/sort.js": "./src/extensions/sort/sort.js",
- "./feature": "./src/feature.js",
- "./feature.js": "./src/feature.js",
- "./modules/alternateRows": "./src/modules/alternateRows.js",
- "./modules/alternateRows.js": "./src/modules/alternateRows.js",
- "./modules/baseDropdown": "./src/modules/baseDropdown.js",
- "./modules/baseDropdown.js": "./src/modules/baseDropdown.js",
- "./modules/checkList": "./src/modules/checkList.js",
- "./modules/checkList.js": "./src/modules/checkList.js",
- "./modules/clearButton": "./src/modules/clearButton.js",
- "./modules/clearButton.js": "./src/modules/clearButton.js",
- "./modules/dateType": "./src/modules/dateType.js",
- "./modules/dateType.js": "./src/modules/dateType.js",
- "./modules/dropdown": "./src/modules/dropdown.js",
- "./modules/dropdown.js": "./src/modules/dropdown.js",
- "./modules/gridLayout": "./src/modules/gridLayout.js",
- "./modules/gridLayout.js": "./src/modules/gridLayout.js",
- "./modules/hash": "./src/modules/hash.js",
- "./modules/hash.js": "./src/modules/hash.js",
- "./modules/help": "./src/modules/help.js",
- "./modules/help.js": "./src/modules/help.js",
- "./modules/highlightKeywords": "./src/modules/highlightKeywords.js",
- "./modules/highlightKeywords.js": "./src/modules/highlightKeywords.js",
- "./modules/loader": "./src/modules/loader.js",
- "./modules/loader.js": "./src/modules/loader.js",
- "./modules/markActiveColumns": "./src/modules/markActiveColumns.js",
- "./modules/markActiveColumns.js": "./src/modules/markActiveColumns.js",
- "./modules/noResults": "./src/modules/noResults.js",
- "./modules/noResults.js": "./src/modules/noResults.js",
- "./modules/paging": "./src/modules/paging.js",
- "./modules/paging.js": "./src/modules/paging.js",
- "./modules/popupFilter": "./src/modules/popupFilter.js",
- "./modules/popupFilter.js": "./src/modules/popupFilter.js",
- "./modules/rowsCounter": "./src/modules/rowsCounter.js",
- "./modules/rowsCounter.js": "./src/modules/rowsCounter.js",
- "./modules/state": "./src/modules/state.js",
- "./modules/state.js": "./src/modules/state.js",
- "./modules/statusBar": "./src/modules/statusBar.js",
- "./modules/statusBar.js": "./src/modules/statusBar.js",
- "./modules/storage": "./src/modules/storage.js",
- "./modules/storage.js": "./src/modules/storage.js",
- "./modules/toolbar": "./src/modules/toolbar.js",
- "./modules/toolbar.js": "./src/modules/toolbar.js",
- "./number": "./src/number.js",
- "./number.js": "./src/number.js",
- "./root": "./src/root.js",
- "./root.js": "./src/root.js",
- "./settings": "./src/settings.js",
- "./settings.js": "./src/settings.js",
- "./sort": "./src/sort.js",
- "./sort.js": "./src/sort.js",
- "./string": "./src/string.js",
- "./string.js": "./src/string.js",
- "./tablefilter": "./src/tablefilter.js",
- "./tablefilter.js": "./src/tablefilter.js",
- "./tfBase": "./src/tfBase.js",
- "./tfBase.js": "./src/tfBase.js",
- "./types": "./src/types.js",
- "./types.js": "./src/types.js"
-};
-
-
-function webpackContext(req) {
- var id = webpackContextResolve(req);
- var module = __webpack_require__(id);
- return module;
-}
-function webpackContextResolve(req) {
- var id = map[req];
- if(!(id + 1)) { // check for number or string
- var e = new Error('Cannot find module "' + req + '".');
- e.code = 'MODULE_NOT_FOUND';
- throw e;
- }
- return id;
-}
-webpackContext.keys = function webpackContextKeys() {
- return Object.keys(map);
-};
-webpackContext.resolve = webpackContextResolve;
-module.exports = webpackContext;
-webpackContext.id = "./src sync recursive ^\\.\\/.*$";
-
-/***/ }),
-
-/***/ "./src/extensions/advancedGrid/adapterEzEditTable.js":
-/*!***********************************************************!*\
- !*** ./src/extensions/advancedGrid/adapterEzEditTable.js ***!
- \***********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AdapterEzEditTable; });
-/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js");
-/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js");
-/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../const */ "./src/const.js");
-/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../settings */ "./src/settings.js");
-/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../root */ "./src/root.js");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
-
-function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
-
-function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-
-
-
-
-
-var INSTANTIATION_ERROR = "Failed to instantiate EditTable object.\n \n\"ezEditTable\" dependency not found.";
-/**
- * Adapter module for ezEditTable, an external library providing advanced
- * grid features (selection and edition):
- * http://codecanyon.net/item/ezedittable-enhance-html-tables/2425123?ref=koalyptus
- */
-
-var AdapterEzEditTable =
-/*#__PURE__*/
-function (_Feature) {
- _inherits(AdapterEzEditTable, _Feature);
-
- /**
- * Creates an instance of AdapterEzEditTable
- *
- * @param {TableFilter} tf TableFilter instance
- * @param {Object} cfg Configuration options for ezEditTable library
- */
- function AdapterEzEditTable(tf, cfg) {
- var _this;
-
- _classCallCheck(this, AdapterEzEditTable);
-
- _this = _possibleConstructorReturn(this, _getPrototypeOf(AdapterEzEditTable).call(this, tf, cfg.name));
- /**
- * Module description
- * @type {String}
- */
-
- _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.description, 'ezEditTable adapter');
- /**
- * Filename of ezEditTable library
- * @type {String}
- */
-
- _this.filename = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.filename, 'ezEditTable.js');
- /**
- * Path to ezEditTable library
- * @type {String}
- */
-
- _this.vendorPath = cfg.vendor_path;
- /**
- * Load ezEditTable stylesheet
- * @type {Boolean}
- */
-
- _this.loadStylesheet = Boolean(cfg.load_stylesheet);
- /**
- * Path to ezEditTable stylesheet
- * @type {String}
- */
-
- _this.stylesheet = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.stylesheet, _this.vendorPath + 'ezEditTable.css');
- /**
- * Name of ezEditTable stylesheet
- * @type {String}
- */
-
- _this.stylesheetName = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.stylesheet_name, 'ezEditTableCss'); // Enable the ezEditTable's scroll into view behaviour if grid layout on
-
- cfg.scroll_into_view = cfg.scroll_into_view === false ? false : tf.gridLayout;
- /**
- * ezEditTable instance
- * @type {EditTable}
- * @private
- */
-
- _this._ezEditTable = null;
- /**
- * ezEditTable configuration
- * @private
- */
-
- _this.cfg = cfg;
-
- _this.enable();
-
- return _this;
- }
- /**
- * Conditionally load ezEditTable library and set advanced grid
- */
-
-
- _createClass(AdapterEzEditTable, [{
- key: "init",
- value: function init() {
- var _this2 = this;
-
- if (this.initialized) {
- return;
- }
-
- var tf = this.tf;
-
- if (_root__WEBPACK_IMPORTED_MODULE_4__["root"].EditTable) {
- this._setAdvancedGrid();
- } else {
- var path = this.vendorPath + this.filename;
- tf.import(this.filename, path, function () {
- return _this2._setAdvancedGrid();
- });
- }
-
- if (this.loadStylesheet && !tf.isImported(this.stylesheet, 'link')) {
- tf.import(this.stylesheetName, this.stylesheet, null, 'link');
- } // TODO: hack to prevent ezEditTable enter key event hijaking.
- // Needs to be fixed in the vendor's library
-
-
- this.emitter.on(['filter-focus', 'filter-blur'], function () {
- return _this2._toggleForInputFilter();
- });
- /**
- * @inherited
- */
-
- this.initialized = true;
- }
- /**
- * Instantiate ezEditTable component for advanced grid features
- * @private
- */
-
- }, {
- key: "_setAdvancedGrid",
- value: function _setAdvancedGrid() {
- var tf = this.tf; //start row for EditTable constructor needs to be calculated
-
- var startRow,
- cfg = this.cfg,
- thead = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(tf.dom(), 'thead'); //if thead exists and startRow not specified, startRow is calculated
- //automatically by EditTable
-
- if (thead.length > 0 && !cfg.startRow) {
- startRow = undefined;
- } //otherwise startRow config property if any or TableFilter refRow
- else {
- startRow = cfg.startRow || tf.refRow;
- }
-
- cfg.base_path = cfg.base_path || tf.basePath + 'ezEditTable/';
- var editable = cfg.editable;
- var selectable = cfg.selection;
-
- if (selectable) {
- cfg.default_selection = cfg.default_selection || 'row';
- } //CSS Styles
-
-
- cfg.active_cell_css = cfg.active_cell_css || 'ezETSelectedCell';
- var _lastValidRowIndex = 0;
- var _lastRowIndex = 0;
-
- if (selectable) {
- //Row navigation needs to be calculated according to TableFilter's
- //validRowsIndex array
- var onAfterSelection = function onAfterSelection(et, selectedElm, e) {
- var slc = et.Selection; //Next valid filtered row needs to be selected
-
- var doSelect = function doSelect(nextRowIndex) {
- if (et.defaultSelection === 'row') {
- /* eslint-disable */
- slc.SelectRowByIndex(nextRowIndex);
- /* eslint-enable */
- } else {
- /* eslint-disable */
- et.ClearSelections();
- /* eslint-enable */
-
- var cellIndex = selectedElm.cellIndex,
- _row = tf.dom().rows[nextRowIndex];
-
- if (et.defaultSelection === 'both') {
- /* eslint-disable */
- slc.SelectRowByIndex(nextRowIndex);
- /* eslint-enable */
- }
-
- if (_row) {
- /* eslint-disable */
- slc.SelectCell(_row.cells[cellIndex]);
- /* eslint-enable */
- }
- } //Table is filtered
-
-
- if (tf.validRowsIndex.length !== tf.getRowsNb()) {
- var r = tf.dom().rows[nextRowIndex];
-
- if (r) {
- r.scrollIntoView(false);
- }
-
- if (cell) {
- if (cell.cellIndex === tf.getCellsNb() - 1 && tf.gridLayout) {
- tf.tblCont.scrollLeft = 100000000;
- } else if (cell.cellIndex === 0 && tf.gridLayout) {
- tf.tblCont.scrollLeft = 0;
- } else {
- cell.scrollIntoView(false);
- }
- }
- }
- }; //table is not filtered
-
-
- if (!tf.validRowsIndex) {
- return;
- }
-
- var validIndexes = tf.validRowsIndex,
- validIdxLen = validIndexes.length,
- row = et.defaultSelection !== 'row' ? selectedElm.parentNode : selectedElm,
- //cell for default_selection = 'both' or 'cell'
- cell = selectedElm.nodeName === 'TD' ? selectedElm : null,
-
- /* eslint-disable */
- keyCode = e !== undefined ? et.Event.GetKey(e) : 0,
-
- /* eslint-enable */
- isRowValid = validIndexes.indexOf(row.rowIndex) !== -1,
- nextRowIndex,
- paging = tf.feature('paging'),
- //pgup/pgdown keys
- d = keyCode === 34 || keyCode === 33 ? paging && paging.pageLength || et.nbRowsPerPage : 1; //If next row is not valid, next valid filtered row needs to be
- //calculated
-
- if (!isRowValid) {
- //Selection direction up/down
- if (row.rowIndex > _lastRowIndex) {
- //last row
- if (row.rowIndex >= validIndexes[validIdxLen - 1]) {
- nextRowIndex = validIndexes[validIdxLen - 1];
- } else {
- var calcRowIndex = _lastValidRowIndex + d;
-
- if (calcRowIndex > validIdxLen - 1) {
- nextRowIndex = validIndexes[validIdxLen - 1];
- } else {
- nextRowIndex = validIndexes[calcRowIndex];
- }
- }
- } else {
- //first row
- if (row.rowIndex <= validIndexes[0]) {
- nextRowIndex = validIndexes[0];
- } else {
- var v = validIndexes[_lastValidRowIndex - d];
- nextRowIndex = v ? v : validIndexes[0];
- }
- }
-
- _lastRowIndex = row.rowIndex;
- doSelect(nextRowIndex);
- } else {
- //If filtered row is valid, special calculation for
- //pgup/pgdown keys
- if (keyCode !== 34 && keyCode !== 33) {
- _lastValidRowIndex = validIndexes.indexOf(row.rowIndex);
- _lastRowIndex = row.rowIndex;
- } else {
- if (keyCode === 34) {
- //pgdown
- //last row
- if (_lastValidRowIndex + d <= validIdxLen - 1) {
- nextRowIndex = validIndexes[_lastValidRowIndex + d];
- } else {
- nextRowIndex = [validIdxLen - 1];
- }
- } else {
- //pgup
- //first row
- if (_lastValidRowIndex - d <= validIndexes[0]) {
- nextRowIndex = validIndexes[0];
- } else {
- nextRowIndex = validIndexes[_lastValidRowIndex - d];
- }
- }
-
- _lastRowIndex = nextRowIndex;
- _lastValidRowIndex = validIndexes.indexOf(nextRowIndex);
- doSelect(nextRowIndex);
- }
- }
- }; //Page navigation has to be enforced whenever selected row is out of
- //the current page range
-
-
- var onBeforeSelection = function onBeforeSelection(et, selectedElm) {
- var row = et.defaultSelection !== 'row' ? selectedElm.parentNode : selectedElm;
-
- if (tf.paging) {
- if (tf.feature('paging').nbPages > 1) {
- var paging = tf.feature('paging'); //page length is re-assigned in case it has changed
-
- et.nbRowsPerPage = paging.pageLength;
- var validIndexes = tf.validRowsIndex,
- validIdxLen = validIndexes.length,
- pagingEndRow = parseInt(paging.startPagingRow, 10) + parseInt(paging.pageLength, 10);
- var rowIndex = row.rowIndex;
-
- if (rowIndex === validIndexes[validIdxLen - 1] && paging.currentPageNb !== paging.nbPages) {
- paging.setPage('last');
- } else if (rowIndex === validIndexes[0] && paging.currentPageNb !== 1) {
- paging.setPage('first');
- } else if (rowIndex > validIndexes[pagingEndRow - 1] && rowIndex < validIndexes[validIdxLen - 1]) {
- paging.setPage('next');
- } else if (rowIndex < validIndexes[paging.startPagingRow] && rowIndex > validIndexes[0]) {
- paging.setPage('previous');
- }
- }
- }
- }; //Selected row needs to be visible when paging is activated
-
-
- if (tf.paging) {
- tf.feature('paging').onAfterChangePage = function (paging) {
- var advGrid = paging.tf.extension('advancedGrid');
- var et = advGrid._ezEditTable;
- var slc = et.Selection;
- /* eslint-disable */
-
- var row = slc.GetActiveRow();
- /* eslint-enable */
-
- if (row) {
- row.scrollIntoView(false);
- }
- /* eslint-disable */
-
-
- var cell = slc.GetActiveCell();
- /* eslint-enable */
-
- if (cell) {
- cell.scrollIntoView(false);
- }
- };
- } //Rows navigation when rows are filtered is performed with the
- //EditTable row selection callback events
-
-
- if (cfg.default_selection === 'row') {
- var fnB = cfg.on_before_selected_row;
-
- cfg.on_before_selected_row = function () {
- var args = arguments;
- onBeforeSelection(args[0], args[1], args[2]);
-
- if (fnB) {
- fnB.call(null, args[0], args[1], args[2]);
- }
- };
-
- var fnA = cfg.on_after_selected_row;
-
- cfg.on_after_selected_row = function () {
- var args = arguments;
- onAfterSelection(args[0], args[1], args[2]);
-
- if (fnA) {
- fnA.call(null, args[0], args[1], args[2]);
- }
- };
- } else {
- var fnD = cfg.on_before_selected_cell;
-
- cfg.on_before_selected_cell = function () {
- var args = arguments;
- onBeforeSelection(args[0], args[1], args[2]);
-
- if (fnD) {
- fnD.call(null, args[0], args[1], args[2]);
- }
- };
-
- var fnC = cfg.on_after_selected_cell;
-
- cfg.on_after_selected_cell = function () {
- var args = arguments;
- onAfterSelection(args[0], args[1], args[2]);
-
- if (fnC) {
- fnC.call(null, args[0], args[1], args[2]);
- }
- };
- }
- }
-
- if (editable) {
- //Added or removed rows, TF rows number needs to be re-calculated
- var fnE = cfg.on_added_dom_row;
-
- cfg.on_added_dom_row = function () {
- var args = arguments;
- tf.nbFilterableRows++;
-
- if (!tf.paging) {
- tf.emitter.emit('rows-changed', tf, this);
- } else {
- tf.nbFilterableRows++;
- tf.paging = false;
- tf.feature('paging').destroy();
- tf.feature('paging').reset();
- }
-
- if (tf.alternateRows) {
- tf.feature('alternateRows').init();
- }
-
- if (fnE) {
- fnE.call(null, args[0], args[1], args[2]);
- }
- };
-
- if (cfg.actions && cfg.actions['delete']) {
- var fnF = cfg.actions['delete'].on_after_submit;
-
- cfg.actions['delete'].on_after_submit = function () {
- var args = arguments;
- tf.nbFilterableRows--;
-
- if (!tf.paging) {
- tf.emitter.emit('rows-changed', tf, this);
- } else {
- tf.nbFilterableRows--;
- tf.paging = false;
- tf.feature('paging').destroy();
- tf.feature('paging').reset(false);
- }
-
- if (tf.alternateRows) {
- tf.feature('alternateRows').init();
- }
-
- if (fnF) {
- fnF.call(null, args[0], args[1]);
- }
- };
- }
- }
-
- try {
- /* eslint-disable */
- this._ezEditTable = new EditTable(tf.id, cfg, startRow);
-
- this._ezEditTable.Init();
- /* eslint-enable */
-
- } catch (e) {
- throw new Error(INSTANTIATION_ERROR);
- }
-
- this.initialized = true;
- }
- /**
- * Reset advanced grid when previously removed
- */
-
- }, {
- key: "reset",
- value: function reset() {
- var ezEditTable = this._ezEditTable;
-
- if (ezEditTable) {
- if (this.cfg.selection) {
- /* eslint-disable */
- ezEditTable.Selection.Set();
- /* eslint-enable */
- }
-
- if (this.cfg.editable) {
- /* eslint-disable */
- ezEditTable.Editable.Set();
- /* eslint-enable */
- }
- }
- }
- /**
- * Toggle behaviour
- */
-
- }, {
- key: "toggle",
- value: function toggle() {
- var ezEditTable = this._ezEditTable;
-
- if (ezEditTable.editable) {
- /* eslint-disable */
- ezEditTable.Editable.Remove();
- /* eslint-enable */
- } else {
- /* eslint-disable */
- ezEditTable.Editable.Set();
- /* eslint-enable */
- }
-
- if (ezEditTable.selection) {
- /* eslint-disable */
- ezEditTable.Selection.Remove();
- /* eslint-enable */
- } else {
- /* eslint-disable */
- ezEditTable.Selection.Set();
- /* eslint-enable */
- }
- }
- }, {
- key: "_toggleForInputFilter",
- value: function _toggleForInputFilter() {
- var tf = this.tf;
-
- if (!tf.getActiveFilterId()) {
- return;
- }
-
- var colIndex = tf.getColumnIndexFromFilterId(tf.getActiveFilterId());
- var filterType = tf.getFilterType(colIndex);
-
- if (filterType === _const__WEBPACK_IMPORTED_MODULE_2__["INPUT"]) {
- this.toggle();
- }
- }
- /**
- * Remove advanced grid
- */
-
- }, {
- key: "destroy",
- value: function destroy() {
- var _this3 = this;
-
- if (!this.initialized) {
- return;
- }
-
- var ezEditTable = this._ezEditTable;
-
- if (ezEditTable) {
- if (this.cfg.selection) {
- /* eslint-disable */
- ezEditTable.Selection.ClearSelections();
- ezEditTable.Selection.Remove();
- /* eslint-enable */
- }
-
- if (this.cfg.editable) {
- /* eslint-disable */
- ezEditTable.Editable.Remove();
- /* eslint-enable */
- }
- }
-
- this.emitter.off(['filter-focus', 'filter-blur'], function () {
- return _this3._toggleForInputFilter();
- });
- this.initialized = false;
- }
- }]);
-
- return AdapterEzEditTable;
-}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]);
-
-
-
-/***/ }),
-
-/***/ "./src/extensions/advancedGrid/advancedGrid.js":
-/*!*****************************************************!*\
- !*** ./src/extensions/advancedGrid/advancedGrid.js ***!
- \*****************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _adapterEzEditTable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adapterEzEditTable */ "./src/extensions/advancedGrid/adapterEzEditTable.js");
-
-/* harmony default export */ __webpack_exports__["default"] = (_adapterEzEditTable__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/extensions/colOps/colOps.js":
-/*!*****************************************!*\
- !*** ./src/extensions/colOps/colOps.js ***!
- \*****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ColOps; });
-/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js");
-/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js");
-/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types */ "./src/types.js");
-/* harmony import */ var _sort__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../sort */ "./src/sort.js");
-/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../const */ "./src/const.js");
-/* harmony import */ var format_number__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! format-number */ "./node_modules/format-number/index.js");
-/* harmony import */ var format_number__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(format_number__WEBPACK_IMPORTED_MODULE_5__);
-/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../settings */ "./src/settings.js");
-/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../event */ "./src/event.js");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
-
-function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
-
-function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-
-
-
-
-
-
-
-
-var EVENTS = ['after-filtering', 'after-page-change', 'after-page-length-change'];
-var SUM = 'sum';
-var MEAN = 'mean';
-var MIN = 'min';
-var MAX = 'max';
-var MEDIAN = 'median';
-var Q1 = 'q1';
-var Q3 = 'q3';
-/**
- * Column calculations extension
- */
-
-var ColOps =
-/*#__PURE__*/
-function (_Feature) {
- _inherits(ColOps, _Feature);
-
- /**
- * Creates an instance of ColOps
- *
- * @param {TableFilter} tf TableFilter instance
- * @param {Object} opts Configuration object
- */
- function ColOps(tf, opts) {
- var _this;
-
- _classCallCheck(this, ColOps);
-
- _this = _possibleConstructorReturn(this, _getPrototypeOf(ColOps).call(this, tf, opts.name));
- /**
- * Callback fired before columns operations start
- * @type {Function}
- */
-
- _this.onBeforeOperation = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_before_operation, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after columns operations are completed
- * @type {Function}
- */
-
- _this.onAfterOperation = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_after_operation, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Configuration options
- * @type {Object}
- */
-
- _this.opts = opts;
- /**
- * List of DOM element IDs containing column's calculation result
- * @type {Array}
- */
-
- _this.labelIds = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.id, []);
- /**
- * List of columns' indexes for calculations
- * @type {Array}
- */
-
- _this.colIndexes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.col, []);
- /**
- * List of operations - possible values: 'sum', 'mean', 'min', 'max',
- * 'median', 'q1', 'q3'
- * @type {Array}
- */
-
- _this.operations = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.operation, []);
- /**
- * List of write methods used to write the result - possible values:
- * 'innerHTML', 'setValue', 'createTextNode'
- * @type {Array}
- */
-
- _this.outputTypes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.write_method, []);
- /**
- * List of format objects used for formatting the result -
- * refer to https://github.com/componitable/format-number to check
- * configuration options
- * @type {Array}
- */
-
- _this.formatResults = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.format_result, []);
- /**
- * List of row indexes displaying the results
- * @type {Array}
- */
-
- _this.totRowIndexes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.tot_row_index, []);
- /**
- * List of row indexes excluded from calculations
- * @type {Array}
- */
-
- _this.excludeRows = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.exclude_row, []);
- /**
- * List of decimal precision for calculation results
- * @type {Array}
- */
-
- _this.decimalPrecisions = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.decimal_precision, 2);
-
- _this.enable();
-
- return _this;
- }
- /**
- * Initializes ColOps instance
- */
-
-
- _createClass(ColOps, [{
- key: "init",
- value: function init() {
- if (this.initialized) {
- return;
- } // subscribe to events
-
-
- this.emitter.on(EVENTS, Object(_event__WEBPACK_IMPORTED_MODULE_7__["bound"])(this.calcAll, this));
- this.calcAll();
- /** @inherited */
-
- this.initialized = true;
- }
- /**
- * Calculates columns' values
- * Configuration options are stored in 'opts' property
- * - 'id' contains ids of elements showing result (array)
- * - 'col' contains the columns' indexes (array)
- * - 'operation' contains operation type (array, values: 'sum', 'mean',
- * 'min', 'max', 'median', 'q1', 'q3')
- * - 'write_method' array defines which method to use for displaying the
- * result (innerHTML, setValue, createTextNode) - default: 'innerHTML'
- * - 'tot_row_index' defines in which row results are displayed
- * (integers array)
- *
- * - changes made by Nuovella:
- * (1) optimized the routine (now it will only process each column once),
- * (2) added calculations for the median, lower and upper quartile.
- */
-
- }, {
- key: "calcAll",
- value: function calcAll() {
- var tf = this.tf;
-
- if (!tf.isInitialized()) {
- return;
- }
-
- this.onBeforeOperation(tf, this);
- this.emitter.emit('before-column-operation', tf, this);
- var colIndexes = this.colIndexes,
- colOperations = this.operations,
- outputTypes = this.outputTypes,
- totRowIndexes = this.totRowIndexes,
- excludeRows = this.excludeRows,
- formatResults = this.formatResults,
- decimalPrecisions = this.decimalPrecisions; //nuovella: determine unique list of columns to operate on
-
- var uIndexes = [];
- colIndexes.forEach(function (val) {
- if (uIndexes.indexOf(val) === -1) {
- uIndexes.push(val);
- }
- });
- var nbCols = uIndexes.length,
- rows = tf.dom().rows,
- colValues = [];
-
- for (var u = 0; u < nbCols; u++) {
- //this retrieves col values
- //use uIndexes because we only want to pass through this loop
- //once for each column get the values in this unique column
- colValues.push(tf.getVisibleColumnData(uIndexes[u], false, excludeRows));
- var curValues = colValues[u]; //next: calculate all operations for this column
-
- var result = 0,
- operations = [],
- precisions = [],
- labels = [],
- writeType = void 0,
- formatResult = [],
- idx = 0;
-
- for (var k = 0; k < colIndexes.length; k++) {
- if (colIndexes[k] !== uIndexes[u]) {
- continue;
- }
-
- operations[idx] = (colOperations[k] || 'sum').toLowerCase();
- precisions[idx] = decimalPrecisions[k];
- labels[idx] = this.labelIds[k];
- writeType = Object(_types__WEBPACK_IMPORTED_MODULE_2__["isArray"])(outputTypes) ? outputTypes[k] : null;
- formatResult[idx] = this.configureFormat(uIndexes[u], formatResults[k]);
- idx++;
- }
-
- for (var i = 0; i < idx; i++) {
- // emit values before column calculation
- this.emitter.emit('before-column-calc', tf, this, uIndexes[u], curValues, operations[i], precisions[i]);
- result = Number(this.calc(curValues, operations[i], null)); // emit column calculation result
-
- this.emitter.emit('column-calc', tf, this, uIndexes[u], result, operations[i], precisions[i]); // write result in expected DOM element
-
- this.writeResult(result, labels[i], writeType, precisions[i], formatResult[i]);
- } //for i
- // row(s) with result are always visible
-
-
- var totRow = totRowIndexes && totRowIndexes[u] ? rows[totRowIndexes[u]] : null;
-
- if (totRow) {
- totRow.style.display = '';
- }
- } //for u
-
-
- this.onAfterOperation(tf, this);
- this.emitter.emit('after-column-operation', tf, this);
- }
- /**
- * Make desired calculation on specified column.
- * @param {Number} colIndex Column index
- * @param {String} [operation=SUM] Operation type
- * @param {Number} precision Decimal precision
- * @returns {Number}
- */
-
- }, {
- key: "columnCalc",
- value: function columnCalc(colIndex) {
- var operation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SUM;
- var precision = arguments.length > 2 ? arguments[2] : undefined;
- var excludeRows = this.excludeRows || [];
- var colValues = tf.getVisibleColumnData(colIndex, false, excludeRows);
- return Number(this.calc(colValues, operation, precision));
- }
- /**
- * Make calculation on passed values.
- * @param {Array} values List of values
- * @param {String} [operation=SUM] Optional operation type
- * @param {Number} precision Optional result precision
- * @returns {Number}
- * @private
- */
-
- }, {
- key: "calc",
- value: function calc(colValues) {
- var operation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SUM;
- var precision = arguments.length > 2 ? arguments[2] : undefined;
- var result = 0;
-
- if (operation === Q1 || operation === Q3 || operation === MEDIAN) {
- colValues = this.sortColumnValues(colValues, _sort__WEBPACK_IMPORTED_MODULE_3__["numSortAsc"]);
- }
-
- switch (operation) {
- case MEAN:
- result = this.calcMean(colValues);
- break;
-
- case SUM:
- result = this.calcSum(colValues);
- break;
-
- case MIN:
- result = this.calcMin(colValues);
- break;
-
- case MAX:
- result = this.calcMax(colValues);
- break;
-
- case MEDIAN:
- result = this.calcMedian(colValues);
- break;
-
- case Q1:
- result = this.calcQ1(colValues);
- break;
-
- case Q3:
- result = this.calcQ3(colValues);
- break;
- }
-
- return Object(_types__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(precision) ? result : result.toFixed(precision);
- }
- /**
- * Calculate the sum of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcSum",
- value: function calcSum() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
-
- if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(values)) {
- return 0;
- }
-
- var result = values.reduce(function (x, y) {
- return Number(x) + Number(y);
- });
- return result;
- }
- /**
- * Calculate the mean of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcMean",
- value: function calcMean() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var result = this.calcSum(values) / values.length;
- return Number(result);
- }
- /**
- * Calculate the max value of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcMax",
- value: function calcMax() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- return Math.max.apply(null, values);
- }
- /**
- * Calculate the min value of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcMin",
- value: function calcMin() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- return Math.min.apply(null, values);
- }
- /**
- * Calculate the median of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcMedian",
- value: function calcMedian() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var nbValues = values.length;
- var aux = 0;
-
- if (nbValues % 2 === 1) {
- aux = Math.floor(nbValues / 2);
- return Number(values[aux]);
- }
-
- return (Number(values[nbValues / 2]) + Number(values[nbValues / 2 - 1])) / 2;
- }
- /**
- * Calculate the lower quartile of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcQ1",
- value: function calcQ1() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var nbValues = values.length;
- var posa = 0.0;
- posa = Math.floor(nbValues / 4);
-
- if (4 * posa === nbValues) {
- return (Number(values[posa - 1]) + Number(values[posa])) / 2;
- }
-
- return Number(values[posa]);
- }
- /**
- * Calculate the upper quartile of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcQ3",
- value: function calcQ3() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var nbValues = values.length;
- var posa = 0.0;
- var posb = 0.0;
- posa = Math.floor(nbValues / 4);
-
- if (4 * posa === nbValues) {
- posb = 3 * posa;
- return (Number(values[posb]) + Number(values[posb - 1])) / 2;
- }
-
- return Number(values[nbValues - posa - 1]);
- }
- /**
- * Sort passed values with supplied sorter function.
- * @param {Array} [values=[]] List of values to be sorted
- * @param {Function} sorter Sorter function
- * @returns {Array}
- */
-
- }, {
- key: "sortColumnValues",
- value: function sortColumnValues() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var sorter = arguments.length > 1 ? arguments[1] : undefined;
- return values.sort(sorter);
- }
- /**
- * Write calculation result in passed DOM element with supplied write method
- * and decimal precision.
- * @param {Number} [result=0] Calculation result
- * @param {DOMElement} label DOM element
- * @param {String} [writeType='innerhtml'] Write method
- * @param {Number} [precision=2] Applied decimal precision
- * @private
- */
-
- }, {
- key: "writeResult",
- value: function writeResult() {
- var result = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
- var label = arguments.length > 1 ? arguments[1] : undefined;
- var writeType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'innerhtml';
- var precision = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 2;
- var format = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
- var labelElm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(label);
-
- if (!labelElm) {
- return;
- }
-
- result = result.toFixed(precision);
-
- if (isNaN(result) || !isFinite(result)) {
- result = '';
- } else {
- result = format_number__WEBPACK_IMPORTED_MODULE_5___default()(format)(result);
- }
-
- switch (writeType.toLowerCase()) {
- case 'innerhtml':
- labelElm.innerHTML = result;
- break;
-
- case 'setvalue':
- labelElm.value = result;
- break;
-
- case 'createtextnode':
- var oldNode = labelElm.firstChild;
- var txtNode = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createText"])(result);
- labelElm.replaceChild(txtNode, oldNode);
- break;
- }
- }
- /**
- * Configure the format options used to format the operation result based
- * on column type.
- * @param {Number} colIndex Column index
- * @param {Object} [format={}] Format object
- * @returns {Object}
- * @private
- */
-
- }, {
- key: "configureFormat",
- value: function configureFormat(colIndex) {
- var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- var tf = this.tf;
-
- if (tf.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_4__["FORMATTED_NUMBER"]])) {
- var colType = tf.colTypes[colIndex];
-
- if (colType.decimal && !format.decimal) {
- format.decimal = colType.decimal;
- }
-
- if (colType.thousands && !format.integerSeparator) {
- format.integerSeparator = colType.thousands;
- }
- } else {
- format.decimal = format.decimal || '';
- format.integerSeparator = format.integerSeparator || '';
- }
-
- return format;
- }
- /** Remove extension */
-
- }, {
- key: "destroy",
- value: function destroy() {
- if (!this.initialized) {
- return;
- } // unsubscribe to events
-
-
- this.emitter.off(EVENTS, Object(_event__WEBPACK_IMPORTED_MODULE_7__["bound"])(this.calcAll, this));
- this.initialized = false;
- }
- }]);
-
- return ColOps;
-}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]);
-
-
-
-/***/ }),
-
-/***/ "./src/extensions/colsVisibility/colsVisibility.js":
-/*!*********************************************************!*\
- !*** ./src/extensions/colsVisibility/colsVisibility.js ***!
- \*********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ColsVisibility; });
-/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js");
-/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js");
-/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types */ "./src/types.js");
-/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../event */ "./src/event.js");
-/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../root */ "./src/root.js");
-/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../const */ "./src/const.js");
-/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../settings */ "./src/settings.js");
-/* harmony import */ var _modules_toolbar__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../modules/toolbar */ "./src/modules/toolbar.js");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
-
-function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
-
-function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-
-
-
-
-
-
-
-
-/**
- * Columns Visibility extension
- */
-
-var ColsVisibility =
-/*#__PURE__*/
-function (_Feature) {
- _inherits(ColsVisibility, _Feature);
-
- /**
- * Creates an instance of ColsVisibility
- * @param {TableFilter} tf TableFilter instance
- * @param {Object} Configuration object
- */
- function ColsVisibility(tf, f) {
- var _this;
-
- _classCallCheck(this, ColsVisibility);
-
- _this = _possibleConstructorReturn(this, _getPrototypeOf(ColsVisibility).call(this, tf, f.name)); // Configuration object
-
- var cfg = _this.config;
- /**
- * Module name
- * @type {String}
- */
-
- _this.name = f.name;
- /**
- * Module description
- * @type {String}
- */
-
- _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.description, 'Columns visibility manager');
- /**
- * show/hide columns container element
- * @private
- */
-
- _this.spanEl = null;
- /**
- * show/hide columns button element
- * @private
- */
-
- _this.btnEl = null;
- /**
- * show/hide columns main container element
- * @private
- */
-
- _this.contEl = null;
- /**
- * Enable tick to hide a column, defaults to true
- * @type {Boolean}
- */
-
- _this.tickToHide = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsBool"])(f.tick_to_hide, true);
- /**
- * Enable columns manager UI, defaults to true
- * @type {Boolean}
- */
-
- _this.manager = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsBool"])(f.manager, true);
- /**
- * Headers HTML table reference only if headers are external
- * @type {DOMElement}
- */
-
- _this.headersTbl = f.headers_table || null;
- /**
- * Headers row index only if headers are external
- * @type {Number}
- */
-
- _this.headersIndex = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsNb"])(f.headers_index, 1);
- /**
- * ID of main container element
- * @type {String}
- */
-
- _this.contElTgtId = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.container_target_id, null);
- /**
- * Alternative text for column headers in column manager UI
- * @type {Array}
- */
-
- _this.headersText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(f.headers_text, []);
- /**
- * ID of button's container element
- * @type {String}
- */
-
- _this.btnTgtId = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_target_id, null);
- /**
- * Button's text, defaults to Columns▼
- * @type {String}
- */
-
- _this.btnText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_text, 'Columns▼');
- /**
- * Button's inner HTML
- * @type {String}
- */
-
- _this.btnHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_html, null);
- /**
- * Css class for button
- * @type {String}
- */
-
- _this.btnCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_css_class, 'colVis');
- /**
- * Columns manager UI close link text, defaults to 'Close'
- * @type {String}
- */
-
- _this.btnCloseText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_close_text, 'Close');
- /**
- * Columns manager UI close link HTML
- * @type {String}
- */
-
- _this.btnCloseHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_close_html, null);
- /**
- * Css for columns manager UI close link
- * @type {String}
- */
-
- _this.btnCloseCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_close_css_class, _this.btnCssClass);
- /**
- * Extension's stylesheet filename
- * @type {String}
- */
-
- _this.stylesheet = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.stylesheet, 'colsVisibility.css');
- /**
- * Css for columns manager UI span
- * @type {String}
- */
-
- _this.spanCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.span_css_class, 'colVisSpan');
- /**
- * Css for columns manager UI main container
- * @type {String}
- */
-
- _this.contCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.cont_css_class, 'colVisCont');
- /**
- * Css for columns manager UI checklist (ul)
- * @type {String}
- */
-
- _this.listCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(cfg.list_css_class, 'cols_checklist');
- /**
- * Css for columns manager UI checklist item (li)
- * @type {String}
- */
-
- _this.listItemCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(cfg.checklist_item_css_class, 'cols_checklist_item');
- /**
- * Css for columns manager UI checklist item selected state (li)
- * @type {String}
- */
-
- _this.listSlcItemCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(cfg.checklist_selected_item_css_class, 'cols_checklist_slc_item');
- /**
- * Text preceding the columns list, defaults to 'Hide' or 'Show'
- * depending on tick mode (tick_to_hide option)
- * @type {String}
- */
-
- _this.text = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.text, _this.tickToHide ? 'Hide: ' : 'Show: ');
- /**
- * List of columns indexes to be hidden at initialization
- * @type {Array}
- */
-
- _this.atStart = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(f.at_start, []);
- /**
- * Enable hover behaviour on columns manager button/link
- * @type {Boolean}
- */
-
- _this.enableHover = Boolean(f.enable_hover);
- /**
- * Enable select all option, disabled by default
- * @type {Boolean}
- */
-
- _this.enableTickAll = Boolean(f.enable_tick_all);
- /**
- * Text for select all option, defaults to 'Select all:'
- * @type {String}
- */
-
- _this.tickAllText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.tick_all_text, 'Select all:');
- /**
- * Default position in toolbar ('left'|'center'|'right')
- * @type {String}
- */
-
- _this.toolbarPosition = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.toolbar_position, _modules_toolbar__WEBPACK_IMPORTED_MODULE_7__["RIGHT"]);
- /**
- * List of indexes of hidden columns
- * @private
- */
-
- _this.hiddenCols = [];
- /**
- * Bound mouseup wrapper
- * @private
- */
-
- _this.boundMouseup = null;
- /**
- * Callback fired when the extension is initialized
- * @type {Function}
- */
-
- _this.onLoaded = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_loaded, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired before the columns manager is opened
- * @type {Function}
- */
-
- _this.onBeforeOpen = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_open, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after the columns manager is opened
- * @type {Function}
- */
-
- _this.onAfterOpen = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_open, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired before the columns manager is closed
- * @type {Function}
- */
-
- _this.onBeforeClose = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_close, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after the columns manager is closed
- * @type {Function}
- */
-
- _this.onAfterClose = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_close, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired before a column is hidden
- * @type {Function}
- */
-
- _this.onBeforeColHidden = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_col_hidden, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after a column is hidden
- * @type {Function}
- */
-
- _this.onAfterColHidden = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_col_hidden, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired before a column is displayed
- * @type {Function}
- */
-
- _this.onBeforeColDisplayed = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_col_displayed, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after a column is displayed
- * @type {Function}
- */
-
- _this.onAfterColDisplayed = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_col_displayed, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); //Grid layout support
-
- if (tf.gridLayout) {
- _this.headersTbl = tf.feature('gridLayout').headTbl; //headers table
-
- _this.headersIndex = 0; //headers index
- } //Loads extension stylesheet
-
-
- tf.import(f.name + 'Style', tf.getStylePath() + _this.stylesheet, null, 'link');
-
- _this.enable();
-
- return _this;
- }
- /**
- * Mouse-up event handler handling popup auto-close behaviour
- * @private
- */
-
-
- _createClass(ColsVisibility, [{
- key: "onMouseup",
- value: function onMouseup(evt) {
- var targetElm = Object(_event__WEBPACK_IMPORTED_MODULE_3__["targetEvt"])(evt);
-
- while (targetElm && targetElm !== this.contEl && targetElm !== this.btnEl) {
- targetElm = targetElm.parentNode;
- }
-
- if (targetElm !== this.contEl && targetElm !== this.btnEl) {
- this.toggle();
- }
-
- return;
- }
- /**
- * Toggle columns manager UI
- */
-
- }, {
- key: "toggle",
- value: function toggle() {
- // ensure mouseup event handler is removed
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["removeEvt"])(_root__WEBPACK_IMPORTED_MODULE_4__["root"], 'mouseup', this.boundMouseup);
- var contDisplay = this.contEl.style.display;
-
- if (contDisplay !== 'inline') {
- this.onBeforeOpen(this);
- }
-
- if (contDisplay === 'inline') {
- this.onBeforeClose(this);
- }
-
- this.contEl.style.display = contDisplay === 'inline' ? _const__WEBPACK_IMPORTED_MODULE_5__["NONE"] : 'inline';
-
- if (contDisplay !== 'inline') {
- this.onAfterOpen(this);
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(_root__WEBPACK_IMPORTED_MODULE_4__["root"], 'mouseup', this.boundMouseup);
- }
-
- if (contDisplay === 'inline') {
- this.onAfterClose(this);
- }
- }
- /**
- * Check an item in columns manager UI
- * @private
- */
-
- }, {
- key: "checkItem",
- value: function checkItem(lbl) {
- var li = lbl.parentNode;
-
- if (!li || !lbl) {
- return;
- }
-
- var isChecked = lbl.firstChild.checked;
- var colIndex = lbl.firstChild.getAttribute('id').split('_')[1];
- colIndex = parseInt(colIndex, 10);
-
- if (isChecked) {
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(li, this.listSlcItemCssClass);
- } else {
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeClass"])(li, this.listSlcItemCssClass);
- }
-
- var hide = false;
-
- if (this.tickToHide && isChecked || !this.tickToHide && !isChecked) {
- hide = true;
- }
-
- this.setHidden(colIndex, hide);
- }
- /**
- * Initializes ColsVisibility instance
- */
-
- }, {
- key: "init",
- value: function init() {
- var _this2 = this;
-
- if (this.initialized || !this.manager) {
- return;
- }
-
- this.emitter.emit('initializing-extension', this, !Object(_types__WEBPACK_IMPORTED_MODULE_2__["isNull"])(this.btnTgtId));
- this.emitter.on(['hide-column'], function (tf, colIndex) {
- return _this2.hideCol(colIndex);
- });
- this.buildBtn();
- this.buildManager();
- /** @inherited */
-
- this.initialized = true;
- this.boundMouseup = this.onMouseup.bind(this);
- this.emitter.emit('columns-visibility-initialized', this.tf, this);
- this.emitter.emit('extension-initialized', this); // Hide columns at start at very end of initialization, do not move
- // as order is important
-
- this._hideAtStart();
- }
- /**
- * Build main button UI
- */
-
- }, {
- key: "buildBtn",
- value: function buildBtn() {
- var _this3 = this;
-
- if (this.btnEl) {
- return;
- }
-
- var tf = this.tf;
- var span = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span');
- span.className = this.spanCssClass; // Container element (rdiv or custom element)
-
- var targetEl = !this.btnTgtId ? tf.feature('toolbar').container(this.toolbarPosition) : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.btnTgtId);
-
- if (!this.btnTgtId) {
- var firstChild = targetEl.firstChild;
- firstChild.parentNode.insertBefore(span, firstChild);
- } else {
- targetEl.appendChild(span);
- }
-
- if (!this.btnHtml) {
- var btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:;']);
- btn.className = this.btnCssClass;
- btn.title = this.desc;
- btn.innerHTML = this.btnText;
- span.appendChild(btn);
-
- if (!this.enableHover) {
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function (evt) {
- return _this3.toggle(evt);
- });
- } else {
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'mouseover', function (evt) {
- return _this3.toggle(evt);
- });
- }
- } else {
- // Custom html
- span.innerHTML = this.btnHtml;
- var colVisEl = span.firstChild;
-
- if (!this.enableHover) {
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(colVisEl, 'click', function (evt) {
- return _this3.toggle(evt);
- });
- } else {
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(colVisEl, 'mouseover', function (evt) {
- return _this3.toggle(evt);
- });
- }
- }
-
- this.spanEl = span;
- this.btnEl = this.spanEl.firstChild;
- this.onLoaded(this);
- }
- /**
- * Build columns manager UI
- */
-
- }, {
- key: "buildManager",
- value: function buildManager() {
- var _this4 = this;
-
- var tf = this.tf;
- var container = !this.contElTgtId ? Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('div') : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contElTgtId);
- container.className = this.contCssClass; //Extension description
-
- var extNameLabel = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('p');
- extNameLabel.innerHTML = this.text;
- container.appendChild(extNameLabel); //Headers list
-
- var ul = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('ul');
- ul.className = this.listCssClass;
- var tbl = this.headersTbl || tf.dom();
- var headerIndex = this.headersTbl ? this.headersIndex : tf.getHeadersRowIndex();
- var headerRow = tbl.rows[headerIndex]; //Tick all option
-
- if (this.enableTickAll) {
- var li = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createCheckItem"])('col__' + tf.id, this.tickAllText, this.tickAllText);
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(li, this.listItemCssClass);
- ul.appendChild(li);
- li.check.checked = !this.tickToHide;
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(li.check, 'click', function () {
- for (var h = 0; h < headerRow.cells.length; h++) {
- var itm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])('col_' + h + '_' + tf.id);
-
- if (itm && li.check.checked !== itm.checked) {
- itm.click();
- itm.checked = li.check.checked;
- }
- }
- });
- }
-
- for (var i = 0; i < headerRow.cells.length; i++) {
- var cell = headerRow.cells[i];
-
- var cellText = this.headersText[i] || this._getHeaderText(cell);
-
- var liElm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createCheckItem"])('col_' + i + '_' + tf.id, cellText, cellText);
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(liElm, this.listItemCssClass);
-
- if (!this.tickToHide) {
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(liElm, this.listSlcItemCssClass);
- }
-
- ul.appendChild(liElm);
-
- if (!this.tickToHide) {
- liElm.check.checked = true;
- }
-
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(liElm.check, 'click', function (evt) {
- var elm = Object(_event__WEBPACK_IMPORTED_MODULE_3__["targetEvt"])(evt);
- var lbl = elm.parentNode;
-
- _this4.checkItem(lbl);
- });
- } //separator
-
-
- var p = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('p', ['align', 'center']);
- var btn; //Close link
-
- if (!this.btnCloseHtml) {
- btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:;']);
- btn.className = this.btnCloseCssClass;
- btn.innerHTML = this.btnCloseText;
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function (evt) {
- return _this4.toggle(evt);
- });
- p.appendChild(btn);
- } else {
- p.innerHTML = this.btnCloseHtml;
- btn = p.firstChild;
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function (evt) {
- return _this4.toggle(evt);
- });
- }
-
- container.appendChild(ul);
- container.appendChild(p);
- this.btnEl.parentNode.insertBefore(container, this.btnEl);
- this.contEl = container;
- }
- /**
- * Hide or show specified columns
- * @param {Number} colIndex Column index
- * @param {Boolean} hide Hide column if true or show if false
- */
-
- }, {
- key: "setHidden",
- value: function setHidden(colIndex, hide) {
- var tf = this.tf;
- var tbl = tf.dom();
-
- if (hide) {
- this.onBeforeColHidden(this, colIndex);
- } else {
- this.onBeforeColDisplayed(this, colIndex);
- }
-
- this._hideElements(tbl, colIndex, hide);
-
- if (this.headersTbl) {
- this._hideElements(this.headersTbl, colIndex, hide);
- }
-
- var hiddenCols = this.hiddenCols;
- var itemIndex = hiddenCols.indexOf(colIndex);
-
- if (hide) {
- if (itemIndex === -1) {
- this.hiddenCols.push(colIndex);
- }
- } else {
- if (itemIndex !== -1) {
- this.hiddenCols.splice(itemIndex, 1);
- }
- }
-
- if (hide) {
- this.onAfterColHidden(this, colIndex);
- this.emitter.emit('column-hidden', tf, this, colIndex, this.hiddenCols);
- } else {
- this.onAfterColDisplayed(this, colIndex);
- this.emitter.emit('column-shown', tf, this, colIndex, this.hiddenCols);
- }
- }
- /**
- * Show specified column
- * @param {Number} colIndex Column index
- */
-
- }, {
- key: "showCol",
- value: function showCol(colIndex) {
- if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isUndef"])(colIndex) || !this.isColHidden(colIndex)) {
- return;
- }
-
- if (this.manager && this.contEl) {
- var itm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])('col_' + colIndex + '_' + this.tf.id);
-
- if (itm) {
- itm.click();
- }
- } else {
- this.setHidden(colIndex, false);
- }
- }
- /**
- * Hide specified column
- * @param {Number} colIndex Column index
- */
-
- }, {
- key: "hideCol",
- value: function hideCol(colIndex) {
- if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isUndef"])(colIndex) || this.isColHidden(colIndex)) {
- return;
- }
-
- if (this.manager && this.contEl) {
- var itm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])('col_' + colIndex + '_' + this.tf.id);
-
- if (itm) {
- itm.click();
- }
- } else {
- this.setHidden(colIndex, true);
- }
- }
- /**
- * Determine if specified column is hidden
- * @param {Number} colIndex Column index
- */
-
- }, {
- key: "isColHidden",
- value: function isColHidden(colIndex) {
- if (this.hiddenCols.indexOf(colIndex) !== -1) {
- return true;
- }
-
- return false;
- }
- /**
- * Toggle visibility of specified column
- * @param {Number} colIndex Column index
- */
-
- }, {
- key: "toggleCol",
- value: function toggleCol(colIndex) {
- if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isUndef"])(colIndex) || this.isColHidden(colIndex)) {
- this.showCol(colIndex);
- } else {
- this.hideCol(colIndex);
- }
- }
- /**
- * Return the indexes of the columns currently hidden
- * @return {Array} column indexes
- */
-
- }, {
- key: "getHiddenCols",
- value: function getHiddenCols() {
- return this.hiddenCols;
- }
- /**
- * Remove the columns manager
- */
-
- }, {
- key: "destroy",
- value: function destroy() {
- var _this5 = this;
-
- if (!this.initialized) {
- return;
- }
-
- if (Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contElTgtId)) {
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contElTgtId).innerHTML = '';
- } else {
- this.contEl.innerHTML = '';
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.contEl);
- this.contEl = null;
- }
-
- this.btnEl.innerHTML = '';
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.btnEl);
- this.btnEl = null;
- this.emitter.off(['hide-column'], function (tf, colIndex) {
- return _this5.hideCol(colIndex);
- });
- this.boundMouseup = null;
- this.initialized = false;
- }
- }, {
- key: "_getHeaderText",
- value: function _getHeaderText(cell) {
- if (!cell.hasChildNodes) {
- return '';
- }
-
- for (var i = 0; i < cell.childNodes.length; i++) {
- var n = cell.childNodes[i];
-
- if (n.nodeType === 3) {
- return n.nodeValue;
- } else if (n.nodeType === 1) {
- if (n.id && n.id.indexOf('popUp') !== -1) {
- continue;
- } else {
- return Object(_dom__WEBPACK_IMPORTED_MODULE_1__["getText"])(n);
- }
- }
-
- continue;
- }
-
- return '';
- }
- }, {
- key: "_hideElements",
- value: function _hideElements(tbl, colIdx, hide) {
- this._hideCells(tbl, colIdx, hide);
-
- this._hideCol(tbl, colIdx, hide);
- }
- }, {
- key: "_hideCells",
- value: function _hideCells(tbl, colIdx, hide) {
- for (var i = 0; i < tbl.rows.length; i++) {
- var row = tbl.rows[i];
- var cell = row.cells[colIdx];
-
- if (cell) {
- cell.style.display = hide ? _const__WEBPACK_IMPORTED_MODULE_5__["NONE"] : '';
- }
- }
- }
- }, {
- key: "_hideCol",
- value: function _hideCol(tbl, colIdx, hide) {
- var colElms = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(tbl, 'col');
-
- if (colElms.length === 0) {
- return;
- }
-
- colElms[colIdx].style.display = hide ? _const__WEBPACK_IMPORTED_MODULE_5__["NONE"] : '';
- }
- }, {
- key: "_hideAtStart",
- value: function _hideAtStart() {
- var _this6 = this;
-
- this.atStart.forEach(function (colIdx) {
- _this6.hideCol(colIdx);
- });
- }
- }]);
-
- return ColsVisibility;
-}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]);
-
-
-
-/***/ }),
-
-/***/ "./src/extensions/filtersVisibility/filtersVisibility.js":
-/*!***************************************************************!*\
- !*** ./src/extensions/filtersVisibility/filtersVisibility.js ***!
- \***************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return FiltersVisibility; });
-/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js");
-/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js");
-/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types */ "./src/types.js");
-/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../event */ "./src/event.js");
-/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../settings */ "./src/settings.js");
-/* harmony import */ var _modules_toolbar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../modules/toolbar */ "./src/modules/toolbar.js");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
-
-function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
-
-function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-
-
-
-
-
-
-/**
- * Filters Visibility extension
- */
-
-var FiltersVisibility =
-/*#__PURE__*/
-function (_Feature) {
- _inherits(FiltersVisibility, _Feature);
-
- /**
- * Creates an instance of FiltersVisibility
- * @param {TableFilter} tf TableFilter instance
- * @param {Object} Configuration object
- */
- function FiltersVisibility(tf, f) {
- var _this;
-
- _classCallCheck(this, FiltersVisibility);
-
- _this = _possibleConstructorReturn(this, _getPrototypeOf(FiltersVisibility).call(this, tf, f.name));
- /**
- * Module name
- * @type {String}
- */
-
- _this.name = f.name;
- /**
- * Module description
- * @type {String}
- */
-
- _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.description, 'Filters row visibility manager');
- /**
- * Extension's stylesheet filename
- * @type {String}
- */
-
- _this.stylesheet = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.stylesheet, 'filtersVisibility.css');
- /**
- * Expand icon filename
- * @type {String}
- */
-
- _this.icnExpand = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.expand_icon_name, 'icn_exp.png');
- /**
- * Collapse icon filename
- * @type {String}
- */
-
- _this.icnCollapse = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.collapse_icon_name, 'icn_clp.png');
- /**
- * Main container element
- * @private
- */
-
- _this.contEl = null;
- /**
- * Button element
- * @private
- */
-
- _this.btnEl = null;
- /**
- * Expand icon HTML
- * @private
- */
-
- _this.icnExpandHtml = '';
- /**
- * Collapse icon HTML
- * @private
- */
-
- _this.icnCollapseHtml = '';
- /**
- * Default text
- * @private
- */
-
- _this.defaultText = 'Toggle filters';
- /**
- * ID of main container element
- * @type {String}
- */
-
- _this.targetId = f.target_id || null;
- /**
- * Enable expand/collapse icon, defaults to true
- * @type {Boolean}
- */
-
- _this.enableIcon = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsBool"])(f.enable_icon, true);
- /**
- * Custom text for button
- * @type {String}
- */
-
- _this.btnText = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.btn_text, '');
- /**
- * Collapse button HTML
- * @private
- */
-
- _this.collapseBtnHtml = _this.enableIcon ? _this.icnCollapseHtml + _this.btnText : _this.btnText || _this.defaultText;
- /**
- * Expand button HTML
- * @private
- */
-
- _this.expandBtnHtml = _this.enableIcon ? _this.icnExpandHtml + _this.btnText : _this.btnText || _this.defaultText;
- /**
- * Button's custom HTML
- * @type {String}
- */
-
- _this.btnHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.btn_html, null);
- /**
- * Css class for expand/collapse filters button
- * @type {String}
- */
-
- _this.btnCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.btn_css_class, 'btnExpClpFlt');
- /**
- * Css class for main container
- * @type {String}
- */
-
- _this.contCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.cont_css_class, 'expClpFlt');
- /**
- * Filters row index
- * @type {Number}
- */
-
- _this.filtersRowIndex = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsNb"])(f.filters_row_index, tf.getFiltersRowIndex());
- /**
- * Make filters visible at initialization, defaults to true
- * @type {Boolean}
- */
-
- _this.visibleAtStart = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsNb"])(f.visible_at_start, true);
- /**
- * Default position in toolbar ('left'|'center'|'right')
- * @type {String}
- */
-
- _this.toolbarPosition = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.toolbar_position, _modules_toolbar__WEBPACK_IMPORTED_MODULE_5__["RIGHT"]);
- /**
- * Callback fired before filters row is shown
- * @type {Function}
- */
-
- _this.onBeforeShow = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_before_show, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after filters row is shown
- * @type {Function}
- */
-
- _this.onAfterShow = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_after_show, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired before filters row is hidden
- * @type {Function}
- */
-
- _this.onBeforeHide = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_before_hide, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after filters row is hidden
- * @type {Function}
- */
-
- _this.onAfterHide = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_after_hide, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); //Import extension's stylesheet
-
- tf.import(f.name + 'Style', tf.getStylePath() + _this.stylesheet, null, 'link');
-
- _this.enable();
-
- return _this;
- }
- /**
- * Initialise extension
- */
-
-
- _createClass(FiltersVisibility, [{
- key: "init",
- value: function init() {
- var _this2 = this;
-
- if (this.initialized) {
- return;
- }
-
- this.emitter.emit('initializing-extension', this, !Object(_types__WEBPACK_IMPORTED_MODULE_2__["isNull"])(this.targetId));
- this.buildUI();
- /** @inherited */
-
- this.initialized = true;
- this.emitter.on(['show-filters'], function (tf, visible) {
- return _this2.show(visible);
- });
- this.emitter.emit('filters-visibility-initialized', this.tf, this);
- this.emitter.emit('extension-initialized', this);
- }
- /**
- * Build UI elements
- */
-
- }, {
- key: "buildUI",
- value: function buildUI() {
- var _this3 = this;
-
- var tf = this.tf;
- var span = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span');
- span.className = this.contCssClass; // Container element (rdiv or custom element)
-
- var targetEl = !this.targetId ? tf.feature('toolbar').container(this.toolbarPosition) : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.targetId);
-
- if (!this.targetId) {
- var firstChild = targetEl.firstChild;
- firstChild.parentNode.insertBefore(span, firstChild);
- } else {
- targetEl.appendChild(span);
- }
-
- var btn;
-
- if (!this.btnHtml) {
- btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:void(0);']);
- btn.className = this.btnCssClass;
- btn.title = this.btnText || this.defaultText;
- btn.innerHTML = this.collapseBtnHtml;
- span.appendChild(btn);
- } else {
- // Custom html
- span.innerHTML = this.btnHtml;
- btn = span.firstChild;
- }
-
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function () {
- return _this3.toggle();
- });
- this.contEl = span;
- this.btnEl = btn;
-
- if (!this.visibleAtStart) {
- this.toggle();
- }
- }
- /**
- * Toggle filters visibility
- */
-
- }, {
- key: "toggle",
- value: function toggle() {
- var tf = this.tf;
- var tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();
- var fltRow = tbl.rows[this.filtersRowIndex];
- var isDisplayed = fltRow.style.display === '';
- this.show(!isDisplayed);
- }
- /**
- * Show or hide filters
- *
- * @param {boolean} [visible=true] Visibility flag
- */
-
- }, {
- key: "show",
- value: function show() {
- var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
- var tf = this.tf;
- var tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();
- var fltRow = tbl.rows[this.filtersRowIndex];
-
- if (visible) {
- this.onBeforeShow(this);
- }
-
- if (!visible) {
- this.onBeforeHide(this);
- }
-
- fltRow.style.display = visible ? '' : 'none';
-
- if (this.enableIcon && !this.btnHtml) {
- this.btnEl.innerHTML = visible ? this.collapseBtnHtml : this.expandBtnHtml;
- }
-
- if (visible) {
- this.onAfterShow(this);
- }
-
- if (!visible) {
- this.onAfterHide(this);
- }
-
- this.emitter.emit('filters-toggled', tf, this, visible);
- }
- /**
- * Destroy the UI
- */
-
- }, {
- key: "destroy",
- value: function destroy() {
- var _this4 = this;
-
- if (!this.initialized) {
- return;
- }
-
- this.emitter.off(['show-filters'], function (tf, visible) {
- return _this4.show(visible);
- });
- this.btnEl.innerHTML = '';
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.btnEl);
- this.btnEl = null;
- this.contEl.innerHTML = '';
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.contEl);
- this.contEl = null;
- this.initialized = false;
- }
- }]);
-
- return FiltersVisibility;
-}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]);
-
-
-
-/***/ }),
-
-/***/ "./src/extensions/sort/adapterSortabletable.js":
-/*!*****************************************************!*\
- !*** ./src/extensions/sort/adapterSortabletable.js ***!
- \*****************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AdapterSortableTable; });
-/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js");
-/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../types */ "./src/types.js");
-/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../dom */ "./src/dom.js");
-/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../event */ "./src/event.js");
-/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../number */ "./src/number.js");
-/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../const */ "./src/const.js");
-/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../settings */ "./src/settings.js");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
-
-function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
-
-function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-
-
-
-
-
-
-
-/**
- * SortableTable Adapter module
- */
-
-var AdapterSortableTable =
-/*#__PURE__*/
-function (_Feature) {
- _inherits(AdapterSortableTable, _Feature);
-
- /**
- * Creates an instance of AdapterSortableTable
- * @param {TableFilter} tf TableFilter instance
- * @param {Object} opts Configuration object
- */
- function AdapterSortableTable(tf, opts) {
- var _this;
-
- _classCallCheck(this, AdapterSortableTable);
-
- _this = _possibleConstructorReturn(this, _getPrototypeOf(AdapterSortableTable).call(this, tf, opts.name));
- /**
- * Module name
- * @type {String}
- */
-
- _this.name = opts.name;
- /**
- * Module description
- * @type {String}
- */
-
- _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.description, 'Sortable table');
- /**
- * Indicate whether table previously sorted
- * @type {Boolean}
- * @private
- */
-
- _this.sorted = false;
- /**
- * List of sort type per column basis
- * @type {Array}
- */
-
- _this.sortTypes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.types, tf.colTypes);
- /**
- * Column to be sorted at initialization, ie:
- * sort_col_at_start: [1, true]
- * @type {Array}
- */
-
- _this.sortColAtStart = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.sort_col_at_start, null);
- /**
- * Enable asynchronous sort, if triggers are external
- * @type {Boolean}
- */
-
- _this.asyncSort = Boolean(opts.async_sort);
- /**
- * List of element IDs triggering sort on a per column basis
- * @type {Array}
- */
-
- _this.triggerIds = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.trigger_ids, []); // edit .sort-arrow.descending / .sort-arrow.ascending in
- // tablefilter.css to reflect any path change
-
- /**
- * Path to images
- * @type {String}
- */
-
- _this.imgPath = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.images_path, tf.themesPath);
- /**
- * Blank image file name
- * @type {String}
- */
-
- _this.imgBlank = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_blank, 'blank.png');
- /**
- * Css class for sort indicator image
- * @type {String}
- */
-
- _this.imgClassName = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_class_name, 'sort-arrow');
- /**
- * Css class for ascending sort indicator image
- * @type {String}
- */
-
- _this.imgAscClassName = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_asc_class_name, 'ascending');
- /**
- * Css class for descending sort indicator image
- * @type {String}
- */
-
- _this.imgDescClassName = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_desc_class_name, 'descending');
- /**
- * Cell attribute key storing custom value used for sorting
- * @type {String}
- */
-
- _this.customKey = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.custom_key, 'data-tf-sortKey');
- /**
- * Callback fired when sort extension is instanciated
- * @type {Function}
- */
-
- _this.onSortLoaded = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_sort_loaded, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]);
- /**
- * Callback fired before a table column is sorted
- * @type {Function}
- */
-
- _this.onBeforeSort = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_before_sort, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]);
- /**
- * Callback fired after a table column is sorted
- * @type {Function}
- */
-
- _this.onAfterSort = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_after_sort, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]);
- /**
- * SortableTable instance
- * @private
- */
-
- _this.stt = null;
-
- _this.enable();
-
- return _this;
- }
- /**
- * Initializes AdapterSortableTable instance
- */
-
-
- _createClass(AdapterSortableTable, [{
- key: "init",
- value: function init() {
- if (this.initialized) {
- return;
- }
-
- var tf = this.tf;
- var adpt = this; // SortableTable class sanity check (sortabletable.js)
-
- if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isUndef"])(SortableTable)) {
- throw new Error('SortableTable class not found.');
- } // Add any date format if needed
-
-
- this.emitter.emit('add-date-type-formats', this.tf, this.sortTypes);
- this.overrideSortableTable();
- this.setSortTypes();
- this.onSortLoaded(tf, this);
- /*** SortableTable callbacks ***/
-
- this.stt.onbeforesort = function () {
- adpt.onBeforeSort(tf, adpt.stt.sortColumn);
- /*** sort behaviour for paging ***/
-
- if (tf.paging) {
- tf.feature('paging').disable();
- }
- };
-
- this.stt.onsort = function () {
- adpt.sorted = true; //sort behaviour for paging
-
- if (tf.paging) {
- var paginator = tf.feature('paging'); // recalculate valid rows index as sorting may have change it
-
- tf.getValidRows(true);
- paginator.enable();
- paginator.setPage(paginator.getPage());
- }
-
- adpt.onAfterSort(tf, adpt.stt.sortColumn, adpt.stt.descending);
- adpt.emitter.emit('column-sorted', tf, adpt.stt.sortColumn, adpt.stt.descending);
- }; // Column sort at start
-
-
- var sortColAtStart = adpt.sortColAtStart;
-
- if (sortColAtStart) {
- this.stt.sort(sortColAtStart[0], sortColAtStart[1]);
- }
-
- this.emitter.on(['sort'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.sortByColumnIndexHandler, this));
- /** @inherited */
-
- this.initialized = true;
- this.emitter.emit('sort-initialized', tf, this);
- }
- /**
- * Sort specified column
- * @param {Number} colIdx Column index
- * @param {Boolean} desc Optional: descending manner
- */
-
- }, {
- key: "sortByColumnIndex",
- value: function sortByColumnIndex(colIdx, desc) {
- this.stt.sort(colIdx, desc);
- }
- /** @private */
-
- }, {
- key: "sortByColumnIndexHandler",
- value: function sortByColumnIndexHandler(tf, colIdx, desc) {
- this.sortByColumnIndex(colIdx, desc);
- }
- /**
- * Set SortableTable overrides for TableFilter integration
- */
-
- }, {
- key: "overrideSortableTable",
- value: function overrideSortableTable() {
- var adpt = this,
- tf = this.tf;
- /**
- * Overrides headerOnclick method in order to handle th event
- * @param {Object} e [description]
- */
-
- SortableTable.prototype.headerOnclick = function (evt) {
- if (!adpt.initialized) {
- return;
- } // find Header element
-
-
- var el = evt.target || evt.srcElement;
-
- while (el.tagName !== _const__WEBPACK_IMPORTED_MODULE_5__["CELL_TAG"] && el.tagName !== _const__WEBPACK_IMPORTED_MODULE_5__["HEADER_TAG"]) {
- el = el.parentNode;
- }
-
- this.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);
- };
- /**
- * Overrides getCellIndex IE returns wrong cellIndex when columns are
- * hidden
- * @param {Object} oTd TD element
- * @return {Number} Cell index
- */
-
-
- SortableTable.getCellIndex = function (oTd) {
- var cells = oTd.parentNode.cells,
- l = cells.length,
- i;
-
- for (i = 0; cells[i] !== oTd && i < l; i++) {}
-
- return i;
- };
- /**
- * Overrides initHeader in order to handle filters row position
- * @param {Array} oSortTypes
- */
-
-
- SortableTable.prototype.initHeader = function (oSortTypes) {
- var stt = this;
-
- if (!stt.tHead) {
- if (tf.gridLayout) {
- stt.tHead = tf.feature('gridLayout').headTbl.tHead;
- } else {
- return;
- }
- }
-
- stt.headersRow = tf.headersRow;
- var cells = stt.tHead.rows[stt.headersRow].cells;
- stt.sortTypes = oSortTypes || [];
- var l = cells.length;
- var img, c;
-
- for (var i = 0; i < l; i++) {
- c = cells[i];
-
- if (stt.sortTypes[i] !== null && stt.sortTypes[i] !== 'None') {
- c.style.cursor = 'pointer';
- img = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createElm"])('img', ['src', adpt.imgPath + adpt.imgBlank]);
- c.appendChild(img);
-
- if (stt.sortTypes[i] !== null) {
- c.setAttribute('_sortType', stt.sortTypes[i]);
- }
-
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(c, 'click', stt._headerOnclick);
- } else {
- c.setAttribute('_sortType', oSortTypes[i]);
- c._sortType = 'None';
- }
- }
-
- stt.updateHeaderArrows();
- };
- /**
- * Overrides updateHeaderArrows in order to handle arrows indicators
- */
-
-
- SortableTable.prototype.updateHeaderArrows = function () {
- var stt = this;
- var cells, l, img; // external headers
-
- if (adpt.asyncSort && adpt.triggerIds.length > 0) {
- var triggers = adpt.triggerIds;
- cells = [];
- l = triggers.length;
-
- for (var j = 0; j < l; j++) {
- cells.push(Object(_dom__WEBPACK_IMPORTED_MODULE_2__["elm"])(triggers[j]));
- }
- } else {
- if (!this.tHead) {
- return;
- }
-
- cells = stt.tHead.rows[stt.headersRow].cells;
- l = cells.length;
- }
-
- for (var i = 0; i < l; i++) {
- var cell = cells[i];
-
- if (!cell) {
- continue;
- }
-
- var cellAttr = cell.getAttribute('_sortType');
-
- if (cellAttr !== null && cellAttr !== 'None') {
- img = cell.lastChild || cell;
-
- if (img.nodeName.toLowerCase() !== 'img') {
- img = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createElm"])('img', ['src', adpt.imgPath + adpt.imgBlank]);
- cell.appendChild(img);
- }
-
- if (i === stt.sortColumn) {
- img.className = adpt.imgClassName + ' ' + (this.descending ? adpt.imgDescClassName : adpt.imgAscClassName);
- } else {
- img.className = adpt.imgClassName;
- }
- }
- }
- };
- /**
- * Overrides getRowValue for custom key value feature
- * @param {Object} oRow Row element
- * @param {String} sType
- * @param {Number} nColumn
- * @return {String}
- */
-
-
- SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {
- var stt = this; // if we have defined a custom getRowValue use that
-
- var sortTypeInfo = stt._sortTypeInfo[sType];
-
- if (sortTypeInfo && sortTypeInfo.getRowValue) {
- return sortTypeInfo.getRowValue(oRow, nColumn);
- }
-
- var c = oRow.cells[nColumn];
- var s = SortableTable.getInnerText(c);
- return stt.getValueFromString(s, sType);
- };
- /**
- * Overrides getInnerText in order to avoid Firefox unexpected sorting
- * behaviour with untrimmed text elements
- * @param {Object} cell DOM element
- * @return {String} DOM element inner text
- */
-
-
- SortableTable.getInnerText = function (cell) {
- if (!cell) {
- return;
- }
-
- if (cell.getAttribute(adpt.customKey)) {
- return cell.getAttribute(adpt.customKey);
- } else {
- return tf.getCellValue(cell);
- }
- };
- }
- /**
- * Adds a sort type
- */
-
- }, {
- key: "addSortType",
- value: function addSortType() {
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
- args[_key] = arguments[_key];
- }
-
- // Extract the arguments
- var id = args[0],
- caster = args[1],
- sorter = args[2],
- getRowValue = args[3];
- SortableTable.prototype.addSortType(id, caster, sorter, getRowValue);
- }
- /**
- * Sets the sort types on a column basis
- * @private
- */
-
- }, {
- key: "setSortTypes",
- value: function setSortTypes() {
- var _this2 = this;
-
- var tf = this.tf,
- sortTypes = this.sortTypes,
- _sortTypes = [];
- tf.eachCol(function (i) {
- var colType;
-
- if (sortTypes[i]) {
- colType = sortTypes[i];
-
- if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isObj"])(colType)) {
- if (colType.type === _const__WEBPACK_IMPORTED_MODULE_5__["DATE"]) {
- colType = _this2._addDateType(i, sortTypes);
- } else if (colType.type === _const__WEBPACK_IMPORTED_MODULE_5__["FORMATTED_NUMBER"]) {
- var decimal = colType.decimal || tf.decimalSeparator;
- colType = _this2._addNumberType(i, decimal);
- }
- } else {
- colType = colType.toLowerCase();
-
- if (colType === _const__WEBPACK_IMPORTED_MODULE_5__["DATE"]) {
- colType = _this2._addDateType(i, sortTypes);
- } else if (colType === _const__WEBPACK_IMPORTED_MODULE_5__["FORMATTED_NUMBER"] || colType === _const__WEBPACK_IMPORTED_MODULE_5__["NUMBER"]) {
- colType = _this2._addNumberType(i, tf.decimalSeparator);
- } else if (colType === _const__WEBPACK_IMPORTED_MODULE_5__["NONE"]) {
- // TODO: normalise 'none' vs 'None'
- colType = 'None';
- }
- }
- } else {
- colType = _const__WEBPACK_IMPORTED_MODULE_5__["STRING"];
- }
-
- _sortTypes.push(colType);
- }); //Public TF method to add sort type
- //Custom sort types
-
- this.addSortType('caseinsensitivestring', SortableTable.toUpperCase);
- this.addSortType(_const__WEBPACK_IMPORTED_MODULE_5__["STRING"]);
- this.addSortType(_const__WEBPACK_IMPORTED_MODULE_5__["IP_ADDRESS"], ipAddress, sortIP);
- this.stt = new SortableTable(tf.dom(), _sortTypes);
- /*** external table headers adapter ***/
-
- if (this.asyncSort && this.triggerIds.length > 0) {
- (function () {
- var triggers = _this2.triggerIds;
-
- for (var j = 0; j < triggers.length; j++) {
- if (triggers[j] === null) {
- continue;
- }
-
- var trigger = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["elm"])(triggers[j]);
-
- if (trigger) {
- trigger.style.cursor = 'pointer';
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(trigger, 'click', function (evt) {
- var elm = evt.target;
-
- if (!_this2.tf.sort) {
- return;
- }
-
- _this2.stt.asyncSort(triggers.indexOf(elm.id));
- });
- trigger.setAttribute('_sortType', _sortTypes[j]);
- }
- }
- })();
- }
- }
- }, {
- key: "_addDateType",
- value: function _addDateType(colIndex, types) {
- var tf = this.tf;
- var dateType = tf.feature('dateType');
- var locale = dateType.getOptions(colIndex, types).locale || tf.locale;
- var colType = "".concat(_const__WEBPACK_IMPORTED_MODULE_5__["DATE"], "-").concat(locale);
- this.addSortType(colType, function (value) {
- var parsedDate = dateType.parse(value, locale); // Invalid date defaults to Wed Feb 04 -768 11:00:00
-
- return isNaN(+parsedDate) ? new Date(-86400000000000) : parsedDate;
- });
- return colType;
- }
- }, {
- key: "_addNumberType",
- value: function _addNumberType(colIndex, decimal) {
- var colType = "".concat(_const__WEBPACK_IMPORTED_MODULE_5__["FORMATTED_NUMBER"]).concat(decimal === '.' ? '' : '-custom');
- this.addSortType(colType, function (value) {
- return Object(_number__WEBPACK_IMPORTED_MODULE_4__["parse"])(value, decimal);
- });
- return colType;
- }
- /**
- * Remove extension
- */
-
- }, {
- key: "destroy",
- value: function destroy() {
- if (!this.initialized) {
- return;
- }
-
- var tf = this.tf;
- this.emitter.off(['sort'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.sortByColumnIndexHandler, this));
- this.sorted = false;
- this.stt.destroy();
- var ids = tf.getFiltersId();
-
- for (var idx = 0; idx < ids.length; idx++) {
- var header = tf.getHeaderElement(idx);
- var img = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["tag"])(header, 'img');
-
- if (img.length === 1) {
- header.removeChild(img[0]);
- }
- }
-
- this.initialized = false;
- }
- }]);
-
- return AdapterSortableTable;
-}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); //Converters
-
-
-
-
-function ipAddress(value) {
- var vals = value.split('.');
-
- for (var x in vals) {
- var val = vals[x];
-
- while (3 > val.length) {
- val = '0' + val;
- }
-
- vals[x] = val;
- }
-
- return vals.join('.');
-}
-
-function sortIP(a, b) {
- var aa = ipAddress(a.value.toLowerCase());
- var bb = ipAddress(b.value.toLowerCase());
-
- if (aa === bb) {
- return 0;
- } else if (aa < bb) {
- return -1;
- } else {
- return 1;
- }
-}
-
-/***/ }),
-
-/***/ "./src/extensions/sort/sort.js":
-/*!*************************************!*\
- !*** ./src/extensions/sort/sort.js ***!
- \*************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _adapterSortabletable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adapterSortabletable */ "./src/extensions/sort/adapterSortabletable.js");
-/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../root */ "./src/root.js");
-
-
-
-if (!_root__WEBPACK_IMPORTED_MODULE_1__["root"].SortableTable) {
- __webpack_require__(/*! script-loader!sortabletable */ "./node_modules/script-loader/index.js!./libs/sortabletable.js");
-}
-
-/* harmony default export */ __webpack_exports__["default"] = (_adapterSortabletable__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ })
-
-}]);
-//# sourceMappingURL=tf-0-8ba4e8f28dcb16cfc50b.js.map
\ No newline at end of file
diff --git a/dist/tablefilter/tf-0-8ba4e8f28dcb16cfc50b.js.map b/dist/tablefilter/tf-0-8ba4e8f28dcb16cfc50b.js.map
deleted file mode 100644
index 147d561c..00000000
--- a/dist/tablefilter/tf-0-8ba4e8f28dcb16cfc50b.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./node_modules/format-number/index.js","webpack:///./libs/sortabletable.js","webpack:///./node_modules/script-loader/addScript.js","webpack:///./libs/sortabletable.js?8203","webpack:///./src sync ^\\.\\/.*$","webpack:///./src/extensions/advancedGrid/adapterEzEditTable.js","webpack:///./src/extensions/advancedGrid/advancedGrid.js","webpack:///./src/extensions/colOps/colOps.js","webpack:///./src/extensions/colsVisibility/colsVisibility.js","webpack:///./src/extensions/filtersVisibility/filtersVisibility.js","webpack:///./src/extensions/sort/adapterSortabletable.js","webpack:///./src/extensions/sort/sort.js"],"names":["INSTANTIATION_ERROR","AdapterEzEditTable","tf","cfg","name","desc","description","filename","vendorPath","vendor_path","loadStylesheet","Boolean","load_stylesheet","stylesheet","stylesheetName","stylesheet_name","scroll_into_view","gridLayout","_ezEditTable","enable","initialized","EditTable","_setAdvancedGrid","path","import","isImported","emitter","on","_toggleForInputFilter","startRow","thead","dom","length","undefined","refRow","base_path","basePath","editable","selectable","selection","default_selection","active_cell_css","_lastValidRowIndex","_lastRowIndex","onAfterSelection","et","selectedElm","e","slc","Selection","doSelect","nextRowIndex","defaultSelection","SelectRowByIndex","ClearSelections","cellIndex","row","rows","SelectCell","cells","validRowsIndex","getRowsNb","r","scrollIntoView","cell","getCellsNb","tblCont","scrollLeft","validIndexes","validIdxLen","parentNode","nodeName","keyCode","Event","GetKey","isRowValid","indexOf","rowIndex","paging","feature","d","pageLength","nbRowsPerPage","calcRowIndex","v","onBeforeSelection","nbPages","pagingEndRow","parseInt","startPagingRow","currentPageNb","setPage","onAfterChangePage","advGrid","extension","GetActiveRow","GetActiveCell","fnB","on_before_selected_row","args","arguments","call","fnA","on_after_selected_row","fnD","on_before_selected_cell","fnC","on_after_selected_cell","fnE","on_added_dom_row","nbFilterableRows","emit","destroy","reset","alternateRows","init","actions","fnF","on_after_submit","id","Init","Error","ezEditTable","Set","Editable","Remove","getActiveFilterId","colIndex","getColumnIndexFromFilterId","filterType","getFilterType","toggle","off","EVENTS","SUM","MEAN","MIN","MAX","MEDIAN","Q1","Q3","ColOps","opts","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","val","push","nbCols","colValues","u","getVisibleColumnData","curValues","result","precisions","labels","writeType","formatResult","idx","k","toLowerCase","configureFormat","i","Number","calc","writeResult","totRow","style","display","precision","sortColumnValues","calcMean","calcSum","calcMin","calcMax","calcMedian","calcQ1","calcQ3","toFixed","values","reduce","x","y","Math","max","apply","min","nbValues","aux","floor","posa","posb","sorter","sort","label","format","labelElm","isNaN","isFinite","innerHTML","value","oldNode","firstChild","txtNode","replaceChild","hasType","colType","colTypes","decimal","thousands","integerSeparator","ColsVisibility","f","config","spanEl","btnEl","contEl","tickToHide","tick_to_hide","manager","headersTbl","headers_table","headersIndex","headers_index","contElTgtId","container_target_id","headersText","headers_text","btnTgtId","btn_target_id","btnText","btn_text","btnHtml","btn_html","btnCssClass","btn_css_class","btnCloseText","btn_close_text","btnCloseHtml","btn_close_html","btnCloseCssClass","btn_close_css_class","spanCssClass","span_css_class","contCssClass","cont_css_class","listCssClass","list_css_class","listItemCssClass","checklist_item_css_class","listSlcItemCssClass","checklist_selected_item_css_class","text","atStart","at_start","enableHover","enable_hover","enableTickAll","enable_tick_all","tickAllText","tick_all_text","toolbarPosition","toolbar_position","hiddenCols","boundMouseup","onLoaded","on_loaded","onBeforeOpen","on_before_open","onAfterOpen","on_after_open","onBeforeClose","on_before_close","onAfterClose","on_after_close","onBeforeColHidden","on_before_col_hidden","onAfterColHidden","on_after_col_hidden","onBeforeColDisplayed","on_before_col_displayed","onAfterColDisplayed","on_after_col_displayed","headTbl","getStylePath","evt","targetElm","removeEvt","contDisplay","addEvt","lbl","li","isChecked","checked","getAttribute","split","addClass","removeClass","hide","setHidden","hideCol","buildBtn","buildManager","onMouseup","bind","_hideAtStart","span","className","targetEl","container","insertBefore","appendChild","btn","title","colVisEl","extNameLabel","ul","tbl","headerIndex","getHeadersRowIndex","headerRow","check","h","itm","click","cellText","_getHeaderText","liElm","elm","checkItem","p","_hideElements","itemIndex","splice","isColHidden","showCol","removeElm","hasChildNodes","childNodes","n","nodeType","nodeValue","colIdx","_hideCells","_hideCol","colElms","FiltersVisibility","icnExpand","expand_icon_name","icnCollapse","collapse_icon_name","icnExpandHtml","themesPath","icnCollapseHtml","defaultText","targetId","target_id","enableIcon","enable_icon","collapseBtnHtml","expandBtnHtml","filtersRowIndex","filters_row_index","getFiltersRowIndex","visibleAtStart","visible_at_start","onBeforeShow","on_before_show","onAfterShow","on_after_show","onBeforeHide","on_before_hide","onAfterHide","on_after_hide","buildUI","visible","show","fltRow","isDisplayed","AdapterSortableTable","sorted","sortTypes","types","sortColAtStart","sort_col_at_start","asyncSort","async_sort","triggerIds","trigger_ids","imgPath","images_path","imgBlank","image_blank","imgClassName","image_class_name","imgAscClassName","image_asc_class_name","imgDescClassName","image_desc_class_name","customKey","custom_key","onSortLoaded","on_sort_loaded","onBeforeSort","on_before_sort","onAfterSort","on_after_sort","stt","adpt","SortableTable","overrideSortableTable","setSortTypes","onbeforesort","sortColumn","disable","onsort","paginator","getValidRows","getPage","descending","sortByColumnIndexHandler","sortByColumnIndex","prototype","headerOnclick","el","target","srcElement","tagName","msie","getCellIndex","oTd","l","initHeader","oSortTypes","tHead","headersRow","img","c","cursor","setAttribute","_headerOnclick","_sortType","updateHeaderArrows","triggers","j","cellAttr","lastChild","getRowValue","oRow","sType","nColumn","sortTypeInfo","_sortTypeInfo","s","getInnerText","getValueFromString","getCellValue","caster","addSortType","_sortTypes","eachCol","type","_addDateType","decimalSeparator","_addNumberType","toUpperCase","ipAddress","sortIP","trigger","dateType","locale","getOptions","parsedDate","parse","Date","ids","getFiltersId","header","getHeaderElement","removeChild","vals","join","a","b","aa","bb","require"],"mappings":";;;;;;;;;;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2BAA2B;AAC3B,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAsD,4BAA4B,EAAE;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8BAA8B;AACnD;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,EAAE;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAC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","file":"tf-0-8ba4e8f28dcb16cfc50b.js","sourcesContent":["\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","module.exports = \"/*----------------------------------------------------------------------------\\\\\\r\\n| Sortable Table 1.12 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created by Erik Arvidsson |\\r\\n| (http://webfx.eae.net/contact.html#erik) |\\r\\n| For WebFX (http://webfx.eae.net/) |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| A DOM 1 based script that allows an ordinary HTML table to be sortable. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Copyright (c) 1998 - 2006 Erik Arvidsson |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not |\\r\\n| use this file except in compliance with the License. You may obtain a copy |\\r\\n| of the License at http://www.apache.org/licenses/LICENSE-2.0 |\\r\\n| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\\r\\n| Unless required by applicable law or agreed to in writing, software |\\r\\n| distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT |\\r\\n| WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |\\r\\n| License for the specific language governing permissions and limitations |\\r\\n| under the License. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| 2003-01-10 | First version |\\r\\n| 2003-01-19 | Minor changes to the date parsing |\\r\\n| 2003-01-28 | JScript 5.0 fixes (no support for 'in' operator) |\\r\\n| 2003-02-01 | Sloppy typo like error fixed in getInnerText |\\r\\n| 2003-07-04 | Added workaround for IE cellIndex bug. |\\r\\n| 2003-11-09 | The bDescending argument to sort was not correctly working |\\r\\n| | Using onclick DOM0 event if no support for addEventListener |\\r\\n| | or attachEvent |\\r\\n| 2004-01-13 | Adding addSortType and removeSortType which makes it a lot |\\r\\n| | easier to add new, custom sort types. |\\r\\n| 2004-01-27 | Switch to use descending = false as the default sort order. |\\r\\n| | Change defaultDescending to suit your needs. |\\r\\n| 2004-03-14 | Improved sort type None look and feel a bit |\\r\\n| 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you |\\r\\n| | can use another tHead or no tHead, and you can chose some |\\r\\n| | other tBody. |\\r\\n| 2006-04-25 | Changed license to Apache Software License 2.0 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created 2003-01-10 | All changes are in the log above. | Updated 2006-04-25 |\\r\\n\\\\----------------------------------------------------------------------------*/\\r\\n\\r\\n\\r\\nfunction SortableTable(oTable, oSortTypes) {\\r\\n\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\r\\n\\tthis.sortColumn = null;\\r\\n\\tthis.descending = null;\\r\\n\\r\\n\\tvar oThis = this;\\r\\n\\tthis._headerOnclick = function (e) {\\r\\n\\t\\toThis.headerOnclick(e);\\r\\n\\t};\\r\\n\\r\\n\\tif (oTable) {\\r\\n\\t\\tthis.setTable( oTable );\\r\\n\\t\\tthis.document = oTable.ownerDocument || oTable.document;\\r\\n\\t}\\r\\n\\telse {\\r\\n\\t\\tthis.document = document;\\r\\n\\t}\\r\\n\\r\\n\\r\\n\\t// only IE needs this\\r\\n\\tvar win = this.document.defaultView || this.document.parentWindow;\\r\\n\\tthis._onunload = function () {\\r\\n\\t\\toThis.destroy();\\r\\n\\t};\\r\\n\\tif (win && typeof win.attachEvent != \\\"undefined\\\") {\\r\\n\\t\\twin.attachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n}\\r\\n\\r\\nSortableTable.gecko = navigator.product == \\\"Gecko\\\";\\r\\nSortableTable.msie = /msie/i.test(navigator.userAgent);\\r\\n// Mozilla is faster when doing the DOM manipulations on\\r\\n// an orphaned element. MSIE is not\\r\\nSortableTable.removeBeforeSort = SortableTable.gecko;\\r\\n\\r\\nSortableTable.prototype.onsort = function () {};\\r\\n\\r\\n// default sort order. true -> descending, false -> ascending\\r\\nSortableTable.prototype.defaultDescending = false;\\r\\n\\r\\n// shared between all instances. This is intentional to allow external files\\r\\n// to modify the prototype\\r\\nSortableTable.prototype._sortTypeInfo = {};\\r\\n\\r\\nSortableTable.prototype.setTable = function (oTable) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.element = oTable;\\r\\n\\tthis.setTHead( oTable.tHead );\\r\\n\\tthis.setTBody( oTable.tBodies[0] );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTHead = function (oTHead) {\\r\\n\\tif (this.tHead && this.tHead != oTHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.tHead = oTHead;\\r\\n\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTBody = function (oTBody) {\\r\\n\\tthis.tBody = oTBody;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\n// adds arrow containers and events\\r\\n// also binds sort type to the header cells so that reordering columns does\\r\\n// not break the sort types\\r\\nSortableTable.prototype.initHeader = function (oSortTypes) {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar doc = this.tHead.ownerDocument || this.tHead.document;\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img, c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (this.sortTypes[i] != null && this.sortTypes[i] != \\\"None\\\") {\\r\\n\\t\\t\\timg = doc.createElement(\\\"IMG\\\");\\r\\n\\t\\t\\timg.src = \\\"images/blank.png\\\";\\r\\n\\t\\t\\tc.appendChild(img);\\r\\n\\t\\t\\tif (this.sortTypes[i] != null)\\r\\n\\t\\t\\t\\tc._sortType = this.sortTypes[i];\\r\\n\\t\\t\\tif (typeof c.addEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.addEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.attachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.attachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\tc.onclick = this._headerOnclick;\\r\\n\\t\\t}\\r\\n\\t\\telse\\r\\n\\t\\t{\\r\\n\\t\\t\\tc.setAttribute( \\\"_sortType\\\", oSortTypes[i] );\\r\\n\\t\\t\\tc._sortType = \\\"None\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\tthis.updateHeaderArrows();\\r\\n};\\r\\n\\r\\n// remove arrows and events\\r\\nSortableTable.prototype.uninitHeader = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (c._sortType != null && c._sortType != \\\"None\\\") {\\r\\n\\t\\t\\tc.removeChild(c.lastChild);\\r\\n\\t\\t\\tif (typeof c.removeEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.removeEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.detachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.detachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\tc._sortType = null;\\r\\n\\t\\t\\tc.removeAttribute( \\\"_sortType\\\" );\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.updateHeaderArrows = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tif (cells[i]._sortType != null && cells[i]._sortType != \\\"None\\\") {\\r\\n\\t\\t\\timg = cells[i].lastChild;\\r\\n\\t\\t\\tif (i == this.sortColumn)\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow \\\" + (this.descending ? \\\"descending\\\" : \\\"ascending\\\");\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.headerOnclick = function (e) {\\r\\n\\t// find TD element\\r\\n\\tvar el = e.target || e.srcElement;\\r\\n\\twhile (el.tagName != \\\"TD\\\")\\r\\n\\t\\tel = el.parentNode;\\r\\n\\r\\n\\tthis.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\\r\\n};\\r\\n\\r\\n// IE returns wrong cellIndex when columns are hidden\\r\\nSortableTable.getCellIndex = function (oTd) {\\r\\n\\tvar cells = oTd.parentNode.childNodes\\r\\n\\tvar l = cells.length;\\r\\n\\tvar i;\\r\\n\\tfor (i = 0; cells[i] != oTd && i < l; i++)\\r\\n\\t\\t;\\r\\n\\treturn i;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getSortType = function (nColumn) {\\r\\n\\treturn this.sortTypes[nColumn] || \\\"String\\\";\\r\\n};\\r\\n\\r\\n// only nColumn is required\\r\\n// if bDescending is left out the old value is taken into account\\r\\n// if sSortType is left out the sort type is found from the sortTypes array\\r\\n\\r\\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\\r\\n\\tif (!this.tBody) return;\\r\\n\\tif (sSortType == null)\\r\\n\\t\\tsSortType = this.getSortType(nColumn);\\r\\n\\r\\n\\t// exit if None\\r\\n\\tif (sSortType == \\\"None\\\")\\r\\n\\t\\treturn;\\r\\n\\r\\n\\tif (bDescending == null) {\\r\\n\\t\\tif (this.sortColumn != nColumn)\\r\\n\\t\\t\\tthis.descending = this.defaultDescending;\\r\\n\\t\\telse\\r\\n\\t\\t\\tthis.descending = !this.descending;\\r\\n\\t}\\r\\n\\telse\\r\\n\\t\\tthis.descending = bDescending;\\r\\n\\r\\n\\tthis.sortColumn = nColumn;\\r\\n\\r\\n\\tif (typeof this.onbeforesort == \\\"function\\\")\\r\\n\\t\\tthis.onbeforesort();\\r\\n\\r\\n\\tvar f = this.getSortFunction(sSortType, nColumn);\\r\\n\\tvar a = this.getCache(sSortType, nColumn);\\r\\n\\tvar tBody = this.tBody;\\r\\n\\r\\n\\ta.sort(f);\\r\\n\\r\\n\\tif (this.descending)\\r\\n\\t\\ta.reverse();\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// remove from doc\\r\\n\\t\\tvar nextSibling = tBody.nextSibling;\\r\\n\\t\\tvar p = tBody.parentNode;\\r\\n\\t\\tp.removeChild(tBody);\\r\\n\\t}\\r\\n\\r\\n\\t// insert in the new order\\r\\n\\tvar l = a.length;\\r\\n\\tfor (var i = 0; i < l; i++)\\r\\n\\t\\ttBody.appendChild(a[i].element);\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// insert into doc\\r\\n\\t\\tp.insertBefore(tBody, nextSibling);\\r\\n\\t}\\r\\n\\r\\n\\tthis.updateHeaderArrows();\\r\\n\\r\\n\\tthis.destroyCache(a);\\r\\n\\r\\n\\tif (typeof this.onsort == \\\"function\\\")\\r\\n\\t\\tthis.onsort();\\r\\n};\\r\\n\\r\\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\\r\\n\\tvar oThis = this;\\r\\n\\tthis._asyncsort = function () {\\r\\n\\t\\toThis.sort(nColumn, bDescending, sSortType);\\r\\n\\t};\\r\\n\\twindow.setTimeout(this._asyncsort, 1);\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getCache = function (sType, nColumn) {\\r\\n\\tif (!this.tBody) return [];\\r\\n\\tvar rows = this.tBody.rows;\\r\\n\\tvar l = rows.length;\\r\\n\\tvar a = new Array(l);\\r\\n\\tvar r;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tr = rows[i];\\r\\n\\t\\ta[i] = {\\r\\n\\t\\t\\tvalue:\\t\\tthis.getRowValue(r, sType, nColumn),\\r\\n\\t\\t\\telement:\\tr\\r\\n\\t\\t};\\r\\n\\t};\\r\\n\\treturn a;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroyCache = function (oArray) {\\r\\n\\tvar l = oArray.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\toArray[i].value = null;\\r\\n\\t\\toArray[i].element = null;\\r\\n\\t\\toArray[i] = null;\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\\r\\n\\t// if we have defined a custom getRowValue use that\\r\\n\\tif (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\\r\\n\\t\\treturn this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\\r\\n\\r\\n\\tvar s;\\r\\n\\tvar c = oRow.cells[nColumn];\\r\\n\\tif (typeof c.innerText != \\\"undefined\\\")\\r\\n\\t\\ts = c.innerText;\\r\\n\\telse\\r\\n\\t\\ts = SortableTable.getInnerText(c);\\r\\n\\treturn this.getValueFromString(s, sType);\\r\\n};\\r\\n\\r\\nSortableTable.getInnerText = function (oNode) {\\r\\n\\tvar s = \\\"\\\";\\r\\n\\tvar cs = oNode.childNodes;\\r\\n\\tvar l = cs.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tswitch (cs[i].nodeType) {\\r\\n\\t\\t\\tcase 1: //ELEMENT_NODE\\r\\n\\t\\t\\t\\ts += SortableTable.getInnerText(cs[i]);\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\tcase 3:\\t//TEXT_NODE\\r\\n\\t\\t\\t\\ts += cs[i].nodeValue;\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\treturn s;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getValueFromString = function (sText, sType) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].getValueFromString( sText );\\r\\n\\treturn sText;\\r\\n\\t/*\\r\\n\\tswitch (sType) {\\r\\n\\t\\tcase \\\"Number\\\":\\r\\n\\t\\t\\treturn Number(sText);\\r\\n\\t\\tcase \\\"CaseInsensitiveString\\\":\\r\\n\\t\\t\\treturn sText.toUpperCase();\\r\\n\\t\\tcase \\\"Date\\\":\\r\\n\\t\\t\\tvar parts = sText.split(\\\"-\\\");\\r\\n\\t\\t\\tvar d = new Date(0);\\r\\n\\t\\t\\td.setFullYear(parts[0]);\\r\\n\\t\\t\\td.setDate(parts[2]);\\r\\n\\t\\t\\td.setMonth(parts[1] - 1);\\r\\n\\t\\t\\treturn d.valueOf();\\r\\n\\t}\\r\\n\\treturn sText;\\r\\n\\t*/\\r\\n\\t};\\r\\n\\r\\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].compare;\\r\\n\\treturn SortableTable.basicCompare;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroy = function () {\\r\\n\\tthis.uninitHeader();\\r\\n\\tvar win = this.document.parentWindow;\\r\\n\\tif (win && typeof win.detachEvent != \\\"undefined\\\") {\\t// only IE needs this\\r\\n\\t\\twin.detachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n\\tthis._onunload = null;\\r\\n\\tthis.element = null;\\r\\n\\tthis.tHead = null;\\r\\n\\tthis.tBody = null;\\r\\n\\tthis.document = null;\\r\\n\\tthis._headerOnclick = null;\\r\\n\\tthis.sortTypes = null;\\r\\n\\tthis._asyncsort = null;\\r\\n\\tthis.onsort = null;\\r\\n};\\r\\n\\r\\n// Adds a sort type to all instance of SortableTable\\r\\n// sType : String - the identifier of the sort type\\r\\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\\r\\n// string and casts it to a desired format. If left out the string is just\\r\\n// returned\\r\\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\\r\\n// compare function. Takes two values and compares them. If left out less than,\\r\\n// <, compare is used\\r\\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\\r\\n// that takes the row and the column index and returns the value used to compare.\\r\\n// If left out then the innerText is first taken for the cell and then the\\r\\n// fGetValueFromString is used to convert that string the desired value and type\\r\\n\\r\\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\\r\\n\\tthis._sortTypeInfo[sType] = {\\r\\n\\t\\ttype:\\t\\t\\t\\tsType,\\r\\n\\t\\tgetValueFromString:\\tfGetValueFromString || SortableTable.idFunction,\\r\\n\\t\\tcompare:\\t\\t\\tfCompareFunction || SortableTable.basicCompare,\\r\\n\\t\\tgetRowValue:\\t\\tfGetRowValue\\r\\n\\t};\\r\\n};\\r\\n\\r\\n// this removes the sort type from all instances of SortableTable\\r\\nSortableTable.prototype.removeSortType = function (sType) {\\r\\n\\tdelete this._sortTypeInfo[sType];\\r\\n};\\r\\n\\r\\nSortableTable.basicCompare = function compare(n1, n2) {\\r\\n\\tif (n1.value < n2.value)\\r\\n\\t\\treturn -1;\\r\\n\\tif (n2.value < n1.value)\\r\\n\\t\\treturn 1;\\r\\n\\treturn 0;\\r\\n};\\r\\n\\r\\nSortableTable.idFunction = function (x) {\\r\\n\\treturn x;\\r\\n};\\r\\n\\r\\nSortableTable.toUpperCase = function (s) {\\r\\n\\treturn s.toUpperCase();\\r\\n};\\r\\n\\r\\nSortableTable.toDate = function (s) {\\r\\n\\tvar parts = s.split(\\\"-\\\");\\r\\n\\tvar d = new Date(0);\\r\\n\\td.setFullYear(parts[0]);\\r\\n\\td.setDate(parts[2]);\\r\\n\\td.setMonth(parts[1] - 1);\\r\\n\\treturn d.valueOf();\\r\\n};\\r\\n\\r\\n\\r\\n// add sort types\\r\\nSortableTable.prototype.addSortType(\\\"Number\\\", Number);\\r\\nSortableTable.prototype.addSortType(\\\"CaseInsensitiveString\\\", SortableTable.toUpperCase);\\r\\nSortableTable.prototype.addSortType(\\\"Date\\\", SortableTable.toDate);\\r\\nSortableTable.prototype.addSortType(\\\"String\\\");\\r\\n// None is a special case\\r\\n\"","/*\n\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","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\\n// SCRIPT-LOADER FOOTER\\n//# sourceURL=script:///C:/projects/dev/github/TableFilter/libs/sortabletable.js\")","var map = {\n\t\"./array\": \"./src/array.js\",\n\t\"./array.js\": \"./src/array.js\",\n\t\"./const\": \"./src/const.js\",\n\t\"./const.js\": \"./src/const.js\",\n\t\"./cookie\": \"./src/cookie.js\",\n\t\"./cookie.js\": \"./src/cookie.js\",\n\t\"./dom\": \"./src/dom.js\",\n\t\"./dom.js\": \"./src/dom.js\",\n\t\"./emitter\": \"./src/emitter.js\",\n\t\"./emitter.js\": \"./src/emitter.js\",\n\t\"./event\": \"./src/event.js\",\n\t\"./event.js\": \"./src/event.js\",\n\t\"./extensions/advancedGrid/adapterEzEditTable\": \"./src/extensions/advancedGrid/adapterEzEditTable.js\",\n\t\"./extensions/advancedGrid/adapterEzEditTable.js\": \"./src/extensions/advancedGrid/adapterEzEditTable.js\",\n\t\"./extensions/advancedGrid/advancedGrid\": \"./src/extensions/advancedGrid/advancedGrid.js\",\n\t\"./extensions/advancedGrid/advancedGrid.js\": \"./src/extensions/advancedGrid/advancedGrid.js\",\n\t\"./extensions/colOps/colOps\": \"./src/extensions/colOps/colOps.js\",\n\t\"./extensions/colOps/colOps.js\": \"./src/extensions/colOps/colOps.js\",\n\t\"./extensions/colsVisibility/colsVisibility\": \"./src/extensions/colsVisibility/colsVisibility.js\",\n\t\"./extensions/colsVisibility/colsVisibility.js\": \"./src/extensions/colsVisibility/colsVisibility.js\",\n\t\"./extensions/filtersVisibility/filtersVisibility\": \"./src/extensions/filtersVisibility/filtersVisibility.js\",\n\t\"./extensions/filtersVisibility/filtersVisibility.js\": \"./src/extensions/filtersVisibility/filtersVisibility.js\",\n\t\"./extensions/sort/adapterSortabletable\": \"./src/extensions/sort/adapterSortabletable.js\",\n\t\"./extensions/sort/adapterSortabletable.js\": \"./src/extensions/sort/adapterSortabletable.js\",\n\t\"./extensions/sort/sort\": \"./src/extensions/sort/sort.js\",\n\t\"./extensions/sort/sort.js\": \"./src/extensions/sort/sort.js\",\n\t\"./feature\": \"./src/feature.js\",\n\t\"./feature.js\": \"./src/feature.js\",\n\t\"./modules/alternateRows\": \"./src/modules/alternateRows.js\",\n\t\"./modules/alternateRows.js\": \"./src/modules/alternateRows.js\",\n\t\"./modules/baseDropdown\": \"./src/modules/baseDropdown.js\",\n\t\"./modules/baseDropdown.js\": \"./src/modules/baseDropdown.js\",\n\t\"./modules/checkList\": \"./src/modules/checkList.js\",\n\t\"./modules/checkList.js\": \"./src/modules/checkList.js\",\n\t\"./modules/clearButton\": \"./src/modules/clearButton.js\",\n\t\"./modules/clearButton.js\": \"./src/modules/clearButton.js\",\n\t\"./modules/dateType\": \"./src/modules/dateType.js\",\n\t\"./modules/dateType.js\": \"./src/modules/dateType.js\",\n\t\"./modules/dropdown\": \"./src/modules/dropdown.js\",\n\t\"./modules/dropdown.js\": \"./src/modules/dropdown.js\",\n\t\"./modules/gridLayout\": \"./src/modules/gridLayout.js\",\n\t\"./modules/gridLayout.js\": \"./src/modules/gridLayout.js\",\n\t\"./modules/hash\": \"./src/modules/hash.js\",\n\t\"./modules/hash.js\": \"./src/modules/hash.js\",\n\t\"./modules/help\": \"./src/modules/help.js\",\n\t\"./modules/help.js\": \"./src/modules/help.js\",\n\t\"./modules/highlightKeywords\": \"./src/modules/highlightKeywords.js\",\n\t\"./modules/highlightKeywords.js\": \"./src/modules/highlightKeywords.js\",\n\t\"./modules/loader\": \"./src/modules/loader.js\",\n\t\"./modules/loader.js\": \"./src/modules/loader.js\",\n\t\"./modules/markActiveColumns\": \"./src/modules/markActiveColumns.js\",\n\t\"./modules/markActiveColumns.js\": \"./src/modules/markActiveColumns.js\",\n\t\"./modules/noResults\": \"./src/modules/noResults.js\",\n\t\"./modules/noResults.js\": \"./src/modules/noResults.js\",\n\t\"./modules/paging\": \"./src/modules/paging.js\",\n\t\"./modules/paging.js\": \"./src/modules/paging.js\",\n\t\"./modules/popupFilter\": \"./src/modules/popupFilter.js\",\n\t\"./modules/popupFilter.js\": \"./src/modules/popupFilter.js\",\n\t\"./modules/rowsCounter\": \"./src/modules/rowsCounter.js\",\n\t\"./modules/rowsCounter.js\": \"./src/modules/rowsCounter.js\",\n\t\"./modules/state\": \"./src/modules/state.js\",\n\t\"./modules/state.js\": \"./src/modules/state.js\",\n\t\"./modules/statusBar\": \"./src/modules/statusBar.js\",\n\t\"./modules/statusBar.js\": \"./src/modules/statusBar.js\",\n\t\"./modules/storage\": \"./src/modules/storage.js\",\n\t\"./modules/storage.js\": \"./src/modules/storage.js\",\n\t\"./modules/toolbar\": \"./src/modules/toolbar.js\",\n\t\"./modules/toolbar.js\": \"./src/modules/toolbar.js\",\n\t\"./number\": \"./src/number.js\",\n\t\"./number.js\": \"./src/number.js\",\n\t\"./root\": \"./src/root.js\",\n\t\"./root.js\": \"./src/root.js\",\n\t\"./settings\": \"./src/settings.js\",\n\t\"./settings.js\": \"./src/settings.js\",\n\t\"./sort\": \"./src/sort.js\",\n\t\"./sort.js\": \"./src/sort.js\",\n\t\"./string\": \"./src/string.js\",\n\t\"./string.js\": \"./src/string.js\",\n\t\"./tablefilter\": \"./src/tablefilter.js\",\n\t\"./tablefilter.js\": \"./src/tablefilter.js\",\n\t\"./tfBase\": \"./src/tfBase.js\",\n\t\"./tfBase.js\": \"./src/tfBase.js\",\n\t\"./types\": \"./src/types.js\",\n\t\"./types.js\": \"./src/types.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\tvar module = __webpack_require__(id);\n\treturn module;\n}\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) { // check for number or string\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 id;\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src sync recursive ^\\\\.\\\\/.*$\";","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, cfg.name);\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","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, opts.name);\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, f.name);\r\n\r\n // Configuration object\r\n let cfg = this.config;\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = 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▼\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, 'Columns▼');\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, f.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = 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 = '';\r\n\r\n /**\r\n * Collapse icon HTML\r\n * @private\r\n */\r\n this.icnCollapseHtml = '';\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 {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, opts.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = opts.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = 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\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 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"],"sourceRoot":""}
\ No newline at end of file
diff --git a/dist/tablefilter/tf-0-973b3f20052aa524e437.js b/dist/tablefilter/tf-0-973b3f20052aa524e437.js
deleted file mode 100644
index 5cafc9bb..00000000
--- a/dist/tablefilter/tf-0-973b3f20052aa524e437.js
+++ /dev/null
@@ -1,3480 +0,0 @@
-(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],{
-
-/***/ "./node_modules/format-number/index.js":
-/*!*********************************************!*\
- !*** ./node_modules/format-number/index.js ***!
- \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-
-module.exports = formatter;
-module.exports.default = formatter;
-
-function formatter(options) {
- options = options || {};
-
-
- // *********************************************************************************************
- // Set defaults for negatives
- // options.negative, options.negativeOut, options.separator retained for backward compatibility
- // *********************************************************************************************
-
- // type of negative; default left
- options.negativeType = options.negativeType || (options.negative === 'R' ? 'right' : 'left')
-
- // negative symbols '-' or '()'
- if (typeof options.negativeLeftSymbol !== 'string') {
- switch (options.negativeType) {
- case 'left':
- options.negativeLeftSymbol = '-';
- break;
- case 'brackets':
- options.negativeLeftSymbol = '(';
- break;
- default:
- options.negativeLeftSymbol = '';
- }
- }
- if (typeof options.negativeRightSymbol !== 'string') {
- switch (options.negativeType) {
- case 'right':
- options.negativeRightSymbol = '-';
- break;
- case 'brackets':
- options.negativeRightSymbol = ')';
- break;
- default:
- options.negativeRightSymbol = '';
- }
- }
-
- // whether negative symbol should be inside/outside prefix and suffix
-
- if (typeof options.negativeLeftOut !== "boolean") {
- options.negativeLeftOut = (options.negativeOut === false ? false : true);
- }
- if (typeof options.negativeRightOut !== "boolean") {
- options.negativeRightOut = (options.negativeOut === false ? false : true);
- }
-
- //prefix and suffix
- options.prefix = options.prefix || '';
- options.suffix = options.suffix || '';
-
- //separators
- if (typeof options.integerSeparator !== 'string') {
- options.integerSeparator = (typeof options.separator === 'string' ? options.separator : ',');
- }
- options.decimalsSeparator = typeof options.decimalsSeparator === 'string' ? options.decimalsSeparator : '';
- options.decimal = options.decimal || '.';
-
- //padders
- options.padLeft = options.padLeft || -1 //default no padding
- options.padRight = options.padRight || -1 //default no padding
-
- function format(number, overrideOptions) {
- overrideOptions = overrideOptions || {};
-
- if (number || number === 0) {
- number = '' + number;//convert number to string if it isn't already
- } else {
- return '';
- }
-
- //identify a negative number and make it absolute
- var output = [];
- var negative = number.charAt(0) === '-';
- number = number.replace(/^\-/g, '');
-
- //Prepare output with left hand negative and/or prefix
- if (!options.negativeLeftOut && !overrideOptions.noUnits) {
- output.push(options.prefix);
- }
- if (negative) {
- output.push(options.negativeLeftSymbol);
- }
- if (options.negativeLeftOut && !overrideOptions.noUnits) {
- output.push(options.prefix);
- }
-
- //Format core number
- number = number.split('.');
- if (options.round != null) round(number, options.round);
- if (options.truncate != null) number[1] = truncate(number[1], options.truncate);
- if (options.padLeft > 0) number[0] = padLeft(number[0], options.padLeft);
- if (options.padRight > 0) number[1] = padRight(number[1], options.padRight);
- if (!overrideOptions.noSeparator && number[1]) number[1] = addDecimalSeparators(number[1], options.decimalsSeparator);
- if (!overrideOptions.noSeparator && number[0]) number[0] = addIntegerSeparators(number[0], options.integerSeparator);
- output.push(number[0]);
- if (number[1]) {
- output.push(options.decimal);
- output.push(number[1]);
- }
-
- //Prepare output with right hand negative and/or prefix
- if (options.negativeRightOut && !overrideOptions.noUnits) {
- output.push(options.suffix);
- }
- if (negative) {
- output.push(options.negativeRightSymbol);
- }
- if (!options.negativeRightOut && !overrideOptions.noUnits) {
- output.push(options.suffix);
- }
-
- //join output and return
- return output.join('');
- }
-
- format.negative = options.negative;
- format.negativeOut = options.negativeOut;
- format.negativeType = options.negativeType;
- format.negativeLeftOut = options.negativeLeftOut;
- format.negativeLeftSymbol = options.negativeLeftSymbol;
- format.negativeRightOut = options.negativeRightOut;
- format.negativeRightSymbol = options.negativeRightSymbol;
- format.prefix = options.prefix;
- format.suffix = options.suffix;
- format.separate = options.separate;
- format.integerSeparator = options.integerSeparator;
- format.decimalsSeparator = options.decimalsSeparator;
- format.decimal = options.decimal;
- format.padLeft = options.padLeft;
- format.padRight = options.padRight;
- format.truncate = options.truncate;
- format.round = options.round;
-
- function unformat(number, allowedSeparators) {
- allowedSeparators = allowedSeparators || [];
- if (options.allowedSeparators) {
- options.allowedSeparators.forEach(function (s) { allowedSeparators.push (s); });
- }
- allowedSeparators.push(options.integerSeparator);
- allowedSeparators.push(options.decimalsSeparator);
- number = number.replace(options.prefix, '');
- number = number.replace(options.suffix, '');
- var newNumber = number;
- do {
- number = newNumber;
- for (var i = 0; i < allowedSeparators.length; i++) {
- newNumber = newNumber.replace(allowedSeparators[i], '');
- }
- } while (newNumber != number);
- return number;
- }
- format.unformat = unformat;
-
- function validate(number, allowedSeparators) {
- number = unformat(number, allowedSeparators);
- number = number.split(options.decimal);
- if (number.length > 2) {
- return false;
- } else if (options.truncate != null && number[1] && number[1].length > options.truncate) {
- return false;
- } else if (options.round != null && number[1] && number[1].length > options.round) {
- return false;
- } else {
- return /^-?\d+\.?\d*$/.test(number);
- }
- }
- return format;
-}
-
-//where x is already the integer part of the number
-function addIntegerSeparators(x, separator) {
- x += '';
- if (!separator) return x;
- var rgx = /(\d+)(\d{3})/;
- while (rgx.test(x)) {
- x = x.replace(rgx, '$1' + separator + '$2');
- }
- return x;
-}
-
-//where x is already the decimal part of the number
-function addDecimalSeparators(x, separator) {
- x += '';
- if (!separator) return x;
- var rgx = /(\d{3})(\d+)/;
- while (rgx.test(x)) {
- x = x.replace(rgx, '$1' + separator + '$2');
- }
- return x;
-}
-
-//where x is the integer part of the number
-function padLeft(x, padding) {
- x = x + '';
- var buf = [];
- while (buf.length + x.length < padding) {
- buf.push('0');
- }
- return buf.join('') + x;
-}
-
-//where x is the decimals part of the number
-function padRight(x, padding) {
- if (x) {
- x += '';
- } else {
- x = '';
- }
- var buf = [];
- while (buf.length + x.length < padding) {
- buf.push('0');
- }
- return x + buf.join('');
-}
-function truncate(x, length) {
- if (x) {
- x += '';
- }
- if (x && x.length > length) {
- return x.substr(0, length);
- } else {
- return x;
- }
-}
-
-//where number is an array with 0th item as integer string and 1st item as decimal string (no negatives)
-function round(number, places) {
- if (number[1] && places >= 0 && number[1].length > places) {
- //truncate to correct number of decimal places
- var decim = number[1].slice(0, places);
- //if next digit was >= 5 we need to round up
- if (+(number[1].substr(places, 1)) >= 5) {
- //But first count leading zeros as converting to a number will loose them
- var leadingzeros = "";
- while (decim.charAt(0)==="0") {
- leadingzeros = leadingzeros + "0";
- decim = decim.substr(1);
- }
- //Then we can change decim to a number and add 1 before replacing leading zeros
- decim = (+decim + 1) + '';
- decim = leadingzeros + decim;
- if (decim.length > places) {
- //adding one has made it longer
- number[0] = (+number[0]+ +decim.charAt(0)) + ''; //add value of firstchar to the integer part
- decim = decim.substring(1); //ignore the 1st char at the beginning which is the carry to the integer part
- }
- }
- number[1] = decim;
- }
- return number;
-}
-
-
-/***/ }),
-
-/***/ "./node_modules/raw-loader/index.js!./libs/sortabletable.js":
-/*!*********************************************************!*\
- !*** ./node_modules/raw-loader!./libs/sortabletable.js ***!
- \*********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-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"
-
-/***/ }),
-
-/***/ "./node_modules/script-loader/addScript.js":
-/*!*************************************************!*\
- !*** ./node_modules/script-loader/addScript.js ***!
- \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
-*/
-module.exports = function(src) {
- function log(error) {
- (typeof console !== "undefined")
- && (console.error || console.log)("[Script Loader]", error);
- }
-
- // Check for IE =< 8
- function isIE() {
- return typeof attachEvent !== "undefined" && typeof addEventListener === "undefined";
- }
-
- try {
- if (typeof execScript !== "undefined" && isIE()) {
- execScript(src);
- } else if (typeof eval !== "undefined") {
- eval.call(null, src);
- } else {
- log("EvalError: No eval function available");
- }
- } catch (error) {
- log(error);
- }
-}
-
-
-/***/ }),
-
-/***/ "./node_modules/script-loader/index.js!./libs/sortabletable.js":
-/*!************************************************************!*\
- !*** ./node_modules/script-loader!./libs/sortabletable.js ***!
- \************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-__webpack_require__(/*! !./node_modules/script-loader/addScript.js */ "./node_modules/script-loader/addScript.js")(__webpack_require__(/*! !./node_modules/raw-loader!./libs/sortabletable.js */ "./node_modules/raw-loader/index.js!./libs/sortabletable.js")+"\n\n// SCRIPT-LOADER FOOTER\n//# sourceURL=script:///C:/projects/dev/github/TableFilter/libs/sortabletable.js")
-
-/***/ }),
-
-/***/ "./src sync recursive ^\\.\\/.*$":
-/*!***************************!*\
- !*** ./src sync ^\.\/.*$ ***!
- \***************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var map = {
- "./array": "./src/array.js",
- "./array.js": "./src/array.js",
- "./const": "./src/const.js",
- "./const.js": "./src/const.js",
- "./cookie": "./src/cookie.js",
- "./cookie.js": "./src/cookie.js",
- "./dom": "./src/dom.js",
- "./dom.js": "./src/dom.js",
- "./emitter": "./src/emitter.js",
- "./emitter.js": "./src/emitter.js",
- "./event": "./src/event.js",
- "./event.js": "./src/event.js",
- "./extensions/advancedGrid/adapterEzEditTable": "./src/extensions/advancedGrid/adapterEzEditTable.js",
- "./extensions/advancedGrid/adapterEzEditTable.js": "./src/extensions/advancedGrid/adapterEzEditTable.js",
- "./extensions/advancedGrid/advancedGrid": "./src/extensions/advancedGrid/advancedGrid.js",
- "./extensions/advancedGrid/advancedGrid.js": "./src/extensions/advancedGrid/advancedGrid.js",
- "./extensions/colOps/colOps": "./src/extensions/colOps/colOps.js",
- "./extensions/colOps/colOps.js": "./src/extensions/colOps/colOps.js",
- "./extensions/colsVisibility/colsVisibility": "./src/extensions/colsVisibility/colsVisibility.js",
- "./extensions/colsVisibility/colsVisibility.js": "./src/extensions/colsVisibility/colsVisibility.js",
- "./extensions/filtersVisibility/filtersVisibility": "./src/extensions/filtersVisibility/filtersVisibility.js",
- "./extensions/filtersVisibility/filtersVisibility.js": "./src/extensions/filtersVisibility/filtersVisibility.js",
- "./extensions/sort/adapterSortabletable": "./src/extensions/sort/adapterSortabletable.js",
- "./extensions/sort/adapterSortabletable.js": "./src/extensions/sort/adapterSortabletable.js",
- "./extensions/sort/sort": "./src/extensions/sort/sort.js",
- "./extensions/sort/sort.js": "./src/extensions/sort/sort.js",
- "./feature": "./src/feature.js",
- "./feature.js": "./src/feature.js",
- "./modules/alternateRows": "./src/modules/alternateRows.js",
- "./modules/alternateRows.js": "./src/modules/alternateRows.js",
- "./modules/baseDropdown": "./src/modules/baseDropdown.js",
- "./modules/baseDropdown.js": "./src/modules/baseDropdown.js",
- "./modules/checkList": "./src/modules/checkList.js",
- "./modules/checkList.js": "./src/modules/checkList.js",
- "./modules/clearButton": "./src/modules/clearButton.js",
- "./modules/clearButton.js": "./src/modules/clearButton.js",
- "./modules/dateType": "./src/modules/dateType.js",
- "./modules/dateType.js": "./src/modules/dateType.js",
- "./modules/dropdown": "./src/modules/dropdown.js",
- "./modules/dropdown.js": "./src/modules/dropdown.js",
- "./modules/gridLayout": "./src/modules/gridLayout.js",
- "./modules/gridLayout.js": "./src/modules/gridLayout.js",
- "./modules/hash": "./src/modules/hash.js",
- "./modules/hash.js": "./src/modules/hash.js",
- "./modules/help": "./src/modules/help.js",
- "./modules/help.js": "./src/modules/help.js",
- "./modules/highlightKeywords": "./src/modules/highlightKeywords.js",
- "./modules/highlightKeywords.js": "./src/modules/highlightKeywords.js",
- "./modules/loader": "./src/modules/loader.js",
- "./modules/loader.js": "./src/modules/loader.js",
- "./modules/markActiveColumns": "./src/modules/markActiveColumns.js",
- "./modules/markActiveColumns.js": "./src/modules/markActiveColumns.js",
- "./modules/noResults": "./src/modules/noResults.js",
- "./modules/noResults.js": "./src/modules/noResults.js",
- "./modules/paging": "./src/modules/paging.js",
- "./modules/paging.js": "./src/modules/paging.js",
- "./modules/popupFilter": "./src/modules/popupFilter.js",
- "./modules/popupFilter.js": "./src/modules/popupFilter.js",
- "./modules/rowsCounter": "./src/modules/rowsCounter.js",
- "./modules/rowsCounter.js": "./src/modules/rowsCounter.js",
- "./modules/state": "./src/modules/state.js",
- "./modules/state.js": "./src/modules/state.js",
- "./modules/statusBar": "./src/modules/statusBar.js",
- "./modules/statusBar.js": "./src/modules/statusBar.js",
- "./modules/storage": "./src/modules/storage.js",
- "./modules/storage.js": "./src/modules/storage.js",
- "./modules/toolbar": "./src/modules/toolbar.js",
- "./modules/toolbar.js": "./src/modules/toolbar.js",
- "./number": "./src/number.js",
- "./number.js": "./src/number.js",
- "./register": "./src/register.js",
- "./register.js": "./src/register.js",
- "./root": "./src/root.js",
- "./root.js": "./src/root.js",
- "./settings": "./src/settings.js",
- "./settings.js": "./src/settings.js",
- "./sort": "./src/sort.js",
- "./sort.js": "./src/sort.js",
- "./string": "./src/string.js",
- "./string.js": "./src/string.js",
- "./tablefilter": "./src/tablefilter.js",
- "./tablefilter.js": "./src/tablefilter.js",
- "./types": "./src/types.js",
- "./types.js": "./src/types.js"
-};
-
-
-function webpackContext(req) {
- var id = webpackContextResolve(req);
- var module = __webpack_require__(id);
- return module;
-}
-function webpackContextResolve(req) {
- var id = map[req];
- if(!(id + 1)) { // check for number or string
- var e = new Error('Cannot find module "' + req + '".');
- e.code = 'MODULE_NOT_FOUND';
- throw e;
- }
- return id;
-}
-webpackContext.keys = function webpackContextKeys() {
- return Object.keys(map);
-};
-webpackContext.resolve = webpackContextResolve;
-module.exports = webpackContext;
-webpackContext.id = "./src sync recursive ^\\.\\/.*$";
-
-/***/ }),
-
-/***/ "./src/extensions/advancedGrid/adapterEzEditTable.js":
-/*!***********************************************************!*\
- !*** ./src/extensions/advancedGrid/adapterEzEditTable.js ***!
- \***********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AdapterEzEditTable; });
-/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js");
-/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js");
-/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../const */ "./src/const.js");
-/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../settings */ "./src/settings.js");
-/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../root */ "./src/root.js");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
-
-function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
-
-function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-
-
-
-
-
-var INSTANTIATION_ERROR = "Failed to instantiate EditTable object.\n \n\"ezEditTable\" dependency not found.";
-/**
- * Adapter module for ezEditTable, an external library providing advanced
- * grid features (selection and edition):
- * http://codecanyon.net/item/ezedittable-enhance-html-tables/2425123?ref=koalyptus
- */
-
-var AdapterEzEditTable =
-/*#__PURE__*/
-function (_Feature) {
- _inherits(AdapterEzEditTable, _Feature);
-
- /**
- * Creates an instance of AdapterEzEditTable
- *
- * @param {TableFilter} tf TableFilter instance
- * @param {Object} cfg Configuration options for ezEditTable library
- */
- function AdapterEzEditTable(tf, cfg) {
- var _this;
-
- _classCallCheck(this, AdapterEzEditTable);
-
- _this = _possibleConstructorReturn(this, _getPrototypeOf(AdapterEzEditTable).call(this, tf, cfg.name));
- /**
- * Module description
- * @type {String}
- */
-
- _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.description, 'ezEditTable adapter');
- /**
- * Filename of ezEditTable library
- * @type {String}
- */
-
- _this.filename = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.filename, 'ezEditTable.js');
- /**
- * Path to ezEditTable library
- * @type {String}
- */
-
- _this.vendorPath = cfg.vendor_path;
- /**
- * Load ezEditTable stylesheet
- * @type {Boolean}
- */
-
- _this.loadStylesheet = Boolean(cfg.load_stylesheet);
- /**
- * Path to ezEditTable stylesheet
- * @type {String}
- */
-
- _this.stylesheet = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.stylesheet, _this.vendorPath + 'ezEditTable.css');
- /**
- * Name of ezEditTable stylesheet
- * @type {String}
- */
-
- _this.stylesheetName = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.stylesheet_name, 'ezEditTableCss'); // Enable the ezEditTable's scroll into view behaviour if grid layout on
-
- cfg.scroll_into_view = cfg.scroll_into_view === false ? false : tf.gridLayout;
- /**
- * ezEditTable instance
- * @type {EditTable}
- * @private
- */
-
- _this._ezEditTable = null;
- /**
- * ezEditTable configuration
- * @private
- */
-
- _this.cfg = cfg;
-
- _this.enable();
-
- return _this;
- }
- /**
- * Conditionally load ezEditTable library and set advanced grid
- */
-
-
- _createClass(AdapterEzEditTable, [{
- key: "init",
- value: function init() {
- var _this2 = this;
-
- if (this.initialized) {
- return;
- }
-
- var tf = this.tf;
-
- if (_root__WEBPACK_IMPORTED_MODULE_4__["root"].EditTable) {
- this._setAdvancedGrid();
- } else {
- var path = this.vendorPath + this.filename;
- tf.import(this.filename, path, function () {
- return _this2._setAdvancedGrid();
- });
- }
-
- if (this.loadStylesheet && !tf.isImported(this.stylesheet, 'link')) {
- tf.import(this.stylesheetName, this.stylesheet, null, 'link');
- } // TODO: hack to prevent ezEditTable enter key event hijaking.
- // Needs to be fixed in the vendor's library
-
-
- this.emitter.on(['filter-focus', 'filter-blur'], function () {
- return _this2._toggleForInputFilter();
- });
- /**
- * @inherited
- */
-
- this.initialized = true;
- }
- /**
- * Instantiate ezEditTable component for advanced grid features
- * @private
- */
-
- }, {
- key: "_setAdvancedGrid",
- value: function _setAdvancedGrid() {
- var tf = this.tf; //start row for EditTable constructor needs to be calculated
-
- var startRow,
- cfg = this.cfg,
- thead = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(tf.dom(), 'thead'); //if thead exists and startRow not specified, startRow is calculated
- //automatically by EditTable
-
- if (thead.length > 0 && !cfg.startRow) {
- startRow = undefined;
- } //otherwise startRow config property if any or TableFilter refRow
- else {
- startRow = cfg.startRow || tf.refRow;
- }
-
- cfg.base_path = cfg.base_path || tf.basePath + 'ezEditTable/';
- var editable = cfg.editable;
- var selectable = cfg.selection;
-
- if (selectable) {
- cfg.default_selection = cfg.default_selection || 'row';
- } //CSS Styles
-
-
- cfg.active_cell_css = cfg.active_cell_css || 'ezETSelectedCell';
- var _lastValidRowIndex = 0;
- var _lastRowIndex = 0;
-
- if (selectable) {
- //Row navigation needs to be calculated according to TableFilter's
- //validRowsIndex array
- var onAfterSelection = function onAfterSelection(et, selectedElm, e) {
- var slc = et.Selection; //Next valid filtered row needs to be selected
-
- var doSelect = function doSelect(nextRowIndex) {
- if (et.defaultSelection === 'row') {
- /* eslint-disable */
- slc.SelectRowByIndex(nextRowIndex);
- /* eslint-enable */
- } else {
- /* eslint-disable */
- et.ClearSelections();
- /* eslint-enable */
-
- var cellIndex = selectedElm.cellIndex,
- _row = tf.dom().rows[nextRowIndex];
-
- if (et.defaultSelection === 'both') {
- /* eslint-disable */
- slc.SelectRowByIndex(nextRowIndex);
- /* eslint-enable */
- }
-
- if (_row) {
- /* eslint-disable */
- slc.SelectCell(_row.cells[cellIndex]);
- /* eslint-enable */
- }
- } //Table is filtered
-
-
- if (tf.validRowsIndex.length !== tf.getRowsNb()) {
- var r = tf.dom().rows[nextRowIndex];
-
- if (r) {
- r.scrollIntoView(false);
- }
-
- if (cell) {
- if (cell.cellIndex === tf.getCellsNb() - 1 && tf.gridLayout) {
- tf.tblCont.scrollLeft = 100000000;
- } else if (cell.cellIndex === 0 && tf.gridLayout) {
- tf.tblCont.scrollLeft = 0;
- } else {
- cell.scrollIntoView(false);
- }
- }
- }
- }; //table is not filtered
-
-
- if (!tf.validRowsIndex) {
- return;
- }
-
- var validIndexes = tf.validRowsIndex,
- validIdxLen = validIndexes.length,
- row = et.defaultSelection !== 'row' ? selectedElm.parentNode : selectedElm,
- //cell for default_selection = 'both' or 'cell'
- cell = selectedElm.nodeName === 'TD' ? selectedElm : null,
-
- /* eslint-disable */
- keyCode = e !== undefined ? et.Event.GetKey(e) : 0,
-
- /* eslint-enable */
- isRowValid = validIndexes.indexOf(row.rowIndex) !== -1,
- nextRowIndex,
- paging = tf.feature('paging'),
- //pgup/pgdown keys
- d = keyCode === 34 || keyCode === 33 ? paging && paging.pageLength || et.nbRowsPerPage : 1; //If next row is not valid, next valid filtered row needs to be
- //calculated
-
- if (!isRowValid) {
- //Selection direction up/down
- if (row.rowIndex > _lastRowIndex) {
- //last row
- if (row.rowIndex >= validIndexes[validIdxLen - 1]) {
- nextRowIndex = validIndexes[validIdxLen - 1];
- } else {
- var calcRowIndex = _lastValidRowIndex + d;
-
- if (calcRowIndex > validIdxLen - 1) {
- nextRowIndex = validIndexes[validIdxLen - 1];
- } else {
- nextRowIndex = validIndexes[calcRowIndex];
- }
- }
- } else {
- //first row
- if (row.rowIndex <= validIndexes[0]) {
- nextRowIndex = validIndexes[0];
- } else {
- var v = validIndexes[_lastValidRowIndex - d];
- nextRowIndex = v ? v : validIndexes[0];
- }
- }
-
- _lastRowIndex = row.rowIndex;
- doSelect(nextRowIndex);
- } else {
- //If filtered row is valid, special calculation for
- //pgup/pgdown keys
- if (keyCode !== 34 && keyCode !== 33) {
- _lastValidRowIndex = validIndexes.indexOf(row.rowIndex);
- _lastRowIndex = row.rowIndex;
- } else {
- if (keyCode === 34) {
- //pgdown
- //last row
- if (_lastValidRowIndex + d <= validIdxLen - 1) {
- nextRowIndex = validIndexes[_lastValidRowIndex + d];
- } else {
- nextRowIndex = [validIdxLen - 1];
- }
- } else {
- //pgup
- //first row
- if (_lastValidRowIndex - d <= validIndexes[0]) {
- nextRowIndex = validIndexes[0];
- } else {
- nextRowIndex = validIndexes[_lastValidRowIndex - d];
- }
- }
-
- _lastRowIndex = nextRowIndex;
- _lastValidRowIndex = validIndexes.indexOf(nextRowIndex);
- doSelect(nextRowIndex);
- }
- }
- }; //Page navigation has to be enforced whenever selected row is out of
- //the current page range
-
-
- var onBeforeSelection = function onBeforeSelection(et, selectedElm) {
- var row = et.defaultSelection !== 'row' ? selectedElm.parentNode : selectedElm;
-
- if (tf.paging) {
- if (tf.feature('paging').nbPages > 1) {
- var paging = tf.feature('paging'); //page length is re-assigned in case it has changed
-
- et.nbRowsPerPage = paging.pageLength;
- var validIndexes = tf.validRowsIndex,
- validIdxLen = validIndexes.length,
- pagingEndRow = parseInt(paging.startPagingRow, 10) + parseInt(paging.pageLength, 10);
- var rowIndex = row.rowIndex;
-
- if (rowIndex === validIndexes[validIdxLen - 1] && paging.currentPageNb !== paging.nbPages) {
- paging.setPage('last');
- } else if (rowIndex === validIndexes[0] && paging.currentPageNb !== 1) {
- paging.setPage('first');
- } else if (rowIndex > validIndexes[pagingEndRow - 1] && rowIndex < validIndexes[validIdxLen - 1]) {
- paging.setPage('next');
- } else if (rowIndex < validIndexes[paging.startPagingRow] && rowIndex > validIndexes[0]) {
- paging.setPage('previous');
- }
- }
- }
- }; //Selected row needs to be visible when paging is activated
-
-
- if (tf.paging) {
- tf.feature('paging').onAfterChangePage = function (paging) {
- var advGrid = paging.tf.extension('advancedGrid');
- var et = advGrid._ezEditTable;
- var slc = et.Selection;
- /* eslint-disable */
-
- var row = slc.GetActiveRow();
- /* eslint-enable */
-
- if (row) {
- row.scrollIntoView(false);
- }
- /* eslint-disable */
-
-
- var cell = slc.GetActiveCell();
- /* eslint-enable */
-
- if (cell) {
- cell.scrollIntoView(false);
- }
- };
- } //Rows navigation when rows are filtered is performed with the
- //EditTable row selection callback events
-
-
- if (cfg.default_selection === 'row') {
- var fnB = cfg.on_before_selected_row;
-
- cfg.on_before_selected_row = function () {
- var args = arguments;
- onBeforeSelection(args[0], args[1], args[2]);
-
- if (fnB) {
- fnB.call(null, args[0], args[1], args[2]);
- }
- };
-
- var fnA = cfg.on_after_selected_row;
-
- cfg.on_after_selected_row = function () {
- var args = arguments;
- onAfterSelection(args[0], args[1], args[2]);
-
- if (fnA) {
- fnA.call(null, args[0], args[1], args[2]);
- }
- };
- } else {
- var fnD = cfg.on_before_selected_cell;
-
- cfg.on_before_selected_cell = function () {
- var args = arguments;
- onBeforeSelection(args[0], args[1], args[2]);
-
- if (fnD) {
- fnD.call(null, args[0], args[1], args[2]);
- }
- };
-
- var fnC = cfg.on_after_selected_cell;
-
- cfg.on_after_selected_cell = function () {
- var args = arguments;
- onAfterSelection(args[0], args[1], args[2]);
-
- if (fnC) {
- fnC.call(null, args[0], args[1], args[2]);
- }
- };
- }
- }
-
- if (editable) {
- //Added or removed rows, TF rows number needs to be re-calculated
- var fnE = cfg.on_added_dom_row;
-
- cfg.on_added_dom_row = function () {
- var args = arguments;
- tf.nbFilterableRows++;
-
- if (!tf.paging) {
- tf.emitter.emit('rows-changed', tf, this);
- } else {
- tf.nbFilterableRows++;
- tf.paging = false;
- tf.feature('paging').destroy();
- tf.feature('paging').reset();
- }
-
- if (tf.alternateRows) {
- tf.feature('alternateRows').init();
- }
-
- if (fnE) {
- fnE.call(null, args[0], args[1], args[2]);
- }
- };
-
- if (cfg.actions && cfg.actions['delete']) {
- var fnF = cfg.actions['delete'].on_after_submit;
-
- cfg.actions['delete'].on_after_submit = function () {
- var args = arguments;
- tf.nbFilterableRows--;
-
- if (!tf.paging) {
- tf.emitter.emit('rows-changed', tf, this);
- } else {
- tf.nbFilterableRows--;
- tf.paging = false;
- tf.feature('paging').destroy();
- tf.feature('paging').reset(false);
- }
-
- if (tf.alternateRows) {
- tf.feature('alternateRows').init();
- }
-
- if (fnF) {
- fnF.call(null, args[0], args[1]);
- }
- };
- }
- }
-
- try {
- /* eslint-disable */
- this._ezEditTable = new EditTable(tf.id, cfg, startRow);
-
- this._ezEditTable.Init();
- /* eslint-enable */
-
- } catch (e) {
- throw new Error(INSTANTIATION_ERROR);
- }
-
- this.initialized = true;
- }
- /**
- * Reset advanced grid when previously removed
- */
-
- }, {
- key: "reset",
- value: function reset() {
- var ezEditTable = this._ezEditTable;
-
- if (ezEditTable) {
- if (this.cfg.selection) {
- /* eslint-disable */
- ezEditTable.Selection.Set();
- /* eslint-enable */
- }
-
- if (this.cfg.editable) {
- /* eslint-disable */
- ezEditTable.Editable.Set();
- /* eslint-enable */
- }
- }
- }
- /**
- * Toggle behaviour
- */
-
- }, {
- key: "toggle",
- value: function toggle() {
- var ezEditTable = this._ezEditTable;
-
- if (ezEditTable.editable) {
- /* eslint-disable */
- ezEditTable.Editable.Remove();
- /* eslint-enable */
- } else {
- /* eslint-disable */
- ezEditTable.Editable.Set();
- /* eslint-enable */
- }
-
- if (ezEditTable.selection) {
- /* eslint-disable */
- ezEditTable.Selection.Remove();
- /* eslint-enable */
- } else {
- /* eslint-disable */
- ezEditTable.Selection.Set();
- /* eslint-enable */
- }
- }
- }, {
- key: "_toggleForInputFilter",
- value: function _toggleForInputFilter() {
- var tf = this.tf;
-
- if (!tf.getActiveFilterId()) {
- return;
- }
-
- var colIndex = tf.getColumnIndexFromFilterId(tf.getActiveFilterId());
- var filterType = tf.getFilterType(colIndex);
-
- if (filterType === _const__WEBPACK_IMPORTED_MODULE_2__["INPUT"]) {
- this.toggle();
- }
- }
- /**
- * Remove advanced grid
- */
-
- }, {
- key: "destroy",
- value: function destroy() {
- var _this3 = this;
-
- if (!this.initialized) {
- return;
- }
-
- var ezEditTable = this._ezEditTable;
-
- if (ezEditTable) {
- if (this.cfg.selection) {
- /* eslint-disable */
- ezEditTable.Selection.ClearSelections();
- ezEditTable.Selection.Remove();
- /* eslint-enable */
- }
-
- if (this.cfg.editable) {
- /* eslint-disable */
- ezEditTable.Editable.Remove();
- /* eslint-enable */
- }
- }
-
- this.emitter.off(['filter-focus', 'filter-blur'], function () {
- return _this3._toggleForInputFilter();
- });
- this.initialized = false;
- }
- }]);
-
- return AdapterEzEditTable;
-}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]);
-
-
-
-/***/ }),
-
-/***/ "./src/extensions/advancedGrid/advancedGrid.js":
-/*!*****************************************************!*\
- !*** ./src/extensions/advancedGrid/advancedGrid.js ***!
- \*****************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _adapterEzEditTable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adapterEzEditTable */ "./src/extensions/advancedGrid/adapterEzEditTable.js");
-
-/* harmony default export */ __webpack_exports__["default"] = (_adapterEzEditTable__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/extensions/colOps/colOps.js":
-/*!*****************************************!*\
- !*** ./src/extensions/colOps/colOps.js ***!
- \*****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ColOps; });
-/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js");
-/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js");
-/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types */ "./src/types.js");
-/* harmony import */ var _sort__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../sort */ "./src/sort.js");
-/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../const */ "./src/const.js");
-/* harmony import */ var format_number__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! format-number */ "./node_modules/format-number/index.js");
-/* harmony import */ var format_number__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(format_number__WEBPACK_IMPORTED_MODULE_5__);
-/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../settings */ "./src/settings.js");
-/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../event */ "./src/event.js");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
-
-function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
-
-function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-
-
-
-
-
-
-
-
-var EVENTS = ['after-filtering', 'after-page-change', 'after-page-length-change'];
-var SUM = 'sum';
-var MEAN = 'mean';
-var MIN = 'min';
-var MAX = 'max';
-var MEDIAN = 'median';
-var Q1 = 'q1';
-var Q3 = 'q3';
-/**
- * Column calculations extension
- */
-
-var ColOps =
-/*#__PURE__*/
-function (_Feature) {
- _inherits(ColOps, _Feature);
-
- /**
- * Creates an instance of ColOps
- *
- * @param {TableFilter} tf TableFilter instance
- * @param {Object} opts Configuration object
- */
- function ColOps(tf, opts) {
- var _this;
-
- _classCallCheck(this, ColOps);
-
- _this = _possibleConstructorReturn(this, _getPrototypeOf(ColOps).call(this, tf, opts.name));
- /**
- * Callback fired before columns operations start
- * @type {Function}
- */
-
- _this.onBeforeOperation = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_before_operation, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after columns operations are completed
- * @type {Function}
- */
-
- _this.onAfterOperation = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_after_operation, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Configuration options
- * @type {Object}
- */
-
- _this.opts = opts;
- /**
- * List of DOM element IDs containing column's calculation result
- * @type {Array}
- */
-
- _this.labelIds = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.id, []);
- /**
- * List of columns' indexes for calculations
- * @type {Array}
- */
-
- _this.colIndexes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.col, []);
- /**
- * List of operations - possible values: 'sum', 'mean', 'min', 'max',
- * 'median', 'q1', 'q3'
- * @type {Array}
- */
-
- _this.operations = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.operation, []);
- /**
- * List of write methods used to write the result - possible values:
- * 'innerHTML', 'setValue', 'createTextNode'
- * @type {Array}
- */
-
- _this.outputTypes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.write_method, []);
- /**
- * List of format objects used for formatting the result -
- * refer to https://github.com/componitable/format-number to check
- * configuration options
- * @type {Array}
- */
-
- _this.formatResults = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.format_result, []);
- /**
- * List of row indexes displaying the results
- * @type {Array}
- */
-
- _this.totRowIndexes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.tot_row_index, []);
- /**
- * List of row indexes excluded from calculations
- * @type {Array}
- */
-
- _this.excludeRows = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.exclude_row, []);
- /**
- * List of decimal precision for calculation results
- * @type {Array}
- */
-
- _this.decimalPrecisions = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.decimal_precision, 2);
-
- _this.enable();
-
- return _this;
- }
- /**
- * Initializes ColOps instance
- */
-
-
- _createClass(ColOps, [{
- key: "init",
- value: function init() {
- if (this.initialized) {
- return;
- } // subscribe to events
-
-
- this.emitter.on(EVENTS, Object(_event__WEBPACK_IMPORTED_MODULE_7__["bound"])(this.calcAll, this));
- this.calcAll();
- /** @inherited */
-
- this.initialized = true;
- }
- /**
- * Calculates columns' values
- * Configuration options are stored in 'opts' property
- * - 'id' contains ids of elements showing result (array)
- * - 'col' contains the columns' indexes (array)
- * - 'operation' contains operation type (array, values: 'sum', 'mean',
- * 'min', 'max', 'median', 'q1', 'q3')
- * - 'write_method' array defines which method to use for displaying the
- * result (innerHTML, setValue, createTextNode) - default: 'innerHTML'
- * - 'tot_row_index' defines in which row results are displayed
- * (integers array)
- *
- * - changes made by Nuovella:
- * (1) optimized the routine (now it will only process each column once),
- * (2) added calculations for the median, lower and upper quartile.
- */
-
- }, {
- key: "calcAll",
- value: function calcAll() {
- var tf = this.tf;
-
- if (!tf.isInitialized()) {
- return;
- }
-
- this.onBeforeOperation(tf, this);
- this.emitter.emit('before-column-operation', tf, this);
- var colIndexes = this.colIndexes,
- colOperations = this.operations,
- outputTypes = this.outputTypes,
- totRowIndexes = this.totRowIndexes,
- excludeRows = this.excludeRows,
- formatResults = this.formatResults,
- decimalPrecisions = this.decimalPrecisions; //nuovella: determine unique list of columns to operate on
-
- var uIndexes = [];
- colIndexes.forEach(function (val) {
- if (uIndexes.indexOf(val) === -1) {
- uIndexes.push(val);
- }
- });
- var nbCols = uIndexes.length,
- rows = tf.dom().rows,
- colValues = [];
-
- for (var u = 0; u < nbCols; u++) {
- //this retrieves col values
- //use uIndexes because we only want to pass through this loop
- //once for each column get the values in this unique column
- colValues.push(tf.getVisibleColumnData(uIndexes[u], false, excludeRows));
- var curValues = colValues[u]; //next: calculate all operations for this column
-
- var result = 0,
- operations = [],
- precisions = [],
- labels = [],
- writeType = void 0,
- formatResult = [],
- idx = 0;
-
- for (var k = 0; k < colIndexes.length; k++) {
- if (colIndexes[k] !== uIndexes[u]) {
- continue;
- }
-
- operations[idx] = (colOperations[k] || 'sum').toLowerCase();
- precisions[idx] = decimalPrecisions[k];
- labels[idx] = this.labelIds[k];
- writeType = Object(_types__WEBPACK_IMPORTED_MODULE_2__["isArray"])(outputTypes) ? outputTypes[k] : null;
- formatResult[idx] = this.configureFormat(uIndexes[u], formatResults[k]);
- idx++;
- }
-
- for (var i = 0; i < idx; i++) {
- // emit values before column calculation
- this.emitter.emit('before-column-calc', tf, this, uIndexes[u], curValues, operations[i], precisions[i]);
- result = Number(this.calc(curValues, operations[i], null)); // emit column calculation result
-
- this.emitter.emit('column-calc', tf, this, uIndexes[u], result, operations[i], precisions[i]); // write result in expected DOM element
-
- this.writeResult(result, labels[i], writeType, precisions[i], formatResult[i]);
- } //for i
- // row(s) with result are always visible
-
-
- var totRow = totRowIndexes && totRowIndexes[u] ? rows[totRowIndexes[u]] : null;
-
- if (totRow) {
- totRow.style.display = '';
- }
- } //for u
-
-
- this.onAfterOperation(tf, this);
- this.emitter.emit('after-column-operation', tf, this);
- }
- /**
- * Make desired calculation on specified column.
- * @param {Number} colIndex Column index
- * @param {String} [operation=SUM] Operation type
- * @param {Number} precision Decimal precision
- * @returns {Number}
- */
-
- }, {
- key: "columnCalc",
- value: function columnCalc(colIndex) {
- var operation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SUM;
- var precision = arguments.length > 2 ? arguments[2] : undefined;
- var excludeRows = this.excludeRows || [];
- var colValues = tf.getVisibleColumnData(colIndex, false, excludeRows);
- return Number(this.calc(colValues, operation, precision));
- }
- /**
- * Make calculation on passed values.
- * @param {Array} values List of values
- * @param {String} [operation=SUM] Optional operation type
- * @param {Number} precision Optional result precision
- * @returns {Number}
- * @private
- */
-
- }, {
- key: "calc",
- value: function calc(colValues) {
- var operation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SUM;
- var precision = arguments.length > 2 ? arguments[2] : undefined;
- var result = 0;
-
- if (operation === Q1 || operation === Q3 || operation === MEDIAN) {
- colValues = this.sortColumnValues(colValues, _sort__WEBPACK_IMPORTED_MODULE_3__["numSortAsc"]);
- }
-
- switch (operation) {
- case MEAN:
- result = this.calcMean(colValues);
- break;
-
- case SUM:
- result = this.calcSum(colValues);
- break;
-
- case MIN:
- result = this.calcMin(colValues);
- break;
-
- case MAX:
- result = this.calcMax(colValues);
- break;
-
- case MEDIAN:
- result = this.calcMedian(colValues);
- break;
-
- case Q1:
- result = this.calcQ1(colValues);
- break;
-
- case Q3:
- result = this.calcQ3(colValues);
- break;
- }
-
- return Object(_types__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(precision) ? result : result.toFixed(precision);
- }
- /**
- * Calculate the sum of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcSum",
- value: function calcSum() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
-
- if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(values)) {
- return 0;
- }
-
- var result = values.reduce(function (x, y) {
- return Number(x) + Number(y);
- });
- return result;
- }
- /**
- * Calculate the mean of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcMean",
- value: function calcMean() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var result = this.calcSum(values) / values.length;
- return Number(result);
- }
- /**
- * Calculate the max value of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcMax",
- value: function calcMax() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- return Math.max.apply(null, values);
- }
- /**
- * Calculate the min value of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcMin",
- value: function calcMin() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- return Math.min.apply(null, values);
- }
- /**
- * Calculate the median of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcMedian",
- value: function calcMedian() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var nbValues = values.length;
- var aux = 0;
-
- if (nbValues % 2 === 1) {
- aux = Math.floor(nbValues / 2);
- return Number(values[aux]);
- }
-
- return (Number(values[nbValues / 2]) + Number(values[nbValues / 2 - 1])) / 2;
- }
- /**
- * Calculate the lower quartile of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcQ1",
- value: function calcQ1() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var nbValues = values.length;
- var posa = 0.0;
- posa = Math.floor(nbValues / 4);
-
- if (4 * posa === nbValues) {
- return (Number(values[posa - 1]) + Number(values[posa])) / 2;
- }
-
- return Number(values[posa]);
- }
- /**
- * Calculate the upper quartile of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcQ3",
- value: function calcQ3() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var nbValues = values.length;
- var posa = 0.0;
- var posb = 0.0;
- posa = Math.floor(nbValues / 4);
-
- if (4 * posa === nbValues) {
- posb = 3 * posa;
- return (Number(values[posb]) + Number(values[posb - 1])) / 2;
- }
-
- return Number(values[nbValues - posa - 1]);
- }
- /**
- * Sort passed values with supplied sorter function.
- * @param {Array} [values=[]] List of values to be sorted
- * @param {Function} sorter Sorter function
- * @returns {Array}
- */
-
- }, {
- key: "sortColumnValues",
- value: function sortColumnValues() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var sorter = arguments.length > 1 ? arguments[1] : undefined;
- return values.sort(sorter);
- }
- /**
- * Write calculation result in passed DOM element with supplied write method
- * and decimal precision.
- * @param {Number} [result=0] Calculation result
- * @param {DOMElement} label DOM element
- * @param {String} [writeType='innerhtml'] Write method
- * @param {Number} [precision=2] Applied decimal precision
- * @private
- */
-
- }, {
- key: "writeResult",
- value: function writeResult() {
- var result = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
- var label = arguments.length > 1 ? arguments[1] : undefined;
- var writeType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'innerhtml';
- var precision = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 2;
- var format = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
- var labelElm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(label);
-
- if (!labelElm) {
- return;
- }
-
- result = result.toFixed(precision);
-
- if (isNaN(result) || !isFinite(result)) {
- result = '';
- } else {
- result = format_number__WEBPACK_IMPORTED_MODULE_5___default()(format)(result);
- }
-
- switch (writeType.toLowerCase()) {
- case 'innerhtml':
- labelElm.innerHTML = result;
- break;
-
- case 'setvalue':
- labelElm.value = result;
- break;
-
- case 'createtextnode':
- var oldNode = labelElm.firstChild;
- var txtNode = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createText"])(result);
- labelElm.replaceChild(txtNode, oldNode);
- break;
- }
- }
- /**
- * Configure the format options used to format the operation result based
- * on column type.
- * @param {Number} colIndex Column index
- * @param {Object} [format={}] Format object
- * @returns {Object}
- * @private
- */
-
- }, {
- key: "configureFormat",
- value: function configureFormat(colIndex) {
- var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- var tf = this.tf;
-
- if (tf.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_4__["FORMATTED_NUMBER"]])) {
- var colType = tf.colTypes[colIndex];
-
- if (colType.decimal && !format.decimal) {
- format.decimal = colType.decimal;
- }
-
- if (colType.thousands && !format.integerSeparator) {
- format.integerSeparator = colType.thousands;
- }
- } else {
- format.decimal = format.decimal || '';
- format.integerSeparator = format.integerSeparator || '';
- }
-
- return format;
- }
- /** Remove extension */
-
- }, {
- key: "destroy",
- value: function destroy() {
- if (!this.initialized) {
- return;
- } // unsubscribe to events
-
-
- this.emitter.off(EVENTS, Object(_event__WEBPACK_IMPORTED_MODULE_7__["bound"])(this.calcAll, this));
- this.initialized = false;
- }
- }]);
-
- return ColOps;
-}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]);
-
-
-
-/***/ }),
-
-/***/ "./src/extensions/colsVisibility/colsVisibility.js":
-/*!*********************************************************!*\
- !*** ./src/extensions/colsVisibility/colsVisibility.js ***!
- \*********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ColsVisibility; });
-/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js");
-/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js");
-/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types */ "./src/types.js");
-/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../event */ "./src/event.js");
-/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../root */ "./src/root.js");
-/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../const */ "./src/const.js");
-/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../settings */ "./src/settings.js");
-/* harmony import */ var _modules_toolbar__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../modules/toolbar */ "./src/modules/toolbar.js");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
-
-function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
-
-function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-
-
-
-
-
-
-
-
-/**
- * Columns Visibility extension
- */
-
-var ColsVisibility =
-/*#__PURE__*/
-function (_Feature) {
- _inherits(ColsVisibility, _Feature);
-
- /**
- * Creates an instance of ColsVisibility
- * @param {TableFilter} tf TableFilter instance
- * @param {Object} Configuration object
- */
- function ColsVisibility(tf, f) {
- var _this;
-
- _classCallCheck(this, ColsVisibility);
-
- _this = _possibleConstructorReturn(this, _getPrototypeOf(ColsVisibility).call(this, tf, f.name)); // Configuration object
-
- var cfg = _this.config;
- /**
- * Module name
- * @type {String}
- */
-
- _this.name = f.name;
- /**
- * Module description
- * @type {String}
- */
-
- _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.description, 'Columns visibility manager');
- /**
- * show/hide columns container element
- * @private
- */
-
- _this.spanEl = null;
- /**
- * show/hide columns button element
- * @private
- */
-
- _this.btnEl = null;
- /**
- * show/hide columns main container element
- * @private
- */
-
- _this.contEl = null;
- /**
- * Enable tick to hide a column, defaults to true
- * @type {Boolean}
- */
-
- _this.tickToHide = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsBool"])(f.tick_to_hide, true);
- /**
- * Enable columns manager UI, defaults to true
- * @type {Boolean}
- */
-
- _this.manager = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsBool"])(f.manager, true);
- /**
- * Headers HTML table reference only if headers are external
- * @type {DOMElement}
- */
-
- _this.headersTbl = f.headers_table || null;
- /**
- * Headers row index only if headers are external
- * @type {Number}
- */
-
- _this.headersIndex = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsNb"])(f.headers_index, 1);
- /**
- * ID of main container element
- * @type {String}
- */
-
- _this.contElTgtId = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.container_target_id, null);
- /**
- * Alternative text for column headers in column manager UI
- * @type {Array}
- */
-
- _this.headersText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(f.headers_text, []);
- /**
- * ID of button's container element
- * @type {String}
- */
-
- _this.btnTgtId = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_target_id, null);
- /**
- * Button's text, defaults to Columns▼
- * @type {String}
- */
-
- _this.btnText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_text, 'Columns▼');
- /**
- * Button's inner HTML
- * @type {String}
- */
-
- _this.btnHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_html, null);
- /**
- * Css class for button
- * @type {String}
- */
-
- _this.btnCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_css_class, 'colVis');
- /**
- * Columns manager UI close link text, defaults to 'Close'
- * @type {String}
- */
-
- _this.btnCloseText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_close_text, 'Close');
- /**
- * Columns manager UI close link HTML
- * @type {String}
- */
-
- _this.btnCloseHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_close_html, null);
- /**
- * Css for columns manager UI close link
- * @type {String}
- */
-
- _this.btnCloseCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_close_css_class, _this.btnCssClass);
- /**
- * Extension's stylesheet filename
- * @type {String}
- */
-
- _this.stylesheet = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.stylesheet, 'colsVisibility.css');
- /**
- * Css for columns manager UI span
- * @type {String}
- */
-
- _this.spanCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.span_css_class, 'colVisSpan');
- /**
- * Css for columns manager UI main container
- * @type {String}
- */
-
- _this.contCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.cont_css_class, 'colVisCont');
- /**
- * Css for columns manager UI checklist (ul)
- * @type {String}
- */
-
- _this.listCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(cfg.list_css_class, 'cols_checklist');
- /**
- * Css for columns manager UI checklist item (li)
- * @type {String}
- */
-
- _this.listItemCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(cfg.checklist_item_css_class, 'cols_checklist_item');
- /**
- * Css for columns manager UI checklist item selected state (li)
- * @type {String}
- */
-
- _this.listSlcItemCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(cfg.checklist_selected_item_css_class, 'cols_checklist_slc_item');
- /**
- * Text preceding the columns list, defaults to 'Hide' or 'Show'
- * depending on tick mode (tick_to_hide option)
- * @type {String}
- */
-
- _this.text = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.text, _this.tickToHide ? 'Hide: ' : 'Show: ');
- /**
- * List of columns indexes to be hidden at initialization
- * @type {Array}
- */
-
- _this.atStart = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(f.at_start, []);
- /**
- * Enable hover behaviour on columns manager button/link
- * @type {Boolean}
- */
-
- _this.enableHover = Boolean(f.enable_hover);
- /**
- * Enable select all option, disabled by default
- * @type {Boolean}
- */
-
- _this.enableTickAll = Boolean(f.enable_tick_all);
- /**
- * Text for select all option, defaults to 'Select all:'
- * @type {String}
- */
-
- _this.tickAllText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.tick_all_text, 'Select all:');
- /**
- * Default position in toolbar ('left'|'center'|'right')
- * @type {String}
- */
-
- _this.toolbarPosition = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.toolbar_position, _modules_toolbar__WEBPACK_IMPORTED_MODULE_7__["RIGHT"]);
- /**
- * List of indexes of hidden columns
- * @private
- */
-
- _this.hiddenCols = [];
- /**
- * Bound mouseup wrapper
- * @private
- */
-
- _this.boundMouseup = null;
- /**
- * Callback fired when the extension is initialized
- * @type {Function}
- */
-
- _this.onLoaded = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_loaded, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired before the columns manager is opened
- * @type {Function}
- */
-
- _this.onBeforeOpen = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_open, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after the columns manager is opened
- * @type {Function}
- */
-
- _this.onAfterOpen = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_open, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired before the columns manager is closed
- * @type {Function}
- */
-
- _this.onBeforeClose = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_close, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after the columns manager is closed
- * @type {Function}
- */
-
- _this.onAfterClose = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_close, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired before a column is hidden
- * @type {Function}
- */
-
- _this.onBeforeColHidden = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_col_hidden, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after a column is hidden
- * @type {Function}
- */
-
- _this.onAfterColHidden = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_col_hidden, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired before a column is displayed
- * @type {Function}
- */
-
- _this.onBeforeColDisplayed = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_col_displayed, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after a column is displayed
- * @type {Function}
- */
-
- _this.onAfterColDisplayed = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_col_displayed, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); //Grid layout support
-
- if (tf.gridLayout) {
- _this.headersTbl = tf.feature('gridLayout').headTbl; //headers table
-
- _this.headersIndex = 0; //headers index
- } //Loads extension stylesheet
-
-
- tf.import(f.name + 'Style', tf.getStylePath() + _this.stylesheet, null, 'link');
-
- _this.enable();
-
- return _this;
- }
- /**
- * Mouse-up event handler handling popup auto-close behaviour
- * @private
- */
-
-
- _createClass(ColsVisibility, [{
- key: "onMouseup",
- value: function onMouseup(evt) {
- var targetElm = Object(_event__WEBPACK_IMPORTED_MODULE_3__["targetEvt"])(evt);
-
- while (targetElm && targetElm !== this.contEl && targetElm !== this.btnEl) {
- targetElm = targetElm.parentNode;
- }
-
- if (targetElm !== this.contEl && targetElm !== this.btnEl) {
- this.toggle();
- }
-
- return;
- }
- /**
- * Toggle columns manager UI
- */
-
- }, {
- key: "toggle",
- value: function toggle() {
- // ensure mouseup event handler is removed
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["removeEvt"])(_root__WEBPACK_IMPORTED_MODULE_4__["root"], 'mouseup', this.boundMouseup);
- var contDisplay = this.contEl.style.display;
-
- if (contDisplay !== 'inline') {
- this.onBeforeOpen(this);
- }
-
- if (contDisplay === 'inline') {
- this.onBeforeClose(this);
- }
-
- this.contEl.style.display = contDisplay === 'inline' ? _const__WEBPACK_IMPORTED_MODULE_5__["NONE"] : 'inline';
-
- if (contDisplay !== 'inline') {
- this.onAfterOpen(this);
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(_root__WEBPACK_IMPORTED_MODULE_4__["root"], 'mouseup', this.boundMouseup);
- }
-
- if (contDisplay === 'inline') {
- this.onAfterClose(this);
- }
- }
- /**
- * Check an item in columns manager UI
- * @private
- */
-
- }, {
- key: "checkItem",
- value: function checkItem(lbl) {
- var li = lbl.parentNode;
-
- if (!li || !lbl) {
- return;
- }
-
- var isChecked = lbl.firstChild.checked;
- var colIndex = lbl.firstChild.getAttribute('id').split('_')[1];
- colIndex = parseInt(colIndex, 10);
-
- if (isChecked) {
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(li, this.listSlcItemCssClass);
- } else {
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeClass"])(li, this.listSlcItemCssClass);
- }
-
- var hide = false;
-
- if (this.tickToHide && isChecked || !this.tickToHide && !isChecked) {
- hide = true;
- }
-
- this.setHidden(colIndex, hide);
- }
- /**
- * Initializes ColsVisibility instance
- */
-
- }, {
- key: "init",
- value: function init() {
- var _this2 = this;
-
- if (this.initialized || !this.manager) {
- return;
- }
-
- this.emitter.emit('initializing-extension', this, !Object(_types__WEBPACK_IMPORTED_MODULE_2__["isNull"])(this.btnTgtId));
- this.emitter.on(['hide-column'], function (tf, colIndex) {
- return _this2.hideCol(colIndex);
- });
- this.buildBtn();
- this.buildManager();
- /** @inherited */
-
- this.initialized = true;
- this.boundMouseup = this.onMouseup.bind(this);
- this.emitter.emit('columns-visibility-initialized', this.tf, this);
- this.emitter.emit('extension-initialized', this); // Hide columns at start at very end of initialization, do not move
- // as order is important
-
- this._hideAtStart();
- }
- /**
- * Build main button UI
- */
-
- }, {
- key: "buildBtn",
- value: function buildBtn() {
- var _this3 = this;
-
- if (this.btnEl) {
- return;
- }
-
- var tf = this.tf;
- var span = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span');
- span.className = this.spanCssClass; // Container element (rdiv or custom element)
-
- var targetEl = !this.btnTgtId ? tf.feature('toolbar').container(this.toolbarPosition) : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.btnTgtId);
-
- if (!this.btnTgtId) {
- var firstChild = targetEl.firstChild;
- firstChild.parentNode.insertBefore(span, firstChild);
- } else {
- targetEl.appendChild(span);
- }
-
- if (!this.btnHtml) {
- var btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:;']);
- btn.className = this.btnCssClass;
- btn.title = this.desc;
- btn.innerHTML = this.btnText;
- span.appendChild(btn);
-
- if (!this.enableHover) {
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function (evt) {
- return _this3.toggle(evt);
- });
- } else {
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'mouseover', function (evt) {
- return _this3.toggle(evt);
- });
- }
- } else {
- // Custom html
- span.innerHTML = this.btnHtml;
- var colVisEl = span.firstChild;
-
- if (!this.enableHover) {
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(colVisEl, 'click', function (evt) {
- return _this3.toggle(evt);
- });
- } else {
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(colVisEl, 'mouseover', function (evt) {
- return _this3.toggle(evt);
- });
- }
- }
-
- this.spanEl = span;
- this.btnEl = this.spanEl.firstChild;
- this.onLoaded(this);
- }
- /**
- * Build columns manager UI
- */
-
- }, {
- key: "buildManager",
- value: function buildManager() {
- var _this4 = this;
-
- var tf = this.tf;
- var container = !this.contElTgtId ? Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('div') : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contElTgtId);
- container.className = this.contCssClass; //Extension description
-
- var extNameLabel = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('p');
- extNameLabel.innerHTML = this.text;
- container.appendChild(extNameLabel); //Headers list
-
- var ul = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('ul');
- ul.className = this.listCssClass;
- var tbl = this.headersTbl || tf.dom();
- var headerIndex = this.headersTbl ? this.headersIndex : tf.getHeadersRowIndex();
- var headerRow = tbl.rows[headerIndex]; //Tick all option
-
- if (this.enableTickAll) {
- var li = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createCheckItem"])('col__' + tf.id, this.tickAllText, this.tickAllText);
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(li, this.listItemCssClass);
- ul.appendChild(li);
- li.check.checked = !this.tickToHide;
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(li.check, 'click', function () {
- for (var h = 0; h < headerRow.cells.length; h++) {
- var itm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])('col_' + h + '_' + tf.id);
-
- if (itm && li.check.checked !== itm.checked) {
- itm.click();
- itm.checked = li.check.checked;
- }
- }
- });
- }
-
- for (var i = 0; i < headerRow.cells.length; i++) {
- var cell = headerRow.cells[i];
-
- var cellText = this.headersText[i] || this._getHeaderText(cell);
-
- var liElm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createCheckItem"])('col_' + i + '_' + tf.id, cellText, cellText);
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(liElm, this.listItemCssClass);
-
- if (!this.tickToHide) {
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(liElm, this.listSlcItemCssClass);
- }
-
- ul.appendChild(liElm);
-
- if (!this.tickToHide) {
- liElm.check.checked = true;
- }
-
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(liElm.check, 'click', function (evt) {
- var elm = Object(_event__WEBPACK_IMPORTED_MODULE_3__["targetEvt"])(evt);
- var lbl = elm.parentNode;
-
- _this4.checkItem(lbl);
- });
- } //separator
-
-
- var p = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('p', ['align', 'center']);
- var btn; //Close link
-
- if (!this.btnCloseHtml) {
- btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:;']);
- btn.className = this.btnCloseCssClass;
- btn.innerHTML = this.btnCloseText;
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function (evt) {
- return _this4.toggle(evt);
- });
- p.appendChild(btn);
- } else {
- p.innerHTML = this.btnCloseHtml;
- btn = p.firstChild;
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function (evt) {
- return _this4.toggle(evt);
- });
- }
-
- container.appendChild(ul);
- container.appendChild(p);
- this.btnEl.parentNode.insertBefore(container, this.btnEl);
- this.contEl = container;
- }
- /**
- * Hide or show specified columns
- * @param {Number} colIndex Column index
- * @param {Boolean} hide Hide column if true or show if false
- */
-
- }, {
- key: "setHidden",
- value: function setHidden(colIndex, hide) {
- var tf = this.tf;
- var tbl = tf.dom();
-
- if (hide) {
- this.onBeforeColHidden(this, colIndex);
- } else {
- this.onBeforeColDisplayed(this, colIndex);
- }
-
- this._hideElements(tbl, colIndex, hide);
-
- if (this.headersTbl) {
- this._hideElements(this.headersTbl, colIndex, hide);
- }
-
- var hiddenCols = this.hiddenCols;
- var itemIndex = hiddenCols.indexOf(colIndex);
-
- if (hide) {
- if (itemIndex === -1) {
- this.hiddenCols.push(colIndex);
- }
- } else {
- if (itemIndex !== -1) {
- this.hiddenCols.splice(itemIndex, 1);
- }
- }
-
- if (hide) {
- this.onAfterColHidden(this, colIndex);
- this.emitter.emit('column-hidden', tf, this, colIndex, this.hiddenCols);
- } else {
- this.onAfterColDisplayed(this, colIndex);
- this.emitter.emit('column-shown', tf, this, colIndex, this.hiddenCols);
- }
- }
- /**
- * Show specified column
- * @param {Number} colIndex Column index
- */
-
- }, {
- key: "showCol",
- value: function showCol(colIndex) {
- if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isUndef"])(colIndex) || !this.isColHidden(colIndex)) {
- return;
- }
-
- if (this.manager && this.contEl) {
- var itm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])('col_' + colIndex + '_' + this.tf.id);
-
- if (itm) {
- itm.click();
- }
- } else {
- this.setHidden(colIndex, false);
- }
- }
- /**
- * Hide specified column
- * @param {Number} colIndex Column index
- */
-
- }, {
- key: "hideCol",
- value: function hideCol(colIndex) {
- if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isUndef"])(colIndex) || this.isColHidden(colIndex)) {
- return;
- }
-
- if (this.manager && this.contEl) {
- var itm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])('col_' + colIndex + '_' + this.tf.id);
-
- if (itm) {
- itm.click();
- }
- } else {
- this.setHidden(colIndex, true);
- }
- }
- /**
- * Determine if specified column is hidden
- * @param {Number} colIndex Column index
- */
-
- }, {
- key: "isColHidden",
- value: function isColHidden(colIndex) {
- if (this.hiddenCols.indexOf(colIndex) !== -1) {
- return true;
- }
-
- return false;
- }
- /**
- * Toggle visibility of specified column
- * @param {Number} colIndex Column index
- */
-
- }, {
- key: "toggleCol",
- value: function toggleCol(colIndex) {
- if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isUndef"])(colIndex) || this.isColHidden(colIndex)) {
- this.showCol(colIndex);
- } else {
- this.hideCol(colIndex);
- }
- }
- /**
- * Return the indexes of the columns currently hidden
- * @return {Array} column indexes
- */
-
- }, {
- key: "getHiddenCols",
- value: function getHiddenCols() {
- return this.hiddenCols;
- }
- /**
- * Remove the columns manager
- */
-
- }, {
- key: "destroy",
- value: function destroy() {
- var _this5 = this;
-
- if (!this.initialized) {
- return;
- }
-
- if (Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contElTgtId)) {
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contElTgtId).innerHTML = '';
- } else {
- this.contEl.innerHTML = '';
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.contEl);
- this.contEl = null;
- }
-
- this.btnEl.innerHTML = '';
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.btnEl);
- this.btnEl = null;
- this.emitter.off(['hide-column'], function (tf, colIndex) {
- return _this5.hideCol(colIndex);
- });
- this.boundMouseup = null;
- this.initialized = false;
- }
- }, {
- key: "_getHeaderText",
- value: function _getHeaderText(cell) {
- if (!cell.hasChildNodes) {
- return '';
- }
-
- for (var i = 0; i < cell.childNodes.length; i++) {
- var n = cell.childNodes[i];
-
- if (n.nodeType === 3) {
- return n.nodeValue;
- } else if (n.nodeType === 1) {
- if (n.id && n.id.indexOf('popUp') !== -1) {
- continue;
- } else {
- return Object(_dom__WEBPACK_IMPORTED_MODULE_1__["getText"])(n);
- }
- }
-
- continue;
- }
-
- return '';
- }
- }, {
- key: "_hideElements",
- value: function _hideElements(tbl, colIdx, hide) {
- this._hideCells(tbl, colIdx, hide);
-
- this._hideCol(tbl, colIdx, hide);
- }
- }, {
- key: "_hideCells",
- value: function _hideCells(tbl, colIdx, hide) {
- for (var i = 0; i < tbl.rows.length; i++) {
- var row = tbl.rows[i];
- var cell = row.cells[colIdx];
-
- if (cell) {
- cell.style.display = hide ? _const__WEBPACK_IMPORTED_MODULE_5__["NONE"] : '';
- }
- }
- }
- }, {
- key: "_hideCol",
- value: function _hideCol(tbl, colIdx, hide) {
- var colElms = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(tbl, 'col');
-
- if (colElms.length === 0) {
- return;
- }
-
- colElms[colIdx].style.display = hide ? _const__WEBPACK_IMPORTED_MODULE_5__["NONE"] : '';
- }
- }, {
- key: "_hideAtStart",
- value: function _hideAtStart() {
- var _this6 = this;
-
- this.atStart.forEach(function (colIdx) {
- _this6.hideCol(colIdx);
- });
- }
- }]);
-
- return ColsVisibility;
-}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]);
-
-
-
-/***/ }),
-
-/***/ "./src/extensions/filtersVisibility/filtersVisibility.js":
-/*!***************************************************************!*\
- !*** ./src/extensions/filtersVisibility/filtersVisibility.js ***!
- \***************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return FiltersVisibility; });
-/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js");
-/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js");
-/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types */ "./src/types.js");
-/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../event */ "./src/event.js");
-/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../settings */ "./src/settings.js");
-/* harmony import */ var _modules_toolbar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../modules/toolbar */ "./src/modules/toolbar.js");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
-
-function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
-
-function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-
-
-
-
-
-
-/**
- * Filters Visibility extension
- */
-
-var FiltersVisibility =
-/*#__PURE__*/
-function (_Feature) {
- _inherits(FiltersVisibility, _Feature);
-
- /**
- * Creates an instance of FiltersVisibility
- * @param {TableFilter} tf TableFilter instance
- * @param {Object} Configuration object
- */
- function FiltersVisibility(tf, f) {
- var _this;
-
- _classCallCheck(this, FiltersVisibility);
-
- _this = _possibleConstructorReturn(this, _getPrototypeOf(FiltersVisibility).call(this, tf, f.name));
- /**
- * Module name
- * @type {String}
- */
-
- _this.name = f.name;
- /**
- * Module description
- * @type {String}
- */
-
- _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.description, 'Filters row visibility manager');
- /**
- * Extension's stylesheet filename
- * @type {String}
- */
-
- _this.stylesheet = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.stylesheet, 'filtersVisibility.css');
- /**
- * Expand icon filename
- * @type {String}
- */
-
- _this.icnExpand = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.expand_icon_name, 'icn_exp.png');
- /**
- * Collapse icon filename
- * @type {String}
- */
-
- _this.icnCollapse = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.collapse_icon_name, 'icn_clp.png');
- /**
- * Main container element
- * @private
- */
-
- _this.contEl = null;
- /**
- * Button element
- * @private
- */
-
- _this.btnEl = null;
- /**
- * Expand icon HTML
- * @private
- */
-
- _this.icnExpandHtml = '';
- /**
- * Collapse icon HTML
- * @private
- */
-
- _this.icnCollapseHtml = '';
- /**
- * Default text
- * @private
- */
-
- _this.defaultText = 'Toggle filters';
- /**
- * ID of main container element
- * @type {String}
- */
-
- _this.targetId = f.target_id || null;
- /**
- * Enable expand/collapse icon, defaults to true
- * @type {Boolean}
- */
-
- _this.enableIcon = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsBool"])(f.enable_icon, true);
- /**
- * Custom text for button
- * @type {String}
- */
-
- _this.btnText = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.btn_text, '');
- /**
- * Collapse button HTML
- * @private
- */
-
- _this.collapseBtnHtml = _this.enableIcon ? _this.icnCollapseHtml + _this.btnText : _this.btnText || _this.defaultText;
- /**
- * Expand button HTML
- * @private
- */
-
- _this.expandBtnHtml = _this.enableIcon ? _this.icnExpandHtml + _this.btnText : _this.btnText || _this.defaultText;
- /**
- * Button's custom HTML
- * @type {String}
- */
-
- _this.btnHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.btn_html, null);
- /**
- * Css class for expand/collapse filters button
- * @type {String}
- */
-
- _this.btnCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.btn_css_class, 'btnExpClpFlt');
- /**
- * Css class for main container
- * @type {String}
- */
-
- _this.contCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.cont_css_class, 'expClpFlt');
- /**
- * Filters row index
- * @type {Number}
- */
-
- _this.filtersRowIndex = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsNb"])(f.filters_row_index, tf.getFiltersRowIndex());
- /**
- * Make filters visible at initialization, defaults to true
- * @type {Boolean}
- */
-
- _this.visibleAtStart = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsNb"])(f.visible_at_start, true);
- /**
- * Default position in toolbar ('left'|'center'|'right')
- * @type {String}
- */
-
- _this.toolbarPosition = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.toolbar_position, _modules_toolbar__WEBPACK_IMPORTED_MODULE_5__["RIGHT"]);
- /**
- * Callback fired before filters row is shown
- * @type {Function}
- */
-
- _this.onBeforeShow = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_before_show, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after filters row is shown
- * @type {Function}
- */
-
- _this.onAfterShow = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_after_show, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired before filters row is hidden
- * @type {Function}
- */
-
- _this.onBeforeHide = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_before_hide, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after filters row is hidden
- * @type {Function}
- */
-
- _this.onAfterHide = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_after_hide, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); //Import extension's stylesheet
-
- tf.import(f.name + 'Style', tf.getStylePath() + _this.stylesheet, null, 'link');
-
- _this.enable();
-
- return _this;
- }
- /**
- * Initialise extension
- */
-
-
- _createClass(FiltersVisibility, [{
- key: "init",
- value: function init() {
- var _this2 = this;
-
- if (this.initialized) {
- return;
- }
-
- this.emitter.emit('initializing-extension', this, !Object(_types__WEBPACK_IMPORTED_MODULE_2__["isNull"])(this.targetId));
- this.buildUI();
- /** @inherited */
-
- this.initialized = true;
- this.emitter.on(['show-filters'], function (tf, visible) {
- return _this2.show(visible);
- });
- this.emitter.emit('filters-visibility-initialized', this.tf, this);
- this.emitter.emit('extension-initialized', this);
- }
- /**
- * Build UI elements
- */
-
- }, {
- key: "buildUI",
- value: function buildUI() {
- var _this3 = this;
-
- var tf = this.tf;
- var span = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span');
- span.className = this.contCssClass; // Container element (rdiv or custom element)
-
- var targetEl = !this.targetId ? tf.feature('toolbar').container(this.toolbarPosition) : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.targetId);
-
- if (!this.targetId) {
- var firstChild = targetEl.firstChild;
- firstChild.parentNode.insertBefore(span, firstChild);
- } else {
- targetEl.appendChild(span);
- }
-
- var btn;
-
- if (!this.btnHtml) {
- btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:void(0);']);
- btn.className = this.btnCssClass;
- btn.title = this.btnText || this.defaultText;
- btn.innerHTML = this.collapseBtnHtml;
- span.appendChild(btn);
- } else {
- // Custom html
- span.innerHTML = this.btnHtml;
- btn = span.firstChild;
- }
-
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function () {
- return _this3.toggle();
- });
- this.contEl = span;
- this.btnEl = btn;
-
- if (!this.visibleAtStart) {
- this.toggle();
- }
- }
- /**
- * Toggle filters visibility
- */
-
- }, {
- key: "toggle",
- value: function toggle() {
- var tf = this.tf;
- var tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();
- var fltRow = tbl.rows[this.filtersRowIndex];
- var isDisplayed = fltRow.style.display === '';
- this.show(!isDisplayed);
- }
- /**
- * Show or hide filters
- *
- * @param {boolean} [visible=true] Visibility flag
- */
-
- }, {
- key: "show",
- value: function show() {
- var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
- var tf = this.tf;
- var tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();
- var fltRow = tbl.rows[this.filtersRowIndex];
-
- if (visible) {
- this.onBeforeShow(this);
- }
-
- if (!visible) {
- this.onBeforeHide(this);
- }
-
- fltRow.style.display = visible ? '' : 'none';
-
- if (this.enableIcon && !this.btnHtml) {
- this.btnEl.innerHTML = visible ? this.collapseBtnHtml : this.expandBtnHtml;
- }
-
- if (visible) {
- this.onAfterShow(this);
- }
-
- if (!visible) {
- this.onAfterHide(this);
- }
-
- this.emitter.emit('filters-toggled', tf, this, visible);
- }
- /**
- * Destroy the UI
- */
-
- }, {
- key: "destroy",
- value: function destroy() {
- var _this4 = this;
-
- if (!this.initialized) {
- return;
- }
-
- this.emitter.off(['show-filters'], function (tf, visible) {
- return _this4.show(visible);
- });
- this.btnEl.innerHTML = '';
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.btnEl);
- this.btnEl = null;
- this.contEl.innerHTML = '';
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.contEl);
- this.contEl = null;
- this.initialized = false;
- }
- }]);
-
- return FiltersVisibility;
-}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]);
-
-
-
-/***/ }),
-
-/***/ "./src/extensions/sort/adapterSortabletable.js":
-/*!*****************************************************!*\
- !*** ./src/extensions/sort/adapterSortabletable.js ***!
- \*****************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AdapterSortableTable; });
-/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js");
-/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../types */ "./src/types.js");
-/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../dom */ "./src/dom.js");
-/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../event */ "./src/event.js");
-/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../number */ "./src/number.js");
-/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../const */ "./src/const.js");
-/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../settings */ "./src/settings.js");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
-
-function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
-
-function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-
-
-
-
-
-
-
-/**
- * SortableTable Adapter module
- */
-
-var AdapterSortableTable =
-/*#__PURE__*/
-function (_Feature) {
- _inherits(AdapterSortableTable, _Feature);
-
- /**
- * Creates an instance of AdapterSortableTable
- * @param {TableFilter} tf TableFilter instance
- * @param {Object} opts Configuration object
- */
- function AdapterSortableTable(tf, opts) {
- var _this;
-
- _classCallCheck(this, AdapterSortableTable);
-
- _this = _possibleConstructorReturn(this, _getPrototypeOf(AdapterSortableTable).call(this, tf, opts.name));
- /**
- * Module name
- * @type {String}
- */
-
- _this.name = opts.name;
- /**
- * Module description
- * @type {String}
- */
-
- _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.description, 'Sortable table');
- /**
- * Indicate whether table previously sorted
- * @type {Boolean}
- * @private
- */
-
- _this.sorted = false;
- /**
- * List of sort type per column basis
- * @type {Array}
- */
-
- _this.sortTypes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.types, tf.colTypes);
- /**
- * Column to be sorted at initialization, ie:
- * sort_col_at_start: [1, true]
- * @type {Array}
- */
-
- _this.sortColAtStart = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.sort_col_at_start, null);
- /**
- * Enable asynchronous sort, if triggers are external
- * @type {Boolean}
- */
-
- _this.asyncSort = Boolean(opts.async_sort);
- /**
- * List of element IDs triggering sort on a per column basis
- * @type {Array}
- */
-
- _this.triggerIds = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.trigger_ids, []); // edit .sort-arrow.descending / .sort-arrow.ascending in
- // tablefilter.css to reflect any path change
-
- /**
- * Path to images
- * @type {String}
- */
-
- _this.imgPath = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.images_path, tf.themesPath);
- /**
- * Blank image file name
- * @type {String}
- */
-
- _this.imgBlank = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_blank, 'blank.png');
- /**
- * Css class for sort indicator image
- * @type {String}
- */
-
- _this.imgClassName = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_class_name, 'sort-arrow');
- /**
- * Css class for ascending sort indicator image
- * @type {String}
- */
-
- _this.imgAscClassName = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_asc_class_name, 'ascending');
- /**
- * Css class for descending sort indicator image
- * @type {String}
- */
-
- _this.imgDescClassName = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_desc_class_name, 'descending');
- /**
- * Cell attribute key storing custom value used for sorting
- * @type {String}
- */
-
- _this.customKey = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.custom_key, 'data-tf-sortKey');
- /**
- * Callback fired when sort extension is instanciated
- * @type {Function}
- */
-
- _this.onSortLoaded = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_sort_loaded, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]);
- /**
- * Callback fired before a table column is sorted
- * @type {Function}
- */
-
- _this.onBeforeSort = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_before_sort, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]);
- /**
- * Callback fired after a table column is sorted
- * @type {Function}
- */
-
- _this.onAfterSort = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_after_sort, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]);
- /**
- * SortableTable instance
- * @private
- */
-
- _this.stt = null;
-
- _this.enable();
-
- return _this;
- }
- /**
- * Initializes AdapterSortableTable instance
- */
-
-
- _createClass(AdapterSortableTable, [{
- key: "init",
- value: function init() {
- if (this.initialized) {
- return;
- }
-
- var tf = this.tf;
- var adpt = this; // SortableTable class sanity check (sortabletable.js)
-
- if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isUndef"])(SortableTable)) {
- throw new Error('SortableTable class not found.');
- } // Add any date format if needed
-
-
- this.emitter.emit('add-date-type-formats', this.tf, this.sortTypes);
- this.overrideSortableTable();
- this.setSortTypes();
- this.onSortLoaded(tf, this);
- /*** SortableTable callbacks ***/
-
- this.stt.onbeforesort = function () {
- adpt.onBeforeSort(tf, adpt.stt.sortColumn);
- /*** sort behaviour for paging ***/
-
- if (tf.paging) {
- tf.feature('paging').disable();
- }
- };
-
- this.stt.onsort = function () {
- adpt.sorted = true; //sort behaviour for paging
-
- if (tf.paging) {
- var paginator = tf.feature('paging'); // recalculate valid rows index as sorting may have change it
-
- tf.getValidRows(true);
- paginator.enable();
- paginator.setPage(paginator.getPage());
- }
-
- adpt.onAfterSort(tf, adpt.stt.sortColumn, adpt.stt.descending);
- adpt.emitter.emit('column-sorted', tf, adpt.stt.sortColumn, adpt.stt.descending);
- }; // Column sort at start
-
-
- var sortColAtStart = adpt.sortColAtStart;
-
- if (sortColAtStart) {
- this.stt.sort(sortColAtStart[0], sortColAtStart[1]);
- }
-
- this.emitter.on(['sort'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.sortByColumnIndexHandler, this));
- /** @inherited */
-
- this.initialized = true;
- this.emitter.emit('sort-initialized', tf, this);
- }
- /**
- * Sort specified column
- * @param {Number} colIdx Column index
- * @param {Boolean} desc Optional: descending manner
- */
-
- }, {
- key: "sortByColumnIndex",
- value: function sortByColumnIndex(colIdx, desc) {
- this.stt.sort(colIdx, desc);
- }
- /** @private */
-
- }, {
- key: "sortByColumnIndexHandler",
- value: function sortByColumnIndexHandler(tf, colIdx, desc) {
- this.sortByColumnIndex(colIdx, desc);
- }
- /**
- * Set SortableTable overrides for TableFilter integration
- */
-
- }, {
- key: "overrideSortableTable",
- value: function overrideSortableTable() {
- var adpt = this,
- tf = this.tf;
- /**
- * Overrides headerOnclick method in order to handle th event
- * @param {Object} e [description]
- */
-
- SortableTable.prototype.headerOnclick = function (evt) {
- if (!adpt.initialized) {
- return;
- } // find Header element
-
-
- var el = evt.target || evt.srcElement;
-
- while (el.tagName !== _const__WEBPACK_IMPORTED_MODULE_5__["CELL_TAG"] && el.tagName !== _const__WEBPACK_IMPORTED_MODULE_5__["HEADER_TAG"]) {
- el = el.parentNode;
- }
-
- this.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);
- };
- /**
- * Overrides getCellIndex IE returns wrong cellIndex when columns are
- * hidden
- * @param {Object} oTd TD element
- * @return {Number} Cell index
- */
-
-
- SortableTable.getCellIndex = function (oTd) {
- var cells = oTd.parentNode.cells,
- l = cells.length,
- i;
-
- for (i = 0; cells[i] !== oTd && i < l; i++) {}
-
- return i;
- };
- /**
- * Overrides initHeader in order to handle filters row position
- * @param {Array} oSortTypes
- */
-
-
- SortableTable.prototype.initHeader = function (oSortTypes) {
- var stt = this;
-
- if (!stt.tHead) {
- if (tf.gridLayout) {
- stt.tHead = tf.feature('gridLayout').headTbl.tHead;
- } else {
- return;
- }
- }
-
- stt.headersRow = tf.headersRow;
- var cells = stt.tHead.rows[stt.headersRow].cells;
- stt.sortTypes = oSortTypes || [];
- var l = cells.length;
- var img, c;
-
- for (var i = 0; i < l; i++) {
- c = cells[i];
-
- if (stt.sortTypes[i] !== null && stt.sortTypes[i] !== 'None') {
- c.style.cursor = 'pointer';
- img = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createElm"])('img', ['src', adpt.imgPath + adpt.imgBlank]);
- c.appendChild(img);
-
- if (stt.sortTypes[i] !== null) {
- c.setAttribute('_sortType', stt.sortTypes[i]);
- }
-
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(c, 'click', stt._headerOnclick);
- } else {
- c.setAttribute('_sortType', oSortTypes[i]);
- c._sortType = 'None';
- }
- }
-
- stt.updateHeaderArrows();
- };
- /**
- * Overrides updateHeaderArrows in order to handle arrows indicators
- */
-
-
- SortableTable.prototype.updateHeaderArrows = function () {
- var stt = this;
- var cells, l, img; // external headers
-
- if (adpt.asyncSort && adpt.triggerIds.length > 0) {
- var triggers = adpt.triggerIds;
- cells = [];
- l = triggers.length;
-
- for (var j = 0; j < l; j++) {
- cells.push(Object(_dom__WEBPACK_IMPORTED_MODULE_2__["elm"])(triggers[j]));
- }
- } else {
- if (!this.tHead) {
- return;
- }
-
- cells = stt.tHead.rows[stt.headersRow].cells;
- l = cells.length;
- }
-
- for (var i = 0; i < l; i++) {
- var cell = cells[i];
-
- if (!cell) {
- continue;
- }
-
- var cellAttr = cell.getAttribute('_sortType');
-
- if (cellAttr !== null && cellAttr !== 'None') {
- img = cell.lastChild || cell;
-
- if (img.nodeName.toLowerCase() !== 'img') {
- img = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createElm"])('img', ['src', adpt.imgPath + adpt.imgBlank]);
- cell.appendChild(img);
- }
-
- if (i === stt.sortColumn) {
- img.className = adpt.imgClassName + ' ' + (this.descending ? adpt.imgDescClassName : adpt.imgAscClassName);
- } else {
- img.className = adpt.imgClassName;
- }
- }
- }
- };
- /**
- * Overrides getRowValue for custom key value feature
- * @param {Object} oRow Row element
- * @param {String} sType
- * @param {Number} nColumn
- * @return {String}
- */
-
-
- SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {
- var stt = this; // if we have defined a custom getRowValue use that
-
- var sortTypeInfo = stt._sortTypeInfo[sType];
-
- if (sortTypeInfo && sortTypeInfo.getRowValue) {
- return sortTypeInfo.getRowValue(oRow, nColumn);
- }
-
- var c = oRow.cells[nColumn];
- var s = SortableTable.getInnerText(c);
- return stt.getValueFromString(s, sType);
- };
- /**
- * Overrides getInnerText in order to avoid Firefox unexpected sorting
- * behaviour with untrimmed text elements
- * @param {Object} cell DOM element
- * @return {String} DOM element inner text
- */
-
-
- SortableTable.getInnerText = function (cell) {
- if (!cell) {
- return;
- }
-
- if (cell.getAttribute(adpt.customKey)) {
- return cell.getAttribute(adpt.customKey);
- } else {
- return tf.getCellValue(cell);
- }
- };
- }
- /**
- * Adds a sort type
- */
-
- }, {
- key: "addSortType",
- value: function addSortType() {
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
- args[_key] = arguments[_key];
- }
-
- // Extract the arguments
- var id = args[0],
- caster = args[1],
- sorter = args[2],
- getRowValue = args[3];
- SortableTable.prototype.addSortType(id, caster, sorter, getRowValue);
- }
- /**
- * Sets the sort types on a column basis
- * @private
- */
-
- }, {
- key: "setSortTypes",
- value: function setSortTypes() {
- var _this2 = this;
-
- var tf = this.tf,
- sortTypes = this.sortTypes,
- _sortTypes = [];
- tf.eachCol(function (i) {
- var colType;
-
- if (sortTypes[i]) {
- colType = sortTypes[i];
-
- if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isObj"])(colType)) {
- if (colType.type === _const__WEBPACK_IMPORTED_MODULE_5__["DATE"]) {
- colType = _this2._addDateType(i, sortTypes);
- } else if (colType.type === _const__WEBPACK_IMPORTED_MODULE_5__["FORMATTED_NUMBER"]) {
- var decimal = colType.decimal || tf.decimalSeparator;
- colType = _this2._addNumberType(i, decimal);
- }
- } else {
- colType = colType.toLowerCase();
-
- if (colType === _const__WEBPACK_IMPORTED_MODULE_5__["DATE"]) {
- colType = _this2._addDateType(i, sortTypes);
- } else if (colType === _const__WEBPACK_IMPORTED_MODULE_5__["FORMATTED_NUMBER"] || colType === _const__WEBPACK_IMPORTED_MODULE_5__["NUMBER"]) {
- colType = _this2._addNumberType(i, tf.decimalSeparator);
- } else if (colType === _const__WEBPACK_IMPORTED_MODULE_5__["NONE"]) {
- // TODO: normalise 'none' vs 'None'
- colType = 'None';
- }
- }
- } else {
- colType = _const__WEBPACK_IMPORTED_MODULE_5__["STRING"];
- }
-
- _sortTypes.push(colType);
- }); //Public TF method to add sort type
- //Custom sort types
-
- this.addSortType('caseinsensitivestring', SortableTable.toUpperCase);
- this.addSortType(_const__WEBPACK_IMPORTED_MODULE_5__["STRING"]);
- this.addSortType(_const__WEBPACK_IMPORTED_MODULE_5__["IP_ADDRESS"], ipAddress, sortIP);
- this.stt = new SortableTable(tf.dom(), _sortTypes);
- /*** external table headers adapter ***/
-
- if (this.asyncSort && this.triggerIds.length > 0) {
- (function () {
- var triggers = _this2.triggerIds;
-
- for (var j = 0; j < triggers.length; j++) {
- if (triggers[j] === null) {
- continue;
- }
-
- var trigger = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["elm"])(triggers[j]);
-
- if (trigger) {
- trigger.style.cursor = 'pointer';
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(trigger, 'click', function (evt) {
- var elm = evt.target;
-
- if (!_this2.tf.sort) {
- return;
- }
-
- _this2.stt.asyncSort(triggers.indexOf(elm.id));
- });
- trigger.setAttribute('_sortType', _sortTypes[j]);
- }
- }
- })();
- }
- }
- }, {
- key: "_addDateType",
- value: function _addDateType(colIndex, types) {
- var tf = this.tf;
- var dateType = tf.feature('dateType');
- var locale = dateType.getOptions(colIndex, types).locale || tf.locale;
- var colType = "".concat(_const__WEBPACK_IMPORTED_MODULE_5__["DATE"], "-").concat(locale);
- this.addSortType(colType, function (value) {
- var parsedDate = dateType.parse(value, locale); // Invalid date defaults to Wed Feb 04 -768 11:00:00
-
- return isNaN(+parsedDate) ? new Date(-86400000000000) : parsedDate;
- });
- return colType;
- }
- }, {
- key: "_addNumberType",
- value: function _addNumberType(colIndex, decimal) {
- var colType = "".concat(_const__WEBPACK_IMPORTED_MODULE_5__["FORMATTED_NUMBER"]).concat(decimal === '.' ? '' : '-custom');
- this.addSortType(colType, function (value) {
- return Object(_number__WEBPACK_IMPORTED_MODULE_4__["parse"])(value, decimal);
- });
- return colType;
- }
- /**
- * Remove extension
- */
-
- }, {
- key: "destroy",
- value: function destroy() {
- if (!this.initialized) {
- return;
- }
-
- var tf = this.tf;
- this.emitter.off(['sort'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.sortByColumnIndexHandler, this));
- this.sorted = false;
- this.stt.destroy();
- var ids = tf.getFiltersId();
-
- for (var idx = 0; idx < ids.length; idx++) {
- var header = tf.getHeaderElement(idx);
- var img = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["tag"])(header, 'img');
-
- if (img.length === 1) {
- header.removeChild(img[0]);
- }
- }
-
- this.initialized = false;
- }
- }]);
-
- return AdapterSortableTable;
-}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); //Converters
-
-
-
-
-function ipAddress(value) {
- var vals = value.split('.');
-
- for (var x in vals) {
- var val = vals[x];
-
- while (3 > val.length) {
- val = '0' + val;
- }
-
- vals[x] = val;
- }
-
- return vals.join('.');
-}
-
-function sortIP(a, b) {
- var aa = ipAddress(a.value.toLowerCase());
- var bb = ipAddress(b.value.toLowerCase());
-
- if (aa === bb) {
- return 0;
- } else if (aa < bb) {
- return -1;
- } else {
- return 1;
- }
-}
-
-/***/ }),
-
-/***/ "./src/extensions/sort/sort.js":
-/*!*************************************!*\
- !*** ./src/extensions/sort/sort.js ***!
- \*************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _adapterSortabletable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adapterSortabletable */ "./src/extensions/sort/adapterSortabletable.js");
-/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../root */ "./src/root.js");
-
-
-
-if (!_root__WEBPACK_IMPORTED_MODULE_1__["root"].SortableTable) {
- __webpack_require__(/*! script-loader!sortabletable */ "./node_modules/script-loader/index.js!./libs/sortabletable.js");
-}
-
-/* harmony default export */ __webpack_exports__["default"] = (_adapterSortabletable__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ })
-
-}]);
-//# sourceMappingURL=tf-0-973b3f20052aa524e437.js.map
\ No newline at end of file
diff --git a/dist/tablefilter/tf-0-973b3f20052aa524e437.js.map b/dist/tablefilter/tf-0-973b3f20052aa524e437.js.map
deleted file mode 100644
index 9bdc9c0f..00000000
--- a/dist/tablefilter/tf-0-973b3f20052aa524e437.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./node_modules/format-number/index.js","webpack:///./libs/sortabletable.js","webpack:///./node_modules/script-loader/addScript.js","webpack:///./libs/sortabletable.js?8203","webpack:///./src sync ^\\.\\/.*$","webpack:///./src/extensions/advancedGrid/adapterEzEditTable.js","webpack:///./src/extensions/advancedGrid/advancedGrid.js","webpack:///./src/extensions/colOps/colOps.js","webpack:///./src/extensions/colsVisibility/colsVisibility.js","webpack:///./src/extensions/filtersVisibility/filtersVisibility.js","webpack:///./src/extensions/sort/adapterSortabletable.js","webpack:///./src/extensions/sort/sort.js"],"names":["INSTANTIATION_ERROR","AdapterEzEditTable","tf","cfg","name","desc","description","filename","vendorPath","vendor_path","loadStylesheet","Boolean","load_stylesheet","stylesheet","stylesheetName","stylesheet_name","scroll_into_view","gridLayout","_ezEditTable","enable","initialized","EditTable","_setAdvancedGrid","path","import","isImported","emitter","on","_toggleForInputFilter","startRow","thead","dom","length","undefined","refRow","base_path","basePath","editable","selectable","selection","default_selection","active_cell_css","_lastValidRowIndex","_lastRowIndex","onAfterSelection","et","selectedElm","e","slc","Selection","doSelect","nextRowIndex","defaultSelection","SelectRowByIndex","ClearSelections","cellIndex","row","rows","SelectCell","cells","validRowsIndex","getRowsNb","r","scrollIntoView","cell","getCellsNb","tblCont","scrollLeft","validIndexes","validIdxLen","parentNode","nodeName","keyCode","Event","GetKey","isRowValid","indexOf","rowIndex","paging","feature","d","pageLength","nbRowsPerPage","calcRowIndex","v","onBeforeSelection","nbPages","pagingEndRow","parseInt","startPagingRow","currentPageNb","setPage","onAfterChangePage","advGrid","extension","GetActiveRow","GetActiveCell","fnB","on_before_selected_row","args","arguments","call","fnA","on_after_selected_row","fnD","on_before_selected_cell","fnC","on_after_selected_cell","fnE","on_added_dom_row","nbFilterableRows","emit","destroy","reset","alternateRows","init","actions","fnF","on_after_submit","id","Init","Error","ezEditTable","Set","Editable","Remove","getActiveFilterId","colIndex","getColumnIndexFromFilterId","filterType","getFilterType","toggle","off","EVENTS","SUM","MEAN","MIN","MAX","MEDIAN","Q1","Q3","ColOps","opts","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","val","push","nbCols","colValues","u","getVisibleColumnData","curValues","result","precisions","labels","writeType","formatResult","idx","k","toLowerCase","configureFormat","i","Number","calc","writeResult","totRow","style","display","precision","sortColumnValues","calcMean","calcSum","calcMin","calcMax","calcMedian","calcQ1","calcQ3","toFixed","values","reduce","x","y","Math","max","apply","min","nbValues","aux","floor","posa","posb","sorter","sort","label","format","labelElm","isNaN","isFinite","innerHTML","value","oldNode","firstChild","txtNode","replaceChild","hasType","colType","colTypes","decimal","thousands","integerSeparator","ColsVisibility","f","config","spanEl","btnEl","contEl","tickToHide","tick_to_hide","manager","headersTbl","headers_table","headersIndex","headers_index","contElTgtId","container_target_id","headersText","headers_text","btnTgtId","btn_target_id","btnText","btn_text","btnHtml","btn_html","btnCssClass","btn_css_class","btnCloseText","btn_close_text","btnCloseHtml","btn_close_html","btnCloseCssClass","btn_close_css_class","spanCssClass","span_css_class","contCssClass","cont_css_class","listCssClass","list_css_class","listItemCssClass","checklist_item_css_class","listSlcItemCssClass","checklist_selected_item_css_class","text","atStart","at_start","enableHover","enable_hover","enableTickAll","enable_tick_all","tickAllText","tick_all_text","toolbarPosition","toolbar_position","hiddenCols","boundMouseup","onLoaded","on_loaded","onBeforeOpen","on_before_open","onAfterOpen","on_after_open","onBeforeClose","on_before_close","onAfterClose","on_after_close","onBeforeColHidden","on_before_col_hidden","onAfterColHidden","on_after_col_hidden","onBeforeColDisplayed","on_before_col_displayed","onAfterColDisplayed","on_after_col_displayed","headTbl","getStylePath","evt","targetElm","removeEvt","contDisplay","addEvt","lbl","li","isChecked","checked","getAttribute","split","addClass","removeClass","hide","setHidden","hideCol","buildBtn","buildManager","onMouseup","bind","_hideAtStart","span","className","targetEl","container","insertBefore","appendChild","btn","title","colVisEl","extNameLabel","ul","tbl","headerIndex","getHeadersRowIndex","headerRow","check","h","itm","click","cellText","_getHeaderText","liElm","elm","checkItem","p","_hideElements","itemIndex","splice","isColHidden","showCol","removeElm","hasChildNodes","childNodes","n","nodeType","nodeValue","colIdx","_hideCells","_hideCol","colElms","FiltersVisibility","icnExpand","expand_icon_name","icnCollapse","collapse_icon_name","icnExpandHtml","themesPath","icnCollapseHtml","defaultText","targetId","target_id","enableIcon","enable_icon","collapseBtnHtml","expandBtnHtml","filtersRowIndex","filters_row_index","getFiltersRowIndex","visibleAtStart","visible_at_start","onBeforeShow","on_before_show","onAfterShow","on_after_show","onBeforeHide","on_before_hide","onAfterHide","on_after_hide","buildUI","visible","show","fltRow","isDisplayed","AdapterSortableTable","sorted","sortTypes","types","sortColAtStart","sort_col_at_start","asyncSort","async_sort","triggerIds","trigger_ids","imgPath","images_path","imgBlank","image_blank","imgClassName","image_class_name","imgAscClassName","image_asc_class_name","imgDescClassName","image_desc_class_name","customKey","custom_key","onSortLoaded","on_sort_loaded","onBeforeSort","on_before_sort","onAfterSort","on_after_sort","stt","adpt","SortableTable","overrideSortableTable","setSortTypes","onbeforesort","sortColumn","disable","onsort","paginator","getValidRows","getPage","descending","sortByColumnIndexHandler","sortByColumnIndex","prototype","headerOnclick","el","target","srcElement","tagName","msie","getCellIndex","oTd","l","initHeader","oSortTypes","tHead","headersRow","img","c","cursor","setAttribute","_headerOnclick","_sortType","updateHeaderArrows","triggers","j","cellAttr","lastChild","getRowValue","oRow","sType","nColumn","sortTypeInfo","_sortTypeInfo","s","getInnerText","getValueFromString","getCellValue","caster","addSortType","_sortTypes","eachCol","type","_addDateType","decimalSeparator","_addNumberType","toUpperCase","ipAddress","sortIP","trigger","dateType","locale","getOptions","parsedDate","parse","Date","ids","getFiltersId","header","getHeaderElement","removeChild","vals","join","a","b","aa","bb","require"],"mappings":";;;;;;;;;;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2BAA2B;AAC3B,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAsD,4BAA4B,EAAE;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8BAA8B;AACnD;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,EAAE;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAC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","file":"tf-0-973b3f20052aa524e437.js","sourcesContent":["\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","module.exports = \"/*----------------------------------------------------------------------------\\\\\\r\\n| Sortable Table 1.12 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created by Erik Arvidsson |\\r\\n| (http://webfx.eae.net/contact.html#erik) |\\r\\n| For WebFX (http://webfx.eae.net/) |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| A DOM 1 based script that allows an ordinary HTML table to be sortable. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Copyright (c) 1998 - 2006 Erik Arvidsson |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not |\\r\\n| use this file except in compliance with the License. You may obtain a copy |\\r\\n| of the License at http://www.apache.org/licenses/LICENSE-2.0 |\\r\\n| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\\r\\n| Unless required by applicable law or agreed to in writing, software |\\r\\n| distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT |\\r\\n| WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |\\r\\n| License for the specific language governing permissions and limitations |\\r\\n| under the License. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| 2003-01-10 | First version |\\r\\n| 2003-01-19 | Minor changes to the date parsing |\\r\\n| 2003-01-28 | JScript 5.0 fixes (no support for 'in' operator) |\\r\\n| 2003-02-01 | Sloppy typo like error fixed in getInnerText |\\r\\n| 2003-07-04 | Added workaround for IE cellIndex bug. |\\r\\n| 2003-11-09 | The bDescending argument to sort was not correctly working |\\r\\n| | Using onclick DOM0 event if no support for addEventListener |\\r\\n| | or attachEvent |\\r\\n| 2004-01-13 | Adding addSortType and removeSortType which makes it a lot |\\r\\n| | easier to add new, custom sort types. |\\r\\n| 2004-01-27 | Switch to use descending = false as the default sort order. |\\r\\n| | Change defaultDescending to suit your needs. |\\r\\n| 2004-03-14 | Improved sort type None look and feel a bit |\\r\\n| 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you |\\r\\n| | can use another tHead or no tHead, and you can chose some |\\r\\n| | other tBody. |\\r\\n| 2006-04-25 | Changed license to Apache Software License 2.0 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created 2003-01-10 | All changes are in the log above. | Updated 2006-04-25 |\\r\\n\\\\----------------------------------------------------------------------------*/\\r\\n\\r\\n\\r\\nfunction SortableTable(oTable, oSortTypes) {\\r\\n\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\r\\n\\tthis.sortColumn = null;\\r\\n\\tthis.descending = null;\\r\\n\\r\\n\\tvar oThis = this;\\r\\n\\tthis._headerOnclick = function (e) {\\r\\n\\t\\toThis.headerOnclick(e);\\r\\n\\t};\\r\\n\\r\\n\\tif (oTable) {\\r\\n\\t\\tthis.setTable( oTable );\\r\\n\\t\\tthis.document = oTable.ownerDocument || oTable.document;\\r\\n\\t}\\r\\n\\telse {\\r\\n\\t\\tthis.document = document;\\r\\n\\t}\\r\\n\\r\\n\\r\\n\\t// only IE needs this\\r\\n\\tvar win = this.document.defaultView || this.document.parentWindow;\\r\\n\\tthis._onunload = function () {\\r\\n\\t\\toThis.destroy();\\r\\n\\t};\\r\\n\\tif (win && typeof win.attachEvent != \\\"undefined\\\") {\\r\\n\\t\\twin.attachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n}\\r\\n\\r\\nSortableTable.gecko = navigator.product == \\\"Gecko\\\";\\r\\nSortableTable.msie = /msie/i.test(navigator.userAgent);\\r\\n// Mozilla is faster when doing the DOM manipulations on\\r\\n// an orphaned element. MSIE is not\\r\\nSortableTable.removeBeforeSort = SortableTable.gecko;\\r\\n\\r\\nSortableTable.prototype.onsort = function () {};\\r\\n\\r\\n// default sort order. true -> descending, false -> ascending\\r\\nSortableTable.prototype.defaultDescending = false;\\r\\n\\r\\n// shared between all instances. This is intentional to allow external files\\r\\n// to modify the prototype\\r\\nSortableTable.prototype._sortTypeInfo = {};\\r\\n\\r\\nSortableTable.prototype.setTable = function (oTable) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.element = oTable;\\r\\n\\tthis.setTHead( oTable.tHead );\\r\\n\\tthis.setTBody( oTable.tBodies[0] );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTHead = function (oTHead) {\\r\\n\\tif (this.tHead && this.tHead != oTHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.tHead = oTHead;\\r\\n\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTBody = function (oTBody) {\\r\\n\\tthis.tBody = oTBody;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\n// adds arrow containers and events\\r\\n// also binds sort type to the header cells so that reordering columns does\\r\\n// not break the sort types\\r\\nSortableTable.prototype.initHeader = function (oSortTypes) {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar doc = this.tHead.ownerDocument || this.tHead.document;\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img, c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (this.sortTypes[i] != null && this.sortTypes[i] != \\\"None\\\") {\\r\\n\\t\\t\\timg = doc.createElement(\\\"IMG\\\");\\r\\n\\t\\t\\timg.src = \\\"images/blank.png\\\";\\r\\n\\t\\t\\tc.appendChild(img);\\r\\n\\t\\t\\tif (this.sortTypes[i] != null)\\r\\n\\t\\t\\t\\tc._sortType = this.sortTypes[i];\\r\\n\\t\\t\\tif (typeof c.addEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.addEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.attachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.attachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\tc.onclick = this._headerOnclick;\\r\\n\\t\\t}\\r\\n\\t\\telse\\r\\n\\t\\t{\\r\\n\\t\\t\\tc.setAttribute( \\\"_sortType\\\", oSortTypes[i] );\\r\\n\\t\\t\\tc._sortType = \\\"None\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\tthis.updateHeaderArrows();\\r\\n};\\r\\n\\r\\n// remove arrows and events\\r\\nSortableTable.prototype.uninitHeader = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (c._sortType != null && c._sortType != \\\"None\\\") {\\r\\n\\t\\t\\tc.removeChild(c.lastChild);\\r\\n\\t\\t\\tif (typeof c.removeEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.removeEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.detachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.detachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\tc._sortType = null;\\r\\n\\t\\t\\tc.removeAttribute( \\\"_sortType\\\" );\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.updateHeaderArrows = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tif (cells[i]._sortType != null && cells[i]._sortType != \\\"None\\\") {\\r\\n\\t\\t\\timg = cells[i].lastChild;\\r\\n\\t\\t\\tif (i == this.sortColumn)\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow \\\" + (this.descending ? \\\"descending\\\" : \\\"ascending\\\");\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.headerOnclick = function (e) {\\r\\n\\t// find TD element\\r\\n\\tvar el = e.target || e.srcElement;\\r\\n\\twhile (el.tagName != \\\"TD\\\")\\r\\n\\t\\tel = el.parentNode;\\r\\n\\r\\n\\tthis.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\\r\\n};\\r\\n\\r\\n// IE returns wrong cellIndex when columns are hidden\\r\\nSortableTable.getCellIndex = function (oTd) {\\r\\n\\tvar cells = oTd.parentNode.childNodes\\r\\n\\tvar l = cells.length;\\r\\n\\tvar i;\\r\\n\\tfor (i = 0; cells[i] != oTd && i < l; i++)\\r\\n\\t\\t;\\r\\n\\treturn i;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getSortType = function (nColumn) {\\r\\n\\treturn this.sortTypes[nColumn] || \\\"String\\\";\\r\\n};\\r\\n\\r\\n// only nColumn is required\\r\\n// if bDescending is left out the old value is taken into account\\r\\n// if sSortType is left out the sort type is found from the sortTypes array\\r\\n\\r\\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\\r\\n\\tif (!this.tBody) return;\\r\\n\\tif (sSortType == null)\\r\\n\\t\\tsSortType = this.getSortType(nColumn);\\r\\n\\r\\n\\t// exit if None\\r\\n\\tif (sSortType == \\\"None\\\")\\r\\n\\t\\treturn;\\r\\n\\r\\n\\tif (bDescending == null) {\\r\\n\\t\\tif (this.sortColumn != nColumn)\\r\\n\\t\\t\\tthis.descending = this.defaultDescending;\\r\\n\\t\\telse\\r\\n\\t\\t\\tthis.descending = !this.descending;\\r\\n\\t}\\r\\n\\telse\\r\\n\\t\\tthis.descending = bDescending;\\r\\n\\r\\n\\tthis.sortColumn = nColumn;\\r\\n\\r\\n\\tif (typeof this.onbeforesort == \\\"function\\\")\\r\\n\\t\\tthis.onbeforesort();\\r\\n\\r\\n\\tvar f = this.getSortFunction(sSortType, nColumn);\\r\\n\\tvar a = this.getCache(sSortType, nColumn);\\r\\n\\tvar tBody = this.tBody;\\r\\n\\r\\n\\ta.sort(f);\\r\\n\\r\\n\\tif (this.descending)\\r\\n\\t\\ta.reverse();\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// remove from doc\\r\\n\\t\\tvar nextSibling = tBody.nextSibling;\\r\\n\\t\\tvar p = tBody.parentNode;\\r\\n\\t\\tp.removeChild(tBody);\\r\\n\\t}\\r\\n\\r\\n\\t// insert in the new order\\r\\n\\tvar l = a.length;\\r\\n\\tfor (var i = 0; i < l; i++)\\r\\n\\t\\ttBody.appendChild(a[i].element);\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// insert into doc\\r\\n\\t\\tp.insertBefore(tBody, nextSibling);\\r\\n\\t}\\r\\n\\r\\n\\tthis.updateHeaderArrows();\\r\\n\\r\\n\\tthis.destroyCache(a);\\r\\n\\r\\n\\tif (typeof this.onsort == \\\"function\\\")\\r\\n\\t\\tthis.onsort();\\r\\n};\\r\\n\\r\\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\\r\\n\\tvar oThis = this;\\r\\n\\tthis._asyncsort = function () {\\r\\n\\t\\toThis.sort(nColumn, bDescending, sSortType);\\r\\n\\t};\\r\\n\\twindow.setTimeout(this._asyncsort, 1);\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getCache = function (sType, nColumn) {\\r\\n\\tif (!this.tBody) return [];\\r\\n\\tvar rows = this.tBody.rows;\\r\\n\\tvar l = rows.length;\\r\\n\\tvar a = new Array(l);\\r\\n\\tvar r;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tr = rows[i];\\r\\n\\t\\ta[i] = {\\r\\n\\t\\t\\tvalue:\\t\\tthis.getRowValue(r, sType, nColumn),\\r\\n\\t\\t\\telement:\\tr\\r\\n\\t\\t};\\r\\n\\t};\\r\\n\\treturn a;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroyCache = function (oArray) {\\r\\n\\tvar l = oArray.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\toArray[i].value = null;\\r\\n\\t\\toArray[i].element = null;\\r\\n\\t\\toArray[i] = null;\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\\r\\n\\t// if we have defined a custom getRowValue use that\\r\\n\\tif (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\\r\\n\\t\\treturn this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\\r\\n\\r\\n\\tvar s;\\r\\n\\tvar c = oRow.cells[nColumn];\\r\\n\\tif (typeof c.innerText != \\\"undefined\\\")\\r\\n\\t\\ts = c.innerText;\\r\\n\\telse\\r\\n\\t\\ts = SortableTable.getInnerText(c);\\r\\n\\treturn this.getValueFromString(s, sType);\\r\\n};\\r\\n\\r\\nSortableTable.getInnerText = function (oNode) {\\r\\n\\tvar s = \\\"\\\";\\r\\n\\tvar cs = oNode.childNodes;\\r\\n\\tvar l = cs.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tswitch (cs[i].nodeType) {\\r\\n\\t\\t\\tcase 1: //ELEMENT_NODE\\r\\n\\t\\t\\t\\ts += SortableTable.getInnerText(cs[i]);\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\tcase 3:\\t//TEXT_NODE\\r\\n\\t\\t\\t\\ts += cs[i].nodeValue;\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\treturn s;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getValueFromString = function (sText, sType) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].getValueFromString( sText );\\r\\n\\treturn sText;\\r\\n\\t/*\\r\\n\\tswitch (sType) {\\r\\n\\t\\tcase \\\"Number\\\":\\r\\n\\t\\t\\treturn Number(sText);\\r\\n\\t\\tcase \\\"CaseInsensitiveString\\\":\\r\\n\\t\\t\\treturn sText.toUpperCase();\\r\\n\\t\\tcase \\\"Date\\\":\\r\\n\\t\\t\\tvar parts = sText.split(\\\"-\\\");\\r\\n\\t\\t\\tvar d = new Date(0);\\r\\n\\t\\t\\td.setFullYear(parts[0]);\\r\\n\\t\\t\\td.setDate(parts[2]);\\r\\n\\t\\t\\td.setMonth(parts[1] - 1);\\r\\n\\t\\t\\treturn d.valueOf();\\r\\n\\t}\\r\\n\\treturn sText;\\r\\n\\t*/\\r\\n\\t};\\r\\n\\r\\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].compare;\\r\\n\\treturn SortableTable.basicCompare;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroy = function () {\\r\\n\\tthis.uninitHeader();\\r\\n\\tvar win = this.document.parentWindow;\\r\\n\\tif (win && typeof win.detachEvent != \\\"undefined\\\") {\\t// only IE needs this\\r\\n\\t\\twin.detachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n\\tthis._onunload = null;\\r\\n\\tthis.element = null;\\r\\n\\tthis.tHead = null;\\r\\n\\tthis.tBody = null;\\r\\n\\tthis.document = null;\\r\\n\\tthis._headerOnclick = null;\\r\\n\\tthis.sortTypes = null;\\r\\n\\tthis._asyncsort = null;\\r\\n\\tthis.onsort = null;\\r\\n};\\r\\n\\r\\n// Adds a sort type to all instance of SortableTable\\r\\n// sType : String - the identifier of the sort type\\r\\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\\r\\n// string and casts it to a desired format. If left out the string is just\\r\\n// returned\\r\\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\\r\\n// compare function. Takes two values and compares them. If left out less than,\\r\\n// <, compare is used\\r\\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\\r\\n// that takes the row and the column index and returns the value used to compare.\\r\\n// If left out then the innerText is first taken for the cell and then the\\r\\n// fGetValueFromString is used to convert that string the desired value and type\\r\\n\\r\\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\\r\\n\\tthis._sortTypeInfo[sType] = {\\r\\n\\t\\ttype:\\t\\t\\t\\tsType,\\r\\n\\t\\tgetValueFromString:\\tfGetValueFromString || SortableTable.idFunction,\\r\\n\\t\\tcompare:\\t\\t\\tfCompareFunction || SortableTable.basicCompare,\\r\\n\\t\\tgetRowValue:\\t\\tfGetRowValue\\r\\n\\t};\\r\\n};\\r\\n\\r\\n// this removes the sort type from all instances of SortableTable\\r\\nSortableTable.prototype.removeSortType = function (sType) {\\r\\n\\tdelete this._sortTypeInfo[sType];\\r\\n};\\r\\n\\r\\nSortableTable.basicCompare = function compare(n1, n2) {\\r\\n\\tif (n1.value < n2.value)\\r\\n\\t\\treturn -1;\\r\\n\\tif (n2.value < n1.value)\\r\\n\\t\\treturn 1;\\r\\n\\treturn 0;\\r\\n};\\r\\n\\r\\nSortableTable.idFunction = function (x) {\\r\\n\\treturn x;\\r\\n};\\r\\n\\r\\nSortableTable.toUpperCase = function (s) {\\r\\n\\treturn s.toUpperCase();\\r\\n};\\r\\n\\r\\nSortableTable.toDate = function (s) {\\r\\n\\tvar parts = s.split(\\\"-\\\");\\r\\n\\tvar d = new Date(0);\\r\\n\\td.setFullYear(parts[0]);\\r\\n\\td.setDate(parts[2]);\\r\\n\\td.setMonth(parts[1] - 1);\\r\\n\\treturn d.valueOf();\\r\\n};\\r\\n\\r\\n\\r\\n// add sort types\\r\\nSortableTable.prototype.addSortType(\\\"Number\\\", Number);\\r\\nSortableTable.prototype.addSortType(\\\"CaseInsensitiveString\\\", SortableTable.toUpperCase);\\r\\nSortableTable.prototype.addSortType(\\\"Date\\\", SortableTable.toDate);\\r\\nSortableTable.prototype.addSortType(\\\"String\\\");\\r\\n// None is a special case\\r\\n\"","/*\n\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","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\\n// SCRIPT-LOADER FOOTER\\n//# sourceURL=script:///C:/projects/dev/github/TableFilter/libs/sortabletable.js\")","var map = {\n\t\"./array\": \"./src/array.js\",\n\t\"./array.js\": \"./src/array.js\",\n\t\"./const\": \"./src/const.js\",\n\t\"./const.js\": \"./src/const.js\",\n\t\"./cookie\": \"./src/cookie.js\",\n\t\"./cookie.js\": \"./src/cookie.js\",\n\t\"./dom\": \"./src/dom.js\",\n\t\"./dom.js\": \"./src/dom.js\",\n\t\"./emitter\": \"./src/emitter.js\",\n\t\"./emitter.js\": \"./src/emitter.js\",\n\t\"./event\": \"./src/event.js\",\n\t\"./event.js\": \"./src/event.js\",\n\t\"./extensions/advancedGrid/adapterEzEditTable\": \"./src/extensions/advancedGrid/adapterEzEditTable.js\",\n\t\"./extensions/advancedGrid/adapterEzEditTable.js\": \"./src/extensions/advancedGrid/adapterEzEditTable.js\",\n\t\"./extensions/advancedGrid/advancedGrid\": \"./src/extensions/advancedGrid/advancedGrid.js\",\n\t\"./extensions/advancedGrid/advancedGrid.js\": \"./src/extensions/advancedGrid/advancedGrid.js\",\n\t\"./extensions/colOps/colOps\": \"./src/extensions/colOps/colOps.js\",\n\t\"./extensions/colOps/colOps.js\": \"./src/extensions/colOps/colOps.js\",\n\t\"./extensions/colsVisibility/colsVisibility\": \"./src/extensions/colsVisibility/colsVisibility.js\",\n\t\"./extensions/colsVisibility/colsVisibility.js\": \"./src/extensions/colsVisibility/colsVisibility.js\",\n\t\"./extensions/filtersVisibility/filtersVisibility\": \"./src/extensions/filtersVisibility/filtersVisibility.js\",\n\t\"./extensions/filtersVisibility/filtersVisibility.js\": \"./src/extensions/filtersVisibility/filtersVisibility.js\",\n\t\"./extensions/sort/adapterSortabletable\": \"./src/extensions/sort/adapterSortabletable.js\",\n\t\"./extensions/sort/adapterSortabletable.js\": \"./src/extensions/sort/adapterSortabletable.js\",\n\t\"./extensions/sort/sort\": \"./src/extensions/sort/sort.js\",\n\t\"./extensions/sort/sort.js\": \"./src/extensions/sort/sort.js\",\n\t\"./feature\": \"./src/feature.js\",\n\t\"./feature.js\": \"./src/feature.js\",\n\t\"./modules/alternateRows\": \"./src/modules/alternateRows.js\",\n\t\"./modules/alternateRows.js\": \"./src/modules/alternateRows.js\",\n\t\"./modules/baseDropdown\": \"./src/modules/baseDropdown.js\",\n\t\"./modules/baseDropdown.js\": \"./src/modules/baseDropdown.js\",\n\t\"./modules/checkList\": \"./src/modules/checkList.js\",\n\t\"./modules/checkList.js\": \"./src/modules/checkList.js\",\n\t\"./modules/clearButton\": \"./src/modules/clearButton.js\",\n\t\"./modules/clearButton.js\": \"./src/modules/clearButton.js\",\n\t\"./modules/dateType\": \"./src/modules/dateType.js\",\n\t\"./modules/dateType.js\": \"./src/modules/dateType.js\",\n\t\"./modules/dropdown\": \"./src/modules/dropdown.js\",\n\t\"./modules/dropdown.js\": \"./src/modules/dropdown.js\",\n\t\"./modules/gridLayout\": \"./src/modules/gridLayout.js\",\n\t\"./modules/gridLayout.js\": \"./src/modules/gridLayout.js\",\n\t\"./modules/hash\": \"./src/modules/hash.js\",\n\t\"./modules/hash.js\": \"./src/modules/hash.js\",\n\t\"./modules/help\": \"./src/modules/help.js\",\n\t\"./modules/help.js\": \"./src/modules/help.js\",\n\t\"./modules/highlightKeywords\": \"./src/modules/highlightKeywords.js\",\n\t\"./modules/highlightKeywords.js\": \"./src/modules/highlightKeywords.js\",\n\t\"./modules/loader\": \"./src/modules/loader.js\",\n\t\"./modules/loader.js\": \"./src/modules/loader.js\",\n\t\"./modules/markActiveColumns\": \"./src/modules/markActiveColumns.js\",\n\t\"./modules/markActiveColumns.js\": \"./src/modules/markActiveColumns.js\",\n\t\"./modules/noResults\": \"./src/modules/noResults.js\",\n\t\"./modules/noResults.js\": \"./src/modules/noResults.js\",\n\t\"./modules/paging\": \"./src/modules/paging.js\",\n\t\"./modules/paging.js\": \"./src/modules/paging.js\",\n\t\"./modules/popupFilter\": \"./src/modules/popupFilter.js\",\n\t\"./modules/popupFilter.js\": \"./src/modules/popupFilter.js\",\n\t\"./modules/rowsCounter\": \"./src/modules/rowsCounter.js\",\n\t\"./modules/rowsCounter.js\": \"./src/modules/rowsCounter.js\",\n\t\"./modules/state\": \"./src/modules/state.js\",\n\t\"./modules/state.js\": \"./src/modules/state.js\",\n\t\"./modules/statusBar\": \"./src/modules/statusBar.js\",\n\t\"./modules/statusBar.js\": \"./src/modules/statusBar.js\",\n\t\"./modules/storage\": \"./src/modules/storage.js\",\n\t\"./modules/storage.js\": \"./src/modules/storage.js\",\n\t\"./modules/toolbar\": \"./src/modules/toolbar.js\",\n\t\"./modules/toolbar.js\": \"./src/modules/toolbar.js\",\n\t\"./number\": \"./src/number.js\",\n\t\"./number.js\": \"./src/number.js\",\n\t\"./register\": \"./src/register.js\",\n\t\"./register.js\": \"./src/register.js\",\n\t\"./root\": \"./src/root.js\",\n\t\"./root.js\": \"./src/root.js\",\n\t\"./settings\": \"./src/settings.js\",\n\t\"./settings.js\": \"./src/settings.js\",\n\t\"./sort\": \"./src/sort.js\",\n\t\"./sort.js\": \"./src/sort.js\",\n\t\"./string\": \"./src/string.js\",\n\t\"./string.js\": \"./src/string.js\",\n\t\"./tablefilter\": \"./src/tablefilter.js\",\n\t\"./tablefilter.js\": \"./src/tablefilter.js\",\n\t\"./types\": \"./src/types.js\",\n\t\"./types.js\": \"./src/types.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\tvar module = __webpack_require__(id);\n\treturn module;\n}\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) { // check for number or string\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 id;\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src sync recursive ^\\\\.\\\\/.*$\";","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, cfg.name);\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","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, opts.name);\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, f.name);\r\n\r\n // Configuration object\r\n let cfg = this.config;\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = 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▼\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, 'Columns▼');\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, f.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = 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 = '';\r\n\r\n /**\r\n * Collapse icon HTML\r\n * @private\r\n */\r\n this.icnCollapseHtml = '';\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 {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, opts.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = opts.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = 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\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 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"],"sourceRoot":""}
\ No newline at end of file
diff --git a/dist/tablefilter/tf-0-ff3c2103b4f98d8cf876.js b/dist/tablefilter/tf-0-ff3c2103b4f98d8cf876.js
deleted file mode 100644
index cf66567b..00000000
--- a/dist/tablefilter/tf-0-ff3c2103b4f98d8cf876.js
+++ /dev/null
@@ -1,3529 +0,0 @@
-(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],{
-
-/***/ "./node_modules/format-number/index.js":
-/*!*********************************************!*\
- !*** ./node_modules/format-number/index.js ***!
- \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-
-module.exports = formatter;
-module.exports.default = formatter;
-
-function formatter(options) {
- options = options || {};
-
-
- // *********************************************************************************************
- // Set defaults for negatives
- // options.negative, options.negativeOut, options.separator retained for backward compatibility
- // *********************************************************************************************
-
- // type of negative; default left
- options.negativeType = options.negativeType || (options.negative === 'R' ? 'right' : 'left')
-
- // negative symbols '-' or '()'
- if (typeof options.negativeLeftSymbol !== 'string') {
- switch (options.negativeType) {
- case 'left':
- options.negativeLeftSymbol = '-';
- break;
- case 'brackets':
- options.negativeLeftSymbol = '(';
- break;
- default:
- options.negativeLeftSymbol = '';
- }
- }
- if (typeof options.negativeRightSymbol !== 'string') {
- switch (options.negativeType) {
- case 'right':
- options.negativeRightSymbol = '-';
- break;
- case 'brackets':
- options.negativeRightSymbol = ')';
- break;
- default:
- options.negativeRightSymbol = '';
- }
- }
-
- // whether negative symbol should be inside/outside prefix and suffix
-
- if (typeof options.negativeLeftOut !== "boolean") {
- options.negativeLeftOut = (options.negativeOut === false ? false : true);
- }
- if (typeof options.negativeRightOut !== "boolean") {
- options.negativeRightOut = (options.negativeOut === false ? false : true);
- }
-
- //prefix and suffix
- options.prefix = options.prefix || '';
- options.suffix = options.suffix || '';
-
- //separators
- if (typeof options.integerSeparator !== 'string') {
- options.integerSeparator = (typeof options.separator === 'string' ? options.separator : ',');
- }
- options.decimalsSeparator = typeof options.decimalsSeparator === 'string' ? options.decimalsSeparator : '';
- options.decimal = options.decimal || '.';
-
- //padders
- options.padLeft = options.padLeft || -1 //default no padding
- options.padRight = options.padRight || -1 //default no padding
-
- function format(number, overrideOptions) {
- overrideOptions = overrideOptions || {};
-
- if (number || number === 0) {
- number = '' + number;//convert number to string if it isn't already
- } else {
- return '';
- }
-
- //identify a negative number and make it absolute
- var output = [];
- var negative = number.charAt(0) === '-';
- number = number.replace(/^\-/g, '');
-
- //Prepare output with left hand negative and/or prefix
- if (!options.negativeLeftOut && !overrideOptions.noUnits) {
- output.push(options.prefix);
- }
- if (negative) {
- output.push(options.negativeLeftSymbol);
- }
- if (options.negativeLeftOut && !overrideOptions.noUnits) {
- output.push(options.prefix);
- }
-
- //Format core number
- number = number.split('.');
- if (options.round != null) round(number, options.round);
- if (options.truncate != null) number[1] = truncate(number[1], options.truncate);
- if (options.padLeft > 0) number[0] = padLeft(number[0], options.padLeft);
- if (options.padRight > 0) number[1] = padRight(number[1], options.padRight);
- if (!overrideOptions.noSeparator && number[1]) number[1] = addDecimalSeparators(number[1], options.decimalsSeparator);
- if (!overrideOptions.noSeparator && number[0]) number[0] = addIntegerSeparators(number[0], options.integerSeparator);
- output.push(number[0]);
- if (number[1]) {
- output.push(options.decimal);
- output.push(number[1]);
- }
-
- //Prepare output with right hand negative and/or prefix
- if (options.negativeRightOut && !overrideOptions.noUnits) {
- output.push(options.suffix);
- }
- if (negative) {
- output.push(options.negativeRightSymbol);
- }
- if (!options.negativeRightOut && !overrideOptions.noUnits) {
- output.push(options.suffix);
- }
-
- //join output and return
- return output.join('');
- }
-
- format.negative = options.negative;
- format.negativeOut = options.negativeOut;
- format.negativeType = options.negativeType;
- format.negativeLeftOut = options.negativeLeftOut;
- format.negativeLeftSymbol = options.negativeLeftSymbol;
- format.negativeRightOut = options.negativeRightOut;
- format.negativeRightSymbol = options.negativeRightSymbol;
- format.prefix = options.prefix;
- format.suffix = options.suffix;
- format.separate = options.separate;
- format.integerSeparator = options.integerSeparator;
- format.decimalsSeparator = options.decimalsSeparator;
- format.decimal = options.decimal;
- format.padLeft = options.padLeft;
- format.padRight = options.padRight;
- format.truncate = options.truncate;
- format.round = options.round;
-
- function unformat(number, allowedSeparators) {
- allowedSeparators = allowedSeparators || [];
- if (options.allowedSeparators) {
- options.allowedSeparators.forEach(function (s) { allowedSeparators.push (s); });
- }
- allowedSeparators.push(options.integerSeparator);
- allowedSeparators.push(options.decimalsSeparator);
- number = number.replace(options.prefix, '');
- number = number.replace(options.suffix, '');
- var newNumber = number;
- do {
- number = newNumber;
- for (var i = 0; i < allowedSeparators.length; i++) {
- newNumber = newNumber.replace(allowedSeparators[i], '');
- }
- } while (newNumber != number);
- return number;
- }
- format.unformat = unformat;
-
- function validate(number, allowedSeparators) {
- number = unformat(number, allowedSeparators);
- number = number.split(options.decimal);
- if (number.length > 2) {
- return false;
- } else if (options.truncate != null && number[1] && number[1].length > options.truncate) {
- return false;
- } else if (options.round != null && number[1] && number[1].length > options.round) {
- return false;
- } else {
- return /^-?\d+\.?\d*$/.test(number);
- }
- }
- return format;
-}
-
-//where x is already the integer part of the number
-function addIntegerSeparators(x, separator) {
- x += '';
- if (!separator) return x;
- var rgx = /(\d+)(\d{3})/;
- while (rgx.test(x)) {
- x = x.replace(rgx, '$1' + separator + '$2');
- }
- return x;
-}
-
-//where x is already the decimal part of the number
-function addDecimalSeparators(x, separator) {
- x += '';
- if (!separator) return x;
- var rgx = /(\d{3})(\d+)/;
- while (rgx.test(x)) {
- x = x.replace(rgx, '$1' + separator + '$2');
- }
- return x;
-}
-
-//where x is the integer part of the number
-function padLeft(x, padding) {
- x = x + '';
- var buf = [];
- while (buf.length + x.length < padding) {
- buf.push('0');
- }
- return buf.join('') + x;
-}
-
-//where x is the decimals part of the number
-function padRight(x, padding) {
- if (x) {
- x += '';
- } else {
- x = '';
- }
- var buf = [];
- while (buf.length + x.length < padding) {
- buf.push('0');
- }
- return x + buf.join('');
-}
-function truncate(x, length) {
- if (x) {
- x += '';
- }
- if (x && x.length > length) {
- return x.substr(0, length);
- } else {
- return x;
- }
-}
-
-//where number is an array with 0th item as integer string and 1st item as decimal string (no negatives)
-function round(number, places) {
- if (number[1] && places >= 0 && number[1].length > places) {
- //truncate to correct number of decimal places
- var decim = number[1].slice(0, places);
- //if next digit was >= 5 we need to round up
- if (+(number[1].substr(places, 1)) >= 5) {
- //But first count leading zeros as converting to a number will loose them
- var leadingzeros = "";
- while (decim.charAt(0)==="0") {
- leadingzeros = leadingzeros + "0";
- decim = decim.substr(1);
- }
- //Then we can change decim to a number and add 1 before replacing leading zeros
- decim = (+decim + 1) + '';
- decim = leadingzeros + decim;
- if (decim.length > places) {
- //adding one has made it longer
- number[0] = (+number[0]+ +decim.charAt(0)) + ''; //add value of firstchar to the integer part
- decim = decim.substring(1); //ignore the 1st char at the beginning which is the carry to the integer part
- }
- }
- number[1] = decim;
- }
- return number;
-}
-
-
-/***/ }),
-
-/***/ "./node_modules/raw-loader/index.js!./libs/sortabletable.js":
-/*!*********************************************************!*\
- !*** ./node_modules/raw-loader!./libs/sortabletable.js ***!
- \*********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-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"
-
-/***/ }),
-
-/***/ "./node_modules/script-loader/addScript.js":
-/*!*************************************************!*\
- !*** ./node_modules/script-loader/addScript.js ***!
- \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
-*/
-module.exports = function(src) {
- function log(error) {
- (typeof console !== "undefined")
- && (console.error || console.log)("[Script Loader]", error);
- }
-
- // Check for IE =< 8
- function isIE() {
- return typeof attachEvent !== "undefined" && typeof addEventListener === "undefined";
- }
-
- try {
- if (typeof execScript !== "undefined" && isIE()) {
- execScript(src);
- } else if (typeof eval !== "undefined") {
- eval.call(null, src);
- } else {
- log("EvalError: No eval function available");
- }
- } catch (error) {
- log(error);
- }
-}
-
-
-/***/ }),
-
-/***/ "./node_modules/script-loader/index.js!./libs/sortabletable.js":
-/*!************************************************************!*\
- !*** ./node_modules/script-loader!./libs/sortabletable.js ***!
- \************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-__webpack_require__(/*! !./node_modules/script-loader/addScript.js */ "./node_modules/script-loader/addScript.js")(__webpack_require__(/*! !./node_modules/raw-loader!./libs/sortabletable.js */ "./node_modules/raw-loader/index.js!./libs/sortabletable.js")+"\n\n// SCRIPT-LOADER FOOTER\n//# sourceURL=script:///C:/projects/dev/github/TableFilter/libs/sortabletable.js")
-
-/***/ }),
-
-/***/ "./src sync recursive ^\\.\\/.*$":
-/*!***************************!*\
- !*** ./src sync ^\.\/.*$ ***!
- \***************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var map = {
- "./array": "./src/array.js",
- "./array.js": "./src/array.js",
- "./const": "./src/const.js",
- "./const.js": "./src/const.js",
- "./cookie": "./src/cookie.js",
- "./cookie.js": "./src/cookie.js",
- "./dom": "./src/dom.js",
- "./dom.js": "./src/dom.js",
- "./emitter": "./src/emitter.js",
- "./emitter.js": "./src/emitter.js",
- "./event": "./src/event.js",
- "./event.js": "./src/event.js",
- "./extensions/advancedGrid/adapterEzEditTable": "./src/extensions/advancedGrid/adapterEzEditTable.js",
- "./extensions/advancedGrid/adapterEzEditTable.js": "./src/extensions/advancedGrid/adapterEzEditTable.js",
- "./extensions/advancedGrid/advancedGrid": "./src/extensions/advancedGrid/advancedGrid.js",
- "./extensions/advancedGrid/advancedGrid.js": "./src/extensions/advancedGrid/advancedGrid.js",
- "./extensions/colOps/colOps": "./src/extensions/colOps/colOps.js",
- "./extensions/colOps/colOps.js": "./src/extensions/colOps/colOps.js",
- "./extensions/colsVisibility/colsVisibility": "./src/extensions/colsVisibility/colsVisibility.js",
- "./extensions/colsVisibility/colsVisibility.js": "./src/extensions/colsVisibility/colsVisibility.js",
- "./extensions/filtersVisibility/filtersVisibility": "./src/extensions/filtersVisibility/filtersVisibility.js",
- "./extensions/filtersVisibility/filtersVisibility.js": "./src/extensions/filtersVisibility/filtersVisibility.js",
- "./extensions/sort/adapterSortabletable": "./src/extensions/sort/adapterSortabletable.js",
- "./extensions/sort/adapterSortabletable.js": "./src/extensions/sort/adapterSortabletable.js",
- "./extensions/sort/sort": "./src/extensions/sort/sort.js",
- "./extensions/sort/sort.js": "./src/extensions/sort/sort.js",
- "./feature": "./src/feature.js",
- "./feature.js": "./src/feature.js",
- "./modules/alternateRows": "./src/modules/alternateRows.js",
- "./modules/alternateRows.js": "./src/modules/alternateRows.js",
- "./modules/baseDropdown": "./src/modules/baseDropdown.js",
- "./modules/baseDropdown.js": "./src/modules/baseDropdown.js",
- "./modules/checkList": "./src/modules/checkList.js",
- "./modules/checkList.js": "./src/modules/checkList.js",
- "./modules/clearButton": "./src/modules/clearButton.js",
- "./modules/clearButton.js": "./src/modules/clearButton.js",
- "./modules/dateType": "./src/modules/dateType.js",
- "./modules/dateType.js": "./src/modules/dateType.js",
- "./modules/dropdown": "./src/modules/dropdown.js",
- "./modules/dropdown.js": "./src/modules/dropdown.js",
- "./modules/gridLayout": "./src/modules/gridLayout.js",
- "./modules/gridLayout.js": "./src/modules/gridLayout.js",
- "./modules/hash": "./src/modules/hash.js",
- "./modules/hash.js": "./src/modules/hash.js",
- "./modules/help": "./src/modules/help.js",
- "./modules/help.js": "./src/modules/help.js",
- "./modules/highlightKeywords": "./src/modules/highlightKeywords.js",
- "./modules/highlightKeywords.js": "./src/modules/highlightKeywords.js",
- "./modules/loader": "./src/modules/loader.js",
- "./modules/loader.js": "./src/modules/loader.js",
- "./modules/markActiveColumns": "./src/modules/markActiveColumns.js",
- "./modules/markActiveColumns.js": "./src/modules/markActiveColumns.js",
- "./modules/noResults": "./src/modules/noResults.js",
- "./modules/noResults.js": "./src/modules/noResults.js",
- "./modules/paging": "./src/modules/paging.js",
- "./modules/paging.js": "./src/modules/paging.js",
- "./modules/popupFilter": "./src/modules/popupFilter.js",
- "./modules/popupFilter.js": "./src/modules/popupFilter.js",
- "./modules/rowsCounter": "./src/modules/rowsCounter.js",
- "./modules/rowsCounter.js": "./src/modules/rowsCounter.js",
- "./modules/state": "./src/modules/state.js",
- "./modules/state.js": "./src/modules/state.js",
- "./modules/statusBar": "./src/modules/statusBar.js",
- "./modules/statusBar.js": "./src/modules/statusBar.js",
- "./modules/storage": "./src/modules/storage.js",
- "./modules/storage.js": "./src/modules/storage.js",
- "./modules/toolbar": "./src/modules/toolbar.js",
- "./modules/toolbar.js": "./src/modules/toolbar.js",
- "./number": "./src/number.js",
- "./number.js": "./src/number.js",
- "./register": "./src/register.js",
- "./register.js": "./src/register.js",
- "./root": "./src/root.js",
- "./root.js": "./src/root.js",
- "./settings": "./src/settings.js",
- "./settings.js": "./src/settings.js",
- "./sort": "./src/sort.js",
- "./sort.js": "./src/sort.js",
- "./string": "./src/string.js",
- "./string.js": "./src/string.js",
- "./tablefilter": "./src/tablefilter.js",
- "./tablefilter.js": "./src/tablefilter.js",
- "./types": "./src/types.js",
- "./types.js": "./src/types.js"
-};
-
-
-function webpackContext(req) {
- var id = webpackContextResolve(req);
- var module = __webpack_require__(id);
- return module;
-}
-function webpackContextResolve(req) {
- var id = map[req];
- if(!(id + 1)) { // check for number or string
- var e = new Error('Cannot find module "' + req + '".');
- e.code = 'MODULE_NOT_FOUND';
- throw e;
- }
- return id;
-}
-webpackContext.keys = function webpackContextKeys() {
- return Object.keys(map);
-};
-webpackContext.resolve = webpackContextResolve;
-module.exports = webpackContext;
-webpackContext.id = "./src sync recursive ^\\.\\/.*$";
-
-/***/ }),
-
-/***/ "./src/extensions/advancedGrid/adapterEzEditTable.js":
-/*!***********************************************************!*\
- !*** ./src/extensions/advancedGrid/adapterEzEditTable.js ***!
- \***********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AdapterEzEditTable; });
-/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js");
-/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js");
-/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../const */ "./src/const.js");
-/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../settings */ "./src/settings.js");
-/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../root */ "./src/root.js");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
-
-function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
-
-function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-
-
-
-
-
-var INSTANTIATION_ERROR = "Failed to instantiate EditTable object.\n \n\"ezEditTable\" dependency not found.";
-/**
- * Adapter module for ezEditTable, an external library providing advanced
- * grid features (selection and edition):
- * http://codecanyon.net/item/ezedittable-enhance-html-tables/2425123?ref=koalyptus
- */
-
-var AdapterEzEditTable =
-/*#__PURE__*/
-function (_Feature) {
- _inherits(AdapterEzEditTable, _Feature);
-
- /**
- * Creates an instance of AdapterEzEditTable
- *
- * @param {TableFilter} tf TableFilter instance
- * @param {Object} cfg Configuration options for ezEditTable library
- */
- function AdapterEzEditTable(tf, cfg) {
- var _this;
-
- _classCallCheck(this, AdapterEzEditTable);
-
- _this = _possibleConstructorReturn(this, _getPrototypeOf(AdapterEzEditTable).call(this, tf, cfg.name));
- /**
- * Module description
- * @type {String}
- */
-
- _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.description, 'ezEditTable adapter');
- /**
- * Filename of ezEditTable library
- * @type {String}
- */
-
- _this.filename = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.filename, 'ezEditTable.js');
- /**
- * Path to ezEditTable library
- * @type {String}
- */
-
- _this.vendorPath = cfg.vendor_path;
- /**
- * Load ezEditTable stylesheet
- * @type {Boolean}
- */
-
- _this.loadStylesheet = Boolean(cfg.load_stylesheet);
- /**
- * Path to ezEditTable stylesheet
- * @type {String}
- */
-
- _this.stylesheet = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.stylesheet, _this.vendorPath + 'ezEditTable.css');
- /**
- * Name of ezEditTable stylesheet
- * @type {String}
- */
-
- _this.stylesheetName = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.stylesheet_name, 'ezEditTableCss'); // Enable the ezEditTable's scroll into view behaviour if grid layout on
-
- cfg.scroll_into_view = cfg.scroll_into_view === false ? false : tf.gridLayout;
- /**
- * ezEditTable instance
- * @type {EditTable}
- * @private
- */
-
- _this._ezEditTable = null;
- /**
- * ezEditTable configuration
- * @private
- */
-
- _this.cfg = cfg;
-
- _this.enable();
-
- return _this;
- }
- /**
- * Conditionally load ezEditTable library and set advanced grid
- */
-
-
- _createClass(AdapterEzEditTable, [{
- key: "init",
- value: function init() {
- var _this2 = this;
-
- if (this.initialized) {
- return;
- }
-
- var tf = this.tf;
-
- if (_root__WEBPACK_IMPORTED_MODULE_4__["root"].EditTable) {
- this._setAdvancedGrid();
- } else {
- var path = this.vendorPath + this.filename;
- tf.import(this.filename, path, function () {
- return _this2._setAdvancedGrid();
- });
- }
-
- if (this.loadStylesheet && !tf.isImported(this.stylesheet, 'link')) {
- tf.import(this.stylesheetName, this.stylesheet, null, 'link');
- } // TODO: hack to prevent ezEditTable enter key event hijaking.
- // Needs to be fixed in the vendor's library
-
-
- this.emitter.on(['filter-focus', 'filter-blur'], function () {
- return _this2._toggleForInputFilter();
- });
- /**
- * @inherited
- */
-
- this.initialized = true;
- }
- /**
- * Instantiate ezEditTable component for advanced grid features
- * @private
- */
-
- }, {
- key: "_setAdvancedGrid",
- value: function _setAdvancedGrid() {
- var tf = this.tf; //start row for EditTable constructor needs to be calculated
-
- var startRow,
- cfg = this.cfg,
- thead = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(tf.dom(), 'thead'); //if thead exists and startRow not specified, startRow is calculated
- //automatically by EditTable
-
- if (thead.length > 0 && !cfg.startRow) {
- startRow = undefined;
- } //otherwise startRow config property if any or TableFilter refRow
- else {
- startRow = cfg.startRow || tf.refRow;
- }
-
- cfg.base_path = cfg.base_path || tf.basePath + 'ezEditTable/';
- var editable = cfg.editable;
- var selectable = cfg.selection;
-
- if (selectable) {
- cfg.default_selection = cfg.default_selection || 'row';
- } //CSS Styles
-
-
- cfg.active_cell_css = cfg.active_cell_css || 'ezETSelectedCell';
- var _lastValidRowIndex = 0;
- var _lastRowIndex = 0;
-
- if (selectable) {
- //Row navigation needs to be calculated according to TableFilter's
- //validRowsIndex array
- var onAfterSelection = function onAfterSelection(et, selectedElm, e) {
- var slc = et.Selection; //Next valid filtered row needs to be selected
-
- var doSelect = function doSelect(nextRowIndex) {
- if (et.defaultSelection === 'row') {
- /* eslint-disable */
- slc.SelectRowByIndex(nextRowIndex);
- /* eslint-enable */
- } else {
- /* eslint-disable */
- et.ClearSelections();
- /* eslint-enable */
-
- var cellIndex = selectedElm.cellIndex,
- _row = tf.dom().rows[nextRowIndex];
-
- if (et.defaultSelection === 'both') {
- /* eslint-disable */
- slc.SelectRowByIndex(nextRowIndex);
- /* eslint-enable */
- }
-
- if (_row) {
- /* eslint-disable */
- slc.SelectCell(_row.cells[cellIndex]);
- /* eslint-enable */
- }
- } //Table is filtered
-
-
- if (tf.validRowsIndex.length !== tf.getRowsNb()) {
- var r = tf.dom().rows[nextRowIndex];
-
- if (r) {
- r.scrollIntoView(false);
- }
-
- if (cell) {
- if (cell.cellIndex === tf.getCellsNb() - 1 && tf.gridLayout) {
- tf.tblCont.scrollLeft = 100000000;
- } else if (cell.cellIndex === 0 && tf.gridLayout) {
- tf.tblCont.scrollLeft = 0;
- } else {
- cell.scrollIntoView(false);
- }
- }
- }
- }; //table is not filtered
-
-
- if (!tf.validRowsIndex) {
- return;
- }
-
- var validIndexes = tf.validRowsIndex,
- validIdxLen = validIndexes.length,
- row = et.defaultSelection !== 'row' ? selectedElm.parentNode : selectedElm,
- //cell for default_selection = 'both' or 'cell'
- cell = selectedElm.nodeName === 'TD' ? selectedElm : null,
-
- /* eslint-disable */
- keyCode = e !== undefined ? et.Event.GetKey(e) : 0,
-
- /* eslint-enable */
- isRowValid = validIndexes.indexOf(row.rowIndex) !== -1,
- nextRowIndex,
- paging = tf.feature('paging'),
- //pgup/pgdown keys
- d = keyCode === 34 || keyCode === 33 ? paging && paging.pageLength || et.nbRowsPerPage : 1; //If next row is not valid, next valid filtered row needs to be
- //calculated
-
- if (!isRowValid) {
- //Selection direction up/down
- if (row.rowIndex > _lastRowIndex) {
- //last row
- if (row.rowIndex >= validIndexes[validIdxLen - 1]) {
- nextRowIndex = validIndexes[validIdxLen - 1];
- } else {
- var calcRowIndex = _lastValidRowIndex + d;
-
- if (calcRowIndex > validIdxLen - 1) {
- nextRowIndex = validIndexes[validIdxLen - 1];
- } else {
- nextRowIndex = validIndexes[calcRowIndex];
- }
- }
- } else {
- //first row
- if (row.rowIndex <= validIndexes[0]) {
- nextRowIndex = validIndexes[0];
- } else {
- var v = validIndexes[_lastValidRowIndex - d];
- nextRowIndex = v ? v : validIndexes[0];
- }
- }
-
- _lastRowIndex = row.rowIndex;
- doSelect(nextRowIndex);
- } else {
- //If filtered row is valid, special calculation for
- //pgup/pgdown keys
- if (keyCode !== 34 && keyCode !== 33) {
- _lastValidRowIndex = validIndexes.indexOf(row.rowIndex);
- _lastRowIndex = row.rowIndex;
- } else {
- if (keyCode === 34) {
- //pgdown
- //last row
- if (_lastValidRowIndex + d <= validIdxLen - 1) {
- nextRowIndex = validIndexes[_lastValidRowIndex + d];
- } else {
- nextRowIndex = [validIdxLen - 1];
- }
- } else {
- //pgup
- //first row
- if (_lastValidRowIndex - d <= validIndexes[0]) {
- nextRowIndex = validIndexes[0];
- } else {
- nextRowIndex = validIndexes[_lastValidRowIndex - d];
- }
- }
-
- _lastRowIndex = nextRowIndex;
- _lastValidRowIndex = validIndexes.indexOf(nextRowIndex);
- doSelect(nextRowIndex);
- }
- }
- }; //Page navigation has to be enforced whenever selected row is out of
- //the current page range
-
-
- var onBeforeSelection = function onBeforeSelection(et, selectedElm) {
- var row = et.defaultSelection !== 'row' ? selectedElm.parentNode : selectedElm;
-
- if (tf.paging) {
- if (tf.feature('paging').nbPages > 1) {
- var paging = tf.feature('paging'); //page length is re-assigned in case it has changed
-
- et.nbRowsPerPage = paging.pageLength;
- var validIndexes = tf.validRowsIndex,
- validIdxLen = validIndexes.length,
- pagingEndRow = parseInt(paging.startPagingRow, 10) + parseInt(paging.pageLength, 10);
- var rowIndex = row.rowIndex;
-
- if (rowIndex === validIndexes[validIdxLen - 1] && paging.currentPageNb !== paging.nbPages) {
- paging.setPage('last');
- } else if (rowIndex === validIndexes[0] && paging.currentPageNb !== 1) {
- paging.setPage('first');
- } else if (rowIndex > validIndexes[pagingEndRow - 1] && rowIndex < validIndexes[validIdxLen - 1]) {
- paging.setPage('next');
- } else if (rowIndex < validIndexes[paging.startPagingRow] && rowIndex > validIndexes[0]) {
- paging.setPage('previous');
- }
- }
- }
- }; //Selected row needs to be visible when paging is activated
-
-
- if (tf.paging) {
- tf.feature('paging').onAfterChangePage = function (paging) {
- var advGrid = paging.tf.extension('advancedGrid');
- var et = advGrid._ezEditTable;
- var slc = et.Selection;
- /* eslint-disable */
-
- var row = slc.GetActiveRow();
- /* eslint-enable */
-
- if (row) {
- row.scrollIntoView(false);
- }
- /* eslint-disable */
-
-
- var cell = slc.GetActiveCell();
- /* eslint-enable */
-
- if (cell) {
- cell.scrollIntoView(false);
- }
- };
- } //Rows navigation when rows are filtered is performed with the
- //EditTable row selection callback events
-
-
- if (cfg.default_selection === 'row') {
- var fnB = cfg.on_before_selected_row;
-
- cfg.on_before_selected_row = function () {
- var args = arguments;
- onBeforeSelection(args[0], args[1], args[2]);
-
- if (fnB) {
- fnB.call(null, args[0], args[1], args[2]);
- }
- };
-
- var fnA = cfg.on_after_selected_row;
-
- cfg.on_after_selected_row = function () {
- var args = arguments;
- onAfterSelection(args[0], args[1], args[2]);
-
- if (fnA) {
- fnA.call(null, args[0], args[1], args[2]);
- }
- };
- } else {
- var fnD = cfg.on_before_selected_cell;
-
- cfg.on_before_selected_cell = function () {
- var args = arguments;
- onBeforeSelection(args[0], args[1], args[2]);
-
- if (fnD) {
- fnD.call(null, args[0], args[1], args[2]);
- }
- };
-
- var fnC = cfg.on_after_selected_cell;
-
- cfg.on_after_selected_cell = function () {
- var args = arguments;
- onAfterSelection(args[0], args[1], args[2]);
-
- if (fnC) {
- fnC.call(null, args[0], args[1], args[2]);
- }
- };
- }
- }
-
- if (editable) {
- //Added or removed rows, TF rows number needs to be re-calculated
- var fnE = cfg.on_added_dom_row;
-
- cfg.on_added_dom_row = function () {
- var args = arguments;
- tf.nbFilterableRows++;
-
- if (!tf.paging) {
- tf.emitter.emit('rows-changed', tf, this);
- } else {
- tf.nbFilterableRows++;
- tf.paging = false;
- tf.feature('paging').destroy();
- tf.feature('paging').reset();
- }
-
- if (tf.alternateRows) {
- tf.feature('alternateRows').init();
- }
-
- if (fnE) {
- fnE.call(null, args[0], args[1], args[2]);
- }
- };
-
- if (cfg.actions && cfg.actions['delete']) {
- var fnF = cfg.actions['delete'].on_after_submit;
-
- cfg.actions['delete'].on_after_submit = function () {
- var args = arguments;
- tf.nbFilterableRows--;
-
- if (!tf.paging) {
- tf.emitter.emit('rows-changed', tf, this);
- } else {
- tf.nbFilterableRows--;
- tf.paging = false;
- tf.feature('paging').destroy();
- tf.feature('paging').reset(false);
- }
-
- if (tf.alternateRows) {
- tf.feature('alternateRows').init();
- }
-
- if (fnF) {
- fnF.call(null, args[0], args[1]);
- }
- };
- }
- }
-
- try {
- /* eslint-disable */
- this._ezEditTable = new EditTable(tf.id, cfg, startRow);
-
- this._ezEditTable.Init();
- /* eslint-enable */
-
- } catch (e) {
- throw new Error(INSTANTIATION_ERROR);
- }
-
- this.initialized = true;
- }
- /**
- * Reset advanced grid when previously removed
- */
-
- }, {
- key: "reset",
- value: function reset() {
- var ezEditTable = this._ezEditTable;
-
- if (ezEditTable) {
- if (this.cfg.selection) {
- /* eslint-disable */
- ezEditTable.Selection.Set();
- /* eslint-enable */
- }
-
- if (this.cfg.editable) {
- /* eslint-disable */
- ezEditTable.Editable.Set();
- /* eslint-enable */
- }
- }
- }
- /**
- * Toggle behaviour
- */
-
- }, {
- key: "toggle",
- value: function toggle() {
- var ezEditTable = this._ezEditTable;
-
- if (ezEditTable.editable) {
- /* eslint-disable */
- ezEditTable.Editable.Remove();
- /* eslint-enable */
- } else {
- /* eslint-disable */
- ezEditTable.Editable.Set();
- /* eslint-enable */
- }
-
- if (ezEditTable.selection) {
- /* eslint-disable */
- ezEditTable.Selection.Remove();
- /* eslint-enable */
- } else {
- /* eslint-disable */
- ezEditTable.Selection.Set();
- /* eslint-enable */
- }
- }
- }, {
- key: "_toggleForInputFilter",
- value: function _toggleForInputFilter() {
- var tf = this.tf;
-
- if (!tf.getActiveFilterId()) {
- return;
- }
-
- var colIndex = tf.getColumnIndexFromFilterId(tf.getActiveFilterId());
- var filterType = tf.getFilterType(colIndex);
-
- if (filterType === _const__WEBPACK_IMPORTED_MODULE_2__["INPUT"]) {
- this.toggle();
- }
- }
- /**
- * Remove advanced grid
- */
-
- }, {
- key: "destroy",
- value: function destroy() {
- var _this3 = this;
-
- if (!this.initialized) {
- return;
- }
-
- var ezEditTable = this._ezEditTable;
-
- if (ezEditTable) {
- if (this.cfg.selection) {
- /* eslint-disable */
- ezEditTable.Selection.ClearSelections();
- ezEditTable.Selection.Remove();
- /* eslint-enable */
- }
-
- if (this.cfg.editable) {
- /* eslint-disable */
- ezEditTable.Editable.Remove();
- /* eslint-enable */
- }
- }
-
- this.emitter.off(['filter-focus', 'filter-blur'], function () {
- return _this3._toggleForInputFilter();
- });
- this.initialized = false;
- }
- }]);
-
- return AdapterEzEditTable;
-}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]);
-
-
-
-/***/ }),
-
-/***/ "./src/extensions/advancedGrid/advancedGrid.js":
-/*!*****************************************************!*\
- !*** ./src/extensions/advancedGrid/advancedGrid.js ***!
- \*****************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _adapterEzEditTable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adapterEzEditTable */ "./src/extensions/advancedGrid/adapterEzEditTable.js");
-
-/* harmony default export */ __webpack_exports__["default"] = (_adapterEzEditTable__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/extensions/colOps/colOps.js":
-/*!*****************************************!*\
- !*** ./src/extensions/colOps/colOps.js ***!
- \*****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ColOps; });
-/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js");
-/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js");
-/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types */ "./src/types.js");
-/* harmony import */ var _sort__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../sort */ "./src/sort.js");
-/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../const */ "./src/const.js");
-/* harmony import */ var format_number__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! format-number */ "./node_modules/format-number/index.js");
-/* harmony import */ var format_number__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(format_number__WEBPACK_IMPORTED_MODULE_5__);
-/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../settings */ "./src/settings.js");
-/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../event */ "./src/event.js");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
-
-function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
-
-function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-
-
-
-
-
-
-
-
-var EVENTS = ['after-filtering', 'after-page-change', 'after-page-length-change'];
-var SUM = 'sum';
-var MEAN = 'mean';
-var MIN = 'min';
-var MAX = 'max';
-var MEDIAN = 'median';
-var Q1 = 'q1';
-var Q3 = 'q3';
-/**
- * Column calculations extension
- */
-
-var ColOps =
-/*#__PURE__*/
-function (_Feature) {
- _inherits(ColOps, _Feature);
-
- /**
- * Creates an instance of ColOps
- *
- * @param {TableFilter} tf TableFilter instance
- * @param {Object} opts Configuration object
- */
- function ColOps(tf, opts) {
- var _this;
-
- _classCallCheck(this, ColOps);
-
- _this = _possibleConstructorReturn(this, _getPrototypeOf(ColOps).call(this, tf, opts.name));
- /**
- * Callback fired before columns operations start
- * @type {Function}
- */
-
- _this.onBeforeOperation = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_before_operation, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after columns operations are completed
- * @type {Function}
- */
-
- _this.onAfterOperation = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_after_operation, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Configuration options
- * @type {Object}
- */
-
- _this.opts = opts;
- /**
- * List of DOM element IDs containing column's calculation result
- * @type {Array}
- */
-
- _this.labelIds = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.id, []);
- /**
- * List of columns' indexes for calculations
- * @type {Array}
- */
-
- _this.colIndexes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.col, []);
- /**
- * List of operations - possible values: 'sum', 'mean', 'min', 'max',
- * 'median', 'q1', 'q3'
- * @type {Array}
- */
-
- _this.operations = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.operation, []);
- /**
- * List of write methods used to write the result - possible values:
- * 'innerHTML', 'setValue', 'createTextNode'
- * @type {Array}
- */
-
- _this.outputTypes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.write_method, []);
- /**
- * List of format objects used for formatting the result -
- * refer to https://github.com/componitable/format-number to check
- * configuration options
- * @type {Array}
- */
-
- _this.formatResults = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.format_result, []);
- /**
- * List of row indexes displaying the results
- * @type {Array}
- */
-
- _this.totRowIndexes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.tot_row_index, []);
- /**
- * List of row indexes excluded from calculations
- * @type {Array}
- */
-
- _this.excludeRows = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.exclude_row, []);
- /**
- * List of decimal precision for calculation results
- * @type {Array}
- */
-
- _this.decimalPrecisions = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.decimal_precision, 2);
-
- _this.enable();
-
- return _this;
- }
- /**
- * Initializes ColOps instance
- */
-
-
- _createClass(ColOps, [{
- key: "init",
- value: function init() {
- if (this.initialized) {
- return;
- } // subscribe to events
-
-
- this.emitter.on(EVENTS, Object(_event__WEBPACK_IMPORTED_MODULE_7__["bound"])(this.calcAll, this));
- this.calcAll();
- /** @inherited */
-
- this.initialized = true;
- }
- /**
- * Calculates columns' values
- * Configuration options are stored in 'opts' property
- * - 'id' contains ids of elements showing result (array)
- * - 'col' contains the columns' indexes (array)
- * - 'operation' contains operation type (array, values: 'sum', 'mean',
- * 'min', 'max', 'median', 'q1', 'q3')
- * - 'write_method' array defines which method to use for displaying the
- * result (innerHTML, setValue, createTextNode) - default: 'innerHTML'
- * - 'tot_row_index' defines in which row results are displayed
- * (integers array)
- *
- * - changes made by Nuovella:
- * (1) optimized the routine (now it will only process each column once),
- * (2) added calculations for the median, lower and upper quartile.
- */
-
- }, {
- key: "calcAll",
- value: function calcAll() {
- var tf = this.tf;
-
- if (!tf.isInitialized()) {
- return;
- }
-
- this.onBeforeOperation(tf, this);
- this.emitter.emit('before-column-operation', tf, this);
- var colIndexes = this.colIndexes,
- colOperations = this.operations,
- outputTypes = this.outputTypes,
- totRowIndexes = this.totRowIndexes,
- excludeRows = this.excludeRows,
- formatResults = this.formatResults,
- decimalPrecisions = this.decimalPrecisions; //nuovella: determine unique list of columns to operate on
-
- var uIndexes = [];
- colIndexes.forEach(function (val) {
- if (uIndexes.indexOf(val) === -1) {
- uIndexes.push(val);
- }
- });
- var nbCols = uIndexes.length,
- rows = tf.dom().rows,
- colValues = [];
-
- for (var u = 0; u < nbCols; u++) {
- //this retrieves col values
- //use uIndexes because we only want to pass through this loop
- //once for each column get the values in this unique column
- colValues.push(tf.getVisibleColumnData(uIndexes[u], false, excludeRows));
- var curValues = colValues[u]; //next: calculate all operations for this column
-
- var result = 0,
- operations = [],
- precisions = [],
- labels = [],
- writeType = void 0,
- formatResult = [],
- idx = 0;
-
- for (var k = 0; k < colIndexes.length; k++) {
- if (colIndexes[k] !== uIndexes[u]) {
- continue;
- }
-
- operations[idx] = (colOperations[k] || 'sum').toLowerCase();
- precisions[idx] = decimalPrecisions[k];
- labels[idx] = this.labelIds[k];
- writeType = Object(_types__WEBPACK_IMPORTED_MODULE_2__["isArray"])(outputTypes) ? outputTypes[k] : null;
- formatResult[idx] = this.configureFormat(uIndexes[u], formatResults[k]);
- idx++;
- }
-
- for (var i = 0; i < idx; i++) {
- // emit values before column calculation
- this.emitter.emit('before-column-calc', tf, this, uIndexes[u], curValues, operations[i], precisions[i]);
- result = Number(this.calc(curValues, operations[i], null)); // emit column calculation result
-
- this.emitter.emit('column-calc', tf, this, uIndexes[u], result, operations[i], precisions[i]); // write result in expected DOM element
-
- this.writeResult(result, labels[i], writeType, precisions[i], formatResult[i]);
- } //for i
- // row(s) with result are always visible
-
-
- var totRow = totRowIndexes && totRowIndexes[u] ? rows[totRowIndexes[u]] : null;
-
- if (totRow) {
- totRow.style.display = '';
- }
- } //for u
-
-
- this.onAfterOperation(tf, this);
- this.emitter.emit('after-column-operation', tf, this);
- }
- /**
- * Make desired calculation on specified column.
- * @param {Number} colIndex Column index
- * @param {String} [operation=SUM] Operation type
- * @param {Number} precision Decimal precision
- * @returns {Number}
- */
-
- }, {
- key: "columnCalc",
- value: function columnCalc(colIndex) {
- var operation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SUM;
- var precision = arguments.length > 2 ? arguments[2] : undefined;
- var excludeRows = this.excludeRows || [];
- var colValues = tf.getVisibleColumnData(colIndex, false, excludeRows);
- return Number(this.calc(colValues, operation, precision));
- }
- /**
- * Make calculation on passed values.
- * @param {Array} values List of values
- * @param {String} [operation=SUM] Optional operation type
- * @param {Number} precision Optional result precision
- * @returns {Number}
- * @private
- */
-
- }, {
- key: "calc",
- value: function calc(colValues) {
- var operation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SUM;
- var precision = arguments.length > 2 ? arguments[2] : undefined;
- var result = 0;
-
- if (operation === Q1 || operation === Q3 || operation === MEDIAN) {
- colValues = this.sortColumnValues(colValues, _sort__WEBPACK_IMPORTED_MODULE_3__["numSortAsc"]);
- }
-
- switch (operation) {
- case MEAN:
- result = this.calcMean(colValues);
- break;
-
- case SUM:
- result = this.calcSum(colValues);
- break;
-
- case MIN:
- result = this.calcMin(colValues);
- break;
-
- case MAX:
- result = this.calcMax(colValues);
- break;
-
- case MEDIAN:
- result = this.calcMedian(colValues);
- break;
-
- case Q1:
- result = this.calcQ1(colValues);
- break;
-
- case Q3:
- result = this.calcQ3(colValues);
- break;
- }
-
- return Object(_types__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(precision) ? result : result.toFixed(precision);
- }
- /**
- * Calculate the sum of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcSum",
- value: function calcSum() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
-
- if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(values)) {
- return 0;
- }
-
- var result = values.reduce(function (x, y) {
- return Number(x) + Number(y);
- });
- return result;
- }
- /**
- * Calculate the mean of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcMean",
- value: function calcMean() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var result = this.calcSum(values) / values.length;
- return Number(result);
- }
- /**
- * Calculate the max value of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcMax",
- value: function calcMax() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- return Math.max.apply(null, values);
- }
- /**
- * Calculate the min value of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcMin",
- value: function calcMin() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- return Math.min.apply(null, values);
- }
- /**
- * Calculate the median of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcMedian",
- value: function calcMedian() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var nbValues = values.length;
- var aux = 0;
-
- if (nbValues % 2 === 1) {
- aux = Math.floor(nbValues / 2);
- return Number(values[aux]);
- }
-
- return (Number(values[nbValues / 2]) + Number(values[nbValues / 2 - 1])) / 2;
- }
- /**
- * Calculate the lower quartile of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcQ1",
- value: function calcQ1() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var nbValues = values.length;
- var posa = 0.0;
- posa = Math.floor(nbValues / 4);
-
- if (4 * posa === nbValues) {
- return (Number(values[posa - 1]) + Number(values[posa])) / 2;
- }
-
- return Number(values[posa]);
- }
- /**
- * Calculate the upper quartile of passed values.
- * @param {Array} [values=[]] List of values
- * @returns {Number}
- */
-
- }, {
- key: "calcQ3",
- value: function calcQ3() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var nbValues = values.length;
- var posa = 0.0;
- var posb = 0.0;
- posa = Math.floor(nbValues / 4);
-
- if (4 * posa === nbValues) {
- posb = 3 * posa;
- return (Number(values[posb]) + Number(values[posb - 1])) / 2;
- }
-
- return Number(values[nbValues - posa - 1]);
- }
- /**
- * Sort passed values with supplied sorter function.
- * @param {Array} [values=[]] List of values to be sorted
- * @param {Function} sorter Sorter function
- * @returns {Array}
- */
-
- }, {
- key: "sortColumnValues",
- value: function sortColumnValues() {
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var sorter = arguments.length > 1 ? arguments[1] : undefined;
- return values.sort(sorter);
- }
- /**
- * Write calculation result in passed DOM element with supplied write method
- * and decimal precision.
- * @param {Number} [result=0] Calculation result
- * @param {DOMElement} label DOM element
- * @param {String} [writeType='innerhtml'] Write method
- * @param {Number} [precision=2] Applied decimal precision
- * @private
- */
-
- }, {
- key: "writeResult",
- value: function writeResult() {
- var result = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
- var label = arguments.length > 1 ? arguments[1] : undefined;
- var writeType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'innerhtml';
- var precision = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 2;
- var format = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
- var labelElm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(label);
-
- if (!labelElm) {
- return;
- }
-
- result = result.toFixed(precision);
-
- if (isNaN(result) || !isFinite(result)) {
- result = '';
- } else {
- result = format_number__WEBPACK_IMPORTED_MODULE_5___default()(format)(result);
- }
-
- switch (writeType.toLowerCase()) {
- case 'innerhtml':
- labelElm.innerHTML = result;
- break;
-
- case 'setvalue':
- labelElm.value = result;
- break;
-
- case 'createtextnode':
- var oldNode = labelElm.firstChild;
- var txtNode = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createText"])(result);
- labelElm.replaceChild(txtNode, oldNode);
- break;
- }
- }
- /**
- * Configure the format options used to format the operation result based
- * on column type.
- * @param {Number} colIndex Column index
- * @param {Object} [format={}] Format object
- * @returns {Object}
- * @private
- */
-
- }, {
- key: "configureFormat",
- value: function configureFormat(colIndex) {
- var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- var tf = this.tf;
-
- if (tf.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_4__["FORMATTED_NUMBER"]])) {
- var colType = tf.colTypes[colIndex];
-
- if (colType.decimal && !format.decimal) {
- format.decimal = colType.decimal;
- }
-
- if (colType.thousands && !format.integerSeparator) {
- format.integerSeparator = colType.thousands;
- }
- } else {
- format.decimal = format.decimal || '';
- format.integerSeparator = format.integerSeparator || '';
- }
-
- return format;
- }
- /** Remove extension */
-
- }, {
- key: "destroy",
- value: function destroy() {
- if (!this.initialized) {
- return;
- } // unsubscribe to events
-
-
- this.emitter.off(EVENTS, Object(_event__WEBPACK_IMPORTED_MODULE_7__["bound"])(this.calcAll, this));
- this.initialized = false;
- }
- }]);
-
- return ColOps;
-}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]);
-
-
-
-/***/ }),
-
-/***/ "./src/extensions/colsVisibility/colsVisibility.js":
-/*!*********************************************************!*\
- !*** ./src/extensions/colsVisibility/colsVisibility.js ***!
- \*********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ColsVisibility; });
-/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js");
-/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js");
-/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types */ "./src/types.js");
-/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../event */ "./src/event.js");
-/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../root */ "./src/root.js");
-/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../const */ "./src/const.js");
-/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../settings */ "./src/settings.js");
-/* harmony import */ var _modules_toolbar__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../modules/toolbar */ "./src/modules/toolbar.js");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
-
-function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
-
-function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-
-
-
-
-
-
-
-
-/**
- * Columns Visibility extension
- */
-
-var ColsVisibility =
-/*#__PURE__*/
-function (_Feature) {
- _inherits(ColsVisibility, _Feature);
-
- /**
- * Creates an instance of ColsVisibility
- * @param {TableFilter} tf TableFilter instance
- * @param {Object} Configuration object
- */
- function ColsVisibility(tf, f) {
- var _this;
-
- _classCallCheck(this, ColsVisibility);
-
- _this = _possibleConstructorReturn(this, _getPrototypeOf(ColsVisibility).call(this, tf, f.name)); // Configuration object
-
- var cfg = _this.config;
- /**
- * Module name
- * @type {String}
- */
-
- _this.name = f.name;
- /**
- * Module description
- * @type {String}
- */
-
- _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.description, 'Columns visibility manager');
- /**
- * show/hide columns container element
- * @private
- */
-
- _this.spanEl = null;
- /**
- * show/hide columns button element
- * @private
- */
-
- _this.btnEl = null;
- /**
- * show/hide columns main container element
- * @private
- */
-
- _this.contEl = null;
- /**
- * Enable tick to hide a column, defaults to true
- * @type {Boolean}
- */
-
- _this.tickToHide = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsBool"])(f.tick_to_hide, true);
- /**
- * Enable columns manager UI, defaults to true
- * @type {Boolean}
- */
-
- _this.manager = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsBool"])(f.manager, true);
- /**
- * Headers HTML table reference only if headers are external
- * @type {DOMElement}
- */
-
- _this.headersTbl = f.headers_table || null;
- /**
- * Headers row index only if headers are external
- * @type {Number}
- */
-
- _this.headersIndex = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsNb"])(f.headers_index, 1);
- /**
- * ID of main container element
- * @type {String}
- */
-
- _this.contElTgtId = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.container_target_id, null);
- /**
- * Alternative text for column headers in column manager UI
- * @type {Array}
- */
-
- _this.headersText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(f.headers_text, []);
- /**
- * ID of button's container element
- * @type {String}
- */
-
- _this.btnTgtId = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_target_id, null);
- /**
- * Button's text, defaults to Columns▼
- * @type {String}
- */
-
- _this.btnText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_text, 'Columns▼');
- /**
- * Button's inner HTML
- * @type {String}
- */
-
- _this.btnHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_html, null);
- /**
- * Css class for button
- * @type {String}
- */
-
- _this.btnCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_css_class, 'colVis');
- /**
- * Columns manager UI close link text, defaults to 'Close'
- * @type {String}
- */
-
- _this.btnCloseText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_close_text, 'Close');
- /**
- * Columns manager UI close link HTML
- * @type {String}
- */
-
- _this.btnCloseHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_close_html, null);
- /**
- * Css for columns manager UI close link
- * @type {String}
- */
-
- _this.btnCloseCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_close_css_class, _this.btnCssClass);
- /**
- * Extension's stylesheet filename
- * @type {String}
- */
-
- _this.stylesheet = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.stylesheet, 'colsVisibility.css');
- /**
- * Css for columns manager UI span
- * @type {String}
- */
-
- _this.spanCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.span_css_class, 'colVisSpan');
- /**
- * Css for columns manager UI main container
- * @type {String}
- */
-
- _this.contCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.cont_css_class, 'colVisCont');
- /**
- * Css for columns manager UI checklist (ul)
- * @type {String}
- */
-
- _this.listCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(cfg.list_css_class, 'cols_checklist');
- /**
- * Css for columns manager UI checklist item (li)
- * @type {String}
- */
-
- _this.listItemCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(cfg.checklist_item_css_class, 'cols_checklist_item');
- /**
- * Css for columns manager UI checklist item selected state (li)
- * @type {String}
- */
-
- _this.listSlcItemCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(cfg.checklist_selected_item_css_class, 'cols_checklist_slc_item');
- /**
- * Text preceding the columns list, defaults to 'Hide' or 'Show'
- * depending on tick mode (tick_to_hide option)
- * @type {String}
- */
-
- _this.text = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.text, _this.tickToHide ? 'Hide: ' : 'Show: ');
- /**
- * List of columns indexes to be hidden at initialization
- * @type {Array}
- */
-
- _this.atStart = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(f.at_start, []);
- /**
- * Enable hover behaviour on columns manager button/link
- * @type {Boolean}
- */
-
- _this.enableHover = Boolean(f.enable_hover);
- /**
- * Enable select all option, disabled by default
- * @type {Boolean}
- */
-
- _this.enableTickAll = Boolean(f.enable_tick_all);
- /**
- * Text for select all option, defaults to 'Select all:'
- * @type {String}
- */
-
- _this.tickAllText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.tick_all_text, 'Select all:');
- /**
- * Default position in toolbar ('left'|'center'|'right')
- * @type {String}
- */
-
- _this.toolbarPosition = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.toolbar_position, _modules_toolbar__WEBPACK_IMPORTED_MODULE_7__["RIGHT"]);
- /**
- * List of indexes of hidden columns
- * @private
- */
-
- _this.hiddenCols = [];
- /**
- * Bound mouseup wrapper
- * @private
- */
-
- _this.boundMouseup = null;
- /**
- * Callback fired when the extension is initialized
- * @type {Function}
- */
-
- _this.onLoaded = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_loaded, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired before the columns manager is opened
- * @type {Function}
- */
-
- _this.onBeforeOpen = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_open, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after the columns manager is opened
- * @type {Function}
- */
-
- _this.onAfterOpen = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_open, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired before the columns manager is closed
- * @type {Function}
- */
-
- _this.onBeforeClose = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_close, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after the columns manager is closed
- * @type {Function}
- */
-
- _this.onAfterClose = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_close, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired before a column is hidden
- * @type {Function}
- */
-
- _this.onBeforeColHidden = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_col_hidden, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after a column is hidden
- * @type {Function}
- */
-
- _this.onAfterColHidden = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_col_hidden, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired before a column is displayed
- * @type {Function}
- */
-
- _this.onBeforeColDisplayed = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_col_displayed, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after a column is displayed
- * @type {Function}
- */
-
- _this.onAfterColDisplayed = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_col_displayed, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); //Grid layout support
-
- if (tf.gridLayout) {
- _this.headersTbl = tf.feature('gridLayout').headTbl; //headers table
-
- _this.headersIndex = 0; //headers index
- } //Loads extension stylesheet
-
-
- tf.import(f.name + 'Style', tf.getStylePath() + _this.stylesheet, null, 'link');
-
- _this.enable();
-
- return _this;
- }
- /**
- * Mouse-up event handler handling popup auto-close behaviour
- * @private
- */
-
-
- _createClass(ColsVisibility, [{
- key: "onMouseup",
- value: function onMouseup(evt) {
- var targetElm = Object(_event__WEBPACK_IMPORTED_MODULE_3__["targetEvt"])(evt);
-
- while (targetElm && targetElm !== this.contEl && targetElm !== this.btnEl) {
- targetElm = targetElm.parentNode;
- }
-
- if (targetElm !== this.contEl && targetElm !== this.btnEl) {
- this.toggle();
- }
-
- return;
- }
- /**
- * Toggle columns manager UI
- */
-
- }, {
- key: "toggle",
- value: function toggle() {
- // ensure mouseup event handler is removed
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["removeEvt"])(_root__WEBPACK_IMPORTED_MODULE_4__["root"], 'mouseup', this.boundMouseup);
- var contDisplay = this.contEl.style.display;
-
- if (contDisplay !== 'inline') {
- this.onBeforeOpen(this);
- }
-
- if (contDisplay === 'inline') {
- this.onBeforeClose(this);
- }
-
- this.contEl.style.display = contDisplay === 'inline' ? _const__WEBPACK_IMPORTED_MODULE_5__["NONE"] : 'inline';
-
- if (contDisplay !== 'inline') {
- this.onAfterOpen(this);
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(_root__WEBPACK_IMPORTED_MODULE_4__["root"], 'mouseup', this.boundMouseup);
- }
-
- if (contDisplay === 'inline') {
- this.onAfterClose(this);
- }
- }
- /**
- * Check an item in columns manager UI
- * @private
- */
-
- }, {
- key: "checkItem",
- value: function checkItem(lbl) {
- var li = lbl.parentNode;
-
- if (!li || !lbl) {
- return;
- }
-
- var isChecked = lbl.firstChild.checked;
- var colIndex = lbl.firstChild.getAttribute('id').split('_')[1];
- colIndex = parseInt(colIndex, 10);
-
- if (isChecked) {
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(li, this.listSlcItemCssClass);
- } else {
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeClass"])(li, this.listSlcItemCssClass);
- }
-
- var hide = false;
-
- if (this.tickToHide && isChecked || !this.tickToHide && !isChecked) {
- hide = true;
- }
-
- this.setHidden(colIndex, hide);
- }
- /**
- * Initializes ColsVisibility instance
- */
-
- }, {
- key: "init",
- value: function init() {
- var _this2 = this;
-
- if (this.initialized || !this.manager) {
- return;
- }
-
- this.emitter.emit('initializing-extension', this, !Object(_types__WEBPACK_IMPORTED_MODULE_2__["isNull"])(this.btnTgtId));
- this.emitter.on(['hide-column'], function (tf, colIndex) {
- return _this2.hideCol(colIndex);
- });
- this.buildBtn();
- this.buildManager();
- /** @inherited */
-
- this.initialized = true;
- this.boundMouseup = this.onMouseup.bind(this);
- this.emitter.emit('columns-visibility-initialized', this.tf, this);
- this.emitter.emit('extension-initialized', this); // Hide columns at start at very end of initialization, do not move
- // as order is important
-
- this._hideAtStart();
- }
- /**
- * Build main button UI
- */
-
- }, {
- key: "buildBtn",
- value: function buildBtn() {
- var _this3 = this;
-
- if (this.btnEl) {
- return;
- }
-
- var tf = this.tf;
- var span = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span');
- span.className = this.spanCssClass; // Container element (rdiv or custom element)
-
- var targetEl = !this.btnTgtId ? tf.feature('toolbar').container(this.toolbarPosition) : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.btnTgtId);
-
- if (!this.btnTgtId) {
- var firstChild = targetEl.firstChild;
- firstChild.parentNode.insertBefore(span, firstChild);
- } else {
- targetEl.appendChild(span);
- }
-
- if (!this.btnHtml) {
- var btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:;']);
- btn.className = this.btnCssClass;
- btn.title = this.desc;
- btn.innerHTML = this.btnText;
- span.appendChild(btn);
-
- if (!this.enableHover) {
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function (evt) {
- return _this3.toggle(evt);
- });
- } else {
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'mouseover', function (evt) {
- return _this3.toggle(evt);
- });
- }
- } else {
- // Custom html
- span.innerHTML = this.btnHtml;
- var colVisEl = span.firstChild;
-
- if (!this.enableHover) {
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(colVisEl, 'click', function (evt) {
- return _this3.toggle(evt);
- });
- } else {
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(colVisEl, 'mouseover', function (evt) {
- return _this3.toggle(evt);
- });
- }
- }
-
- this.spanEl = span;
- this.btnEl = this.spanEl.firstChild;
- this.onLoaded(this);
- }
- /**
- * Build columns manager UI
- */
-
- }, {
- key: "buildManager",
- value: function buildManager() {
- var _this4 = this;
-
- var tf = this.tf;
- var container = !this.contElTgtId ? Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('div') : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contElTgtId);
- container.className = this.contCssClass; //Extension description
-
- var extNameLabel = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('p');
- extNameLabel.innerHTML = this.text;
- container.appendChild(extNameLabel); //Headers list
-
- var ul = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('ul');
- ul.className = this.listCssClass;
- var tbl = this.headersTbl || tf.dom();
- var headerIndex = this.headersTbl ? this.headersIndex : tf.getHeadersRowIndex();
- var headerRow = tbl.rows[headerIndex]; //Tick all option
-
- if (this.enableTickAll) {
- var li = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createCheckItem"])('col__' + tf.id, this.tickAllText, this.tickAllText);
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(li, this.listItemCssClass);
- ul.appendChild(li);
- li.check.checked = !this.tickToHide;
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(li.check, 'click', function () {
- for (var h = 0; h < headerRow.cells.length; h++) {
- var itm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])('col_' + h + '_' + tf.id);
-
- if (itm && li.check.checked !== itm.checked) {
- itm.click();
- itm.checked = li.check.checked;
- }
- }
- });
- }
-
- for (var i = 0; i < headerRow.cells.length; i++) {
- var cell = headerRow.cells[i];
-
- var cellText = this.headersText[i] || this._getHeaderText(cell);
-
- var liElm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createCheckItem"])('col_' + i + '_' + tf.id, cellText, cellText);
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(liElm, this.listItemCssClass);
-
- if (!this.tickToHide) {
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(liElm, this.listSlcItemCssClass);
- }
-
- ul.appendChild(liElm);
-
- if (!this.tickToHide) {
- liElm.check.checked = true;
- }
-
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(liElm.check, 'click', function (evt) {
- var elm = Object(_event__WEBPACK_IMPORTED_MODULE_3__["targetEvt"])(evt);
- var lbl = elm.parentNode;
-
- _this4.checkItem(lbl);
- });
- } //separator
-
-
- var p = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('p', ['align', 'center']);
- var btn; //Close link
-
- if (!this.btnCloseHtml) {
- btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:;']);
- btn.className = this.btnCloseCssClass;
- btn.innerHTML = this.btnCloseText;
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function (evt) {
- return _this4.toggle(evt);
- });
- p.appendChild(btn);
- } else {
- p.innerHTML = this.btnCloseHtml;
- btn = p.firstChild;
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function (evt) {
- return _this4.toggle(evt);
- });
- }
-
- container.appendChild(ul);
- container.appendChild(p);
- this.btnEl.parentNode.insertBefore(container, this.btnEl);
- this.contEl = container;
- }
- /**
- * Hide or show specified columns
- * @param {Number} colIndex Column index
- * @param {Boolean} hide Hide column if true or show if false
- */
-
- }, {
- key: "setHidden",
- value: function setHidden(colIndex, hide) {
- var tf = this.tf;
- var tbl = tf.dom();
-
- if (hide) {
- this.onBeforeColHidden(this, colIndex);
- } else {
- this.onBeforeColDisplayed(this, colIndex);
- }
-
- this._hideElements(tbl, colIndex, hide);
-
- if (this.headersTbl) {
- this._hideElements(this.headersTbl, colIndex, hide);
- }
-
- var hiddenCols = this.hiddenCols;
- var itemIndex = hiddenCols.indexOf(colIndex);
-
- if (hide) {
- if (itemIndex === -1) {
- this.hiddenCols.push(colIndex);
- }
- } else {
- if (itemIndex !== -1) {
- this.hiddenCols.splice(itemIndex, 1);
- }
- }
-
- if (hide) {
- this.onAfterColHidden(this, colIndex);
- this.emitter.emit('column-hidden', tf, this, colIndex, this.hiddenCols);
- } else {
- this.onAfterColDisplayed(this, colIndex);
- this.emitter.emit('column-shown', tf, this, colIndex, this.hiddenCols);
- }
- }
- /**
- * Show specified column
- * @param {Number} colIndex Column index
- */
-
- }, {
- key: "showCol",
- value: function showCol(colIndex) {
- if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isUndef"])(colIndex) || !this.isColHidden(colIndex)) {
- return;
- }
-
- if (this.manager && this.contEl) {
- var itm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])('col_' + colIndex + '_' + this.tf.id);
-
- if (itm) {
- itm.click();
- }
- } else {
- this.setHidden(colIndex, false);
- }
- }
- /**
- * Hide specified column
- * @param {Number} colIndex Column index
- */
-
- }, {
- key: "hideCol",
- value: function hideCol(colIndex) {
- if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isUndef"])(colIndex) || this.isColHidden(colIndex)) {
- return;
- }
-
- if (this.manager && this.contEl) {
- var itm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])('col_' + colIndex + '_' + this.tf.id);
-
- if (itm) {
- itm.click();
- }
- } else {
- this.setHidden(colIndex, true);
- }
- }
- /**
- * Determine if specified column is hidden
- * @param {Number} colIndex Column index
- */
-
- }, {
- key: "isColHidden",
- value: function isColHidden(colIndex) {
- if (this.hiddenCols.indexOf(colIndex) !== -1) {
- return true;
- }
-
- return false;
- }
- /**
- * Toggle visibility of specified column
- * @param {Number} colIndex Column index
- */
-
- }, {
- key: "toggleCol",
- value: function toggleCol(colIndex) {
- if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isUndef"])(colIndex) || this.isColHidden(colIndex)) {
- this.showCol(colIndex);
- } else {
- this.hideCol(colIndex);
- }
- }
- /**
- * Return the indexes of the columns currently hidden
- * @return {Array} column indexes
- */
-
- }, {
- key: "getHiddenCols",
- value: function getHiddenCols() {
- return this.hiddenCols;
- }
- /**
- * Remove the columns manager
- */
-
- }, {
- key: "destroy",
- value: function destroy() {
- var _this5 = this;
-
- if (!this.initialized) {
- return;
- }
-
- if (Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contElTgtId)) {
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contElTgtId).innerHTML = '';
- } else {
- this.contEl.innerHTML = '';
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.contEl);
- this.contEl = null;
- }
-
- this.btnEl.innerHTML = '';
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.btnEl);
- this.btnEl = null;
- this.emitter.off(['hide-column'], function (tf, colIndex) {
- return _this5.hideCol(colIndex);
- });
- this.boundMouseup = null;
- this.initialized = false;
- }
- }, {
- key: "_getHeaderText",
- value: function _getHeaderText(cell) {
- if (!cell.hasChildNodes) {
- return '';
- }
-
- for (var i = 0; i < cell.childNodes.length; i++) {
- var n = cell.childNodes[i];
-
- if (n.nodeType === 3) {
- return n.nodeValue;
- } else if (n.nodeType === 1) {
- if (n.id && n.id.indexOf('popUp') !== -1) {
- continue;
- } else {
- return Object(_dom__WEBPACK_IMPORTED_MODULE_1__["getText"])(n);
- }
- }
-
- continue;
- }
-
- return '';
- }
- }, {
- key: "_hideElements",
- value: function _hideElements(tbl, colIdx, hide) {
- this._hideCells(tbl, colIdx, hide);
-
- this._hideCol(tbl, colIdx, hide);
- }
- }, {
- key: "_hideCells",
- value: function _hideCells(tbl, colIdx, hide) {
- for (var i = 0; i < tbl.rows.length; i++) {
- var row = tbl.rows[i];
- var cell = row.cells[colIdx];
-
- if (cell) {
- cell.style.display = hide ? _const__WEBPACK_IMPORTED_MODULE_5__["NONE"] : '';
- }
- }
- }
- }, {
- key: "_hideCol",
- value: function _hideCol(tbl, colIdx, hide) {
- var colElms = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(tbl, 'col');
-
- if (colElms.length === 0) {
- return;
- }
-
- colElms[colIdx].style.display = hide ? _const__WEBPACK_IMPORTED_MODULE_5__["NONE"] : '';
- }
- }, {
- key: "_hideAtStart",
- value: function _hideAtStart() {
- var _this6 = this;
-
- this.atStart.forEach(function (colIdx) {
- _this6.hideCol(colIdx);
- });
- }
- }]);
-
- return ColsVisibility;
-}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]);
-
-
-
-/***/ }),
-
-/***/ "./src/extensions/filtersVisibility/filtersVisibility.js":
-/*!***************************************************************!*\
- !*** ./src/extensions/filtersVisibility/filtersVisibility.js ***!
- \***************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return FiltersVisibility; });
-/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js");
-/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js");
-/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types */ "./src/types.js");
-/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../event */ "./src/event.js");
-/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../settings */ "./src/settings.js");
-/* harmony import */ var _modules_toolbar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../modules/toolbar */ "./src/modules/toolbar.js");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
-
-function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
-
-function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-
-
-
-
-
-
-/**
- * Filters Visibility extension
- */
-
-var FiltersVisibility =
-/*#__PURE__*/
-function (_Feature) {
- _inherits(FiltersVisibility, _Feature);
-
- /**
- * Creates an instance of FiltersVisibility
- * @param {TableFilter} tf TableFilter instance
- * @param {Object} Configuration object
- */
- function FiltersVisibility(tf, f) {
- var _this;
-
- _classCallCheck(this, FiltersVisibility);
-
- _this = _possibleConstructorReturn(this, _getPrototypeOf(FiltersVisibility).call(this, tf, f.name));
- /**
- * Module name
- * @type {String}
- */
-
- _this.name = f.name;
- /**
- * Module description
- * @type {String}
- */
-
- _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.description, 'Filters row visibility manager');
- /**
- * Extension's stylesheet filename
- * @type {String}
- */
-
- _this.stylesheet = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.stylesheet, 'filtersVisibility.css');
- /**
- * Expand icon filename
- * @type {String}
- */
-
- _this.icnExpand = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.expand_icon_name, 'icn_exp.png');
- /**
- * Collapse icon filename
- * @type {String}
- */
-
- _this.icnCollapse = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.collapse_icon_name, 'icn_clp.png');
- /**
- * Main container element
- * @private
- */
-
- _this.contEl = null;
- /**
- * Button element
- * @private
- */
-
- _this.btnEl = null;
- /**
- * Expand icon HTML
- * @private
- */
-
- _this.icnExpandHtml = '';
- /**
- * Collapse icon HTML
- * @private
- */
-
- _this.icnCollapseHtml = '';
- /**
- * Default text
- * @private
- */
-
- _this.defaultText = 'Toggle filters';
- /**
- * ID of main container element
- * @type {String}
- */
-
- _this.targetId = f.target_id || null;
- /**
- * Enable expand/collapse icon, defaults to true
- * @type {Boolean}
- */
-
- _this.enableIcon = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsBool"])(f.enable_icon, true);
- /**
- * Custom text for button
- * @type {String}
- */
-
- _this.btnText = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.btn_text, '');
- /**
- * Collapse button HTML
- * @private
- */
-
- _this.collapseBtnHtml = _this.enableIcon ? _this.icnCollapseHtml + _this.btnText : _this.btnText || _this.defaultText;
- /**
- * Expand button HTML
- * @private
- */
-
- _this.expandBtnHtml = _this.enableIcon ? _this.icnExpandHtml + _this.btnText : _this.btnText || _this.defaultText;
- /**
- * Button's custom HTML
- * @type {String}
- */
-
- _this.btnHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.btn_html, null);
- /**
- * Css class for expand/collapse filters button
- * @type {String}
- */
-
- _this.btnCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.btn_css_class, 'btnExpClpFlt');
- /**
- * Css class for main container
- * @type {String}
- */
-
- _this.contCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.cont_css_class, 'expClpFlt');
- /**
- * Filters row index
- * @type {Number}
- */
-
- _this.filtersRowIndex = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsNb"])(f.filters_row_index, tf.getFiltersRowIndex());
- /**
- * Make filters visible at initialization, defaults to true
- * @type {Boolean}
- */
-
- _this.visibleAtStart = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsNb"])(f.visible_at_start, true);
- /**
- * Default position in toolbar ('left'|'center'|'right')
- * @type {String}
- */
-
- _this.toolbarPosition = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.toolbar_position, _modules_toolbar__WEBPACK_IMPORTED_MODULE_5__["RIGHT"]);
- /**
- * Callback fired before filters row is shown
- * @type {Function}
- */
-
- _this.onBeforeShow = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_before_show, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after filters row is shown
- * @type {Function}
- */
-
- _this.onAfterShow = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_after_show, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired before filters row is hidden
- * @type {Function}
- */
-
- _this.onBeforeHide = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_before_hide, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]);
- /**
- * Callback fired after filters row is hidden
- * @type {Function}
- */
-
- _this.onAfterHide = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_after_hide, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); //Import extension's stylesheet
-
- tf.import(f.name + 'Style', tf.getStylePath() + _this.stylesheet, null, 'link');
-
- _this.enable();
-
- return _this;
- }
- /**
- * Initialise extension
- */
-
-
- _createClass(FiltersVisibility, [{
- key: "init",
- value: function init() {
- var _this2 = this;
-
- if (this.initialized) {
- return;
- }
-
- this.emitter.emit('initializing-extension', this, !Object(_types__WEBPACK_IMPORTED_MODULE_2__["isNull"])(this.targetId));
- this.buildUI();
- /** @inherited */
-
- this.initialized = true;
- this.emitter.on(['show-filters'], function (tf, visible) {
- return _this2.show(visible);
- });
- this.emitter.emit('filters-visibility-initialized', this.tf, this);
- this.emitter.emit('extension-initialized', this);
- }
- /**
- * Build UI elements
- */
-
- }, {
- key: "buildUI",
- value: function buildUI() {
- var _this3 = this;
-
- var tf = this.tf;
- var span = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span');
- span.className = this.contCssClass; // Container element (rdiv or custom element)
-
- var targetEl = !this.targetId ? tf.feature('toolbar').container(this.toolbarPosition) : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.targetId);
-
- if (!this.targetId) {
- var firstChild = targetEl.firstChild;
- firstChild.parentNode.insertBefore(span, firstChild);
- } else {
- targetEl.appendChild(span);
- }
-
- var btn;
-
- if (!this.btnHtml) {
- btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:void(0);']);
- btn.className = this.btnCssClass;
- btn.title = this.btnText || this.defaultText;
- btn.innerHTML = this.collapseBtnHtml;
- span.appendChild(btn);
- } else {
- // Custom html
- span.innerHTML = this.btnHtml;
- btn = span.firstChild;
- }
-
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function () {
- return _this3.toggle();
- });
- this.contEl = span;
- this.btnEl = btn;
-
- if (!this.visibleAtStart) {
- this.toggle();
- }
- }
- /**
- * Toggle filters visibility
- */
-
- }, {
- key: "toggle",
- value: function toggle() {
- var tf = this.tf;
- var tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();
- var fltRow = tbl.rows[this.filtersRowIndex];
- var isDisplayed = fltRow.style.display === '';
- this.show(!isDisplayed);
- }
- /**
- * Show or hide filters
- *
- * @param {boolean} [visible=true] Visibility flag
- */
-
- }, {
- key: "show",
- value: function show() {
- var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
- var tf = this.tf;
- var tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();
- var fltRow = tbl.rows[this.filtersRowIndex];
-
- if (visible) {
- this.onBeforeShow(this);
- }
-
- if (!visible) {
- this.onBeforeHide(this);
- }
-
- fltRow.style.display = visible ? '' : 'none';
-
- if (this.enableIcon && !this.btnHtml) {
- this.btnEl.innerHTML = visible ? this.collapseBtnHtml : this.expandBtnHtml;
- }
-
- if (visible) {
- this.onAfterShow(this);
- }
-
- if (!visible) {
- this.onAfterHide(this);
- }
-
- this.emitter.emit('filters-toggled', tf, this, visible);
- }
- /**
- * Destroy the UI
- */
-
- }, {
- key: "destroy",
- value: function destroy() {
- var _this4 = this;
-
- if (!this.initialized) {
- return;
- }
-
- this.emitter.off(['show-filters'], function (tf, visible) {
- return _this4.show(visible);
- });
- this.btnEl.innerHTML = '';
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.btnEl);
- this.btnEl = null;
- this.contEl.innerHTML = '';
- Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.contEl);
- this.contEl = null;
- this.initialized = false;
- }
- }]);
-
- return FiltersVisibility;
-}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]);
-
-
-
-/***/ }),
-
-/***/ "./src/extensions/sort/adapterSortabletable.js":
-/*!*****************************************************!*\
- !*** ./src/extensions/sort/adapterSortabletable.js ***!
- \*****************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AdapterSortableTable; });
-/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js");
-/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../types */ "./src/types.js");
-/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../dom */ "./src/dom.js");
-/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../event */ "./src/event.js");
-/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../number */ "./src/number.js");
-/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../const */ "./src/const.js");
-/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../settings */ "./src/settings.js");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
-
-function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
-
-function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-
-
-
-
-
-
-
-/**
- * SortableTable Adapter module
- */
-
-var AdapterSortableTable =
-/*#__PURE__*/
-function (_Feature) {
- _inherits(AdapterSortableTable, _Feature);
-
- /**
- * Creates an instance of AdapterSortableTable
- * @param {TableFilter} tf TableFilter instance
- * @param {Object} opts Configuration object
- */
- function AdapterSortableTable(tf, opts) {
- var _this;
-
- _classCallCheck(this, AdapterSortableTable);
-
- _this = _possibleConstructorReturn(this, _getPrototypeOf(AdapterSortableTable).call(this, tf, opts.name));
- /**
- * Module name
- * @type {String}
- */
-
- _this.name = opts.name;
- /**
- * Module description
- * @type {String}
- */
-
- _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.description, 'Sortable table');
- /**
- * Indicate whether table previously sorted
- * @type {Boolean}
- * @private
- */
-
- _this.sorted = false;
- /**
- * List of sort type per column basis
- * @type {Array}
- */
-
- _this.sortTypes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.types, tf.colTypes);
- /**
- * Column to be sorted at initialization, ie:
- * sort_col_at_start: [1, true]
- * @type {Array}
- */
-
- _this.sortColAtStart = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.sort_col_at_start, null);
- /**
- * Enable asynchronous sort, if triggers are external
- * @type {Boolean}
- */
-
- _this.asyncSort = Boolean(opts.async_sort);
- /**
- * List of element IDs triggering sort on a per column basis
- * @type {Array}
- */
-
- _this.triggerIds = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.trigger_ids, []); // edit .sort-arrow.descending / .sort-arrow.ascending in
- // tablefilter.css to reflect any path change
-
- /**
- * Path to images
- * @type {String}
- */
-
- _this.imgPath = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.images_path, tf.themesPath);
- /**
- * Blank image file name
- * @type {String}
- */
-
- _this.imgBlank = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_blank, 'blank.png');
- /**
- * Css class for sort indicator image
- * @type {String}
- */
-
- _this.imgClassName = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_class_name, 'sort-arrow');
- /**
- * Css class for ascending sort indicator image
- * @type {String}
- */
-
- _this.imgAscClassName = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_asc_class_name, 'ascending');
- /**
- * Css class for descending sort indicator image
- * @type {String}
- */
-
- _this.imgDescClassName = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_desc_class_name, 'descending');
- /**
- * Cell attribute key storing custom value used for sorting
- * @type {String}
- */
-
- _this.customKey = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.custom_key, 'data-tf-sortKey');
- /**
- * Callback fired when sort extension is instanciated
- * @type {Function}
- */
-
- _this.onSortLoaded = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_sort_loaded, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]);
- /**
- * Callback fired before a table column is sorted
- * @type {Function}
- */
-
- _this.onBeforeSort = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_before_sort, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]);
- /**
- * Callback fired after a table column is sorted
- * @type {Function}
- */
-
- _this.onAfterSort = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_after_sort, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]);
- /**
- * SortableTable instance
- * @private
- */
-
- _this.stt = null;
-
- _this.enable();
-
- return _this;
- }
- /**
- * Initializes AdapterSortableTable instance
- */
-
-
- _createClass(AdapterSortableTable, [{
- key: "init",
- value: function init() {
- if (this.initialized) {
- return;
- }
-
- var tf = this.tf;
- var adpt = this; // SortableTable class sanity check (sortabletable.js)
-
- if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isUndef"])(SortableTable)) {
- throw new Error('SortableTable class not found.');
- } // Add any date format if needed
-
-
- this.emitter.emit('add-date-type-formats', this.tf, this.sortTypes);
- this.overrideSortableTable();
- this.setSortTypes();
- this.onSortLoaded(tf, this);
- /*** SortableTable callbacks ***/
-
- this.stt.onbeforesort = function () {
- adpt.onBeforeSort(tf, adpt.stt.sortColumn);
- /*** sort behaviour for paging ***/
-
- if (tf.paging) {
- tf.feature('paging').disable();
- }
- };
-
- this.stt.onsort = function () {
- adpt.sorted = true; //sort behaviour for paging
-
- if (tf.paging) {
- var paginator = tf.feature('paging'); // recalculate valid rows index as sorting may have change it
-
- tf.getValidRows(true);
- paginator.enable();
- paginator.setPage(paginator.getPage());
- }
-
- adpt.onAfterSort(tf, adpt.stt.sortColumn, adpt.stt.descending);
- adpt.emitter.emit('column-sorted', tf, adpt.stt.sortColumn, adpt.stt.descending);
- }; // Column sort at start
-
-
- var sortColAtStart = adpt.sortColAtStart;
-
- if (sortColAtStart) {
- this.stt.sort(sortColAtStart[0], sortColAtStart[1]);
- }
-
- this.emitter.on(['sort'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.sortByColumnIndexHandler, this));
- /** @inherited */
-
- this.initialized = true;
- this.emitter.emit('sort-initialized', tf, this);
- }
- /**
- * Sort specified column
- * @param {Number} colIdx Column index
- * @param {Boolean} desc Optional: descending manner
- */
-
- }, {
- key: "sortByColumnIndex",
- value: function sortByColumnIndex(colIdx, desc) {
- this.stt.sort(colIdx, desc);
- }
- /** @private */
-
- }, {
- key: "sortByColumnIndexHandler",
- value: function sortByColumnIndexHandler(tf, colIdx, desc) {
- this.sortByColumnIndex(colIdx, desc);
- }
- /**
- * Set SortableTable overrides for TableFilter integration
- */
-
- }, {
- key: "overrideSortableTable",
- value: function overrideSortableTable() {
- var adpt = this,
- tf = this.tf;
- /**
- * Overrides headerOnclick method in order to handle th event
- * @param {Object} e [description]
- */
-
- SortableTable.prototype.headerOnclick = function (evt) {
- if (!adpt.initialized) {
- return;
- } // find Header element
-
-
- var el = evt.target || evt.srcElement;
-
- while (el.tagName !== _const__WEBPACK_IMPORTED_MODULE_5__["CELL_TAG"] && el.tagName !== _const__WEBPACK_IMPORTED_MODULE_5__["HEADER_TAG"]) {
- el = el.parentNode;
- }
-
- this.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);
- };
- /**
- * Overrides getCellIndex IE returns wrong cellIndex when columns are
- * hidden
- * @param {Object} oTd TD element
- * @return {Number} Cell index
- */
-
-
- SortableTable.getCellIndex = function (oTd) {
- var cells = oTd.parentNode.cells,
- l = cells.length,
- i;
-
- for (i = 0; cells[i] !== oTd && i < l; i++) {}
-
- return i;
- };
- /**
- * Overrides initHeader in order to handle filters row position
- * @param {Array} oSortTypes
- */
-
-
- SortableTable.prototype.initHeader = function (oSortTypes) {
- var stt = this;
-
- if (!stt.tHead) {
- if (tf.gridLayout) {
- stt.tHead = tf.feature('gridLayout').headTbl.tHead;
- } else {
- return;
- }
- }
-
- stt.headersRow = tf.headersRow;
- var cells = stt.tHead.rows[stt.headersRow].cells;
- stt.sortTypes = oSortTypes || [];
- var l = cells.length;
- var img, c;
-
- for (var i = 0; i < l; i++) {
- c = cells[i];
-
- if (stt.sortTypes[i] !== null && stt.sortTypes[i] !== 'None') {
- c.style.cursor = 'pointer';
- img = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createElm"])('img', ['src', adpt.imgPath + adpt.imgBlank]);
- c.appendChild(img);
-
- if (stt.sortTypes[i] !== null) {
- c.setAttribute('_sortType', stt.sortTypes[i]);
- }
-
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(c, 'click', stt._headerOnclick);
- } else {
- c.setAttribute('_sortType', oSortTypes[i]);
- c._sortType = 'None';
- }
- }
-
- stt.updateHeaderArrows();
- };
- /**
- * Overrides updateHeaderArrows in order to handle arrows indicators
- */
-
-
- SortableTable.prototype.updateHeaderArrows = function () {
- var stt = this;
- var cells, l, img; // external headers
-
- if (adpt.asyncSort && adpt.triggerIds.length > 0) {
- var triggers = adpt.triggerIds;
- cells = [];
- l = triggers.length;
-
- for (var j = 0; j < l; j++) {
- cells.push(Object(_dom__WEBPACK_IMPORTED_MODULE_2__["elm"])(triggers[j]));
- }
- } else {
- if (!this.tHead) {
- return;
- }
-
- cells = stt.tHead.rows[stt.headersRow].cells;
- l = cells.length;
- }
-
- for (var i = 0; i < l; i++) {
- var cell = cells[i];
-
- if (!cell) {
- continue;
- }
-
- var cellAttr = cell.getAttribute('_sortType');
-
- if (cellAttr !== null && cellAttr !== 'None') {
- img = cell.lastChild || cell;
-
- if (img.nodeName.toLowerCase() !== 'img') {
- img = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createElm"])('img', ['src', adpt.imgPath + adpt.imgBlank]);
- cell.appendChild(img);
- }
-
- if (i === stt.sortColumn) {
- img.className = adpt.imgClassName + ' ' + (this.descending ? adpt.imgDescClassName : adpt.imgAscClassName);
- } else {
- img.className = adpt.imgClassName;
- }
- }
- }
- };
- /**
- * Overrides getRowValue for custom key value feature
- * @param {Object} oRow Row element
- * @param {String} sType
- * @param {Number} nColumn
- * @return {String}
- */
-
-
- SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {
- var stt = this; // if we have defined a custom getRowValue use that
-
- var sortTypeInfo = stt._sortTypeInfo[sType];
-
- if (sortTypeInfo && sortTypeInfo.getRowValue) {
- return sortTypeInfo.getRowValue(oRow, nColumn);
- }
-
- var c = oRow.cells[nColumn];
- var s = SortableTable.getInnerText(c);
- return stt.getValueFromString(s, sType);
- };
- /**
- * Overrides getInnerText in order to avoid Firefox unexpected sorting
- * behaviour with untrimmed text elements
- * @param {Object} cell DOM element
- * @return {String} DOM element inner text
- */
-
-
- SortableTable.getInnerText = function (cell) {
- if (!cell) {
- return;
- }
-
- if (cell.getAttribute(adpt.customKey)) {
- return cell.getAttribute(adpt.customKey);
- } else {
- return tf.getCellValue(cell);
- }
- };
- }
- /**
- * Adds a sort type
- */
-
- }, {
- key: "addSortType",
- value: function addSortType() {
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
- args[_key] = arguments[_key];
- }
-
- // Extract the arguments
- var id = args[0],
- caster = args[1],
- sorter = args[2],
- getRowValue = args[3];
- SortableTable.prototype.addSortType(id, caster, sorter, getRowValue);
- }
- /**
- * Sets the sort types on a column basis
- * @private
- */
-
- }, {
- key: "setSortTypes",
- value: function setSortTypes() {
- var _this2 = this;
-
- var tf = this.tf,
- sortTypes = this.sortTypes,
- _sortTypes = [];
- tf.eachCol(function (i) {
- var colType;
-
- if (sortTypes[i]) {
- colType = sortTypes[i];
-
- if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isObj"])(colType)) {
- if (colType.type === _const__WEBPACK_IMPORTED_MODULE_5__["DATE"]) {
- colType = _this2._addDateType(i, sortTypes);
- } else if (colType.type === _const__WEBPACK_IMPORTED_MODULE_5__["FORMATTED_NUMBER"]) {
- var decimal = colType.decimal || tf.decimalSeparator;
- colType = _this2._addNumberType(i, decimal);
- }
- } else {
- colType = colType.toLowerCase();
-
- if (colType === _const__WEBPACK_IMPORTED_MODULE_5__["DATE"]) {
- colType = _this2._addDateType(i, sortTypes);
- } else if (colType === _const__WEBPACK_IMPORTED_MODULE_5__["FORMATTED_NUMBER"] || colType === _const__WEBPACK_IMPORTED_MODULE_5__["NUMBER"]) {
- colType = _this2._addNumberType(i, tf.decimalSeparator);
- } else if (colType === _const__WEBPACK_IMPORTED_MODULE_5__["NONE"]) {
- // TODO: normalise 'none' vs 'None'
- colType = 'None';
- }
- }
- } else {
- colType = _const__WEBPACK_IMPORTED_MODULE_5__["STRING"];
- }
-
- _sortTypes.push(colType);
- }); //Public TF method to add sort type
- //Custom sort types
-
- this.addSortType('caseinsensitivestring', SortableTable.toUpperCase);
- this.addSortType(_const__WEBPACK_IMPORTED_MODULE_5__["STRING"]);
- this.addSortType(_const__WEBPACK_IMPORTED_MODULE_5__["IP_ADDRESS"], ipAddress, sortIP);
- this.stt = new SortableTable(tf.dom(), _sortTypes);
- /*** external table headers adapter ***/
-
- if (this.asyncSort && this.triggerIds.length > 0) {
- (function () {
- var triggers = _this2.triggerIds;
-
- for (var j = 0; j < triggers.length; j++) {
- if (triggers[j] === null) {
- continue;
- }
-
- var trigger = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["elm"])(triggers[j]);
-
- if (trigger) {
- trigger.style.cursor = 'pointer';
- Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(trigger, 'click', function (evt) {
- var elm = evt.target;
-
- if (!_this2.tf.sort) {
- return;
- }
-
- _this2.stt.asyncSort(triggers.indexOf(elm.id));
- });
- trigger.setAttribute('_sortType', _sortTypes[j]);
- }
- }
- })();
- }
- }
- }, {
- key: "_addDateType",
- value: function _addDateType(colIndex, types) {
- var tf = this.tf;
- var dateType = tf.feature('dateType');
- var locale = dateType.getOptions(colIndex, types).locale || tf.locale;
- var colType = "".concat(_const__WEBPACK_IMPORTED_MODULE_5__["DATE"], "-").concat(locale);
- this.addSortType(colType, function (value) {
- var parsedDate = dateType.parse(value, locale); // Invalid date defaults to Wed Feb 04 -768 11:00:00
-
- return isNaN(+parsedDate) ? new Date(-86400000000000) : parsedDate;
- });
- return colType;
- }
- }, {
- key: "_addNumberType",
- value: function _addNumberType(colIndex, decimal) {
- var colType = "".concat(_const__WEBPACK_IMPORTED_MODULE_5__["FORMATTED_NUMBER"]).concat(decimal === '.' ? '' : '-custom');
- this.addSortType(colType, function (value) {
- return Object(_number__WEBPACK_IMPORTED_MODULE_4__["parse"])(value, decimal);
- });
- return colType;
- }
- /**
- * Remove extension
- */
-
- }, {
- key: "destroy",
- value: function destroy() {
- if (!this.initialized) {
- return;
- }
-
- var tf = this.tf;
- this.emitter.off(['sort'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.sortByColumnIndexHandler, this));
- this.sorted = false;
- this.stt.destroy();
- var ids = tf.getFiltersId();
-
- for (var idx = 0; idx < ids.length; idx++) {
- var header = tf.getHeaderElement(idx);
- var img = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["tag"])(header, 'img');
-
- if (img.length === 1) {
- header.removeChild(img[0]);
- }
- }
-
- this.initialized = false;
- }
- }]);
-
- return AdapterSortableTable;
-}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); //Converters
-
-
-
-
-function ipAddress(value) {
- var vals = value.split('.');
-
- for (var x in vals) {
- var val = vals[x];
-
- while (3 > val.length) {
- val = '0' + val;
- }
-
- vals[x] = val;
- }
-
- return vals.join('.');
-}
-
-function sortIP(a, b) {
- var aa = ipAddress(a.value.toLowerCase());
- var bb = ipAddress(b.value.toLowerCase());
-
- if (aa === bb) {
- return 0;
- } else if (aa < bb) {
- return -1;
- } else {
- return 1;
- }
-}
-
-/***/ }),
-
-/***/ "./src/extensions/sort/sort.js":
-/*!*************************************!*\
- !*** ./src/extensions/sort/sort.js ***!
- \*************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _adapterSortabletable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adapterSortabletable */ "./src/extensions/sort/adapterSortabletable.js");
-/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../root */ "./src/root.js");
-
-
-
-if (!_root__WEBPACK_IMPORTED_MODULE_1__["root"].SortableTable) {
- __webpack_require__(/*! script-loader!sortabletable */ "./node_modules/script-loader/index.js!./libs/sortabletable.js");
-}
-
-/* harmony default export */ __webpack_exports__["default"] = (_adapterSortabletable__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/register.js":
-/*!*************************!*\
- !*** ./src/register.js ***!
- \*************************/
-/*! exports provided: Register */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Register", function() { return Register; });
-/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./settings */ "./src/settings.js");
-/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./string */ "./src/string.js");
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-
-
-var Register = function Register(tf) {
- var cls = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-
- _classCallCheck(this, Register);
-
- console.log(tf, cls);
- /**
- * TableFilter instance
- * @type {TableFilter}
- */
-
- this.tf = tf;
- /**
- * Feature name, retrieved from alternate class name if found or from
- * camelised class name
- * @type {String}
- */
-
- this.feature = Object(_settings__WEBPACK_IMPORTED_MODULE_0__["defaultsStr"])(cls.altName, Object(_string__WEBPACK_IMPORTED_MODULE_1__["toCamelCase"])(cls.name));
- this.tf._mod_[this.feature] = cls; // this.instantiate(cls, this.feature);
-} // instantiate(cls, name) {
-// let Cls = cls;
-// console.log(Boolean(this.tf[name]),
-// Boolean(Cls.alwaysInstantiate));
-// if (!this.tf.hasConfig || Boolean(this.tf[name])
-// || Boolean(cls.alwaysInstantiate)) {
-// this.tf.Mod[name] = this.tf.Mod[name] || new Cls(tf);
-// }
-// }
-;
-
-/***/ })
-
-}]);
-//# sourceMappingURL=tf-0-ff3c2103b4f98d8cf876.js.map
\ No newline at end of file
diff --git a/dist/tablefilter/tf-0-ff3c2103b4f98d8cf876.js.map b/dist/tablefilter/tf-0-ff3c2103b4f98d8cf876.js.map
deleted file mode 100644
index 3e5f1304..00000000
--- a/dist/tablefilter/tf-0-ff3c2103b4f98d8cf876.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./node_modules/format-number/index.js","webpack:///./libs/sortabletable.js","webpack:///./node_modules/script-loader/addScript.js","webpack:///./libs/sortabletable.js?8203","webpack:///./src sync ^\\.\\/.*$","webpack:///./src/extensions/advancedGrid/adapterEzEditTable.js","webpack:///./src/extensions/advancedGrid/advancedGrid.js","webpack:///./src/extensions/colOps/colOps.js","webpack:///./src/extensions/colsVisibility/colsVisibility.js","webpack:///./src/extensions/filtersVisibility/filtersVisibility.js","webpack:///./src/extensions/sort/adapterSortabletable.js","webpack:///./src/extensions/sort/sort.js","webpack:///./src/register.js"],"names":["INSTANTIATION_ERROR","AdapterEzEditTable","tf","cfg","name","desc","description","filename","vendorPath","vendor_path","loadStylesheet","Boolean","load_stylesheet","stylesheet","stylesheetName","stylesheet_name","scroll_into_view","gridLayout","_ezEditTable","enable","initialized","EditTable","_setAdvancedGrid","path","import","isImported","emitter","on","_toggleForInputFilter","startRow","thead","dom","length","undefined","refRow","base_path","basePath","editable","selectable","selection","default_selection","active_cell_css","_lastValidRowIndex","_lastRowIndex","onAfterSelection","et","selectedElm","e","slc","Selection","doSelect","nextRowIndex","defaultSelection","SelectRowByIndex","ClearSelections","cellIndex","row","rows","SelectCell","cells","validRowsIndex","getRowsNb","r","scrollIntoView","cell","getCellsNb","tblCont","scrollLeft","validIndexes","validIdxLen","parentNode","nodeName","keyCode","Event","GetKey","isRowValid","indexOf","rowIndex","paging","feature","d","pageLength","nbRowsPerPage","calcRowIndex","v","onBeforeSelection","nbPages","pagingEndRow","parseInt","startPagingRow","currentPageNb","setPage","onAfterChangePage","advGrid","extension","GetActiveRow","GetActiveCell","fnB","on_before_selected_row","args","arguments","call","fnA","on_after_selected_row","fnD","on_before_selected_cell","fnC","on_after_selected_cell","fnE","on_added_dom_row","nbFilterableRows","emit","destroy","reset","alternateRows","init","actions","fnF","on_after_submit","id","Init","Error","ezEditTable","Set","Editable","Remove","getActiveFilterId","colIndex","getColumnIndexFromFilterId","filterType","getFilterType","toggle","off","EVENTS","SUM","MEAN","MIN","MAX","MEDIAN","Q1","Q3","ColOps","opts","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","val","push","nbCols","colValues","u","getVisibleColumnData","curValues","result","precisions","labels","writeType","formatResult","idx","k","toLowerCase","configureFormat","i","Number","calc","writeResult","totRow","style","display","precision","sortColumnValues","calcMean","calcSum","calcMin","calcMax","calcMedian","calcQ1","calcQ3","toFixed","values","reduce","x","y","Math","max","apply","min","nbValues","aux","floor","posa","posb","sorter","sort","label","format","labelElm","isNaN","isFinite","innerHTML","value","oldNode","firstChild","txtNode","replaceChild","hasType","colType","colTypes","decimal","thousands","integerSeparator","ColsVisibility","f","config","spanEl","btnEl","contEl","tickToHide","tick_to_hide","manager","headersTbl","headers_table","headersIndex","headers_index","contElTgtId","container_target_id","headersText","headers_text","btnTgtId","btn_target_id","btnText","btn_text","btnHtml","btn_html","btnCssClass","btn_css_class","btnCloseText","btn_close_text","btnCloseHtml","btn_close_html","btnCloseCssClass","btn_close_css_class","spanCssClass","span_css_class","contCssClass","cont_css_class","listCssClass","list_css_class","listItemCssClass","checklist_item_css_class","listSlcItemCssClass","checklist_selected_item_css_class","text","atStart","at_start","enableHover","enable_hover","enableTickAll","enable_tick_all","tickAllText","tick_all_text","toolbarPosition","toolbar_position","hiddenCols","boundMouseup","onLoaded","on_loaded","onBeforeOpen","on_before_open","onAfterOpen","on_after_open","onBeforeClose","on_before_close","onAfterClose","on_after_close","onBeforeColHidden","on_before_col_hidden","onAfterColHidden","on_after_col_hidden","onBeforeColDisplayed","on_before_col_displayed","onAfterColDisplayed","on_after_col_displayed","headTbl","getStylePath","evt","targetElm","removeEvt","contDisplay","addEvt","lbl","li","isChecked","checked","getAttribute","split","addClass","removeClass","hide","setHidden","hideCol","buildBtn","buildManager","onMouseup","bind","_hideAtStart","span","className","targetEl","container","insertBefore","appendChild","btn","title","colVisEl","extNameLabel","ul","tbl","headerIndex","getHeadersRowIndex","headerRow","check","h","itm","click","cellText","_getHeaderText","liElm","elm","checkItem","p","_hideElements","itemIndex","splice","isColHidden","showCol","removeElm","hasChildNodes","childNodes","n","nodeType","nodeValue","colIdx","_hideCells","_hideCol","colElms","FiltersVisibility","icnExpand","expand_icon_name","icnCollapse","collapse_icon_name","icnExpandHtml","themesPath","icnCollapseHtml","defaultText","targetId","target_id","enableIcon","enable_icon","collapseBtnHtml","expandBtnHtml","filtersRowIndex","filters_row_index","getFiltersRowIndex","visibleAtStart","visible_at_start","onBeforeShow","on_before_show","onAfterShow","on_after_show","onBeforeHide","on_before_hide","onAfterHide","on_after_hide","buildUI","visible","show","fltRow","isDisplayed","AdapterSortableTable","sorted","sortTypes","types","sortColAtStart","sort_col_at_start","asyncSort","async_sort","triggerIds","trigger_ids","imgPath","images_path","imgBlank","image_blank","imgClassName","image_class_name","imgAscClassName","image_asc_class_name","imgDescClassName","image_desc_class_name","customKey","custom_key","onSortLoaded","on_sort_loaded","onBeforeSort","on_before_sort","onAfterSort","on_after_sort","stt","adpt","SortableTable","overrideSortableTable","setSortTypes","onbeforesort","sortColumn","disable","onsort","paginator","getValidRows","getPage","descending","sortByColumnIndexHandler","sortByColumnIndex","prototype","headerOnclick","el","target","srcElement","tagName","msie","getCellIndex","oTd","l","initHeader","oSortTypes","tHead","headersRow","img","c","cursor","setAttribute","_headerOnclick","_sortType","updateHeaderArrows","triggers","j","cellAttr","lastChild","getRowValue","oRow","sType","nColumn","sortTypeInfo","_sortTypeInfo","s","getInnerText","getValueFromString","getCellValue","caster","addSortType","_sortTypes","eachCol","type","_addDateType","decimalSeparator","_addNumberType","toUpperCase","ipAddress","sortIP","trigger","dateType","locale","getOptions","parsedDate","parse","Date","ids","getFiltersId","header","getHeaderElement","removeChild","vals","join","a","b","aa","bb","require","Register","cls","console","log","altName","_mod_"],"mappings":";;;;;;;;;;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2BAA2B;AAC3B,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAsD,4BAA4B,EAAE;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8BAA8B;AACnD;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,EAAE;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAC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","file":"tf-0-ff3c2103b4f98d8cf876.js","sourcesContent":["\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","module.exports = \"/*----------------------------------------------------------------------------\\\\\\r\\n| Sortable Table 1.12 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created by Erik Arvidsson |\\r\\n| (http://webfx.eae.net/contact.html#erik) |\\r\\n| For WebFX (http://webfx.eae.net/) |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| A DOM 1 based script that allows an ordinary HTML table to be sortable. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Copyright (c) 1998 - 2006 Erik Arvidsson |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not |\\r\\n| use this file except in compliance with the License. You may obtain a copy |\\r\\n| of the License at http://www.apache.org/licenses/LICENSE-2.0 |\\r\\n| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\\r\\n| Unless required by applicable law or agreed to in writing, software |\\r\\n| distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT |\\r\\n| WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |\\r\\n| License for the specific language governing permissions and limitations |\\r\\n| under the License. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| 2003-01-10 | First version |\\r\\n| 2003-01-19 | Minor changes to the date parsing |\\r\\n| 2003-01-28 | JScript 5.0 fixes (no support for 'in' operator) |\\r\\n| 2003-02-01 | Sloppy typo like error fixed in getInnerText |\\r\\n| 2003-07-04 | Added workaround for IE cellIndex bug. |\\r\\n| 2003-11-09 | The bDescending argument to sort was not correctly working |\\r\\n| | Using onclick DOM0 event if no support for addEventListener |\\r\\n| | or attachEvent |\\r\\n| 2004-01-13 | Adding addSortType and removeSortType which makes it a lot |\\r\\n| | easier to add new, custom sort types. |\\r\\n| 2004-01-27 | Switch to use descending = false as the default sort order. |\\r\\n| | Change defaultDescending to suit your needs. |\\r\\n| 2004-03-14 | Improved sort type None look and feel a bit |\\r\\n| 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you |\\r\\n| | can use another tHead or no tHead, and you can chose some |\\r\\n| | other tBody. |\\r\\n| 2006-04-25 | Changed license to Apache Software License 2.0 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created 2003-01-10 | All changes are in the log above. | Updated 2006-04-25 |\\r\\n\\\\----------------------------------------------------------------------------*/\\r\\n\\r\\n\\r\\nfunction SortableTable(oTable, oSortTypes) {\\r\\n\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\r\\n\\tthis.sortColumn = null;\\r\\n\\tthis.descending = null;\\r\\n\\r\\n\\tvar oThis = this;\\r\\n\\tthis._headerOnclick = function (e) {\\r\\n\\t\\toThis.headerOnclick(e);\\r\\n\\t};\\r\\n\\r\\n\\tif (oTable) {\\r\\n\\t\\tthis.setTable( oTable );\\r\\n\\t\\tthis.document = oTable.ownerDocument || oTable.document;\\r\\n\\t}\\r\\n\\telse {\\r\\n\\t\\tthis.document = document;\\r\\n\\t}\\r\\n\\r\\n\\r\\n\\t// only IE needs this\\r\\n\\tvar win = this.document.defaultView || this.document.parentWindow;\\r\\n\\tthis._onunload = function () {\\r\\n\\t\\toThis.destroy();\\r\\n\\t};\\r\\n\\tif (win && typeof win.attachEvent != \\\"undefined\\\") {\\r\\n\\t\\twin.attachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n}\\r\\n\\r\\nSortableTable.gecko = navigator.product == \\\"Gecko\\\";\\r\\nSortableTable.msie = /msie/i.test(navigator.userAgent);\\r\\n// Mozilla is faster when doing the DOM manipulations on\\r\\n// an orphaned element. MSIE is not\\r\\nSortableTable.removeBeforeSort = SortableTable.gecko;\\r\\n\\r\\nSortableTable.prototype.onsort = function () {};\\r\\n\\r\\n// default sort order. true -> descending, false -> ascending\\r\\nSortableTable.prototype.defaultDescending = false;\\r\\n\\r\\n// shared between all instances. This is intentional to allow external files\\r\\n// to modify the prototype\\r\\nSortableTable.prototype._sortTypeInfo = {};\\r\\n\\r\\nSortableTable.prototype.setTable = function (oTable) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.element = oTable;\\r\\n\\tthis.setTHead( oTable.tHead );\\r\\n\\tthis.setTBody( oTable.tBodies[0] );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTHead = function (oTHead) {\\r\\n\\tif (this.tHead && this.tHead != oTHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.tHead = oTHead;\\r\\n\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTBody = function (oTBody) {\\r\\n\\tthis.tBody = oTBody;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\n// adds arrow containers and events\\r\\n// also binds sort type to the header cells so that reordering columns does\\r\\n// not break the sort types\\r\\nSortableTable.prototype.initHeader = function (oSortTypes) {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar doc = this.tHead.ownerDocument || this.tHead.document;\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img, c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (this.sortTypes[i] != null && this.sortTypes[i] != \\\"None\\\") {\\r\\n\\t\\t\\timg = doc.createElement(\\\"IMG\\\");\\r\\n\\t\\t\\timg.src = \\\"images/blank.png\\\";\\r\\n\\t\\t\\tc.appendChild(img);\\r\\n\\t\\t\\tif (this.sortTypes[i] != null)\\r\\n\\t\\t\\t\\tc._sortType = this.sortTypes[i];\\r\\n\\t\\t\\tif (typeof c.addEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.addEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.attachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.attachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\tc.onclick = this._headerOnclick;\\r\\n\\t\\t}\\r\\n\\t\\telse\\r\\n\\t\\t{\\r\\n\\t\\t\\tc.setAttribute( \\\"_sortType\\\", oSortTypes[i] );\\r\\n\\t\\t\\tc._sortType = \\\"None\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\tthis.updateHeaderArrows();\\r\\n};\\r\\n\\r\\n// remove arrows and events\\r\\nSortableTable.prototype.uninitHeader = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (c._sortType != null && c._sortType != \\\"None\\\") {\\r\\n\\t\\t\\tc.removeChild(c.lastChild);\\r\\n\\t\\t\\tif (typeof c.removeEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.removeEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.detachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.detachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\tc._sortType = null;\\r\\n\\t\\t\\tc.removeAttribute( \\\"_sortType\\\" );\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.updateHeaderArrows = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tif (cells[i]._sortType != null && cells[i]._sortType != \\\"None\\\") {\\r\\n\\t\\t\\timg = cells[i].lastChild;\\r\\n\\t\\t\\tif (i == this.sortColumn)\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow \\\" + (this.descending ? \\\"descending\\\" : \\\"ascending\\\");\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.headerOnclick = function (e) {\\r\\n\\t// find TD element\\r\\n\\tvar el = e.target || e.srcElement;\\r\\n\\twhile (el.tagName != \\\"TD\\\")\\r\\n\\t\\tel = el.parentNode;\\r\\n\\r\\n\\tthis.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\\r\\n};\\r\\n\\r\\n// IE returns wrong cellIndex when columns are hidden\\r\\nSortableTable.getCellIndex = function (oTd) {\\r\\n\\tvar cells = oTd.parentNode.childNodes\\r\\n\\tvar l = cells.length;\\r\\n\\tvar i;\\r\\n\\tfor (i = 0; cells[i] != oTd && i < l; i++)\\r\\n\\t\\t;\\r\\n\\treturn i;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getSortType = function (nColumn) {\\r\\n\\treturn this.sortTypes[nColumn] || \\\"String\\\";\\r\\n};\\r\\n\\r\\n// only nColumn is required\\r\\n// if bDescending is left out the old value is taken into account\\r\\n// if sSortType is left out the sort type is found from the sortTypes array\\r\\n\\r\\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\\r\\n\\tif (!this.tBody) return;\\r\\n\\tif (sSortType == null)\\r\\n\\t\\tsSortType = this.getSortType(nColumn);\\r\\n\\r\\n\\t// exit if None\\r\\n\\tif (sSortType == \\\"None\\\")\\r\\n\\t\\treturn;\\r\\n\\r\\n\\tif (bDescending == null) {\\r\\n\\t\\tif (this.sortColumn != nColumn)\\r\\n\\t\\t\\tthis.descending = this.defaultDescending;\\r\\n\\t\\telse\\r\\n\\t\\t\\tthis.descending = !this.descending;\\r\\n\\t}\\r\\n\\telse\\r\\n\\t\\tthis.descending = bDescending;\\r\\n\\r\\n\\tthis.sortColumn = nColumn;\\r\\n\\r\\n\\tif (typeof this.onbeforesort == \\\"function\\\")\\r\\n\\t\\tthis.onbeforesort();\\r\\n\\r\\n\\tvar f = this.getSortFunction(sSortType, nColumn);\\r\\n\\tvar a = this.getCache(sSortType, nColumn);\\r\\n\\tvar tBody = this.tBody;\\r\\n\\r\\n\\ta.sort(f);\\r\\n\\r\\n\\tif (this.descending)\\r\\n\\t\\ta.reverse();\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// remove from doc\\r\\n\\t\\tvar nextSibling = tBody.nextSibling;\\r\\n\\t\\tvar p = tBody.parentNode;\\r\\n\\t\\tp.removeChild(tBody);\\r\\n\\t}\\r\\n\\r\\n\\t// insert in the new order\\r\\n\\tvar l = a.length;\\r\\n\\tfor (var i = 0; i < l; i++)\\r\\n\\t\\ttBody.appendChild(a[i].element);\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// insert into doc\\r\\n\\t\\tp.insertBefore(tBody, nextSibling);\\r\\n\\t}\\r\\n\\r\\n\\tthis.updateHeaderArrows();\\r\\n\\r\\n\\tthis.destroyCache(a);\\r\\n\\r\\n\\tif (typeof this.onsort == \\\"function\\\")\\r\\n\\t\\tthis.onsort();\\r\\n};\\r\\n\\r\\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\\r\\n\\tvar oThis = this;\\r\\n\\tthis._asyncsort = function () {\\r\\n\\t\\toThis.sort(nColumn, bDescending, sSortType);\\r\\n\\t};\\r\\n\\twindow.setTimeout(this._asyncsort, 1);\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getCache = function (sType, nColumn) {\\r\\n\\tif (!this.tBody) return [];\\r\\n\\tvar rows = this.tBody.rows;\\r\\n\\tvar l = rows.length;\\r\\n\\tvar a = new Array(l);\\r\\n\\tvar r;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tr = rows[i];\\r\\n\\t\\ta[i] = {\\r\\n\\t\\t\\tvalue:\\t\\tthis.getRowValue(r, sType, nColumn),\\r\\n\\t\\t\\telement:\\tr\\r\\n\\t\\t};\\r\\n\\t};\\r\\n\\treturn a;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroyCache = function (oArray) {\\r\\n\\tvar l = oArray.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\toArray[i].value = null;\\r\\n\\t\\toArray[i].element = null;\\r\\n\\t\\toArray[i] = null;\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\\r\\n\\t// if we have defined a custom getRowValue use that\\r\\n\\tif (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\\r\\n\\t\\treturn this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\\r\\n\\r\\n\\tvar s;\\r\\n\\tvar c = oRow.cells[nColumn];\\r\\n\\tif (typeof c.innerText != \\\"undefined\\\")\\r\\n\\t\\ts = c.innerText;\\r\\n\\telse\\r\\n\\t\\ts = SortableTable.getInnerText(c);\\r\\n\\treturn this.getValueFromString(s, sType);\\r\\n};\\r\\n\\r\\nSortableTable.getInnerText = function (oNode) {\\r\\n\\tvar s = \\\"\\\";\\r\\n\\tvar cs = oNode.childNodes;\\r\\n\\tvar l = cs.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tswitch (cs[i].nodeType) {\\r\\n\\t\\t\\tcase 1: //ELEMENT_NODE\\r\\n\\t\\t\\t\\ts += SortableTable.getInnerText(cs[i]);\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\tcase 3:\\t//TEXT_NODE\\r\\n\\t\\t\\t\\ts += cs[i].nodeValue;\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\treturn s;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getValueFromString = function (sText, sType) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].getValueFromString( sText );\\r\\n\\treturn sText;\\r\\n\\t/*\\r\\n\\tswitch (sType) {\\r\\n\\t\\tcase \\\"Number\\\":\\r\\n\\t\\t\\treturn Number(sText);\\r\\n\\t\\tcase \\\"CaseInsensitiveString\\\":\\r\\n\\t\\t\\treturn sText.toUpperCase();\\r\\n\\t\\tcase \\\"Date\\\":\\r\\n\\t\\t\\tvar parts = sText.split(\\\"-\\\");\\r\\n\\t\\t\\tvar d = new Date(0);\\r\\n\\t\\t\\td.setFullYear(parts[0]);\\r\\n\\t\\t\\td.setDate(parts[2]);\\r\\n\\t\\t\\td.setMonth(parts[1] - 1);\\r\\n\\t\\t\\treturn d.valueOf();\\r\\n\\t}\\r\\n\\treturn sText;\\r\\n\\t*/\\r\\n\\t};\\r\\n\\r\\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].compare;\\r\\n\\treturn SortableTable.basicCompare;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroy = function () {\\r\\n\\tthis.uninitHeader();\\r\\n\\tvar win = this.document.parentWindow;\\r\\n\\tif (win && typeof win.detachEvent != \\\"undefined\\\") {\\t// only IE needs this\\r\\n\\t\\twin.detachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n\\tthis._onunload = null;\\r\\n\\tthis.element = null;\\r\\n\\tthis.tHead = null;\\r\\n\\tthis.tBody = null;\\r\\n\\tthis.document = null;\\r\\n\\tthis._headerOnclick = null;\\r\\n\\tthis.sortTypes = null;\\r\\n\\tthis._asyncsort = null;\\r\\n\\tthis.onsort = null;\\r\\n};\\r\\n\\r\\n// Adds a sort type to all instance of SortableTable\\r\\n// sType : String - the identifier of the sort type\\r\\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\\r\\n// string and casts it to a desired format. If left out the string is just\\r\\n// returned\\r\\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\\r\\n// compare function. Takes two values and compares them. If left out less than,\\r\\n// <, compare is used\\r\\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\\r\\n// that takes the row and the column index and returns the value used to compare.\\r\\n// If left out then the innerText is first taken for the cell and then the\\r\\n// fGetValueFromString is used to convert that string the desired value and type\\r\\n\\r\\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\\r\\n\\tthis._sortTypeInfo[sType] = {\\r\\n\\t\\ttype:\\t\\t\\t\\tsType,\\r\\n\\t\\tgetValueFromString:\\tfGetValueFromString || SortableTable.idFunction,\\r\\n\\t\\tcompare:\\t\\t\\tfCompareFunction || SortableTable.basicCompare,\\r\\n\\t\\tgetRowValue:\\t\\tfGetRowValue\\r\\n\\t};\\r\\n};\\r\\n\\r\\n// this removes the sort type from all instances of SortableTable\\r\\nSortableTable.prototype.removeSortType = function (sType) {\\r\\n\\tdelete this._sortTypeInfo[sType];\\r\\n};\\r\\n\\r\\nSortableTable.basicCompare = function compare(n1, n2) {\\r\\n\\tif (n1.value < n2.value)\\r\\n\\t\\treturn -1;\\r\\n\\tif (n2.value < n1.value)\\r\\n\\t\\treturn 1;\\r\\n\\treturn 0;\\r\\n};\\r\\n\\r\\nSortableTable.idFunction = function (x) {\\r\\n\\treturn x;\\r\\n};\\r\\n\\r\\nSortableTable.toUpperCase = function (s) {\\r\\n\\treturn s.toUpperCase();\\r\\n};\\r\\n\\r\\nSortableTable.toDate = function (s) {\\r\\n\\tvar parts = s.split(\\\"-\\\");\\r\\n\\tvar d = new Date(0);\\r\\n\\td.setFullYear(parts[0]);\\r\\n\\td.setDate(parts[2]);\\r\\n\\td.setMonth(parts[1] - 1);\\r\\n\\treturn d.valueOf();\\r\\n};\\r\\n\\r\\n\\r\\n// add sort types\\r\\nSortableTable.prototype.addSortType(\\\"Number\\\", Number);\\r\\nSortableTable.prototype.addSortType(\\\"CaseInsensitiveString\\\", SortableTable.toUpperCase);\\r\\nSortableTable.prototype.addSortType(\\\"Date\\\", SortableTable.toDate);\\r\\nSortableTable.prototype.addSortType(\\\"String\\\");\\r\\n// None is a special case\\r\\n\"","/*\n\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","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\\n// SCRIPT-LOADER FOOTER\\n//# sourceURL=script:///C:/projects/dev/github/TableFilter/libs/sortabletable.js\")","var map = {\n\t\"./array\": \"./src/array.js\",\n\t\"./array.js\": \"./src/array.js\",\n\t\"./const\": \"./src/const.js\",\n\t\"./const.js\": \"./src/const.js\",\n\t\"./cookie\": \"./src/cookie.js\",\n\t\"./cookie.js\": \"./src/cookie.js\",\n\t\"./dom\": \"./src/dom.js\",\n\t\"./dom.js\": \"./src/dom.js\",\n\t\"./emitter\": \"./src/emitter.js\",\n\t\"./emitter.js\": \"./src/emitter.js\",\n\t\"./event\": \"./src/event.js\",\n\t\"./event.js\": \"./src/event.js\",\n\t\"./extensions/advancedGrid/adapterEzEditTable\": \"./src/extensions/advancedGrid/adapterEzEditTable.js\",\n\t\"./extensions/advancedGrid/adapterEzEditTable.js\": \"./src/extensions/advancedGrid/adapterEzEditTable.js\",\n\t\"./extensions/advancedGrid/advancedGrid\": \"./src/extensions/advancedGrid/advancedGrid.js\",\n\t\"./extensions/advancedGrid/advancedGrid.js\": \"./src/extensions/advancedGrid/advancedGrid.js\",\n\t\"./extensions/colOps/colOps\": \"./src/extensions/colOps/colOps.js\",\n\t\"./extensions/colOps/colOps.js\": \"./src/extensions/colOps/colOps.js\",\n\t\"./extensions/colsVisibility/colsVisibility\": \"./src/extensions/colsVisibility/colsVisibility.js\",\n\t\"./extensions/colsVisibility/colsVisibility.js\": \"./src/extensions/colsVisibility/colsVisibility.js\",\n\t\"./extensions/filtersVisibility/filtersVisibility\": \"./src/extensions/filtersVisibility/filtersVisibility.js\",\n\t\"./extensions/filtersVisibility/filtersVisibility.js\": \"./src/extensions/filtersVisibility/filtersVisibility.js\",\n\t\"./extensions/sort/adapterSortabletable\": \"./src/extensions/sort/adapterSortabletable.js\",\n\t\"./extensions/sort/adapterSortabletable.js\": \"./src/extensions/sort/adapterSortabletable.js\",\n\t\"./extensions/sort/sort\": \"./src/extensions/sort/sort.js\",\n\t\"./extensions/sort/sort.js\": \"./src/extensions/sort/sort.js\",\n\t\"./feature\": \"./src/feature.js\",\n\t\"./feature.js\": \"./src/feature.js\",\n\t\"./modules/alternateRows\": \"./src/modules/alternateRows.js\",\n\t\"./modules/alternateRows.js\": \"./src/modules/alternateRows.js\",\n\t\"./modules/baseDropdown\": \"./src/modules/baseDropdown.js\",\n\t\"./modules/baseDropdown.js\": \"./src/modules/baseDropdown.js\",\n\t\"./modules/checkList\": \"./src/modules/checkList.js\",\n\t\"./modules/checkList.js\": \"./src/modules/checkList.js\",\n\t\"./modules/clearButton\": \"./src/modules/clearButton.js\",\n\t\"./modules/clearButton.js\": \"./src/modules/clearButton.js\",\n\t\"./modules/dateType\": \"./src/modules/dateType.js\",\n\t\"./modules/dateType.js\": \"./src/modules/dateType.js\",\n\t\"./modules/dropdown\": \"./src/modules/dropdown.js\",\n\t\"./modules/dropdown.js\": \"./src/modules/dropdown.js\",\n\t\"./modules/gridLayout\": \"./src/modules/gridLayout.js\",\n\t\"./modules/gridLayout.js\": \"./src/modules/gridLayout.js\",\n\t\"./modules/hash\": \"./src/modules/hash.js\",\n\t\"./modules/hash.js\": \"./src/modules/hash.js\",\n\t\"./modules/help\": \"./src/modules/help.js\",\n\t\"./modules/help.js\": \"./src/modules/help.js\",\n\t\"./modules/highlightKeywords\": \"./src/modules/highlightKeywords.js\",\n\t\"./modules/highlightKeywords.js\": \"./src/modules/highlightKeywords.js\",\n\t\"./modules/loader\": \"./src/modules/loader.js\",\n\t\"./modules/loader.js\": \"./src/modules/loader.js\",\n\t\"./modules/markActiveColumns\": \"./src/modules/markActiveColumns.js\",\n\t\"./modules/markActiveColumns.js\": \"./src/modules/markActiveColumns.js\",\n\t\"./modules/noResults\": \"./src/modules/noResults.js\",\n\t\"./modules/noResults.js\": \"./src/modules/noResults.js\",\n\t\"./modules/paging\": \"./src/modules/paging.js\",\n\t\"./modules/paging.js\": \"./src/modules/paging.js\",\n\t\"./modules/popupFilter\": \"./src/modules/popupFilter.js\",\n\t\"./modules/popupFilter.js\": \"./src/modules/popupFilter.js\",\n\t\"./modules/rowsCounter\": \"./src/modules/rowsCounter.js\",\n\t\"./modules/rowsCounter.js\": \"./src/modules/rowsCounter.js\",\n\t\"./modules/state\": \"./src/modules/state.js\",\n\t\"./modules/state.js\": \"./src/modules/state.js\",\n\t\"./modules/statusBar\": \"./src/modules/statusBar.js\",\n\t\"./modules/statusBar.js\": \"./src/modules/statusBar.js\",\n\t\"./modules/storage\": \"./src/modules/storage.js\",\n\t\"./modules/storage.js\": \"./src/modules/storage.js\",\n\t\"./modules/toolbar\": \"./src/modules/toolbar.js\",\n\t\"./modules/toolbar.js\": \"./src/modules/toolbar.js\",\n\t\"./number\": \"./src/number.js\",\n\t\"./number.js\": \"./src/number.js\",\n\t\"./register\": \"./src/register.js\",\n\t\"./register.js\": \"./src/register.js\",\n\t\"./root\": \"./src/root.js\",\n\t\"./root.js\": \"./src/root.js\",\n\t\"./settings\": \"./src/settings.js\",\n\t\"./settings.js\": \"./src/settings.js\",\n\t\"./sort\": \"./src/sort.js\",\n\t\"./sort.js\": \"./src/sort.js\",\n\t\"./string\": \"./src/string.js\",\n\t\"./string.js\": \"./src/string.js\",\n\t\"./tablefilter\": \"./src/tablefilter.js\",\n\t\"./tablefilter.js\": \"./src/tablefilter.js\",\n\t\"./types\": \"./src/types.js\",\n\t\"./types.js\": \"./src/types.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\tvar module = __webpack_require__(id);\n\treturn module;\n}\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) { // check for number or string\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 id;\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src sync recursive ^\\\\.\\\\/.*$\";","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, cfg.name);\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","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, opts.name);\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, f.name);\r\n\r\n // Configuration object\r\n let cfg = this.config;\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = 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▼\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, 'Columns▼');\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, f.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = 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 = '';\r\n\r\n /**\r\n * Collapse icon HTML\r\n * @private\r\n */\r\n this.icnCollapseHtml = '';\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 {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, opts.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = opts.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = 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\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 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","import {defaultsStr} from './settings';\r\nimport {toCamelCase} from './string';\r\n\r\nexport class Register {\r\n constructor(tf, cls = {}) {\r\n console.log(tf, cls);\r\n /**\r\n * TableFilter instance\r\n * @type {TableFilter}\r\n */\r\n this.tf = tf;\r\n\r\n /**\r\n * Feature name, retrieved from alternate class name if found or from\r\n * camelised class name\r\n * @type {String}\r\n */\r\n this.feature = defaultsStr(cls.altName, toCamelCase(cls.name));\r\n\r\n this.tf._mod_[this.feature] = cls;\r\n\r\n // this.instantiate(cls, this.feature);\r\n }\r\n\r\n // instantiate(cls, name) {\r\n // let Cls = cls;\r\n // console.log(Boolean(this.tf[name]),\r\n // Boolean(Cls.alwaysInstantiate));\r\n // if (!this.tf.hasConfig || Boolean(this.tf[name])\r\n // || Boolean(cls.alwaysInstantiate)) {\r\n // this.tf.Mod[name] = this.tf.Mod[name] || new Cls(tf);\r\n // }\r\n // }\r\n}"],"sourceRoot":""}
\ No newline at end of file
diff --git a/src/const.js b/src/const.js
index 81ee3d33..f2c554a6 100644
--- a/src/const.js
+++ b/src/const.js
@@ -1,19 +1,3 @@
-// import {DateType} from './modules/dateType';
-// import {Help} from './modules/help';
-// import {State} from './modules/state';
-// import {GridLayout} from './modules/gridLayout';
-// import {Loader} from './modules/loader';
-// import {HighlightKeyword} from './modules/highlightKeywords';
-// import {PopupFilter} from './modules/popupFilter';
-// import {MarkActiveColumns} from './modules/markActiveColumns';
-// import {RowsCounter} from './modules/rowsCounter';
-// import {StatusBar} from './modules/statusBar';
-// import {ClearButton} from './modules/clearButton';
-// import {AlternateRows} from './modules/alternateRows';
-// import {NoResults} from './modules/noResults';
-// import {Paging} from './modules/paging';
-// import {Toolbar} from './modules/toolbar';
-
/**
* Filter types
*/
@@ -132,76 +116,3 @@ export const IP_ADDRESS = 'ipaddress';
* @type {Number}
*/
export const AUTO_FILTER_DELAY = 750;
-
-/**
- * TableFilter features definitions
- * @type {Array}
- */
-export const FEATURES = [];
-// export const FEATURES = {
-// dateType: {
-// class: DateType,
-// name: 'dateType'
-// },
-// help: {
-// class: Help,
-// name: 'help',
-// enforce: true
-// },
-// state: {
-// class: State,
-// name: 'state'
-// },
-// markActiveColumns: {
-// class: MarkActiveColumns,
-// name: 'markActiveColumns'
-// },
-// gridLayout: {
-// class: GridLayout,
-// name: 'gridLayout'
-// },
-// loader: {
-// class: Loader,
-// name: 'loader'
-// },
-// highlightKeyword: {
-// class: HighlightKeyword,
-// name: 'highlightKeyword',
-// property: 'highlightKeywords'
-// },
-// popupFilter: {
-// class: PopupFilter,
-// name: 'popupFilter',
-// property: 'popupFilters'
-// },
-// rowsCounter: {
-// class: RowsCounter,
-// name: 'rowsCounter'
-// },
-// statusBar: {
-// class: StatusBar,
-// name: 'statusBar'
-// },
-// clearButton: {
-// class: ClearButton,
-// name: 'clearButton',
-// property: 'btnReset'
-// },
-// alternateRows: {
-// class: AlternateRows,
-// name: 'alternateRows'
-// },
-// noResults: {
-// class: NoResults,
-// name: 'noResults'
-// },
-// paging: {
-// class: Paging,
-// name: 'paging'
-// },
-// toolbar: {
-// class: Toolbar,
-// name: 'toolbar',
-// enforce: true
-// }
-// };
diff --git a/src/feature.js b/src/feature.js
index cf551890..55c7de90 100644
--- a/src/feature.js
+++ b/src/feature.js
@@ -22,13 +22,11 @@ export class Feature {
this.tf = tf;
/**
- * Feature name, retrieved from alternate class name if found or from
- * camelised class name as per TableFilter convention
+ * Feature name is the camelised class name as per TableFilter's
+ * convention
* @type {String}
*/
- this.feature = defaultsStr(cls.meta.altName, toCamelCase(cls.name));
-
- cls.meta.name = this.feature;
+ this.feature = toCamelCase(cls.name);
/**
* TableFilter feature setting
@@ -54,6 +52,9 @@ export class Feature {
*/
this.initialized = false;
+ // store resolved feature name
+ cls.meta.name = this.feature;
+
/** Subscribe to destroy event */
this.emitter.on(['destroy'], () => this.destroy());
}
diff --git a/src/modules/highlightKeywords.js b/src/modules/highlightKeywords.js
index 5d584ba2..9ef62863 100644
--- a/src/modules/highlightKeywords.js
+++ b/src/modules/highlightKeywords.js
@@ -174,4 +174,7 @@ export class HighlightKeyword {
}
// TODO: remove as soon as feature name is fixed
-HighlightKeyword.meta = {altName: 'highlightKeywords'};
+HighlightKeyword.meta = {
+ name: 'highlightKeyword',
+ altName: 'highlightKeywords'
+};
diff --git a/src/register.js b/src/register.js
deleted file mode 100644
index 6fa7f863..00000000
--- a/src/register.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import {defaultsStr} from './settings';
-import {toCamelCase} from './string';
-import {FEATURES} from './const';
-
-export class Register {
- constructor(tf, cls = {}) {
- cls.meta = cls.meta || {};
-
- /**
- * TableFilter instance
- * @type {TableFilter}
- */
- this.tf = tf;
-
- /**
- * Feature name, retrieved from alternate class name if found or from
- * camelised class name as per TableFilter convention
- * @type {String}
- */
- this.feature = defaultsStr(cls.meta.altName, toCamelCase(cls.name));
-
- cls.meta.name = this.feature;
-
- FEATURES[this.feature] = cls;
-
- }
-}
\ No newline at end of file
diff --git a/src/tablefilter.js b/src/tablefilter.js
index dd1b0d1f..f86bbfd5 100644
--- a/src/tablefilter.js
+++ b/src/tablefilter.js
@@ -36,8 +36,7 @@ import {Toolbar} from './modules/toolbar';
import {
INPUT, SELECT, MULTIPLE, CHECKLIST, NONE,
ENTER_KEY, TAB_KEY, ESC_KEY, UP_ARROW_KEY, DOWN_ARROW_KEY,
- CELL_TAG, AUTO_FILTER_DELAY, NUMBER, DATE, FORMATTED_NUMBER,
- FEATURES
+ CELL_TAG, AUTO_FILTER_DELAY, NUMBER, DATE, FORMATTED_NUMBER
} from './const';
let doc = root.document;
@@ -941,12 +940,8 @@ export class TableFilter {
*/
this.ExtRegistry = {};
- // conditionally instantiate required features
- this.instantiateFeatures(
- // //Object.keys(FEATURES).map((item) => FEATURES[item])
- // //FEATURES
- [Toolbar]
- );
+ // instantiate toolbar ui component as other components depend on it
+ this.instantiateFeatures([Toolbar]);
}
/**
@@ -966,20 +961,8 @@ export class TableFilter {
//loads theme
this.loadThemes();
- // const { dateType, help, state, markActiveColumns, gridLayout, loader,
- // highlightKeyword, popupFilter, rowsCounter, statusBar, clearButton,
- // alternateRows, noResults, paging, toolbar } = FEATURES;
-
//explicitly initialise features in given order
this.initFeatures([
- // dateType,
- // help,
- // state,
- // markActiveColumns,
- // gridLayout,
- // loader,
- // highlightKeyword,
- // popupFilter
DateType,
Help,
State,
@@ -1060,13 +1043,6 @@ export class TableFilter {
}
this.initFeatures([
- // rowsCounter,
- // statusBar,
- // clearButton,
- // alternateRows,
- // noResults,
- // paging,
- // toolbar
RowsCounter,
StatusBar,
ClearButton,
@@ -1290,27 +1266,14 @@ export class TableFilter {
* @private
*/
instantiateFeatures(features = []) {
- // features.forEach((feature) => {
- // // TODO: remove the property field.
- // // Due to naming convention inconsistencies, a `property`
- // // field is added to allow a conditional instanciation based
- // // on that property on TableFilter, if supplied.
- // feature.property = feature.property || feature.name;
- // if (!this.hasConfig || this[feature.property] === true ||
- // feature.enforce === true) {
- // let {class: Cls, name} = feature;
-
- // this.Mod[name] = this.Mod[name] || new Cls(this);
- // }
- // });
features.forEach(featureCls => {
let Cls = featureCls;
let inst = new Cls(this);
let {meta} = Cls;
- let {name} = meta;
+ let {name, altName} = meta; console.log(name, altName);
- if (!this.hasConfig || this[name] === true
+ if (!this.hasConfig || this[altName || name] === true
|| Boolean(meta.alwaysInstantiate)) {
this.Mod[name] = this.Mod[name] || inst;
}
@@ -1323,14 +1286,6 @@ export class TableFilter {
* @private
*/
initFeatures(features = []) {
- // features.forEach((feature) => {
- // let {property, name} = feature;
- // if (this[property] === true && this.Mod[name]) {
- // this.Mod[name].init();
- // }
- // });
- // this.instantiateFeatures(features);
-
features.forEach(featureCls => {
this.instantiateFeatures([featureCls]);
diff --git a/test/test-clear-button.js b/test/test-clear-button.js
index 509a2021..27506845 100644
--- a/test/test-clear-button.js
+++ b/test/test-clear-button.js
@@ -6,6 +6,7 @@ var tf = new TableFilter('demo', {
tf.init();
var clearButton = tf.feature('clearButton');
+console.log(clearButton)
module('Sanity checks');
test('Clear button component', function() {
deepEqual(typeof clearButton, 'object', 'ClearButton instanciated');
@@ -174,8 +175,8 @@ test('Destroy and init in external container', function() {
'container id');
});
-module('Tear-down');
-test('can destroy TableFilter DOM elements', function() {
- tf.destroy();
- deepEqual(tf.isInitialized(), false, 'Filters removed');
-});
+// module('Tear-down');
+// test('can destroy TableFilter DOM elements', function() {
+// tf.destroy();
+// deepEqual(tf.isInitialized(), false, 'Filters removed');
+// });