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-9d01916cb7bd885f9f23.js b/dist/tablefilter/tf-0-9d01916cb7bd885f9f23.js
new file mode 100644
index 00000000..99995d27
--- /dev/null
+++ b/dist/tablefilter/tf-0-9d01916cb7bd885f9f23.js
@@ -0,0 +1,2 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{440:function(t,e,n){var r={"./array":20,"./array.js":20,"./const":4,"./const.js":4,"./cookie":60,"./cookie.js":60,"./dom":2,"./dom.js":2,"./emitter":93,"./emitter.js":93,"./event":5,"./event.js":5,"./extensions/advancedGrid/adapterEzEditTable":442,"./extensions/advancedGrid/adapterEzEditTable.js":442,"./extensions/advancedGrid/advancedGrid":447,"./extensions/advancedGrid/advancedGrid.js":447,"./extensions/colOps/colOps":446,"./extensions/colOps/colOps.js":446,"./extensions/colsVisibility/colsVisibility":445,"./extensions/colsVisibility/colsVisibility.js":445,"./extensions/filtersVisibility/filtersVisibility":444,"./extensions/filtersVisibility/filtersVisibility.js":444,"./extensions/sort/adapterSortabletable":441,"./extensions/sort/adapterSortabletable.js":441,"./extensions/sort/sort":443,"./extensions/sort/sort.js":443,"./feature":10,"./feature.js":10,"./modules/alternateRows":63,"./modules/alternateRows.js":63,"./modules/baseDropdown":59,"./modules/baseDropdown.js":59,"./modules/checkList":91,"./modules/checkList.js":91,"./modules/clearButton":64,"./modules/clearButton.js":64,"./modules/dateType":74,"./modules/dateType.js":74,"./modules/dropdown":92,"./modules/dropdown.js":92,"./modules/gridLayout":71,"./modules/gridLayout.js":71,"./modules/hash":90,"./modules/hash.js":90,"./modules/help":73,"./modules/help.js":73,"./modules/highlightKeywords":69,"./modules/highlightKeywords.js":69,"./modules/loader":70,"./modules/loader.js":70,"./modules/markActiveColumns":67,"./modules/markActiveColumns.js":67,"./modules/noResults":62,"./modules/noResults.js":62,"./modules/paging":61,"./modules/paging.js":61,"./modules/popupFilter":68,"./modules/popupFilter.js":68,"./modules/rowsCounter":66,"./modules/rowsCounter.js":66,"./modules/state":72,"./modules/state.js":72,"./modules/statusBar":65,"./modules/statusBar.js":65,"./modules/storage":89,"./modules/storage.js":89,"./modules/toolbar":18,"./modules/toolbar.js":18,"./number":22,"./number.js":22,"./root":9,"./root.js":9,"./settings":1,"./settings.js":1,"./sort":36,"./sort.js":36,"./string":8,"./string.js":8,"./tablefilter":127,"./tablefilter.js":127,"./types":3,"./types.js":3};function webpackContext(t){var e=webpackContextResolve(t);return n(e)}function webpackContextResolve(t){var e=r[t];if(e+1)return e;var n=new Error('Cannot find module "'+t+'".');throw n.code="MODULE_NOT_FOUND",n}webpackContext.keys=function webpackContextKeys(){return Object.keys(r)},webpackContext.resolve=webpackContextResolve,(t.exports=webpackContext).id=440},441:function(t,e,n){"use strict";n.r(e),n.d(e,"default",function(){return s});var r=n(10),a=n(3),c=n(2),d=n(5),o=n(22),u=n(4),i=n(1);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;ng)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}();a.meta={altName:"advancedGrid"}},443:function(t,e,n){"use strict";n.r(e);var r=n(441);n(9).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(18);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\nAdapterSortableTable.meta = {altName: 'sort'};\r\n\r\n//Converters\r\nfunction ipAddress(value) {\r\n let vals = value.split('.');\r\n for (let x in vals) {\r\n let val = vals[x];\r\n while (3 > val.length) {\r\n val = '0' + val;\r\n }\r\n vals[x] = val;\r\n }\r\n return vals.join('.');\r\n}\r\n\r\nfunction sortIP(a, b) {\r\n let aa = ipAddress(a.value.toLowerCase());\r\n let bb = ipAddress(b.value.toLowerCase());\r\n if (aa === bb) {\r\n return 0;\r\n } else if (aa < bb) {\r\n return -1;\r\n } else {\r\n return 1;\r\n }\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {tag} from '../../dom';\r\nimport {INPUT} from '../../const';\r\nimport {defaultsStr} from '../../settings';\r\nimport {root} from '../../root';\r\n\r\nconst INSTANTIATION_ERROR = `Failed to instantiate EditTable object.\r\n \\n\"ezEditTable\" dependency not found.`;\r\n\r\n/**\r\n * Adapter module for ezEditTable, an external library providing advanced\r\n * grid features (selection and edition):\r\n * http://codecanyon.net/item/ezedittable-enhance-html-tables/2425123?ref=koalyptus\r\n */\r\nexport default class AdapterEzEditTable extends Feature {\r\n\r\n /**\r\n * Creates an instance of AdapterEzEditTable\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} cfg Configuration options for ezEditTable library\r\n */\r\n constructor(tf, cfg) {\r\n super(tf, AdapterEzEditTable);\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(cfg.description, 'ezEditTable adapter');\r\n\r\n /**\r\n * Filename of ezEditTable library\r\n * @type {String}\r\n */\r\n this.filename = defaultsStr(cfg.filename, 'ezEditTable.js');\r\n\r\n /**\r\n * Path to ezEditTable library\r\n * @type {String}\r\n */\r\n this.vendorPath = cfg.vendor_path;\r\n\r\n /**\r\n * Load ezEditTable stylesheet\r\n * @type {Boolean}\r\n */\r\n this.loadStylesheet = Boolean(cfg.load_stylesheet);\r\n\r\n /**\r\n * Path to ezEditTable stylesheet\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(cfg.stylesheet,\r\n this.vendorPath + 'ezEditTable.css');\r\n\r\n /**\r\n * Name of ezEditTable stylesheet\r\n * @type {String}\r\n */\r\n this.stylesheetName = defaultsStr(cfg.stylesheet_name,\r\n 'ezEditTableCss');\r\n\r\n // Enable the ezEditTable's scroll into view behaviour if grid layout on\r\n cfg.scroll_into_view = cfg.scroll_into_view === false ?\r\n false : tf.gridLayout;\r\n\r\n /**\r\n * ezEditTable instance\r\n * @type {EditTable}\r\n * @private\r\n */\r\n this._ezEditTable = null;\r\n\r\n /**\r\n * ezEditTable configuration\r\n * @private\r\n */\r\n this.cfg = cfg;\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Conditionally load ezEditTable library and set advanced grid\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n if (root.EditTable) {\r\n this._setAdvancedGrid();\r\n } else {\r\n let path = this.vendorPath + this.filename;\r\n tf.import(this.filename, path, () => this._setAdvancedGrid());\r\n }\r\n if (this.loadStylesheet && !tf.isImported(this.stylesheet, 'link')) {\r\n tf.import(this.stylesheetName, this.stylesheet, null, 'link');\r\n }\r\n\r\n // TODO: hack to prevent ezEditTable enter key event hijaking.\r\n // Needs to be fixed in the vendor's library\r\n this.emitter.on(['filter-focus', 'filter-blur'],\r\n () => this._toggleForInputFilter());\r\n\r\n /**\r\n * @inherited\r\n */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Instantiate ezEditTable component for advanced grid features\r\n * @private\r\n */\r\n _setAdvancedGrid() {\r\n let tf = this.tf;\r\n\r\n //start row for EditTable constructor needs to be calculated\r\n let startRow,\r\n cfg = this.cfg,\r\n thead = tag(tf.dom(), 'thead');\r\n\r\n //if thead exists and startRow not specified, startRow is calculated\r\n //automatically by EditTable\r\n if (thead.length > 0 && !cfg.startRow) {\r\n startRow = undefined;\r\n }\r\n //otherwise startRow config property if any or TableFilter refRow\r\n else {\r\n startRow = cfg.startRow || tf.refRow;\r\n }\r\n\r\n cfg.base_path = cfg.base_path || tf.basePath + 'ezEditTable/';\r\n let editable = cfg.editable;\r\n let selectable = cfg.selection;\r\n\r\n if (selectable) {\r\n cfg.default_selection = cfg.default_selection || 'row';\r\n }\r\n //CSS Styles\r\n cfg.active_cell_css = cfg.active_cell_css || 'ezETSelectedCell';\r\n\r\n let _lastValidRowIndex = 0;\r\n let _lastRowIndex = 0;\r\n\r\n if (selectable) {\r\n //Row navigation needs to be calculated according to TableFilter's\r\n //validRowsIndex array\r\n let onAfterSelection = function (et, selectedElm, e) {\r\n let slc = et.Selection;\r\n //Next valid filtered row needs to be selected\r\n let doSelect = function (nextRowIndex) {\r\n if (et.defaultSelection === 'row') {\r\n /* eslint-disable */\r\n slc.SelectRowByIndex(nextRowIndex);\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n et.ClearSelections();\r\n /* eslint-enable */\r\n let cellIndex = selectedElm.cellIndex,\r\n row = tf.dom().rows[nextRowIndex];\r\n if (et.defaultSelection === 'both') {\r\n /* eslint-disable */\r\n slc.SelectRowByIndex(nextRowIndex);\r\n /* eslint-enable */\r\n }\r\n if (row) {\r\n /* eslint-disable */\r\n slc.SelectCell(row.cells[cellIndex]);\r\n /* eslint-enable */\r\n }\r\n }\r\n //Table is filtered\r\n if (tf.validRowsIndex.length !== tf.getRowsNb()) {\r\n let r = tf.dom().rows[nextRowIndex];\r\n if (r) {\r\n r.scrollIntoView(false);\r\n }\r\n if (cell) {\r\n if (cell.cellIndex === (tf.getCellsNb() - 1) &&\r\n tf.gridLayout) {\r\n tf.tblCont.scrollLeft = 100000000;\r\n }\r\n else if (cell.cellIndex === 0 && tf.gridLayout) {\r\n tf.tblCont.scrollLeft = 0;\r\n } else {\r\n cell.scrollIntoView(false);\r\n }\r\n }\r\n }\r\n };\r\n\r\n //table is not filtered\r\n if (!tf.validRowsIndex) {\r\n return;\r\n }\r\n let validIndexes = tf.validRowsIndex,\r\n validIdxLen = validIndexes.length,\r\n row = et.defaultSelection !== 'row' ?\r\n selectedElm.parentNode : selectedElm,\r\n //cell for default_selection = 'both' or 'cell'\r\n cell = selectedElm.nodeName === 'TD' ? selectedElm : null,\r\n /* eslint-disable */\r\n keyCode = e !== undefined ? et.Event.GetKey(e) : 0,\r\n /* eslint-enable */\r\n isRowValid = validIndexes.indexOf(row.rowIndex) !== -1,\r\n nextRowIndex,\r\n paging = tf.feature('paging'),\r\n //pgup/pgdown keys\r\n d = keyCode === 34 || keyCode === 33 ?\r\n (paging && paging.pageLength || et.nbRowsPerPage) :\r\n 1;\r\n\r\n //If next row is not valid, next valid filtered row needs to be\r\n //calculated\r\n if (!isRowValid) {\r\n //Selection direction up/down\r\n if (row.rowIndex > _lastRowIndex) {\r\n //last row\r\n if (row.rowIndex >= validIndexes[validIdxLen - 1]) {\r\n nextRowIndex = validIndexes[validIdxLen - 1];\r\n } else {\r\n let calcRowIndex = (_lastValidRowIndex + d);\r\n if (calcRowIndex > (validIdxLen - 1)) {\r\n nextRowIndex = validIndexes[validIdxLen - 1];\r\n } else {\r\n nextRowIndex = validIndexes[calcRowIndex];\r\n }\r\n }\r\n } else {\r\n //first row\r\n if (row.rowIndex <= validIndexes[0]) {\r\n nextRowIndex = validIndexes[0];\r\n } else {\r\n let v = validIndexes[_lastValidRowIndex - d];\r\n nextRowIndex = v ? v : validIndexes[0];\r\n }\r\n }\r\n _lastRowIndex = row.rowIndex;\r\n doSelect(nextRowIndex);\r\n } else {\r\n //If filtered row is valid, special calculation for\r\n //pgup/pgdown keys\r\n if (keyCode !== 34 && keyCode !== 33) {\r\n _lastValidRowIndex = validIndexes.indexOf(row.rowIndex);\r\n _lastRowIndex = row.rowIndex;\r\n } else {\r\n if (keyCode === 34) { //pgdown\r\n //last row\r\n if ((_lastValidRowIndex + d) <= (validIdxLen - 1)) {\r\n nextRowIndex = validIndexes[\r\n _lastValidRowIndex + d];\r\n } else {\r\n nextRowIndex = [validIdxLen - 1];\r\n }\r\n } else { //pgup\r\n //first row\r\n if ((_lastValidRowIndex - d) <= validIndexes[0]) {\r\n nextRowIndex = validIndexes[0];\r\n } else {\r\n nextRowIndex = validIndexes[\r\n _lastValidRowIndex - d];\r\n }\r\n }\r\n _lastRowIndex = nextRowIndex;\r\n _lastValidRowIndex = validIndexes.indexOf(nextRowIndex);\r\n doSelect(nextRowIndex);\r\n }\r\n }\r\n };\r\n\r\n //Page navigation has to be enforced whenever selected row is out of\r\n //the current page range\r\n let onBeforeSelection = function (et, selectedElm) {\r\n let row = et.defaultSelection !== 'row' ?\r\n selectedElm.parentNode : selectedElm;\r\n if (tf.paging) {\r\n if (tf.feature('paging').nbPages > 1) {\r\n let paging = tf.feature('paging');\r\n //page length is re-assigned in case it has changed\r\n et.nbRowsPerPage = paging.pageLength;\r\n let validIndexes = tf.validRowsIndex,\r\n validIdxLen = validIndexes.length,\r\n pagingEndRow = parseInt(paging.startPagingRow, 10) +\r\n parseInt(paging.pageLength, 10);\r\n let rowIndex = row.rowIndex;\r\n\r\n if ((rowIndex === validIndexes[validIdxLen - 1]) &&\r\n paging.currentPageNb !== paging.nbPages) {\r\n paging.setPage('last');\r\n }\r\n else if ((rowIndex === validIndexes[0]) &&\r\n paging.currentPageNb !== 1) {\r\n paging.setPage('first');\r\n }\r\n else if (rowIndex > validIndexes[pagingEndRow - 1] &&\r\n rowIndex < validIndexes[validIdxLen - 1]) {\r\n paging.setPage('next');\r\n }\r\n else if (\r\n rowIndex < validIndexes[paging.startPagingRow] &&\r\n rowIndex > validIndexes[0]) {\r\n paging.setPage('previous');\r\n }\r\n }\r\n }\r\n };\r\n\r\n //Selected row needs to be visible when paging is activated\r\n if (tf.paging) {\r\n tf.feature('paging').onAfterChangePage = function (paging) {\r\n let advGrid = paging.tf.extension('advancedGrid');\r\n let et = advGrid._ezEditTable;\r\n let slc = et.Selection;\r\n /* eslint-disable */\r\n let row = slc.GetActiveRow();\r\n /* eslint-enable */\r\n if (row) {\r\n row.scrollIntoView(false);\r\n }\r\n /* eslint-disable */\r\n let cell = slc.GetActiveCell();\r\n /* eslint-enable */\r\n if (cell) {\r\n cell.scrollIntoView(false);\r\n }\r\n };\r\n }\r\n\r\n //Rows navigation when rows are filtered is performed with the\r\n //EditTable row selection callback events\r\n if (cfg.default_selection === 'row') {\r\n let fnB = cfg.on_before_selected_row;\r\n cfg.on_before_selected_row = function () {\r\n var args = arguments;\r\n onBeforeSelection(args[0], args[1], args[2]);\r\n if (fnB) {\r\n fnB.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n let fnA = cfg.on_after_selected_row;\r\n cfg.on_after_selected_row = function () {\r\n var args = arguments;\r\n onAfterSelection(args[0], args[1], args[2]);\r\n if (fnA) {\r\n fnA.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n } else {\r\n let fnD = cfg.on_before_selected_cell;\r\n cfg.on_before_selected_cell = function () {\r\n var args = arguments;\r\n onBeforeSelection(args[0], args[1], args[2]);\r\n if (fnD) {\r\n fnD.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n let fnC = cfg.on_after_selected_cell;\r\n cfg.on_after_selected_cell = function () {\r\n var args = arguments;\r\n onAfterSelection(args[0], args[1], args[2]);\r\n if (fnC) {\r\n fnC.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n }\r\n }\r\n if (editable) {\r\n //Added or removed rows, TF rows number needs to be re-calculated\r\n let fnE = cfg.on_added_dom_row;\r\n cfg.on_added_dom_row = function () {\r\n var args = arguments;\r\n tf.nbFilterableRows++;\r\n if (!tf.paging) {\r\n tf.emitter.emit('rows-changed', tf, this);\r\n } else {\r\n tf.nbFilterableRows++;\r\n tf.paging = false;\r\n tf.feature('paging').destroy();\r\n tf.feature('paging').reset();\r\n }\r\n if (tf.alternateRows) {\r\n tf.feature('alternateRows').init();\r\n }\r\n if (fnE) {\r\n fnE.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n if (cfg.actions && cfg.actions['delete']) {\r\n let fnF = cfg.actions['delete'].on_after_submit;\r\n cfg.actions['delete'].on_after_submit = function () {\r\n var args = arguments;\r\n tf.nbFilterableRows--;\r\n if (!tf.paging) {\r\n tf.emitter.emit('rows-changed', tf, this);\r\n } else {\r\n tf.nbFilterableRows--;\r\n tf.paging = false;\r\n tf.feature('paging').destroy();\r\n tf.feature('paging').reset(false);\r\n }\r\n if (tf.alternateRows) {\r\n tf.feature('alternateRows').init();\r\n }\r\n if (fnF) {\r\n fnF.call(null, args[0], args[1]);\r\n }\r\n };\r\n }\r\n }\r\n\r\n try {\r\n /* eslint-disable */\r\n this._ezEditTable = new EditTable(tf.id, cfg, startRow);\r\n this._ezEditTable.Init();\r\n /* eslint-enable */\r\n } catch (e) { throw new Error(INSTANTIATION_ERROR); }\r\n\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Reset advanced grid when previously removed\r\n */\r\n reset() {\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable) {\r\n if (this.cfg.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Set();\r\n /* eslint-enable */\r\n }\r\n if (this.cfg.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Set();\r\n /* eslint-enable */\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Toggle behaviour\r\n */\r\n toggle() {\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Remove();\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Set();\r\n /* eslint-enable */\r\n }\r\n if (ezEditTable.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Remove();\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Set();\r\n /* eslint-enable */\r\n }\r\n }\r\n\r\n _toggleForInputFilter() {\r\n let tf = this.tf;\r\n if (!tf.getActiveFilterId()) {\r\n return;\r\n }\r\n let colIndex = tf.getColumnIndexFromFilterId(tf.getActiveFilterId());\r\n let filterType = tf.getFilterType(colIndex);\r\n if (filterType === INPUT) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n /**\r\n * Remove advanced grid\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable) {\r\n if (this.cfg.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.ClearSelections();\r\n ezEditTable.Selection.Remove();\r\n /* eslint-enable */\r\n }\r\n if (this.cfg.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Remove();\r\n /* eslint-enable */\r\n }\r\n }\r\n\r\n this.emitter.off(['filter-focus', 'filter-blur'],\r\n () => this._toggleForInputFilter());\r\n this.initialized = false;\r\n }\r\n}\r\n\r\nAdapterEzEditTable.meta = {altName: 'advancedGrid'};\r\n","import 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, FiltersVisibility);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(f.description,\r\n 'Filters row visibility manager');\r\n\r\n /**\r\n * Extension's stylesheet filename\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(f.stylesheet , 'filtersVisibility.css');\r\n\r\n /**\r\n * Expand icon filename\r\n * @type {String}\r\n */\r\n this.icnExpand = defaultsStr(f.expand_icon_name, 'icn_exp.png');\r\n\r\n /**\r\n * Collapse icon filename\r\n * @type {String}\r\n */\r\n this.icnCollapse = defaultsStr(f.collapse_icon_name, 'icn_clp.png');\r\n\r\n /**\r\n * Main container element\r\n * @private\r\n */\r\n this.contEl = null;\r\n\r\n /**\r\n * Button element\r\n * @private\r\n */\r\n this.btnEl = null;\r\n\r\n /**\r\n * Expand icon HTML\r\n * @private\r\n */\r\n this.icnExpandHtml = '';\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, ColsVisibility);\r\n\r\n // Configuration object\r\n let cfg = this.config;\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(f.description, 'Columns visibility manager');\r\n\r\n /**\r\n * show/hide columns container element\r\n * @private\r\n */\r\n this.spanEl = null;\r\n\r\n /**\r\n * show/hide columns button element\r\n * @private\r\n */\r\n this.btnEl = null;\r\n\r\n /**\r\n * show/hide columns main container element\r\n * @private\r\n */\r\n this.contEl = null;\r\n\r\n /**\r\n * Enable tick to hide a column, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.tickToHide = defaultsBool(f.tick_to_hide, true);\r\n\r\n /**\r\n * Enable columns manager UI, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.manager = defaultsBool(f.manager, true);\r\n\r\n /**\r\n * Headers HTML table reference only if headers are external\r\n * @type {DOMElement}\r\n */\r\n this.headersTbl = f.headers_table || null;\r\n\r\n /**\r\n * Headers row index only if headers are external\r\n * @type {Number}\r\n */\r\n this.headersIndex = defaultsNb(f.headers_index, 1);\r\n\r\n /**\r\n * ID of main container element\r\n * @type {String}\r\n */\r\n this.contElTgtId = defaultsStr(f.container_target_id, null);\r\n\r\n /**\r\n * Alternative text for column headers in column manager UI\r\n * @type {Array}\r\n */\r\n this.headersText = defaultsArr(f.headers_text, []);\r\n\r\n /**\r\n * ID of button's container element\r\n * @type {String}\r\n */\r\n this.btnTgtId = defaultsStr(f.btn_target_id, null);\r\n\r\n /**\r\n * Button's text, defaults to Columns▼\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, ColOps);\r\n\r\n /**\r\n * Callback fired before columns operations start\r\n * @type {Function}\r\n */\r\n this.onBeforeOperation = defaultsFn(opts.on_before_operation, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after columns operations are completed\r\n * @type {Function}\r\n */\r\n this.onAfterOperation = defaultsFn(opts.on_after_operation, EMPTY_FN);\r\n\r\n /**\r\n * Configuration options\r\n * @type {Object}\r\n */\r\n this.opts = opts;\r\n\r\n /**\r\n * List of DOM element IDs containing column's calculation result\r\n * @type {Array}\r\n */\r\n this.labelIds = defaultsArr(opts.id, []);\r\n\r\n /**\r\n * List of columns' indexes for calculations\r\n * @type {Array}\r\n */\r\n this.colIndexes = defaultsArr(opts.col, []);\r\n\r\n /**\r\n * List of operations - possible values: 'sum', 'mean', 'min', 'max',\r\n * 'median', 'q1', 'q3'\r\n * @type {Array}\r\n */\r\n this.operations = defaultsArr(opts.operation, []);\r\n\r\n /**\r\n * List of write methods used to write the result - possible values:\r\n * 'innerHTML', 'setValue', 'createTextNode'\r\n * @type {Array}\r\n */\r\n this.outputTypes = defaultsArr(opts.write_method, []);\r\n\r\n /**\r\n * List of format objects used for formatting the result -\r\n * refer to https://github.com/componitable/format-number to check\r\n * configuration options\r\n * @type {Array}\r\n */\r\n this.formatResults = defaultsArr(opts.format_result, []);\r\n\r\n /**\r\n * List of row indexes displaying the results\r\n * @type {Array}\r\n */\r\n this.totRowIndexes = defaultsArr(opts.tot_row_index, []);\r\n\r\n /**\r\n * List of row indexes excluded from calculations\r\n * @type {Array}\r\n */\r\n this.excludeRows = defaultsArr(opts.exclude_row, []);\r\n\r\n /**\r\n * List of decimal precision for calculation results\r\n * @type {Array}\r\n */\r\n this.decimalPrecisions = defaultsArr(opts.decimal_precision, 2);\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initializes ColOps instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n // subscribe to events\r\n this.emitter.on(EVENTS, bound(this.calcAll, this));\r\n\r\n this.calcAll();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Calculates columns' values\r\n * Configuration options are stored in 'opts' property\r\n * - 'id' contains ids of elements showing result (array)\r\n * - 'col' contains the columns' indexes (array)\r\n * - 'operation' contains operation type (array, values: 'sum', 'mean',\r\n * 'min', 'max', 'median', 'q1', 'q3')\r\n * - 'write_method' array defines which method to use for displaying the\r\n * result (innerHTML, setValue, createTextNode) - default: 'innerHTML'\r\n * - 'tot_row_index' defines in which row results are displayed\r\n * (integers array)\r\n *\r\n * - changes made by Nuovella:\r\n * (1) optimized the routine (now it will only process each column once),\r\n * (2) added calculations for the median, lower and upper quartile.\r\n */\r\n calcAll() {\r\n let tf = this.tf;\r\n if (!tf.isInitialized()) {\r\n return;\r\n }\r\n\r\n this.onBeforeOperation(tf, this);\r\n this.emitter.emit('before-column-operation', tf, this);\r\n\r\n let { colIndexes, operations: colOperations, outputTypes,\r\n totRowIndexes, excludeRows, formatResults,\r\n decimalPrecisions } = this;\r\n\r\n //nuovella: determine unique list of columns to operate on\r\n let uIndexes = [];\r\n colIndexes.forEach((val) => {\r\n if (uIndexes.indexOf(val) === -1) {\r\n uIndexes.push(val);\r\n }\r\n });\r\n\r\n let nbCols = uIndexes.length,\r\n rows = tf.dom().rows,\r\n colValues = [];\r\n\r\n for (let u = 0; u < nbCols; u++) {\r\n //this retrieves col values\r\n //use uIndexes because we only want to pass through this loop\r\n //once for each column get the values in this unique column\r\n colValues.push(\r\n tf.getVisibleColumnData(uIndexes[u], false, excludeRows)\r\n );\r\n\r\n let curValues = colValues[u];\r\n\r\n //next: calculate all operations for this column\r\n let result = 0,\r\n operations = [],\r\n precisions = [],\r\n labels = [],\r\n writeType,\r\n formatResult = [],\r\n idx = 0;\r\n\r\n for (let k = 0; k < colIndexes.length; k++) {\r\n if (colIndexes[k] !== uIndexes[u]) {\r\n continue;\r\n }\r\n operations[idx] = (colOperations[k] || 'sum').toLowerCase();\r\n precisions[idx] = decimalPrecisions[k];\r\n labels[idx] = this.labelIds[k];\r\n writeType = isArray(outputTypes) ? outputTypes[k] : null;\r\n formatResult[idx] =\r\n this.configureFormat(uIndexes[u], formatResults[k]);\r\n idx++;\r\n }\r\n\r\n for (let i = 0; i < idx; i++) {\r\n // emit values before column calculation\r\n this.emitter.emit(\r\n 'before-column-calc',\r\n tf,\r\n this,\r\n uIndexes[u],\r\n curValues,\r\n operations[i],\r\n precisions[i]\r\n );\r\n\r\n result = Number(this.calc(curValues, operations[i], null));\r\n\r\n // emit column calculation result\r\n this.emitter.emit(\r\n 'column-calc',\r\n tf,\r\n this,\r\n uIndexes[u],\r\n result,\r\n operations[i],\r\n precisions[i]\r\n );\r\n\r\n // write result in expected DOM element\r\n this.writeResult(\r\n result,\r\n labels[i],\r\n writeType,\r\n precisions[i],\r\n formatResult[i]\r\n );\r\n\r\n }//for i\r\n\r\n // row(s) with result are always visible\r\n let totRow = totRowIndexes && totRowIndexes[u] ?\r\n rows[totRowIndexes[u]] : null;\r\n if (totRow) {\r\n totRow.style.display = '';\r\n }\r\n }//for u\r\n\r\n this.onAfterOperation(tf, this);\r\n this.emitter.emit('after-column-operation', tf, this);\r\n }\r\n\r\n /**\r\n * Make desired calculation on specified column.\r\n * @param {Number} colIndex Column index\r\n * @param {String} [operation=SUM] Operation type\r\n * @param {Number} precision Decimal precision\r\n * @returns {Number}\r\n */\r\n columnCalc(colIndex, operation = SUM, precision) {\r\n let excludeRows = this.excludeRows || [];\r\n let colValues = tf.getVisibleColumnData(colIndex, false, excludeRows);\r\n\r\n return Number(this.calc(colValues, operation, precision));\r\n }\r\n\r\n /**\r\n * Make calculation on passed values.\r\n * @param {Array} values List of values\r\n * @param {String} [operation=SUM] Optional operation type\r\n * @param {Number} precision Optional result precision\r\n * @returns {Number}\r\n * @private\r\n */\r\n calc(colValues, operation = SUM, precision) {\r\n let result = 0;\r\n\r\n if (operation === Q1 || operation === Q3 || operation === MEDIAN) {\r\n colValues = this.sortColumnValues(colValues, numSortAsc);\r\n }\r\n\r\n switch (operation) {\r\n case MEAN:\r\n result = this.calcMean(colValues);\r\n break;\r\n case SUM:\r\n result = this.calcSum(colValues);\r\n break;\r\n case MIN:\r\n result = this.calcMin(colValues);\r\n break;\r\n case MAX:\r\n result = this.calcMax(colValues);\r\n break;\r\n case MEDIAN:\r\n result = this.calcMedian(colValues);\r\n break;\r\n case Q1:\r\n result = this.calcQ1(colValues);\r\n break;\r\n case Q3:\r\n result = this.calcQ3(colValues);\r\n break;\r\n }\r\n\r\n return isEmpty(precision) ? result : result.toFixed(precision);\r\n }\r\n\r\n /**\r\n * Calculate the sum of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcSum(values = []) {\r\n if (isEmpty(values)) {\r\n return 0;\r\n }\r\n let result = values.reduce((x, y) => Number(x) + Number(y));\r\n return result;\r\n }\r\n\r\n /**\r\n * Calculate the mean of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMean(values = []) {\r\n let result = this.calcSum(values) / values.length;\r\n return Number(result);\r\n }\r\n\r\n /**\r\n * Calculate the max value of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMax(values = []) {\r\n return Math.max.apply(null, values);\r\n }\r\n\r\n /**\r\n * Calculate the min value of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMin(values = []) {\r\n return Math.min.apply(null, values);\r\n }\r\n\r\n /**\r\n * Calculate the median of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMedian(values = []) {\r\n let nbValues = values.length;\r\n let aux = 0;\r\n if (nbValues % 2 === 1) {\r\n aux = Math.floor(nbValues / 2);\r\n return Number(values[aux]);\r\n }\r\n return (Number(values[nbValues / 2]) +\r\n Number(values[((nbValues / 2) - 1)])) / 2;\r\n }\r\n\r\n /**\r\n * Calculate the lower quartile of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcQ1(values = []) {\r\n let nbValues = values.length;\r\n let posa = 0.0;\r\n posa = Math.floor(nbValues / 4);\r\n if (4 * posa === nbValues) {\r\n return (Number(values[posa - 1]) +\r\n Number(values[posa])) / 2;\r\n }\r\n return Number(values[posa]);\r\n }\r\n\r\n /**\r\n * Calculate the upper quartile of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcQ3(values = []) {\r\n let nbValues = values.length;\r\n let posa = 0.0;\r\n let posb = 0.0;\r\n posa = Math.floor(nbValues / 4);\r\n if (4 * posa === nbValues) {\r\n posb = 3 * posa;\r\n return (Number(values[posb]) +\r\n Number(values[posb - 1])) / 2;\r\n }\r\n return Number(values[nbValues - posa - 1]);\r\n }\r\n\r\n /**\r\n * Sort passed values with supplied sorter function.\r\n * @param {Array} [values=[]] List of values to be sorted\r\n * @param {Function} sorter Sorter function\r\n * @returns {Array}\r\n */\r\n sortColumnValues(values = [], sorter) {\r\n return values.sort(sorter);\r\n }\r\n\r\n /**\r\n * Write calculation result in passed DOM element with supplied write method\r\n * and decimal precision.\r\n * @param {Number} [result=0] Calculation result\r\n * @param {DOMElement} label DOM element\r\n * @param {String} [writeType='innerhtml'] Write method\r\n * @param {Number} [precision=2] Applied decimal precision\r\n * @private\r\n */\r\n writeResult(result = 0, label, writeType = 'innerhtml',\r\n precision = 2, format = {}) {\r\n let labelElm = elm(label);\r\n\r\n if (!labelElm) {\r\n return;\r\n }\r\n\r\n result = result.toFixed(precision);\r\n if (isNaN(result) || !isFinite(result)) {\r\n result = '';\r\n } else {\r\n result = formatNumber(format)(result);\r\n }\r\n\r\n switch (writeType.toLowerCase()) {\r\n case 'innerhtml':\r\n labelElm.innerHTML = result;\r\n break;\r\n case 'setvalue':\r\n labelElm.value = result;\r\n break;\r\n case 'createtextnode':\r\n let oldNode = labelElm.firstChild;\r\n let txtNode = createText(result);\r\n labelElm.replaceChild(txtNode, oldNode);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Configure the format options used to format the operation result based\r\n * on column type.\r\n * @param {Number} colIndex Column index\r\n * @param {Object} [format={}] Format object\r\n * @returns {Object}\r\n * @private\r\n */\r\n configureFormat(colIndex, format = {}) {\r\n let tf = this.tf;\r\n if (tf.hasType(colIndex, [FORMATTED_NUMBER])) {\r\n let colType = tf.colTypes[colIndex];\r\n if (colType.decimal && !format.decimal) {\r\n format.decimal = colType.decimal;\r\n }\r\n if (colType.thousands && !format.integerSeparator) {\r\n format.integerSeparator = colType.thousands;\r\n }\r\n } else {\r\n format.decimal = format.decimal || '';\r\n format.integerSeparator = format.integerSeparator || '';\r\n }\r\n return format;\r\n }\r\n\r\n /** Remove extension */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n // unsubscribe to events\r\n this.emitter.off(EVENTS, bound(this.calcAll, this));\r\n\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import 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/package-lock.json b/package-lock.json
index 2c6b9c4d..955387bc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "tablefilter",
- "version": "0.6.77",
+ "version": "0.6.78",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -14,34 +14,34 @@
}
},
"@babel/core": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.2.tgz",
- "integrity": "sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==",
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.3.3.tgz",
+ "integrity": "sha512-w445QGI2qd0E0GlSnq6huRZWPMmQGCp5gd5ZWS4hagn0EiwzxD5QMFkpchyusAyVC1n27OKXzQ0/88aVU9n4xQ==",
"dev": true,
"requires": {
"@babel/code-frame": "7.0.0",
- "@babel/generator": "7.2.2",
- "@babel/helpers": "7.2.0",
- "@babel/parser": "7.2.2",
+ "@babel/generator": "7.3.3",
+ "@babel/helpers": "7.3.1",
+ "@babel/parser": "7.3.3",
"@babel/template": "7.2.2",
- "@babel/traverse": "7.2.2",
- "@babel/types": "7.2.2",
+ "@babel/traverse": "7.2.3",
+ "@babel/types": "7.3.3",
"convert-source-map": "1.6.0",
- "debug": "4.1.0",
+ "debug": "4.1.1",
"json5": "2.1.0",
"lodash": "4.17.11",
- "resolve": "1.8.1",
+ "resolve": "1.10.0",
"semver": "5.5.0",
"source-map": "0.5.7"
},
"dependencies": {
"@babel/generator": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.2.tgz",
- "integrity": "sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg==",
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.3.tgz",
+ "integrity": "sha512-aEADYwRRZjJyMnKN7llGIlircxTCofm3dtV5pmY6ob18MSIuipHpA2yZWkPlycwu5HJcx/pADS3zssd8eY7/6A==",
"dev": true,
"requires": {
- "@babel/types": "7.2.2",
+ "@babel/types": "7.3.3",
"jsesc": "2.5.2",
"lodash": "4.17.11",
"source-map": "0.5.7",
@@ -54,15 +54,15 @@
"integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
"dev": true,
"requires": {
- "@babel/helper-get-function-arity": "7.0.0",
- "@babel/template": "7.2.2",
- "@babel/types": "7.2.2"
+ "@babel/helper-get-function-arity": "^7.0.0",
+ "@babel/template": "^7.1.0",
+ "@babel/types": "^7.0.0"
}
},
"@babel/parser": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.2.tgz",
- "integrity": "sha512-UNTmQ5cSLDeBGBl+s7JeowkqIHgmFAGBnLDdIzFmUNSuS5JF0XBcN59jsh/vJO/YjfsBqMxhMjoFGmNExmf0FA==",
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.3.tgz",
+ "integrity": "sha512-xsH1CJoln2r74hR+y7cg2B5JCPaTh+Hd+EbBRk9nWGSNspuo6krjhX0Om6RnRQuIvFq8wVXCLKH3kwKDYhanSg==",
"dev": true
},
"@babel/template": {
@@ -71,32 +71,32 @@
"integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
"dev": true,
"requires": {
- "@babel/code-frame": "7.0.0",
- "@babel/parser": "7.2.2",
- "@babel/types": "7.2.2"
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.2.2",
+ "@babel/types": "^7.2.2"
}
},
"@babel/traverse": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.2.tgz",
- "integrity": "sha512-E5Bn9FSwHpSkUhthw/XEuvFZxIgrqb9M8cX8j5EUQtrUG5DQUy6bFyl7G7iQ1D1Czudor+xkmp81JbLVVM0Sjg==",
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz",
+ "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==",
"dev": true,
"requires": {
"@babel/code-frame": "7.0.0",
- "@babel/generator": "7.2.2",
+ "@babel/generator": "7.3.3",
"@babel/helper-function-name": "7.1.0",
"@babel/helper-split-export-declaration": "7.0.0",
- "@babel/parser": "7.2.2",
- "@babel/types": "7.2.2",
- "debug": "4.1.0",
- "globals": "11.9.0",
+ "@babel/parser": "7.3.3",
+ "@babel/types": "7.3.3",
+ "debug": "4.1.1",
+ "globals": "11.11.0",
"lodash": "4.17.11"
}
},
"@babel/types": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.2.2.tgz",
- "integrity": "sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg==",
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.3.tgz",
+ "integrity": "sha512-2tACZ80Wg09UnPg5uGAOUvvInaqLk3l/IAhQzlxLQOIXacr6bMsra5SH6AWw/hIDRCSbCdHP2KzSOD+cT7TzMQ==",
"dev": true,
"requires": {
"esutils": "2.0.2",
@@ -105,18 +105,18 @@
}
},
"debug": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
- "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
"ms": "2.1.1"
}
},
"globals": {
- "version": "11.9.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz",
- "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==",
+ "version": "11.11.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz",
+ "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==",
"dev": true
},
"jsesc": {
@@ -131,7 +131,7 @@
"integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
"dev": true,
"requires": {
- "minimist": "1.2.0"
+ "minimist": "^1.2.0"
}
},
"lodash": {
@@ -153,9 +153,9 @@
"dev": true
},
"resolve": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
- "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
+ "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==",
"dev": true,
"requires": {
"path-parse": "1.0.6"
@@ -202,7 +202,7 @@
"integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==",
"dev": true,
"requires": {
- "@babel/types": "^7.0.0"
+ "@babel/types": "7.0.0"
}
},
"@babel/helper-builder-binary-assignment-operator-visitor": {
@@ -211,8 +211,8 @@
"integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==",
"dev": true,
"requires": {
- "@babel/helper-explode-assignable-expression": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "@babel/helper-explode-assignable-expression": "7.1.0",
+ "@babel/types": "7.0.0"
}
},
"@babel/helper-call-delegate": {
@@ -221,9 +221,9 @@
"integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==",
"dev": true,
"requires": {
- "@babel/helper-hoist-variables": "^7.0.0",
- "@babel/traverse": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "@babel/helper-hoist-variables": "7.0.0",
+ "@babel/traverse": "7.2.3",
+ "@babel/types": "7.0.0"
},
"dependencies": {
"@babel/generator": {
@@ -232,11 +232,11 @@
"integrity": "sha512-f3QCuPppXxtZOEm5GWPra/uYUjmNQlu9pbAD8D/9jze4pTY83rTtB1igTBSwvkeNlC5gR24zFFkz+2WHLFQhqQ==",
"dev": true,
"requires": {
- "@babel/types": "^7.3.2",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.10",
- "source-map": "^0.5.0",
- "trim-right": "^1.0.1"
+ "@babel/types": "7.3.2",
+ "jsesc": "2.5.2",
+ "lodash": "4.17.11",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
},
"dependencies": {
"@babel/types": {
@@ -245,9 +245,9 @@
"integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
}
}
}
@@ -258,9 +258,9 @@
"integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
"dev": true,
"requires": {
- "@babel/helper-get-function-arity": "^7.0.0",
- "@babel/template": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "@babel/helper-get-function-arity": "7.0.0",
+ "@babel/template": "7.2.2",
+ "@babel/types": "7.0.0"
}
},
"@babel/parser": {
@@ -275,9 +275,9 @@
"integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.2.2",
- "@babel/types": "^7.2.2"
+ "@babel/code-frame": "7.0.0",
+ "@babel/parser": "7.3.2",
+ "@babel/types": "7.3.2"
},
"dependencies": {
"@babel/types": {
@@ -286,9 +286,9 @@
"integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
}
}
}
@@ -299,15 +299,15 @@
"integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/generator": "^7.2.2",
- "@babel/helper-function-name": "^7.1.0",
- "@babel/helper-split-export-declaration": "^7.0.0",
- "@babel/parser": "^7.2.3",
- "@babel/types": "^7.2.2",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.10"
+ "@babel/code-frame": "7.0.0",
+ "@babel/generator": "7.3.2",
+ "@babel/helper-function-name": "7.1.0",
+ "@babel/helper-split-export-declaration": "7.0.0",
+ "@babel/parser": "7.3.2",
+ "@babel/types": "7.3.2",
+ "debug": "4.1.1",
+ "globals": "11.10.0",
+ "lodash": "4.17.11"
},
"dependencies": {
"@babel/types": {
@@ -316,9 +316,9 @@
"integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
}
}
}
@@ -329,7 +329,7 @@
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
- "ms": "^2.1.1"
+ "ms": "2.1.1"
}
},
"globals": {
@@ -370,9 +370,9 @@
"integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==",
"dev": true,
"requires": {
- "@babel/helper-function-name": "^7.1.0",
- "@babel/types": "^7.0.0",
- "lodash": "^4.17.10"
+ "@babel/helper-function-name": "7.1.0",
+ "@babel/types": "7.0.0",
+ "lodash": "4.17.11"
},
"dependencies": {
"@babel/helper-function-name": {
@@ -381,9 +381,9 @@
"integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
"dev": true,
"requires": {
- "@babel/helper-get-function-arity": "^7.0.0",
- "@babel/template": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "@babel/helper-get-function-arity": "7.0.0",
+ "@babel/template": "7.2.2",
+ "@babel/types": "7.0.0"
}
},
"@babel/parser": {
@@ -398,9 +398,9 @@
"integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.2.2",
- "@babel/types": "^7.2.2"
+ "@babel/code-frame": "7.0.0",
+ "@babel/parser": "7.3.2",
+ "@babel/types": "7.3.2"
},
"dependencies": {
"@babel/types": {
@@ -409,9 +409,9 @@
"integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
}
}
}
@@ -436,8 +436,8 @@
"integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==",
"dev": true,
"requires": {
- "@babel/traverse": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "@babel/traverse": "7.2.3",
+ "@babel/types": "7.0.0"
},
"dependencies": {
"@babel/generator": {
@@ -446,11 +446,11 @@
"integrity": "sha512-f3QCuPppXxtZOEm5GWPra/uYUjmNQlu9pbAD8D/9jze4pTY83rTtB1igTBSwvkeNlC5gR24zFFkz+2WHLFQhqQ==",
"dev": true,
"requires": {
- "@babel/types": "^7.3.2",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.10",
- "source-map": "^0.5.0",
- "trim-right": "^1.0.1"
+ "@babel/types": "7.3.2",
+ "jsesc": "2.5.2",
+ "lodash": "4.17.11",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
},
"dependencies": {
"@babel/types": {
@@ -459,9 +459,9 @@
"integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
}
}
}
@@ -472,9 +472,9 @@
"integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
"dev": true,
"requires": {
- "@babel/helper-get-function-arity": "^7.0.0",
- "@babel/template": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "@babel/helper-get-function-arity": "7.0.0",
+ "@babel/template": "7.2.2",
+ "@babel/types": "7.0.0"
}
},
"@babel/parser": {
@@ -489,9 +489,9 @@
"integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.2.2",
- "@babel/types": "^7.2.2"
+ "@babel/code-frame": "7.0.0",
+ "@babel/parser": "7.3.2",
+ "@babel/types": "7.3.2"
},
"dependencies": {
"@babel/types": {
@@ -500,9 +500,9 @@
"integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
}
}
}
@@ -513,15 +513,15 @@
"integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/generator": "^7.2.2",
- "@babel/helper-function-name": "^7.1.0",
- "@babel/helper-split-export-declaration": "^7.0.0",
- "@babel/parser": "^7.2.3",
- "@babel/types": "^7.2.2",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.10"
+ "@babel/code-frame": "7.0.0",
+ "@babel/generator": "7.3.2",
+ "@babel/helper-function-name": "7.1.0",
+ "@babel/helper-split-export-declaration": "7.0.0",
+ "@babel/parser": "7.3.2",
+ "@babel/types": "7.3.2",
+ "debug": "4.1.1",
+ "globals": "11.10.0",
+ "lodash": "4.17.11"
},
"dependencies": {
"@babel/types": {
@@ -530,9 +530,9 @@
"integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
}
}
}
@@ -543,7 +543,7 @@
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
- "ms": "^2.1.1"
+ "ms": "2.1.1"
}
},
"globals": {
@@ -604,7 +604,7 @@
"integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==",
"dev": true,
"requires": {
- "@babel/types": "^7.0.0"
+ "@babel/types": "7.0.0"
}
},
"@babel/helper-member-expression-to-functions": {
@@ -613,7 +613,7 @@
"integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==",
"dev": true,
"requires": {
- "@babel/types": "^7.0.0"
+ "@babel/types": "7.0.0"
}
},
"@babel/helper-module-imports": {
@@ -622,7 +622,7 @@
"integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
"dev": true,
"requires": {
- "@babel/types": "^7.0.0"
+ "@babel/types": "7.0.0"
}
},
"@babel/helper-module-transforms": {
@@ -631,12 +631,12 @@
"integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==",
"dev": true,
"requires": {
- "@babel/helper-module-imports": "^7.0.0",
- "@babel/helper-simple-access": "^7.1.0",
- "@babel/helper-split-export-declaration": "^7.0.0",
- "@babel/template": "^7.2.2",
- "@babel/types": "^7.2.2",
- "lodash": "^4.17.10"
+ "@babel/helper-module-imports": "7.0.0",
+ "@babel/helper-simple-access": "7.1.0",
+ "@babel/helper-split-export-declaration": "7.0.0",
+ "@babel/template": "7.2.2",
+ "@babel/types": "7.3.2",
+ "lodash": "4.17.11"
},
"dependencies": {
"@babel/parser": {
@@ -651,9 +651,9 @@
"integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.2.2",
- "@babel/types": "^7.2.2"
+ "@babel/code-frame": "7.0.0",
+ "@babel/parser": "7.3.2",
+ "@babel/types": "7.3.2"
}
},
"@babel/types": {
@@ -662,9 +662,9 @@
"integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
}
},
"lodash": {
@@ -687,7 +687,7 @@
"integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==",
"dev": true,
"requires": {
- "@babel/types": "^7.0.0"
+ "@babel/types": "7.0.0"
}
},
"@babel/helper-plugin-utils": {
@@ -702,7 +702,7 @@
"integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==",
"dev": true,
"requires": {
- "lodash": "^4.17.10"
+ "lodash": "4.17.11"
},
"dependencies": {
"lodash": {
@@ -719,11 +719,11 @@
"integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==",
"dev": true,
"requires": {
- "@babel/helper-annotate-as-pure": "^7.0.0",
- "@babel/helper-wrap-function": "^7.1.0",
- "@babel/template": "^7.1.0",
- "@babel/traverse": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "@babel/helper-annotate-as-pure": "7.0.0",
+ "@babel/helper-wrap-function": "7.2.0",
+ "@babel/template": "7.2.2",
+ "@babel/traverse": "7.2.3",
+ "@babel/types": "7.0.0"
},
"dependencies": {
"@babel/generator": {
@@ -732,11 +732,11 @@
"integrity": "sha512-f3QCuPppXxtZOEm5GWPra/uYUjmNQlu9pbAD8D/9jze4pTY83rTtB1igTBSwvkeNlC5gR24zFFkz+2WHLFQhqQ==",
"dev": true,
"requires": {
- "@babel/types": "^7.3.2",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.10",
- "source-map": "^0.5.0",
- "trim-right": "^1.0.1"
+ "@babel/types": "7.3.2",
+ "jsesc": "2.5.2",
+ "lodash": "4.17.11",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
},
"dependencies": {
"@babel/types": {
@@ -745,9 +745,9 @@
"integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
}
}
}
@@ -758,9 +758,9 @@
"integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
"dev": true,
"requires": {
- "@babel/helper-get-function-arity": "^7.0.0",
- "@babel/template": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "@babel/helper-get-function-arity": "7.0.0",
+ "@babel/template": "7.2.2",
+ "@babel/types": "7.0.0"
}
},
"@babel/parser": {
@@ -775,9 +775,9 @@
"integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.2.2",
- "@babel/types": "^7.2.2"
+ "@babel/code-frame": "7.0.0",
+ "@babel/parser": "7.3.2",
+ "@babel/types": "7.3.2"
},
"dependencies": {
"@babel/types": {
@@ -786,9 +786,9 @@
"integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
}
}
}
@@ -799,15 +799,15 @@
"integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/generator": "^7.2.2",
- "@babel/helper-function-name": "^7.1.0",
- "@babel/helper-split-export-declaration": "^7.0.0",
- "@babel/parser": "^7.2.3",
- "@babel/types": "^7.2.2",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.10"
+ "@babel/code-frame": "7.0.0",
+ "@babel/generator": "7.3.2",
+ "@babel/helper-function-name": "7.1.0",
+ "@babel/helper-split-export-declaration": "7.0.0",
+ "@babel/parser": "7.3.2",
+ "@babel/types": "7.3.2",
+ "debug": "4.1.1",
+ "globals": "11.10.0",
+ "lodash": "4.17.11"
},
"dependencies": {
"@babel/types": {
@@ -816,9 +816,9 @@
"integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
}
}
}
@@ -829,7 +829,7 @@
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
- "ms": "^2.1.1"
+ "ms": "2.1.1"
}
},
"globals": {
@@ -870,10 +870,10 @@
"integrity": "sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA==",
"dev": true,
"requires": {
- "@babel/helper-member-expression-to-functions": "^7.0.0",
- "@babel/helper-optimise-call-expression": "^7.0.0",
- "@babel/traverse": "^7.2.3",
- "@babel/types": "^7.0.0"
+ "@babel/helper-member-expression-to-functions": "7.0.0",
+ "@babel/helper-optimise-call-expression": "7.0.0",
+ "@babel/traverse": "7.2.3",
+ "@babel/types": "7.0.0"
},
"dependencies": {
"@babel/generator": {
@@ -882,11 +882,11 @@
"integrity": "sha512-f3QCuPppXxtZOEm5GWPra/uYUjmNQlu9pbAD8D/9jze4pTY83rTtB1igTBSwvkeNlC5gR24zFFkz+2WHLFQhqQ==",
"dev": true,
"requires": {
- "@babel/types": "^7.3.2",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.10",
- "source-map": "^0.5.0",
- "trim-right": "^1.0.1"
+ "@babel/types": "7.3.2",
+ "jsesc": "2.5.2",
+ "lodash": "4.17.11",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
},
"dependencies": {
"@babel/types": {
@@ -895,9 +895,9 @@
"integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
}
}
}
@@ -908,9 +908,9 @@
"integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
"dev": true,
"requires": {
- "@babel/helper-get-function-arity": "^7.0.0",
- "@babel/template": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "@babel/helper-get-function-arity": "7.0.0",
+ "@babel/template": "7.2.2",
+ "@babel/types": "7.0.0"
}
},
"@babel/parser": {
@@ -925,9 +925,9 @@
"integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.2.2",
- "@babel/types": "^7.2.2"
+ "@babel/code-frame": "7.0.0",
+ "@babel/parser": "7.3.2",
+ "@babel/types": "7.3.2"
},
"dependencies": {
"@babel/types": {
@@ -936,9 +936,9 @@
"integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
}
}
}
@@ -949,15 +949,15 @@
"integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/generator": "^7.2.2",
- "@babel/helper-function-name": "^7.1.0",
- "@babel/helper-split-export-declaration": "^7.0.0",
- "@babel/parser": "^7.2.3",
- "@babel/types": "^7.2.2",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.10"
+ "@babel/code-frame": "7.0.0",
+ "@babel/generator": "7.3.2",
+ "@babel/helper-function-name": "7.1.0",
+ "@babel/helper-split-export-declaration": "7.0.0",
+ "@babel/parser": "7.3.2",
+ "@babel/types": "7.3.2",
+ "debug": "4.1.1",
+ "globals": "11.10.0",
+ "lodash": "4.17.11"
},
"dependencies": {
"@babel/types": {
@@ -966,9 +966,9 @@
"integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
}
}
}
@@ -979,7 +979,7 @@
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
- "ms": "^2.1.1"
+ "ms": "2.1.1"
}
},
"globals": {
@@ -1020,8 +1020,8 @@
"integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==",
"dev": true,
"requires": {
- "@babel/template": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "@babel/template": "7.2.2",
+ "@babel/types": "7.0.0"
},
"dependencies": {
"@babel/parser": {
@@ -1036,9 +1036,9 @@
"integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.2.2",
- "@babel/types": "^7.2.2"
+ "@babel/code-frame": "7.0.0",
+ "@babel/parser": "7.3.2",
+ "@babel/types": "7.3.2"
},
"dependencies": {
"@babel/types": {
@@ -1047,9 +1047,9 @@
"integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
}
}
}
@@ -1083,10 +1083,10 @@
"integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==",
"dev": true,
"requires": {
- "@babel/helper-function-name": "^7.1.0",
- "@babel/template": "^7.1.0",
- "@babel/traverse": "^7.1.0",
- "@babel/types": "^7.2.0"
+ "@babel/helper-function-name": "7.1.0",
+ "@babel/template": "7.2.2",
+ "@babel/traverse": "7.2.3",
+ "@babel/types": "7.3.2"
},
"dependencies": {
"@babel/generator": {
@@ -1095,11 +1095,11 @@
"integrity": "sha512-f3QCuPppXxtZOEm5GWPra/uYUjmNQlu9pbAD8D/9jze4pTY83rTtB1igTBSwvkeNlC5gR24zFFkz+2WHLFQhqQ==",
"dev": true,
"requires": {
- "@babel/types": "^7.3.2",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.10",
- "source-map": "^0.5.0",
- "trim-right": "^1.0.1"
+ "@babel/types": "7.3.2",
+ "jsesc": "2.5.2",
+ "lodash": "4.17.11",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
}
},
"@babel/helper-function-name": {
@@ -1108,9 +1108,9 @@
"integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
"dev": true,
"requires": {
- "@babel/helper-get-function-arity": "^7.0.0",
- "@babel/template": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "@babel/helper-get-function-arity": "7.0.0",
+ "@babel/template": "7.2.2",
+ "@babel/types": "7.3.2"
}
},
"@babel/parser": {
@@ -1125,9 +1125,9 @@
"integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.2.2",
- "@babel/types": "^7.2.2"
+ "@babel/code-frame": "7.0.0",
+ "@babel/parser": "7.3.2",
+ "@babel/types": "7.3.2"
}
},
"@babel/traverse": {
@@ -1136,15 +1136,15 @@
"integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/generator": "^7.2.2",
- "@babel/helper-function-name": "^7.1.0",
- "@babel/helper-split-export-declaration": "^7.0.0",
- "@babel/parser": "^7.2.3",
- "@babel/types": "^7.2.2",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.10"
+ "@babel/code-frame": "7.0.0",
+ "@babel/generator": "7.3.2",
+ "@babel/helper-function-name": "7.1.0",
+ "@babel/helper-split-export-declaration": "7.0.0",
+ "@babel/parser": "7.3.2",
+ "@babel/types": "7.3.2",
+ "debug": "4.1.1",
+ "globals": "11.10.0",
+ "lodash": "4.17.11"
}
},
"@babel/types": {
@@ -1153,9 +1153,9 @@
"integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
}
},
"debug": {
@@ -1164,7 +1164,7 @@
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
- "ms": "^2.1.1"
+ "ms": "2.1.1"
}
},
"globals": {
@@ -1200,23 +1200,23 @@
}
},
"@babel/helpers": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.2.0.tgz",
- "integrity": "sha512-Fr07N+ea0dMcMN8nFpuK6dUIT7/ivt9yKQdEEnjVS83tG2pHwPi03gYmk/tyuwONnZ+sY+GFFPlWGgCtW1hF9A==",
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.3.1.tgz",
+ "integrity": "sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==",
"dev": true,
"requires": {
"@babel/template": "7.2.2",
- "@babel/traverse": "7.2.2",
- "@babel/types": "7.2.2"
+ "@babel/traverse": "7.2.3",
+ "@babel/types": "7.3.3"
},
"dependencies": {
"@babel/generator": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.2.tgz",
- "integrity": "sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg==",
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.3.tgz",
+ "integrity": "sha512-aEADYwRRZjJyMnKN7llGIlircxTCofm3dtV5pmY6ob18MSIuipHpA2yZWkPlycwu5HJcx/pADS3zssd8eY7/6A==",
"dev": true,
"requires": {
- "@babel/types": "7.2.2",
+ "@babel/types": "7.3.3",
"jsesc": "2.5.2",
"lodash": "4.17.11",
"source-map": "0.5.7",
@@ -1229,15 +1229,15 @@
"integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
"dev": true,
"requires": {
- "@babel/helper-get-function-arity": "7.0.0",
- "@babel/template": "7.2.2",
- "@babel/types": "7.2.2"
+ "@babel/helper-get-function-arity": "^7.0.0",
+ "@babel/template": "^7.1.0",
+ "@babel/types": "^7.0.0"
}
},
"@babel/parser": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.2.tgz",
- "integrity": "sha512-UNTmQ5cSLDeBGBl+s7JeowkqIHgmFAGBnLDdIzFmUNSuS5JF0XBcN59jsh/vJO/YjfsBqMxhMjoFGmNExmf0FA==",
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.3.tgz",
+ "integrity": "sha512-xsH1CJoln2r74hR+y7cg2B5JCPaTh+Hd+EbBRk9nWGSNspuo6krjhX0Om6RnRQuIvFq8wVXCLKH3kwKDYhanSg==",
"dev": true
},
"@babel/template": {
@@ -1246,32 +1246,32 @@
"integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
"dev": true,
"requires": {
- "@babel/code-frame": "7.0.0",
- "@babel/parser": "7.2.2",
- "@babel/types": "7.2.2"
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.2.2",
+ "@babel/types": "^7.2.2"
}
},
"@babel/traverse": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.2.tgz",
- "integrity": "sha512-E5Bn9FSwHpSkUhthw/XEuvFZxIgrqb9M8cX8j5EUQtrUG5DQUy6bFyl7G7iQ1D1Czudor+xkmp81JbLVVM0Sjg==",
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz",
+ "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==",
"dev": true,
"requires": {
"@babel/code-frame": "7.0.0",
- "@babel/generator": "7.2.2",
+ "@babel/generator": "7.3.3",
"@babel/helper-function-name": "7.1.0",
"@babel/helper-split-export-declaration": "7.0.0",
- "@babel/parser": "7.2.2",
- "@babel/types": "7.2.2",
- "debug": "4.1.0",
- "globals": "11.9.0",
+ "@babel/parser": "7.3.3",
+ "@babel/types": "7.3.3",
+ "debug": "4.1.1",
+ "globals": "11.11.0",
"lodash": "4.17.11"
}
},
"@babel/types": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.2.2.tgz",
- "integrity": "sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg==",
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.3.tgz",
+ "integrity": "sha512-2tACZ80Wg09UnPg5uGAOUvvInaqLk3l/IAhQzlxLQOIXacr6bMsra5SH6AWw/hIDRCSbCdHP2KzSOD+cT7TzMQ==",
"dev": true,
"requires": {
"esutils": "2.0.2",
@@ -1280,18 +1280,18 @@
}
},
"debug": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
- "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
"ms": "2.1.1"
}
},
"globals": {
- "version": "11.9.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz",
- "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==",
+ "version": "11.11.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz",
+ "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==",
"dev": true
},
"jsesc": {
@@ -1380,9 +1380,9 @@
"integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-remap-async-to-generator": "^7.1.0",
- "@babel/plugin-syntax-async-generators": "^7.2.0"
+ "@babel/helper-plugin-utils": "7.0.0",
+ "@babel/helper-remap-async-to-generator": "7.1.0",
+ "@babel/plugin-syntax-async-generators": "7.2.0"
}
},
"@babel/plugin-proposal-json-strings": {
@@ -1391,8 +1391,8 @@
"integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-json-strings": "^7.2.0"
+ "@babel/helper-plugin-utils": "7.0.0",
+ "@babel/plugin-syntax-json-strings": "7.2.0"
}
},
"@babel/plugin-proposal-object-rest-spread": {
@@ -1401,8 +1401,8 @@
"integrity": "sha512-DjeMS+J2+lpANkYLLO+m6GjoTMygYglKmRe6cDTbFv3L9i6mmiE8fe6B8MtCSLZpVXscD5kn7s6SgtHrDoBWoA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-object-rest-spread": "^7.2.0"
+ "@babel/helper-plugin-utils": "7.0.0",
+ "@babel/plugin-syntax-object-rest-spread": "7.2.0"
}
},
"@babel/plugin-proposal-optional-catch-binding": {
@@ -1411,8 +1411,8 @@
"integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-optional-catch-binding": "^7.2.0"
+ "@babel/helper-plugin-utils": "7.0.0",
+ "@babel/plugin-syntax-optional-catch-binding": "7.2.0"
}
},
"@babel/plugin-proposal-unicode-property-regex": {
@@ -1421,9 +1421,9 @@
"integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-regex": "^7.0.0",
- "regexpu-core": "^4.2.0"
+ "@babel/helper-plugin-utils": "7.0.0",
+ "@babel/helper-regex": "7.0.0",
+ "regexpu-core": "4.4.0"
},
"dependencies": {
"jsesc": {
@@ -1438,12 +1438,12 @@
"integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==",
"dev": true,
"requires": {
- "regenerate": "^1.4.0",
- "regenerate-unicode-properties": "^7.0.0",
- "regjsgen": "^0.5.0",
- "regjsparser": "^0.6.0",
- "unicode-match-property-ecmascript": "^1.0.4",
- "unicode-match-property-value-ecmascript": "^1.0.2"
+ "regenerate": "1.4.0",
+ "regenerate-unicode-properties": "7.0.0",
+ "regjsgen": "0.5.0",
+ "regjsparser": "0.6.0",
+ "unicode-match-property-ecmascript": "1.0.4",
+ "unicode-match-property-value-ecmascript": "1.0.2"
}
},
"regjsgen": {
@@ -1458,7 +1458,7 @@
"integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
"dev": true,
"requires": {
- "jsesc": "~0.5.0"
+ "jsesc": "0.5.0"
}
}
}
@@ -1469,7 +1469,7 @@
"integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-syntax-json-strings": {
@@ -1478,7 +1478,7 @@
"integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-syntax-object-rest-spread": {
@@ -1487,7 +1487,7 @@
"integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-syntax-optional-catch-binding": {
@@ -1496,7 +1496,7 @@
"integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-transform-arrow-functions": {
@@ -1505,7 +1505,7 @@
"integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-transform-async-to-generator": {
@@ -1514,9 +1514,9 @@
"integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==",
"dev": true,
"requires": {
- "@babel/helper-module-imports": "^7.0.0",
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-remap-async-to-generator": "^7.1.0"
+ "@babel/helper-module-imports": "7.0.0",
+ "@babel/helper-plugin-utils": "7.0.0",
+ "@babel/helper-remap-async-to-generator": "7.1.0"
}
},
"@babel/plugin-transform-block-scoped-functions": {
@@ -1525,7 +1525,7 @@
"integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-transform-block-scoping": {
@@ -1534,8 +1534,8 @@
"integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "lodash": "^4.17.10"
+ "@babel/helper-plugin-utils": "7.0.0",
+ "lodash": "4.17.11"
},
"dependencies": {
"lodash": {
@@ -1552,14 +1552,14 @@
"integrity": "sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==",
"dev": true,
"requires": {
- "@babel/helper-annotate-as-pure": "^7.0.0",
- "@babel/helper-define-map": "^7.1.0",
- "@babel/helper-function-name": "^7.1.0",
- "@babel/helper-optimise-call-expression": "^7.0.0",
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-replace-supers": "^7.1.0",
- "@babel/helper-split-export-declaration": "^7.0.0",
- "globals": "^11.1.0"
+ "@babel/helper-annotate-as-pure": "7.0.0",
+ "@babel/helper-define-map": "7.1.0",
+ "@babel/helper-function-name": "7.1.0",
+ "@babel/helper-optimise-call-expression": "7.0.0",
+ "@babel/helper-plugin-utils": "7.0.0",
+ "@babel/helper-replace-supers": "7.2.3",
+ "@babel/helper-split-export-declaration": "7.0.0",
+ "globals": "11.10.0"
},
"dependencies": {
"@babel/helper-function-name": {
@@ -1568,9 +1568,9 @@
"integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
"dev": true,
"requires": {
- "@babel/helper-get-function-arity": "^7.0.0",
- "@babel/template": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "@babel/helper-get-function-arity": "7.0.0",
+ "@babel/template": "7.2.2",
+ "@babel/types": "7.0.0"
}
},
"@babel/parser": {
@@ -1585,9 +1585,9 @@
"integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.2.2",
- "@babel/types": "^7.2.2"
+ "@babel/code-frame": "7.0.0",
+ "@babel/parser": "7.3.2",
+ "@babel/types": "7.3.2"
},
"dependencies": {
"@babel/types": {
@@ -1596,9 +1596,9 @@
"integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
}
}
}
@@ -1629,7 +1629,7 @@
"integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-transform-destructuring": {
@@ -1638,7 +1638,7 @@
"integrity": "sha512-Lrj/u53Ufqxl/sGxyjsJ2XNtNuEjDyjpqdhMNh5aZ+XFOdThL46KBj27Uem4ggoezSYBxKWAil6Hu8HtwqesYw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-transform-dotall-regex": {
@@ -1647,9 +1647,9 @@
"integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-regex": "^7.0.0",
- "regexpu-core": "^4.1.3"
+ "@babel/helper-plugin-utils": "7.0.0",
+ "@babel/helper-regex": "7.0.0",
+ "regexpu-core": "4.4.0"
},
"dependencies": {
"jsesc": {
@@ -1664,12 +1664,12 @@
"integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==",
"dev": true,
"requires": {
- "regenerate": "^1.4.0",
- "regenerate-unicode-properties": "^7.0.0",
- "regjsgen": "^0.5.0",
- "regjsparser": "^0.6.0",
- "unicode-match-property-ecmascript": "^1.0.4",
- "unicode-match-property-value-ecmascript": "^1.0.2"
+ "regenerate": "1.4.0",
+ "regenerate-unicode-properties": "7.0.0",
+ "regjsgen": "0.5.0",
+ "regjsparser": "0.6.0",
+ "unicode-match-property-ecmascript": "1.0.4",
+ "unicode-match-property-value-ecmascript": "1.0.2"
}
},
"regjsgen": {
@@ -1684,7 +1684,7 @@
"integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
"dev": true,
"requires": {
- "jsesc": "~0.5.0"
+ "jsesc": "0.5.0"
}
}
}
@@ -1695,7 +1695,7 @@
"integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-transform-exponentiation-operator": {
@@ -1704,8 +1704,8 @@
"integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==",
"dev": true,
"requires": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0",
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-builder-binary-assignment-operator-visitor": "7.1.0",
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-transform-for-of": {
@@ -1714,7 +1714,7 @@
"integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-transform-function-name": {
@@ -1723,8 +1723,8 @@
"integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==",
"dev": true,
"requires": {
- "@babel/helper-function-name": "^7.1.0",
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-function-name": "7.1.0",
+ "@babel/helper-plugin-utils": "7.0.0"
},
"dependencies": {
"@babel/helper-function-name": {
@@ -1733,9 +1733,9 @@
"integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
"dev": true,
"requires": {
- "@babel/helper-get-function-arity": "^7.0.0",
- "@babel/template": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "@babel/helper-get-function-arity": "7.0.0",
+ "@babel/template": "7.2.2",
+ "@babel/types": "7.0.0"
}
},
"@babel/parser": {
@@ -1750,9 +1750,9 @@
"integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.2.2",
- "@babel/types": "^7.2.2"
+ "@babel/code-frame": "7.0.0",
+ "@babel/parser": "7.3.2",
+ "@babel/types": "7.3.2"
},
"dependencies": {
"@babel/types": {
@@ -1761,9 +1761,9 @@
"integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
}
}
}
@@ -1788,7 +1788,7 @@
"integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-transform-modules-amd": {
@@ -1797,8 +1797,8 @@
"integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.1.0",
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-module-transforms": "7.2.2",
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-transform-modules-commonjs": {
@@ -1807,9 +1807,9 @@
"integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.1.0",
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-simple-access": "^7.1.0"
+ "@babel/helper-module-transforms": "7.2.2",
+ "@babel/helper-plugin-utils": "7.0.0",
+ "@babel/helper-simple-access": "7.1.0"
}
},
"@babel/plugin-transform-modules-systemjs": {
@@ -1818,8 +1818,8 @@
"integrity": "sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ==",
"dev": true,
"requires": {
- "@babel/helper-hoist-variables": "^7.0.0",
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-hoist-variables": "7.0.0",
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-transform-modules-umd": {
@@ -1828,8 +1828,8 @@
"integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.1.0",
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-module-transforms": "7.2.2",
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-transform-named-capturing-groups-regex": {
@@ -1838,7 +1838,7 @@
"integrity": "sha512-NxIoNVhk9ZxS+9lSoAQ/LM0V2UEvARLttEHUrRDGKFaAxOYQcrkN/nLRE+BbbicCAvZPl7wMP0X60HsHE5DtQw==",
"dev": true,
"requires": {
- "regexp-tree": "^0.1.0"
+ "regexp-tree": "0.1.1"
}
},
"@babel/plugin-transform-new-target": {
@@ -1847,7 +1847,7 @@
"integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-transform-object-super": {
@@ -1856,8 +1856,8 @@
"integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-replace-supers": "^7.1.0"
+ "@babel/helper-plugin-utils": "7.0.0",
+ "@babel/helper-replace-supers": "7.2.3"
}
},
"@babel/plugin-transform-parameters": {
@@ -1866,9 +1866,9 @@
"integrity": "sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==",
"dev": true,
"requires": {
- "@babel/helper-call-delegate": "^7.1.0",
- "@babel/helper-get-function-arity": "^7.0.0",
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-call-delegate": "7.1.0",
+ "@babel/helper-get-function-arity": "7.0.0",
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-transform-regenerator": {
@@ -1877,7 +1877,7 @@
"integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==",
"dev": true,
"requires": {
- "regenerator-transform": "^0.13.3"
+ "regenerator-transform": "0.13.3"
},
"dependencies": {
"regenerator-transform": {
@@ -1886,7 +1886,7 @@
"integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==",
"dev": true,
"requires": {
- "private": "^0.1.6"
+ "private": "0.1.8"
}
}
}
@@ -1897,7 +1897,7 @@
"integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-transform-spread": {
@@ -1906,7 +1906,7 @@
"integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-transform-sticky-regex": {
@@ -1915,8 +1915,8 @@
"integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-regex": "^7.0.0"
+ "@babel/helper-plugin-utils": "7.0.0",
+ "@babel/helper-regex": "7.0.0"
}
},
"@babel/plugin-transform-template-literals": {
@@ -1925,8 +1925,8 @@
"integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==",
"dev": true,
"requires": {
- "@babel/helper-annotate-as-pure": "^7.0.0",
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-annotate-as-pure": "7.0.0",
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-transform-typeof-symbol": {
@@ -1935,7 +1935,7 @@
"integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "7.0.0"
}
},
"@babel/plugin-transform-unicode-regex": {
@@ -1944,9 +1944,9 @@
"integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-regex": "^7.0.0",
- "regexpu-core": "^4.1.3"
+ "@babel/helper-plugin-utils": "7.0.0",
+ "@babel/helper-regex": "7.0.0",
+ "regexpu-core": "4.4.0"
},
"dependencies": {
"jsesc": {
@@ -1961,12 +1961,12 @@
"integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==",
"dev": true,
"requires": {
- "regenerate": "^1.4.0",
- "regenerate-unicode-properties": "^7.0.0",
- "regjsgen": "^0.5.0",
- "regjsparser": "^0.6.0",
- "unicode-match-property-ecmascript": "^1.0.4",
- "unicode-match-property-value-ecmascript": "^1.0.2"
+ "regenerate": "1.4.0",
+ "regenerate-unicode-properties": "7.0.0",
+ "regjsgen": "0.5.0",
+ "regjsparser": "0.6.0",
+ "unicode-match-property-ecmascript": "1.0.4",
+ "unicode-match-property-value-ecmascript": "1.0.2"
}
},
"regjsgen": {
@@ -1981,7 +1981,7 @@
"integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
"dev": true,
"requires": {
- "jsesc": "~0.5.0"
+ "jsesc": "0.5.0"
}
}
}
@@ -1992,49 +1992,49 @@
"integrity": "sha512-FHKrD6Dxf30e8xgHQO0zJZpUPfVZg+Xwgz5/RdSWCbza9QLNk4Qbp40ctRoqDxml3O8RMzB1DU55SXeDG6PqHQ==",
"dev": true,
"requires": {
- "@babel/helper-module-imports": "^7.0.0",
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
- "@babel/plugin-proposal-json-strings": "^7.2.0",
- "@babel/plugin-proposal-object-rest-spread": "^7.3.1",
- "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
- "@babel/plugin-proposal-unicode-property-regex": "^7.2.0",
- "@babel/plugin-syntax-async-generators": "^7.2.0",
- "@babel/plugin-syntax-json-strings": "^7.2.0",
- "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
- "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
- "@babel/plugin-transform-arrow-functions": "^7.2.0",
- "@babel/plugin-transform-async-to-generator": "^7.2.0",
- "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
- "@babel/plugin-transform-block-scoping": "^7.2.0",
- "@babel/plugin-transform-classes": "^7.2.0",
- "@babel/plugin-transform-computed-properties": "^7.2.0",
- "@babel/plugin-transform-destructuring": "^7.2.0",
- "@babel/plugin-transform-dotall-regex": "^7.2.0",
- "@babel/plugin-transform-duplicate-keys": "^7.2.0",
- "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
- "@babel/plugin-transform-for-of": "^7.2.0",
- "@babel/plugin-transform-function-name": "^7.2.0",
- "@babel/plugin-transform-literals": "^7.2.0",
- "@babel/plugin-transform-modules-amd": "^7.2.0",
- "@babel/plugin-transform-modules-commonjs": "^7.2.0",
- "@babel/plugin-transform-modules-systemjs": "^7.2.0",
- "@babel/plugin-transform-modules-umd": "^7.2.0",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0",
- "@babel/plugin-transform-new-target": "^7.0.0",
- "@babel/plugin-transform-object-super": "^7.2.0",
- "@babel/plugin-transform-parameters": "^7.2.0",
- "@babel/plugin-transform-regenerator": "^7.0.0",
- "@babel/plugin-transform-shorthand-properties": "^7.2.0",
- "@babel/plugin-transform-spread": "^7.2.0",
- "@babel/plugin-transform-sticky-regex": "^7.2.0",
- "@babel/plugin-transform-template-literals": "^7.2.0",
- "@babel/plugin-transform-typeof-symbol": "^7.2.0",
- "@babel/plugin-transform-unicode-regex": "^7.2.0",
- "browserslist": "^4.3.4",
- "invariant": "^2.2.2",
- "js-levenshtein": "^1.1.3",
- "semver": "^5.3.0"
+ "@babel/helper-module-imports": "7.0.0",
+ "@babel/helper-plugin-utils": "7.0.0",
+ "@babel/plugin-proposal-async-generator-functions": "7.2.0",
+ "@babel/plugin-proposal-json-strings": "7.2.0",
+ "@babel/plugin-proposal-object-rest-spread": "7.3.2",
+ "@babel/plugin-proposal-optional-catch-binding": "7.2.0",
+ "@babel/plugin-proposal-unicode-property-regex": "7.2.0",
+ "@babel/plugin-syntax-async-generators": "7.2.0",
+ "@babel/plugin-syntax-json-strings": "7.2.0",
+ "@babel/plugin-syntax-object-rest-spread": "7.2.0",
+ "@babel/plugin-syntax-optional-catch-binding": "7.2.0",
+ "@babel/plugin-transform-arrow-functions": "7.2.0",
+ "@babel/plugin-transform-async-to-generator": "7.2.0",
+ "@babel/plugin-transform-block-scoped-functions": "7.2.0",
+ "@babel/plugin-transform-block-scoping": "7.2.0",
+ "@babel/plugin-transform-classes": "7.2.2",
+ "@babel/plugin-transform-computed-properties": "7.2.0",
+ "@babel/plugin-transform-destructuring": "7.3.2",
+ "@babel/plugin-transform-dotall-regex": "7.2.0",
+ "@babel/plugin-transform-duplicate-keys": "7.2.0",
+ "@babel/plugin-transform-exponentiation-operator": "7.2.0",
+ "@babel/plugin-transform-for-of": "7.2.0",
+ "@babel/plugin-transform-function-name": "7.2.0",
+ "@babel/plugin-transform-literals": "7.2.0",
+ "@babel/plugin-transform-modules-amd": "7.2.0",
+ "@babel/plugin-transform-modules-commonjs": "7.2.0",
+ "@babel/plugin-transform-modules-systemjs": "7.2.0",
+ "@babel/plugin-transform-modules-umd": "7.2.0",
+ "@babel/plugin-transform-named-capturing-groups-regex": "7.3.0",
+ "@babel/plugin-transform-new-target": "7.0.0",
+ "@babel/plugin-transform-object-super": "7.2.0",
+ "@babel/plugin-transform-parameters": "7.2.0",
+ "@babel/plugin-transform-regenerator": "7.0.0",
+ "@babel/plugin-transform-shorthand-properties": "7.2.0",
+ "@babel/plugin-transform-spread": "7.2.2",
+ "@babel/plugin-transform-sticky-regex": "7.2.0",
+ "@babel/plugin-transform-template-literals": "7.2.0",
+ "@babel/plugin-transform-typeof-symbol": "7.2.0",
+ "@babel/plugin-transform-unicode-regex": "7.2.0",
+ "browserslist": "4.4.1",
+ "invariant": "2.2.2",
+ "js-levenshtein": "1.1.6",
+ "semver": "5.5.0"
},
"dependencies": {
"browserslist": {
@@ -2043,9 +2043,9 @@
"integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==",
"dev": true,
"requires": {
- "caniuse-lite": "^1.0.30000929",
- "electron-to-chromium": "^1.3.103",
- "node-releases": "^1.1.3"
+ "caniuse-lite": "1.0.30000934",
+ "electron-to-chromium": "1.3.113",
+ "node-releases": "1.1.7"
}
},
"caniuse-lite": {
@@ -2171,8 +2171,7 @@
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz",
"integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=",
- "dev": true,
- "optional": true
+ "dev": true
},
"acorn-dynamic-import": {
"version": "3.0.0",
@@ -2202,20 +2201,18 @@
}
},
"acorn-jsx": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz",
- "integrity": "sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz",
+ "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==",
+ "dev": true
+ },
+ "agent-base": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
+ "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==",
"dev": true,
"requires": {
- "acorn": "5.7.1"
- },
- "dependencies": {
- "acorn": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
- "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
- "dev": true
- }
+ "es6-promisify": "5.0.0"
}
},
"ajv": {
@@ -2245,7 +2242,6 @@
"resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
"integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
"dev": true,
- "optional": true,
"requires": {
"kind-of": "3.2.2",
"longest": "1.0.1",
@@ -2449,12 +2445,6 @@
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
"dev": true
},
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "dev": true
- },
"asn1": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
@@ -2493,6 +2483,12 @@
"integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
"dev": true
},
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+ "dev": true
+ },
"async": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
@@ -3627,19 +3623,10 @@
"unset-value": "1.0.0"
}
},
- "caller-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
- "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
- "dev": true,
- "requires": {
- "callsites": "0.2.0"
- }
- },
"callsites": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
- "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz",
+ "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==",
"dev": true
},
"camelcase": {
@@ -3695,9 +3682,9 @@
}
},
"chardet": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
- "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
"dev": true
},
"cheerio": {
@@ -3763,12 +3750,6 @@
"safe-buffer": "5.1.1"
}
},
- "circular-json": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
- "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
- "dev": true
- },
"class-utils": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
@@ -3873,9 +3854,9 @@
"integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==",
"dev": true,
"requires": {
- "colors": "^1.1.2",
- "object-assign": "^4.1.0",
- "string-width": "^2.1.1"
+ "colors": "1.1.2",
+ "object-assign": "4.1.1",
+ "string-width": "2.1.1"
}
},
"cli-width": {
@@ -3918,199 +3899,33 @@
"dev": true
},
"codecov": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.1.0.tgz",
- "integrity": "sha512-aWQc/rtHbcWEQLka6WmBAOpV58J2TwyXqlpAQGhQaSiEUoigTTUk6lLd2vB3kXkhnDyzyH74RXfmV4dq2txmdA==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.2.0.tgz",
+ "integrity": "sha512-3NJvNARXxilqnqVfgzDHyVrF4oeVgaYW1c1O6Oi5mn93exE7HTSSFNiYdwojWW6IwrCZABJ8crpNbKoo9aUHQw==",
"dev": true,
"requires": {
"argv": "0.0.2",
"ignore-walk": "3.0.1",
- "js-yaml": "3.12.0",
- "request": "2.88.0",
+ "js-yaml": "3.12.1",
+ "teeny-request": "3.11.3",
"urlgrey": "0.4.4"
},
"dependencies": {
- "ajv": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
- "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
- "dev": true,
- "requires": {
- "co": "4.6.0",
- "fast-deep-equal": "1.1.0",
- "fast-json-stable-stringify": "2.0.0",
- "json-schema-traverse": "0.3.1"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "dev": true
- },
- "aws4": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
- "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
- "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
- "dev": true,
- "requires": {
- "delayed-stream": "1.0.0"
- }
- },
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true
},
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
- "form-data": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
- "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
- "dev": true,
- "requires": {
- "asynckit": "0.4.0",
- "combined-stream": "1.0.6",
- "mime-types": "2.1.20"
- }
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
- "dev": true
- },
- "har-validator": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz",
- "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
- "dev": true,
- "requires": {
- "ajv": "5.5.2",
- "har-schema": "2.0.0"
- }
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "dev": true,
- "requires": {
- "assert-plus": "1.0.0",
- "jsprim": "1.4.1",
- "sshpk": "1.13.1"
- }
- },
"js-yaml": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
- "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+ "version": "3.12.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz",
+ "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==",
"dev": true,
"requires": {
"argparse": "1.0.9",
"esprima": "4.0.1"
}
- },
- "mime-db": {
- "version": "1.36.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz",
- "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.20",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz",
- "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==",
- "dev": true,
- "requires": {
- "mime-db": "1.36.0"
- }
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "dev": true
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
- "dev": true
- },
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "dev": true
- },
- "request": {
- "version": "2.88.0",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
- "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
- "dev": true,
- "requires": {
- "aws-sign2": "0.7.0",
- "aws4": "1.8.0",
- "caseless": "0.12.0",
- "combined-stream": "1.0.6",
- "extend": "3.0.2",
- "forever-agent": "0.6.1",
- "form-data": "2.3.2",
- "har-validator": "5.1.0",
- "http-signature": "1.2.0",
- "is-typedarray": "1.0.0",
- "isstream": "0.1.2",
- "json-stringify-safe": "5.0.1",
- "mime-types": "2.1.20",
- "oauth-sign": "0.9.0",
- "performance-now": "2.1.0",
- "qs": "6.5.2",
- "safe-buffer": "5.1.2",
- "tough-cookie": "2.4.3",
- "tunnel-agent": "0.6.0",
- "uuid": "3.3.2"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "tough-cookie": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
- "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
- "dev": true,
- "requires": {
- "psl": "1.1.29",
- "punycode": "1.4.1"
- }
- },
- "uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
- "dev": true
}
}
},
@@ -4479,8 +4294,7 @@
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz",
"integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=",
- "dev": true,
- "optional": true
+ "dev": true
},
"cssstyle": {
"version": "0.2.37",
@@ -4633,29 +4447,6 @@
"isobject": "3.0.1"
}
},
- "del": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
- "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
- "dev": true,
- "requires": {
- "globby": "5.0.0",
- "is-path-cwd": "1.0.0",
- "is-path-in-cwd": "1.0.0",
- "object-assign": "4.1.1",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1",
- "rimraf": "2.6.2"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- }
- }
- },
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -4748,9 +4539,9 @@
}
},
"doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
"requires": {
"esutils": "2.0.2"
@@ -4854,6 +4645,12 @@
"minimalistic-crypto-utils": "1.0.1"
}
},
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
"emojis-list": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
@@ -4940,6 +4737,15 @@
"integrity": "sha1-3EIhwrFlGHYL2MOaUtjzVvwA7Sk=",
"dev": true
},
+ "es6-promisify": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
+ "dev": true,
+ "requires": {
+ "es6-promise": "4.2.4"
+ }
+ },
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -5212,55 +5018,53 @@
"dev": true
},
"eslint": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.0.1.tgz",
- "integrity": "sha512-D5nG2rErquLUstgUaxJlWB5+gu+U/3VDY0fk/Iuq8y9CUFy/7Y6oF4N2cR1tV8knzQvciIbfqfohd359xTLIKQ==",
+ "version": "5.14.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.14.0.tgz",
+ "integrity": "sha512-jrOhiYyENRrRnWlMYANlGZTqb89r2FuRT+615AabBoajhNjeh9ywDNlh2LU9vTqf0WYN+L3xdXuIi7xuj/tK9w==",
"dev": true,
"requires": {
- "ajv": "6.5.2",
- "babel-code-frame": "6.26.0",
- "chalk": "2.4.1",
+ "@babel/code-frame": "7.0.0",
+ "ajv": "6.9.1",
+ "chalk": "2.4.2",
"cross-spawn": "6.0.5",
- "debug": "3.1.0",
- "doctrine": "2.1.0",
+ "debug": "4.1.1",
+ "doctrine": "3.0.0",
"eslint-scope": "4.0.0",
+ "eslint-utils": "1.3.1",
"eslint-visitor-keys": "1.0.0",
- "espree": "4.0.0",
+ "espree": "5.0.1",
"esquery": "1.0.1",
"esutils": "2.0.2",
- "file-entry-cache": "2.0.0",
+ "file-entry-cache": "5.0.1",
"functional-red-black-tree": "1.0.1",
"glob": "7.1.2",
- "globals": "11.7.0",
- "ignore": "3.3.10",
+ "globals": "11.11.0",
+ "ignore": "4.0.6",
+ "import-fresh": "3.0.0",
"imurmurhash": "0.1.4",
- "inquirer": "5.2.0",
- "is-resolvable": "1.1.0",
- "js-yaml": "3.12.0",
+ "inquirer": "6.2.2",
+ "js-yaml": "3.12.1",
"json-stable-stringify-without-jsonify": "1.0.1",
"levn": "0.3.0",
- "lodash": "4.17.10",
+ "lodash": "4.17.11",
"minimatch": "3.0.4",
"mkdirp": "0.5.1",
"natural-compare": "1.4.0",
"optionator": "0.8.2",
"path-is-inside": "1.0.2",
- "pluralize": "7.0.0",
- "progress": "2.0.0",
- "regexpp": "1.1.0",
- "require-uncached": "1.0.3",
- "semver": "5.5.0",
- "string.prototype.matchall": "2.0.0",
+ "progress": "2.0.3",
+ "regexpp": "2.0.1",
+ "semver": "5.6.0",
"strip-ansi": "4.0.0",
"strip-json-comments": "2.0.1",
- "table": "4.0.3",
+ "table": "5.2.3",
"text-table": "0.2.0"
},
"dependencies": {
"ajv": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz",
- "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==",
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz",
+ "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==",
"dev": true,
"requires": {
"fast-deep-equal": "2.0.1",
@@ -5281,18 +5085,18 @@
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
- "color-convert": "1.9.1"
+ "color-convert": "^1.9.0"
}
},
"chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
"ansi-styles": "3.2.1",
"escape-string-regexp": "1.0.5",
- "supports-color": "5.4.0"
+ "supports-color": "5.5.0"
}
},
"cross-spawn": {
@@ -5301,20 +5105,20 @@
"integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true,
"requires": {
- "nice-try": "1.0.4",
- "path-key": "2.0.1",
- "semver": "5.5.0",
- "shebang-command": "1.2.0",
- "which": "1.3.0"
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
}
},
"debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "2.1.1"
}
},
"eslint-scope": {
@@ -5323,8 +5127,8 @@
"integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==",
"dev": true,
"requires": {
- "esrecurse": "4.2.1",
- "estraverse": "4.2.0"
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
}
},
"esprima": {
@@ -5340,15 +5144,15 @@
"dev": true
},
"globals": {
- "version": "11.7.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz",
- "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==",
+ "version": "11.11.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz",
+ "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==",
"dev": true
},
"js-yaml": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
- "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+ "version": "3.12.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz",
+ "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==",
"dev": true,
"requires": {
"argparse": "1.0.9",
@@ -5362,9 +5166,21 @@
"dev": true
},
"lodash": {
- "version": "4.17.10",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
- "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
"dev": true
},
"strip-ansi": {
@@ -5373,13 +5189,13 @@
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"dev": true,
"requires": {
- "ansi-regex": "3.0.0"
+ "ansi-regex": "^3.0.0"
}
},
"supports-color": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
- "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
"has-flag": "3.0.0"
@@ -5397,6 +5213,12 @@
"estraverse": "4.2.0"
}
},
+ "eslint-utils": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz",
+ "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==",
+ "dev": true
+ },
"eslint-visitor-keys": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
@@ -5404,19 +5226,20 @@
"dev": true
},
"espree": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-4.0.0.tgz",
- "integrity": "sha512-kapdTCt1bjmspxStVKX6huolXVV5ZfyZguY1lcfhVVZstce3bqxH9mcLzNn3/mlgW6wQ732+0fuG9v7h0ZQoKg==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
+ "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
"dev": true,
"requires": {
- "acorn": "5.7.1",
- "acorn-jsx": "4.1.1"
+ "acorn": "6.1.0",
+ "acorn-jsx": "5.0.1",
+ "eslint-visitor-keys": "1.0.0"
},
"dependencies": {
"acorn": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
- "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.0.tgz",
+ "integrity": "sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==",
"dev": true
}
}
@@ -5869,14 +5692,25 @@
}
},
"external-editor": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
- "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
+ "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==",
"dev": true,
"requires": {
- "chardet": "0.4.2",
- "iconv-lite": "0.4.19",
+ "chardet": "0.7.0",
+ "iconv-lite": "0.4.24",
"tmp": "0.0.33"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "2.1.2"
+ }
+ }
}
},
"extglob": {
@@ -5996,13 +5830,12 @@
}
},
"file-entry-cache": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
- "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
"dev": true,
"requires": {
- "flat-cache": "1.3.0",
- "object-assign": "4.1.1"
+ "flat-cache": "2.0.1"
}
},
"file-loader": {
@@ -6144,17 +5977,47 @@
"dev": true
},
"flat-cache": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
- "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
"dev": true,
"requires": {
- "circular-json": "0.3.3",
- "del": "2.2.2",
- "graceful-fs": "4.1.11",
- "write": "0.2.1"
+ "flatted": "2.0.0",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.3"
+ }
+ }
}
},
+ "flatted": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz",
+ "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==",
+ "dev": true
+ },
"flush-write-stream": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz",
@@ -6309,7 +6172,8 @@
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"aproba": {
"version": "1.2.0",
@@ -6724,7 +6588,8 @@
"safe-buffer": {
"version": "5.1.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"safer-buffer": {
"version": "2.1.2",
@@ -6780,6 +6645,7 @@
"version": "3.0.1",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"ansi-regex": "2.1.1"
}
@@ -6823,12 +6689,14 @@
"wrappy": {
"version": "1.0.2",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"yallist": {
"version": "3.0.2",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
}
}
},
@@ -6969,28 +6837,6 @@
"integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=",
"dev": true
},
- "globby": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
- "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
- "dev": true,
- "requires": {
- "array-union": "1.0.2",
- "arrify": "1.0.1",
- "glob": "7.1.2",
- "object-assign": "4.1.1",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- }
- }
- },
"globule": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz",
@@ -7493,12 +7339,6 @@
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
- "has-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
- "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
- "dev": true
- },
"has-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
@@ -7747,6 +7587,33 @@
"integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
"dev": true
},
+ "https-proxy-agent": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz",
+ "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==",
+ "dev": true,
+ "requires": {
+ "agent-base": "4.2.1",
+ "debug": "3.2.6"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
+ }
+ },
"ice-cap": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/ice-cap/-/ice-cap-0.0.4.tgz",
@@ -7846,9 +7713,9 @@
"dev": true
},
"ignore": {
- "version": "3.3.10",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
- "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true
},
"ignore-walk": {
@@ -7860,6 +7727,16 @@
"minimatch": "3.0.4"
}
},
+ "import-fresh": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz",
+ "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==",
+ "dev": true,
+ "requires": {
+ "parent-module": "1.0.0",
+ "resolve-from": "4.0.0"
+ }
+ },
"import-local": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz",
@@ -7914,30 +7791,36 @@
"dev": true
},
"inquirer": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz",
- "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==",
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz",
+ "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==",
"dev": true,
"requires": {
- "ansi-escapes": "3.1.0",
- "chalk": "2.4.1",
+ "ansi-escapes": "3.2.0",
+ "chalk": "2.4.2",
"cli-cursor": "2.1.0",
"cli-width": "2.2.0",
- "external-editor": "2.2.0",
+ "external-editor": "3.0.3",
"figures": "2.0.0",
- "lodash": "4.17.4",
+ "lodash": "4.17.11",
"mute-stream": "0.0.7",
"run-async": "2.3.0",
- "rxjs": "5.5.11",
+ "rxjs": "6.4.0",
"string-width": "2.1.1",
- "strip-ansi": "4.0.0",
+ "strip-ansi": "5.0.0",
"through": "2.3.8"
},
"dependencies": {
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "dev": true
+ },
"ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz",
+ "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==",
"dev": true
},
"ansi-styles": {
@@ -7946,33 +7829,39 @@
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
- "color-convert": "1.9.1"
+ "color-convert": "^1.9.0"
}
},
"chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
"ansi-styles": "3.2.1",
"escape-string-regexp": "1.0.5",
- "supports-color": "5.4.0"
+ "supports-color": "5.5.0"
}
},
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ },
"strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz",
+ "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==",
"dev": true,
"requires": {
- "ansi-regex": "3.0.0"
+ "ansi-regex": "4.0.0"
}
},
"supports-color": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
- "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
"has-flag": "3.0.0"
@@ -8289,12 +8178,6 @@
"is-unc-path": "1.0.0"
}
},
- "is-resolvable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
- "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
- "dev": true
- },
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
@@ -8893,8 +8776,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
"integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
- "dev": true,
- "optional": true
+ "dev": true
},
"loose-envify": {
"version": "1.3.1",
@@ -9327,6 +9209,12 @@
"integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==",
"dev": true
},
+ "node-fetch": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz",
+ "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==",
+ "dev": true
+ },
"node-forge": {
"version": "0.7.5",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz",
@@ -9423,7 +9311,7 @@
"integrity": "sha512-bKdrwaqJUPHqlCzDD7so/R+Nk0jGv9a11ZhLrD9f6i947qGLrGAhU3OxRENa19QQmwzGy/g6zCDEuLGDO8HPvA==",
"dev": true,
"requires": {
- "semver": "^5.3.0"
+ "semver": "5.5.0"
}
},
"nomnomnomnom": {
@@ -9880,6 +9768,15 @@
"readable-stream": "2.3.3"
}
},
+ "parent-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz",
+ "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==",
+ "dev": true,
+ "requires": {
+ "callsites": "3.0.0"
+ }
+ },
"parse-asn1": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz",
@@ -10112,12 +10009,6 @@
"find-up": "2.1.0"
}
},
- "pluralize": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
- "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
- "dev": true
- },
"portfinder": {
"version": "1.0.20",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz",
@@ -10193,9 +10084,9 @@
"dev": true
},
"progress": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
- "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
"dev": true
},
"promise-inflight": {
@@ -10226,12 +10117,6 @@
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
"dev": true
},
- "psl": {
- "version": "1.1.29",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
- "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
- "dev": true
- },
"public-encrypt": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz",
@@ -10485,7 +10370,7 @@
"integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==",
"dev": true,
"requires": {
- "regenerate": "^1.4.0"
+ "regenerate": "1.4.0"
}
},
"regenerator-runtime": {
@@ -10530,9 +10415,9 @@
"integrity": "sha512-HwRjOquc9QOwKTgbxvZTcddS5mlNlwePMQ3NFL8broajMLD5CXDAqas8Y5yxJH5QtZp5iRor3YCILd5pz71Cgw==",
"dev": true,
"requires": {
- "cli-table3": "^0.5.0",
- "colors": "^1.1.2",
- "yargs": "^12.0.5"
+ "cli-table3": "0.5.1",
+ "colors": "1.1.2",
+ "yargs": "12.0.5"
},
"dependencies": {
"ansi-regex": {
@@ -10553,9 +10438,9 @@
"integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
"dev": true,
"requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
+ "string-width": "2.1.1",
+ "strip-ansi": "4.0.0",
+ "wrap-ansi": "2.1.0"
}
},
"cross-spawn": {
@@ -10564,11 +10449,11 @@
"integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true,
"requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
+ "nice-try": "1.0.4",
+ "path-key": "2.0.1",
+ "semver": "5.5.0",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
}
},
"execa": {
@@ -10577,13 +10462,13 @@
"integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
"dev": true,
"requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
+ "cross-spawn": "6.0.5",
+ "get-stream": "4.1.0",
+ "is-stream": "1.1.0",
+ "npm-run-path": "2.0.2",
+ "p-finally": "1.0.0",
+ "signal-exit": "3.0.2",
+ "strip-eof": "1.0.0"
}
},
"find-up": {
@@ -10592,7 +10477,7 @@
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
"requires": {
- "locate-path": "^3.0.0"
+ "locate-path": "3.0.0"
}
},
"get-stream": {
@@ -10601,7 +10486,7 @@
"integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
"dev": true,
"requires": {
- "pump": "^3.0.0"
+ "pump": "3.0.0"
}
},
"invert-kv": {
@@ -10616,7 +10501,7 @@
"integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
"dev": true,
"requires": {
- "invert-kv": "^2.0.0"
+ "invert-kv": "2.0.0"
}
},
"locate-path": {
@@ -10625,8 +10510,8 @@
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dev": true,
"requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
+ "p-locate": "3.0.0",
+ "path-exists": "3.0.0"
}
},
"mem": {
@@ -10635,9 +10520,9 @@
"integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==",
"dev": true,
"requires": {
- "map-age-cleaner": "^0.1.1",
- "mimic-fn": "^1.0.0",
- "p-is-promise": "^2.0.0"
+ "map-age-cleaner": "0.1.3",
+ "mimic-fn": "1.2.0",
+ "p-is-promise": "2.0.0"
}
},
"os-locale": {
@@ -10646,9 +10531,9 @@
"integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
"dev": true,
"requires": {
- "execa": "^1.0.0",
- "lcid": "^2.0.0",
- "mem": "^4.0.0"
+ "execa": "1.0.0",
+ "lcid": "2.0.0",
+ "mem": "4.1.0"
}
},
"p-is-promise": {
@@ -10663,7 +10548,7 @@
"integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==",
"dev": true,
"requires": {
- "p-try": "^2.0.0"
+ "p-try": "2.0.0"
}
},
"p-locate": {
@@ -10672,7 +10557,7 @@
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dev": true,
"requires": {
- "p-limit": "^2.0.0"
+ "p-limit": "2.1.0"
}
},
"p-try": {
@@ -10687,7 +10572,7 @@
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"dev": true,
"requires": {
- "ansi-regex": "^3.0.0"
+ "ansi-regex": "3.0.0"
}
},
"yargs": {
@@ -10696,18 +10581,18 @@
"integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
"dev": true,
"requires": {
- "cliui": "^4.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^1.0.1",
- "os-locale": "^3.0.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
- "which-module": "^2.0.0",
- "y18n": "^3.2.1 || ^4.0.0",
- "yargs-parser": "^11.1.1"
+ "cliui": "4.1.0",
+ "decamelize": "1.2.0",
+ "find-up": "3.0.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "3.1.0",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "2.1.1",
+ "which-module": "2.0.0",
+ "y18n": "4.0.0",
+ "yargs-parser": "11.1.1"
}
},
"yargs-parser": {
@@ -10716,25 +10601,16 @@
"integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
"dev": true,
"requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
+ "camelcase": "5.0.0",
+ "decamelize": "1.2.0"
}
}
}
},
- "regexp.prototype.flags": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz",
- "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==",
- "dev": true,
- "requires": {
- "define-properties": "1.1.2"
- }
- },
"regexpp": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
- "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
"dev": true
},
"regexpu-core": {
@@ -10849,16 +10725,6 @@
"integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
"dev": true
},
- "require-uncached": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
- "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
- "dev": true,
- "requires": {
- "caller-path": "0.1.0",
- "resolve-from": "1.0.1"
- }
- },
"requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
@@ -10899,9 +10765,9 @@
}
},
"resolve-from": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
- "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true
},
"resolve-url": {
@@ -10974,12 +10840,12 @@
}
},
"rxjs": {
- "version": "5.5.11",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.11.tgz",
- "integrity": "sha512-3bjO7UwWfA2CV7lmwYMBzj4fQ6Cq+ftHc2MvUe+WMS7wcdJ1LosDWmdjPQanYp2dBRj572p7PeU81JUxHKOcBA==",
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz",
+ "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==",
"dev": true,
"requires": {
- "symbol-observable": "1.0.1"
+ "tslib": "1.9.3"
}
},
"safe-buffer": {
@@ -11219,12 +11085,25 @@
"dev": true
},
"slice-ansi": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
- "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
"dev": true,
"requires": {
+ "ansi-styles": "3.2.1",
+ "astral-regex": "1.0.0",
"is-fullwidth-code-point": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ }
}
},
"snapdragon": {
@@ -11822,19 +11701,6 @@
}
}
},
- "string.prototype.matchall": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-2.0.0.tgz",
- "integrity": "sha512-WoZ+B2ypng1dp4iFLF2kmZlwwlE19gmjgKuhL1FJfDgCREWb3ye3SDVHSzLH6bxfnvYmkCxbzkmWcQZHA4P//Q==",
- "dev": true,
- "requires": {
- "define-properties": "1.1.2",
- "es-abstract": "1.10.0",
- "function-bind": "1.1.1",
- "has-symbols": "1.0.0",
- "regexp.prototype.flags": "1.2.0"
- }
- },
"string_decoder": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
@@ -11955,12 +11821,6 @@
"integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
"dev": true
},
- "symbol-observable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz",
- "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=",
- "dev": true
- },
"symbol-tree": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
@@ -11969,23 +11829,21 @@
"optional": true
},
"table": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz",
- "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==",
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz",
+ "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==",
"dev": true,
"requires": {
- "ajv": "6.5.2",
- "ajv-keywords": "3.1.0",
- "chalk": "2.4.1",
- "lodash": "4.17.4",
- "slice-ansi": "1.0.0",
- "string-width": "2.1.1"
+ "ajv": "6.9.1",
+ "lodash": "4.17.11",
+ "slice-ansi": "2.1.0",
+ "string-width": "3.0.0"
},
"dependencies": {
"ajv": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz",
- "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==",
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz",
+ "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==",
"dev": true,
"requires": {
"fast-deep-equal": "2.0.1",
@@ -11994,25 +11852,11 @@
"uri-js": "4.2.2"
}
},
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "1.9.1"
- }
- },
- "chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "3.2.1",
- "escape-string-regexp": "1.0.5",
- "supports-color": "5.4.0"
- }
+ "ansi-regex": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz",
+ "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==",
+ "dev": true
},
"fast-deep-equal": {
"version": "2.0.1",
@@ -12026,13 +11870,30 @@
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
- "supports-color": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
- "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.0.0.tgz",
+ "integrity": "sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==",
"dev": true,
"requires": {
- "has-flag": "3.0.0"
+ "emoji-regex": "7.0.3",
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "5.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz",
+ "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "4.0.0"
}
}
}
@@ -12049,6 +11910,25 @@
"integrity": "sha1-y7Y52QAu7ZxrWXXrIFmNeTbx+fI=",
"dev": true
},
+ "teeny-request": {
+ "version": "3.11.3",
+ "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-3.11.3.tgz",
+ "integrity": "sha512-CKncqSF7sH6p4rzCgkb/z/Pcos5efl0DmolzvlqRQUNcpRIruOhY9+T1FsIlyEbfWd7MsFpodROOwHYh2BaXzw==",
+ "dev": true,
+ "requires": {
+ "https-proxy-agent": "2.2.1",
+ "node-fetch": "2.3.0",
+ "uuid": "3.3.2"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "dev": true
+ }
+ }
+ },
"temporary": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/temporary/-/temporary-0.0.8.tgz",
@@ -12354,9 +12234,9 @@
"integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==",
"dev": true,
"requires": {
- "commondir": "^1.0.1",
- "make-dir": "^1.0.0",
- "pkg-dir": "^3.0.0"
+ "commondir": "1.0.1",
+ "make-dir": "1.1.0",
+ "pkg-dir": "3.0.0"
}
},
"find-up": {
@@ -12365,7 +12245,7 @@
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
"requires": {
- "locate-path": "^3.0.0"
+ "locate-path": "3.0.0"
}
},
"json-schema-traverse": {
@@ -12380,8 +12260,8 @@
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dev": true,
"requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
+ "p-locate": "3.0.0",
+ "path-exists": "3.0.0"
}
},
"p-limit": {
@@ -12399,7 +12279,7 @@
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dev": true,
"requires": {
- "p-limit": "^2.0.0"
+ "p-limit": "2.1.0"
}
},
"p-try": {
@@ -12414,7 +12294,7 @@
"integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
"dev": true,
"requires": {
- "find-up": "^3.0.0"
+ "find-up": "3.0.0"
}
},
"schema-utils": {
@@ -12423,9 +12303,9 @@
"integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
"dev": true,
"requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
+ "ajv": "6.6.2",
+ "ajv-errors": "1.0.1",
+ "ajv-keywords": "3.1.0"
}
},
"source-map": {
@@ -12440,8 +12320,8 @@
"integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
"dev": true,
"requires": {
- "commander": "~2.17.1",
- "source-map": "~0.6.1"
+ "commander": "2.17.1",
+ "source-map": "0.6.1"
}
}
}
@@ -12482,8 +12362,8 @@
"integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
"dev": true,
"requires": {
- "unicode-canonical-property-names-ecmascript": "^1.0.4",
- "unicode-property-aliases-ecmascript": "^1.0.4"
+ "unicode-canonical-property-names-ecmascript": "1.0.4",
+ "unicode-property-aliases-ecmascript": "1.0.4"
}
},
"unicode-match-property-value-ecmascript": {
@@ -13826,9 +13706,9 @@
"dev": true
},
"write": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
- "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
"dev": true,
"requires": {
"mkdirp": "0.5.1"
diff --git a/package.json b/package.json
index 1a5aa0ca..a3b19e2d 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "tablefilter",
- "version": "0.6.77",
+ "version": "0.6.78",
"description": "A Javascript library making HTML tables filterable and a bit more",
"license": "MIT",
"author": {
@@ -40,17 +40,17 @@
"tag": "next"
},
"devDependencies": {
- "@babel/core": "7.2.2",
+ "@babel/core": "7.3.3",
"@babel/preset-env": "7.3.1",
"babel-eslint": "10.0.0",
"babel-loader": "^8.0.2",
"babel-preset-env": "1.7.0",
"clean-webpack-plugin": "^1.0.0",
- "codecov": "3.1.0",
+ "codecov": "3.2.0",
"diacritics": "1.3.0",
"esdoc": "1.1.0",
"esdoc-standard-plugin": "1.0.0",
- "eslint": "5.0.1",
+ "eslint": "5.14.0",
"format-number": "3.0.0",
"grunt": "^1.0.1",
"grunt-cli": "1.3.2",
diff --git a/src/const.js b/src/const.js
index 219f4f2d..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,75 +116,3 @@ export const IP_ADDRESS = 'ipaddress';
* @type {Number}
*/
export const AUTO_FILTER_DELAY = 750;
-
-/**
- * TableFilter features definitions
- * @type {Object}
- */
-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/extensions/advancedGrid/adapterEzEditTable.js b/src/extensions/advancedGrid/adapterEzEditTable.js
index 7760d84b..00520df5 100644
--- a/src/extensions/advancedGrid/adapterEzEditTable.js
+++ b/src/extensions/advancedGrid/adapterEzEditTable.js
@@ -21,7 +21,7 @@ export default class AdapterEzEditTable extends Feature {
* @param {Object} cfg Configuration options for ezEditTable library
*/
constructor(tf, cfg) {
- super(tf, cfg.name);
+ super(tf, AdapterEzEditTable);
/**
* Module description
@@ -505,3 +505,5 @@ export default class AdapterEzEditTable extends Feature {
this.initialized = false;
}
}
+
+AdapterEzEditTable.meta = {altName: 'advancedGrid'};
diff --git a/src/extensions/colOps/colOps.js b/src/extensions/colOps/colOps.js
index 784ab282..5db13c14 100644
--- a/src/extensions/colOps/colOps.js
+++ b/src/extensions/colOps/colOps.js
@@ -33,7 +33,7 @@ export default class ColOps extends Feature {
* @param {Object} opts Configuration object
*/
constructor(tf, opts) {
- super(tf, opts.name);
+ super(tf, ColOps);
/**
* Callback fired before columns operations start
diff --git a/src/extensions/colsVisibility/colsVisibility.js b/src/extensions/colsVisibility/colsVisibility.js
index 6bd3fc94..80a18533 100644
--- a/src/extensions/colsVisibility/colsVisibility.js
+++ b/src/extensions/colsVisibility/colsVisibility.js
@@ -23,7 +23,7 @@ export default class ColsVisibility extends Feature {
* @param {Object} Configuration object
*/
constructor(tf, f) {
- super(tf, f.name);
+ super(tf, ColsVisibility);
// Configuration object
let cfg = this.config;
diff --git a/src/extensions/filtersVisibility/filtersVisibility.js b/src/extensions/filtersVisibility/filtersVisibility.js
index 5b3467e6..4d9545d2 100644
--- a/src/extensions/filtersVisibility/filtersVisibility.js
+++ b/src/extensions/filtersVisibility/filtersVisibility.js
@@ -18,7 +18,7 @@ export default class FiltersVisibility extends Feature {
* @param {Object} Configuration object
*/
constructor(tf, f) {
- super(tf, f.name);
+ super(tf, FiltersVisibility);
/**
* Module name
diff --git a/src/extensions/sort/adapterSortabletable.js b/src/extensions/sort/adapterSortabletable.js
index dddd2ad0..4850a738 100644
--- a/src/extensions/sort/adapterSortabletable.js
+++ b/src/extensions/sort/adapterSortabletable.js
@@ -20,7 +20,7 @@ export default class AdapterSortableTable extends Feature {
* @param {Object} opts Configuration object
*/
constructor(tf, opts) {
- super(tf, opts.name);
+ super(tf, AdapterSortableTable);
/**
* Module name
@@ -508,6 +508,8 @@ export default class AdapterSortableTable extends Feature {
}
+AdapterSortableTable.meta = {altName: 'sort'};
+
//Converters
function ipAddress(value) {
let vals = value.split('.');
diff --git a/src/feature.js b/src/feature.js
index ed6288f1..c0be6caf 100644
--- a/src/feature.js
+++ b/src/feature.js
@@ -1,3 +1,4 @@
+import {toCamelCase} from './string';
const NOT_IMPLEMENTED = 'Not implemented.';
@@ -8,9 +9,11 @@ export class Feature {
/**
* Creates an instance of Feature
* @param {Object} tf TableFilter instance
- * @param {String} feature Feature name known by TableFilter
+ * @param {Class} feature Feature class for TableFilter registration
*/
- constructor(tf, feature) {
+ constructor(tf, cls) {
+ cls.meta = cls.meta || {};
+
/**
* TableFilter instance
* @type {TableFilter}
@@ -18,16 +21,18 @@ export class Feature {
this.tf = tf;
/**
- * Feature name
+ * Feature name is the camelised class name as per TableFilter's
+ * convention
* @type {String}
*/
- this.feature = feature;
+ this.feature = cls.meta.altName || cls.meta.name
+ || toCamelCase(cls.name);
/**
* TableFilter feature setting
* @type {Boolean}
*/
- this.enabled = tf[feature];
+ this.enabled = tf[this.feature];
/**
* TableFilter configuration
diff --git a/src/modules/alternateRows.js b/src/modules/alternateRows.js
index ea4a9c94..ea84d052 100644
--- a/src/modules/alternateRows.js
+++ b/src/modules/alternateRows.js
@@ -14,9 +14,10 @@ export class AlternateRows extends Feature {
* @param {Object} tf TableFilter instance
*/
constructor(tf) {
- super(tf, 'alternateRows');
+ super(tf, AlternateRows);
let config = this.config;
+
/**
* Css class for even rows (default: 'even')
* @type {String}
diff --git a/src/modules/baseDropdown.js b/src/modules/baseDropdown.js
index b36639d6..b0ef3205 100644
--- a/src/modules/baseDropdown.js
+++ b/src/modules/baseDropdown.js
@@ -18,8 +18,8 @@ export class BaseDropdown extends Feature {
* Creates an instance of BaseDropdown
* @param {TableFilter} tf
*/
- constructor(tf) {
- super(tf, 'baseDropdown');
+ constructor(tf, cls) {
+ super(tf, cls);
let f = this.config;
@@ -33,7 +33,7 @@ export class BaseDropdown extends Feature {
f.filter_options_sorter :
null;
- // TODO: move here all properties shared by Dropdown CheckList
+ // TODO: move here all properties shared by Dropdown and CheckList
/**
* Has custom options
diff --git a/src/modules/checkList.js b/src/modules/checkList.js
index 7bb13102..5cf6ef09 100644
--- a/src/modules/checkList.js
+++ b/src/modules/checkList.js
@@ -22,7 +22,7 @@ export class CheckList extends BaseDropdown {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
- super(tf, 'checkList');
+ super(tf, CheckList);
let f = this.config;
diff --git a/src/modules/clearButton.js b/src/modules/clearButton.js
index 8cacbe14..6a16036e 100644
--- a/src/modules/clearButton.js
+++ b/src/modules/clearButton.js
@@ -15,7 +15,7 @@ export class ClearButton extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
- super(tf, 'btnReset');
+ super(tf, ClearButton);
let f = this.config.btn_reset || {};
@@ -137,3 +137,6 @@ export class ClearButton extends Feature {
this.initialized = false;
}
}
+
+// TODO: remove as soon as feature name is fixed
+ClearButton.meta = {altName: 'btnReset'};
diff --git a/src/modules/dateType.js b/src/modules/dateType.js
index 6485d4f2..4bd164bd 100644
--- a/src/modules/dateType.js
+++ b/src/modules/dateType.js
@@ -17,7 +17,7 @@ export class DateType extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
- super(tf, 'dateType');
+ super(tf, DateType);
/**
* Global locale
diff --git a/src/modules/dropdown.js b/src/modules/dropdown.js
index eca8da8a..1a9b38fe 100644
--- a/src/modules/dropdown.js
+++ b/src/modules/dropdown.js
@@ -19,7 +19,7 @@ export class Dropdown extends BaseDropdown {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
- super(tf, 'dropdown');
+ super(tf, Dropdown);
// Configuration object
let f = this.config;
diff --git a/src/modules/gridLayout.js b/src/modules/gridLayout.js
index da0f0259..13a22936 100644
--- a/src/modules/gridLayout.js
+++ b/src/modules/gridLayout.js
@@ -17,7 +17,7 @@ export class GridLayout extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
- super(tf, 'gridLayout');
+ super(tf, GridLayout);
let f = this.config.grid_layout || {};
diff --git a/src/modules/hash.js b/src/modules/hash.js
index 9e47c0a1..8b23e9e9 100644
--- a/src/modules/hash.js
+++ b/src/modules/hash.js
@@ -86,7 +86,7 @@ export class Hash {
}
/**
- * Converts a URL hash into a state JSON object
+ * Converts a URL hash into a JSON object
*
* @param {String} hash URL hash fragment
* @returns {Object} JSON object
diff --git a/src/modules/help.js b/src/modules/help.js
index 4398beae..a598b90f 100644
--- a/src/modules/help.js
+++ b/src/modules/help.js
@@ -21,7 +21,7 @@ export class Help extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
- super(tf, 'help');
+ super(tf, Help);
let f = this.config.help_instructions || {};
@@ -238,3 +238,6 @@ export class Help extends Feature {
}
}
+
+// TODO: remove as soon as feature name is fixed
+Help.meta = {alwaysInstantiate: true};
diff --git a/src/modules/highlightKeywords.js b/src/modules/highlightKeywords.js
index daadaa7c..9ef62863 100644
--- a/src/modules/highlightKeywords.js
+++ b/src/modules/highlightKeywords.js
@@ -172,3 +172,9 @@ export class HighlightKeyword {
this.highlight(cell, term, this.highlightCssClass);
}
}
+
+// TODO: remove as soon as feature name is fixed
+HighlightKeyword.meta = {
+ name: 'highlightKeyword',
+ altName: 'highlightKeywords'
+};
diff --git a/src/modules/loader.js b/src/modules/loader.js
index d715c508..38dbffb1 100644
--- a/src/modules/loader.js
+++ b/src/modules/loader.js
@@ -44,7 +44,7 @@ export class Loader extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
- super(tf, 'loader');
+ super(tf, Loader);
let f = this.config.loader || {};
diff --git a/src/modules/markActiveColumns.js b/src/modules/markActiveColumns.js
index 05084ff9..049190b8 100644
--- a/src/modules/markActiveColumns.js
+++ b/src/modules/markActiveColumns.js
@@ -16,7 +16,7 @@ export class MarkActiveColumns extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
- super(tf, 'markActiveColumns');
+ super(tf, MarkActiveColumns);
let config = this.config.mark_active_columns || {};
diff --git a/src/modules/noResults.js b/src/modules/noResults.js
index df357c10..f943c122 100644
--- a/src/modules/noResults.js
+++ b/src/modules/noResults.js
@@ -17,7 +17,7 @@ export class NoResults extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
- super(tf, 'noResults');
+ super(tf, NoResults);
//configuration object
let f = this.config.no_results_message || {};
diff --git a/src/modules/paging.js b/src/modules/paging.js
index 1d6156cd..f9f35096 100644
--- a/src/modules/paging.js
+++ b/src/modules/paging.js
@@ -21,7 +21,7 @@ export class Paging extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
- super(tf, 'paging');
+ super(tf, Paging);
// Configuration object
let f = this.config.paging || {};
diff --git a/src/modules/popupFilter.js b/src/modules/popupFilter.js
index 6c2a1498..0e1e9f1f 100644
--- a/src/modules/popupFilter.js
+++ b/src/modules/popupFilter.js
@@ -19,7 +19,7 @@ export class PopupFilter extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
- super(tf, 'popupFilters');
+ super(tf, PopupFilter);
// Configuration object
let f = this.config.popup_filters || {};
@@ -456,3 +456,6 @@ export class PopupFilter extends Feature {
}
}
+
+// TODO: remove as soon as feature name is fixed
+PopupFilter.meta = {altName: 'popupFilters'};
diff --git a/src/modules/rowsCounter.js b/src/modules/rowsCounter.js
index fdcabdc9..b40dfa97 100644
--- a/src/modules/rowsCounter.js
+++ b/src/modules/rowsCounter.js
@@ -17,7 +17,7 @@ export class RowsCounter extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
- super(tf, 'rowsCounter');
+ super(tf, RowsCounter);
// TableFilter configuration
let f = this.config.rows_counter || {};
diff --git a/src/modules/state.js b/src/modules/state.js
index 579944f0..e95fae91 100644
--- a/src/modules/state.js
+++ b/src/modules/state.js
@@ -19,7 +19,7 @@ export class State extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
- super(tf, 'state');
+ super(tf, State);
let cfg = this.config.state || {};
diff --git a/src/modules/statusBar.js b/src/modules/statusBar.js
index 0336c17a..a929d4d9 100644
--- a/src/modules/statusBar.js
+++ b/src/modules/statusBar.js
@@ -30,7 +30,7 @@ export class StatusBar extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
- super(tf, 'statusBar');
+ super(tf, StatusBar);
// Configuration object
let f = this.config.status_bar || {};
diff --git a/src/modules/toolbar.js b/src/modules/toolbar.js
index d8afa3ef..78c6a380 100644
--- a/src/modules/toolbar.js
+++ b/src/modules/toolbar.js
@@ -29,7 +29,7 @@ export class Toolbar extends Feature {
* @memberof Toolbar
*/
constructor(tf) {
- super(tf, 'toolbar');
+ super(tf, Toolbar);
// Configuration object
let f = this.config.toolbar || {};
@@ -219,3 +219,6 @@ export class Toolbar extends Feature {
this.initialized = false;
}
}
+
+// TODO: remove as soon as feature name is fixed
+Toolbar.meta = {alwaysInstantiate: true};
diff --git a/src/string.js b/src/string.js
index 55319545..ff7ddd3c 100644
--- a/src/string.js
+++ b/src/string.js
@@ -74,3 +74,18 @@ export const contains = (term, data, exactMatch = false, caseSensitive = false,
}
return regexp.test(data);
};
+
+/**
+ * Camelize a string, cutting the string by multiple separators like
+ * hyphens, underscores and spaces.
+ * @param {String} text text to camelize
+ * @return {String} camelized text
+ */
+export const toCamelCase = (text = '') => {
+ return text.replace(/^([A-Z])|[\s-_]+(\w)/g, (match, p1, p2) => {
+ if (p2) {
+ return p2.toUpperCase();
+ }
+ return p1.toLowerCase();
+ });
+};
diff --git a/src/tablefilter.js b/src/tablefilter.js
index 110e5bef..811f3c06 100644
--- a/src/tablefilter.js
+++ b/src/tablefilter.js
@@ -2,7 +2,7 @@ import {addEvt, cancelEvt, stopEvt, targetEvt, isKeyPressed} from './event';
import {
addClass, createElm, elm, getText, getFirstTextNode, removeClass, tag
} from './dom';
-import {contains, matchCase, rgxEsc, trim} from './string';
+import {contains, matchCase, rgxEsc, trim, toCamelCase} from './string';
import {
isArray, isEmpty, isFn, isNumber, isObj, isString, isUndef, EMPTY_FN,
isBoolean
@@ -17,16 +17,36 @@ import {root} from './root';
import {Emitter} from './emitter';
import {Dropdown} from './modules/dropdown';
import {CheckList} from './modules/checkList';
+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';
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;
+const FEATURES = [
+ DateType, Help, State, MarkActiveColumns, GridLayout, Loader,
+ HighlightKeyword, PopupFilter, RowsCounter, StatusBar, ClearButton,
+ AlternateRows, NoResults, Paging, Toolbar
+];
+
/**
* Makes HTML tables filterable and a bit more :)
*
@@ -399,8 +419,7 @@ export class TableFilter {
* Enable/disable single filter mode
* @type {Boolean|Object}
*/
- this.singleFlt = isObj(f.single_filter) ||
- Boolean(f.single_filter);
+ this.singleFlt = isObj(f.single_filter) || Boolean(f.single_filter);
/**
* Specify columns to be excluded from single filter search, by default
@@ -926,10 +945,8 @@ export class TableFilter {
*/
this.ExtRegistry = {};
- // conditionally instantiate required features
- this.instantiateFeatures(
- Object.keys(FEATURES).map((item) => FEATURES[item])
- );
+ // instantiate features if needed
+ this.instantiateFeatures(FEATURES);
}
/**
@@ -949,20 +966,16 @@ 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,
+ MarkActiveColumns,
+ GridLayout,
+ Loader,
+ HighlightKeyword,
+ PopupFilter
]);
//filters grid is not generated
@@ -1035,13 +1048,13 @@ export class TableFilter {
}
this.initFeatures([
- rowsCounter,
- statusBar,
- clearButton,
- alternateRows,
- noResults,
- paging,
- toolbar
+ RowsCounter,
+ StatusBar,
+ ClearButton,
+ AlternateRows,
+ NoResults,
+ Paging,
+ Toolbar
]);
this.setColWidths();
@@ -1250,47 +1263,41 @@ export class TableFilter {
}
/**
- * Istantiate the collection of features required by the
- * configuration and add them to the features registry. A feature is
- * described by a `class` and `name` fields and and optional `property`
- * field:
- * {
- * class: AClass,
- * name: 'aClass'
- * }
+ * Conditionally istantiate each feature class in passed collection if
+ * required by configuration and add it to the features registry. A feature
+ * class meta information contains a `name` field and optional `altName` and
+ * `alwaysInstantiate` fields
* @param {Array} [features=[]]
* @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;
+ features.forEach(featureCls => {
+ let Cls = featureCls;
+ // assign meta info if not present
+ Cls.meta = Cls.meta || {name: null, altName: null};
+ Cls.meta.name = toCamelCase(Cls.name);
+ let {name, altName, alwaysInstantiate} = Cls.meta;
+ let prop = altName || name;
+
+ if (!this.hasConfig || this[prop] === true
+ || Boolean(alwaysInstantiate)) {
this.Mod[name] = this.Mod[name] || new Cls(this);
}
});
}
/**
- * Initialise the passed features collection. A feature is described by a
- * `class` and `name` fields and and optional `property` field:
- * {
- * class: AClass,
- * name: 'aClass'
- * }
+ * Initialise each feature class in passed collection.
* @param {Array} [features=[]]
* @private
*/
initFeatures(features = []) {
- features.forEach((feature) => {
- let {property, name} = feature;
- if (this[property] === true && this.Mod[name]) {
+ features.forEach(featureCls => {
+ let {name, altName} = featureCls.meta;
+ let prop = altName || name;
+
+ if (this[prop] === true && this.Mod[name]) {
this.Mod[name].init();
}
});
diff --git a/test/test-clear-button.js b/test/test-clear-button.js
index 509a2021..d148ebcf 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');
+
module('Sanity checks');
test('Clear button component', function() {
deepEqual(typeof clearButton, 'object', 'ClearButton instanciated');