From 37f6db70252b74aac4d5db6a3f603435e737497f Mon Sep 17 00:00:00 2001 From: koalyptus Date: Tue, 15 Jan 2019 23:29:13 +1100 Subject: [PATCH] wip --- .eslintrc | 2 +- dist/tablefilter/tablefilter.js | 27491 +++++++++++++++- dist/tablefilter/tablefilter.js.map | 2 +- dist/tablefilter/tf-0-1891d14d4ad1233555f2.js | 3504 ++ .../tf-0-1891d14d4ad1233555f2.js.map | 1 + dist/tablefilter/tf-0-2e300f81646508aa8de1.js | 3478 ++ .../tf-0-2e300f81646508aa8de1.js.map | 1 + dist/tablefilter/tf-0-8ba4e8f28dcb16cfc50b.js | 3480 ++ .../tf-0-8ba4e8f28dcb16cfc50b.js.map | 1 + package.json | 2 +- src/feature.js | 7 +- src/modules/clearButton.js | 3 + src/modules/help.js | 3 + src/modules/highlightKeywords.js | 3 + src/modules/popupFilter.js | 3 + src/modules/rowsCounter.js | 2 +- src/modules/toolbar.js | 3 + src/string.js | 15 + src/tablefilter.js | 1 + src/tfBase.js | 21 + 20 files changed, 38016 insertions(+), 7 deletions(-) create mode 100644 dist/tablefilter/tf-0-1891d14d4ad1233555f2.js create mode 100644 dist/tablefilter/tf-0-1891d14d4ad1233555f2.js.map create mode 100644 dist/tablefilter/tf-0-2e300f81646508aa8de1.js create mode 100644 dist/tablefilter/tf-0-2e300f81646508aa8de1.js.map create mode 100644 dist/tablefilter/tf-0-8ba4e8f28dcb16cfc50b.js create mode 100644 dist/tablefilter/tf-0-8ba4e8f28dcb16cfc50b.js.map create mode 100644 src/tfBase.js diff --git a/.eslintrc b/.eslintrc index 447ebf5f..2000209e 100644 --- a/.eslintrc +++ b/.eslintrc @@ -13,7 +13,7 @@ "array-bracket-spacing": 2, "keyword-spacing": ["error", { "after": true, "before": true }], "max-depth": [2, 7], - "max-statements": [2, 133], + "max-statements": [2, 134], "complexity": [2, 41], "no-unused-vars": 2, "no-eval": 2, diff --git a/dist/tablefilter/tablefilter.js b/dist/tablefilter/tablefilter.js index a9baa9ef..f0eb7bce 100644 --- a/dist/tablefilter/tablefilter.js +++ b/dist/tablefilter/tablefilter.js @@ -1,2 +1,27491 @@ -!function webpackUniversalModuleDefinition(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n=e();for(var i in n)("object"==typeof exports?exports:t)[i]=n[i]}}(window,function(){return function(o){function webpackJsonpCallback(t){for(var e,n,i=t[0],r=t[1],s=0,a=[];s>>0==t&&4294967295!=t}function iterateOverSparseArray(t,e,n,i){for(var r,s=getSparseArrayIndexes(t,n,i),a=0,o=s.length;a>=1)&&(t+=t);return n}(r||"0",e-s.replace(/\.\d+/,"").length)+s,(n||t<0)&&(s=(t<0?"-":"+")+s),s}var F=Math.abs,N=(Math.pow,Math.min,Math.max,Math.ceil),I=Math.floor,R=(Math.round,String.fromCharCode);(function privatePropertyAccessor(t){var n="_sugar_"+t;return function(t,e){return 1u.specificity||(u.specificity=t)}(i),(s=e%1)&&(function handleFraction(t,e,n){if(e){var i=h[_(e)],r=P(t.multiplier/i.multiplier*n);u[i.name]=r}}(n,i,s),e=p(e)),"weekday"!==t?(r=i===E&&28=(e||r());case 1:return o<=(e||r())}}()&&function disambiguateHigherUnit(){var t=h[d];l=c,setUnit(t.name,1,t,d)}(),o}},function(t,e,n){"use strict";t.exports=function tzOffset(t){return t.getTimezoneOffset()}},function(t,e,n){"use strict";t.exports=function spaceSplit(t){return t.split(" ")}},function(t,e,n){"use strict";t.exports={HALF_WIDTH_ZERO:48,FULL_WIDTH_ZERO:65296,HALF_WIDTH_PERIOD:".",FULL_WIDTH_PERIOD:".",HALF_WIDTH_COMMA:",",OPEN_BRACE:"{",CLOSE_BRACE:"}"}},function(t,e,n){"use strict";var i=n(58);t.exports=function simpleClone(t){return i({},t)}},function(t,e,n){"use strict";var i=n(17).forEachProperty;t.exports=function simpleMerge(n,t){return i(t,function(t,e){n[e]=t}),n}},function(t,e,n){"use strict";n.r(e),n.d(e,"BaseDropdown",function(){return r});var i=n(10),f=n(36),d=n(3),h=n(4);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"),t.btnPrevPageText=Object(a.defaultsStr)(n.btn_prev_page_text,"<"),t.btnLastPageText=Object(a.defaultsStr)(n.btn_last_page_text,">|"),t.btnFirstPageText=Object(a.defaultsStr)(n.btn_first_page_text,"|<"),t.btnNextPageHtml=Object(a.defaultsStr)(n.btn_next_page_html,e.enableIcons?'':null),t.btnPrevPageHtml=Object(a.defaultsStr)(n.btn_prev_page_html,e.enableIcons?'':null),t.btnFirstPageHtml=Object(a.defaultsStr)(n.btn_first_page_html,e.enableIcons?'':null),t.btnLastPageHtml=Object(a.defaultsStr)(n.btn_last_page_html,e.enableIcons?'':null),t.pageText=Object(a.defaultsStr)(n.page_text," Page "),t.ofText=Object(a.defaultsStr)(n.of_text," of "),t.nbPgSpanCssClass=Object(a.defaultsStr)(n.nb_pages_css_class,"nbpg"),t.hasBtns=Object(a.defaultsBool)(n.btns,!0),t.pageSelectorType=Object(a.defaultsStr)(n.page_selector_type,v.SELECT),t.toolbarPosition=Object(a.defaultsStr)(n.toolbar_position,f.CENTER),t.onBeforeChangePage=Object(a.defaultsFn)(n.on_before_change_page,g.EMPTY_FN),t.onAfterChangePage=Object(a.defaultsFn)(n.on_after_change_page,g.EMPTY_FN),t.slcResultsTxt=null,t.btnNextCont=null,t.btnPrevCont=null,t.btnLastCont=null,t.btnFirstCont=null,t.pgCont=null,t.pgBefore=null,t.pgAfter=null;var i=e.refRow,r=e.getRowsNb(!0);t.nbPages=Math.ceil((r-i)/t.pageLength);var s=_assertThisInitialized(_assertThisInitialized(t));return t.evt={slcIndex:function slcIndex(){return s.pageSelectorType===v.SELECT?s.pageSlc.options.selectedIndex:parseInt(s.pageSlc.value,10)-1},nbOpts:function nbOpts(){return s.pageSelectorType===v.SELECT?parseInt(s.pageSlc.options.length,10)-1:s.nbPages-1},next:function next(){var t=s.evt.slcIndex()=t.nbFilterableRows&&(this.startPagingRow=t.nbFilterableRows-this.pageLength),this.setPagingInfo(),n===v.SELECT)){var o=i.options.length-1<=a?i.options.length-1:a;i.options[o].selected=!0}r.emit("after-page-length-change",t,this.pageLength)}}},{key:"resetPage",value:function resetPage(){var t=this.tf;if(this.isEnabled()){this.emitter.emit("before-reset-page",t);var e=t.feature("store").getPageNb();""!==e&&this.changePage(e-1),this.emitter.emit("after-reset-page",t,e)}}},{key:"resetPageLength",value:function resetPageLength(){var t=this.tf;if(this.isEnabled()){this.emitter.emit("before-reset-page-length",t);var e=t.feature("store").getPageLength();""!==e&&(this.pageLengthSlc.options[e].selected=!0,this.changeResultsPerPage()),this.emitter.emit("after-reset-page-length",t,e)}}},{key:"changePageHandler",value:function changePageHandler(t,e){this.setPage(e)}},{key:"changePageResultsHandler",value:function changePageResultsHandler(t,e){this.changeResultsPerPage(e)}},{key:"destroy",value:function destroy(){if(this.initialized){var t=this.evt;this.pageSlc&&(this.pageSelectorType===v.SELECT?Object(b.removeEvt)(this.pageSlc,"change",t.slcPagesChange):this.pageSelectorType===v.INPUT&&Object(b.removeEvt)(this.pageSlc,"keypress",t._detectKey),Object(y.removeElm)(this.pageSlc)),this.btnNextCont&&(Object(b.removeEvt)(this.btnNextCont,"click",t.next),Object(y.removeElm)(this.btnNextCont),this.btnNextCont=null),this.btnPrevCont&&(Object(b.removeEvt)(this.btnPrevCont,"click",t.prev),Object(y.removeElm)(this.btnPrevCont),this.btnPrevCont=null),this.btnLastCont&&(Object(b.removeEvt)(this.btnLastCont,"click",t.last),Object(y.removeElm)(this.btnLastCont),this.btnLastCont=null),this.btnFirstCont&&(Object(b.removeEvt)(this.btnFirstCont,"click",t.first),Object(y.removeElm)(this.btnFirstCont),this.btnFirstCont=null),this.pgBefore&&(Object(y.removeElm)(this.pgBefore),this.pgBefore=null),this.pgAfter&&(Object(y.removeElm)(this.pgAfter),this.pgAfter=null),this.pgCont&&(Object(y.removeElm)(this.pgCont),this.pgCont=null),this.hasResultsPerPage&&this.removeResultsPerPage(),this.emitter.off(["after-filtering"],Object(b.bound)(this.resetPagingInfo,this)),this.emitter.off(["change-page"],Object(b.bound)(this.changePageHandler,this)),this.emitter.off(["change-page-results"],Object(b.bound)(this.changePageResultsHandler,this)),this.pageSlc=null,this.nbPages=0,this.initialized=!1}}}]),Paging}()},function(t,e,n){"use strict";n.r(e),n.d(e,"NoResults",function(){return u});var i=n(10),r=n(2),s=n(3),a=n(4),o=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;n'),e.toolbarPosition=Object(r.defaultsStr)(n.toolbar_position,u.RIGHT),e.container=null,e.element=null,e}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)}(ClearButton,i["Feature"]),function _createClass(t,e,n){return e&&_defineProperties(t.prototype,e),n&&_defineProperties(t,n),t}(ClearButton,[{key:"onClick",value:function onClick(){this.isEnabled()&&this.tf.clearFilters()}},{key:"init",value:function init(){var t=this,e=this.tf;if(!this.initialized){this.emitter.emit("initializing-feature",this,!Object(o.isNull)(this.targetId));var n=Object(s.createElm)("span");if((this.targetId?Object(s.elm)(this.targetId):e.feature("toolbar").container(this.toolbarPosition)).appendChild(n),this.html){n.innerHTML=this.html;var i=n.firstChild;Object(a.addEvt)(i,"click",function(){return t.onClick()})}else{var r=Object(s.createElm)("a",["href","javascript:void(0);"]);r.className=this.cssClass,r.appendChild(Object(s.createText)(this.text)),n.appendChild(r),Object(a.addEvt)(r,"click",function(){return t.onClick()})}this.element=n.firstChild,this.container=n,this.initialized=!0,this.emitter.emit("feature-initialized",this)}}},{key:"destroy",value:function destroy(){this.initialized&&(Object(s.removeElm)(this.element),Object(s.removeElm)(this.container),this.element=null,this.container=null,this.initialized=!1)}}]),ClearButton}()},function(t,e,n){"use strict";n.r(e),n.d(e,"StatusBar",function(){return c});var i=n(10),r=n(8),o=n(2),u=n(3),s=n(1),a=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'),e.placeholderCssClass=Object(l.defaultsStr)(n.placeholder_css_class,"popUpPlaceholder"),e.containerCssClass=Object(l.defaultsStr)(n.div_css_class,"popUpFilter"),e.adjustToContainer=Object(l.defaultsBool)(n.adjust_to_container,!0),e.onBeforeOpen=Object(l.defaultsFn)(n.on_before_popup_filter_open,r.EMPTY_FN),e.onAfterOpen=Object(l.defaultsFn)(n.on_after_popup_filter_open,r.EMPTY_FN),e.onBeforeClose=Object(l.defaultsFn)(n.on_before_popup_filter_close,r.EMPTY_FN),e.onAfterClose=Object(l.defaultsFn)(n.on_after_popup_filter_close,r.EMPTY_FN),e.fltSpans=[],e.fltIcons=[],e.filtersCache=null,e.fltElms=Object(l.defaultsArr)(e.filtersCache,[]),e.prfxDiv="popup_",e.activeFilterIdx=-1,e}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)}(PopupFilter,i["Feature"]),function _createClass(t,e,n){return e&&_defineProperties(t.prototype,e),n&&_defineProperties(t,n),t}(PopupFilter,[{key:"onClick",value:function onClick(t){var e=Object(u.targetEvt)(t).parentNode,n=parseInt(e.getAttribute("ci"),10);if(this.closeAll(n),this.toggle(n),this.adjustToContainer){var i=this.fltElms[n],r=.95*this.tf.getHeaderElement(n).clientWidth;i.style.width=parseInt(r,10)+"px"}Object(u.cancelEvt)(t),Object(u.stopEvt)(t)}},{key:"onMouseup",value:function onMouseup(t){if(-1!==this.activeFilterIdx){var e=Object(u.targetEvt)(t),n=this.fltElms[this.activeFilterIdx];if(this.fltIcons[this.activeFilterIdx]!==e){for(;e&&e!==n;)e=e.parentNode;e!==n&&this.close(this.activeFilterIdx)}}}},{key:"init",value:function init(){var n=this;if(!this.initialized){var t=this.tf;t.externalFltIds=[""],t.filtersRowIndex=0,t.headersRow<=1&&isNaN(t.config().headers_row_index)&&(t.headersRow=0),t.gridLayout&&(t.headersRow--,this.buildIcons()),this.emitter.on(["before-filtering"],function(){return n.setIconsState()}),this.emitter.on(["after-filtering"],function(){return n.closeAll()}),this.emitter.on(["cell-processed"],function(t,e){return n.changeState(e,!0)}),this.emitter.on(["filters-row-inserted"],function(){return n.buildIcons()}),this.emitter.on(["before-filter-init"],function(t,e){return n.build(e)}),this.initialized=!0}}},{key:"reset",value:function reset(){this.enable(),this.init(),this.buildIcons(),this.buildAll()}},{key:"buildIcons",value:function buildIcons(){var n=this,i=this.tf;i.headersRow++,i.eachCol(function(t){var e=Object(o.createElm)("span",["ci",t]);e.innerHTML=n.iconHtml,i.getHeaderElement(t).appendChild(e),Object(u.addEvt)(e,"click",function(t){return n.onClick(t)}),n.fltSpans[t]=e,n.fltIcons[t]=e.firstChild},function(t){return i.getFilterType(t)===s.NONE})}},{key:"buildAll",value:function buildAll(){for(var t=0;t<, <=, >, >=, =, *, !, {, }, ||,&&, [empty], [nonempty], rgx:
Learn more
':n.text,e.instrHtml=Object(a.defaultsStr)(n.html,null),e.btnText=Object(a.defaultsStr)(n.btn_text,"?"),e.btnHtml=Object(a.defaultsStr)(n.btn_html,null),e.btnCssClass=Object(a.defaultsStr)(n.btn_css_class,"helpBtn"),e.contCssClass=Object(a.defaultsStr)(n.container_css_class,"helpCont"),e.btn=null,e.cont=null,e.boundMouseup=null,e.defaultHtml='

TableFilter v'+t.version+'

'+f+"
©2015-"+t.year+' Max Guglielmi
',e.toolbarPosition=Object(a.defaultsStr)(n.toolbar_position,c.RIGHT),e.emitter.on(["init-help"],function(){return e.init()}),e}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)}(Help,i["Feature"]),function _createClass(t,e,n){return e&&_defineProperties(t.prototype,e),n&&_defineProperties(t,n),t}(Help,[{key:"onMouseup",value:function onMouseup(t){for(var e=Object(u.targetEvt)(t);e&&e!==this.cont&&e!==this.btn;)e=e.parentNode;e!==this.cont&&e!==this.btn&&this.toggle()}},{key:"init",value:function init(){var t=this;if(!this.initialized){this.emitter.emit("initializing-feature",this,!Object(l.isNull)(this.tgtId));var e=this.tf,n=Object(o.createElm)("span"),i=Object(o.createElm)("div");this.boundMouseup=this.onMouseup.bind(this),(this.tgtId?Object(o.elm)(this.tgtId):e.feature("toolbar").container(this.toolbarPosition)).appendChild(n);var r=this.contTgtId?Object(o.elm)(this.contTgtId):n;if(this.btnHtml){n.innerHTML=this.btnHtml;var s=n.firstChild;Object(u.addEvt)(s,"click",function(){return t.toggle()}),r.appendChild(i)}else{r.appendChild(i);var a=Object(o.createElm)("a",["href","javascript:void(0);"]);a.className=this.btnCssClass,a.appendChild(Object(o.createText)(this.btnText)),n.appendChild(a),Object(u.addEvt)(a,"click",function(){return t.toggle()})}this.instrHtml?(this.contTgtId&&r.appendChild(i),i.innerHTML=this.instrHtml,this.contTgtId||(i.className=this.contCssClass)):(i.innerHTML=this.instrText,i.className=this.contCssClass),i.innerHTML+=this.defaultHtml,Object(u.addEvt)(i,"click",function(){return t.toggle()}),this.cont=i,this.btn=n,this.initialized=!0,this.emitter.emit("feature-initialized",this)}}},{key:"toggle",value:function toggle(){if(this.isEnabled()){Object(u.removeEvt)(s.root,"mouseup",this.boundMouseup);var t=this.cont.style.display;""===t||t===r.NONE?(this.cont.style.display="inline",Object(u.addEvt)(s.root,"mouseup",this.boundMouseup)):this.cont.style.display=r.NONE}}},{key:"destroy",value:function destroy(){this.initialized&&(Object(o.removeElm)(this.btn),this.btn=null,Object(o.removeElm)(this.cont),this.cont=null,this.boundMouseup=null,this.initialized=!1)}}]),Help}()},function(t,e,n){"use strict";n.r(e),n.d(e,"DateType",function(){return s});var i=n(47),r=(n(145),n(10)),o=n(3),u=n(4),l=n(8);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;no().getTime();case"past"===e:return t.getTime()"),this.lwOperator=Object(a.defaultsStr)(s.lower_operator,"<"),this.leOperator=Object(a.defaultsStr)(s.lower_equal_operator,"<="),this.geOperator=Object(a.defaultsStr)(s.greater_equal_operator,">="),this.dfOperator=Object(a.defaultsStr)(s.different_operator,"!"),this.lkOperator=Object(a.defaultsStr)(s.like_operator,"*"),this.eqOperator=Object(a.defaultsStr)(s.equal_operator,"="),this.stOperator=Object(a.defaultsStr)(s.start_with_operator,"{"),this.enOperator=Object(a.defaultsStr)(s.end_with_operator,"}"),this.separator=Object(a.defaultsStr)(s.separator,","),this.rowsCounter=Object(x.isObj)(s.rows_counter)||Boolean(s.rows_counter),this.statusBar=Object(x.isObj)(s.status_bar)||Boolean(s.status_bar),this.loader=Object(x.isObj)(s.loader)||Boolean(s.loader),this.displayBtn=Boolean(s.btn),this.btnText=Object(a.defaultsStr)(s.btn_text,this.enableIcons?"":"Go"),this.btnCssClass=Object(a.defaultsStr)(s.btn_css_class,this.enableIcons?"btnflt_icon":"btnflt"),this.btnReset=Object(x.isObj)(s.btn_reset)||Boolean(s.btn_reset),this.onBeforeReset=Object(a.defaultsFn)(s.on_before_reset,x.EMPTY_FN),this.onAfterReset=Object(a.defaultsFn)(s.on_after_reset,x.EMPTY_FN),this.paging=Object(x.isObj)(s.paging)||Boolean(s.paging),this.nbHiddenRows=0,this.autoFilter=Object(x.isObj)(s.auto_filter)||Boolean(s.auto_filter),this.autoFilterDelay=Object(x.isObj)(s.auto_filter)&&Object(x.isNumber)(s.auto_filter.delay)?s.auto_filter.delay:G.AUTO_FILTER_DELAY,this.isUserTyping=null,this.autoFilterTimer=null,this.highlightKeywords=Boolean(s.highlight_keywords),this.noResults=Object(x.isObj)(s.no_results_message)||Boolean(s.no_results_message),this.state=Object(x.isObj)(s.state)||Boolean(s.state),this.dateType=!0,this.locale=Object(a.defaultsStr)(s.locale,"en"),this.thousandsSeparator=Object(a.defaultsStr)(s.thousands_separator,","),this.decimalSeparator=Object(a.defaultsStr)(s.decimal_separator,"."),this.colTypes=Object(x.isArray)(s.col_types)?s.col_types:[],this.prfxTf="TF",this.prfxFlt="flt",this.prfxValButton="btn",this.prfxResponsive="resp",this.stickyCssClass="sticky",this.extensions=Object(a.defaultsArr)(s.extensions,[]),this.enableDefaultTheme=Boolean(s.enable_default_theme),this.hasThemes=this.enableDefaultTheme||Object(x.isArray)(s.themes),this.themes=Object(a.defaultsArr)(s.themes,[]),this.themesPath=this.getThemesPath(),this.responsive=Boolean(s.responsive),this.toolbar=Object(x.isObj)(s.toolbar)||Boolean(s.toolbar),this.stickyHeaders=Boolean(s.sticky_headers),this.Mod={},this.ExtRegistry={},this.instantiateFeatures(Object.keys(G.FEATURES).map(function(t){return G.FEATURES[t]}))}return function _createClass(t,e,n){return e&&_defineProperties(t.prototype,e),n&&_defineProperties(t,n),t}(TableFilter,[{key:"init",value:function init(){var n=this;if(!this.initialized){this.import(this.stylesheetId,this.getStylesheetPath(),null,"link");var t,e=this.Mod;this.loadThemes();var i=G.FEATURES.dateType,r=G.FEATURES.help,s=G.FEATURES.state,a=G.FEATURES.markActiveColumns,o=G.FEATURES.gridLayout,u=G.FEATURES.loader,l=G.FEATURES.highlightKeyword,c=G.FEATURES.popupFilter,f=G.FEATURES.rowsCounter,d=G.FEATURES.statusBar,h=G.FEATURES.clearButton,p=G.FEATURES.alternateRows,m=G.FEATURES.noResults,y=G.FEATURES.paging,g=G.FEATURES.toolbar;if(this.initFeatures([i,r,s,a,o,u,l,c]),this.fltGrid){var b=this._insertFiltersRow();this.nbCells=this.getCellsNb(this.refRow),this.nbFilterableRows=this.getRowsNb();for(var v=this.singleFlt?1:this.nbCells,O=0;O=Object(K.parse)(t.replace(o,""),s);else if(v)b=iObject(K.parse)(t.replace(l,""),s);else if(w)b=!Object(Y.contains)(t.replace(c,""),e,!1,this.caseSensitive);else if(k)b=Object(Y.contains)(t.replace(f,""),e,!1,this.caseSensitive);else if(x)b=Object(Y.contains)(t.replace(d,""),e,!0,this.caseSensitive);else if(j)b=0===e.indexOf(t.replace(h,""));else if(E){var V=t.replace(p,"");b=e.lastIndexOf(V,e.length-1)===e.length-1-(V.length-1)&&-1 tr").length:e:t?e:e-this.refRow}},{key:"getWorkingRows",value:function getWorkingRows(){return l.querySelectorAll("table#".concat(this.id," > tbody > tr"))}},{key:"getCellValue",value:function getCellValue(t){var e=t.cellIndex,n=this.cellParser;return-1!==n.cols.indexOf(e)?n.parse(this,t,e):Object(w.getText)(t)}},{key:"getCellData",value:function getCellData(t){var e=t.cellIndex,n=this.getCellValue(t);if(this.hasType(e,[G.FORMATTED_NUMBER]))return Object(K.parse)(n,this.getDecimal(e));if(this.hasType(e,[G.NUMBER]))return Number(n);if(this.hasType(e,[G.DATE])){var i=this.Mod.dateType;return i.parse(n,i.getLocale(e))}return n}},{key:"getData",value:function getData(){var t=0t.end?this.end:t.end)}})},function(t,e,n){"use strict";var i=n(18),r=n(48);n(21)(i,{toString:function(){return r(this)?this.start+".."+this.end:"Invalid Range"}})},function(t,e,n){"use strict";var i=n(18),r=n(61);n(21)(i,{toArray:function(){return r(this)}})},function(t,e,n){"use strict";var i=n(12).isString;t.exports=function getRangeMemberNumericValue(t){return i(t)?t.charCodeAt(0):t}},function(t,e,n){"use strict";var i=n(18),r=n(14),s=n(48),a=n(21),o=n(151),u=r.abs;a(i,{span:function(){var t=o(this.end)-o(this.start);return s(this)?u(t)+1:NaN}})},function(t,e,n){"use strict";n(25)},function(t,e,n){"use strict";n(25)},function(t,e,n){"use strict";n(25)},function(t,e,n){"use strict";n(25)},function(t,e,n){"use strict";var i=n(18),r=n(48);n(21)(i,{isValid:function(){return r(this)}})},function(t,e,n){"use strict";var i=n(18);n(21)(i,{intersect:function(t){return t.start>this.end||t.endt.start?this.start:t.start,this.end=this.start&&t.start<=this.end&&t.end>=this.start&&t.end<=this.end:t>=this.start&&t<=this.end)}})},function(t,e,n){"use strict";var i=n(18);n(21)(i,{clone:function(){return new i(this.start,this.end)}})},function(t,e,n){"use strict";var a=n(99);t.exports=function rangeClamp(t,e){var n=t.start,i=t.end,r=ir(e).getTime()-(n||0)}}),t.exports=i.Date.isAfter},function(t,e,n){"use strict";var i=n(39),r=n(38),s=n(32),a=n(31),o=n(44);t.exports=function compareDay(t,e){var n=o();return e&&i(n,r(n)+e),s(t)===s(n)&&a(t)===a(n)&&r(t)===r(n)}},function(t,e,n){"use strict";t.exports=function trim(t){return t.trim()}},function(t,e,n){"use strict";var i=n(0),r=n(101);i.Date.defineInstance({is:function(t,e,n){return r(t,e,n)}}),t.exports=i.Date.is},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.hoursUntil},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.hoursSince},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.hoursFromNow},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.hoursAgo},function(t,e,n){"use strict";var i=n(0),r=n(24);i.Date.defineInstance({getWeekday:function(t){return r(t)}}),t.exports=i.Date.getWeekday},function(t,e,n){"use strict";var i=n(0);i.Date.defineInstance({getUTCWeekday:function(t){return t.getUTCDay()}}),t.exports=i.Date.getUTCWeekday},function(t,e,n){"use strict";var i=n(0),r=n(103);i.Date.defineInstance({getUTCOffset:function(t,e){return r(t,e)}}),t.exports=i.Date.getUTCOffset},function(t,e,n){"use strict";var i=n(0),r=n(63);i.Date.defineInstance({getISOWeek:function(t){return r(t,!0)}}),t.exports=i.Date.getISOWeek},function(t,e,n){"use strict";var r=n(69);t.exports=function createDateWithContext(t,e,n,i){return r(t,e,n,i).date}},function(t,e,n){"use strict";var i=n(0),r=n(260);i.Date.defineInstance({get:function(t,e,n){return r(t,e,n)}}),t.exports=i.Date.get},function(t,e,n){"use strict";t.exports=1e3},function(t,e,n){"use strict";var r=n(262),s=n(17).hasOwn;t.exports=function memoizeFunction(e){var n={},i=0;return function(t){return s(n,t)?n[t]:(i===r&&(n={},i=0),i++,n[t]=e(t))}}},function(t,e,n){"use strict";t.exports=/([{}])\1|{([^}]*)}|(%)%|(%(\w*))/g},function(t,e,n){"use strict";var i=n(264),r=n(56),s=n(263),o=r.OPEN_BRACE,u=r.CLOSE_BRACE;t.exports=function createFormatMatcher(l,c,f){var r=i,a=s(function compile(t){var e,n=[],i=0;for(r.lastIndex=0;e=r.exec(t);)getSubstring(n,t,i,e.index),getToken(n,e),i=r.lastIndex;return getSubstring(n,t,i,t.length),n});function getToken(t,e){var n,i,r,s,a=e[2],o=e[3],u=e[5];e[4]&&c?(i=u,n=c):a?(i=a,n=l):r=o&&c?o:e[1]||e[0],n&&(function assertPassesPrecheck(t,e,n){if(t&&!t(e,n))throw new TypeError("Invalid token "+(e||n)+" in format string")}(f,a,u),s=function(t,e){return n(t,i,e)}),t.push(s||function getLiteral(t){return function(){return t}}(r))}function getSubstring(t,e,n,i){if(n>=1)&&(t+=t);return n}},function(t,e,n){"use strict";t.exports=/\(([-+]\d{2,4}|\w{3,5})\)$/},function(t,e,n){"use strict";var i=n(270),r=n(15),s=n(11),a=n(29),o=n(38),u=n(32),l=n(104),c=n(31),f=n(37),d=n(64),h=n(24),p=n(23),m=n(14),y=n(268),g=n(103),b=n(267),v=n(63),O=n(266),_=n(41),C=r.localeManager,w=s.MONTH_INDEX,x=m.ceil,k=[{ldml:"Dow",strf:"a",lowerToken:"dow",get:function(t,e){return C.get(e).getWeekdayName(h(t),2)}},{ldml:"Weekday",strf:"A",lowerToken:"weekday",allowAlternates:!0,get:function(t,e,n){return C.get(e).getWeekdayName(h(t),n)}},{ldml:"Mon",strf:"b h",lowerToken:"mon",get:function(t,e){return C.get(e).getMonthName(c(t),2)}},{ldml:"Month",strf:"B",lowerToken:"month",allowAlternates:!0,get:function(t,e,n){return C.get(e).getMonthName(c(t),n)}},{strf:"C",get:function(t){return u(t).toString().slice(0,2)}},{ldml:"d date day",strf:"d",strfPadding:2,ldmlPaddedToken:"dd",ordinalToken:"do",get:function(t){return o(t)}},{strf:"e",get:function(t){return d(o(t),2,!1,10," ")}},{ldml:"H 24hr",strf:"H",strfPadding:2,ldmlPaddedToken:"HH",get:function(t){return l(t)}},{ldml:"h hours 12hr",strf:"I",strfPadding:2,ldmlPaddedToken:"hh",get:function(t){return l(t)%12||12}},{ldml:"D",strf:"j",strfPadding:3,ldmlPaddedToken:"DDD",get:function(t){var e=_(f(t),w);return b(t,e)+1}},{ldml:"M",strf:"m",strfPadding:2,ordinalToken:"Mo",ldmlPaddedToken:"MM",get:function(t){return c(t)+1}},{ldml:"m minutes",strf:"M",strfPadding:2,ldmlPaddedToken:"mm",get:function(t){return p(t,"Minutes")}},{ldml:"Q",get:function(t){return x((c(t)+1)/3)}},{ldml:"TT",strf:"p",get:function(t,e){return O(t,e)}},{ldml:"tt",strf:"P",get:function(t,e){return O(t,e).toLowerCase()}},{ldml:"T",lowerToken:"t",get:function(t,e){return O(t,e).charAt(0)}},{ldml:"s seconds",strf:"S",strfPadding:2,ldmlPaddedToken:"ss",get:function(t){return p(t,"Seconds")}},{ldml:"S ms",strfPadding:3,ldmlPaddedToken:"SSS",get:function(t){return p(t,"Milliseconds")}},{ldml:"e",strf:"u",ordinalToken:"eo",get:function(t){return h(t)||7}},{strf:"U",strfPadding:2,get:function(t){return v(t,!1,0)}},{ldml:"W",strf:"V",strfPadding:2,ordinalToken:"Wo",ldmlPaddedToken:"WW",get:function(t){return v(t,!0)}},{strf:"w",get:function(t){return h(t)}},{ldml:"w",ordinalToken:"wo",ldmlPaddedToken:"ww",get:function(t,e){var n=C.get(e),i=n.getFirstDayOfWeek(e),r=n.getFirstDayOfWeekYear(e);return v(t,!0,i,r)}},{strf:"W",strfPadding:2,get:function(t){return v(t,!1)}},{ldmlPaddedToken:"gggg",ldmlTwoDigitToken:"gg",get:function(t,e){return y(t,e)}},{strf:"G",strfPadding:4,strfTwoDigitToken:"g",ldmlPaddedToken:"GGGG",ldmlTwoDigitToken:"GG",get:function(t,e){return y(t,e,!0)}},{ldml:"year",ldmlPaddedToken:"yyyy",ldmlTwoDigitToken:"yy",strf:"Y",strfPadding:4,strfTwoDigitToken:"y",get:function(t){return u(t)}},{ldml:"ZZ",strf:"z",get:function(t){return g(t)}},{ldml:"X",get:function(t){return a(t.getTime()/1e3)}},{ldml:"x",get:function(t){return t.getTime()}},{ldml:"Z",get:function(t){return g(t,!0)}},{ldml:"z",strf:"Z",get:function(t){var e=t.toString().match(i);return e?e[1]:""}},{strf:"D",alias:"%m/%d/%y"},{strf:"F",alias:"%Y-%m-%d"},{strf:"r",alias:"%I:%M:%S %p"},{strf:"R",alias:"%H:%M"},{strf:"T",alias:"%H:%M:%S"},{strf:"x",alias:"{short}"},{strf:"X",alias:"{time}"},{strf:"c",alias:"{stamp}"}];t.exports=k},function(t,e,n){"use strict";var r,i,s,a=n(15),o=n(271),u=n(105),l=n(35),c=n(64),f=n(55),d=n(27),h=n(17),p=n(265),m=n(49),y=a.localeManager,g=h.hasOwn,b=h.getOwn,v=h.forEachProperty,O=d.sugarDate;!function buildDateFormatTokens(){function addFormats(e,t,n){t&&l(f(t),function(t){e[t]=n})}function buildLowercase(n){return function(t,e){return n(t,e).toLowerCase()}}function buildPadded(n,i){return function(t,e){return c(n(t,e),i)}}function buildTwoDigits(n){return function(t,e){return n(t,e)%100}}function buildAlias(n){return function(t,e){return s(n,t,e)}}function buildAlternate(n,i){var t=function(t,e){return n.get(t,e,i)};addFormats(r,n.ldml+i,t),n.lowerToken&&(r[n.lowerToken+i]=buildLowercase(t))}function getIdentityFormat(i){return function(t,e){var n=y.get(e);return s(n[i],t,e)}}r={},i={},l(o,function(t){var e,n=t.get;t.lowerToken&&(r[t.lowerToken]=buildLowercase(n)),t.ordinalToken&&(r[t.ordinalToken]=function buildOrdinal(i){return function(t,e){var n=i(t,e);return n+y.get(e).getOrdinal(n)}}(n)),t.ldmlPaddedToken&&(r[t.ldmlPaddedToken]=buildPadded(n,t.ldmlPaddedToken.length)),t.ldmlTwoDigitToken&&(r[t.ldmlTwoDigitToken]=buildPadded(buildTwoDigits(n),2)),t.strfTwoDigitToken&&(i[t.strfTwoDigitToken]=buildPadded(buildTwoDigits(n),2)),t.strfPadding&&(e=buildPadded(n,t.strfPadding)),t.alias&&(n=buildAlias(t.alias)),t.allowAlternates&&function buildAlternates(t){for(var e=1;e<=5;e++)buildAlternate(t,e)}(t),addFormats(r,t.ldml,n),addFormats(i,t.strf,e||n)}),v(u,function(t,e){addFormats(r,e,buildAlias(t))}),m(O,"short medium long full",function(t,e){var n=getIdentityFormat(e);addFormats(r,e,n),t[e]=n}),addFormats(r,"time",getIdentityFormat("time")),addFormats(r,"stamp",getIdentityFormat("stamp"))}(),function buildDateFormatMatcher(){s=p(function getLdml(t,e,n){return b(r,e)(t,n)},function getStrf(t,e,n){return b(i,e)(t,n)},function checkDateToken(t,e){return g(r,t)||g(i,e)})}(),t.exports={ldmlTokens:r,strfTokens:i,dateFormatMatcher:s}},function(t,e,n){"use strict";var i=n(0),r=n(106);i.Date.defineInstance({format:function(t,e,n){return r(t,e,n)}}),t.exports=i.Date.format},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.endOfYear},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.endOfWeek},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.endOfMonth},function(t,e,n){"use strict";var i=n(0),r=n(11),s=n(24),a=n(26),o=n(51),u=r.DAY_INDEX;i.Date.defineInstance({endOfISOWeek:function(t){return 0!==s(t)&&a(t,7),o(t,u)}}),t.exports=i.Date.endOfISOWeek},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.endOfDay},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.daysUntil},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.daysSince},function(t,e,n){"use strict";var i=n(0),r=n(120);i.Date.defineInstance({daysInMonth:function(t){return r(t)}}),t.exports=i.Date.daysInMonth},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.daysFromNow},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.daysAgo},function(t,e,n){"use strict";var i=n(0),r=n(37);i.Date.defineInstance({clone:function(t){return r(t)}}),t.exports=i.Date.clone},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.beginningOfYear},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.beginningOfWeek},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.beginningOfMonth},function(t,e,n){"use strict";var i=n(0),r=n(115),s=n(24),a=n(26);i.Date.defineInstance({beginningOfISOWeek:function(t){var e=s(t);return 0===e?e=-6:1!==e&&(e=1),a(t,e),r(t)}}),t.exports=i.Date.beginningOfISOWeek},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.beginningOfDay},function(t,e,n){"use strict";var i=n(11),s=n(34),a=n(114),o=i.YEAR_INDEX;t.exports=function collectDateParamsFromArguments(n){var i={},r=0;return a(o,function(t){var e=n[r++];s(e)&&(i[t.name]=e)}),i}},function(t,e,n){"use strict";var r=n(46);t.exports=function getDateParamsFromString(t){var e,n,i={};return(e=t.match(/^(-?\d*[\d.]\d*)?\s?(\w+?)s?$/i))&&(r(n)&&(n=e[1]?+e[1]:1),i[e[2].toLowerCase()]=n),i}},function(t,e,n){"use strict";var i=n(0),r=n(108);i.Date.defineInstanceWithArguments({advance:function(t,e){return r(t,e,1)}}),t.exports=i.Date.advance},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.addYears},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.addWeeks},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.addSeconds},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.addMonths},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.addMinutes},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.addMilliseconds},function(t,e,n){"use strict";var i=n(0);n(7),t.exports=i.Date.addHours},function(t,e,n){"use strict";var i=n(33),r=n(11),s=n(35),a=n(28),o=n(109),u=n(43),l=n(51),c=n(27),f=n(66),d=n(50),h=n(49),p=n(65),m=c.sugarDate,y=r.HOURS_INDEX,g=r.DAY_INDEX;t.exports=function buildDateUnitMethods(){h(m,i,function(t,i,n){var r=i.name,e=f(r);g>>0==t&&4294967295!=t}},function(t,e,n){"use strict";var a=n(427);t.exports=function getSparseArrayIndexes(t,i,e,n){var r,s=[];for(r in t)a(r)&&(e||(n?r<=i:i<=r))&&s.push(+r);return s.sort(function(t,e){var n=i=a[1]&&n<=(a[2]||a[1])})),n=C(i))),n?(n=s?v(n):(u.push(o),"("+n+")"),e&&(n=k(o,n,e)),r&&(n+="?"),n):"")}function formatToSrc(t){return t=(t=t.replace(/ /g," ?")).replace(/\{([^,]+?)\}/g,function(t,e){var n=e.split("|");return 1} [methods] + * @option {Array} [except] + * @option {Array} [namespaces] + * @option {boolean} [enhance] + * @option {boolean} [enhanceString] + * @option {boolean} [enhanceArray] + * @option {boolean} [objectPrototype] + * @param {ExtendOptions} [opts] + * + *** + * @method extend([opts]) + * @returns SugarNamespace + * @namespace SugarNamespace + * @short Extends Sugar defined methods for a specific namespace onto natives. + * @param {ExtendOptions} [opts] + * + ***/ + var extend = function (opts) { + + var nativeClass = globalContext[name], nativeProto = nativeClass.prototype; + var staticMethods = {}, instanceMethods = {}, methodsByName; + + function objectRestricted(name, target) { + return isObject && target === nativeProto && + (!allowObjectPrototype || name === 'get' || name === 'set'); + } + + function arrayOptionExists(field, val) { + var arr = opts[field]; + if (arr) { + for (var i = 0, el; el = arr[i]; i++) { + if (el === val) { + return true; + } + } + } + return false; + } + + function arrayOptionExcludes(field, val) { + return opts[field] && !arrayOptionExists(field, val); + } + + function disallowedByFlags(methodName, target, flags) { + // Disallowing methods by flag currently only applies if methods already + // exist to avoid enhancing native methods, as aliases should still be + // extended (i.e. Array#all should still be extended even if Array#every + // is being disallowed by a flag). + if (!target[methodName] || !flags) { + return false; + } + for (var i = 0; i < flags.length; i++) { + if (opts[flags[i]] === false) { + return true; + } + } + } + + function namespaceIsExcepted() { + return arrayOptionExists('except', nativeClass) || + arrayOptionExcludes('namespaces', nativeClass); + } + + function methodIsExcepted(methodName) { + return arrayOptionExists('except', methodName); + } + + function canExtend(methodName, method, target) { + return !objectRestricted(methodName, target) && + !disallowedByFlags(methodName, target, method.flags) && + !methodIsExcepted(methodName); + } + + opts = opts || {}; + methodsByName = opts.methods; + + if (namespaceIsExcepted()) { + return; + } else if (isObject && typeof opts.objectPrototype === 'boolean') { + // Store "objectPrototype" flag for future reference. + allowObjectPrototype = opts.objectPrototype; + } + + forEachProperty(methodsByName || sugarNamespace, function(method, methodName) { + if (methodsByName) { + // If we have method names passed in an array, + // then we need to flip the key and value here + // and find the method in the Sugar namespace. + methodName = method; + method = sugarNamespace[methodName]; + } + if (hasOwn(method, 'instance') && canExtend(methodName, method, nativeProto)) { + instanceMethods[methodName] = method.instance; + } + if(hasOwn(method, 'static') && canExtend(methodName, method, nativeClass)) { + staticMethods[methodName] = method; + } + }); + + // Accessing the extend target each time instead of holding a reference as + // it may have been overwritten (for example Date by Sinon). Also need to + // access through the global to allow extension of user-defined namespaces. + extendNative(nativeClass, staticMethods); + extendNative(nativeProto, instanceMethods); + + if (!methodsByName) { + // If there are no method names passed, then + // all methods in the namespace will be extended + // to the native. This includes all future defined + // methods, so add a flag here to check later. + setProperty(sugarNamespace, 'active', true); + } + return sugarNamespace; + }; + + function defineWithOptionCollect(methodName, instance, args) { + setProperty(sugarNamespace, methodName, function(arg1, arg2, arg3) { + var opts = collectDefineOptions(arg1, arg2, arg3); + defineMethods(sugarNamespace, opts.methods, instance, args, opts.last); + return sugarNamespace; + }); + } + + /*** + * @method defineStatic(methods) + * @returns SugarNamespace + * @namespace SugarNamespace + * @short Defines static methods on the namespace that can later be extended + * onto the native globals. + * @extra Accepts either a single object mapping names to functions, or name + * and function as two arguments. If `extend` was previously called + * with no arguments, the method will be immediately mapped to its + * native when defined. + * + * @example + * + * Sugar.Number.defineStatic({ + * isOdd: function (num) { + * return num % 2 === 1; + * } + * }); + * + * @signature defineStatic(methodName, methodFn) + * @param {Object} methods - Methods to be defined. + * @param {string} methodName - Name of a single method to be defined. + * @param {Function} methodFn - Function body of a single method to be defined. + ***/ + defineWithOptionCollect('defineStatic', STATIC); + + /*** + * @method defineInstance(methods) + * @returns SugarNamespace + * @namespace SugarNamespace + * @short Defines methods on the namespace that can later be extended as + * instance methods onto the native prototype. + * @extra Accepts either a single object mapping names to functions, or name + * and function as two arguments. All functions should accept the + * native for which they are mapped as their first argument, and should + * never refer to `this`. If `extend` was previously called with no + * arguments, the method will be immediately mapped to its native when + * defined. + * + * Methods cannot accept more than 4 arguments in addition to the + * native (5 arguments total). Any additional arguments will not be + * mapped. If the method needs to accept unlimited arguments, use + * `defineInstanceWithArguments`. Otherwise if more options are + * required, use an options object instead. + * + * @example + * + * Sugar.Number.defineInstance({ + * square: function (num) { + * return num * num; + * } + * }); + * + * @signature defineInstance(methodName, methodFn) + * @param {Object} methods - Methods to be defined. + * @param {string} methodName - Name of a single method to be defined. + * @param {Function} methodFn - Function body of a single method to be defined. + ***/ + defineWithOptionCollect('defineInstance', INSTANCE); + + /*** + * @method defineInstanceAndStatic(methods) + * @returns SugarNamespace + * @namespace SugarNamespace + * @short A shortcut to define both static and instance methods on the namespace. + * @extra This method is intended for use with `Object` instance methods. Sugar + * will not map any methods to `Object.prototype` by default, so defining + * instance methods as static helps facilitate their proper use. + * + * @example + * + * Sugar.Object.defineInstanceAndStatic({ + * isAwesome: function (obj) { + * // check if obj is awesome! + * } + * }); + * + * @signature defineInstanceAndStatic(methodName, methodFn) + * @param {Object} methods - Methods to be defined. + * @param {string} methodName - Name of a single method to be defined. + * @param {Function} methodFn - Function body of a single method to be defined. + ***/ + defineWithOptionCollect('defineInstanceAndStatic', INSTANCE | STATIC); + + + /*** + * @method defineStaticWithArguments(methods) + * @returns SugarNamespace + * @namespace SugarNamespace + * @short Defines static methods that collect arguments. + * @extra This method is identical to `defineStatic`, except that when defined + * methods are called, they will collect any arguments past `n - 1`, + * where `n` is the number of arguments that the method accepts. + * Collected arguments will be passed to the method in an array + * as the last argument defined on the function. + * + * @example + * + * Sugar.Number.defineStaticWithArguments({ + * addAll: function (num, args) { + * for (var i = 0; i < args.length; i++) { + * num += args[i]; + * } + * return num; + * } + * }); + * + * @signature defineStaticWithArguments(methodName, methodFn) + * @param {Object} methods - Methods to be defined. + * @param {string} methodName - Name of a single method to be defined. + * @param {Function} methodFn - Function body of a single method to be defined. + ***/ + defineWithOptionCollect('defineStaticWithArguments', STATIC, true); + + /*** + * @method defineInstanceWithArguments(methods) + * @returns SugarNamespace + * @namespace SugarNamespace + * @short Defines instance methods that collect arguments. + * @extra This method is identical to `defineInstance`, except that when + * defined methods are called, they will collect any arguments past + * `n - 1`, where `n` is the number of arguments that the method + * accepts. Collected arguments will be passed to the method as the + * last argument defined on the function. + * + * @example + * + * Sugar.Number.defineInstanceWithArguments({ + * addAll: function (num, args) { + * for (var i = 0; i < args.length; i++) { + * num += args[i]; + * } + * return num; + * } + * }); + * + * @signature defineInstanceWithArguments(methodName, methodFn) + * @param {Object} methods - Methods to be defined. + * @param {string} methodName - Name of a single method to be defined. + * @param {Function} methodFn - Function body of a single method to be defined. + ***/ + defineWithOptionCollect('defineInstanceWithArguments', INSTANCE, true); + + /*** + * @method defineStaticPolyfill(methods) + * @returns SugarNamespace + * @namespace SugarNamespace + * @short Defines static methods that are mapped onto the native if they do + * not already exist. + * @extra Intended only for use creating polyfills that follow the ECMAScript + * spec. Accepts either a single object mapping names to functions, or + * name and function as two arguments. Note that polyfill methods will + * be immediately mapped onto their native prototype regardless of the + * use of `extend`. + * + * @example + * + * Sugar.Object.defineStaticPolyfill({ + * keys: function (obj) { + * // get keys! + * } + * }); + * + * @signature defineStaticPolyfill(methodName, methodFn) + * @param {Object} methods - Methods to be defined. + * @param {string} methodName - Name of a single method to be defined. + * @param {Function} methodFn - Function body of a single method to be defined. + ***/ + setProperty(sugarNamespace, 'defineStaticPolyfill', function(arg1, arg2, arg3) { + var opts = collectDefineOptions(arg1, arg2, arg3); + extendNative(globalContext[name], opts.methods, true, opts.last); + return sugarNamespace; + }); + + /*** + * @method defineInstancePolyfill(methods) + * @returns SugarNamespace + * @namespace SugarNamespace + * @short Defines instance methods that are mapped onto the native prototype + * if they do not already exist. + * @extra Intended only for use creating polyfills that follow the ECMAScript + * spec. Accepts either a single object mapping names to functions, or + * name and function as two arguments. This method differs from + * `defineInstance` as there is no static signature (as the method + * is mapped as-is to the native), so it should refer to its `this` + * object. Note that polyfill methods will be immediately mapped onto + * their native prototype regardless of the use of `extend`. + * + * @example + * + * Sugar.Array.defineInstancePolyfill({ + * indexOf: function (arr, el) { + * // index finding code here! + * } + * }); + * + * @signature defineInstancePolyfill(methodName, methodFn) + * @param {Object} methods - Methods to be defined. + * @param {string} methodName - Name of a single method to be defined. + * @param {Function} methodFn - Function body of a single method to be defined. + ***/ + setProperty(sugarNamespace, 'defineInstancePolyfill', function(arg1, arg2, arg3) { + var opts = collectDefineOptions(arg1, arg2, arg3); + extendNative(globalContext[name].prototype, opts.methods, true, opts.last); + // Map instance polyfills to chainable as well. + forEachProperty(opts.methods, function(fn, methodName) { + defineChainableMethod(sugarNamespace, methodName, fn); + }); + return sugarNamespace; + }); + + /*** + * @method alias(toName, from) + * @returns SugarNamespace + * @namespace SugarNamespace + * @short Aliases one Sugar method to another. + * + * @example + * + * Sugar.Array.alias('all', 'every'); + * + * @signature alias(toName, fn) + * @param {string} toName - Name for new method. + * @param {string|Function} from - Method to alias, or string shortcut. + ***/ + setProperty(sugarNamespace, 'alias', function(name, source) { + var method = typeof source === 'string' ? sugarNamespace[source] : source; + setMethod(sugarNamespace, name, method); + return sugarNamespace; + }); + + // Each namespace can extend only itself through its .extend method. + setProperty(sugarNamespace, 'extend', extend); + + // Cache the class to namespace relationship for later use. + namespacesByName[name] = sugarNamespace; + namespacesByClassString['[object ' + name + ']'] = sugarNamespace; + + mapNativeToChainable(name); + mapObjectChainablesToNamespace(sugarNamespace); + + + // Export + return Sugar[name] = sugarNamespace; + } + + function setGlobalProperties() { + setProperty(Sugar, 'VERSION', '2.0.6'); + setProperty(Sugar, 'extend', Sugar); + setProperty(Sugar, 'toString', toString); + setProperty(Sugar, 'createNamespace', createNamespace); + + setProperty(Sugar, 'util', { + 'hasOwn': hasOwn, + 'getOwn': getOwn, + 'setProperty': setProperty, + 'classToString': classToString, + 'defineProperty': defineProperty, + 'forEachProperty': forEachProperty, + 'mapNativeToChainable': mapNativeToChainable + }); + } + + function toString() { + return SUGAR_GLOBAL; + } + + + // Defining Methods + + function defineMethods(sugarNamespace, methods, type, args, flags) { + forEachProperty(methods, function(method, methodName) { + var instanceMethod, staticMethod = method; + if (args) { + staticMethod = wrapMethodWithArguments(method); + } + if (flags) { + staticMethod.flags = flags; + } + + // A method may define its own custom implementation, so + // make sure that's not the case before creating one. + if (type & INSTANCE && !method.instance) { + instanceMethod = wrapInstanceMethod(method, args); + setProperty(staticMethod, 'instance', instanceMethod); + } + + if (type & STATIC) { + setProperty(staticMethod, 'static', true); + } + + setMethod(sugarNamespace, methodName, staticMethod); + + if (sugarNamespace.active) { + // If the namespace has been activated (.extend has been called), + // then map this method as well. + sugarNamespace.extend(methodName); + } + }); + } + + function collectDefineOptions(arg1, arg2, arg3) { + var methods, last; + if (typeof arg1 === 'string') { + methods = {}; + methods[arg1] = arg2; + last = arg3; + } else { + methods = arg1; + last = arg2; + } + return { + last: last, + methods: methods + }; + } + + function wrapInstanceMethod(fn, args) { + return args ? wrapMethodWithArguments(fn, true) : wrapInstanceMethodFixed(fn); + } + + function wrapMethodWithArguments(fn, instance) { + // Functions accepting enumerated arguments will always have "args" as the + // last argument, so subtract one from the function length to get the point + // at which to start collecting arguments. If this is an instance method on + // a prototype, then "this" will be pushed into the arguments array so start + // collecting 1 argument earlier. + var startCollect = fn.length - 1 - (instance ? 1 : 0); + return function() { + var args = [], collectedArgs = [], len; + if (instance) { + args.push(this); + } + len = Math.max(arguments.length, startCollect); + // Optimized: no leaking arguments + for (var i = 0; i < len; i++) { + if (i < startCollect) { + args.push(arguments[i]); + } else { + collectedArgs.push(arguments[i]); + } + } + args.push(collectedArgs); + return fn.apply(this, args); + }; + } + + function wrapInstanceMethodFixed(fn) { + switch(fn.length) { + // Wrapped instance methods will always be passed the instance + // as the first argument, but requiring the argument to be defined + // may cause confusion here, so return the same wrapped function regardless. + case 0: + case 1: + return function() { + return fn(this); + }; + case 2: + return function(a) { + return fn(this, a); + }; + case 3: + return function(a, b) { + return fn(this, a, b); + }; + case 4: + return function(a, b, c) { + return fn(this, a, b, c); + }; + case 5: + return function(a, b, c, d) { + return fn(this, a, b, c, d); + }; + } + } + + // Method helpers + + function extendNative(target, source, polyfill, override) { + forEachProperty(source, function(method, name) { + if (polyfill && !override && target[name]) { + // Method exists, so bail. + return; + } + setProperty(target, name, method); + }); + } + + function setMethod(sugarNamespace, methodName, method) { + sugarNamespace[methodName] = method; + if (method.instance) { + defineChainableMethod(sugarNamespace, methodName, method.instance, true); + } + } + + + // Chainables + + function getNewChainableClass(name) { + var fn = function SugarChainable(obj, arg) { + if (!(this instanceof fn)) { + return new fn(obj, arg); + } + if (this.constructor !== fn) { + // Allow modules to define their own constructors. + obj = this.constructor.apply(obj, arguments); + } + this.raw = obj; + }; + setProperty(fn, 'toString', function() { + return SUGAR_GLOBAL + name; + }); + setProperty(fn.prototype, 'valueOf', function() { + return this.raw; + }); + return fn; + } + + function defineChainableMethod(sugarNamespace, methodName, fn) { + var wrapped = wrapWithChainableResult(fn), existing, collision, dcp; + dcp = DefaultChainable.prototype; + existing = dcp[methodName]; + + // If the method was previously defined on the default chainable, then a + // collision exists, so set the method to a disambiguation function that will + // lazily evaluate the object and find it's associated chainable. An extra + // check is required to avoid false positives from Object inherited methods. + collision = existing && existing !== Object.prototype[methodName]; + + // The disambiguation function is only required once. + if (!existing || !existing.disambiguate) { + dcp[methodName] = collision ? disambiguateMethod(methodName) : wrapped; + } + + // The target chainable always receives the wrapped method. Additionally, + // if the target chainable is Sugar.Object, then map the wrapped method + // to all other namespaces as well if they do not define their own method + // of the same name. This way, a Sugar.Number will have methods like + // isEqual that can be called on any object without having to traverse up + // the prototype chain and perform disambiguation, which costs cycles. + // Note that the "if" block below actually does nothing on init as Object + // goes first and no other namespaces exist yet. However it needs to be + // here as Object instance methods defined later also need to be mapped + // back onto existing namespaces. + sugarNamespace.prototype[methodName] = wrapped; + if (sugarNamespace === Sugar.Object) { + mapObjectChainableToAllNamespaces(methodName, wrapped); + } + } + + function mapObjectChainablesToNamespace(sugarNamespace) { + forEachProperty(Sugar.Object && Sugar.Object.prototype, function(val, methodName) { + if (typeof val === 'function') { + setObjectChainableOnNamespace(sugarNamespace, methodName, val); + } + }); + } + + function mapObjectChainableToAllNamespaces(methodName, fn) { + forEachProperty(namespacesByName, function(sugarNamespace) { + setObjectChainableOnNamespace(sugarNamespace, methodName, fn); + }); + } + + function setObjectChainableOnNamespace(sugarNamespace, methodName, fn) { + var proto = sugarNamespace.prototype; + if (!hasOwn(proto, methodName)) { + proto[methodName] = fn; + } + } + + function wrapWithChainableResult(fn) { + return function() { + return new DefaultChainable(fn.apply(this.raw, arguments)); + }; + } + + function disambiguateMethod(methodName) { + var fn = function() { + var raw = this.raw, sugarNamespace; + if (raw != null) { + // Find the Sugar namespace for this unknown. + sugarNamespace = namespacesByClassString[classToString(raw)]; + } + if (!sugarNamespace) { + // If no sugarNamespace can be resolved, then default + // back to Sugar.Object so that undefined and other + // non-supported types can still have basic object + // methods called on them, such as type checks. + sugarNamespace = Sugar.Object; + } + + return new sugarNamespace(raw)[methodName].apply(this, arguments); + }; + fn.disambiguate = true; + return fn; + } + + function mapNativeToChainable(name, methodNames) { + var sugarNamespace = namespacesByName[name], + nativeProto = globalContext[name].prototype; + + if (!methodNames && ownPropertyNames) { + methodNames = ownPropertyNames(nativeProto); + } + + forEachProperty(methodNames, function(methodName) { + if (nativeMethodProhibited(methodName)) { + // Sugar chainables have their own constructors as well as "valueOf" + // methods, so exclude them here. The __proto__ argument should be trapped + // by the function check below, however simply accessing this property on + // Object.prototype causes QML to segfault, so pre-emptively excluding it. + return; + } + try { + var fn = nativeProto[methodName]; + if (typeof fn !== 'function') { + // Bail on anything not a function. + return; + } + } catch (e) { + // Function.prototype has properties that + // will throw errors when accessed. + return; + } + defineChainableMethod(sugarNamespace, methodName, fn); + }); + } + + function nativeMethodProhibited(methodName) { + return methodName === 'constructor' || + methodName === 'valueOf' || + methodName === '__proto__'; + } + + + // Util + + // Internal references + var ownPropertyNames = Object.getOwnPropertyNames, + internalToString = Object.prototype.toString, + internalHasOwnProperty = Object.prototype.hasOwnProperty; + + // Defining this as a variable here as the ES5 module + // overwrites it to patch DONTENUM. + var forEachProperty = function (obj, fn) { + for(var key in obj) { + if (!hasOwn(obj, key)) continue; + if (fn.call(obj, obj[key], key, obj) === false) break; + } + }; + + // istanbul ignore next + function definePropertyShim(obj, prop, descriptor) { + obj[prop] = descriptor.value; + } + + function setProperty(target, name, value, enumerable) { + defineProperty(target, name, { + value: value, + enumerable: !!enumerable, + configurable: true, + writable: true + }); + } + + // PERF: Attempts to speed this method up get very Heisenbergy. Quickly + // returning based on typeof works for primitives, but slows down object + // types. Even === checks on null and undefined (no typeof) will end up + // basically breaking even. This seems to be as fast as it can go. + function classToString(obj) { + return internalToString.call(obj); + } + + function hasOwn(obj, prop) { + return !!obj && internalHasOwnProperty.call(obj, prop); + } + + function getOwn(obj, prop) { + if (hasOwn(obj, prop)) { + return obj[prop]; + } + } + + setupGlobal(); + + /*** + * @module Common + * @description Internal utility and common methods. + ***/ + + // Flag allowing native methods to be enhanced. + var ENHANCEMENTS_FLAG = 'enhance'; + + // For type checking, etc. Excludes object as this is more nuanced. + var NATIVE_TYPES = 'Boolean Number String Date RegExp Function Array Error Set Map'; + + // Do strings have no keys? + var NO_KEYS_IN_STRING_OBJECTS = !('0' in Object('a')); + + // Prefix for private properties. + var PRIVATE_PROP_PREFIX = '_sugar_'; + + // Matches 1..2 style ranges in properties. + var PROPERTY_RANGE_REG = /^(.*?)\[([-\d]*)\.\.([-\d]*)\](.*)$/; + + // WhiteSpace/LineTerminator as defined in ES5.1 plus Unicode characters in the Space, Separator category. + var TRIM_CHARS = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u2028\u2029\u3000\uFEFF'; + + // Regex for matching a formatted string. + var STRING_FORMAT_REG = /([{}])\1|{([^}]*)}|(%)%|(%(\w*))/g; + + // Common chars + var HALF_WIDTH_ZERO = 0x30, + FULL_WIDTH_ZERO = 0xff10, + HALF_WIDTH_PERIOD = '.', + FULL_WIDTH_PERIOD = '.', + HALF_WIDTH_COMMA = ',', + OPEN_BRACE = '{', + CLOSE_BRACE = '}'; + + // Namespace aliases + var sugarObject = Sugar.Object, + sugarArray = Sugar.Array, + sugarDate = Sugar.Date, + sugarString = Sugar.String, + sugarNumber = Sugar.Number, + sugarFunction = Sugar.Function, + sugarRegExp = Sugar.RegExp; + + // Class checks + var isSerializable, + isBoolean, isNumber, isString, + isDate, isRegExp, isFunction, + isArray, isSet, isMap, isError; + + function buildClassChecks() { + + var knownTypes = {}; + + function addCoreTypes() { + + var names = spaceSplit(NATIVE_TYPES); + + isBoolean = buildPrimitiveClassCheck(names[0]); + isNumber = buildPrimitiveClassCheck(names[1]); + isString = buildPrimitiveClassCheck(names[2]); + + isDate = buildClassCheck(names[3]); + isRegExp = buildClassCheck(names[4]); + + // Wanted to enhance performance here by using simply "typeof" + // but Firefox has two major issues that make this impossible, + // one fixed, the other not, so perform a full class check here. + // + // 1. Regexes can be typeof "function" in FF < 3 + // https://bugzilla.mozilla.org/show_bug.cgi?id=61911 (fixed) + // + // 2. HTMLEmbedElement and HTMLObjectElement are be typeof "function" + // https://bugzilla.mozilla.org/show_bug.cgi?id=268945 (won't fix) + isFunction = buildClassCheck(names[5]); + + // istanbul ignore next + isArray = Array.isArray || buildClassCheck(names[6]); + isError = buildClassCheck(names[7]); + + isSet = buildClassCheck(names[8], typeof Set !== 'undefined' && Set); + isMap = buildClassCheck(names[9], typeof Map !== 'undefined' && Map); + + // Add core types as known so that they can be checked by value below, + // notably excluding Functions and adding Arguments and Error. + addKnownType('Arguments'); + addKnownType(names[0]); + addKnownType(names[1]); + addKnownType(names[2]); + addKnownType(names[3]); + addKnownType(names[4]); + addKnownType(names[6]); + + } + + function addArrayTypes() { + var types = 'Int8 Uint8 Uint8Clamped Int16 Uint16 Int32 Uint32 Float32 Float64'; + forEach(spaceSplit(types), function(str) { + addKnownType(str + 'Array'); + }); + } + + function addKnownType(className) { + var str = '[object '+ className +']'; + knownTypes[str] = true; + } + + function isKnownType(className) { + return knownTypes[className]; + } + + function buildClassCheck(className, globalObject) { + // istanbul ignore if + if (globalObject && isClass(new globalObject, 'Object')) { + return getConstructorClassCheck(globalObject); + } else { + return getToStringClassCheck(className); + } + } + + // Map and Set may be [object Object] in certain IE environments. + // In this case we need to perform a check using the constructor + // instead of Object.prototype.toString. + // istanbul ignore next + function getConstructorClassCheck(obj) { + var ctorStr = String(obj); + return function(obj) { + return String(obj.constructor) === ctorStr; + }; + } + + function getToStringClassCheck(className) { + return function(obj, str) { + // perf: Returning up front on instanceof appears to be slower. + return isClass(obj, className, str); + }; + } + + function buildPrimitiveClassCheck(className) { + var type = className.toLowerCase(); + return function(obj) { + var t = typeof obj; + return t === type || t === 'object' && isClass(obj, className); + }; + } + + addCoreTypes(); + addArrayTypes(); + + isSerializable = function(obj, className) { + // Only known objects can be serialized. This notably excludes functions, + // host objects, Symbols (which are matched by reference), and instances + // of classes. The latter can arguably be matched by value, but + // distinguishing between these and host objects -- which should never be + // compared by value -- is very tricky so not dealing with it here. + return isKnownType(className) || isPlainObject(obj, className); + }; + + } + + function isClass(obj, className, str) { + if (!str) { + str = classToString(obj); + } + return str === '[object '+ className +']'; + } + + // Wrapping the core's "define" methods to + // save a few bytes in the minified script. + function wrapNamespace(method) { + return function(sugarNamespace, arg1, arg2) { + sugarNamespace[method](arg1, arg2); + }; + } + + // Method define aliases + var alias = wrapNamespace('alias'), + defineStatic = wrapNamespace('defineStatic'), + defineInstance = wrapNamespace('defineInstance'), + defineStaticPolyfill = wrapNamespace('defineStaticPolyfill'), + defineInstancePolyfill = wrapNamespace('defineInstancePolyfill'), + defineInstanceAndStatic = wrapNamespace('defineInstanceAndStatic'), + defineInstanceWithArguments = wrapNamespace('defineInstanceWithArguments'); + + function defineInstanceSimilar(sugarNamespace, set, fn, flags) { + defineInstance(sugarNamespace, collectSimilarMethods(set, fn), flags); + } + + function defineInstanceAndStaticSimilar(sugarNamespace, set, fn, flags) { + defineInstanceAndStatic(sugarNamespace, collectSimilarMethods(set, fn), flags); + } + + function collectSimilarMethods(set, fn) { + var methods = {}; + if (isString(set)) { + set = spaceSplit(set); + } + forEach(set, function(el, i) { + fn(methods, el, i); + }); + return methods; + } + + // This song and dance is to fix methods to a different length + // from what they actually accept in order to stay in line with + // spec. Additionally passing argument length, as some methods + // throw assertion errors based on this (undefined check is not + // enough). Fortunately for now spec is such that passing 3 + // actual arguments covers all requirements. Note that passing + // the argument length also forces the compiler to not rewrite + // length of the compiled function. + function fixArgumentLength(fn) { + var staticFn = function(a) { + var args = arguments; + return fn(a, args[1], args[2], args.length - 1); + }; + staticFn.instance = function(b) { + var args = arguments; + return fn(this, b, args[1], args.length); + }; + return staticFn; + } + + function defineAccessor(namespace, name, fn) { + setProperty(namespace, name, fn); + } + + function defineOptionsAccessor(namespace, defaults) { + var obj = simpleClone(defaults); + + function getOption(name) { + return obj[name]; + } + + function setOption(arg1, arg2) { + var options; + if (arguments.length === 1) { + options = arg1; + } else { + options = {}; + options[arg1] = arg2; + } + forEachProperty(options, function(val, name) { + if (val === null) { + val = defaults[name]; + } + obj[name] = val; + }); + } + + defineAccessor(namespace, 'getOption', getOption); + defineAccessor(namespace, 'setOption', setOption); + return getOption; + } + + // For methods defined directly on the prototype like Range + function defineOnPrototype(ctor, methods) { + var proto = ctor.prototype; + forEachProperty(methods, function(val, key) { + proto[key] = val; + }); + } + + // Argument helpers + + function assertArgument(exists) { + if (!exists) { + throw new TypeError('Argument required'); + } + } + + function assertCallable(obj) { + if (!isFunction(obj)) { + throw new TypeError('Function is not callable'); + } + } + + function assertArray(obj) { + if (!isArray(obj)) { + throw new TypeError('Array required'); + } + } + + function assertWritable(obj) { + if (isPrimitive(obj)) { + // If strict mode is active then primitives will throw an + // error when attempting to write properties. We can't be + // sure if strict mode is available, so pre-emptively + // throw an error here to ensure consistent behavior. + throw new TypeError('Property cannot be written'); + } + } + + // Coerces an object to a positive integer. + // Does not allow Infinity. + function coercePositiveInteger(n) { + n = +n || 0; + if (n < 0 || !isNumber(n) || !isFinite(n)) { + throw new RangeError('Invalid number'); + } + return trunc(n); + } + + + // General helpers + + function isDefined(o) { + return o !== undefined; + } + + function isUndefined(o) { + return o === undefined; + } + + function privatePropertyAccessor(key) { + var privateKey = PRIVATE_PROP_PREFIX + key; + return function(obj, val) { + if (arguments.length > 1) { + setProperty(obj, privateKey, val); + return obj; + } + return obj[privateKey]; + }; + } + + function setChainableConstructor(sugarNamespace, createFn) { + sugarNamespace.prototype.constructor = function() { + return createFn.apply(this, arguments); + }; + } + + // Fuzzy matching helpers + + function getMatcher(f) { + if (!isPrimitive(f)) { + var className = classToString(f); + if (isRegExp(f, className)) { + return regexMatcher(f); + } else if (isDate(f, className)) { + return dateMatcher(f); + } else if (isFunction(f, className)) { + return functionMatcher(f); + } else if (isPlainObject(f, className)) { + return fuzzyMatcher(f); + } + } + // Default is standard isEqual + return defaultMatcher(f); + } + + function fuzzyMatcher(obj) { + var matchers = {}; + return function(el, i, arr) { + var matched = true; + if (!isObjectType(el)) { + return false; + } + forEachProperty(obj, function(val, key) { + matchers[key] = getOwn(matchers, key) || getMatcher(val); + if (matchers[key].call(arr, el[key], i, arr) === false) { + matched = false; + } + return matched; + }); + return matched; + }; + } + + function defaultMatcher(f) { + return function(el) { + return isEqual(el, f); + }; + } + + function regexMatcher(reg) { + reg = RegExp(reg); + return function(el) { + return reg.test(el); + }; + } + + function dateMatcher(d) { + var ms = d.getTime(); + return function(el) { + return !!(el && el.getTime) && el.getTime() === ms; + }; + } + + function functionMatcher(fn) { + return function(el, i, arr) { + // Return true up front if match by reference + return el === fn || fn.call(arr, el, i, arr); + }; + } + + // Object helpers + + function getKeys(obj) { + return Object.keys(obj); + } + + function deepHasProperty(obj, key, any) { + return handleDeepProperty(obj, key, any, true); + } + + function deepGetProperty(obj, key, any) { + return handleDeepProperty(obj, key, any, false); + } + + function deepSetProperty(obj, key, val) { + handleDeepProperty(obj, key, false, false, true, false, val); + return obj; + } + + function handleDeepProperty(obj, key, any, has, fill, fillLast, val) { + var ns, bs, ps, cbi, set, isLast, isPush, isIndex, nextIsIndex, exists; + ns = obj; + if (key == null) return; + + if (isObjectType(key)) { + // Allow array and array-like accessors + bs = [key]; + } else { + key = String(key); + if (key.indexOf('..') !== -1) { + return handleArrayIndexRange(obj, key, any, val); + } + bs = key.split('['); + } + + set = isDefined(val); + + for (var i = 0, blen = bs.length; i < blen; i++) { + ps = bs[i]; + + if (isString(ps)) { + ps = periodSplit(ps); + } + + for (var j = 0, plen = ps.length; j < plen; j++) { + key = ps[j]; + + // Is this the last key? + isLast = i === blen - 1 && j === plen - 1; + + // Index of the closing ] + cbi = key.indexOf(']'); + + // Is the key an array index? + isIndex = cbi !== -1; + + // Is this array push syntax "[]"? + isPush = set && cbi === 0; + + // If the bracket split was successful and this is the last element + // in the dot split, then we know the next key will be an array index. + nextIsIndex = blen > 1 && j === plen - 1; + + if (isPush) { + // Set the index to the end of the array + key = ns.length; + } else if (isIndex) { + // Remove the closing ] + key = key.slice(0, -1); + } + + // If the array index is less than 0, then + // add its length to allow negative indexes. + if (isIndex && key < 0) { + key = +key + ns.length; + } + + // Bracket keys may look like users[5] or just [5], so the leading + // characters are optional. We can enter the namespace if this is the + // 2nd part, if there is only 1 part, or if there is an explicit key. + if (i || key || blen === 1) { + + // TODO: need to be sure this check handles ''.length when + // we refactor. + exists = any ? key in Object(ns) : hasOwn(ns, key); + + // Non-existent namespaces are only filled if they are intermediate + // (not at the end) or explicitly filling the last. + if (fill && (!isLast || fillLast) && !exists) { + // For our purposes, last only needs to be an array. + ns = ns[key] = nextIsIndex || (fillLast && isLast) ? [] : {}; + continue; + } + + if (has) { + if (isLast || !exists) { + return exists; + } + } else if (set && isLast) { + assertWritable(ns); + ns[key] = val; + } + + ns = exists ? ns[key] : undefined; + } + + } + } + return ns; + } + + // Get object property with support for 0..1 style range notation. + function handleArrayIndexRange(obj, key, any, val) { + var match, start, end, leading, trailing, arr, set; + match = key.match(PROPERTY_RANGE_REG); + if (!match) { + return; + } + + set = isDefined(val); + leading = match[1]; + + if (leading) { + arr = handleDeepProperty(obj, leading, any, false, set ? true : false, true); + } else { + arr = obj; + } + + assertArray(arr); + + trailing = match[4]; + start = match[2] ? +match[2] : 0; + end = match[3] ? +match[3] : arr.length; + + // A range of 0..1 is inclusive, so we need to add 1 to the end. If this + // pushes the index from -1 to 0, then set it to the full length of the + // array, otherwise it will return nothing. + end = end === -1 ? arr.length : end + 1; + + if (set) { + for (var i = start; i < end; i++) { + handleDeepProperty(arr, i + trailing, any, false, true, false, val); + } + } else { + arr = arr.slice(start, end); + + // If there are trailing properties, then they need to be mapped for each + // element in the array. + if (trailing) { + if (trailing.charAt(0) === HALF_WIDTH_PERIOD) { + // Need to chomp the period if one is trailing after the range. We + // can't do this at the regex level because it will be required if + // we're setting the value as it needs to be concatentated together + // with the array index to be set. + trailing = trailing.slice(1); + } + return map(arr, function(el) { + return handleDeepProperty(el, trailing); + }); + } + } + return arr; + } + + function getOwnKey(obj, key) { + if (hasOwn(obj, key)) { + return key; + } + } + + function hasProperty(obj, prop) { + return !isPrimitive(obj) && prop in obj; + } + + function isObjectType(obj, type) { + return !!obj && (type || typeof obj) === 'object'; + } + + function isPrimitive(obj, type) { + type = type || typeof obj; + return obj == null || type === 'string' || type === 'number' || type === 'boolean'; + } + + function isPlainObject(obj, className) { + return isObjectType(obj) && + isClass(obj, 'Object', className) && + hasValidPlainObjectPrototype(obj) && + hasOwnEnumeratedProperties(obj); + } + + function hasValidPlainObjectPrototype(obj) { + var hasToString = 'toString' in obj; + var hasConstructor = 'constructor' in obj; + // An object created with Object.create(null) has no methods in the + // prototype chain, so check if any are missing. The additional hasToString + // check is for false positives on some host objects in old IE which have + // toString but no constructor. If the object has an inherited constructor, + // then check if it is Object (the "isPrototypeOf" tapdance here is a more + // robust way of ensuring this if the global has been hijacked). Note that + // accessing the constructor directly (without "in" or "hasOwnProperty") + // will throw a permissions error in IE8 on cross-domain windows. + return (!hasConstructor && !hasToString) || + (hasConstructor && !hasOwn(obj, 'constructor') && + hasOwn(obj.constructor.prototype, 'isPrototypeOf')); + } + + function hasOwnEnumeratedProperties(obj) { + // Plain objects are generally defined as having enumerated properties + // all their own, however in early IE environments without defineProperty, + // there may also be enumerated methods in the prototype chain, so check + // for both of these cases. + var objectProto = Object.prototype; + for (var key in obj) { + var val = obj[key]; + if (!hasOwn(obj, key) && val !== objectProto[key]) { + return false; + } + } + return true; + } + + function simpleRepeat(n, fn) { + for (var i = 0; i < n; i++) { + fn(i); + } + } + + function simpleClone(obj) { + return simpleMerge({}, obj); + } + + // TODO: Use Object.assign here going forward. + function simpleMerge(target, source) { + forEachProperty(source, function(val, key) { + target[key] = val; + }); + return target; + } + + // Make primtives types like strings into objects. + function coercePrimitiveToObject(obj) { + if (isPrimitive(obj)) { + obj = Object(obj); + } + // istanbul ignore next + if (NO_KEYS_IN_STRING_OBJECTS && isString(obj)) { + forceStringCoercion(obj); + } + return obj; + } + + // Force strings to have their indexes set in + // environments that don't do this automatically. + // istanbul ignore next + function forceStringCoercion(obj) { + var i = 0, chr; + while (chr = obj.charAt(i)) { + obj[i++] = chr; + } + } + + // Equality helpers + + // Perf + function isEqual(a, b, stack) { + var aClass, bClass; + if (a === b) { + // Return quickly up front when matched by reference, + // but be careful about 0 !== -0. + return a !== 0 || 1 / a === 1 / b; + } + aClass = classToString(a); + bClass = classToString(b); + if (aClass !== bClass) { + return false; + } + + if (isSerializable(a, aClass) && isSerializable(b, bClass)) { + return objectIsEqual(a, b, aClass, stack); + } else if (isSet(a, aClass) && isSet(b, bClass)) { + return a.size === b.size && isEqual(setToArray(a), setToArray(b), stack); + } else if (isMap(a, aClass) && isMap(b, bClass)) { + return a.size === b.size && isEqual(mapToArray(a), mapToArray(b), stack); + } else if (isError(a, aClass) && isError(b, bClass)) { + return a.toString() === b.toString(); + } + + return false; + } + + // Perf + function objectIsEqual(a, b, aClass, stack) { + var aType = typeof a, bType = typeof b, propsEqual, count; + if (aType !== bType) { + return false; + } + if (isObjectType(a.valueOf())) { + if (a.length !== b.length) { + // perf: Quickly returning up front for arrays. + return false; + } + count = 0; + propsEqual = true; + iterateWithCyclicCheck(a, false, stack, function(key, val, cyc, stack) { + if (!cyc && (!(key in b) || !isEqual(val, b[key], stack))) { + propsEqual = false; + } + count++; + return propsEqual; + }); + if (!propsEqual || count !== getKeys(b).length) { + return false; + } + } + // Stringifying the value handles NaN, wrapped primitives, dates, and errors in one go. + return a.valueOf().toString() === b.valueOf().toString(); + } + + // Serializes an object in a way that will provide a token unique + // to the type, class, and value of an object. Host objects, class + // instances etc, are not serializable, and are held in an array + // of references that will return the index as a unique identifier + // for the object. This array is passed from outside so that the + // calling function can decide when to dispose of this array. + function serializeInternal(obj, refs, stack) { + var type = typeof obj, sign = '', className, value, ref; + + // Return up front on + if (1 / obj === -Infinity) { + sign = '-'; + } + + // Return quickly for primitives to save cycles + if (isPrimitive(obj, type) && !isRealNaN(obj)) { + return type + sign + obj; + } + + className = classToString(obj); + + if (!isSerializable(obj, className)) { + ref = indexOf(refs, obj); + if (ref === -1) { + ref = refs.length; + refs.push(obj); + } + return ref; + } else if (isObjectType(obj)) { + value = serializeDeep(obj, refs, stack) + obj.toString(); + } else if (obj.valueOf) { + value = obj.valueOf(); + } + return type + className + sign + value; + } + + function serializeDeep(obj, refs, stack) { + var result = ''; + iterateWithCyclicCheck(obj, true, stack, function(key, val, cyc, stack) { + result += cyc ? 'CYC' : key + serializeInternal(val, refs, stack); + }); + return result; + } + + function iterateWithCyclicCheck(obj, sortedKeys, stack, fn) { + + function next(val, key) { + var cyc = false; + + // Allowing a step into the structure before triggering this check to save + // cycles on standard JSON structures and also to try as hard as possible to + // catch basic properties that may have been modified. + if (stack.length > 1) { + var i = stack.length; + while (i--) { + if (stack[i] === val) { + cyc = true; + } + } + } + + stack.push(val); + fn(key, val, cyc, stack); + stack.pop(); + } + + function iterateWithSortedKeys() { + // Sorted keys is required for serialization, where object order + // does not matter but stringified order does. + var arr = getKeys(obj).sort(), key; + for (var i = 0; i < arr.length; i++) { + key = arr[i]; + next(obj[key], arr[i]); + } + } + + // This method for checking for cyclic structures was egregiously stolen from + // the ingenious method by @kitcambridge from the Underscore script: + // https://github.com/documentcloud/underscore/issues/240 + if (!stack) { + stack = []; + } + + if (sortedKeys) { + iterateWithSortedKeys(); + } else { + forEachProperty(obj, next); + } + } + + + // Array helpers + + function isArrayIndex(n) { + return n >>> 0 == n && n != 0xFFFFFFFF; + } + + function iterateOverSparseArray(arr, fn, fromIndex, loop) { + var indexes = getSparseArrayIndexes(arr, fromIndex, loop), index; + for (var i = 0, len = indexes.length; i < len; i++) { + index = indexes[i]; + fn.call(arr, arr[index], index, arr); + } + return arr; + } + + // It's unclear whether or not sparse arrays qualify as "simple enumerables". + // If they are not, however, the wrapping function will be deoptimized, so + // isolate here (also to share between es5 and array modules). + function getSparseArrayIndexes(arr, fromIndex, loop, fromRight) { + var indexes = [], i; + for (i in arr) { + // istanbul ignore next + if (isArrayIndex(i) && (loop || (fromRight ? i <= fromIndex : i >= fromIndex))) { + indexes.push(+i); + } + } + indexes.sort(function(a, b) { + var aLoop = a > fromIndex; + var bLoop = b > fromIndex; + // This block cannot be reached unless ES5 methods are being shimmed. + // istanbul ignore if + if (aLoop !== bLoop) { + return aLoop ? -1 : 1; + } + return a - b; + }); + return indexes; + } + + function getEntriesForIndexes(obj, find, loop, isString) { + var result, length = obj.length; + if (!isArray(find)) { + return entryAtIndex(obj, find, length, loop, isString); + } + result = new Array(find.length); + forEach(find, function(index, i) { + result[i] = entryAtIndex(obj, index, length, loop, isString); + }); + return result; + } + + function getNormalizedIndex(index, length, loop) { + if (index && loop) { + index = index % length; + } + if (index < 0) index = length + index; + return index; + } + + function entryAtIndex(obj, index, length, loop, isString) { + index = getNormalizedIndex(index, length, loop); + return isString ? obj.charAt(index) : obj[index]; + } + + function mapWithShortcuts(el, f, context, mapArgs) { + if (!f) { + return el; + } else if (f.apply) { + return f.apply(context, mapArgs); + } else if (isArray(f)) { + return map(f, function(m) { + return mapWithShortcuts(el, m, context, mapArgs); + }); + } else if (isFunction(el[f])) { + return el[f].call(el); + } else { + return deepGetProperty(el, f, true); + } + } + + function spaceSplit(str) { + return str.split(' '); + } + + function commaSplit(str) { + return str.split(HALF_WIDTH_COMMA); + } + + function periodSplit(str) { + return str.split(HALF_WIDTH_PERIOD); + } + + function forEach(arr, fn) { + for (var i = 0, len = arr.length; i < len; i++) { + if (!(i in arr)) { + return iterateOverSparseArray(arr, fn, i); + } + fn(arr[i], i); + } + } + + function filter(arr, fn) { + var result = []; + for (var i = 0, len = arr.length; i < len; i++) { + var el = arr[i]; + if (i in arr && fn(el, i)) { + result.push(el); + } + } + return result; + } + + function map(arr, fn) { + // perf: Not using fixed array len here as it may be sparse. + var result = []; + for (var i = 0, len = arr.length; i < len; i++) { + if (i in arr) { + result.push(fn(arr[i], i)); + } + } + return result; + } + + function indexOf(arr, el) { + for (var i = 0, len = arr.length; i < len; i++) { + if (i in arr && arr[i] === el) return i; + } + return -1; + } + + // Number helpers + + // istanbul ignore next + var trunc = Math.trunc || function(n) { + if (n === 0 || !isFinite(n)) return n; + return n < 0 ? ceil(n) : floor(n); + }; + + function isRealNaN(obj) { + // This is only true of NaN + return obj != null && obj !== obj; + } + + function withPrecision(val, precision, fn) { + var multiplier = pow(10, abs(precision || 0)); + fn = fn || round; + if (precision < 0) multiplier = 1 / multiplier; + return fn(val * multiplier) / multiplier; + } + + function padNumber(num, place, sign, base, replacement) { + var str = abs(num).toString(base || 10); + str = repeatString(replacement || '0', place - str.replace(/\.\d+/, '').length) + str; + if (sign || num < 0) { + str = (num < 0 ? '-' : '+') + str; + } + return str; + } + + function getOrdinalSuffix(num) { + if (num >= 11 && num <= 13) { + return 'th'; + } else { + switch(num % 10) { + case 1: return 'st'; + case 2: return 'nd'; + case 3: return 'rd'; + default: return 'th'; + } + } + } + + // Fullwidth number helpers + var fullWidthNumberReg, fullWidthNumberMap, fullWidthNumbers; + + function buildFullWidthNumber() { + var fwp = FULL_WIDTH_PERIOD, hwp = HALF_WIDTH_PERIOD, hwc = HALF_WIDTH_COMMA, fwn = ''; + fullWidthNumberMap = {}; + for (var i = 0, digit; i <= 9; i++) { + digit = chr(i + FULL_WIDTH_ZERO); + fwn += digit; + fullWidthNumberMap[digit] = chr(i + HALF_WIDTH_ZERO); + } + fullWidthNumberMap[hwc] = ''; + fullWidthNumberMap[fwp] = hwp; + // Mapping this to itself to capture it easily + // in stringToNumber to detect decimals later. + fullWidthNumberMap[hwp] = hwp; + fullWidthNumberReg = allCharsReg(fwn + fwp + hwc + hwp); + fullWidthNumbers = fwn; + } + + // Takes into account full-width characters, commas, and decimals. + function stringToNumber(str, base) { + var sanitized, isDecimal; + sanitized = str.replace(fullWidthNumberReg, function(chr) { + var replacement = getOwn(fullWidthNumberMap, chr); + if (replacement === HALF_WIDTH_PERIOD) { + isDecimal = true; + } + return replacement; + }); + return isDecimal ? parseFloat(sanitized) : parseInt(sanitized, base || 10); + } + + // Math aliases + var abs = Math.abs, + pow = Math.pow, + min = Math.min, + max = Math.max, + ceil = Math.ceil, + floor = Math.floor, + round = Math.round; + + + // String helpers + + var chr = String.fromCharCode; + + function trim(str) { + return str.trim(); + } + + function repeatString(str, num) { + var result = ''; + str = str.toString(); + while (num > 0) { + if (num & 1) { + result += str; + } + if (num >>= 1) { + str += str; + } + } + return result; + } + + function simpleCapitalize(str) { + return str.charAt(0).toUpperCase() + str.slice(1); + } + + function createFormatMatcher(bracketMatcher, percentMatcher, precheck) { + + var reg = STRING_FORMAT_REG; + var compileMemoized = memoizeFunction(compile); + + function getToken(format, match) { + var get, token, literal, fn; + var bKey = match[2]; + var pLit = match[3]; + var pKey = match[5]; + if (match[4] && percentMatcher) { + token = pKey; + get = percentMatcher; + } else if (bKey) { + token = bKey; + get = bracketMatcher; + } else if (pLit && percentMatcher) { + literal = pLit; + } else { + literal = match[1] || match[0]; + } + if (get) { + assertPassesPrecheck(precheck, bKey, pKey); + fn = function(obj, opt) { + return get(obj, token, opt); + }; + } + format.push(fn || getLiteral(literal)); + } + + function getSubstring(format, str, start, end) { + if (end > start) { + var sub = str.slice(start, end); + assertNoUnmatched(sub, OPEN_BRACE); + assertNoUnmatched(sub, CLOSE_BRACE); + format.push(function() { + return sub; + }); + } + } + + function getLiteral(str) { + return function() { + return str; + }; + } + + function assertPassesPrecheck(precheck, bt, pt) { + if (precheck && !precheck(bt, pt)) { + throw new TypeError('Invalid token '+ (bt || pt) +' in format string'); + } + } + + function assertNoUnmatched(str, chr) { + if (str.indexOf(chr) !== -1) { + throw new TypeError('Unmatched '+ chr +' in format string'); + } + } + + function compile(str) { + var format = [], lastIndex = 0, match; + reg.lastIndex = 0; + while(match = reg.exec(str)) { + getSubstring(format, str, lastIndex, match.index); + getToken(format, match); + lastIndex = reg.lastIndex; + } + getSubstring(format, str, lastIndex, str.length); + return format; + } + + return function(str, obj, opt) { + var format = compileMemoized(str), result = ''; + for (var i = 0; i < format.length; i++) { + result += format[i](obj, opt); + } + return result; + }; + } + + // Inflection helper + + var Inflections = {}; + + function getAcronym(str) { + // istanbul ignore next + return Inflections.acronyms && Inflections.acronyms.find(str); + } + + function getHumanWord(str) { + // istanbul ignore next + return Inflections.human && Inflections.human.find(str); + } + + function runHumanRules(str) { + // istanbul ignore next + return Inflections.human && Inflections.human.runRules(str) || str; + } + + // RegExp helpers + + function allCharsReg(src) { + return RegExp('[' + src + ']', 'g'); + } + + function getRegExpFlags(reg, add) { + var flags = ''; + add = add || ''; + function checkFlag(prop, flag) { + if (prop || add.indexOf(flag) > -1) { + flags += flag; + } + } + checkFlag(reg.global, 'g'); + checkFlag(reg.ignoreCase, 'i'); + checkFlag(reg.multiline, 'm'); + checkFlag(reg.sticky, 'y'); + return flags; + } + + function escapeRegExp(str) { + if (!isString(str)) str = String(str); + return str.replace(/([\\/'*+?|()[\]{}.^$-])/g,'\\$1'); + } + + // Date helpers + + var _utc = privatePropertyAccessor('utc'); + + function callDateGet(d, method) { + return d['get' + (_utc(d) ? 'UTC' : '') + method](); + } + + function callDateSet(d, method, value, safe) { + // "Safe" denotes not setting the date if the value is the same as what is + // currently set. In theory this should be a noop, however it will cause + // timezone shifts when in the middle of a DST fallback. This is unavoidable + // as the notation itself is ambiguous (i.e. there are two "1:00ams" on + // November 1st, 2015 in northern hemisphere timezones that follow DST), + // however when advancing or rewinding dates this can throw off calculations + // so avoiding this unintentional shifting on an opt-in basis. + if (safe && value === callDateGet(d, method, value)) { + return; + } + d['set' + (_utc(d) ? 'UTC' : '') + method](value); + } + + // Memoization helpers + + var INTERNAL_MEMOIZE_LIMIT = 1000; + + // Note that attemps to consolidate this with Function#memoize + // ended up clunky as that is also serializing arguments. Separating + // these implementations turned out to be simpler. + function memoizeFunction(fn) { + var memo = {}, counter = 0; + + return function(key) { + if (hasOwn(memo, key)) { + return memo[key]; + } + // istanbul ignore if + if (counter === INTERNAL_MEMOIZE_LIMIT) { + memo = {}; + counter = 0; + } + counter++; + return memo[key] = fn(key); + }; + } + + // ES6 helpers + + function setToArray(set) { + var arr = new Array(set.size), i = 0; + set.forEach(function(val) { + arr[i++] = val; + }); + return arr; + } + + function mapToArray(map) { + var arr = new Array(map.size), i = 0; + map.forEach(function(val, key) { + arr[i++] = [key, val]; + }); + return arr; + } + + buildClassChecks(); + buildFullWidthNumber(); + + /*** + * @module ES5 + * @description Functions and polyfill methods that fix ES5 functionality. This + * module is excluded from default builds, and can be included if + * you need legacy browser support (IE8 and below). + * + ***/ + + // Non-enumerable properties on Object.prototype. In early JScript implementations + // (< IE9) these will shadow object properties and break for..in loops. + var DONT_ENUM_PROPS = [ + 'valueOf', + 'toString', + 'constructor', + 'isPrototypeOf', + 'hasOwnProperty', + 'toLocaleString', + 'propertyIsEnumerable' + ]; + + /*** + * @fix + * @short Fixes DontEnum bug for iteration methods in < IE9. + ***/ + function buildDontEnumFix() { + if (!({toString:1}).propertyIsEnumerable('toString')) { + var forEachEnumerableProperty = forEachProperty; + forEachProperty = function(obj, fn) { + forEachEnumerableProperty(obj, fn); + for (var i = 0, key; key = DONT_ENUM_PROPS[i]; i++) { + if (hasOwn(obj, key)) { + if(fn.call(obj, obj[key], key, obj) === false) break; + } + } + }; + } + } + + /*** + * @fix + * @short Adds native methods to chainables in < IE9. + ***/ + function buildChainableNativeMethodsFix() { + if (!Object.getOwnPropertyNames) { + defineNativeMethodsOnChainable(); + } + } + + // Polyfilled methods will automatically be added to the chainable prototype. + // However, Object.getOwnPropertyNames cannot be shimmed for non-enumerable + // properties, so if it does not exist, then the only way to access native + // methods previous to ES5 is to provide them as a list of tokens here. + function defineNativeMethodsOnChainable() { + + var nativeTokens = { + 'Function': 'apply,call', + 'RegExp': 'compile,exec,test', + 'Number': 'toExponential,toFixed,toLocaleString,toPrecision', + 'Object': 'hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString', + 'Array': 'concat,join,pop,push,reverse,shift,slice,sort,splice,toLocaleString,unshift', + 'Date': 'getTime,getTimezoneOffset,setTime,toDateString,toGMTString,toLocaleDateString,toLocaleString,toLocaleTimeString,toTimeString,toUTCString', + 'String': 'anchor,big,blink,bold,charAt,charCodeAt,concat,fixed,fontcolor,fontsize,indexOf,italics,lastIndexOf,link,localeCompare,match,replace,search,slice,small,split,strike,sub,substr,substring,sup,toLocaleLowerCase,toLocaleUpperCase,toLowerCase,toUpperCase' + }; + + var dateTokens = 'FullYear,Month,Date,Hours,Minutes,Seconds,Milliseconds'.split(','); + + function addDateTokens(prefix, arr) { + for (var i = 0; i < dateTokens.length; i++) { + arr.push(prefix + dateTokens[i]); + } + } + + forEachProperty(nativeTokens, function(str, name) { + var tokens = str.split(','); + if (name === 'Date') { + addDateTokens('get', tokens); + addDateTokens('set', tokens); + addDateTokens('getUTC', tokens); + addDateTokens('setUTC', tokens); + } + tokens.push('toString'); + mapNativeToChainable(name, tokens); + }); + + } + + + buildDontEnumFix(); + buildChainableNativeMethodsFix(); + + + /*** @namespace Object ***/ + + function assertNonNull(obj) { + if (obj == null) { + throw new TypeError('Object required'); + } + } + + defineStaticPolyfill(sugarObject, { + + 'keys': function(obj) { + var keys = []; + assertNonNull(obj); + forEachProperty(coercePrimitiveToObject(obj), function(val, key) { + keys.push(key); + }); + return keys; + } + + }); + + + /*** @namespace Array ***/ + + function arrayIndexOf(arr, search, fromIndex, fromRight) { + var length = arr.length, defaultFromIndex, index, increment; + + increment = fromRight ? -1 : 1; + defaultFromIndex = fromRight ? length - 1 : 0; + fromIndex = trunc(fromIndex); + if (!fromIndex && fromIndex !== 0) { + fromIndex = defaultFromIndex; + } + if (fromIndex < 0) { + fromIndex = length + fromIndex; + } + if ((!fromRight && fromIndex < 0) || (fromRight && fromIndex >= length)) { + fromIndex = defaultFromIndex; + } + + index = fromIndex; + + while((fromRight && index >= 0) || (!fromRight && index < length)) { + if (!(index in arr)) { + return sparseIndexOf(arr, search, fromIndex, fromRight); + } + if (isArrayIndex(index) && arr[index] === search) { + return index; + } + index += increment; + } + return -1; + } + + function sparseIndexOf(arr, search, fromIndex, fromRight) { + var indexes = getSparseArrayIndexes(arr, fromIndex, false, fromRight), index; + indexes.sort(function(a, b) { + return fromRight ? b - a : a - b; + }); + while ((index = indexes.shift()) !== undefined) { + if (arr[index] === search) { + return +index; + } + } + return -1; + } + + function arrayReduce(arr, fn, initialValue, fromRight) { + var length = arr.length, count = 0, defined = isDefined(initialValue), result, index; + assertCallable(fn); + if (length == 0 && !defined) { + throw new TypeError('Reduce called on empty array with no initial value'); + } else if (defined) { + result = initialValue; + } else { + result = arr[fromRight ? length - 1 : count]; + count++; + } + while(count < length) { + index = fromRight ? length - count - 1 : count; + if (index in arr) { + result = fn(result, arr[index], index, arr); + } + count++; + } + return result; + } + + defineStaticPolyfill(sugarArray, { + + /*** + * + * @method isArray(obj) + * @returns Boolean + * @polyfill ES5 + * @static + * @short Returns true if `obj` is an Array. + * + * @example + * + * Array.isArray(3) -> false + * Array.isArray(true) -> false + * Array.isArray('wasabi') -> false + * Array.isArray([1,2,3]) -> true + * + ***/ + 'isArray': function(obj) { + return isArray(obj); + } + + }); + + defineInstancePolyfill(sugarArray, { + + 'every': function(fn) { + // Force compiler to respect argument length. + var argLen = arguments.length, context = arguments[1]; + var length = this.length, index = 0; + assertCallable(fn); + while(index < length) { + if (index in this && !fn.call(context, this[index], index, this)) { + return false; + } + index++; + } + return true; + }, + + 'some': function(fn) { + // Force compiler to respect argument length. + var argLen = arguments.length, context = arguments[1]; + var length = this.length, index = 0; + assertCallable(fn); + while(index < length) { + if (index in this && fn.call(context, this[index], index, this)) { + return true; + } + index++; + } + return false; + }, + + 'map': function(fn) { + // Force compiler to respect argument length. + var argLen = arguments.length, context = arguments[1]; + var length = this.length, index = 0, result = new Array(length); + assertCallable(fn); + while(index < length) { + if (index in this) { + result[index] = fn.call(context, this[index], index, this); + } + index++; + } + return result; + }, + + 'filter': function(fn) { + // Force compiler to respect argument length. + var argLen = arguments.length, context = arguments[1]; + var length = this.length, index = 0, result = []; + assertCallable(fn); + while(index < length) { + if (index in this && fn.call(context, this[index], index, this)) { + result.push(this[index]); + } + index++; + } + return result; + }, + + /*** + * @method indexOf(search, [fromIndex] = 0) + * @returns Number + * @polyfill ES5 + * @short Searches the array and returns the first index where `search` occurs, + * or `-1` if the element is not found. + * @extra [fromIndex] is the index from which to begin the search. This + * method performs a simple strict equality comparison on `search`. + * Sugar does not enhance this method to support `enhanced matching`. + * For such functionality, use the `findIndex` method instead. + * + * @example + * + * [1,2,3].indexOf(3) -> 1 + * [1,2,3].indexOf(7) -> -1 + * + ***/ + 'indexOf': function(search) { + // Force compiler to respect argument length. + var argLen = arguments.length, fromIndex = arguments[1]; + if (isString(this)) return this.indexOf(search, fromIndex); + return arrayIndexOf(this, search, fromIndex); + }, + + /*** + * @method lastIndexOf(search, [fromIndex] = array.length - 1) + * @returns Number + * @polyfill ES5 + * @short Searches the array from the end and returns the first index where + * `search` occurs, or `-1` if the element is not found. + * @extra [fromIndex] is the index from which to begin the search. This method + * performs a simple strict equality comparison on `search`. + * Sugar does not enhance this method to support `enhanced matching`. + * + * @example + * + * [1,2,1].lastIndexOf(1) -> 2 + * [1,2,1].lastIndexOf(7) -> -1 + * + ***/ + 'lastIndexOf': function(search) { + // Force compiler to respect argument length. + var argLen = arguments.length, fromIndex = arguments[1]; + if (isString(this)) return this.lastIndexOf(search, fromIndex); + return arrayIndexOf(this, search, fromIndex, true); + }, + + /*** + * @method forEach([eachFn], [context]) + * @polyfill ES5 + * @short Iterates over the array, calling [eachFn] on each loop. + * @extra [context] becomes the `this` object. + * + * @callback eachFn + * + * el The element of the current iteration. + * i The index of the current iteration. + * arr A reference to the array. + * + * @example + * + * ['a','b','c'].forEach(function(a) { + * // Called 3 times: 'a','b','c' + * }); + * + ***/ + 'forEach': function(eachFn) { + // Force compiler to respect argument length. + var argLen = arguments.length, context = arguments[1]; + var length = this.length, index = 0; + assertCallable(eachFn); + while(index < length) { + if (index in this) { + eachFn.call(context, this[index], index, this); + } + index++; + } + }, + + /*** + * @method reduce(reduceFn, [init]) + * @returns Mixed + * @polyfill ES5 + * @short Reduces the array to a single result. + * @extra This operation is sometimes called "accumulation", as it takes the + * result of the last iteration of `reduceFn` and passes it as the first + * argument to the next iteration, "accumulating" that value as it goes. + * The return value of this method will be the return value of the final + * iteration of `reduceFn`. If [init] is passed, it will be the initial + * "accumulator" (the first argument). If [init] is not passed, then it + * will take the first element in the array, and `reduceFn` will not be + * called for that element. + * + * @callback reduceFn + * + * acc The "accumulator". Either [init], the result of the last iteration + * of `reduceFn`, or the first element of the array. + * el The current element for this iteration. + * idx The current index for this iteration. + * arr A reference to the array. + * + * @example + * + * [1,2,3].reduce(function(a, b) { + * return a - b; // 1 - 2 - 3 + * }); + * + * [1,2,3].reduce(function(a, b) { + * return a - b; // 100 - 1 - 2 - 3 + * }, 100); + * + ***/ + 'reduce': function(reduceFn) { + // Force compiler to respect argument length. + var argLen = arguments.length, context = arguments[1]; + return arrayReduce(this, reduceFn, context); + }, + + /*** + * @method reduceRight([reduceFn], [init]) + * @returns Mixed + * @polyfill ES5 + * @short Similar to `Array#reduce`, but operates on the elements in reverse. + * + * @callback reduceFn + * + * acc The "accumulator", either [init], the result of the last iteration + * of `reduceFn`, or the last element of the array. + * el The current element for this iteration. + * idx The current index for this iteration. + * arr A reference to the array. + * + * @example + * + * [1,2,3].reduceRight(function(a, b) { + * return a - b; // 3 - 2 - 1 + * }); + * + * [1,2,3].reduceRight(function(a, b) { + * return a - b; // 100 - 3 - 2 - 1 + * }, 100); + * + * + ***/ + 'reduceRight': function(reduceFn) { + // Force compiler to respect argument length. + var argLen = arguments.length, context = arguments[1]; + return arrayReduce(this, reduceFn, context, true); + } + + }); + + + /*** @namespace String ***/ + + var TRIM_REG = RegExp('^[' + TRIM_CHARS + ']+|['+ TRIM_CHARS +']+$', 'g'); + + defineInstancePolyfill(sugarString, { + /*** + * @method trim() + * @returns String + * @polyfill ES5 + * @short Removes leading and trailing whitespace from the string. + * @extra Whitespace is defined as line breaks, tabs, and any character in the + * "Space, Separator" Unicode category, conforming to the the ES5 spec. + * + * @example + * + * ' wasabi '.trim() -> 'wasabi' + * ' wasabi '.trimLeft() -> 'wasabi ' + * ' wasabi '.trimRight() -> ' wasabi' + * + ***/ + 'trim': function() { + return this.toString().replace(TRIM_REG, ''); + } + }); + + + /*** @namespace Function ***/ + + defineInstancePolyfill(sugarFunction, { + + /*** + * @method bind(context, [arg1], ...) + * @returns Function + * @polyfill ES5 + * @short Binds `context` as the `this` object for the function when it is + * called. Also allows currying an unlimited number of parameters. + * @extra "currying" means setting parameters ([arg1], [arg2], etc.) ahead of + * time so that they are passed when the function is called later. If + * you pass additional parameters when the function is actually called, + * they will be added to the end of the curried parameters. + * + * @example + * + * logThis.bind('woof')() -> logs 'woof' as its this object + * addArgs.bind(1, 2, 3)() -> returns 5 with 1 as the this object + * addArgs.bind(1)(2, 3, 4) -> returns 9 + * + ***/ + 'bind': function(context) { + // Optimized: no leaking arguments + var boundArgs = []; for(var $i = 1, $len = arguments.length; $i < $len; $i++) boundArgs.push(arguments[$i]); + var fn = this, bound; + assertCallable(this); + bound = function() { + // Optimized: no leaking arguments + var args = []; for(var $i = 0, $len = arguments.length; $i < $len; $i++) args.push(arguments[$i]); + return fn.apply(fn.prototype && this instanceof fn ? this : context, boundArgs.concat(args)); + }; + bound.prototype = this.prototype; + return bound; + } + + }); + + + /*** @namespace Date ***/ + + defineStaticPolyfill(sugarDate, { + + /*** + * @method now() + * @returns String + * @polyfill ES5 + * @static + * @short Returns the current time as a Unix timestamp. + * @extra The number of milliseconds since January 1st, 1970 00:00:00 (UTC). + * + * @example + * + * Date.now() -> ex. 1311938296231 + * + ***/ + 'now': function() { + return new Date().getTime(); + } + + }); + + function hasISOSupport() { + var d = new Date(Date.UTC(2000, 0)); + return !!d.toISOString && d.toISOString() === '2000-01-01T00:00:00.000Z'; + } + + defineInstancePolyfill(sugarDate, { + + /*** + * @method toISOString() + * @returns String + * @polyfill ES5 + * @short Formats the string to ISO8601 format. + * @extra This will always format as UTC time. + * + * @example + * + * Date.create().toISOString() -> ex. 2011-07-05 12:24:55.528Z + * + ***/ + 'toISOString': function() { + return padNumber(this.getUTCFullYear(), 4) + '-' + + padNumber(this.getUTCMonth() + 1, 2) + '-' + + padNumber(this.getUTCDate(), 2) + 'T' + + padNumber(this.getUTCHours(), 2) + ':' + + padNumber(this.getUTCMinutes(), 2) + ':' + + padNumber(this.getUTCSeconds(), 2) + '.' + + padNumber(this.getUTCMilliseconds(), 3) + 'Z'; + }, + + /*** + * @method toJSON([key]) + * @returns String + * @polyfill ES5 + * @short Returns a JSON representation of the date. + * @extra This is effectively an alias for `toISOString`. Will always return + * the date in UTC time. [key] is ignored. + * + * @example + * + * Date.create().toJSON() -> ex. 2011-07-05 12:24:55.528Z + * + ***/ + 'toJSON': function(key) { + // Force compiler to respect argument length. + var argLen = arguments.length; + return this.toISOString(key); + } + + }, !hasISOSupport()); + +}).call(this); +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/allCharsReg.js": +/*!****************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/allCharsReg.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function allCharsReg(src) { + return RegExp('[' + src + ']', 'g'); +} + +module.exports = allCharsReg; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/callDateGet.js": +/*!****************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/callDateGet.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _utc = __webpack_require__(/*! ../var/_utc */ "./node_modules/sugar-date/common/var/_utc.js"); + +function callDateGet(d, method) { + return d['get' + (_utc(d) ? 'UTC' : '') + method](); +} + +module.exports = callDateGet; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/callDateSet.js": +/*!****************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/callDateSet.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _utc = __webpack_require__(/*! ../var/_utc */ "./node_modules/sugar-date/common/var/_utc.js"), + callDateGet = __webpack_require__(/*! ./callDateGet */ "./node_modules/sugar-date/common/internal/callDateGet.js"); + +function callDateSet(d, method, value, safe) { + // "Safe" denotes not setting the date if the value is the same as what is + // currently set. In theory this should be a noop, however it will cause + // timezone shifts when in the middle of a DST fallback. This is unavoidable + // as the notation itself is ambiguous (i.e. there are two "1:00ams" on + // November 1st, 2015 in northern hemisphere timezones that follow DST), + // however when advancing or rewinding dates this can throw off calculations + // so avoiding this unintentional shifting on an opt-in basis. + if (safe && value === callDateGet(d, method, value)) { + return; + } + d['set' + (_utc(d) ? 'UTC' : '') + method](value); +} + +module.exports = callDateSet; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/collectSimilarMethods.js": +/*!**************************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/collectSimilarMethods.js ***! + \**************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var forEach = __webpack_require__(/*! ./forEach */ "./node_modules/sugar-date/common/internal/forEach.js"), + spaceSplit = __webpack_require__(/*! ./spaceSplit */ "./node_modules/sugar-date/common/internal/spaceSplit.js"), + classChecks = __webpack_require__(/*! ../var/classChecks */ "./node_modules/sugar-date/common/var/classChecks.js"); + +var isString = classChecks.isString; + +function collectSimilarMethods(set, fn) { + var methods = {}; + if (isString(set)) { + set = spaceSplit(set); + } + forEach(set, function(el, i) { + fn(methods, el, i); + }); + return methods; +} + +module.exports = collectSimilarMethods; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/commaSplit.js": +/*!***************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/commaSplit.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var CommonChars = __webpack_require__(/*! ../var/CommonChars */ "./node_modules/sugar-date/common/var/CommonChars.js"); + +var HALF_WIDTH_COMMA = CommonChars.HALF_WIDTH_COMMA; + +function commaSplit(str) { + return str.split(HALF_WIDTH_COMMA); +} + +module.exports = commaSplit; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/createFormatMatcher.js": +/*!************************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/createFormatMatcher.js ***! + \************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var STRING_FORMAT_REG = __webpack_require__(/*! ../var/STRING_FORMAT_REG */ "./node_modules/sugar-date/common/var/STRING_FORMAT_REG.js"), + CommonChars = __webpack_require__(/*! ../var/CommonChars */ "./node_modules/sugar-date/common/var/CommonChars.js"), + memoizeFunction = __webpack_require__(/*! ./memoizeFunction */ "./node_modules/sugar-date/common/internal/memoizeFunction.js"); + +var OPEN_BRACE = CommonChars.OPEN_BRACE, + CLOSE_BRACE = CommonChars.CLOSE_BRACE; + +function createFormatMatcher(bracketMatcher, percentMatcher, precheck) { + + var reg = STRING_FORMAT_REG; + var compileMemoized = memoizeFunction(compile); + + function getToken(format, match) { + var get, token, literal, fn; + var bKey = match[2]; + var pLit = match[3]; + var pKey = match[5]; + if (match[4] && percentMatcher) { + token = pKey; + get = percentMatcher; + } else if (bKey) { + token = bKey; + get = bracketMatcher; + } else if (pLit && percentMatcher) { + literal = pLit; + } else { + literal = match[1] || match[0]; + } + if (get) { + assertPassesPrecheck(precheck, bKey, pKey); + fn = function(obj, opt) { + return get(obj, token, opt); + }; + } + format.push(fn || getLiteral(literal)); + } + + function getSubstring(format, str, start, end) { + if (end > start) { + var sub = str.slice(start, end); + assertNoUnmatched(sub, OPEN_BRACE); + assertNoUnmatched(sub, CLOSE_BRACE); + format.push(function() { + return sub; + }); + } + } + + function getLiteral(str) { + return function() { + return str; + }; + } + + function assertPassesPrecheck(precheck, bt, pt) { + if (precheck && !precheck(bt, pt)) { + throw new TypeError('Invalid token '+ (bt || pt) +' in format string'); + } + } + + function assertNoUnmatched(str, chr) { + if (str.indexOf(chr) !== -1) { + throw new TypeError('Unmatched '+ chr +' in format string'); + } + } + + function compile(str) { + var format = [], lastIndex = 0, match; + reg.lastIndex = 0; + while(match = reg.exec(str)) { + getSubstring(format, str, lastIndex, match.index); + getToken(format, match); + lastIndex = reg.lastIndex; + } + getSubstring(format, str, lastIndex, str.length); + return format; + } + + return function(str, obj, opt) { + var format = compileMemoized(str), result = ''; + for (var i = 0; i < format.length; i++) { + result += format[i](obj, opt); + } + return result; + }; +} + +module.exports = createFormatMatcher; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/defineAccessor.js": +/*!*******************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/defineAccessor.js ***! + \*******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var coreUtilityAliases = __webpack_require__(/*! ../var/coreUtilityAliases */ "./node_modules/sugar-date/common/var/coreUtilityAliases.js"); + +var setProperty = coreUtilityAliases.setProperty; + +function defineAccessor(namespace, name, fn) { + setProperty(namespace, name, fn); +} + +module.exports = defineAccessor; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/defineInstanceSimilar.js": +/*!**************************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/defineInstanceSimilar.js ***! + \**************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var methodDefineAliases = __webpack_require__(/*! ../var/methodDefineAliases */ "./node_modules/sugar-date/common/var/methodDefineAliases.js"), + collectSimilarMethods = __webpack_require__(/*! ./collectSimilarMethods */ "./node_modules/sugar-date/common/internal/collectSimilarMethods.js"); + +var defineInstance = methodDefineAliases.defineInstance; + +function defineInstanceSimilar(sugarNamespace, set, fn, flags) { + defineInstance(sugarNamespace, collectSimilarMethods(set, fn), flags); +} + +module.exports = defineInstanceSimilar; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/defineOnPrototype.js": +/*!**********************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/defineOnPrototype.js ***! + \**********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var coreUtilityAliases = __webpack_require__(/*! ../var/coreUtilityAliases */ "./node_modules/sugar-date/common/var/coreUtilityAliases.js"); + +var forEachProperty = coreUtilityAliases.forEachProperty; + +function defineOnPrototype(ctor, methods) { + var proto = ctor.prototype; + forEachProperty(methods, function(val, key) { + proto[key] = val; + }); +} + +module.exports = defineOnPrototype; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/defineOptionsAccessor.js": +/*!**************************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/defineOptionsAccessor.js ***! + \**************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var simpleClone = __webpack_require__(/*! ./simpleClone */ "./node_modules/sugar-date/common/internal/simpleClone.js"), + defineAccessor = __webpack_require__(/*! ./defineAccessor */ "./node_modules/sugar-date/common/internal/defineAccessor.js"), + coreUtilityAliases = __webpack_require__(/*! ../var/coreUtilityAliases */ "./node_modules/sugar-date/common/var/coreUtilityAliases.js"); + +var forEachProperty = coreUtilityAliases.forEachProperty; + +function defineOptionsAccessor(namespace, defaults) { + var obj = simpleClone(defaults); + + function getOption(name) { + return obj[name]; + } + + function setOption(arg1, arg2) { + var options; + if (arguments.length === 1) { + options = arg1; + } else { + options = {}; + options[arg1] = arg2; + } + forEachProperty(options, function(val, name) { + if (val === null) { + val = defaults[name]; + } + obj[name] = val; + }); + } + + defineAccessor(namespace, 'getOption', getOption); + defineAccessor(namespace, 'setOption', setOption); + return getOption; +} + +module.exports = defineOptionsAccessor; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/escapeRegExp.js": +/*!*****************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/escapeRegExp.js ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var classChecks = __webpack_require__(/*! ../var/classChecks */ "./node_modules/sugar-date/common/var/classChecks.js"); + +var isString = classChecks.isString; + +function escapeRegExp(str) { + if (!isString(str)) str = String(str); + return str.replace(/([\\/'*+?|()[\]{}.^$-])/g,'\\$1'); +} + +module.exports = escapeRegExp; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/filter.js": +/*!***********************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/filter.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function filter(arr, fn) { + var result = []; + for (var i = 0, len = arr.length; i < len; i++) { + var el = arr[i]; + if (i in arr && fn(el, i)) { + result.push(el); + } + } + return result; +} + +module.exports = filter; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/forEach.js": +/*!************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/forEach.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var iterateOverSparseArray = __webpack_require__(/*! ./iterateOverSparseArray */ "./node_modules/sugar-date/common/internal/iterateOverSparseArray.js"); + +function forEach(arr, fn) { + for (var i = 0, len = arr.length; i < len; i++) { + if (!(i in arr)) { + return iterateOverSparseArray(arr, fn, i); + } + fn(arr[i], i); + } +} + +module.exports = forEach; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/getKeys.js": +/*!************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/getKeys.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function getKeys(obj) { + return Object.keys(obj); +} + +module.exports = getKeys; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/getOrdinalSuffix.js": +/*!*********************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/getOrdinalSuffix.js ***! + \*********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function getOrdinalSuffix(num) { + if (num >= 11 && num <= 13) { + return 'th'; + } else { + switch(num % 10) { + case 1: return 'st'; + case 2: return 'nd'; + case 3: return 'rd'; + default: return 'th'; + } + } +} + +module.exports = getOrdinalSuffix; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/getOwnKey.js": +/*!**************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/getOwnKey.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var coreUtilityAliases = __webpack_require__(/*! ../var/coreUtilityAliases */ "./node_modules/sugar-date/common/var/coreUtilityAliases.js"); + +var hasOwn = coreUtilityAliases.hasOwn; + +function getOwnKey(obj, key) { + if (hasOwn(obj, key)) { + return key; + } +} + +module.exports = getOwnKey; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/getSparseArrayIndexes.js": +/*!**************************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/getSparseArrayIndexes.js ***! + \**************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var isArrayIndex = __webpack_require__(/*! ./isArrayIndex */ "./node_modules/sugar-date/common/internal/isArrayIndex.js"); + +function getSparseArrayIndexes(arr, fromIndex, loop, fromRight) { + var indexes = [], i; + for (i in arr) { + // istanbul ignore next + if (isArrayIndex(i) && (loop || (fromRight ? i <= fromIndex : i >= fromIndex))) { + indexes.push(+i); + } + } + indexes.sort(function(a, b) { + var aLoop = a > fromIndex; + var bLoop = b > fromIndex; + // This block cannot be reached unless ES5 methods are being shimmed. + // istanbul ignore if + if (aLoop !== bLoop) { + return aLoop ? -1 : 1; + } + return a - b; + }); + return indexes; +} + +module.exports = getSparseArrayIndexes; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/hasOwnEnumeratedProperties.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/hasOwnEnumeratedProperties.js ***! + \*******************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var coreUtilityAliases = __webpack_require__(/*! ../var/coreUtilityAliases */ "./node_modules/sugar-date/common/var/coreUtilityAliases.js"); + +var hasOwn = coreUtilityAliases.hasOwn; + +function hasOwnEnumeratedProperties(obj) { + // Plain objects are generally defined as having enumerated properties + // all their own, however in early IE environments without defineProperty, + // there may also be enumerated methods in the prototype chain, so check + // for both of these cases. + var objectProto = Object.prototype; + for (var key in obj) { + var val = obj[key]; + if (!hasOwn(obj, key) && val !== objectProto[key]) { + return false; + } + } + return true; +} + +module.exports = hasOwnEnumeratedProperties; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/hasValidPlainObjectPrototype.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/hasValidPlainObjectPrototype.js ***! + \*********************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var coreUtilityAliases = __webpack_require__(/*! ../var/coreUtilityAliases */ "./node_modules/sugar-date/common/var/coreUtilityAliases.js"); + +var hasOwn = coreUtilityAliases.hasOwn; + +function hasValidPlainObjectPrototype(obj) { + var hasToString = 'toString' in obj; + var hasConstructor = 'constructor' in obj; + // An object created with Object.create(null) has no methods in the + // prototype chain, so check if any are missing. The additional hasToString + // check is for false positives on some host objects in old IE which have + // toString but no constructor. If the object has an inherited constructor, + // then check if it is Object (the "isPrototypeOf" tapdance here is a more + // robust way of ensuring this if the global has been hijacked). Note that + // accessing the constructor directly (without "in" or "hasOwnProperty") + // will throw a permissions error in IE8 on cross-domain windows. + return (!hasConstructor && !hasToString) || + (hasConstructor && !hasOwn(obj, 'constructor') && + hasOwn(obj.constructor.prototype, 'isPrototypeOf')); +} + +module.exports = hasValidPlainObjectPrototype; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/isArrayIndex.js": +/*!*****************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/isArrayIndex.js ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function isArrayIndex(n) { + return n >>> 0 == n && n != 0xFFFFFFFF; +} + +module.exports = isArrayIndex; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/isClass.js": +/*!************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/isClass.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var coreUtilityAliases = __webpack_require__(/*! ../var/coreUtilityAliases */ "./node_modules/sugar-date/common/var/coreUtilityAliases.js"); + +var classToString = coreUtilityAliases.classToString; + +function isClass(obj, className, str) { + if (!str) { + str = classToString(obj); + } + return str === '[object '+ className +']'; +} + +module.exports = isClass; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/isDefined.js": +/*!**************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/isDefined.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function isDefined(o) { + return o !== undefined; +} + +module.exports = isDefined; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/isObjectType.js": +/*!*****************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/isObjectType.js ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function isObjectType(obj, type) { + return !!obj && (type || typeof obj) === 'object'; +} + +module.exports = isObjectType; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/isPlainObject.js": +/*!******************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/isPlainObject.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var isClass = __webpack_require__(/*! ./isClass */ "./node_modules/sugar-date/common/internal/isClass.js"), + isObjectType = __webpack_require__(/*! ./isObjectType */ "./node_modules/sugar-date/common/internal/isObjectType.js"), + hasOwnEnumeratedProperties = __webpack_require__(/*! ./hasOwnEnumeratedProperties */ "./node_modules/sugar-date/common/internal/hasOwnEnumeratedProperties.js"), + hasValidPlainObjectPrototype = __webpack_require__(/*! ./hasValidPlainObjectPrototype */ "./node_modules/sugar-date/common/internal/hasValidPlainObjectPrototype.js"); + +function isPlainObject(obj, className) { + return isObjectType(obj) && + isClass(obj, 'Object', className) && + hasValidPlainObjectPrototype(obj) && + hasOwnEnumeratedProperties(obj); +} + +module.exports = isPlainObject; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/isUndefined.js": +/*!****************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/isUndefined.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function isUndefined(o) { + return o === undefined; +} + +module.exports = isUndefined; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/iterateOverSparseArray.js": +/*!***************************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/iterateOverSparseArray.js ***! + \***************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var getSparseArrayIndexes = __webpack_require__(/*! ./getSparseArrayIndexes */ "./node_modules/sugar-date/common/internal/getSparseArrayIndexes.js"); + +function iterateOverSparseArray(arr, fn, fromIndex, loop) { + var indexes = getSparseArrayIndexes(arr, fromIndex, loop), index; + for (var i = 0, len = indexes.length; i < len; i++) { + index = indexes[i]; + fn.call(arr, arr[index], index, arr); + } + return arr; +} + +module.exports = iterateOverSparseArray; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/map.js": +/*!********************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/map.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function map(arr, fn) { + // perf: Not using fixed array len here as it may be sparse. + var result = []; + for (var i = 0, len = arr.length; i < len; i++) { + if (i in arr) { + result.push(fn(arr[i], i)); + } + } + return result; +} + +module.exports = map; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/memoizeFunction.js": +/*!********************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/memoizeFunction.js ***! + \********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var INTERNAL_MEMOIZE_LIMIT = __webpack_require__(/*! ../var/INTERNAL_MEMOIZE_LIMIT */ "./node_modules/sugar-date/common/var/INTERNAL_MEMOIZE_LIMIT.js"), + coreUtilityAliases = __webpack_require__(/*! ../var/coreUtilityAliases */ "./node_modules/sugar-date/common/var/coreUtilityAliases.js"); + +var hasOwn = coreUtilityAliases.hasOwn; + +function memoizeFunction(fn) { + var memo = {}, counter = 0; + + return function(key) { + if (hasOwn(memo, key)) { + return memo[key]; + } + // istanbul ignore if + if (counter === INTERNAL_MEMOIZE_LIMIT) { + memo = {}; + counter = 0; + } + counter++; + return memo[key] = fn(key); + }; +} + +module.exports = memoizeFunction; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/padNumber.js": +/*!**************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/padNumber.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var mathAliases = __webpack_require__(/*! ../var/mathAliases */ "./node_modules/sugar-date/common/var/mathAliases.js"), + repeatString = __webpack_require__(/*! ./repeatString */ "./node_modules/sugar-date/common/internal/repeatString.js"); + +var abs = mathAliases.abs; + +function padNumber(num, place, sign, base, replacement) { + var str = abs(num).toString(base || 10); + str = repeatString(replacement || '0', place - str.replace(/\.\d+/, '').length) + str; + if (sign || num < 0) { + str = (num < 0 ? '-' : '+') + str; + } + return str; +} + +module.exports = padNumber; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/periodSplit.js": +/*!****************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/periodSplit.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var CommonChars = __webpack_require__(/*! ../var/CommonChars */ "./node_modules/sugar-date/common/var/CommonChars.js"); + +var HALF_WIDTH_PERIOD = CommonChars.HALF_WIDTH_PERIOD; + +function periodSplit(str) { + return str.split(HALF_WIDTH_PERIOD); +} + +module.exports = periodSplit; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/privatePropertyAccessor.js": +/*!****************************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/privatePropertyAccessor.js ***! + \****************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var PRIVATE_PROP_PREFIX = __webpack_require__(/*! ../var/PRIVATE_PROP_PREFIX */ "./node_modules/sugar-date/common/var/PRIVATE_PROP_PREFIX.js"), + coreUtilityAliases = __webpack_require__(/*! ../var/coreUtilityAliases */ "./node_modules/sugar-date/common/var/coreUtilityAliases.js"); + +var setProperty = coreUtilityAliases.setProperty; + +function privatePropertyAccessor(key) { + var privateKey = PRIVATE_PROP_PREFIX + key; + return function(obj, val) { + if (arguments.length > 1) { + setProperty(obj, privateKey, val); + return obj; + } + return obj[privateKey]; + }; +} + +module.exports = privatePropertyAccessor; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/repeatString.js": +/*!*****************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/repeatString.js ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function repeatString(str, num) { + var result = ''; + str = str.toString(); + while (num > 0) { + if (num & 1) { + result += str; + } + if (num >>= 1) { + str += str; + } + } + return result; +} + +module.exports = repeatString; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/setChainableConstructor.js": +/*!****************************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/setChainableConstructor.js ***! + \****************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function setChainableConstructor(sugarNamespace, createFn) { + sugarNamespace.prototype.constructor = function() { + return createFn.apply(this, arguments); + }; +} + +module.exports = setChainableConstructor; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/simpleCapitalize.js": +/*!*********************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/simpleCapitalize.js ***! + \*********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function simpleCapitalize(str) { + return str.charAt(0).toUpperCase() + str.slice(1); +} + +module.exports = simpleCapitalize; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/simpleClone.js": +/*!****************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/simpleClone.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var simpleMerge = __webpack_require__(/*! ./simpleMerge */ "./node_modules/sugar-date/common/internal/simpleMerge.js"); + +function simpleClone(obj) { + return simpleMerge({}, obj); +} + +module.exports = simpleClone; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/simpleMerge.js": +/*!****************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/simpleMerge.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var coreUtilityAliases = __webpack_require__(/*! ../var/coreUtilityAliases */ "./node_modules/sugar-date/common/var/coreUtilityAliases.js"); + +var forEachProperty = coreUtilityAliases.forEachProperty; + +function simpleMerge(target, source) { + forEachProperty(source, function(val, key) { + target[key] = val; + }); + return target; +} + +module.exports = simpleMerge; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/spaceSplit.js": +/*!***************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/spaceSplit.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function spaceSplit(str) { + return str.split(' '); +} + +module.exports = spaceSplit; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/trim.js": +/*!*********************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/trim.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function trim(str) { + return str.trim(); +} + +module.exports = trim; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/withPrecision.js": +/*!******************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/withPrecision.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var mathAliases = __webpack_require__(/*! ../var/mathAliases */ "./node_modules/sugar-date/common/var/mathAliases.js"); + +var abs = mathAliases.abs, + pow = mathAliases.pow, + round = mathAliases.round; + +function withPrecision(val, precision, fn) { + var multiplier = pow(10, abs(precision || 0)); + fn = fn || round; + if (precision < 0) multiplier = 1 / multiplier; + return fn(val * multiplier) / multiplier; +} + +module.exports = withPrecision; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/internal/wrapNamespace.js": +/*!******************************************************************!*\ + !*** ./node_modules/sugar-date/common/internal/wrapNamespace.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function wrapNamespace(method) { + return function(sugarNamespace, arg1, arg2) { + sugarNamespace[method](arg1, arg2); + }; +} + +module.exports = wrapNamespace; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/var/CommonChars.js": +/*!***********************************************************!*\ + !*** ./node_modules/sugar-date/common/var/CommonChars.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = { + HALF_WIDTH_ZERO: 0x30, + FULL_WIDTH_ZERO: 0xff10, + HALF_WIDTH_PERIOD: '.', + FULL_WIDTH_PERIOD: '.', + HALF_WIDTH_COMMA: ',', + OPEN_BRACE: '{', + CLOSE_BRACE: '}' +}; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/var/INTERNAL_MEMOIZE_LIMIT.js": +/*!**********************************************************************!*\ + !*** ./node_modules/sugar-date/common/var/INTERNAL_MEMOIZE_LIMIT.js ***! + \**********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = 1000; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/var/NATIVE_TYPES.js": +/*!************************************************************!*\ + !*** ./node_modules/sugar-date/common/var/NATIVE_TYPES.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = 'Boolean Number String Date RegExp Function Array Error Set Map'; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/var/PRIVATE_PROP_PREFIX.js": +/*!*******************************************************************!*\ + !*** ./node_modules/sugar-date/common/var/PRIVATE_PROP_PREFIX.js ***! + \*******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = '_sugar_'; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/var/STRING_FORMAT_REG.js": +/*!*****************************************************************!*\ + !*** ./node_modules/sugar-date/common/var/STRING_FORMAT_REG.js ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = /([{}])\1|{([^}]*)}|(%)%|(%(\w*))/g; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/var/_utc.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/common/var/_utc.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var privatePropertyAccessor = __webpack_require__(/*! ../internal/privatePropertyAccessor */ "./node_modules/sugar-date/common/internal/privatePropertyAccessor.js"); + +module.exports = privatePropertyAccessor('utc'); + +/***/ }), + +/***/ "./node_modules/sugar-date/common/var/chr.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/common/var/chr.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = String.fromCharCode; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/var/classChecks.js": +/*!***********************************************************!*\ + !*** ./node_modules/sugar-date/common/var/classChecks.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var NATIVE_TYPES = __webpack_require__(/*! ./NATIVE_TYPES */ "./node_modules/sugar-date/common/var/NATIVE_TYPES.js"), + forEach = __webpack_require__(/*! ../internal/forEach */ "./node_modules/sugar-date/common/internal/forEach.js"), + isClass = __webpack_require__(/*! ../internal/isClass */ "./node_modules/sugar-date/common/internal/isClass.js"), + spaceSplit = __webpack_require__(/*! ../internal/spaceSplit */ "./node_modules/sugar-date/common/internal/spaceSplit.js"), + isPlainObject = __webpack_require__(/*! ../internal/isPlainObject */ "./node_modules/sugar-date/common/internal/isPlainObject.js"); + +var isSerializable, + isBoolean, isNumber, isString, + isDate, isRegExp, isFunction, + isArray, isSet, isMap, isError; + +function buildClassChecks() { + + var knownTypes = {}; + + function addCoreTypes() { + + var names = spaceSplit(NATIVE_TYPES); + + isBoolean = buildPrimitiveClassCheck(names[0]); + isNumber = buildPrimitiveClassCheck(names[1]); + isString = buildPrimitiveClassCheck(names[2]); + + isDate = buildClassCheck(names[3]); + isRegExp = buildClassCheck(names[4]); + + // Wanted to enhance performance here by using simply "typeof" + // but Firefox has two major issues that make this impossible, + // one fixed, the other not, so perform a full class check here. + // + // 1. Regexes can be typeof "function" in FF < 3 + // https://bugzilla.mozilla.org/show_bug.cgi?id=61911 (fixed) + // + // 2. HTMLEmbedElement and HTMLObjectElement are be typeof "function" + // https://bugzilla.mozilla.org/show_bug.cgi?id=268945 (won't fix) + isFunction = buildClassCheck(names[5]); + + // istanbul ignore next + isArray = Array.isArray || buildClassCheck(names[6]); + isError = buildClassCheck(names[7]); + + isSet = buildClassCheck(names[8], typeof Set !== 'undefined' && Set); + isMap = buildClassCheck(names[9], typeof Map !== 'undefined' && Map); + + // Add core types as known so that they can be checked by value below, + // notably excluding Functions and adding Arguments and Error. + addKnownType('Arguments'); + addKnownType(names[0]); + addKnownType(names[1]); + addKnownType(names[2]); + addKnownType(names[3]); + addKnownType(names[4]); + addKnownType(names[6]); + + } + + function addArrayTypes() { + var types = 'Int8 Uint8 Uint8Clamped Int16 Uint16 Int32 Uint32 Float32 Float64'; + forEach(spaceSplit(types), function(str) { + addKnownType(str + 'Array'); + }); + } + + function addKnownType(className) { + var str = '[object '+ className +']'; + knownTypes[str] = true; + } + + function isKnownType(className) { + return knownTypes[className]; + } + + function buildClassCheck(className, globalObject) { + // istanbul ignore if + if (globalObject && isClass(new globalObject, 'Object')) { + return getConstructorClassCheck(globalObject); + } else { + return getToStringClassCheck(className); + } + } + + // Map and Set may be [object Object] in certain IE environments. + // In this case we need to perform a check using the constructor + // instead of Object.prototype.toString. + // istanbul ignore next + function getConstructorClassCheck(obj) { + var ctorStr = String(obj); + return function(obj) { + return String(obj.constructor) === ctorStr; + }; + } + + function getToStringClassCheck(className) { + return function(obj, str) { + // perf: Returning up front on instanceof appears to be slower. + return isClass(obj, className, str); + }; + } + + function buildPrimitiveClassCheck(className) { + var type = className.toLowerCase(); + return function(obj) { + var t = typeof obj; + return t === type || t === 'object' && isClass(obj, className); + }; + } + + addCoreTypes(); + addArrayTypes(); + + isSerializable = function(obj, className) { + // Only known objects can be serialized. This notably excludes functions, + // host objects, Symbols (which are matched by reference), and instances + // of classes. The latter can arguably be matched by value, but + // distinguishing between these and host objects -- which should never be + // compared by value -- is very tricky so not dealing with it here. + return isKnownType(className) || isPlainObject(obj, className); + }; + +} + +buildClassChecks(); + +module.exports = { + isSerializable: isSerializable, + isBoolean: isBoolean, + isNumber: isNumber, + isString: isString, + isDate: isDate, + isRegExp: isRegExp, + isFunction: isFunction, + isArray: isArray, + isSet: isSet, + isMap: isMap, + isError: isError +}; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/var/coreUtilityAliases.js": +/*!******************************************************************!*\ + !*** ./node_modules/sugar-date/common/var/coreUtilityAliases.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +module.exports = { + hasOwn: Sugar.util.hasOwn, + getOwn: Sugar.util.getOwn, + setProperty: Sugar.util.setProperty, + classToString: Sugar.util.classToString, + defineProperty: Sugar.util.defineProperty, + forEachProperty: Sugar.util.forEachProperty, + mapNativeToChainable: Sugar.util.mapNativeToChainable +}; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/var/fullwidthNumberHelpers.js": +/*!**********************************************************************!*\ + !*** ./node_modules/sugar-date/common/var/fullwidthNumberHelpers.js ***! + \**********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var CommonChars = __webpack_require__(/*! ./CommonChars */ "./node_modules/sugar-date/common/var/CommonChars.js"), + chr = __webpack_require__(/*! ./chr */ "./node_modules/sugar-date/common/var/chr.js"), + allCharsReg = __webpack_require__(/*! ../internal/allCharsReg */ "./node_modules/sugar-date/common/internal/allCharsReg.js"); + +var HALF_WIDTH_ZERO = CommonChars.HALF_WIDTH_ZERO, + FULL_WIDTH_ZERO = CommonChars.FULL_WIDTH_ZERO, + HALF_WIDTH_PERIOD = CommonChars.HALF_WIDTH_PERIOD, + FULL_WIDTH_PERIOD = CommonChars.FULL_WIDTH_PERIOD, + HALF_WIDTH_COMMA = CommonChars.HALF_WIDTH_COMMA; + +var fullWidthNumberReg, fullWidthNumberMap, fullWidthNumbers; + +function buildFullWidthNumber() { + var fwp = FULL_WIDTH_PERIOD, hwp = HALF_WIDTH_PERIOD, hwc = HALF_WIDTH_COMMA, fwn = ''; + fullWidthNumberMap = {}; + for (var i = 0, digit; i <= 9; i++) { + digit = chr(i + FULL_WIDTH_ZERO); + fwn += digit; + fullWidthNumberMap[digit] = chr(i + HALF_WIDTH_ZERO); + } + fullWidthNumberMap[hwc] = ''; + fullWidthNumberMap[fwp] = hwp; + // Mapping this to itself to capture it easily + // in stringToNumber to detect decimals later. + fullWidthNumberMap[hwp] = hwp; + fullWidthNumberReg = allCharsReg(fwn + fwp + hwc + hwp); + fullWidthNumbers = fwn; +} + +buildFullWidthNumber(); + +module.exports = { + fullWidthNumberReg: fullWidthNumberReg, + fullWidthNumberMap: fullWidthNumberMap, + fullWidthNumbers: fullWidthNumbers +}; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/var/mathAliases.js": +/*!***********************************************************!*\ + !*** ./node_modules/sugar-date/common/var/mathAliases.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = { + abs: Math.abs, + pow: Math.pow, + min: Math.min, + max: Math.max, + ceil: Math.ceil, + floor: Math.floor, + round: Math.round +}; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/var/methodDefineAliases.js": +/*!*******************************************************************!*\ + !*** ./node_modules/sugar-date/common/var/methodDefineAliases.js ***! + \*******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var wrapNamespace = __webpack_require__(/*! ../internal/wrapNamespace */ "./node_modules/sugar-date/common/internal/wrapNamespace.js"); + +module.exports = { + alias: wrapNamespace('alias'), + defineStatic: wrapNamespace('defineStatic'), + defineInstance: wrapNamespace('defineInstance'), + defineStaticPolyfill: wrapNamespace('defineStaticPolyfill'), + defineInstancePolyfill: wrapNamespace('defineInstancePolyfill'), + defineInstanceAndStatic: wrapNamespace('defineInstanceAndStatic'), + defineInstanceWithArguments: wrapNamespace('defineInstanceWithArguments') +}; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/var/namespaceAliases.js": +/*!****************************************************************!*\ + !*** ./node_modules/sugar-date/common/var/namespaceAliases.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +module.exports = { + sugarObject: Sugar.Object, + sugarArray: Sugar.Array, + sugarDate: Sugar.Date, + sugarString: Sugar.String, + sugarNumber: Sugar.Number, + sugarFunction: Sugar.Function, + sugarRegExp: Sugar.RegExp +}; + +/***/ }), + +/***/ "./node_modules/sugar-date/common/var/trunc.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/common/var/trunc.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var mathAliases = __webpack_require__(/*! ./mathAliases */ "./node_modules/sugar-date/common/var/mathAliases.js"); + +var ceil = mathAliases.ceil, + floor = mathAliases.floor; + +var trunc = Math.trunc || function(n) { + if (n === 0 || !isFinite(n)) return n; + return n < 0 ? ceil(n) : floor(n); +}; + +module.exports = trunc; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/addDays.js": +/*!*************************************************!*\ + !*** ./node_modules/sugar-date/date/addDays.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.addDays; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/addHours.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/date/addHours.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.addHours; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/addLocale.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/date/addLocale.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + LocaleHelpers = __webpack_require__(/*! ./var/LocaleHelpers */ "./node_modules/sugar-date/date/var/LocaleHelpers.js"); + +var localeManager = LocaleHelpers.localeManager; + +Sugar.Date.defineStatic({ + + 'addLocale': function(code, set) { + return localeManager.add(code, set); + } + +}); + +module.exports = Sugar.Date.addLocale; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/addMilliseconds.js": +/*!*********************************************************!*\ + !*** ./node_modules/sugar-date/date/addMilliseconds.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.addMilliseconds; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/addMinutes.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/addMinutes.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.addMinutes; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/addMonths.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/date/addMonths.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.addMonths; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/addSeconds.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/addSeconds.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.addSeconds; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/addWeeks.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/date/addWeeks.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.addWeeks; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/addYears.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/date/addYears.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.addYears; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/advance.js": +/*!*************************************************!*\ + !*** ./node_modules/sugar-date/date/advance.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + advanceDateWithArgs = __webpack_require__(/*! ./internal/advanceDateWithArgs */ "./node_modules/sugar-date/date/internal/advanceDateWithArgs.js"); + +Sugar.Date.defineInstanceWithArguments({ + + 'advance': function(d, args) { + return advanceDateWithArgs(d, args, 1); + } + +}); + +module.exports = Sugar.Date.advance; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/beginningOfDay.js": +/*!********************************************************!*\ + !*** ./node_modules/sugar-date/date/beginningOfDay.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.beginningOfDay; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/beginningOfISOWeek.js": +/*!************************************************************!*\ + !*** ./node_modules/sugar-date/date/beginningOfISOWeek.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + resetTime = __webpack_require__(/*! ./internal/resetTime */ "./node_modules/sugar-date/date/internal/resetTime.js"), + getWeekday = __webpack_require__(/*! ./internal/getWeekday */ "./node_modules/sugar-date/date/internal/getWeekday.js"), + setWeekday = __webpack_require__(/*! ./internal/setWeekday */ "./node_modules/sugar-date/date/internal/setWeekday.js"); + +Sugar.Date.defineInstance({ + + 'beginningOfISOWeek': function(date) { + var day = getWeekday(date); + if (day === 0) { + day = -6; + } else if (day !== 1) { + day = 1; + } + setWeekday(date, day); + return resetTime(date); + } + +}); + +module.exports = Sugar.Date.beginningOfISOWeek; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/beginningOfMonth.js": +/*!**********************************************************!*\ + !*** ./node_modules/sugar-date/date/beginningOfMonth.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.beginningOfMonth; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/beginningOfWeek.js": +/*!*********************************************************!*\ + !*** ./node_modules/sugar-date/date/beginningOfWeek.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.beginningOfWeek; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/beginningOfYear.js": +/*!*********************************************************!*\ + !*** ./node_modules/sugar-date/date/beginningOfYear.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.beginningOfYear; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js": +/*!************************************************************************!*\ + !*** ./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js ***! + \************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var buildDateUnitMethods = __webpack_require__(/*! ../internal/buildDateUnitMethods */ "./node_modules/sugar-date/date/internal/buildDateUnitMethods.js"); + +buildDateUnitMethods(); + +/***/ }), + +/***/ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js": +/*!**************************************************************************!*\ + !*** ./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js ***! + \**************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var buildNumberUnitMethods = __webpack_require__(/*! ../internal/buildNumberUnitMethods */ "./node_modules/sugar-date/date/internal/buildNumberUnitMethods.js"); + +buildNumberUnitMethods(); + +/***/ }), + +/***/ "./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js": +/*!************************************************************************!*\ + !*** ./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js ***! + \************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var buildRelativeAliases = __webpack_require__(/*! ../internal/buildRelativeAliases */ "./node_modules/sugar-date/date/internal/buildRelativeAliases.js"); + +buildRelativeAliases(); + +/***/ }), + +/***/ "./node_modules/sugar-date/date/build/setDateChainableConstructorCall.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/sugar-date/date/build/setDateChainableConstructorCall.js ***! + \*******************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var setDateChainableConstructor = __webpack_require__(/*! ../internal/setDateChainableConstructor */ "./node_modules/sugar-date/date/internal/setDateChainableConstructor.js"); + +setDateChainableConstructor(); + +/***/ }), + +/***/ "./node_modules/sugar-date/date/clone.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/date/clone.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + cloneDate = __webpack_require__(/*! ./internal/cloneDate */ "./node_modules/sugar-date/date/internal/cloneDate.js"); + +Sugar.Date.defineInstance({ + + 'clone': function(date) { + return cloneDate(date); + } + +}); + +module.exports = Sugar.Date.clone; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/create.js": +/*!************************************************!*\ + !*** ./node_modules/sugar-date/date/create.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + createDate = __webpack_require__(/*! ./internal/createDate */ "./node_modules/sugar-date/date/internal/createDate.js"); + +__webpack_require__(/*! ./build/setDateChainableConstructorCall */ "./node_modules/sugar-date/date/build/setDateChainableConstructorCall.js"); + +Sugar.Date.defineStatic({ + + 'create': function(d, options) { + return createDate(d, options); + } + +}); + +module.exports = Sugar.Date.create; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/daysAgo.js": +/*!*************************************************!*\ + !*** ./node_modules/sugar-date/date/daysAgo.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.daysAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/daysFromNow.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/date/daysFromNow.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.daysFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/daysInMonth.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/date/daysInMonth.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + getDaysInMonth = __webpack_require__(/*! ./internal/getDaysInMonth */ "./node_modules/sugar-date/date/internal/getDaysInMonth.js"); + +Sugar.Date.defineInstance({ + + 'daysInMonth': function(date) { + return getDaysInMonth(date); + } + +}); + +module.exports = Sugar.Date.daysInMonth; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/daysSince.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/date/daysSince.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.daysSince; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/daysUntil.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/date/daysUntil.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.daysUntil; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/endOfDay.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/date/endOfDay.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.endOfDay; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/endOfISOWeek.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/date/endOfISOWeek.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + DateUnitIndexes = __webpack_require__(/*! ./var/DateUnitIndexes */ "./node_modules/sugar-date/date/var/DateUnitIndexes.js"), + getWeekday = __webpack_require__(/*! ./internal/getWeekday */ "./node_modules/sugar-date/date/internal/getWeekday.js"), + setWeekday = __webpack_require__(/*! ./internal/setWeekday */ "./node_modules/sugar-date/date/internal/setWeekday.js"), + moveToEndOfUnit = __webpack_require__(/*! ./internal/moveToEndOfUnit */ "./node_modules/sugar-date/date/internal/moveToEndOfUnit.js"); + +var DAY_INDEX = DateUnitIndexes.DAY_INDEX; + +Sugar.Date.defineInstance({ + + 'endOfISOWeek': function(date) { + if (getWeekday(date) !== 0) { + setWeekday(date, 7); + } + return moveToEndOfUnit(date, DAY_INDEX); + } + +}); + +module.exports = Sugar.Date.endOfISOWeek; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/endOfMonth.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/endOfMonth.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.endOfMonth; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/endOfWeek.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/date/endOfWeek.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.endOfWeek; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/endOfYear.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/date/endOfYear.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.endOfYear; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/format.js": +/*!************************************************!*\ + !*** ./node_modules/sugar-date/date/format.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + dateFormat = __webpack_require__(/*! ./internal/dateFormat */ "./node_modules/sugar-date/date/internal/dateFormat.js"); + +Sugar.Date.defineInstance({ + + 'format': function(date, f, localeCode) { + return dateFormat(date, f, localeCode); + } + +}); + +module.exports = Sugar.Date.format; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/get.js": +/*!*********************************************!*\ + !*** ./node_modules/sugar-date/date/get.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + createDateWithContext = __webpack_require__(/*! ./internal/createDateWithContext */ "./node_modules/sugar-date/date/internal/createDateWithContext.js"); + +Sugar.Date.defineInstance({ + + 'get': function(date, d, options) { + return createDateWithContext(date, d, options); + } + +}); + +module.exports = Sugar.Date.get; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/getAllLocaleCodes.js": +/*!***********************************************************!*\ + !*** ./node_modules/sugar-date/date/getAllLocaleCodes.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + LocaleHelpers = __webpack_require__(/*! ./var/LocaleHelpers */ "./node_modules/sugar-date/date/var/LocaleHelpers.js"), + getKeys = __webpack_require__(/*! ../common/internal/getKeys */ "./node_modules/sugar-date/common/internal/getKeys.js"); + +var localeManager = LocaleHelpers.localeManager; + +Sugar.Date.defineStatic({ + + 'getAllLocaleCodes': function() { + return getKeys(localeManager.getAll()); + } + +}); + +module.exports = Sugar.Date.getAllLocaleCodes; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/getAllLocales.js": +/*!*******************************************************!*\ + !*** ./node_modules/sugar-date/date/getAllLocales.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + LocaleHelpers = __webpack_require__(/*! ./var/LocaleHelpers */ "./node_modules/sugar-date/date/var/LocaleHelpers.js"); + +var localeManager = LocaleHelpers.localeManager; + +Sugar.Date.defineStatic({ + + 'getAllLocales': function() { + return localeManager.getAll(); + } + +}); + +module.exports = Sugar.Date.getAllLocales; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/getISOWeek.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/getISOWeek.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + getWeekNumber = __webpack_require__(/*! ./internal/getWeekNumber */ "./node_modules/sugar-date/date/internal/getWeekNumber.js"); + +Sugar.Date.defineInstance({ + + 'getISOWeek': function(date) { + return getWeekNumber(date, true); + } + +}); + +module.exports = Sugar.Date.getISOWeek; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/getLocale.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/date/getLocale.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + LocaleHelpers = __webpack_require__(/*! ./var/LocaleHelpers */ "./node_modules/sugar-date/date/var/LocaleHelpers.js"); + +var localeManager = LocaleHelpers.localeManager; + +Sugar.Date.defineStatic({ + + 'getLocale': function(code) { + return localeManager.get(code, !code); + } + +}); + +module.exports = Sugar.Date.getLocale; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/getOption.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/date/getOption.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + _dateOptions = __webpack_require__(/*! ./var/_dateOptions */ "./node_modules/sugar-date/date/var/_dateOptions.js"); + +module.exports = Sugar.Date.getOption; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/getUTCOffset.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/date/getUTCOffset.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + getUTCOffset = __webpack_require__(/*! ./internal/getUTCOffset */ "./node_modules/sugar-date/date/internal/getUTCOffset.js"); + +Sugar.Date.defineInstance({ + + 'getUTCOffset': function(date, iso) { + return getUTCOffset(date, iso); + } + +}); + +module.exports = Sugar.Date.getUTCOffset; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/getUTCWeekday.js": +/*!*******************************************************!*\ + !*** ./node_modules/sugar-date/date/getUTCWeekday.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +Sugar.Date.defineInstance({ + + 'getUTCWeekday': function(date) { + return date.getUTCDay(); + } + +}); + +module.exports = Sugar.Date.getUTCWeekday; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/getWeekday.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/getWeekday.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + getWeekday = __webpack_require__(/*! ./internal/getWeekday */ "./node_modules/sugar-date/date/internal/getWeekday.js"); + +Sugar.Date.defineInstance({ + + 'getWeekday': function(date) { + return getWeekday(date); + } + +}); + +module.exports = Sugar.Date.getWeekday; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/hoursAgo.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/date/hoursAgo.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.hoursAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/hoursFromNow.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/date/hoursFromNow.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.hoursFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/hoursSince.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/hoursSince.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.hoursSince; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/hoursUntil.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/hoursUntil.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.hoursUntil; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/index.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/date/index.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// Static Methods +__webpack_require__(/*! ./addLocale */ "./node_modules/sugar-date/date/addLocale.js"); +__webpack_require__(/*! ./create */ "./node_modules/sugar-date/date/create.js"); +__webpack_require__(/*! ./getAllLocaleCodes */ "./node_modules/sugar-date/date/getAllLocaleCodes.js"); +__webpack_require__(/*! ./getAllLocales */ "./node_modules/sugar-date/date/getAllLocales.js"); +__webpack_require__(/*! ./getLocale */ "./node_modules/sugar-date/date/getLocale.js"); +__webpack_require__(/*! ./removeLocale */ "./node_modules/sugar-date/date/removeLocale.js"); +__webpack_require__(/*! ./setLocale */ "./node_modules/sugar-date/date/setLocale.js"); + +// Instance Methods +__webpack_require__(/*! ../number/day */ "./node_modules/sugar-date/number/day.js"); +__webpack_require__(/*! ../number/dayAfter */ "./node_modules/sugar-date/number/dayAfter.js"); +__webpack_require__(/*! ../number/dayAgo */ "./node_modules/sugar-date/number/dayAgo.js"); +__webpack_require__(/*! ../number/dayBefore */ "./node_modules/sugar-date/number/dayBefore.js"); +__webpack_require__(/*! ../number/dayFromNow */ "./node_modules/sugar-date/number/dayFromNow.js"); +__webpack_require__(/*! ../number/days */ "./node_modules/sugar-date/number/days.js"); +__webpack_require__(/*! ../number/daysAfter */ "./node_modules/sugar-date/number/daysAfter.js"); +__webpack_require__(/*! ../number/daysAgo */ "./node_modules/sugar-date/number/daysAgo.js"); +__webpack_require__(/*! ../number/daysBefore */ "./node_modules/sugar-date/number/daysBefore.js"); +__webpack_require__(/*! ../number/daysFromNow */ "./node_modules/sugar-date/number/daysFromNow.js"); +__webpack_require__(/*! ../number/duration */ "./node_modules/sugar-date/number/duration.js"); +__webpack_require__(/*! ../number/hour */ "./node_modules/sugar-date/number/hour.js"); +__webpack_require__(/*! ../number/hourAfter */ "./node_modules/sugar-date/number/hourAfter.js"); +__webpack_require__(/*! ../number/hourAgo */ "./node_modules/sugar-date/number/hourAgo.js"); +__webpack_require__(/*! ../number/hourBefore */ "./node_modules/sugar-date/number/hourBefore.js"); +__webpack_require__(/*! ../number/hourFromNow */ "./node_modules/sugar-date/number/hourFromNow.js"); +__webpack_require__(/*! ../number/hours */ "./node_modules/sugar-date/number/hours.js"); +__webpack_require__(/*! ../number/hoursAfter */ "./node_modules/sugar-date/number/hoursAfter.js"); +__webpack_require__(/*! ../number/hoursAgo */ "./node_modules/sugar-date/number/hoursAgo.js"); +__webpack_require__(/*! ../number/hoursBefore */ "./node_modules/sugar-date/number/hoursBefore.js"); +__webpack_require__(/*! ../number/hoursFromNow */ "./node_modules/sugar-date/number/hoursFromNow.js"); +__webpack_require__(/*! ../number/millisecond */ "./node_modules/sugar-date/number/millisecond.js"); +__webpack_require__(/*! ../number/millisecondAfter */ "./node_modules/sugar-date/number/millisecondAfter.js"); +__webpack_require__(/*! ../number/millisecondAgo */ "./node_modules/sugar-date/number/millisecondAgo.js"); +__webpack_require__(/*! ../number/millisecondBefore */ "./node_modules/sugar-date/number/millisecondBefore.js"); +__webpack_require__(/*! ../number/millisecondFromNow */ "./node_modules/sugar-date/number/millisecondFromNow.js"); +__webpack_require__(/*! ../number/milliseconds */ "./node_modules/sugar-date/number/milliseconds.js"); +__webpack_require__(/*! ../number/millisecondsAfter */ "./node_modules/sugar-date/number/millisecondsAfter.js"); +__webpack_require__(/*! ../number/millisecondsAgo */ "./node_modules/sugar-date/number/millisecondsAgo.js"); +__webpack_require__(/*! ../number/millisecondsBefore */ "./node_modules/sugar-date/number/millisecondsBefore.js"); +__webpack_require__(/*! ../number/millisecondsFromNow */ "./node_modules/sugar-date/number/millisecondsFromNow.js"); +__webpack_require__(/*! ../number/minute */ "./node_modules/sugar-date/number/minute.js"); +__webpack_require__(/*! ../number/minuteAfter */ "./node_modules/sugar-date/number/minuteAfter.js"); +__webpack_require__(/*! ../number/minuteAgo */ "./node_modules/sugar-date/number/minuteAgo.js"); +__webpack_require__(/*! ../number/minuteBefore */ "./node_modules/sugar-date/number/minuteBefore.js"); +__webpack_require__(/*! ../number/minuteFromNow */ "./node_modules/sugar-date/number/minuteFromNow.js"); +__webpack_require__(/*! ../number/minutes */ "./node_modules/sugar-date/number/minutes.js"); +__webpack_require__(/*! ../number/minutesAfter */ "./node_modules/sugar-date/number/minutesAfter.js"); +__webpack_require__(/*! ../number/minutesAgo */ "./node_modules/sugar-date/number/minutesAgo.js"); +__webpack_require__(/*! ../number/minutesBefore */ "./node_modules/sugar-date/number/minutesBefore.js"); +__webpack_require__(/*! ../number/minutesFromNow */ "./node_modules/sugar-date/number/minutesFromNow.js"); +__webpack_require__(/*! ../number/month */ "./node_modules/sugar-date/number/month.js"); +__webpack_require__(/*! ../number/monthAfter */ "./node_modules/sugar-date/number/monthAfter.js"); +__webpack_require__(/*! ../number/monthAgo */ "./node_modules/sugar-date/number/monthAgo.js"); +__webpack_require__(/*! ../number/monthBefore */ "./node_modules/sugar-date/number/monthBefore.js"); +__webpack_require__(/*! ../number/monthFromNow */ "./node_modules/sugar-date/number/monthFromNow.js"); +__webpack_require__(/*! ../number/months */ "./node_modules/sugar-date/number/months.js"); +__webpack_require__(/*! ../number/monthsAfter */ "./node_modules/sugar-date/number/monthsAfter.js"); +__webpack_require__(/*! ../number/monthsAgo */ "./node_modules/sugar-date/number/monthsAgo.js"); +__webpack_require__(/*! ../number/monthsBefore */ "./node_modules/sugar-date/number/monthsBefore.js"); +__webpack_require__(/*! ../number/monthsFromNow */ "./node_modules/sugar-date/number/monthsFromNow.js"); +__webpack_require__(/*! ../number/second */ "./node_modules/sugar-date/number/second.js"); +__webpack_require__(/*! ../number/secondAfter */ "./node_modules/sugar-date/number/secondAfter.js"); +__webpack_require__(/*! ../number/secondAgo */ "./node_modules/sugar-date/number/secondAgo.js"); +__webpack_require__(/*! ../number/secondBefore */ "./node_modules/sugar-date/number/secondBefore.js"); +__webpack_require__(/*! ../number/secondFromNow */ "./node_modules/sugar-date/number/secondFromNow.js"); +__webpack_require__(/*! ../number/seconds */ "./node_modules/sugar-date/number/seconds.js"); +__webpack_require__(/*! ../number/secondsAfter */ "./node_modules/sugar-date/number/secondsAfter.js"); +__webpack_require__(/*! ../number/secondsAgo */ "./node_modules/sugar-date/number/secondsAgo.js"); +__webpack_require__(/*! ../number/secondsBefore */ "./node_modules/sugar-date/number/secondsBefore.js"); +__webpack_require__(/*! ../number/secondsFromNow */ "./node_modules/sugar-date/number/secondsFromNow.js"); +__webpack_require__(/*! ../number/week */ "./node_modules/sugar-date/number/week.js"); +__webpack_require__(/*! ../number/weekAfter */ "./node_modules/sugar-date/number/weekAfter.js"); +__webpack_require__(/*! ../number/weekAgo */ "./node_modules/sugar-date/number/weekAgo.js"); +__webpack_require__(/*! ../number/weekBefore */ "./node_modules/sugar-date/number/weekBefore.js"); +__webpack_require__(/*! ../number/weekFromNow */ "./node_modules/sugar-date/number/weekFromNow.js"); +__webpack_require__(/*! ../number/weeks */ "./node_modules/sugar-date/number/weeks.js"); +__webpack_require__(/*! ../number/weeksAfter */ "./node_modules/sugar-date/number/weeksAfter.js"); +__webpack_require__(/*! ../number/weeksAgo */ "./node_modules/sugar-date/number/weeksAgo.js"); +__webpack_require__(/*! ../number/weeksBefore */ "./node_modules/sugar-date/number/weeksBefore.js"); +__webpack_require__(/*! ../number/weeksFromNow */ "./node_modules/sugar-date/number/weeksFromNow.js"); +__webpack_require__(/*! ../number/year */ "./node_modules/sugar-date/number/year.js"); +__webpack_require__(/*! ../number/yearAfter */ "./node_modules/sugar-date/number/yearAfter.js"); +__webpack_require__(/*! ../number/yearAgo */ "./node_modules/sugar-date/number/yearAgo.js"); +__webpack_require__(/*! ../number/yearBefore */ "./node_modules/sugar-date/number/yearBefore.js"); +__webpack_require__(/*! ../number/yearFromNow */ "./node_modules/sugar-date/number/yearFromNow.js"); +__webpack_require__(/*! ../number/years */ "./node_modules/sugar-date/number/years.js"); +__webpack_require__(/*! ../number/yearsAfter */ "./node_modules/sugar-date/number/yearsAfter.js"); +__webpack_require__(/*! ../number/yearsAgo */ "./node_modules/sugar-date/number/yearsAgo.js"); +__webpack_require__(/*! ../number/yearsBefore */ "./node_modules/sugar-date/number/yearsBefore.js"); +__webpack_require__(/*! ../number/yearsFromNow */ "./node_modules/sugar-date/number/yearsFromNow.js"); +__webpack_require__(/*! ./addDays */ "./node_modules/sugar-date/date/addDays.js"); +__webpack_require__(/*! ./addHours */ "./node_modules/sugar-date/date/addHours.js"); +__webpack_require__(/*! ./addMilliseconds */ "./node_modules/sugar-date/date/addMilliseconds.js"); +__webpack_require__(/*! ./addMinutes */ "./node_modules/sugar-date/date/addMinutes.js"); +__webpack_require__(/*! ./addMonths */ "./node_modules/sugar-date/date/addMonths.js"); +__webpack_require__(/*! ./addSeconds */ "./node_modules/sugar-date/date/addSeconds.js"); +__webpack_require__(/*! ./addWeeks */ "./node_modules/sugar-date/date/addWeeks.js"); +__webpack_require__(/*! ./addYears */ "./node_modules/sugar-date/date/addYears.js"); +__webpack_require__(/*! ./advance */ "./node_modules/sugar-date/date/advance.js"); +__webpack_require__(/*! ./beginningOfDay */ "./node_modules/sugar-date/date/beginningOfDay.js"); +__webpack_require__(/*! ./beginningOfISOWeek */ "./node_modules/sugar-date/date/beginningOfISOWeek.js"); +__webpack_require__(/*! ./beginningOfMonth */ "./node_modules/sugar-date/date/beginningOfMonth.js"); +__webpack_require__(/*! ./beginningOfWeek */ "./node_modules/sugar-date/date/beginningOfWeek.js"); +__webpack_require__(/*! ./beginningOfYear */ "./node_modules/sugar-date/date/beginningOfYear.js"); +__webpack_require__(/*! ./clone */ "./node_modules/sugar-date/date/clone.js"); +__webpack_require__(/*! ./daysAgo */ "./node_modules/sugar-date/date/daysAgo.js"); +__webpack_require__(/*! ./daysFromNow */ "./node_modules/sugar-date/date/daysFromNow.js"); +__webpack_require__(/*! ./daysInMonth */ "./node_modules/sugar-date/date/daysInMonth.js"); +__webpack_require__(/*! ./daysSince */ "./node_modules/sugar-date/date/daysSince.js"); +__webpack_require__(/*! ./daysUntil */ "./node_modules/sugar-date/date/daysUntil.js"); +__webpack_require__(/*! ./endOfDay */ "./node_modules/sugar-date/date/endOfDay.js"); +__webpack_require__(/*! ./endOfISOWeek */ "./node_modules/sugar-date/date/endOfISOWeek.js"); +__webpack_require__(/*! ./endOfMonth */ "./node_modules/sugar-date/date/endOfMonth.js"); +__webpack_require__(/*! ./endOfWeek */ "./node_modules/sugar-date/date/endOfWeek.js"); +__webpack_require__(/*! ./endOfYear */ "./node_modules/sugar-date/date/endOfYear.js"); +__webpack_require__(/*! ./format */ "./node_modules/sugar-date/date/format.js"); +__webpack_require__(/*! ./get */ "./node_modules/sugar-date/date/get.js"); +__webpack_require__(/*! ./getISOWeek */ "./node_modules/sugar-date/date/getISOWeek.js"); +__webpack_require__(/*! ./getUTCOffset */ "./node_modules/sugar-date/date/getUTCOffset.js"); +__webpack_require__(/*! ./getUTCWeekday */ "./node_modules/sugar-date/date/getUTCWeekday.js"); +__webpack_require__(/*! ./getWeekday */ "./node_modules/sugar-date/date/getWeekday.js"); +__webpack_require__(/*! ./hoursAgo */ "./node_modules/sugar-date/date/hoursAgo.js"); +__webpack_require__(/*! ./hoursFromNow */ "./node_modules/sugar-date/date/hoursFromNow.js"); +__webpack_require__(/*! ./hoursSince */ "./node_modules/sugar-date/date/hoursSince.js"); +__webpack_require__(/*! ./hoursUntil */ "./node_modules/sugar-date/date/hoursUntil.js"); +__webpack_require__(/*! ./is */ "./node_modules/sugar-date/date/is.js"); +__webpack_require__(/*! ./isAfter */ "./node_modules/sugar-date/date/isAfter.js"); +__webpack_require__(/*! ./isBefore */ "./node_modules/sugar-date/date/isBefore.js"); +__webpack_require__(/*! ./isBetween */ "./node_modules/sugar-date/date/isBetween.js"); +__webpack_require__(/*! ./isFriday */ "./node_modules/sugar-date/date/isFriday.js"); +__webpack_require__(/*! ./isFuture */ "./node_modules/sugar-date/date/isFuture.js"); +__webpack_require__(/*! ./isLastMonth */ "./node_modules/sugar-date/date/isLastMonth.js"); +__webpack_require__(/*! ./isLastWeek */ "./node_modules/sugar-date/date/isLastWeek.js"); +__webpack_require__(/*! ./isLastYear */ "./node_modules/sugar-date/date/isLastYear.js"); +__webpack_require__(/*! ./isLeapYear */ "./node_modules/sugar-date/date/isLeapYear.js"); +__webpack_require__(/*! ./isMonday */ "./node_modules/sugar-date/date/isMonday.js"); +__webpack_require__(/*! ./isNextMonth */ "./node_modules/sugar-date/date/isNextMonth.js"); +__webpack_require__(/*! ./isNextWeek */ "./node_modules/sugar-date/date/isNextWeek.js"); +__webpack_require__(/*! ./isNextYear */ "./node_modules/sugar-date/date/isNextYear.js"); +__webpack_require__(/*! ./isPast */ "./node_modules/sugar-date/date/isPast.js"); +__webpack_require__(/*! ./isSaturday */ "./node_modules/sugar-date/date/isSaturday.js"); +__webpack_require__(/*! ./isSunday */ "./node_modules/sugar-date/date/isSunday.js"); +__webpack_require__(/*! ./isThisMonth */ "./node_modules/sugar-date/date/isThisMonth.js"); +__webpack_require__(/*! ./isThisWeek */ "./node_modules/sugar-date/date/isThisWeek.js"); +__webpack_require__(/*! ./isThisYear */ "./node_modules/sugar-date/date/isThisYear.js"); +__webpack_require__(/*! ./isThursday */ "./node_modules/sugar-date/date/isThursday.js"); +__webpack_require__(/*! ./isToday */ "./node_modules/sugar-date/date/isToday.js"); +__webpack_require__(/*! ./isTomorrow */ "./node_modules/sugar-date/date/isTomorrow.js"); +__webpack_require__(/*! ./isTuesday */ "./node_modules/sugar-date/date/isTuesday.js"); +__webpack_require__(/*! ./isUTC */ "./node_modules/sugar-date/date/isUTC.js"); +__webpack_require__(/*! ./isValid */ "./node_modules/sugar-date/date/isValid.js"); +__webpack_require__(/*! ./isWednesday */ "./node_modules/sugar-date/date/isWednesday.js"); +__webpack_require__(/*! ./isWeekday */ "./node_modules/sugar-date/date/isWeekday.js"); +__webpack_require__(/*! ./isWeekend */ "./node_modules/sugar-date/date/isWeekend.js"); +__webpack_require__(/*! ./isYesterday */ "./node_modules/sugar-date/date/isYesterday.js"); +__webpack_require__(/*! ./iso */ "./node_modules/sugar-date/date/iso.js"); +__webpack_require__(/*! ./millisecondsAgo */ "./node_modules/sugar-date/date/millisecondsAgo.js"); +__webpack_require__(/*! ./millisecondsFromNow */ "./node_modules/sugar-date/date/millisecondsFromNow.js"); +__webpack_require__(/*! ./millisecondsSince */ "./node_modules/sugar-date/date/millisecondsSince.js"); +__webpack_require__(/*! ./millisecondsUntil */ "./node_modules/sugar-date/date/millisecondsUntil.js"); +__webpack_require__(/*! ./minutesAgo */ "./node_modules/sugar-date/date/minutesAgo.js"); +__webpack_require__(/*! ./minutesFromNow */ "./node_modules/sugar-date/date/minutesFromNow.js"); +__webpack_require__(/*! ./minutesSince */ "./node_modules/sugar-date/date/minutesSince.js"); +__webpack_require__(/*! ./minutesUntil */ "./node_modules/sugar-date/date/minutesUntil.js"); +__webpack_require__(/*! ./monthsAgo */ "./node_modules/sugar-date/date/monthsAgo.js"); +__webpack_require__(/*! ./monthsFromNow */ "./node_modules/sugar-date/date/monthsFromNow.js"); +__webpack_require__(/*! ./monthsSince */ "./node_modules/sugar-date/date/monthsSince.js"); +__webpack_require__(/*! ./monthsUntil */ "./node_modules/sugar-date/date/monthsUntil.js"); +__webpack_require__(/*! ./relative */ "./node_modules/sugar-date/date/relative.js"); +__webpack_require__(/*! ./relativeTo */ "./node_modules/sugar-date/date/relativeTo.js"); +__webpack_require__(/*! ./reset */ "./node_modules/sugar-date/date/reset.js"); +__webpack_require__(/*! ./rewind */ "./node_modules/sugar-date/date/rewind.js"); +__webpack_require__(/*! ./secondsAgo */ "./node_modules/sugar-date/date/secondsAgo.js"); +__webpack_require__(/*! ./secondsFromNow */ "./node_modules/sugar-date/date/secondsFromNow.js"); +__webpack_require__(/*! ./secondsSince */ "./node_modules/sugar-date/date/secondsSince.js"); +__webpack_require__(/*! ./secondsUntil */ "./node_modules/sugar-date/date/secondsUntil.js"); +__webpack_require__(/*! ./set */ "./node_modules/sugar-date/date/set.js"); +__webpack_require__(/*! ./setISOWeek */ "./node_modules/sugar-date/date/setISOWeek.js"); +__webpack_require__(/*! ./setUTC */ "./node_modules/sugar-date/date/setUTC.js"); +__webpack_require__(/*! ./setWeekday */ "./node_modules/sugar-date/date/setWeekday.js"); +__webpack_require__(/*! ./weeksAgo */ "./node_modules/sugar-date/date/weeksAgo.js"); +__webpack_require__(/*! ./weeksFromNow */ "./node_modules/sugar-date/date/weeksFromNow.js"); +__webpack_require__(/*! ./weeksSince */ "./node_modules/sugar-date/date/weeksSince.js"); +__webpack_require__(/*! ./weeksUntil */ "./node_modules/sugar-date/date/weeksUntil.js"); +__webpack_require__(/*! ./yearsAgo */ "./node_modules/sugar-date/date/yearsAgo.js"); +__webpack_require__(/*! ./yearsFromNow */ "./node_modules/sugar-date/date/yearsFromNow.js"); +__webpack_require__(/*! ./yearsSince */ "./node_modules/sugar-date/date/yearsSince.js"); +__webpack_require__(/*! ./yearsUntil */ "./node_modules/sugar-date/date/yearsUntil.js"); + +// Accessors +__webpack_require__(/*! ./getOption */ "./node_modules/sugar-date/date/getOption.js"); +__webpack_require__(/*! ./setOption */ "./node_modules/sugar-date/date/setOption.js"); + +module.exports = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/advanceDate.js": +/*!**************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/advanceDate.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var updateDate = __webpack_require__(/*! ./updateDate */ "./node_modules/sugar-date/date/internal/updateDate.js"); + +function advanceDate(d, unit, num, reset) { + var set = {}; + set[unit] = num; + return updateDate(d, set, reset, 1); +} + +module.exports = advanceDate; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/advanceDateWithArgs.js": +/*!**********************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/advanceDateWithArgs.js ***! + \**********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var updateDate = __webpack_require__(/*! ./updateDate */ "./node_modules/sugar-date/date/internal/updateDate.js"), + collectUpdateDateArguments = __webpack_require__(/*! ./collectUpdateDateArguments */ "./node_modules/sugar-date/date/internal/collectUpdateDateArguments.js"); + +function advanceDateWithArgs(d, args, dir) { + args = collectUpdateDateArguments(args, true); + return updateDate(d, args[0], args[1], dir); +} + +module.exports = advanceDateWithArgs; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/arrayToRegAlternates.js": +/*!***********************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/arrayToRegAlternates.js ***! + \***********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var map = __webpack_require__(/*! ../../common/internal/map */ "./node_modules/sugar-date/common/internal/map.js"), + escapeRegExp = __webpack_require__(/*! ../../common/internal/escapeRegExp */ "./node_modules/sugar-date/common/internal/escapeRegExp.js"); + +function arrayToRegAlternates(arr) { + var joined = arr.join(''); + if (!arr || !arr.length) { + return ''; + } + if (joined.length === arr.length) { + return '[' + joined + ']'; + } + // map handles sparse arrays so no need to compact the array here. + return map(arr, escapeRegExp).join('|'); +} + +module.exports = arrayToRegAlternates; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/assertDateIsValid.js": +/*!********************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/assertDateIsValid.js ***! + \********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var dateIsValid = __webpack_require__(/*! ./dateIsValid */ "./node_modules/sugar-date/date/internal/dateIsValid.js"); + +function assertDateIsValid(d) { + if (!dateIsValid(d)) { + throw new TypeError('Date is not valid'); + } +} + +module.exports = assertDateIsValid; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/buildDateUnitMethods.js": +/*!***********************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/buildDateUnitMethods.js ***! + \***********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var DateUnits = __webpack_require__(/*! ../var/DateUnits */ "./node_modules/sugar-date/date/var/DateUnits.js"), + DateUnitIndexes = __webpack_require__(/*! ../var/DateUnitIndexes */ "./node_modules/sugar-date/date/var/DateUnitIndexes.js"), + forEach = __webpack_require__(/*! ../../common/internal/forEach */ "./node_modules/sugar-date/common/internal/forEach.js"), + createDate = __webpack_require__(/*! ./createDate */ "./node_modules/sugar-date/date/internal/createDate.js"), + compareDate = __webpack_require__(/*! ./compareDate */ "./node_modules/sugar-date/date/internal/compareDate.js"), + advanceDate = __webpack_require__(/*! ./advanceDate */ "./node_modules/sugar-date/date/internal/advanceDate.js"), + moveToEndOfUnit = __webpack_require__(/*! ./moveToEndOfUnit */ "./node_modules/sugar-date/date/internal/moveToEndOfUnit.js"), + namespaceAliases = __webpack_require__(/*! ../../common/var/namespaceAliases */ "./node_modules/sugar-date/common/var/namespaceAliases.js"), + simpleCapitalize = __webpack_require__(/*! ../../common/internal/simpleCapitalize */ "./node_modules/sugar-date/common/internal/simpleCapitalize.js"), + moveToBeginningOfUnit = __webpack_require__(/*! ./moveToBeginningOfUnit */ "./node_modules/sugar-date/date/internal/moveToBeginningOfUnit.js"), + defineInstanceSimilar = __webpack_require__(/*! ../../common/internal/defineInstanceSimilar */ "./node_modules/sugar-date/common/internal/defineInstanceSimilar.js"), + getTimeDistanceForUnit = __webpack_require__(/*! ./getTimeDistanceForUnit */ "./node_modules/sugar-date/date/internal/getTimeDistanceForUnit.js"); + +var sugarDate = namespaceAliases.sugarDate, + HOURS_INDEX = DateUnitIndexes.HOURS_INDEX, + DAY_INDEX = DateUnitIndexes.DAY_INDEX; + +function buildDateUnitMethods() { + + defineInstanceSimilar(sugarDate, DateUnits, function(methods, unit, index) { + var name = unit.name, caps = simpleCapitalize(name); + + if (index > DAY_INDEX) { + forEach(['Last','This','Next'], function(shift) { + methods['is' + shift + caps] = function(d, localeCode) { + return compareDate(d, shift + ' ' + name, 0, localeCode, { locale: 'en' }); + }; + }); + } + if (index > HOURS_INDEX) { + methods['beginningOf' + caps] = function(d, localeCode) { + return moveToBeginningOfUnit(d, index, localeCode); + }; + methods['endOf' + caps] = function(d, localeCode) { + return moveToEndOfUnit(d, index, localeCode); + }; + } + + methods['add' + caps + 's'] = function(d, num, reset) { + return advanceDate(d, name, num, reset); + }; + + var since = function(date, d, options) { + return getTimeDistanceForUnit(date, createDate(d, options, true), unit); + }; + var until = function(date, d, options) { + return getTimeDistanceForUnit(createDate(d, options, true), date, unit); + }; + + methods[name + 'sAgo'] = methods[name + 'sUntil'] = until; + methods[name + 'sSince'] = methods[name + 'sFromNow'] = since; + + }); + +} + +module.exports = buildDateUnitMethods; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/buildNumberUnitMethods.js": +/*!*************************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/buildNumberUnitMethods.js ***! + \*************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var DateUnits = __webpack_require__(/*! ../var/DateUnits */ "./node_modules/sugar-date/date/var/DateUnits.js"), + createDate = __webpack_require__(/*! ./createDate */ "./node_modules/sugar-date/date/internal/createDate.js"), + mathAliases = __webpack_require__(/*! ../../common/var/mathAliases */ "./node_modules/sugar-date/common/var/mathAliases.js"), + advanceDate = __webpack_require__(/*! ./advanceDate */ "./node_modules/sugar-date/date/internal/advanceDate.js"), + namespaceAliases = __webpack_require__(/*! ../../common/var/namespaceAliases */ "./node_modules/sugar-date/common/var/namespaceAliases.js"), + defineInstanceSimilar = __webpack_require__(/*! ../../common/internal/defineInstanceSimilar */ "./node_modules/sugar-date/common/internal/defineInstanceSimilar.js"); + +var sugarNumber = namespaceAliases.sugarNumber, + round = mathAliases.round; + +function buildNumberUnitMethods() { + defineInstanceSimilar(sugarNumber, DateUnits, function(methods, unit) { + var name = unit.name, base, after, before; + base = function(n) { + return round(n * unit.multiplier); + }; + after = function(n, d, options) { + return advanceDate(createDate(d, options, true), name, n); + }; + before = function(n, d, options) { + return advanceDate(createDate(d, options, true), name, -n); + }; + methods[name] = base; + methods[name + 's'] = base; + methods[name + 'Before'] = before; + methods[name + 'sBefore'] = before; + methods[name + 'Ago'] = before; + methods[name + 'sAgo'] = before; + methods[name + 'After'] = after; + methods[name + 'sAfter'] = after; + methods[name + 'FromNow'] = after; + methods[name + 'sFromNow'] = after; + }); +} + +module.exports = buildNumberUnitMethods; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/buildRelativeAliases.js": +/*!***********************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/buildRelativeAliases.js ***! + \***********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var LocaleHelpers = __webpack_require__(/*! ../var/LocaleHelpers */ "./node_modules/sugar-date/date/var/LocaleHelpers.js"), + spaceSplit = __webpack_require__(/*! ../../common/internal/spaceSplit */ "./node_modules/sugar-date/common/internal/spaceSplit.js"), + fullCompareDate = __webpack_require__(/*! ./fullCompareDate */ "./node_modules/sugar-date/date/internal/fullCompareDate.js"), + namespaceAliases = __webpack_require__(/*! ../../common/var/namespaceAliases */ "./node_modules/sugar-date/common/var/namespaceAliases.js"), + defineInstanceSimilar = __webpack_require__(/*! ../../common/internal/defineInstanceSimilar */ "./node_modules/sugar-date/common/internal/defineInstanceSimilar.js"); + +var English = LocaleHelpers.English, + sugarDate = namespaceAliases.sugarDate; + +function buildRelativeAliases() { + var special = spaceSplit('Today Yesterday Tomorrow Weekday Weekend Future Past'); + var weekdays = English.weekdays.slice(0, 7); + var months = English.months.slice(0, 12); + var together = special.concat(weekdays).concat(months); + defineInstanceSimilar(sugarDate, together, function(methods, name) { + methods['is'+ name] = function(d) { + return fullCompareDate(d, name); + }; + }); +} + +module.exports = buildRelativeAliases; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/callDateSetWithWeek.js": +/*!**********************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/callDateSetWithWeek.js ***! + \**********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var callDateSet = __webpack_require__(/*! ../../common/internal/callDateSet */ "./node_modules/sugar-date/common/internal/callDateSet.js"), + setISOWeekNumber = __webpack_require__(/*! ./setISOWeekNumber */ "./node_modules/sugar-date/date/internal/setISOWeekNumber.js"); + +function callDateSetWithWeek(d, method, value, safe) { + if (method === 'ISOWeek') { + setISOWeekNumber(d, value); + } else { + callDateSet(d, method, value, safe); + } +} + +module.exports = callDateSetWithWeek; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/cloneDate.js": +/*!************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/cloneDate.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _utc = __webpack_require__(/*! ../../common/var/_utc */ "./node_modules/sugar-date/common/var/_utc.js"); + +function cloneDate(d) { + // Rhino environments have a bug where new Date(d) truncates + // milliseconds so need to call getTime() here. + var clone = new Date(d.getTime()); + _utc(clone, !!_utc(d)); + return clone; +} + +module.exports = cloneDate; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/collectDateParamsFromArguments.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/collectDateParamsFromArguments.js ***! + \*********************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var DateUnitIndexes = __webpack_require__(/*! ../var/DateUnitIndexes */ "./node_modules/sugar-date/date/var/DateUnitIndexes.js"), + isDefined = __webpack_require__(/*! ../../common/internal/isDefined */ "./node_modules/sugar-date/common/internal/isDefined.js"), + walkUnitDown = __webpack_require__(/*! ./walkUnitDown */ "./node_modules/sugar-date/date/internal/walkUnitDown.js"); + +var YEAR_INDEX = DateUnitIndexes.YEAR_INDEX; + +function collectDateParamsFromArguments(args) { + var params = {}, index = 0; + walkUnitDown(YEAR_INDEX, function(unit) { + var arg = args[index++]; + if (isDefined(arg)) { + params[unit.name] = arg; + } + }); + return params; +} + +module.exports = collectDateParamsFromArguments; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/collectUpdateDateArguments.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/collectUpdateDateArguments.js ***! + \*****************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var classChecks = __webpack_require__(/*! ../../common/var/classChecks */ "./node_modules/sugar-date/common/var/classChecks.js"), + simpleClone = __webpack_require__(/*! ../../common/internal/simpleClone */ "./node_modules/sugar-date/common/internal/simpleClone.js"), + isObjectType = __webpack_require__(/*! ../../common/internal/isObjectType */ "./node_modules/sugar-date/common/internal/isObjectType.js"), + getDateParamsFromString = __webpack_require__(/*! ./getDateParamsFromString */ "./node_modules/sugar-date/date/internal/getDateParamsFromString.js"), + collectDateParamsFromArguments = __webpack_require__(/*! ./collectDateParamsFromArguments */ "./node_modules/sugar-date/date/internal/collectDateParamsFromArguments.js"); + +var isNumber = classChecks.isNumber, + isString = classChecks.isString; + +function collectUpdateDateArguments(args, allowDuration) { + var arg1 = args[0], arg2 = args[1], params, reset; + if (allowDuration && isString(arg1)) { + params = getDateParamsFromString(arg1); + reset = arg2; + } else if (isNumber(arg1) && isNumber(arg2)) { + params = collectDateParamsFromArguments(args); + } else { + params = isObjectType(arg1) ? simpleClone(arg1) : arg1; + reset = arg2; + } + return [params, reset]; +} + +module.exports = collectUpdateDateArguments; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/compareDate.js": +/*!**************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/compareDate.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var MINUTES = __webpack_require__(/*! ../var/MINUTES */ "./node_modules/sugar-date/date/var/MINUTES.js"), + DateUnits = __webpack_require__(/*! ../var/DateUnits */ "./node_modules/sugar-date/date/var/DateUnits.js"), + DateUnitIndexes = __webpack_require__(/*! ../var/DateUnitIndexes */ "./node_modules/sugar-date/date/var/DateUnitIndexes.js"), + _utc = __webpack_require__(/*! ../../common/var/_utc */ "./node_modules/sugar-date/common/var/_utc.js"), + tzOffset = __webpack_require__(/*! ./tzOffset */ "./node_modules/sugar-date/date/internal/tzOffset.js"), + cloneDate = __webpack_require__(/*! ./cloneDate */ "./node_modules/sugar-date/date/internal/cloneDate.js"), + isDefined = __webpack_require__(/*! ../../common/internal/isDefined */ "./node_modules/sugar-date/common/internal/isDefined.js"), + advanceDate = __webpack_require__(/*! ./advanceDate */ "./node_modules/sugar-date/date/internal/advanceDate.js"), + dateIsValid = __webpack_require__(/*! ./dateIsValid */ "./node_modules/sugar-date/date/internal/dateIsValid.js"), + moveToEndOfUnit = __webpack_require__(/*! ./moveToEndOfUnit */ "./node_modules/sugar-date/date/internal/moveToEndOfUnit.js"), + getExtendedDate = __webpack_require__(/*! ./getExtendedDate */ "./node_modules/sugar-date/date/internal/getExtendedDate.js"), + moveToBeginningOfUnit = __webpack_require__(/*! ./moveToBeginningOfUnit */ "./node_modules/sugar-date/date/internal/moveToBeginningOfUnit.js"); + +var MONTH_INDEX = DateUnitIndexes.MONTH_INDEX; + +function compareDate(date, d, margin, localeCode, options) { + var loMargin = 0, hiMargin = 0, timezoneShift, compareEdges, override, min, max, p, t; + + function getTimezoneShift() { + // If there is any specificity in the date then we're implicitly not + // checking absolute time, so ignore timezone shifts. + if (p.set && p.set.specificity) { + return 0; + } + return (tzOffset(p.date) - tzOffset(date)) * MINUTES; + } + + function addSpecificUnit() { + var unit = DateUnits[p.set.specificity]; + return advanceDate(cloneDate(p.date), unit.name, 1).getTime() - 1; + } + + if (_utc(date)) { + options = options || {}; + options.fromUTC = true; + options.setUTC = true; + } + + p = getExtendedDate(null, d, options, true); + + if (margin > 0) { + loMargin = hiMargin = margin; + override = true; + } + if (!dateIsValid(p.date)) return false; + if (p.set && p.set.specificity) { + if (isDefined(p.set.edge) || isDefined(p.set.shift)) { + compareEdges = true; + moveToBeginningOfUnit(p.date, p.set.specificity, localeCode); + } + if (compareEdges || p.set.specificity === MONTH_INDEX) { + max = moveToEndOfUnit(cloneDate(p.date), p.set.specificity, localeCode).getTime(); + } else { + max = addSpecificUnit(); + } + if (!override && isDefined(p.set.sign) && p.set.specificity) { + // If the time is relative, there can occasionally be an disparity between + // the relative date and "now", which it is being compared to, so set an + // extra margin to account for this. + loMargin = 50; + hiMargin = -50; + } + } + t = date.getTime(); + min = p.date.getTime(); + max = max || min; + timezoneShift = getTimezoneShift(); + // istanbul ignore if + if (timezoneShift) { + min -= timezoneShift; + max -= timezoneShift; + } + return t >= (min - loMargin) && t <= (max + hiMargin); +} + +module.exports = compareDate; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/compareDay.js": +/*!*************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/compareDay.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var setDate = __webpack_require__(/*! ./setDate */ "./node_modules/sugar-date/date/internal/setDate.js"), + getDate = __webpack_require__(/*! ./getDate */ "./node_modules/sugar-date/date/internal/getDate.js"), + getYear = __webpack_require__(/*! ./getYear */ "./node_modules/sugar-date/date/internal/getYear.js"), + getMonth = __webpack_require__(/*! ./getMonth */ "./node_modules/sugar-date/date/internal/getMonth.js"), + getNewDate = __webpack_require__(/*! ./getNewDate */ "./node_modules/sugar-date/date/internal/getNewDate.js"); + +function compareDay(d, shift) { + var comp = getNewDate(); + if (shift) { + setDate(comp, getDate(comp) + shift); + } + return getYear(d) === getYear(comp) && + getMonth(d) === getMonth(comp) && + getDate(d) === getDate(comp); +} + +module.exports = compareDay; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/createDate.js": +/*!*************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/createDate.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var getExtendedDate = __webpack_require__(/*! ./getExtendedDate */ "./node_modules/sugar-date/date/internal/getExtendedDate.js"); + +function createDate(d, options, forceClone) { + return getExtendedDate(null, d, options, forceClone).date; +} + +module.exports = createDate; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/createDateWithContext.js": +/*!************************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/createDateWithContext.js ***! + \************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var getExtendedDate = __webpack_require__(/*! ./getExtendedDate */ "./node_modules/sugar-date/date/internal/getExtendedDate.js"); + +function createDateWithContext(contextDate, d, options, forceClone) { + return getExtendedDate(contextDate, d, options, forceClone).date; +} + +module.exports = createDateWithContext; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/dateFormat.js": +/*!*************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/dateFormat.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var CoreOutputFormats = __webpack_require__(/*! ../var/CoreOutputFormats */ "./node_modules/sugar-date/date/var/CoreOutputFormats.js"), + formattingTokens = __webpack_require__(/*! ../var/formattingTokens */ "./node_modules/sugar-date/date/var/formattingTokens.js"), + assertDateIsValid = __webpack_require__(/*! ./assertDateIsValid */ "./node_modules/sugar-date/date/internal/assertDateIsValid.js"); + +var dateFormatMatcher = formattingTokens.dateFormatMatcher; + +function dateFormat(d, format, localeCode) { + assertDateIsValid(d); + format = CoreOutputFormats[format] || format || '{long}'; + return dateFormatMatcher(format, d, localeCode); +} + +module.exports = dateFormat; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/dateIsValid.js": +/*!**************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/dateIsValid.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function dateIsValid(d) { + return !isNaN(d.getTime()); +} + +module.exports = dateIsValid; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/dateRelative.js": +/*!***************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/dateRelative.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var LocaleHelpers = __webpack_require__(/*! ../var/LocaleHelpers */ "./node_modules/sugar-date/date/var/LocaleHelpers.js"), + dateFormat = __webpack_require__(/*! ./dateFormat */ "./node_modules/sugar-date/date/internal/dateFormat.js"), + classChecks = __webpack_require__(/*! ../../common/var/classChecks */ "./node_modules/sugar-date/common/var/classChecks.js"), + assertDateIsValid = __webpack_require__(/*! ./assertDateIsValid */ "./node_modules/sugar-date/date/internal/assertDateIsValid.js"), + getAdjustedUnitForDate = __webpack_require__(/*! ./getAdjustedUnitForDate */ "./node_modules/sugar-date/date/internal/getAdjustedUnitForDate.js"); + +var isFunction = classChecks.isFunction, + localeManager = LocaleHelpers.localeManager; + +function dateRelative(d, dRelative, arg1, arg2) { + var adu, format, type, localeCode, fn; + assertDateIsValid(d); + if (isFunction(arg1)) { + fn = arg1; + } else { + localeCode = arg1; + fn = arg2; + } + adu = getAdjustedUnitForDate(d, dRelative); + if (fn) { + format = fn.apply(d, adu.concat(localeManager.get(localeCode))); + if (format) { + return dateFormat(d, format, localeCode); + } + } + // Adjust up if time is in ms, as this doesn't + // look very good for a standard relative date. + if (adu[1] === 0) { + adu[1] = 1; + adu[0] = 1; + } + if (dRelative) { + type = 'duration'; + } else if (adu[2] > 0) { + type = 'future'; + } else { + type = 'past'; + } + return localeManager.get(localeCode).getRelativeFormat(adu, type); +} + +module.exports = dateRelative; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/defaultNewDate.js": +/*!*****************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/defaultNewDate.js ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function defaultNewDate() { + return new Date; +} + +module.exports = defaultNewDate; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/deleteDateParam.js": +/*!******************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/deleteDateParam.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var getDateParamKey = __webpack_require__(/*! ./getDateParamKey */ "./node_modules/sugar-date/date/internal/getDateParamKey.js"); + +function deleteDateParam(params, key) { + delete params[getDateParamKey(params, key)]; +} + +module.exports = deleteDateParam; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/fullCompareDate.js": +/*!******************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/fullCompareDate.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var LocaleHelpers = __webpack_require__(/*! ../var/LocaleHelpers */ "./node_modules/sugar-date/date/var/LocaleHelpers.js"), + trim = __webpack_require__(/*! ../../common/internal/trim */ "./node_modules/sugar-date/common/internal/trim.js"), + getMonth = __webpack_require__(/*! ./getMonth */ "./node_modules/sugar-date/date/internal/getMonth.js"), + isDefined = __webpack_require__(/*! ../../common/internal/isDefined */ "./node_modules/sugar-date/common/internal/isDefined.js"), + getNewDate = __webpack_require__(/*! ./getNewDate */ "./node_modules/sugar-date/date/internal/getNewDate.js"), + compareDay = __webpack_require__(/*! ./compareDay */ "./node_modules/sugar-date/date/internal/compareDay.js"), + getWeekday = __webpack_require__(/*! ./getWeekday */ "./node_modules/sugar-date/date/internal/getWeekday.js"), + dateIsValid = __webpack_require__(/*! ./dateIsValid */ "./node_modules/sugar-date/date/internal/dateIsValid.js"), + classChecks = __webpack_require__(/*! ../../common/var/classChecks */ "./node_modules/sugar-date/common/var/classChecks.js"), + compareDate = __webpack_require__(/*! ./compareDate */ "./node_modules/sugar-date/date/internal/compareDate.js"); + +var isString = classChecks.isString, + English = LocaleHelpers.English; + +function fullCompareDate(date, d, margin) { + var tmp; + if (!dateIsValid(date)) return; + if (isString(d)) { + d = trim(d).toLowerCase(); + switch(true) { + case d === 'future': return date.getTime() > getNewDate().getTime(); + case d === 'past': return date.getTime() < getNewDate().getTime(); + case d === 'today': return compareDay(date); + case d === 'tomorrow': return compareDay(date, 1); + case d === 'yesterday': return compareDay(date, -1); + case d === 'weekday': return getWeekday(date) > 0 && getWeekday(date) < 6; + case d === 'weekend': return getWeekday(date) === 0 || getWeekday(date) === 6; + + case (isDefined(tmp = English.weekdayMap[d])): + return getWeekday(date) === tmp; + case (isDefined(tmp = English.monthMap[d])): + return getMonth(date) === tmp; + } + } + return compareDate(date, d, margin); +} + +module.exports = fullCompareDate; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getAdjustedUnit.js": +/*!******************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getAdjustedUnit.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var mathAliases = __webpack_require__(/*! ../../common/var/mathAliases */ "./node_modules/sugar-date/common/var/mathAliases.js"), + iterateOverDateUnits = __webpack_require__(/*! ./iterateOverDateUnits */ "./node_modules/sugar-date/date/internal/iterateOverDateUnits.js"); + +var abs = mathAliases.abs; + +function getAdjustedUnit(ms, fn) { + var unitIndex = 0, value = 0; + iterateOverDateUnits(function(unit, i) { + value = abs(fn(unit)); + if (value >= 1) { + unitIndex = i; + return false; + } + }); + return [value, unitIndex, ms]; +} + +module.exports = getAdjustedUnit; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getAdjustedUnitForDate.js": +/*!*************************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getAdjustedUnitForDate.js ***! + \*************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var getNewDate = __webpack_require__(/*! ./getNewDate */ "./node_modules/sugar-date/date/internal/getNewDate.js"), + mathAliases = __webpack_require__(/*! ../../common/var/mathAliases */ "./node_modules/sugar-date/common/var/mathAliases.js"), + getAdjustedUnit = __webpack_require__(/*! ./getAdjustedUnit */ "./node_modules/sugar-date/date/internal/getAdjustedUnit.js"), + getTimeDistanceForUnit = __webpack_require__(/*! ./getTimeDistanceForUnit */ "./node_modules/sugar-date/date/internal/getTimeDistanceForUnit.js"); + +var abs = mathAliases.abs; + +function getAdjustedUnitForDate(d, dRelative) { + var ms; + if (!dRelative) { + dRelative = getNewDate(); + if (d > dRelative) { + // If our date is greater than the one that we got from getNewDate, it + // means that we are finding the unit for a date that is in the future + // relative to now. However, often the incoming date was created in + // the same cycle as our comparison, but our "now" date will have been + // created an instant after it, creating situations where "5 minutes from + // now" becomes "4 minutes from now" in the same tick. To prevent this, + // subtract a buffer of 10ms to compensate. + dRelative = new Date(dRelative.getTime() - 10); + } + } + ms = d - dRelative; + return getAdjustedUnit(ms, function(u) { + return abs(getTimeDistanceForUnit(d, dRelative, u)); + }); +} + +module.exports = getAdjustedUnitForDate; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getAdjustedUnitForNumber.js": +/*!***************************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getAdjustedUnitForNumber.js ***! + \***************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var trunc = __webpack_require__(/*! ../../common/var/trunc */ "./node_modules/sugar-date/common/var/trunc.js"), + withPrecision = __webpack_require__(/*! ../../common/internal/withPrecision */ "./node_modules/sugar-date/common/internal/withPrecision.js"), + getAdjustedUnit = __webpack_require__(/*! ./getAdjustedUnit */ "./node_modules/sugar-date/date/internal/getAdjustedUnit.js"); + +function getAdjustedUnitForNumber(ms) { + return getAdjustedUnit(ms, function(unit) { + return trunc(withPrecision(ms / unit.multiplier, 1)); + }); +} + +module.exports = getAdjustedUnitForNumber; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getArrayWithOffset.js": +/*!*********************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getArrayWithOffset.js ***! + \*********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function getArrayWithOffset(arr, n, alternate, offset) { + var val; + if (alternate > 1) { + val = arr[n + (alternate - 1) * offset]; + } + return val || arr[n]; +} + +module.exports = getArrayWithOffset; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getDate.js": +/*!**********************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getDate.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var callDateGet = __webpack_require__(/*! ../../common/internal/callDateGet */ "./node_modules/sugar-date/common/internal/callDateGet.js"); + +function getDate(d) { + return callDateGet(d, 'Date'); +} + +module.exports = getDate; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getDateParam.js": +/*!***************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getDateParam.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var getDateParamKey = __webpack_require__(/*! ./getDateParamKey */ "./node_modules/sugar-date/date/internal/getDateParamKey.js"), + coreUtilityAliases = __webpack_require__(/*! ../../common/var/coreUtilityAliases */ "./node_modules/sugar-date/common/var/coreUtilityAliases.js"); + +var getOwn = coreUtilityAliases.getOwn; + +function getDateParam(params, key) { + return getOwn(params, getDateParamKey(params, key)); +} + +module.exports = getDateParam; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getDateParamKey.js": +/*!******************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getDateParamKey.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var getOwnKey = __webpack_require__(/*! ../../common/internal/getOwnKey */ "./node_modules/sugar-date/common/internal/getOwnKey.js"); + +function getDateParamKey(params, key) { + return getOwnKey(params, key) || + getOwnKey(params, key + 's') || + (key === 'day' && getOwnKey(params, 'date')); +} + +module.exports = getDateParamKey; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getDateParamsFromString.js": +/*!**************************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getDateParamsFromString.js ***! + \**************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var isUndefined = __webpack_require__(/*! ../../common/internal/isUndefined */ "./node_modules/sugar-date/common/internal/isUndefined.js"); + +function getDateParamsFromString(str) { + var match, num, params = {}; + match = str.match(/^(-?\d*[\d.]\d*)?\s?(\w+?)s?$/i); + if (match) { + if (isUndefined(num)) { + num = match[1] ? +match[1] : 1; + } + params[match[2].toLowerCase()] = num; + } + return params; +} + +module.exports = getDateParamsFromString; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getDaysInMonth.js": +/*!*****************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getDaysInMonth.js ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var getYear = __webpack_require__(/*! ./getYear */ "./node_modules/sugar-date/date/internal/getYear.js"), + getMonth = __webpack_require__(/*! ./getMonth */ "./node_modules/sugar-date/date/internal/getMonth.js"), + callDateGet = __webpack_require__(/*! ../../common/internal/callDateGet */ "./node_modules/sugar-date/common/internal/callDateGet.js"); + +function getDaysInMonth(d) { + return 32 - callDateGet(new Date(getYear(d), getMonth(d), 32), 'Date'); +} + +module.exports = getDaysInMonth; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getDaysSince.js": +/*!***************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getDaysSince.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var DateUnits = __webpack_require__(/*! ../var/DateUnits */ "./node_modules/sugar-date/date/var/DateUnits.js"), + DateUnitIndexes = __webpack_require__(/*! ../var/DateUnitIndexes */ "./node_modules/sugar-date/date/var/DateUnitIndexes.js"), + getTimeDistanceForUnit = __webpack_require__(/*! ./getTimeDistanceForUnit */ "./node_modules/sugar-date/date/internal/getTimeDistanceForUnit.js"); + +var DAY_INDEX = DateUnitIndexes.DAY_INDEX; + +function getDaysSince(d1, d2) { + return getTimeDistanceForUnit(d1, d2, DateUnits[DAY_INDEX]); +} + +module.exports = getDaysSince; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getEnglishVariant.js": +/*!********************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getEnglishVariant.js ***! + \********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var EnglishLocaleBaseDefinition = __webpack_require__(/*! ../var/EnglishLocaleBaseDefinition */ "./node_modules/sugar-date/date/var/EnglishLocaleBaseDefinition.js"), + simpleMerge = __webpack_require__(/*! ../../common/internal/simpleMerge */ "./node_modules/sugar-date/common/internal/simpleMerge.js"), + simpleClone = __webpack_require__(/*! ../../common/internal/simpleClone */ "./node_modules/sugar-date/common/internal/simpleClone.js"); + +function getEnglishVariant(v) { + return simpleMerge(simpleClone(EnglishLocaleBaseDefinition), v); +} + +module.exports = getEnglishVariant; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getExtendedDate.js": +/*!******************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getExtendedDate.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var MINUTES = __webpack_require__(/*! ../var/MINUTES */ "./node_modules/sugar-date/date/var/MINUTES.js"), + ABBREVIATED_YEAR_REG = __webpack_require__(/*! ../var/ABBREVIATED_YEAR_REG */ "./node_modules/sugar-date/date/var/ABBREVIATED_YEAR_REG.js"), + LocaleHelpers = __webpack_require__(/*! ../var/LocaleHelpers */ "./node_modules/sugar-date/date/var/LocaleHelpers.js"), + DateUnitIndexes = __webpack_require__(/*! ../var/DateUnitIndexes */ "./node_modules/sugar-date/date/var/DateUnitIndexes.js"), + _utc = __webpack_require__(/*! ../../common/var/_utc */ "./node_modules/sugar-date/common/var/_utc.js"), + trunc = __webpack_require__(/*! ../../common/var/trunc */ "./node_modules/sugar-date/common/var/trunc.js"), + forEach = __webpack_require__(/*! ../../common/internal/forEach */ "./node_modules/sugar-date/common/internal/forEach.js"), + tzOffset = __webpack_require__(/*! ./tzOffset */ "./node_modules/sugar-date/date/internal/tzOffset.js"), + isDefined = __webpack_require__(/*! ../../common/internal/isDefined */ "./node_modules/sugar-date/common/internal/isDefined.js"), + resetTime = __webpack_require__(/*! ./resetTime */ "./node_modules/sugar-date/date/internal/resetTime.js"), + getNewDate = __webpack_require__(/*! ./getNewDate */ "./node_modules/sugar-date/date/internal/getNewDate.js"), + updateDate = __webpack_require__(/*! ./updateDate */ "./node_modules/sugar-date/date/internal/updateDate.js"), + setWeekday = __webpack_require__(/*! ./setWeekday */ "./node_modules/sugar-date/date/internal/setWeekday.js"), + simpleMerge = __webpack_require__(/*! ../../common/internal/simpleMerge */ "./node_modules/sugar-date/common/internal/simpleMerge.js"), + advanceDate = __webpack_require__(/*! ./advanceDate */ "./node_modules/sugar-date/date/internal/advanceDate.js"), + isUndefined = __webpack_require__(/*! ../../common/internal/isUndefined */ "./node_modules/sugar-date/common/internal/isUndefined.js"), + classChecks = __webpack_require__(/*! ../../common/var/classChecks */ "./node_modules/sugar-date/common/var/classChecks.js"), + dateIsValid = __webpack_require__(/*! ./dateIsValid */ "./node_modules/sugar-date/date/internal/dateIsValid.js"), + simpleClone = __webpack_require__(/*! ../../common/internal/simpleClone */ "./node_modules/sugar-date/common/internal/simpleClone.js"), + isObjectType = __webpack_require__(/*! ../../common/internal/isObjectType */ "./node_modules/sugar-date/common/internal/isObjectType.js"), + moveToEndOfUnit = __webpack_require__(/*! ./moveToEndOfUnit */ "./node_modules/sugar-date/date/internal/moveToEndOfUnit.js"), + deleteDateParam = __webpack_require__(/*! ./deleteDateParam */ "./node_modules/sugar-date/date/internal/deleteDateParam.js"), + coreUtilityAliases = __webpack_require__(/*! ../../common/var/coreUtilityAliases */ "./node_modules/sugar-date/common/var/coreUtilityAliases.js"), + moveToBeginningOfUnit = __webpack_require__(/*! ./moveToBeginningOfUnit */ "./node_modules/sugar-date/date/internal/moveToBeginningOfUnit.js"), + iterateOverDateParams = __webpack_require__(/*! ./iterateOverDateParams */ "./node_modules/sugar-date/date/internal/iterateOverDateParams.js"), + getYearFromAbbreviation = __webpack_require__(/*! ./getYearFromAbbreviation */ "./node_modules/sugar-date/date/internal/getYearFromAbbreviation.js"), + iterateOverHigherDateParams = __webpack_require__(/*! ./iterateOverHigherDateParams */ "./node_modules/sugar-date/date/internal/iterateOverHigherDateParams.js"); + +var isNumber = classChecks.isNumber, + isString = classChecks.isString, + isDate = classChecks.isDate, + getOwn = coreUtilityAliases.getOwn, + English = LocaleHelpers.English, + localeManager = LocaleHelpers.localeManager, + DAY_INDEX = DateUnitIndexes.DAY_INDEX, + WEEK_INDEX = DateUnitIndexes.WEEK_INDEX, + MONTH_INDEX = DateUnitIndexes.MONTH_INDEX, + YEAR_INDEX = DateUnitIndexes.YEAR_INDEX; + +function getExtendedDate(contextDate, d, opt, forceClone) { + + // Locals + var date, set, loc, afterCallbacks, relative, weekdayDir; + + // Options + var optPrefer, optLocale, optFromUTC, optSetUTC, optParams, optClone; + + afterCallbacks = []; + + setupOptions(opt); + + function setupOptions(opt) { + opt = isString(opt) ? { locale: opt } : opt || {}; + optPrefer = +!!getOwn(opt, 'future') - +!!getOwn(opt, 'past'); + optLocale = getOwn(opt, 'locale'); + optFromUTC = getOwn(opt, 'fromUTC'); + optSetUTC = getOwn(opt, 'setUTC'); + optParams = getOwn(opt, 'params'); + optClone = getOwn(opt, 'clone'); + } + + function parseFormatValues(match, dif) { + var set = optParams || {}; + forEach(dif.to, function(param, i) { + var str = match[i + 1], val; + if (!str) return; + + val = parseIrregular(str, param); + + if (isUndefined(val)) { + val = loc.parseValue(str, param); + } + + set[param] = val; + }); + return set; + } + + function parseIrregular(str, param) { + if (param === 'utc') { + return 1; + } else if (param === 'year') { + var match = str.match(ABBREVIATED_YEAR_REG); + if (match) { + return getYearFromAbbreviation(match[1], date, optPrefer); + } + } + } + + // Force the UTC flags to be true if the source date + // date is UTC, as they will be overwritten later. + function cloneDateByFlag(d, clone) { + if (_utc(d) && !isDefined(optFromUTC)) { + optFromUTC = true; + } + if (_utc(d) && !isDefined(optSetUTC)) { + optSetUTC = true; + } + if (clone) { + d = new Date(d.getTime()); + } + return d; + } + + function afterDateSet(fn) { + afterCallbacks.push(fn); + } + + function fireCallbacks() { + forEach(afterCallbacks, function(fn) { + fn.call(); + }); + } + + function parseStringDate(str) { + + str = str.toLowerCase(); + + // The act of getting the locale will initialize + // if it is missing and add the required formats. + loc = localeManager.get(optLocale); + + for (var i = 0, dif, match; dif = loc.compiledFormats[i]; i++) { + match = str.match(dif.reg); + if (match) { + + // Note that caching the format will modify the compiledFormats array + // which is not a good idea to do inside its for loop, however we + // know at this point that we have a matched format and that we will + // break out below, so simpler to do it here. + loc.cacheFormat(dif, i); + + set = parseFormatValues(match, dif); + + if (isDefined(set.timestamp)) { + date.setTime(set.timestamp); + break; + } + + if (isDefined(set.ampm)) { + handleAmpm(set.ampm); + } + + if (set.utc || isDefined(set.tzHour)) { + handleTimezoneOffset(set.tzHour, set.tzMinute); + } + + if (isDefined(set.shift) && isUndefined(set.unit)) { + // "next january", "next monday", etc + handleUnitlessShift(); + } + + if (isDefined(set.num) && isUndefined(set.unit)) { + // "the second of January", etc + handleUnitlessNum(set.num); + } + + if (set.midday) { + // "noon" and "midnight" + handleMidday(set.midday); + } + + if (isDefined(set.day)) { + // Relative day localizations such as "today" and "tomorrow". + handleRelativeDay(set.day); + } + + if (isDefined(set.unit)) { + // "3 days ago", etc + handleRelativeUnit(set.unit); + } + + if (set.edge) { + // "the end of January", etc + handleEdge(set.edge, set); + } + + break; + } + } + + if (!set) { + // TODO: remove in next major version + // Fall back to native parsing + date = new Date(str); + if (optFromUTC && dateIsValid(date)) { + // Falling back to system date here which cannot be parsed as UTC, + // so if we're forcing UTC then simply add the offset. + date.setTime(date.getTime() + (tzOffset(date) * MINUTES)); + } + } else if (relative) { + updateDate(date, set, false, 1); + } else { + updateDate(date, set, true, 0, optPrefer, weekdayDir, contextDate); + } + fireCallbacks(); + return date; + } + + function handleAmpm(ampm) { + if (ampm === 1 && set.hour < 12) { + // If the time is 1pm-11pm advance the time by 12 hours. + set.hour += 12; + } else if (ampm === 0 && set.hour === 12) { + // If it is 12:00am then set the hour to 0. + set.hour = 0; + } + } + + function handleTimezoneOffset(tzHour, tzMinute) { + // Adjust for timezone offset + _utc(date, true); + + // Sign is parsed as part of the hour, so flip + // the minutes if it's negative. + + if (tzHour < 0) { + tzMinute *= -1; + } + + var offset = tzHour * 60 + (tzMinute || 0); + if (offset) { + set.minute = (set.minute || 0) - offset; + } + } + + function handleUnitlessShift() { + if (isDefined(set.month)) { + // "next January" + set.unit = YEAR_INDEX; + } else if (isDefined(set.weekday)) { + // "next Monday" + set.unit = WEEK_INDEX; + } + } + + function handleUnitlessNum(num) { + if (isDefined(set.weekday)) { + // "The second Tuesday of March" + setOrdinalWeekday(num); + } else if (isDefined(set.month)) { + // "The second of March" + set.date = set.num; + } + } + + function handleMidday(hour) { + set.hour = hour % 24; + if (hour > 23) { + // If the date has hours past 24, we need to prevent it from traversing + // into a new day as that would make it being part of a new week in + // ambiguous dates such as "Monday". + afterDateSet(function() { + advanceDate(date, 'date', trunc(hour / 24)); + }); + } + } + + function handleRelativeDay() { + resetTime(date); + if (isUndefined(set.unit)) { + set.unit = DAY_INDEX; + set.num = set.day; + delete set.day; + } + } + + function handleRelativeUnit(unitIndex) { + var num; + + if (isDefined(set.num)) { + num = set.num; + } else if (isDefined(set.edge) && isUndefined(set.shift)) { + num = 0; + } else { + num = 1; + } + + // If a weekday is defined, there are 3 possible formats being applied: + // + // 1. "the day after monday": unit is days + // 2. "next monday": short for "next week monday", unit is weeks + // 3. "the 2nd monday of next month": unit is months + // + // In the first case, we need to set the weekday up front, as the day is + // relative to it. The second case also needs to be handled up front for + // formats like "next monday at midnight" which will have its weekday reset + // if not set up front. The last case will set up the params necessary to + // shift the weekday and allow separateAbsoluteUnits below to handle setting + // it after the date has been shifted. + if(isDefined(set.weekday)) { + if(unitIndex === MONTH_INDEX) { + setOrdinalWeekday(num); + num = 1; + } else { + updateDate(date, { weekday: set.weekday }, true); + delete set.weekday; + } + } + + if (set.half) { + // Allow localized "half" as a standalone colloquialism. Purposely avoiding + // the locale number system to reduce complexity. The units "month" and + // "week" are purposely excluded in the English date formats below, as + // "half a week" and "half a month" are meaningless as exact dates. + num *= set.half; + } + + if (isDefined(set.shift)) { + // Shift and unit, ie "next month", "last week", etc. + num *= set.shift; + } else if (set.sign) { + // Unit and sign, ie "months ago", "weeks from now", etc. + num *= set.sign; + } + + if (isDefined(set.day)) { + // "the day after tomorrow" + num += set.day; + delete set.day; + } + + // Formats like "the 15th of last month" or "6:30pm of next week" + // contain absolute units in addition to relative ones, so separate + // them here, remove them from the params, and set up a callback to + // set them after the relative ones have been set. + separateAbsoluteUnits(unitIndex); + + // Finally shift the unit. + set[English.units[unitIndex]] = num; + relative = true; + } + + function handleEdge(edge, params) { + var edgeIndex = params.unit, weekdayOfMonth; + if (!edgeIndex) { + // If we have "the end of January", then we need to find the unit index. + iterateOverHigherDateParams(params, function(unitName, val, unit, i) { + if (unitName === 'weekday' && isDefined(params.month)) { + // If both a month and weekday exist, then we have a format like + // "the last tuesday in November, 2012", where the "last" is still + // relative to the end of the month, so prevent the unit "weekday" + // from taking over. + return; + } + edgeIndex = i; + }); + } + if (edgeIndex === MONTH_INDEX && isDefined(params.weekday)) { + // If a weekday in a month exists (as described above), + // then set it up to be set after the date has been shifted. + weekdayOfMonth = params.weekday; + delete params.weekday; + } + afterDateSet(function() { + var stopIndex; + // "edge" values that are at the very edge are "2" so the beginning of the + // year is -2 and the end of the year is 2. Conversely, the "last day" is + // actually 00:00am so it is 1. -1 is reserved but unused for now. + if (edge < 0) { + moveToBeginningOfUnit(date, edgeIndex, optLocale); + } else if (edge > 0) { + if (edge === 1) { + stopIndex = DAY_INDEX; + moveToBeginningOfUnit(date, DAY_INDEX); + } + moveToEndOfUnit(date, edgeIndex, optLocale, stopIndex); + } + if (isDefined(weekdayOfMonth)) { + setWeekday(date, weekdayOfMonth, -edge); + resetTime(date); + } + }); + if (edgeIndex === MONTH_INDEX) { + params.specificity = DAY_INDEX; + } else { + params.specificity = edgeIndex - 1; + } + } + + function setOrdinalWeekday(num) { + // If we have "the 2nd Tuesday of June", then pass the "weekdayDir" + // flag along to updateDate so that the date does not accidentally traverse + // into the previous month. This needs to be independent of the "prefer" + // flag because we are only ensuring that the weekday is in the future, not + // the entire date. + set.weekday = 7 * (num - 1) + set.weekday; + set.date = 1; + weekdayDir = 1; + } + + function separateAbsoluteUnits(unitIndex) { + var params; + + iterateOverDateParams(set, function(name, val, unit, i) { + // If there is a time unit set that is more specific than + // the matched unit we have a string like "5:30am in 2 minutes", + // which is meaningless, so invalidate the date... + if (i >= unitIndex) { + date.setTime(NaN); + return false; + } else if (i < unitIndex) { + // ...otherwise set the params to set the absolute date + // as a callback after the relative date has been set. + params = params || {}; + params[name] = val; + deleteDateParam(set, name); + } + }); + if (params) { + afterDateSet(function() { + updateDate(date, params, true, 0, false, weekdayDir); + if (optParams) { + simpleMerge(optParams, params); + } + }); + if (set.edge) { + // "the end of March of next year" + handleEdge(set.edge, params); + delete set.edge; + } + } + } + + if (contextDate && d) { + // If a context date is passed ("get" and "unitsFromNow"), + // then use it as the starting point. + date = cloneDateByFlag(contextDate, true); + } else { + date = getNewDate(); + } + + _utc(date, optFromUTC); + + if (isString(d)) { + date = parseStringDate(d); + } else if (isDate(d)) { + date = cloneDateByFlag(d, optClone || forceClone); + } else if (isObjectType(d)) { + set = simpleClone(d); + updateDate(date, set, true); + } else if (isNumber(d) || d === null) { + date.setTime(d); + } + // A date created by parsing a string presumes that the format *itself* is + // UTC, but not that the date, once created, should be manipulated as such. In + // other words, if you are creating a date object from a server time + // "2012-11-15T12:00:00Z", in the majority of cases you are using it to create + // a date that will, after creation, be manipulated as local, so reset the utc + // flag here unless "setUTC" is also set. + _utc(date, !!optSetUTC); + return { + set: set, + date: date + }; +} + +module.exports = getExtendedDate; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getHigherUnitIndex.js": +/*!*********************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getHigherUnitIndex.js ***! + \*********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var DateUnitIndexes = __webpack_require__(/*! ../var/DateUnitIndexes */ "./node_modules/sugar-date/date/var/DateUnitIndexes.js"); + +var DAY_INDEX = DateUnitIndexes.DAY_INDEX, + MONTH_INDEX = DateUnitIndexes.MONTH_INDEX; + +function getHigherUnitIndex(index) { + return index === DAY_INDEX ? MONTH_INDEX : index + 1; +} + +module.exports = getHigherUnitIndex; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getHours.js": +/*!***********************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getHours.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var callDateGet = __webpack_require__(/*! ../../common/internal/callDateGet */ "./node_modules/sugar-date/common/internal/callDateGet.js"); + +function getHours(d) { + return callDateGet(d, 'Hours'); +} + +module.exports = getHours; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getLowerUnitIndex.js": +/*!********************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getLowerUnitIndex.js ***! + \********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var DateUnitIndexes = __webpack_require__(/*! ../var/DateUnitIndexes */ "./node_modules/sugar-date/date/var/DateUnitIndexes.js"); + +var HOURS_INDEX = DateUnitIndexes.HOURS_INDEX, + DAY_INDEX = DateUnitIndexes.DAY_INDEX, + WEEK_INDEX = DateUnitIndexes.WEEK_INDEX, + MONTH_INDEX = DateUnitIndexes.MONTH_INDEX; + +function getLowerUnitIndex(index) { + if (index === MONTH_INDEX) { + return DAY_INDEX; + } else if (index === WEEK_INDEX) { + return HOURS_INDEX; + } + return index - 1; +} + +module.exports = getLowerUnitIndex; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getMeridiemToken.js": +/*!*******************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getMeridiemToken.js ***! + \*******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var LocaleHelpers = __webpack_require__(/*! ../var/LocaleHelpers */ "./node_modules/sugar-date/date/var/LocaleHelpers.js"), + trunc = __webpack_require__(/*! ../../common/var/trunc */ "./node_modules/sugar-date/common/var/trunc.js"), + getHours = __webpack_require__(/*! ./getHours */ "./node_modules/sugar-date/date/internal/getHours.js"); + +var localeManager = LocaleHelpers.localeManager; + +function getMeridiemToken(d, localeCode) { + var hours = getHours(d); + return localeManager.get(localeCode).ampm[trunc(hours / 12)] || ''; +} + +module.exports = getMeridiemToken; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getMonth.js": +/*!***********************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getMonth.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var callDateGet = __webpack_require__(/*! ../../common/internal/callDateGet */ "./node_modules/sugar-date/common/internal/callDateGet.js"); + +function getMonth(d) { + return callDateGet(d, 'Month'); +} + +module.exports = getMonth; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getNewDate.js": +/*!*************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getNewDate.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _dateOptions = __webpack_require__(/*! ../var/_dateOptions */ "./node_modules/sugar-date/date/var/_dateOptions.js"); + +function getNewDate() { + return _dateOptions('newDateInternal')(); +} + +module.exports = getNewDate; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getNewLocale.js": +/*!***************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getNewLocale.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var LOCALE_ARRAY_FIELDS = __webpack_require__(/*! ../var/LOCALE_ARRAY_FIELDS */ "./node_modules/sugar-date/date/var/LOCALE_ARRAY_FIELDS.js"), + ISODefaults = __webpack_require__(/*! ../var/ISODefaults */ "./node_modules/sugar-date/date/var/ISODefaults.js"), + CoreParsingTokens = __webpack_require__(/*! ../var/CoreParsingTokens */ "./node_modules/sugar-date/date/var/CoreParsingTokens.js"), + CoreParsingFormats = __webpack_require__(/*! ../var/CoreParsingFormats */ "./node_modules/sugar-date/date/var/CoreParsingFormats.js"), + LocalizedParsingTokens = __webpack_require__(/*! ../var/LocalizedParsingTokens */ "./node_modules/sugar-date/date/var/LocalizedParsingTokens.js"), + map = __webpack_require__(/*! ../../common/internal/map */ "./node_modules/sugar-date/common/internal/map.js"), + filter = __webpack_require__(/*! ../../common/internal/filter */ "./node_modules/sugar-date/common/internal/filter.js"), + forEach = __webpack_require__(/*! ../../common/internal/forEach */ "./node_modules/sugar-date/common/internal/forEach.js"), + isDefined = __webpack_require__(/*! ../../common/internal/isDefined */ "./node_modules/sugar-date/common/internal/isDefined.js"), + commaSplit = __webpack_require__(/*! ../../common/internal/commaSplit */ "./node_modules/sugar-date/common/internal/commaSplit.js"), + classChecks = __webpack_require__(/*! ../../common/var/classChecks */ "./node_modules/sugar-date/common/var/classChecks.js"), + mathAliases = __webpack_require__(/*! ../../common/var/mathAliases */ "./node_modules/sugar-date/common/var/mathAliases.js"), + isUndefined = __webpack_require__(/*! ../../common/internal/isUndefined */ "./node_modules/sugar-date/common/internal/isUndefined.js"), + simpleMerge = __webpack_require__(/*! ../../common/internal/simpleMerge */ "./node_modules/sugar-date/common/internal/simpleMerge.js"), + getOrdinalSuffix = __webpack_require__(/*! ../../common/internal/getOrdinalSuffix */ "./node_modules/sugar-date/common/internal/getOrdinalSuffix.js"), + getArrayWithOffset = __webpack_require__(/*! ./getArrayWithOffset */ "./node_modules/sugar-date/date/internal/getArrayWithOffset.js"), + getRegNonCapturing = __webpack_require__(/*! ./getRegNonCapturing */ "./node_modules/sugar-date/date/internal/getRegNonCapturing.js"), + coreUtilityAliases = __webpack_require__(/*! ../../common/var/coreUtilityAliases */ "./node_modules/sugar-date/common/var/coreUtilityAliases.js"), + iterateOverDateUnits = __webpack_require__(/*! ./iterateOverDateUnits */ "./node_modules/sugar-date/date/internal/iterateOverDateUnits.js"), + arrayToRegAlternates = __webpack_require__(/*! ./arrayToRegAlternates */ "./node_modules/sugar-date/date/internal/arrayToRegAlternates.js"), + fullwidthNumberHelpers = __webpack_require__(/*! ../../common/var/fullwidthNumberHelpers */ "./node_modules/sugar-date/common/var/fullwidthNumberHelpers.js"), + getAdjustedUnitForNumber = __webpack_require__(/*! ./getAdjustedUnitForNumber */ "./node_modules/sugar-date/date/internal/getAdjustedUnitForNumber.js"), + getParsingTokenWithSuffix = __webpack_require__(/*! ./getParsingTokenWithSuffix */ "./node_modules/sugar-date/date/internal/getParsingTokenWithSuffix.js"); + +var hasOwn = coreUtilityAliases.hasOwn, + getOwn = coreUtilityAliases.getOwn, + forEachProperty = coreUtilityAliases.forEachProperty, + fullWidthNumberMap = fullwidthNumberHelpers.fullWidthNumberMap, + fullWidthNumbers = fullwidthNumberHelpers.fullWidthNumbers, + pow = mathAliases.pow, + max = mathAliases.max, + ISO_FIRST_DAY_OF_WEEK = ISODefaults.ISO_FIRST_DAY_OF_WEEK, + ISO_FIRST_DAY_OF_WEEK_YEAR = ISODefaults.ISO_FIRST_DAY_OF_WEEK_YEAR, + isString = classChecks.isString, + isFunction = classChecks.isFunction; + +function getNewLocale(def) { + + function Locale(def) { + this.init(def); + } + + Locale.prototype = { + + getMonthName: function(n, alternate) { + if (this.monthSuffix) { + return (n + 1) + this.monthSuffix; + } + return getArrayWithOffset(this.months, n, alternate, 12); + }, + + getWeekdayName: function(n, alternate) { + return getArrayWithOffset(this.weekdays, n, alternate, 7); + }, + + // TODO: rename to parse in next major version + parseValue: function(str, param) { + var map = this[param + 'Map']; + if (hasOwn(map, str)) { + return map[str]; + } + return this.parseNumber(str, param); + }, + + // TODO: analyze performance of parsing first vs checking + // numeralMap first. + parseNumber: function(str, param) { + var val; + + // Simple numerals such as "one" are mapped directly in + // the numeral map so catch up front if there is a match. + if (hasOwn(this.numeralMap, str)) { + val = this.numeralMap[str]; + } + + // TODO: perf test isNaN vs other methods + if (isNaN(val)) { + val = this.parseRegularNumerals(str); + } + + if (isNaN(val)) { + val = this.parseIrregularNumerals(str); + } + + if (param === 'month') { + // Months are the only numeric date field + // whose value is not the same as its number. + val -= 1; + } + + return val; + }, + + // TODO: perf test returning up front if no regular decimals exist + parseRegularNumerals: function(str) { + // Allow decimals as commas and the minus-sign as per ISO-8601. + str = str.replace(/^−/, '-').replace(/,/, '.'); + + // The unary plus operator here shows better performance and handles + // every format that parseFloat does with the exception of trailing + // characters, which are guaranteed not to be in our string at this point. + return +str; + }, + + parseIrregularNumerals: function(str) { + var place = 1, num = 0, lastWasPlace, isPlace, numeral, digit, arr; + + // Note that "numerals" that need to be converted through this method are + // all considered to be single characters in order to handle CJK. This + // method is by no means unique to CJK, but the complexity of handling + // inflections in non-CJK languages adds too much overhead for not enough + // value, so avoiding for now. + arr = str.split(''); + for (var i = arr.length - 1; numeral = arr[i]; i--) { + digit = getOwn(this.numeralMap, numeral); + if (isUndefined(digit)) { + digit = getOwn(fullWidthNumberMap, numeral) || 0; + } + isPlace = digit > 0 && digit % 10 === 0; + if (isPlace) { + if (lastWasPlace) { + num += place; + } + if (i) { + place = digit; + } else { + num += digit; + } + } else { + num += digit * place; + place *= 10; + } + lastWasPlace = isPlace; + } + return num; + }, + + getOrdinal: function(n) { + var suffix = this.ordinalSuffix; + return suffix || getOrdinalSuffix(n); + }, + + getRelativeFormat: function(adu, type) { + return this.convertAdjustedToFormat(adu, type); + }, + + getDuration: function(ms) { + return this.convertAdjustedToFormat(getAdjustedUnitForNumber(max(0, ms)), 'duration'); + }, + + getFirstDayOfWeek: function() { + var val = this.firstDayOfWeek; + return isDefined(val) ? val : ISO_FIRST_DAY_OF_WEEK; + }, + + getFirstDayOfWeekYear: function() { + return this.firstDayOfWeekYear || ISO_FIRST_DAY_OF_WEEK_YEAR; + }, + + convertAdjustedToFormat: function(adu, type) { + var sign, unit, mult, + num = adu[0], + u = adu[1], + ms = adu[2], + format = this[type] || this.relative; + if (isFunction(format)) { + return format.call(this, num, u, ms, type); + } + mult = !this.plural || num === 1 ? 0 : 1; + unit = this.units[mult * 8 + u] || this.units[u]; + sign = this[ms > 0 ? 'fromNow' : 'ago']; + return format.replace(/\{(.*?)\}/g, function(full, match) { + switch(match) { + case 'num': return num; + case 'unit': return unit; + case 'sign': return sign; + } + }); + }, + + cacheFormat: function(dif, i) { + this.compiledFormats.splice(i, 1); + this.compiledFormats.unshift(dif); + }, + + addFormat: function(format) { + var loc = this, src, to; + + function getTokenSrc(token) { + var suffix, src, tmp, + opt = token.match(/\?$/), + nc = token.match(/^(\d+)\??$/), + slice = token.match(/(\d)(?:-(\d))?/), + param = token.replace(/[^a-z]+$/i, ''); + + // Allowing alias tokens such as {time} + if (tmp = getOwn(loc.parsingAliases, param)) { + src = formatToSrc(tmp); + if (opt) { + src = getRegNonCapturing(src, true); + } + return src; + } + + if (nc) { + src = loc.tokens[nc[1]]; + } else if (tmp = getOwn(CoreParsingTokens, param)) { + src = tmp.src; + param = tmp.param || param; + } else { + tmp = getOwn(loc.parsingTokens, param) || getOwn(loc, param); + + // Both the "months" array and the "month" parsing token can be accessed + // by either {month} or {months}, falling back as necessary, however + // regardless of whether or not a fallback occurs, the final field to + // be passed to addRawFormat must be normalized as singular. + param = param.replace(/s$/, ''); + + if (!tmp) { + tmp = getOwn(loc.parsingTokens, param) || getOwn(loc, param + 's'); + } + + if (isString(tmp)) { + src = tmp; + suffix = loc[param + 'Suffix']; + } else { + + // This is a hack to temporarily disallow parsing of single character + // weekdays until the format can be changed to allow for this. + if (param === 'weekday' && loc.code === 'ko') { + tmp = filter(tmp, function(str) { + return str.length > 1; + }); + } + + if (slice) { + tmp = filter(tmp, function(m, i) { + var mod = i % (loc.units ? 8 : tmp.length); + return mod >= slice[1] && mod <= (slice[2] || slice[1]); + }); + } + src = arrayToRegAlternates(tmp); + } + } + if (!src) { + return ''; + } + if (nc) { + // Non-capturing tokens like {0} + src = getRegNonCapturing(src); + } else { + // Capturing group and add to parsed tokens + to.push(param); + src = '(' + src + ')'; + } + if (suffix) { + // Date/time suffixes such as those in CJK + src = getParsingTokenWithSuffix(param, src, suffix); + } + if (opt) { + src += '?'; + } + return src; + } + + function formatToSrc(str) { + + // Make spaces optional + str = str.replace(/ /g, ' ?'); + + str = str.replace(/\{([^,]+?)\}/g, function(match, token) { + var tokens = token.split('|'); + if (tokens.length > 1) { + return getRegNonCapturing(map(tokens, getTokenSrc).join('|')); + } else { + return getTokenSrc(token); + } + }); + + return str; + } + + function parseInputFormat() { + to = []; + src = formatToSrc(format); + } + + parseInputFormat(); + loc.addRawFormat(src, to); + }, + + addRawFormat: function(format, to) { + this.compiledFormats.unshift({ + reg: RegExp('^ *' + format + ' *$', 'i'), + to: to + }); + }, + + init: function(def) { + var loc = this; + + // -- Initialization helpers + + function initFormats() { + loc.compiledFormats = []; + loc.parsingAliases = {}; + loc.parsingTokens = {}; + } + + function initDefinition() { + simpleMerge(loc, def); + } + + function initArrayFields() { + forEach(LOCALE_ARRAY_FIELDS, function(name) { + var val = loc[name]; + if (isString(val)) { + loc[name] = commaSplit(val); + } else if (!val) { + loc[name] = []; + } + }); + } + + // -- Value array build helpers + + function buildValueArray(name, mod, map, fn) { + var field = name, all = [], setMap; + if (!loc[field]) { + field += 's'; + } + if (!map) { + map = {}; + setMap = true; + } + forAllAlternates(field, function(alt, j, i) { + var idx = j * mod + i, val; + val = fn ? fn(i) : i; + map[alt] = val; + map[alt.toLowerCase()] = val; + all[idx] = alt; + }); + loc[field] = all; + if (setMap) { + loc[name + 'Map'] = map; + } + } + + function forAllAlternates(field, fn) { + forEach(loc[field], function(str, i) { + forEachAlternate(str, function(alt, j) { + fn(alt, j, i); + }); + }); + } + + function forEachAlternate(str, fn) { + var arr = map(str.split('+'), function(split) { + return split.replace(/(.+):(.+)$/, function(full, base, suffixes) { + return map(suffixes.split('|'), function(suffix) { + return base + suffix; + }).join('|'); + }); + }).join('|'); + forEach(arr.split('|'), fn); + } + + function buildNumerals() { + var map = {}; + buildValueArray('numeral', 10, map); + buildValueArray('article', 1, map, function() { + return 1; + }); + buildValueArray('placeholder', 4, map, function(n) { + return pow(10, n + 1); + }); + loc.numeralMap = map; + } + + function buildTimeFormats() { + loc.parsingAliases['time'] = getTimeFormat(); + loc.parsingAliases['tzOffset'] = getTZOffsetFormat(); + } + + function getTimeFormat(standalone) { + var src, sep; + sep = getTimeSeparatorSrc(standalone); + if (loc.ampmFront) { + // "ampmFront" exists mostly for CJK locales, which also presume that + // time suffixes exist, allowing this to be a simpler regex. + src = '{ampm?} {hour} (?:{minute} (?::?{second})?)?'; + } else if(loc.ampm.length) { + src = '{hour}(?:'+sep+'{minute?}(?:'+sep+'{second?})? {ampm?}| {ampm})'; + } else { + src = '{hour}(?:'+sep+'{minute?}(?:'+sep+'{second?})?)'; + } + return src; + } + + function getTimeSeparatorSrc() { + if (loc.timeSeparator) { + return '[:' + loc.timeSeparator + ']'; + } else { + return ':'; + } + } + + function getTZOffsetFormat() { + return '(?:{Z}|{GMT?}(?:{tzHour}(?::?{tzMinute}(?: \\([\\w\\s]+\\))?)?)?)?'; + } + + function buildParsingTokens() { + forEachProperty(LocalizedParsingTokens, function(token, name) { + var src = token.base ? getCoreTokensForBase(token.base) : token.src, arr; + if (token.requiresNumerals || loc.numeralUnits) { + src += getNumeralSrc(); + } + arr = loc[name + 's']; + if (arr && arr.length) { + src += '|' + arrayToRegAlternates(arr); + } + loc.parsingTokens[name] = src; + }); + } + + function getCoreTokensForBase(base) { + return map(base.split('|'), function(key) { + return CoreParsingTokens[key].src; + }).join('|'); + } + + function getNumeralSrc() { + var all, src = ''; + all = loc.numerals.concat(loc.placeholders).concat(loc.articles); + if (loc.allowsFullWidth) { + all = all.concat(fullWidthNumbers.split('')); + } + if (all.length) { + src = '|(?:' + arrayToRegAlternates(all) + ')+'; + } + return src; + } + + function buildTimeSuffixes() { + iterateOverDateUnits(function(unit, i) { + var token = loc.timeSuffixes[i]; + if (token) { + loc[(unit.alias || unit.name) + 'Suffix'] = token; + } + }); + } + + function buildModifiers() { + forEach(loc.modifiers, function(modifier) { + var name = modifier.name, mapKey = name + 'Map', map; + map = loc[mapKey] || {}; + forEachAlternate(modifier.src, function(alt, j) { + var token = getOwn(loc.parsingTokens, name), val = modifier.value; + map[alt] = val; + loc.parsingTokens[name] = token ? token + '|' + alt : alt; + if (modifier.name === 'sign' && j === 0) { + // Hooking in here to set the first "fromNow" or "ago" modifier + // directly on the locale, so that it can be reused in the + // relative format. + loc[val === 1 ? 'fromNow' : 'ago'] = alt; + } + }); + loc[mapKey] = map; + }); + } + + // -- Format adding helpers + + function addCoreFormats() { + forEach(CoreParsingFormats, function(df) { + var src = df.src; + if (df.localeCheck && !df.localeCheck(loc)) { + return; + } + if (df.mdy && loc.mdy) { + // Use the mm/dd/yyyy variant if it + // exists and the locale requires it + src = df.mdy; + } + if (df.time) { + // Core formats that allow time require the time + // reg on both sides, so add both versions here. + loc.addFormat(getFormatWithTime(src, true)); + loc.addFormat(getFormatWithTime(src)); + } else { + loc.addFormat(src); + } + }); + loc.addFormat('{time}'); + } + + function addLocaleFormats() { + addFormatSet('parse'); + addFormatSet('timeParse', true); + addFormatSet('timeFrontParse', true, true); + } + + function addFormatSet(field, allowTime, timeFront) { + forEach(loc[field], function(format) { + if (allowTime) { + format = getFormatWithTime(format, timeFront); + } + loc.addFormat(format); + }); + } + + function getFormatWithTime(baseFormat, timeBefore) { + if (timeBefore) { + return getTimeBefore() + baseFormat; + } + return baseFormat + getTimeAfter(); + } + + function getTimeBefore() { + return getRegNonCapturing('{time}[,\\s\\u3000]', true); + } + + function getTimeAfter() { + var markers = ',?[\\s\\u3000]', localized; + localized = arrayToRegAlternates(loc.timeMarkers); + if (localized) { + markers += '| (?:' + localized + ') '; + } + markers = getRegNonCapturing(markers, loc.timeMarkerOptional); + return getRegNonCapturing(markers + '{time}{tzOffset}', true); + } + + initFormats(); + initDefinition(); + initArrayFields(); + + buildValueArray('month', 12); + buildValueArray('weekday', 7); + buildValueArray('unit', 8); + buildValueArray('ampm', 2); + + buildNumerals(); + buildTimeFormats(); + buildParsingTokens(); + buildTimeSuffixes(); + buildModifiers(); + + // The order of these formats is important. Order is reversed so formats + // that are initialized later will take precedence. Generally, this means + // that more specific formats should come later. + addCoreFormats(); + addLocaleFormats(); + + } + + }; + + return new Locale(def); +} + +module.exports = getNewLocale; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getParsingTokenWithSuffix.js": +/*!****************************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getParsingTokenWithSuffix.js ***! + \****************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var LocalizedParsingTokens = __webpack_require__(/*! ../var/LocalizedParsingTokens */ "./node_modules/sugar-date/date/var/LocalizedParsingTokens.js"), + getRegNonCapturing = __webpack_require__(/*! ./getRegNonCapturing */ "./node_modules/sugar-date/date/internal/getRegNonCapturing.js"); + +function getParsingTokenWithSuffix(field, src, suffix) { + var token = LocalizedParsingTokens[field]; + if (token.requiresSuffix) { + src = getRegNonCapturing(src + getRegNonCapturing(suffix)); + } else if (token.requiresSuffixOr) { + src += getRegNonCapturing(token.requiresSuffixOr + '|' + suffix); + } else { + src += getRegNonCapturing(suffix, true); + } + return src; +} + +module.exports = getParsingTokenWithSuffix; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getRegNonCapturing.js": +/*!*********************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getRegNonCapturing.js ***! + \*********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function getRegNonCapturing(src, opt) { + if (src.length > 1) { + src = '(?:' + src + ')'; + } + if (opt) { + src += '?'; + } + return src; +} + +module.exports = getRegNonCapturing; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getTimeDistanceForUnit.js": +/*!*************************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getTimeDistanceForUnit.js ***! + \*************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var trunc = __webpack_require__(/*! ../../common/var/trunc */ "./node_modules/sugar-date/common/var/trunc.js"), + cloneDate = __webpack_require__(/*! ./cloneDate */ "./node_modules/sugar-date/date/internal/cloneDate.js"), + advanceDate = __webpack_require__(/*! ./advanceDate */ "./node_modules/sugar-date/date/internal/advanceDate.js"); + +function getTimeDistanceForUnit(d1, d2, unit) { + var fwd = d2 > d1, num, tmp; + if (!fwd) { + tmp = d2; + d2 = d1; + d1 = tmp; + } + num = d2 - d1; + if (unit.multiplier > 1) { + num = trunc(num / unit.multiplier); + } + // For higher order with potential ambiguity, use the numeric calculation + // as a starting point, then iterate until we pass the target date. Decrement + // starting point by 1 to prevent overshooting the date due to inconsistencies + // in ambiguous units numerically. For example, calculating the number of days + // from the beginning of the year to August 5th at 11:59:59 by doing a simple + // d2 - d1 will produce different results depending on whether or not a + // timezone shift was encountered due to DST, however that should not have an + // effect on our calculation here, so subtract by 1 to ensure that the + // starting point has not already overshot our target date. + if (unit.ambiguous) { + d1 = cloneDate(d1); + if (num) { + num -= 1; + advanceDate(d1, unit.name, num); + } + while (d1 < d2) { + advanceDate(d1, unit.name, 1); + if (d1 > d2) { + break; + } + num += 1; + } + } + return fwd ? -num : num; +} + +module.exports = getTimeDistanceForUnit; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getUTCOffset.js": +/*!***************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getUTCOffset.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _utc = __webpack_require__(/*! ../../common/var/_utc */ "./node_modules/sugar-date/common/var/_utc.js"), + trunc = __webpack_require__(/*! ../../common/var/trunc */ "./node_modules/sugar-date/common/var/trunc.js"), + tzOffset = __webpack_require__(/*! ./tzOffset */ "./node_modules/sugar-date/date/internal/tzOffset.js"), + padNumber = __webpack_require__(/*! ../../common/internal/padNumber */ "./node_modules/sugar-date/common/internal/padNumber.js"), + mathAliases = __webpack_require__(/*! ../../common/var/mathAliases */ "./node_modules/sugar-date/common/var/mathAliases.js"); + +var abs = mathAliases.abs; + +function getUTCOffset(d, iso) { + var offset = _utc(d) ? 0 : tzOffset(d), hours, mins, colon; + colon = iso === true ? ':' : ''; + if (!offset && iso) return 'Z'; + hours = padNumber(trunc(-offset / 60), 2, true); + mins = padNumber(abs(offset % 60), 2); + return hours + colon + mins; +} + +module.exports = getUTCOffset; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getUnitIndexForParamName.js": +/*!***************************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getUnitIndexForParamName.js ***! + \***************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var iterateOverDateParams = __webpack_require__(/*! ./iterateOverDateParams */ "./node_modules/sugar-date/date/internal/iterateOverDateParams.js"); + +function getUnitIndexForParamName(name) { + var params = {}, unitIndex; + params[name] = 1; + iterateOverDateParams(params, function(name, val, unit, i) { + unitIndex = i; + return false; + }); + return unitIndex; +} + +module.exports = getUnitIndexForParamName; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getWeekNumber.js": +/*!****************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getWeekNumber.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var ISODefaults = __webpack_require__(/*! ../var/ISODefaults */ "./node_modules/sugar-date/date/var/ISODefaults.js"), + setDate = __webpack_require__(/*! ./setDate */ "./node_modules/sugar-date/date/internal/setDate.js"), + getDate = __webpack_require__(/*! ./getDate */ "./node_modules/sugar-date/date/internal/getDate.js"), + cloneDate = __webpack_require__(/*! ./cloneDate */ "./node_modules/sugar-date/date/internal/cloneDate.js"), + isUndefined = __webpack_require__(/*! ../../common/internal/isUndefined */ "./node_modules/sugar-date/common/internal/isUndefined.js"), + moveToEndOfWeek = __webpack_require__(/*! ./moveToEndOfWeek */ "./node_modules/sugar-date/date/internal/moveToEndOfWeek.js"), + moveToBeginningOfWeek = __webpack_require__(/*! ./moveToBeginningOfWeek */ "./node_modules/sugar-date/date/internal/moveToBeginningOfWeek.js"), + moveToFirstDayOfWeekYear = __webpack_require__(/*! ./moveToFirstDayOfWeekYear */ "./node_modules/sugar-date/date/internal/moveToFirstDayOfWeekYear.js"); + +var ISO_FIRST_DAY_OF_WEEK = ISODefaults.ISO_FIRST_DAY_OF_WEEK, + ISO_FIRST_DAY_OF_WEEK_YEAR = ISODefaults.ISO_FIRST_DAY_OF_WEEK_YEAR; + +function getWeekNumber(d, allowPrevious, firstDayOfWeek, firstDayOfWeekYear) { + var isoWeek, n = 0; + if (isUndefined(firstDayOfWeek)) { + firstDayOfWeek = ISO_FIRST_DAY_OF_WEEK; + } + if (isUndefined(firstDayOfWeekYear)) { + firstDayOfWeekYear = ISO_FIRST_DAY_OF_WEEK_YEAR; + } + // Moving to the end of the week allows for forward year traversal, ie + // Dec 29 2014 is actually week 01 of 2015. + isoWeek = moveToEndOfWeek(cloneDate(d), firstDayOfWeek); + moveToFirstDayOfWeekYear(isoWeek, firstDayOfWeek, firstDayOfWeekYear); + if (allowPrevious && d < isoWeek) { + // If the date is still before the start of the year, then it should be + // the last week of the previous year, ie Jan 1 2016 is actually week 53 + // of 2015, so move to the beginning of the week to traverse the year. + isoWeek = moveToBeginningOfWeek(cloneDate(d), firstDayOfWeek); + moveToFirstDayOfWeekYear(isoWeek, firstDayOfWeek, firstDayOfWeekYear); + } + while (isoWeek <= d) { + // Doing a very simple walk to get the week number. + setDate(isoWeek, getDate(isoWeek) + 7); + n++; + } + return n; +} + +module.exports = getWeekNumber; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getWeekYear.js": +/*!**************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getWeekYear.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var LocaleHelpers = __webpack_require__(/*! ../var/LocaleHelpers */ "./node_modules/sugar-date/date/var/LocaleHelpers.js"), + getYear = __webpack_require__(/*! ./getYear */ "./node_modules/sugar-date/date/internal/getYear.js"), + getMonth = __webpack_require__(/*! ./getMonth */ "./node_modules/sugar-date/date/internal/getMonth.js"), + getWeekNumber = __webpack_require__(/*! ./getWeekNumber */ "./node_modules/sugar-date/date/internal/getWeekNumber.js"); + +var localeManager = LocaleHelpers.localeManager; + +function getWeekYear(d, localeCode, iso) { + var year, month, firstDayOfWeek, firstDayOfWeekYear, week, loc; + year = getYear(d); + month = getMonth(d); + if (month === 0 || month === 11) { + if (!iso) { + loc = localeManager.get(localeCode); + firstDayOfWeek = loc.getFirstDayOfWeek(localeCode); + firstDayOfWeekYear = loc.getFirstDayOfWeekYear(localeCode); + } + week = getWeekNumber(d, false, firstDayOfWeek, firstDayOfWeekYear); + if (month === 0 && week === 0) { + year -= 1; + } else if (month === 11 && week === 1) { + year += 1; + } + } + return year; +} + +module.exports = getWeekYear; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getWeekday.js": +/*!*************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getWeekday.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var callDateGet = __webpack_require__(/*! ../../common/internal/callDateGet */ "./node_modules/sugar-date/common/internal/callDateGet.js"); + +function getWeekday(d) { + return callDateGet(d, 'Day'); +} + +module.exports = getWeekday; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getYear.js": +/*!**********************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getYear.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var callDateGet = __webpack_require__(/*! ../../common/internal/callDateGet */ "./node_modules/sugar-date/common/internal/callDateGet.js"); + +function getYear(d) { + return callDateGet(d, 'FullYear'); +} + +module.exports = getYear; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/getYearFromAbbreviation.js": +/*!**************************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/getYearFromAbbreviation.js ***! + \**************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var getYear = __webpack_require__(/*! ./getYear */ "./node_modules/sugar-date/date/internal/getYear.js"), + mathAliases = __webpack_require__(/*! ../../common/var/mathAliases */ "./node_modules/sugar-date/common/var/mathAliases.js"); + +var abs = mathAliases.abs; + +function getYearFromAbbreviation(str, d, prefer) { + // Following IETF here, adding 1900 or 2000 depending on the last two digits. + // Note that this makes no accordance for what should happen after 2050, but + // intentionally ignoring this for now. https://www.ietf.org/rfc/rfc2822.txt + var val = +str, delta; + val += val < 50 ? 2000 : 1900; + if (prefer) { + delta = val - getYear(d); + if (delta / abs(delta) !== prefer) { + val += prefer * 100; + } + } + return val; +} + +module.exports = getYearFromAbbreviation; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/isUTC.js": +/*!********************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/isUTC.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _utc = __webpack_require__(/*! ../../common/var/_utc */ "./node_modules/sugar-date/common/var/_utc.js"), + tzOffset = __webpack_require__(/*! ./tzOffset */ "./node_modules/sugar-date/date/internal/tzOffset.js"); + +function isUTC(d) { + return !!_utc(d) || tzOffset(d) === 0; +} + +module.exports = isUTC; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/iterateOverDateParams.js": +/*!************************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/iterateOverDateParams.js ***! + \************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var DateUnitIndexes = __webpack_require__(/*! ../var/DateUnitIndexes */ "./node_modules/sugar-date/date/var/DateUnitIndexes.js"), + isDefined = __webpack_require__(/*! ../../common/internal/isDefined */ "./node_modules/sugar-date/common/internal/isDefined.js"), + getDateParam = __webpack_require__(/*! ./getDateParam */ "./node_modules/sugar-date/date/internal/getDateParam.js"), + iterateOverDateUnits = __webpack_require__(/*! ./iterateOverDateUnits */ "./node_modules/sugar-date/date/internal/iterateOverDateUnits.js"); + +var DAY_INDEX = DateUnitIndexes.DAY_INDEX; + +function iterateOverDateParams(params, fn, startIndex, endIndex) { + + function run(name, unit, i) { + var val = getDateParam(params, name); + if (isDefined(val)) { + fn(name, val, unit, i); + } + } + + iterateOverDateUnits(function (unit, i) { + var result = run(unit.name, unit, i); + if (result !== false && i === DAY_INDEX) { + // Check for "weekday", which has a distinct meaning + // in the context of setting a date, but has the same + // meaning as "day" as a unit of time. + result = run('weekday', unit, i); + } + return result; + }, startIndex, endIndex); + +} + +module.exports = iterateOverDateParams; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/iterateOverDateUnits.js": +/*!***********************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/iterateOverDateUnits.js ***! + \***********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var DateUnits = __webpack_require__(/*! ../var/DateUnits */ "./node_modules/sugar-date/date/var/DateUnits.js"), + DateUnitIndexes = __webpack_require__(/*! ../var/DateUnitIndexes */ "./node_modules/sugar-date/date/var/DateUnitIndexes.js"), + isUndefined = __webpack_require__(/*! ../../common/internal/isUndefined */ "./node_modules/sugar-date/common/internal/isUndefined.js"); + +var YEAR_INDEX = DateUnitIndexes.YEAR_INDEX; + +function iterateOverDateUnits(fn, startIndex, endIndex) { + endIndex = endIndex || 0; + if (isUndefined(startIndex)) { + startIndex = YEAR_INDEX; + } + for (var index = startIndex; index >= endIndex; index--) { + if (fn(DateUnits[index], index) === false) { + break; + } + } +} + +module.exports = iterateOverDateUnits; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/iterateOverHigherDateParams.js": +/*!******************************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/iterateOverHigherDateParams.js ***! + \******************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var DateUnitIndexes = __webpack_require__(/*! ../var/DateUnitIndexes */ "./node_modules/sugar-date/date/var/DateUnitIndexes.js"), + iterateOverDateParams = __webpack_require__(/*! ./iterateOverDateParams */ "./node_modules/sugar-date/date/internal/iterateOverDateParams.js"); + +var DAY_INDEX = DateUnitIndexes.DAY_INDEX, + YEAR_INDEX = DateUnitIndexes.YEAR_INDEX; + +function iterateOverHigherDateParams(params, fn) { + iterateOverDateParams(params, fn, YEAR_INDEX, DAY_INDEX); +} + +module.exports = iterateOverHigherDateParams; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/moveToBeginningOfUnit.js": +/*!************************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/moveToBeginningOfUnit.js ***! + \************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var LocaleHelpers = __webpack_require__(/*! ../var/LocaleHelpers */ "./node_modules/sugar-date/date/var/LocaleHelpers.js"), + DateUnitIndexes = __webpack_require__(/*! ../var/DateUnitIndexes */ "./node_modules/sugar-date/date/var/DateUnitIndexes.js"), + getLowerUnitIndex = __webpack_require__(/*! ./getLowerUnitIndex */ "./node_modules/sugar-date/date/internal/getLowerUnitIndex.js"), + moveToBeginningOfWeek = __webpack_require__(/*! ./moveToBeginningOfWeek */ "./node_modules/sugar-date/date/internal/moveToBeginningOfWeek.js"), + setUnitAndLowerToEdge = __webpack_require__(/*! ./setUnitAndLowerToEdge */ "./node_modules/sugar-date/date/internal/setUnitAndLowerToEdge.js"); + +var WEEK_INDEX = DateUnitIndexes.WEEK_INDEX, + localeManager = LocaleHelpers.localeManager; + +function moveToBeginningOfUnit(d, unitIndex, localeCode) { + if (unitIndex === WEEK_INDEX) { + moveToBeginningOfWeek(d, localeManager.get(localeCode).getFirstDayOfWeek()); + } + return setUnitAndLowerToEdge(d, getLowerUnitIndex(unitIndex)); +} + +module.exports = moveToBeginningOfUnit; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/moveToBeginningOfWeek.js": +/*!************************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/moveToBeginningOfWeek.js ***! + \************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var setWeekday = __webpack_require__(/*! ./setWeekday */ "./node_modules/sugar-date/date/internal/setWeekday.js"), + getWeekday = __webpack_require__(/*! ./getWeekday */ "./node_modules/sugar-date/date/internal/getWeekday.js"), + mathAliases = __webpack_require__(/*! ../../common/var/mathAliases */ "./node_modules/sugar-date/common/var/mathAliases.js"); + +var floor = mathAliases.floor; + +function moveToBeginningOfWeek(d, firstDayOfWeek) { + setWeekday(d, floor((getWeekday(d) - firstDayOfWeek) / 7) * 7 + firstDayOfWeek); + return d; +} + +module.exports = moveToBeginningOfWeek; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/moveToEndOfUnit.js": +/*!******************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/moveToEndOfUnit.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var LocaleHelpers = __webpack_require__(/*! ../var/LocaleHelpers */ "./node_modules/sugar-date/date/var/LocaleHelpers.js"), + DateUnitIndexes = __webpack_require__(/*! ../var/DateUnitIndexes */ "./node_modules/sugar-date/date/var/DateUnitIndexes.js"), + moveToEndOfWeek = __webpack_require__(/*! ./moveToEndOfWeek */ "./node_modules/sugar-date/date/internal/moveToEndOfWeek.js"), + getLowerUnitIndex = __webpack_require__(/*! ./getLowerUnitIndex */ "./node_modules/sugar-date/date/internal/getLowerUnitIndex.js"), + setUnitAndLowerToEdge = __webpack_require__(/*! ./setUnitAndLowerToEdge */ "./node_modules/sugar-date/date/internal/setUnitAndLowerToEdge.js"); + +var WEEK_INDEX = DateUnitIndexes.WEEK_INDEX, + localeManager = LocaleHelpers.localeManager; + +function moveToEndOfUnit(d, unitIndex, localeCode, stopIndex) { + if (unitIndex === WEEK_INDEX) { + moveToEndOfWeek(d, localeManager.get(localeCode).getFirstDayOfWeek()); + } + return setUnitAndLowerToEdge(d, getLowerUnitIndex(unitIndex), stopIndex, true); +} + +module.exports = moveToEndOfUnit; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/moveToEndOfWeek.js": +/*!******************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/moveToEndOfWeek.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var setWeekday = __webpack_require__(/*! ./setWeekday */ "./node_modules/sugar-date/date/internal/setWeekday.js"), + getWeekday = __webpack_require__(/*! ./getWeekday */ "./node_modules/sugar-date/date/internal/getWeekday.js"), + mathAliases = __webpack_require__(/*! ../../common/var/mathAliases */ "./node_modules/sugar-date/common/var/mathAliases.js"); + +var ceil = mathAliases.ceil; + +function moveToEndOfWeek(d, firstDayOfWeek) { + var target = firstDayOfWeek - 1; + setWeekday(d, ceil((getWeekday(d) - target) / 7) * 7 + target); + return d; +} + +module.exports = moveToEndOfWeek; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/moveToFirstDayOfWeekYear.js": +/*!***************************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/moveToFirstDayOfWeekYear.js ***! + \***************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var DateUnitIndexes = __webpack_require__(/*! ../var/DateUnitIndexes */ "./node_modules/sugar-date/date/var/DateUnitIndexes.js"), + setDate = __webpack_require__(/*! ./setDate */ "./node_modules/sugar-date/date/internal/setDate.js"), + setUnitAndLowerToEdge = __webpack_require__(/*! ./setUnitAndLowerToEdge */ "./node_modules/sugar-date/date/internal/setUnitAndLowerToEdge.js"), + moveToBeginningOfWeek = __webpack_require__(/*! ./moveToBeginningOfWeek */ "./node_modules/sugar-date/date/internal/moveToBeginningOfWeek.js"); + +var MONTH_INDEX = DateUnitIndexes.MONTH_INDEX; + +function moveToFirstDayOfWeekYear(d, firstDayOfWeek, firstDayOfWeekYear) { + setUnitAndLowerToEdge(d, MONTH_INDEX); + setDate(d, firstDayOfWeekYear); + moveToBeginningOfWeek(d, firstDayOfWeek); +} + +module.exports = moveToFirstDayOfWeekYear; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/resetLowerUnits.js": +/*!******************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/resetLowerUnits.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var getLowerUnitIndex = __webpack_require__(/*! ./getLowerUnitIndex */ "./node_modules/sugar-date/date/internal/getLowerUnitIndex.js"), + setUnitAndLowerToEdge = __webpack_require__(/*! ./setUnitAndLowerToEdge */ "./node_modules/sugar-date/date/internal/setUnitAndLowerToEdge.js"); + +function resetLowerUnits(d, unitIndex) { + return setUnitAndLowerToEdge(d, getLowerUnitIndex(unitIndex)); +} + +module.exports = resetLowerUnits; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/resetTime.js": +/*!************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/resetTime.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var DateUnitIndexes = __webpack_require__(/*! ../var/DateUnitIndexes */ "./node_modules/sugar-date/date/var/DateUnitIndexes.js"), + setUnitAndLowerToEdge = __webpack_require__(/*! ./setUnitAndLowerToEdge */ "./node_modules/sugar-date/date/internal/setUnitAndLowerToEdge.js"); + +var HOURS_INDEX = DateUnitIndexes.HOURS_INDEX; + +function resetTime(d) { + return setUnitAndLowerToEdge(d, HOURS_INDEX); +} + +module.exports = resetTime; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/setDate.js": +/*!**********************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/setDate.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var callDateSet = __webpack_require__(/*! ../../common/internal/callDateSet */ "./node_modules/sugar-date/common/internal/callDateSet.js"); + +function setDate(d, val) { + callDateSet(d, 'Date', val); +} + +module.exports = setDate; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/setDateChainableConstructor.js": +/*!******************************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/setDateChainableConstructor.js ***! + \******************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var createDate = __webpack_require__(/*! ./createDate */ "./node_modules/sugar-date/date/internal/createDate.js"), + namespaceAliases = __webpack_require__(/*! ../../common/var/namespaceAliases */ "./node_modules/sugar-date/common/var/namespaceAliases.js"), + setChainableConstructor = __webpack_require__(/*! ../../common/internal/setChainableConstructor */ "./node_modules/sugar-date/common/internal/setChainableConstructor.js"); + +var sugarDate = namespaceAliases.sugarDate; + +function setDateChainableConstructor() { + setChainableConstructor(sugarDate, createDate); +} + +module.exports = setDateChainableConstructor; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/setISOWeekNumber.js": +/*!*******************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/setISOWeekNumber.js ***! + \*******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var ISODefaults = __webpack_require__(/*! ../var/ISODefaults */ "./node_modules/sugar-date/date/var/ISODefaults.js"), + getDate = __webpack_require__(/*! ./getDate */ "./node_modules/sugar-date/date/internal/getDate.js"), + setDate = __webpack_require__(/*! ./setDate */ "./node_modules/sugar-date/date/internal/setDate.js"), + setYear = __webpack_require__(/*! ./setYear */ "./node_modules/sugar-date/date/internal/setYear.js"), + getYear = __webpack_require__(/*! ./getYear */ "./node_modules/sugar-date/date/internal/getYear.js"), + getMonth = __webpack_require__(/*! ./getMonth */ "./node_modules/sugar-date/date/internal/getMonth.js"), + setMonth = __webpack_require__(/*! ./setMonth */ "./node_modules/sugar-date/date/internal/setMonth.js"), + cloneDate = __webpack_require__(/*! ./cloneDate */ "./node_modules/sugar-date/date/internal/cloneDate.js"), + getWeekday = __webpack_require__(/*! ./getWeekday */ "./node_modules/sugar-date/date/internal/getWeekday.js"), + setWeekday = __webpack_require__(/*! ./setWeekday */ "./node_modules/sugar-date/date/internal/setWeekday.js"), + classChecks = __webpack_require__(/*! ../../common/var/classChecks */ "./node_modules/sugar-date/common/var/classChecks.js"), + moveToFirstDayOfWeekYear = __webpack_require__(/*! ./moveToFirstDayOfWeekYear */ "./node_modules/sugar-date/date/internal/moveToFirstDayOfWeekYear.js"); + +var isNumber = classChecks.isNumber, + ISO_FIRST_DAY_OF_WEEK = ISODefaults.ISO_FIRST_DAY_OF_WEEK, + ISO_FIRST_DAY_OF_WEEK_YEAR = ISODefaults.ISO_FIRST_DAY_OF_WEEK_YEAR; + +function setISOWeekNumber(d, num) { + if (isNumber(num)) { + // Intentionally avoiding updateDate here to prevent circular dependencies. + var isoWeek = cloneDate(d), dow = getWeekday(d); + moveToFirstDayOfWeekYear(isoWeek, ISO_FIRST_DAY_OF_WEEK, ISO_FIRST_DAY_OF_WEEK_YEAR); + setDate(isoWeek, getDate(isoWeek) + 7 * (num - 1)); + setYear(d, getYear(isoWeek)); + setMonth(d, getMonth(isoWeek)); + setDate(d, getDate(isoWeek)); + setWeekday(d, dow || 7); + } + return d.getTime(); +} + +module.exports = setISOWeekNumber; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/setMonth.js": +/*!***********************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/setMonth.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var callDateSet = __webpack_require__(/*! ../../common/internal/callDateSet */ "./node_modules/sugar-date/common/internal/callDateSet.js"); + +function setMonth(d, val) { + callDateSet(d, 'Month', val); +} + +module.exports = setMonth; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/setUnitAndLowerToEdge.js": +/*!************************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/setUnitAndLowerToEdge.js ***! + \************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var isDefined = __webpack_require__(/*! ../../common/internal/isDefined */ "./node_modules/sugar-date/common/internal/isDefined.js"), + classChecks = __webpack_require__(/*! ../../common/var/classChecks */ "./node_modules/sugar-date/common/var/classChecks.js"), + callDateSet = __webpack_require__(/*! ../../common/internal/callDateSet */ "./node_modules/sugar-date/common/internal/callDateSet.js"), + walkUnitDown = __webpack_require__(/*! ./walkUnitDown */ "./node_modules/sugar-date/date/internal/walkUnitDown.js"); + +var isFunction = classChecks.isFunction; + +function setUnitAndLowerToEdge(d, startIndex, stopIndex, end) { + walkUnitDown(startIndex, function(unit, i) { + var val = end ? unit.end : unit.start; + if (isFunction(val)) { + val = val(d); + } + callDateSet(d, unit.method, val); + return !isDefined(stopIndex) || i > stopIndex; + }); + return d; +} + +module.exports = setUnitAndLowerToEdge; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/setWeekday.js": +/*!*************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/setWeekday.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var setDate = __webpack_require__(/*! ./setDate */ "./node_modules/sugar-date/date/internal/setDate.js"), + getDate = __webpack_require__(/*! ./getDate */ "./node_modules/sugar-date/date/internal/getDate.js"), + getWeekday = __webpack_require__(/*! ./getWeekday */ "./node_modules/sugar-date/date/internal/getWeekday.js"), + classChecks = __webpack_require__(/*! ../../common/var/classChecks */ "./node_modules/sugar-date/common/var/classChecks.js"), + mathAliases = __webpack_require__(/*! ../../common/var/mathAliases */ "./node_modules/sugar-date/common/var/mathAliases.js"); + +var isNumber = classChecks.isNumber, + abs = mathAliases.abs; + +function setWeekday(d, dow, dir) { + if (!isNumber(dow)) return; + var currentWeekday = getWeekday(d); + if (dir) { + // Allow a "direction" parameter to determine whether a weekday can + // be set beyond the current weekday in either direction. + var ndir = dir > 0 ? 1 : -1; + var offset = dow % 7 - currentWeekday; + if (offset && offset / abs(offset) !== ndir) { + dow += 7 * ndir; + } + } + setDate(d, getDate(d) + dow - currentWeekday); + return d.getTime(); +} + +module.exports = setWeekday; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/setYear.js": +/*!**********************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/setYear.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var callDateSet = __webpack_require__(/*! ../../common/internal/callDateSet */ "./node_modules/sugar-date/common/internal/callDateSet.js"); + +function setYear(d, val) { + callDateSet(d, 'FullYear', val); +} + +module.exports = setYear; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/tzOffset.js": +/*!***********************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/tzOffset.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function tzOffset(d) { + return d.getTimezoneOffset(); +} + +module.exports = tzOffset; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/updateDate.js": +/*!*************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/updateDate.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var DateUnits = __webpack_require__(/*! ../var/DateUnits */ "./node_modules/sugar-date/date/var/DateUnits.js"), + DateUnitIndexes = __webpack_require__(/*! ../var/DateUnitIndexes */ "./node_modules/sugar-date/date/var/DateUnitIndexes.js"), + trunc = __webpack_require__(/*! ../../common/var/trunc */ "./node_modules/sugar-date/common/var/trunc.js"), + setDate = __webpack_require__(/*! ./setDate */ "./node_modules/sugar-date/date/internal/setDate.js"), + getDate = __webpack_require__(/*! ./getDate */ "./node_modules/sugar-date/date/internal/getDate.js"), + getMonth = __webpack_require__(/*! ./getMonth */ "./node_modules/sugar-date/date/internal/getMonth.js"), + getNewDate = __webpack_require__(/*! ./getNewDate */ "./node_modules/sugar-date/date/internal/getNewDate.js"), + setWeekday = __webpack_require__(/*! ./setWeekday */ "./node_modules/sugar-date/date/internal/setWeekday.js"), + mathAliases = __webpack_require__(/*! ../../common/var/mathAliases */ "./node_modules/sugar-date/common/var/mathAliases.js"), + callDateGet = __webpack_require__(/*! ../../common/internal/callDateGet */ "./node_modules/sugar-date/common/internal/callDateGet.js"), + classChecks = __webpack_require__(/*! ../../common/var/classChecks */ "./node_modules/sugar-date/common/var/classChecks.js"), + resetLowerUnits = __webpack_require__(/*! ./resetLowerUnits */ "./node_modules/sugar-date/date/internal/resetLowerUnits.js"), + getLowerUnitIndex = __webpack_require__(/*! ./getLowerUnitIndex */ "./node_modules/sugar-date/date/internal/getLowerUnitIndex.js"), + getHigherUnitIndex = __webpack_require__(/*! ./getHigherUnitIndex */ "./node_modules/sugar-date/date/internal/getHigherUnitIndex.js"), + callDateSetWithWeek = __webpack_require__(/*! ./callDateSetWithWeek */ "./node_modules/sugar-date/date/internal/callDateSetWithWeek.js"), + iterateOverDateParams = __webpack_require__(/*! ./iterateOverDateParams */ "./node_modules/sugar-date/date/internal/iterateOverDateParams.js"); + +var DAY_INDEX = DateUnitIndexes.DAY_INDEX, + WEEK_INDEX = DateUnitIndexes.WEEK_INDEX, + MONTH_INDEX = DateUnitIndexes.MONTH_INDEX, + YEAR_INDEX = DateUnitIndexes.YEAR_INDEX, + round = mathAliases.round, + isNumber = classChecks.isNumber; + +function updateDate(d, params, reset, advance, prefer, weekdayDir, contextDate) { + var upperUnitIndex; + + function setUpperUnit(unitName, unitIndex) { + if (prefer && !upperUnitIndex) { + if (unitName === 'weekday') { + upperUnitIndex = WEEK_INDEX; + } else { + upperUnitIndex = getHigherUnitIndex(unitIndex); + } + } + } + + function setSpecificity(unitIndex) { + // Other functions may preemptively set the specificity before arriving + // here so concede to them if they have already set more specific units. + if (unitIndex > params.specificity) { + return; + } + params.specificity = unitIndex; + } + + function canDisambiguate() { + if (!upperUnitIndex || upperUnitIndex > YEAR_INDEX) { + return; + } + + switch(prefer) { + case -1: return d >= (contextDate || getNewDate()); + case 1: return d <= (contextDate || getNewDate()); + } + } + + function disambiguateHigherUnit() { + var unit = DateUnits[upperUnitIndex]; + advance = prefer; + setUnit(unit.name, 1, unit, upperUnitIndex); + } + + function handleFraction(unit, unitIndex, fraction) { + if (unitIndex) { + var lowerUnit = DateUnits[getLowerUnitIndex(unitIndex)]; + var val = round(unit.multiplier / lowerUnit.multiplier * fraction); + params[lowerUnit.name] = val; + } + } + + function monthHasShifted(d, targetMonth) { + if (targetMonth < 0) { + targetMonth = targetMonth % 12 + 12; + } + return targetMonth % 12 !== getMonth(d); + } + + function setUnit(unitName, value, unit, unitIndex) { + var method = unit.method, checkMonth, fraction; + + setUpperUnit(unitName, unitIndex); + setSpecificity(unitIndex); + + fraction = value % 1; + if (fraction) { + handleFraction(unit, unitIndex, fraction); + value = trunc(value); + } + + if (unitName === 'weekday') { + if (!advance) { + // Weekdays are always considered absolute units so simply set them + // here even if it is an "advance" operation. This is to help avoid + // ambiguous meanings in "advance" as well as to neatly allow formats + // like "Wednesday of next week" without more complex logic. + setWeekday(d, value, weekdayDir); + } + return; + } + checkMonth = unitIndex === MONTH_INDEX && getDate(d) > 28; + + // If we are advancing or rewinding, then we need we need to set the + // absolute time if the unit is "hours" or less. This is due to the fact + // that setting by method is ambiguous during DST shifts. For example, + // 1:00am on November 1st 2015 occurs twice in North American timezones + // with DST, the second time being after the clocks are rolled back at + // 2:00am. When springing forward this is automatically handled as there + // is no 2:00am so the date automatically jumps to 3:00am. However, when + // rolling back, setHours(2) will always choose the first "2am" even if + // the date is currently set to the second, causing unintended jumps. + // This ambiguity is unavoidable when setting dates as the notation is + // ambiguous. However when advancing, we clearly want the resulting date + // to be an acutal hour ahead, which can only be accomplished by setting + // the absolute time. Conversely, any unit higher than "hours" MUST use + // the internal set methods, as they are ambiguous as absolute units of + // time. Years may be 365 or 366 days depending on leap years, months are + // all over the place, and even days may be 23-25 hours depending on DST + // shifts. Finally, note that the kind of jumping described above will + // occur when calling ANY "set" method on the date and will occur even if + // the value being set is identical to the one currently set (i.e. + // setHours(2) on a date at 2am may not be a noop). This is precarious, + // so avoiding this situation in callDateSet by checking up front that + // the value is not the same before setting. + if (advance && !unit.ambiguous) { + d.setTime(d.getTime() + (value * advance * unit.multiplier)); + return; + } else if (advance) { + if (unitIndex === WEEK_INDEX) { + value *= 7; + method = DateUnits[DAY_INDEX].method; + } + value = (value * advance) + callDateGet(d, method); + } + callDateSetWithWeek(d, method, value, advance); + if (checkMonth && monthHasShifted(d, value)) { + // As we are setting the units in reverse order, there is a chance that + // our date may accidentally traverse into a new month, such as setting + // { month: 1, date 15 } on January 31st. Check for this here and reset + // the date to the last day of the previous month if this has happened. + setDate(d, 0); + } + } + + if (isNumber(params) && advance) { + // If param is a number and advancing, the number is in milliseconds. + params = { millisecond: params }; + } else if (isNumber(params)) { + // Otherwise just set the timestamp and return. + d.setTime(params); + return d; + } + + iterateOverDateParams(params, setUnit); + + if (reset && params.specificity) { + resetLowerUnits(d, params.specificity); + } + + // If past or future is preferred, then the process of "disambiguation" will + // ensure that an ambiguous time/date ("4pm", "thursday", "June", etc.) will + // be in the past or future. Weeks are only considered ambiguous if there is + // a weekday, i.e. "thursday" is an ambiguous week, but "the 4th" is an + // ambiguous month. + if (canDisambiguate()) { + disambiguateHigherUnit(); + } + return d; +} + +module.exports = updateDate; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/internal/walkUnitDown.js": +/*!***************************************************************!*\ + !*** ./node_modules/sugar-date/date/internal/walkUnitDown.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var DateUnits = __webpack_require__(/*! ../var/DateUnits */ "./node_modules/sugar-date/date/var/DateUnits.js"), + getLowerUnitIndex = __webpack_require__(/*! ./getLowerUnitIndex */ "./node_modules/sugar-date/date/internal/getLowerUnitIndex.js"); + +function walkUnitDown(unitIndex, fn) { + while (unitIndex >= 0) { + if (fn(DateUnits[unitIndex], unitIndex) === false) { + break; + } + unitIndex = getLowerUnitIndex(unitIndex); + } +} + +module.exports = walkUnitDown; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/is.js": +/*!********************************************!*\ + !*** ./node_modules/sugar-date/date/is.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + fullCompareDate = __webpack_require__(/*! ./internal/fullCompareDate */ "./node_modules/sugar-date/date/internal/fullCompareDate.js"); + +Sugar.Date.defineInstance({ + + 'is': function(date, d, margin) { + return fullCompareDate(date, d, margin); + } + +}); + +module.exports = Sugar.Date.is; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isAfter.js": +/*!*************************************************!*\ + !*** ./node_modules/sugar-date/date/isAfter.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + createDate = __webpack_require__(/*! ./internal/createDate */ "./node_modules/sugar-date/date/internal/createDate.js"); + +Sugar.Date.defineInstance({ + + 'isAfter': function(date, d, margin) { + return date.getTime() > createDate(d).getTime() - (margin || 0); + } + +}); + +module.exports = Sugar.Date.isAfter; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isBefore.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/date/isBefore.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + createDate = __webpack_require__(/*! ./internal/createDate */ "./node_modules/sugar-date/date/internal/createDate.js"); + +Sugar.Date.defineInstance({ + + 'isBefore': function(date, d, margin) { + return date.getTime() < createDate(d).getTime() + (margin || 0); + } + +}); + +module.exports = Sugar.Date.isBefore; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isBetween.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/date/isBetween.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + createDate = __webpack_require__(/*! ./internal/createDate */ "./node_modules/sugar-date/date/internal/createDate.js"), + mathAliases = __webpack_require__(/*! ../common/var/mathAliases */ "./node_modules/sugar-date/common/var/mathAliases.js"); + +var min = mathAliases.min, + max = mathAliases.max; + +Sugar.Date.defineInstance({ + + 'isBetween': function(date, d1, d2, margin) { + var t = date.getTime(); + var t1 = createDate(d1).getTime(); + var t2 = createDate(d2).getTime(); + var lo = min(t1, t2); + var hi = max(t1, t2); + margin = margin || 0; + return (lo - margin <= t) && (hi + margin >= t); + } + +}); + +module.exports = Sugar.Date.isBetween; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isFriday.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/date/isFriday.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildRelativeAliasesCall */ "./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js"); + +module.exports = Sugar.Date.isFriday; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isFuture.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/date/isFuture.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildRelativeAliasesCall */ "./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js"); + +module.exports = Sugar.Date.isFuture; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isLastMonth.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/date/isLastMonth.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.isLastMonth; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isLastWeek.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/isLastWeek.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.isLastWeek; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isLastYear.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/isLastYear.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.isLastYear; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isLeapYear.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/isLeapYear.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + getYear = __webpack_require__(/*! ./internal/getYear */ "./node_modules/sugar-date/date/internal/getYear.js"); + +Sugar.Date.defineInstance({ + + 'isLeapYear': function(date) { + var year = getYear(date); + return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0); + } + +}); + +module.exports = Sugar.Date.isLeapYear; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isMonday.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/date/isMonday.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildRelativeAliasesCall */ "./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js"); + +module.exports = Sugar.Date.isMonday; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isNextMonth.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/date/isNextMonth.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.isNextMonth; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isNextWeek.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/isNextWeek.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.isNextWeek; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isNextYear.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/isNextYear.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.isNextYear; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isPast.js": +/*!************************************************!*\ + !*** ./node_modules/sugar-date/date/isPast.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildRelativeAliasesCall */ "./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js"); + +module.exports = Sugar.Date.isPast; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isSaturday.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/isSaturday.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildRelativeAliasesCall */ "./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js"); + +module.exports = Sugar.Date.isSaturday; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isSunday.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/date/isSunday.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildRelativeAliasesCall */ "./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js"); + +module.exports = Sugar.Date.isSunday; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isThisMonth.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/date/isThisMonth.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.isThisMonth; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isThisWeek.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/isThisWeek.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.isThisWeek; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isThisYear.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/isThisYear.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.isThisYear; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isThursday.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/isThursday.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildRelativeAliasesCall */ "./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js"); + +module.exports = Sugar.Date.isThursday; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isToday.js": +/*!*************************************************!*\ + !*** ./node_modules/sugar-date/date/isToday.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildRelativeAliasesCall */ "./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js"); + +module.exports = Sugar.Date.isToday; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isTomorrow.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/isTomorrow.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildRelativeAliasesCall */ "./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js"); + +module.exports = Sugar.Date.isTomorrow; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isTuesday.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/date/isTuesday.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildRelativeAliasesCall */ "./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js"); + +module.exports = Sugar.Date.isTuesday; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isUTC.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/date/isUTC.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + isUTC = __webpack_require__(/*! ./internal/isUTC */ "./node_modules/sugar-date/date/internal/isUTC.js"); + +Sugar.Date.defineInstance({ + + 'isUTC': function(date) { + return isUTC(date); + } + +}); + +module.exports = Sugar.Date.isUTC; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isValid.js": +/*!*************************************************!*\ + !*** ./node_modules/sugar-date/date/isValid.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + dateIsValid = __webpack_require__(/*! ./internal/dateIsValid */ "./node_modules/sugar-date/date/internal/dateIsValid.js"); + +Sugar.Date.defineInstance({ + + 'isValid': function(date) { + return dateIsValid(date); + } + +}); + +module.exports = Sugar.Date.isValid; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isWednesday.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/date/isWednesday.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildRelativeAliasesCall */ "./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js"); + +module.exports = Sugar.Date.isWednesday; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isWeekday.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/date/isWeekday.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildRelativeAliasesCall */ "./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js"); + +module.exports = Sugar.Date.isWeekday; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isWeekend.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/date/isWeekend.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildRelativeAliasesCall */ "./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js"); + +module.exports = Sugar.Date.isWeekend; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/isYesterday.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/date/isYesterday.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildRelativeAliasesCall */ "./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js"); + +module.exports = Sugar.Date.isYesterday; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/iso.js": +/*!*********************************************!*\ + !*** ./node_modules/sugar-date/date/iso.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +Sugar.Date.defineInstance({ + + 'iso': function(date) { + return date.toISOString(); + } + +}); + +module.exports = Sugar.Date.iso; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/millisecondsAgo.js": +/*!*********************************************************!*\ + !*** ./node_modules/sugar-date/date/millisecondsAgo.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.millisecondsAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/millisecondsFromNow.js": +/*!*************************************************************!*\ + !*** ./node_modules/sugar-date/date/millisecondsFromNow.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.millisecondsFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/millisecondsSince.js": +/*!***********************************************************!*\ + !*** ./node_modules/sugar-date/date/millisecondsSince.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.millisecondsSince; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/millisecondsUntil.js": +/*!***********************************************************!*\ + !*** ./node_modules/sugar-date/date/millisecondsUntil.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.millisecondsUntil; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/minutesAgo.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/minutesAgo.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.minutesAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/minutesFromNow.js": +/*!********************************************************!*\ + !*** ./node_modules/sugar-date/date/minutesFromNow.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.minutesFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/minutesSince.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/date/minutesSince.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.minutesSince; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/minutesUntil.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/date/minutesUntil.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.minutesUntil; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/monthsAgo.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/date/monthsAgo.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.monthsAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/monthsFromNow.js": +/*!*******************************************************!*\ + !*** ./node_modules/sugar-date/date/monthsFromNow.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.monthsFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/monthsSince.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/date/monthsSince.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.monthsSince; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/monthsUntil.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/date/monthsUntil.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.monthsUntil; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/range.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/date/range.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + DateRangeConstructor = __webpack_require__(/*! ../range/var/DateRangeConstructor */ "./node_modules/sugar-date/range/var/DateRangeConstructor.js"); + +Sugar.Date.defineStatic({ + + 'range': DateRangeConstructor + +}); + +module.exports = Sugar.Date.range; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/relative.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/date/relative.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + dateRelative = __webpack_require__(/*! ./internal/dateRelative */ "./node_modules/sugar-date/date/internal/dateRelative.js"); + +Sugar.Date.defineInstance({ + + 'relative': function(date, localeCode, relativeFn) { + return dateRelative(date, null, localeCode, relativeFn); + } + +}); + +module.exports = Sugar.Date.relative; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/relativeTo.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/relativeTo.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + createDate = __webpack_require__(/*! ./internal/createDate */ "./node_modules/sugar-date/date/internal/createDate.js"), + dateRelative = __webpack_require__(/*! ./internal/dateRelative */ "./node_modules/sugar-date/date/internal/dateRelative.js"); + +Sugar.Date.defineInstance({ + + 'relativeTo': function(date, d, localeCode) { + return dateRelative(date, createDate(d), localeCode); + } + +}); + +module.exports = Sugar.Date.relativeTo; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/removeLocale.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/date/removeLocale.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + LocaleHelpers = __webpack_require__(/*! ./var/LocaleHelpers */ "./node_modules/sugar-date/date/var/LocaleHelpers.js"); + +var localeManager = LocaleHelpers.localeManager; + +Sugar.Date.defineStatic({ + + 'removeLocale': function(code) { + return localeManager.remove(code); + } + +}); + +module.exports = Sugar.Date.removeLocale; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/reset.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/date/reset.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + DateUnitIndexes = __webpack_require__(/*! ./var/DateUnitIndexes */ "./node_modules/sugar-date/date/var/DateUnitIndexes.js"), + moveToBeginningOfUnit = __webpack_require__(/*! ./internal/moveToBeginningOfUnit */ "./node_modules/sugar-date/date/internal/moveToBeginningOfUnit.js"), + getUnitIndexForParamName = __webpack_require__(/*! ./internal/getUnitIndexForParamName */ "./node_modules/sugar-date/date/internal/getUnitIndexForParamName.js"); + +var DAY_INDEX = DateUnitIndexes.DAY_INDEX; + +Sugar.Date.defineInstance({ + + 'reset': function(date, unit, localeCode) { + var unitIndex = unit ? getUnitIndexForParamName(unit) : DAY_INDEX; + moveToBeginningOfUnit(date, unitIndex, localeCode); + return date; + } + +}); + +module.exports = Sugar.Date.reset; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/rewind.js": +/*!************************************************!*\ + !*** ./node_modules/sugar-date/date/rewind.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + advanceDateWithArgs = __webpack_require__(/*! ./internal/advanceDateWithArgs */ "./node_modules/sugar-date/date/internal/advanceDateWithArgs.js"); + +Sugar.Date.defineInstanceWithArguments({ + + 'rewind': function(d, args) { + return advanceDateWithArgs(d, args, -1); + } + +}); + +module.exports = Sugar.Date.rewind; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/secondsAgo.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/secondsAgo.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.secondsAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/secondsFromNow.js": +/*!********************************************************!*\ + !*** ./node_modules/sugar-date/date/secondsFromNow.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.secondsFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/secondsSince.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/date/secondsSince.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.secondsSince; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/secondsUntil.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/date/secondsUntil.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.secondsUntil; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/set.js": +/*!*********************************************!*\ + !*** ./node_modules/sugar-date/date/set.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + updateDate = __webpack_require__(/*! ./internal/updateDate */ "./node_modules/sugar-date/date/internal/updateDate.js"), + collectUpdateDateArguments = __webpack_require__(/*! ./internal/collectUpdateDateArguments */ "./node_modules/sugar-date/date/internal/collectUpdateDateArguments.js"); + +Sugar.Date.defineInstanceWithArguments({ + + 'set': function(d, args) { + args = collectUpdateDateArguments(args); + return updateDate(d, args[0], args[1]); + } + +}); + +module.exports = Sugar.Date.set; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/setISOWeek.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/setISOWeek.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + setISOWeekNumber = __webpack_require__(/*! ./internal/setISOWeekNumber */ "./node_modules/sugar-date/date/internal/setISOWeekNumber.js"); + +Sugar.Date.defineInstance({ + + 'setISOWeek': function(date, num) { + return setISOWeekNumber(date, num); + } + +}); + +module.exports = Sugar.Date.setISOWeek; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/setLocale.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/date/setLocale.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + LocaleHelpers = __webpack_require__(/*! ./var/LocaleHelpers */ "./node_modules/sugar-date/date/var/LocaleHelpers.js"); + +var localeManager = LocaleHelpers.localeManager; + +Sugar.Date.defineStatic({ + + 'setLocale': function(code) { + return localeManager.set(code); + } + +}); + +module.exports = Sugar.Date.setLocale; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/setOption.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/date/setOption.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + _dateOptions = __webpack_require__(/*! ./var/_dateOptions */ "./node_modules/sugar-date/date/var/_dateOptions.js"); + +module.exports = Sugar.Date.setOption; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/setUTC.js": +/*!************************************************!*\ + !*** ./node_modules/sugar-date/date/setUTC.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + _utc = __webpack_require__(/*! ../common/var/_utc */ "./node_modules/sugar-date/common/var/_utc.js"); + +Sugar.Date.defineInstance({ + + 'setUTC': function(date, on) { + return _utc(date, on); + } + +}); + +module.exports = Sugar.Date.setUTC; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/setWeekday.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/setWeekday.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + setWeekday = __webpack_require__(/*! ./internal/setWeekday */ "./node_modules/sugar-date/date/internal/setWeekday.js"); + +Sugar.Date.defineInstance({ + + 'setWeekday': function(date, dow) { + return setWeekday(date, dow); + } + +}); + +module.exports = Sugar.Date.setWeekday; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/ABBREVIATED_YEAR_REG.js": +/*!******************************************************************!*\ + !*** ./node_modules/sugar-date/date/var/ABBREVIATED_YEAR_REG.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = /^'?(\d{1,2})$/; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/AmericanEnglishDefinition.js": +/*!***********************************************************************!*\ + !*** ./node_modules/sugar-date/date/var/AmericanEnglishDefinition.js ***! + \***********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var getEnglishVariant = __webpack_require__(/*! ../internal/getEnglishVariant */ "./node_modules/sugar-date/date/internal/getEnglishVariant.js"); + +var AmericanEnglishDefinition = getEnglishVariant({ + 'mdy': true, + 'firstDayOfWeek': 0, + 'firstDayOfWeekYear': 1, + 'short': '{MM}/{dd}/{yyyy}', + 'medium': '{Month} {d}, {yyyy}', + 'long': '{Month} {d}, {yyyy} {time}', + 'full': '{Weekday}, {Month} {d}, {yyyy} {time}', + 'stamp': '{Dow} {Mon} {d} {yyyy} {time}', + 'time': '{h}:{mm} {TT}' +}); + +module.exports = AmericanEnglishDefinition; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/BritishEnglishDefinition.js": +/*!**********************************************************************!*\ + !*** ./node_modules/sugar-date/date/var/BritishEnglishDefinition.js ***! + \**********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var getEnglishVariant = __webpack_require__(/*! ../internal/getEnglishVariant */ "./node_modules/sugar-date/date/internal/getEnglishVariant.js"); + +var BritishEnglishDefinition = getEnglishVariant({ + 'short': '{dd}/{MM}/{yyyy}', + 'medium': '{d} {Month} {yyyy}', + 'long': '{d} {Month} {yyyy} {H}:{mm}', + 'full': '{Weekday}, {d} {Month}, {yyyy} {time}', + 'stamp': '{Dow} {d} {Mon} {yyyy} {time}' +}); + +module.exports = BritishEnglishDefinition; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/CanadianEnglishDefinition.js": +/*!***********************************************************************!*\ + !*** ./node_modules/sugar-date/date/var/CanadianEnglishDefinition.js ***! + \***********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var getEnglishVariant = __webpack_require__(/*! ../internal/getEnglishVariant */ "./node_modules/sugar-date/date/internal/getEnglishVariant.js"); + +var CanadianEnglishDefinition = getEnglishVariant({ + 'short': '{yyyy}-{MM}-{dd}', + 'medium': '{d} {Month}, {yyyy}', + 'long': '{d} {Month}, {yyyy} {H}:{mm}', + 'full': '{Weekday}, {d} {Month}, {yyyy} {time}', + 'stamp': '{Dow} {d} {Mon} {yyyy} {time}' +}); + +module.exports = CanadianEnglishDefinition; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/CoreOutputFormats.js": +/*!***************************************************************!*\ + !*** ./node_modules/sugar-date/date/var/CoreOutputFormats.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var CoreOutputFormats = { + 'ISO8601': '{yyyy}-{MM}-{dd}T{HH}:{mm}:{ss}.{SSS}{Z}', + 'RFC1123': '{Dow}, {dd} {Mon} {yyyy} {HH}:{mm}:{ss} {ZZ}', + 'RFC1036': '{Weekday}, {dd}-{Mon}-{yy} {HH}:{mm}:{ss} {ZZ}' +}; + +module.exports = CoreOutputFormats; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/CoreParsingFormats.js": +/*!****************************************************************!*\ + !*** ./node_modules/sugar-date/date/var/CoreParsingFormats.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var CoreParsingFormats = [ + { + // 12-1978 + // 08-1978 (MDY) + src: '{MM}[-.\\/]{yyyy}' + }, + { + // 12/08/1978 + // 08/12/1978 (MDY) + time: true, + src: '{dd}[-\\/]{MM}(?:[-\\/]{yyyy|yy|y})?', + mdy: '{MM}[-\\/]{dd}(?:[-\\/]{yyyy|yy|y})?' + }, + { + // 12.08.1978 + // 08.12.1978 (MDY) + time: true, + src: '{dd}\\.{MM}(?:\\.{yyyy|yy|y})?', + mdy: '{MM}\\.{dd}(?:\\.{yyyy|yy|y})?', + localeCheck: function(loc) { + // Do not allow this format if the locale + // uses a period as a time separator. + return loc.timeSeparator !== '.'; + } + }, + { + // 1975-08-25 + time: true, + src: '{yyyy}[-.\\/]{MM}(?:[-.\\/]{dd})?' + }, + { + // .NET JSON + src: '\\\\/Date\\({timestamp}(?:[-+]\\d{4,4})?\\)\\\\/' + }, + { + // ISO-8601 + src: '{iyyyy}(?:-?{MM}(?:-?{dd}(?:T{ihh}(?::?{imm}(?::?{ss})?)?)?)?)?{tzOffset?}' + } +]; + +module.exports = CoreParsingFormats; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/CoreParsingTokens.js": +/*!***************************************************************!*\ + !*** ./node_modules/sugar-date/date/var/CoreParsingTokens.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var CoreParsingTokens = { + 'yyyy': { + param: 'year', + src: '[-−+]?\\d{4,6}' + }, + 'yy': { + param: 'year', + src: '\\d{2}' + }, + 'y': { + param: 'year', + src: '\\d' + }, + 'ayy': { + param: 'year', + src: '\'\\d{2}' + }, + 'MM': { + param: 'month', + src: '(?:1[012]|0?[1-9])' + }, + 'dd': { + param: 'date', + src: '(?:3[01]|[12][0-9]|0?[1-9])' + }, + 'hh': { + param: 'hour', + src: '(?:2[0-4]|[01]?[0-9])' + }, + 'mm': { + param: 'minute', + src: '[0-5]\\d' + }, + 'ss': { + param: 'second', + src: '[0-5]\\d(?:[,.]\\d+)?' + }, + 'tzHour': { + src: '[-−+](?:2[0-4]|[01]?[0-9])' + }, + 'tzMinute': { + src: '[0-5]\\d' + }, + 'iyyyy': { + param: 'year', + src: '(?:[-−+]?\\d{4}|[-−+]\\d{5,6})' + }, + 'ihh': { + param: 'hour', + src: '(?:2[0-4]|[01][0-9])(?:[,.]\\d+)?' + }, + 'imm': { + param: 'minute', + src: '[0-5]\\d(?:[,.]\\d+)?' + }, + 'GMT': { + param: 'utc', + src: 'GMT' + }, + 'Z': { + param: 'utc', + src: 'Z' + }, + 'timestamp': { + src: '\\d+' + } +}; + +module.exports = CoreParsingTokens; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/DATE_OPTIONS.js": +/*!**********************************************************!*\ + !*** ./node_modules/sugar-date/date/var/DATE_OPTIONS.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var defaultNewDate = __webpack_require__(/*! ../internal/defaultNewDate */ "./node_modules/sugar-date/date/internal/defaultNewDate.js"); + +var DATE_OPTIONS = { + 'newDateInternal': defaultNewDate +}; + +module.exports = DATE_OPTIONS; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/DateUnitIndexes.js": +/*!*************************************************************!*\ + !*** ./node_modules/sugar-date/date/var/DateUnitIndexes.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = { + HOURS_INDEX: 3, + DAY_INDEX: 4, + WEEK_INDEX: 5, + MONTH_INDEX: 6, + YEAR_INDEX: 7 +}; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/DateUnits.js": +/*!*******************************************************!*\ + !*** ./node_modules/sugar-date/date/var/DateUnits.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var getDaysInMonth = __webpack_require__(/*! ../internal/getDaysInMonth */ "./node_modules/sugar-date/date/internal/getDaysInMonth.js"); + +var DateUnits = [ + { + name: 'millisecond', + method: 'Milliseconds', + multiplier: 1, + start: 0, + end: 999 + }, + { + name: 'second', + method: 'Seconds', + multiplier: 1000, + start: 0, + end: 59 + }, + { + name: 'minute', + method: 'Minutes', + multiplier: 60 * 1000, + start: 0, + end: 59 + }, + { + name: 'hour', + method: 'Hours', + multiplier: 60 * 60 * 1000, + start: 0, + end: 23 + }, + { + name: 'day', + alias: 'date', + method: 'Date', + ambiguous: true, + multiplier: 24 * 60 * 60 * 1000, + start: 1, + end: function(d) { + return getDaysInMonth(d); + } + }, + { + name: 'week', + method: 'ISOWeek', + ambiguous: true, + multiplier: 7 * 24 * 60 * 60 * 1000 + }, + { + name: 'month', + method: 'Month', + ambiguous: true, + multiplier: 30.4375 * 24 * 60 * 60 * 1000, + start: 0, + end: 11 + }, + { + name: 'year', + method: 'FullYear', + ambiguous: true, + multiplier: 365.25 * 24 * 60 * 60 * 1000, + start: 0 + } +]; + +module.exports = DateUnits; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/EnglishLocaleBaseDefinition.js": +/*!*************************************************************************!*\ + !*** ./node_modules/sugar-date/date/var/EnglishLocaleBaseDefinition.js ***! + \*************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var EnglishLocaleBaseDefinition = { + 'code': 'en', + 'plural': true, + 'timeMarkers': 'at', + 'ampm': 'AM|A.M.|a,PM|P.M.|p', + 'units': 'millisecond:|s,second:|s,minute:|s,hour:|s,day:|s,week:|s,month:|s,year:|s', + 'months': 'Jan:uary|,Feb:ruary|,Mar:ch|,Apr:il|,May,Jun:e|,Jul:y|,Aug:ust|,Sep:tember|t|,Oct:ober|,Nov:ember|,Dec:ember|', + 'weekdays': 'Sun:day|,Mon:day|,Tue:sday|,Wed:nesday|,Thu:rsday|,Fri:day|,Sat:urday|+weekend', + 'numerals': 'zero,one|first,two|second,three|third,four:|th,five|fifth,six:|th,seven:|th,eight:|h,nin:e|th,ten:|th', + 'articles': 'a,an,the', + 'tokens': 'the,st|nd|rd|th,of|in,a|an,on', + 'time': '{H}:{mm}', + 'past': '{num} {unit} {sign}', + 'future': '{num} {unit} {sign}', + 'duration': '{num} {unit}', + 'modifiers': [ + { 'name': 'half', 'src': 'half', 'value': .5 }, + { 'name': 'midday', 'src': 'noon', 'value': 12 }, + { 'name': 'midday', 'src': 'midnight', 'value': 24 }, + { 'name': 'day', 'src': 'yesterday', 'value': -1 }, + { 'name': 'day', 'src': 'today|tonight', 'value': 0 }, + { 'name': 'day', 'src': 'tomorrow', 'value': 1 }, + { 'name': 'sign', 'src': 'ago|before', 'value': -1 }, + { 'name': 'sign', 'src': 'from now|after|from|in|later', 'value': 1 }, + { 'name': 'edge', 'src': 'first day|first|beginning', 'value': -2 }, + { 'name': 'edge', 'src': 'last day', 'value': 1 }, + { 'name': 'edge', 'src': 'end|last', 'value': 2 }, + { 'name': 'shift', 'src': 'last', 'value': -1 }, + { 'name': 'shift', 'src': 'the|this', 'value': 0 }, + { 'name': 'shift', 'src': 'next', 'value': 1 } + ], + 'parse': [ + '(?:just)? now', + '{shift} {unit:5-7}', + '{months?} {year}', + '{midday} {4?} {day|weekday}', + '{months},?[-.\\/\\s]?{year?}', + '{edge} of (?:day)? {day|weekday}', + '{0} {num}{1?} {weekday} {2} {months},? {year?}', + '{shift?} {day?} {weekday?} (?:at)? {midday}', + '{sign?} {3?} {half} {3?} {unit:3-4|unit:7} {sign?}', + '{0?} {edge} {weekday?} {2} {shift?} {unit:4-7?} {months?},? {year?}' + ], + 'timeParse': [ + '{day|weekday}', + '{shift} {unit:5?} {weekday}', + '{0?} {date}{1?} {2?} {months?}', + '{weekday} {2?} {shift} {unit:5}', + '{0?} {num} {2?} {months}\\.?,? {year?}', + '{num?} {unit:4-5} {sign} {day|weekday}', + '{0|months} {date?}{1?} of {shift} {unit:6-7}', + '{0?} {num}{1?} {weekday} of {shift} {unit:6}', + '{year?}[-.\\/\\s]?{months}[-.\\/\\s]{date}', + '{date}[-.\\/\\s]{months}(?:[-.\\/\\s]{year|yy})?', + '{weekday?}\\.?,? {months}\\.?,? {date}{1?},? {year?}', + '{weekday?}\\.?,? {date} {months} {year}' + ], + 'timeFrontParse': [ + '{sign} {num} {unit}', + '{num} {unit} {sign}', + '{4?} {day|weekday}' + ] +}; + +module.exports = EnglishLocaleBaseDefinition; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/FormatTokensBase.js": +/*!**************************************************************!*\ + !*** ./node_modules/sugar-date/date/var/FormatTokensBase.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var TIMEZONE_ABBREVIATION_REG = __webpack_require__(/*! ./TIMEZONE_ABBREVIATION_REG */ "./node_modules/sugar-date/date/var/TIMEZONE_ABBREVIATION_REG.js"), + LocaleHelpers = __webpack_require__(/*! ./LocaleHelpers */ "./node_modules/sugar-date/date/var/LocaleHelpers.js"), + DateUnitIndexes = __webpack_require__(/*! ./DateUnitIndexes */ "./node_modules/sugar-date/date/var/DateUnitIndexes.js"), + trunc = __webpack_require__(/*! ../../common/var/trunc */ "./node_modules/sugar-date/common/var/trunc.js"), + getDate = __webpack_require__(/*! ../internal/getDate */ "./node_modules/sugar-date/date/internal/getDate.js"), + getYear = __webpack_require__(/*! ../internal/getYear */ "./node_modules/sugar-date/date/internal/getYear.js"), + getHours = __webpack_require__(/*! ../internal/getHours */ "./node_modules/sugar-date/date/internal/getHours.js"), + getMonth = __webpack_require__(/*! ../internal/getMonth */ "./node_modules/sugar-date/date/internal/getMonth.js"), + cloneDate = __webpack_require__(/*! ../internal/cloneDate */ "./node_modules/sugar-date/date/internal/cloneDate.js"), + padNumber = __webpack_require__(/*! ../../common/internal/padNumber */ "./node_modules/sugar-date/common/internal/padNumber.js"), + getWeekday = __webpack_require__(/*! ../internal/getWeekday */ "./node_modules/sugar-date/date/internal/getWeekday.js"), + callDateGet = __webpack_require__(/*! ../../common/internal/callDateGet */ "./node_modules/sugar-date/common/internal/callDateGet.js"), + mathAliases = __webpack_require__(/*! ../../common/var/mathAliases */ "./node_modules/sugar-date/common/var/mathAliases.js"), + getWeekYear = __webpack_require__(/*! ../internal/getWeekYear */ "./node_modules/sugar-date/date/internal/getWeekYear.js"), + getUTCOffset = __webpack_require__(/*! ../internal/getUTCOffset */ "./node_modules/sugar-date/date/internal/getUTCOffset.js"), + getDaysSince = __webpack_require__(/*! ../internal/getDaysSince */ "./node_modules/sugar-date/date/internal/getDaysSince.js"), + getWeekNumber = __webpack_require__(/*! ../internal/getWeekNumber */ "./node_modules/sugar-date/date/internal/getWeekNumber.js"), + getMeridiemToken = __webpack_require__(/*! ../internal/getMeridiemToken */ "./node_modules/sugar-date/date/internal/getMeridiemToken.js"), + setUnitAndLowerToEdge = __webpack_require__(/*! ../internal/setUnitAndLowerToEdge */ "./node_modules/sugar-date/date/internal/setUnitAndLowerToEdge.js"); + +var localeManager = LocaleHelpers.localeManager, + MONTH_INDEX = DateUnitIndexes.MONTH_INDEX, + ceil = mathAliases.ceil; + +var FormatTokensBase = [ + { + ldml: 'Dow', + strf: 'a', + lowerToken: 'dow', + get: function(d, localeCode) { + return localeManager.get(localeCode).getWeekdayName(getWeekday(d), 2); + } + }, + { + ldml: 'Weekday', + strf: 'A', + lowerToken: 'weekday', + allowAlternates: true, + get: function(d, localeCode, alternate) { + return localeManager.get(localeCode).getWeekdayName(getWeekday(d), alternate); + } + }, + { + ldml: 'Mon', + strf: 'b h', + lowerToken: 'mon', + get: function(d, localeCode) { + return localeManager.get(localeCode).getMonthName(getMonth(d), 2); + } + }, + { + ldml: 'Month', + strf: 'B', + lowerToken: 'month', + allowAlternates: true, + get: function(d, localeCode, alternate) { + return localeManager.get(localeCode).getMonthName(getMonth(d), alternate); + } + }, + { + strf: 'C', + get: function(d) { + return getYear(d).toString().slice(0, 2); + } + }, + { + ldml: 'd date day', + strf: 'd', + strfPadding: 2, + ldmlPaddedToken: 'dd', + ordinalToken: 'do', + get: function(d) { + return getDate(d); + } + }, + { + strf: 'e', + get: function(d) { + return padNumber(getDate(d), 2, false, 10, ' '); + } + }, + { + ldml: 'H 24hr', + strf: 'H', + strfPadding: 2, + ldmlPaddedToken: 'HH', + get: function(d) { + return getHours(d); + } + }, + { + ldml: 'h hours 12hr', + strf: 'I', + strfPadding: 2, + ldmlPaddedToken: 'hh', + get: function(d) { + return getHours(d) % 12 || 12; + } + }, + { + ldml: 'D', + strf: 'j', + strfPadding: 3, + ldmlPaddedToken: 'DDD', + get: function(d) { + var s = setUnitAndLowerToEdge(cloneDate(d), MONTH_INDEX); + return getDaysSince(d, s) + 1; + } + }, + { + ldml: 'M', + strf: 'm', + strfPadding: 2, + ordinalToken: 'Mo', + ldmlPaddedToken: 'MM', + get: function(d) { + return getMonth(d) + 1; + } + }, + { + ldml: 'm minutes', + strf: 'M', + strfPadding: 2, + ldmlPaddedToken: 'mm', + get: function(d) { + return callDateGet(d, 'Minutes'); + } + }, + { + ldml: 'Q', + get: function(d) { + return ceil((getMonth(d) + 1) / 3); + } + }, + { + ldml: 'TT', + strf: 'p', + get: function(d, localeCode) { + return getMeridiemToken(d, localeCode); + } + }, + { + ldml: 'tt', + strf: 'P', + get: function(d, localeCode) { + return getMeridiemToken(d, localeCode).toLowerCase(); + } + }, + { + ldml: 'T', + lowerToken: 't', + get: function(d, localeCode) { + return getMeridiemToken(d, localeCode).charAt(0); + } + }, + { + ldml: 's seconds', + strf: 'S', + strfPadding: 2, + ldmlPaddedToken: 'ss', + get: function(d) { + return callDateGet(d, 'Seconds'); + } + }, + { + ldml: 'S ms', + strfPadding: 3, + ldmlPaddedToken: 'SSS', + get: function(d) { + return callDateGet(d, 'Milliseconds'); + } + }, + { + ldml: 'e', + strf: 'u', + ordinalToken: 'eo', + get: function(d) { + return getWeekday(d) || 7; + } + }, + { + strf: 'U', + strfPadding: 2, + get: function(d) { + // Sunday first, 0-53 + return getWeekNumber(d, false, 0); + } + }, + { + ldml: 'W', + strf: 'V', + strfPadding: 2, + ordinalToken: 'Wo', + ldmlPaddedToken: 'WW', + get: function(d) { + // Monday first, 1-53 (ISO8601) + return getWeekNumber(d, true); + } + }, + { + strf: 'w', + get: function(d) { + return getWeekday(d); + } + }, + { + ldml: 'w', + ordinalToken: 'wo', + ldmlPaddedToken: 'ww', + get: function(d, localeCode) { + // Locale dependent, 1-53 + var loc = localeManager.get(localeCode), + dow = loc.getFirstDayOfWeek(localeCode), + doy = loc.getFirstDayOfWeekYear(localeCode); + return getWeekNumber(d, true, dow, doy); + } + }, + { + strf: 'W', + strfPadding: 2, + get: function(d) { + // Monday first, 0-53 + return getWeekNumber(d, false); + } + }, + { + ldmlPaddedToken: 'gggg', + ldmlTwoDigitToken: 'gg', + get: function(d, localeCode) { + return getWeekYear(d, localeCode); + } + }, + { + strf: 'G', + strfPadding: 4, + strfTwoDigitToken: 'g', + ldmlPaddedToken: 'GGGG', + ldmlTwoDigitToken: 'GG', + get: function(d, localeCode) { + return getWeekYear(d, localeCode, true); + } + }, + { + ldml: 'year', + ldmlPaddedToken: 'yyyy', + ldmlTwoDigitToken: 'yy', + strf: 'Y', + strfPadding: 4, + strfTwoDigitToken: 'y', + get: function(d) { + return getYear(d); + } + }, + { + ldml: 'ZZ', + strf: 'z', + get: function(d) { + return getUTCOffset(d); + } + }, + { + ldml: 'X', + get: function(d) { + return trunc(d.getTime() / 1000); + } + }, + { + ldml: 'x', + get: function(d) { + return d.getTime(); + } + }, + { + ldml: 'Z', + get: function(d) { + return getUTCOffset(d, true); + } + }, + { + ldml: 'z', + strf: 'Z', + get: function(d) { + // Note that this is not accurate in all browsing environments! + // https://github.com/moment/moment/issues/162 + // It will continue to be supported for Node and usage with the + // understanding that it may be blank. + var match = d.toString().match(TIMEZONE_ABBREVIATION_REG); + // istanbul ignore next + return match ? match[1] : ''; + } + }, + { + strf: 'D', + alias: '%m/%d/%y' + }, + { + strf: 'F', + alias: '%Y-%m-%d' + }, + { + strf: 'r', + alias: '%I:%M:%S %p' + }, + { + strf: 'R', + alias: '%H:%M' + }, + { + strf: 'T', + alias: '%H:%M:%S' + }, + { + strf: 'x', + alias: '{short}' + }, + { + strf: 'X', + alias: '{time}' + }, + { + strf: 'c', + alias: '{stamp}' + } +]; + +module.exports = FormatTokensBase; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/ISODefaults.js": +/*!*********************************************************!*\ + !*** ./node_modules/sugar-date/date/var/ISODefaults.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = { + ISO_FIRST_DAY_OF_WEEK: 1, + ISO_FIRST_DAY_OF_WEEK_YEAR: 4 +}; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/LOCALE_ARRAY_FIELDS.js": +/*!*****************************************************************!*\ + !*** ./node_modules/sugar-date/date/var/LOCALE_ARRAY_FIELDS.js ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var LOCALE_ARRAY_FIELDS = [ + 'months', 'weekdays', 'units', 'numerals', 'placeholders', + 'articles', 'tokens', 'timeMarkers', 'ampm', 'timeSuffixes', + 'parse', 'timeParse', 'timeFrontParse', 'modifiers' +]; + +module.exports = LOCALE_ARRAY_FIELDS; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/LazyLoadedLocales.js": +/*!***************************************************************!*\ + !*** ./node_modules/sugar-date/date/var/LazyLoadedLocales.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var BritishEnglishDefinition = __webpack_require__(/*! ./BritishEnglishDefinition */ "./node_modules/sugar-date/date/var/BritishEnglishDefinition.js"), + AmericanEnglishDefinition = __webpack_require__(/*! ./AmericanEnglishDefinition */ "./node_modules/sugar-date/date/var/AmericanEnglishDefinition.js"), + CanadianEnglishDefinition = __webpack_require__(/*! ./CanadianEnglishDefinition */ "./node_modules/sugar-date/date/var/CanadianEnglishDefinition.js"); + +var LazyLoadedLocales = { + 'en-US': AmericanEnglishDefinition, + 'en-GB': BritishEnglishDefinition, + 'en-AU': BritishEnglishDefinition, + 'en-CA': CanadianEnglishDefinition +}; + +module.exports = LazyLoadedLocales; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/LocaleHelpers.js": +/*!***********************************************************!*\ + !*** ./node_modules/sugar-date/date/var/LocaleHelpers.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var LazyLoadedLocales = __webpack_require__(/*! ./LazyLoadedLocales */ "./node_modules/sugar-date/date/var/LazyLoadedLocales.js"), + AmericanEnglishDefinition = __webpack_require__(/*! ./AmericanEnglishDefinition */ "./node_modules/sugar-date/date/var/AmericanEnglishDefinition.js"), + getNewLocale = __webpack_require__(/*! ../internal/getNewLocale */ "./node_modules/sugar-date/date/internal/getNewLocale.js"); + +var English, localeManager; + +function buildLocales() { + + function LocaleManager(loc) { + this.locales = {}; + this.add(loc); + } + + LocaleManager.prototype = { + + get: function(code, fallback) { + var loc = this.locales[code]; + if (!loc && LazyLoadedLocales[code]) { + loc = this.add(code, LazyLoadedLocales[code]); + } else if (!loc && code) { + loc = this.locales[code.slice(0, 2)]; + } + return loc || fallback === false ? loc : this.current; + }, + + getAll: function() { + return this.locales; + }, + + set: function(code) { + var loc = this.get(code, false); + if (!loc) { + throw new TypeError('Invalid Locale: ' + code); + } + return this.current = loc; + }, + + add: function(code, def) { + if (!def) { + def = code; + code = def.code; + } else { + def.code = code; + } + var loc = def.compiledFormats ? def : getNewLocale(def); + this.locales[code] = loc; + if (!this.current) { + this.current = loc; + } + return loc; + }, + + remove: function(code) { + if (this.current.code === code) { + this.current = this.get('en'); + } + return delete this.locales[code]; + } + + }; + + // Sorry about this guys... + English = getNewLocale(AmericanEnglishDefinition); + localeManager = new LocaleManager(English); +} + +buildLocales(); + +module.exports = { + English: English, + localeManager: localeManager +}; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/LocalizedParsingTokens.js": +/*!********************************************************************!*\ + !*** ./node_modules/sugar-date/date/var/LocalizedParsingTokens.js ***! + \********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var LocalizedParsingTokens = { + 'year': { + base: 'yyyy|ayy', + requiresSuffix: true + }, + 'month': { + base: 'MM', + requiresSuffix: true + }, + 'date': { + base: 'dd', + requiresSuffix: true + }, + 'hour': { + base: 'hh', + requiresSuffixOr: ':' + }, + 'minute': { + base: 'mm' + }, + 'second': { + base: 'ss' + }, + 'num': { + src: '\\d+', + requiresNumerals: true + } +}; + +module.exports = LocalizedParsingTokens; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/MINUTES.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/date/var/MINUTES.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = 60 * 1000; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/TIMEZONE_ABBREVIATION_REG.js": +/*!***********************************************************************!*\ + !*** ./node_modules/sugar-date/date/var/TIMEZONE_ABBREVIATION_REG.js ***! + \***********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = /\(([-+]\d{2,4}|\w{3,5})\)$/; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/_dateOptions.js": +/*!**********************************************************!*\ + !*** ./node_modules/sugar-date/date/var/_dateOptions.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var DATE_OPTIONS = __webpack_require__(/*! ./DATE_OPTIONS */ "./node_modules/sugar-date/date/var/DATE_OPTIONS.js"), + namespaceAliases = __webpack_require__(/*! ../../common/var/namespaceAliases */ "./node_modules/sugar-date/common/var/namespaceAliases.js"), + defineOptionsAccessor = __webpack_require__(/*! ../../common/internal/defineOptionsAccessor */ "./node_modules/sugar-date/common/internal/defineOptionsAccessor.js"); + +var sugarDate = namespaceAliases.sugarDate; + +module.exports = defineOptionsAccessor(sugarDate, DATE_OPTIONS); + +/***/ }), + +/***/ "./node_modules/sugar-date/date/var/formattingTokens.js": +/*!**************************************************************!*\ + !*** ./node_modules/sugar-date/date/var/formattingTokens.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var LocaleHelpers = __webpack_require__(/*! ./LocaleHelpers */ "./node_modules/sugar-date/date/var/LocaleHelpers.js"), + FormatTokensBase = __webpack_require__(/*! ./FormatTokensBase */ "./node_modules/sugar-date/date/var/FormatTokensBase.js"), + CoreOutputFormats = __webpack_require__(/*! ./CoreOutputFormats */ "./node_modules/sugar-date/date/var/CoreOutputFormats.js"), + forEach = __webpack_require__(/*! ../../common/internal/forEach */ "./node_modules/sugar-date/common/internal/forEach.js"), + padNumber = __webpack_require__(/*! ../../common/internal/padNumber */ "./node_modules/sugar-date/common/internal/padNumber.js"), + spaceSplit = __webpack_require__(/*! ../../common/internal/spaceSplit */ "./node_modules/sugar-date/common/internal/spaceSplit.js"), + namespaceAliases = __webpack_require__(/*! ../../common/var/namespaceAliases */ "./node_modules/sugar-date/common/var/namespaceAliases.js"), + coreUtilityAliases = __webpack_require__(/*! ../../common/var/coreUtilityAliases */ "./node_modules/sugar-date/common/var/coreUtilityAliases.js"), + createFormatMatcher = __webpack_require__(/*! ../../common/internal/createFormatMatcher */ "./node_modules/sugar-date/common/internal/createFormatMatcher.js"), + defineInstanceSimilar = __webpack_require__(/*! ../../common/internal/defineInstanceSimilar */ "./node_modules/sugar-date/common/internal/defineInstanceSimilar.js"); + +var localeManager = LocaleHelpers.localeManager, + hasOwn = coreUtilityAliases.hasOwn, + getOwn = coreUtilityAliases.getOwn, + forEachProperty = coreUtilityAliases.forEachProperty, + sugarDate = namespaceAliases.sugarDate; + +var ldmlTokens, strfTokens; + +function buildDateFormatTokens() { + + function addFormats(target, tokens, fn) { + if (tokens) { + forEach(spaceSplit(tokens), function(token) { + target[token] = fn; + }); + } + } + + function buildLowercase(get) { + return function(d, localeCode) { + return get(d, localeCode).toLowerCase(); + }; + } + + function buildOrdinal(get) { + return function(d, localeCode) { + var n = get(d, localeCode); + return n + localeManager.get(localeCode).getOrdinal(n); + }; + } + + function buildPadded(get, padding) { + return function(d, localeCode) { + return padNumber(get(d, localeCode), padding); + }; + } + + function buildTwoDigits(get) { + return function(d, localeCode) { + return get(d, localeCode) % 100; + }; + } + + function buildAlias(alias) { + return function(d, localeCode) { + return dateFormatMatcher(alias, d, localeCode); + }; + } + + function buildAlternates(f) { + for (var n = 1; n <= 5; n++) { + buildAlternate(f, n); + } + } + + function buildAlternate(f, n) { + var alternate = function(d, localeCode) { + return f.get(d, localeCode, n); + }; + addFormats(ldmlTokens, f.ldml + n, alternate); + if (f.lowerToken) { + ldmlTokens[f.lowerToken + n] = buildLowercase(alternate); + } + } + + function getIdentityFormat(name) { + return function(d, localeCode) { + var loc = localeManager.get(localeCode); + return dateFormatMatcher(loc[name], d, localeCode); + }; + } + + ldmlTokens = {}; + strfTokens = {}; + + forEach(FormatTokensBase, function(f) { + var get = f.get, getPadded; + if (f.lowerToken) { + ldmlTokens[f.lowerToken] = buildLowercase(get); + } + if (f.ordinalToken) { + ldmlTokens[f.ordinalToken] = buildOrdinal(get, f); + } + if (f.ldmlPaddedToken) { + ldmlTokens[f.ldmlPaddedToken] = buildPadded(get, f.ldmlPaddedToken.length); + } + if (f.ldmlTwoDigitToken) { + ldmlTokens[f.ldmlTwoDigitToken] = buildPadded(buildTwoDigits(get), 2); + } + if (f.strfTwoDigitToken) { + strfTokens[f.strfTwoDigitToken] = buildPadded(buildTwoDigits(get), 2); + } + if (f.strfPadding) { + getPadded = buildPadded(get, f.strfPadding); + } + if (f.alias) { + get = buildAlias(f.alias); + } + if (f.allowAlternates) { + buildAlternates(f); + } + addFormats(ldmlTokens, f.ldml, get); + addFormats(strfTokens, f.strf, getPadded || get); + }); + + forEachProperty(CoreOutputFormats, function(src, name) { + addFormats(ldmlTokens, name, buildAlias(src)); + }); + + defineInstanceSimilar(sugarDate, 'short medium long full', function(methods, name) { + var fn = getIdentityFormat(name); + addFormats(ldmlTokens, name, fn); + methods[name] = fn; + }); + + addFormats(ldmlTokens, 'time', getIdentityFormat('time')); + addFormats(ldmlTokens, 'stamp', getIdentityFormat('stamp')); +} + +var dateFormatMatcher; + +function buildDateFormatMatcher() { + + function getLdml(d, token, localeCode) { + return getOwn(ldmlTokens, token)(d, localeCode); + } + + function getStrf(d, token, localeCode) { + return getOwn(strfTokens, token)(d, localeCode); + } + + function checkDateToken(ldml, strf) { + return hasOwn(ldmlTokens, ldml) || hasOwn(strfTokens, strf); + } + + // Format matcher for LDML or STRF tokens. + dateFormatMatcher = createFormatMatcher(getLdml, getStrf, checkDateToken); +} + +buildDateFormatTokens(); + +buildDateFormatMatcher(); + +module.exports = { + ldmlTokens: ldmlTokens, + strfTokens: strfTokens, + dateFormatMatcher: dateFormatMatcher +}; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/weeksAgo.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/date/weeksAgo.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.weeksAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/weeksFromNow.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/date/weeksFromNow.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.weeksFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/weeksSince.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/weeksSince.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.weeksSince; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/weeksUntil.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/weeksUntil.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.weeksUntil; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/yearsAgo.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/date/yearsAgo.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.yearsAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/yearsFromNow.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/date/yearsFromNow.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.yearsFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/yearsSince.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/yearsSince.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.yearsSince; + +/***/ }), + +/***/ "./node_modules/sugar-date/date/yearsUntil.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/date/yearsUntil.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ./build/buildDateUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js"); + +module.exports = Sugar.Date.yearsUntil; + +/***/ }), + +/***/ "./node_modules/sugar-date/index.js": +/*!******************************************!*\ + !*** ./node_modules/sugar-date/index.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +__webpack_require__(/*! ./date */ "./node_modules/sugar-date/date/index.js"); +__webpack_require__(/*! ./range */ "./node_modules/sugar-date/range/index.js"); + +module.exports = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +/***/ }), + +/***/ "./node_modules/sugar-date/locales/ca.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/locales/ca.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var addLocale = __webpack_require__(/*! ../date/addLocale */ "./node_modules/sugar-date/date/addLocale.js"); + +/* + * Catalan locale definition. + * See the readme for customization and more information. + * To set this locale globally: + * + * Sugar.Date.setLocale('ca') + * + */ +addLocale('ca', { + 'plural': true, + 'units': 'milisegon:|s,segon:|s,minut:|s,hor:a|es,di:a|es,setman:a|es,mes:|os,any:|s', + 'months': 'gen:er|,febr:er|,mar:ç|,abr:il|,mai:g|,jun:y|,jul:iol|,ag:ost|,set:embre|,oct:ubre|,nov:embre|,des:embre|', + 'weekdays': 'diumenge|dg,dilluns|dl,dimarts|dt,dimecres|dc,dijous|dj,divendres|dv,dissabte|ds', + 'numerals': 'zero,un,dos,tres,quatre,cinc,sis,set,vuit,nou,deu', + 'tokens': 'el,la,de', + 'short': '{dd}/{MM}/{yyyy}', + 'medium': '{d} {month} {yyyy}', + 'long': '{d} {month} {yyyy} {time}', + 'full': '{weekday} {d} {month} {yyyy} {time}', + 'stamp': '{dow} {d} {mon} {yyyy} {time}', + 'time': '{H}:{mm}', + 'past': '{sign} {num} {unit}', + 'future': '{sign} {num} {unit}', + 'duration': '{num} {unit}', + 'timeMarkers': 'a las', + 'ampm': 'am,pm', + 'modifiers': [ + { 'name': 'day', 'src': "abans d'ahir", 'value': -2 }, + { 'name': 'day', 'src': 'ahir', 'value': -1 }, + { 'name': 'day', 'src': 'avui', 'value': 0 }, + { 'name': 'day', 'src': 'demà|dema', 'value': 1 }, + { 'name': 'sign', 'src': 'fa', 'value': -1 }, + { 'name': 'sign', 'src': 'en', 'value': 1 }, + { 'name': 'shift', 'src': 'passat', 'value': -1 }, + { 'name': 'shift', 'src': 'el proper|la propera', 'value': 1 } + ], + 'parse': [ + '{sign} {num} {unit}', + '{num} {unit} {sign}', + '{0?}{1?} {unit:5-7} {shift}', + '{0?}{1?} {shift} {unit:5-7}' + ], + 'timeParse': [ + '{shift} {weekday}', + '{weekday} {shift}', + '{date?} {2?} {months}\\.? {2?} {year?}' + ] +}); + + +// This package does not export anything as it is +// simply registering the "ca" locale. + +/***/ }), + +/***/ "./node_modules/sugar-date/locales/da.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/locales/da.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var addLocale = __webpack_require__(/*! ../date/addLocale */ "./node_modules/sugar-date/date/addLocale.js"); + +/* + * Danish locale definition. + * See the readme for customization and more information. + * To set this locale globally: + * + * Sugar.Date.setLocale('da') + * + */ +addLocale('da', { + 'plural': true, + 'units': 'millisekund:|er,sekund:|er,minut:|ter,tim:e|er,dag:|e,ug:e|er|en,måned:|er|en+maaned:|er|en,år:||et+aar:||et', + 'months': 'jan:uar|,feb:ruar|,mar:ts|,apr:il|,maj,jun:i|,jul:i|,aug:ust|,sep:tember|,okt:ober|,nov:ember|,dec:ember|', + 'weekdays': 'søn:dag|+son:dag|,man:dag|,tir:sdag|,ons:dag|,tor:sdag|,fre:dag|,lør:dag|+lor:dag|', + 'numerals': 'nul,en|et,to,tre,fire,fem,seks,syv,otte,ni,ti', + 'tokens': 'den,for', + 'articles': 'den', + 'short': '{dd}-{MM}-{yyyy}', + 'medium': '{d}. {month} {yyyy}', + 'long': '{d}. {month} {yyyy} {time}', + 'full': '{weekday} d. {d}. {month} {yyyy} {time}', + 'stamp': '{dow} {d} {mon} {yyyy} {time}', + 'time': '{H}:{mm}', + 'past': '{num} {unit} {sign}', + 'future': '{sign} {num} {unit}', + 'duration': '{num} {unit}', + 'ampm': 'am,pm', + 'modifiers': [ + { 'name': 'day', 'src': 'forgårs|i forgårs|forgaars|i forgaars', 'value': -2 }, + { 'name': 'day', 'src': 'i går|igår|i gaar|igaar', 'value': -1 }, + { 'name': 'day', 'src': 'i dag|idag', 'value': 0 }, + { 'name': 'day', 'src': 'i morgen|imorgen', 'value': 1 }, + { 'name': 'day', 'src': 'over morgon|overmorgen|i over morgen|i overmorgen|iovermorgen', 'value': 2 }, + { 'name': 'sign', 'src': 'siden', 'value': -1 }, + { 'name': 'sign', 'src': 'om', 'value': 1 }, + { 'name': 'shift', 'src': 'i sidste|sidste', 'value': -1 }, + { 'name': 'shift', 'src': 'denne', 'value': 0 }, + { 'name': 'shift', 'src': 'næste|naeste', 'value': 1 } + ], + 'parse': [ + '{months} {year?}', + '{num} {unit} {sign}', + '{sign} {num} {unit}', + '{1?} {num} {unit} {sign}', + '{shift} {unit:5-7}' + ], + 'timeParse': [ + '{day|weekday}', + '{date} {months?}\\.? {year?}' + ], + 'timeFrontParse': [ + '{shift} {weekday}', + '{0?} {weekday?},? {date}\\.? {months?}\\.? {year?}' + ] +}); + + +// This package does not export anything as it is +// simply registering the "da" locale. + +/***/ }), + +/***/ "./node_modules/sugar-date/locales/de.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/locales/de.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var addLocale = __webpack_require__(/*! ../date/addLocale */ "./node_modules/sugar-date/date/addLocale.js"); + +/* + * German locale definition. + * See the readme for customization and more information. + * To set this locale globally: + * + * Sugar.Date.setLocale('de') + * + */ +addLocale('de', { + 'plural': true, + 'units': 'Millisekunde:|n,Sekunde:|n,Minute:|n,Stunde:|n,Tag:|en,Woche:|n,Monat:|en,Jahr:|en|e', + 'months': 'Jan:uar|,Feb:ruar|,M:är|ärz|ar|arz,Apr:il|,Mai,Juni,Juli,Aug:ust|,Sept:ember|,Okt:ober|,Nov:ember|,Dez:ember|', + 'weekdays': 'So:nntag|,Mo:ntag|,Di:enstag|,Mi:ttwoch|,Do:nnerstag|,Fr:eitag|,Sa:mstag|', + 'numerals': 'null,ein:|e|er|en|em,zwei,drei,vier,fuenf,sechs,sieben,acht,neun,zehn', + 'tokens': 'der', + 'short': '{dd}.{MM}.{yyyy}', + 'medium': '{d}. {Month} {yyyy}', + 'long': '{d}. {Month} {yyyy} {time}', + 'full': '{Weekday}, {d}. {Month} {yyyy} {time}', + 'stamp': '{Dow} {d} {Mon} {yyyy} {time}', + 'time': '{H}:{mm}', + 'past': '{sign} {num} {unit}', + 'future': '{sign} {num} {unit}', + 'duration': '{num} {unit}', + 'timeMarkers': 'um', + 'ampm': 'am,pm', + 'modifiers': [ + { 'name': 'day', 'src': 'vorgestern', 'value': -2 }, + { 'name': 'day', 'src': 'gestern', 'value': -1 }, + { 'name': 'day', 'src': 'heute', 'value': 0 }, + { 'name': 'day', 'src': 'morgen', 'value': 1 }, + { 'name': 'day', 'src': 'übermorgen|ubermorgen|uebermorgen', 'value': 2 }, + { 'name': 'sign', 'src': 'vor:|her', 'value': -1 }, + { 'name': 'sign', 'src': 'in', 'value': 1 }, + { 'name': 'shift', 'src': 'letzte:|r|n|s', 'value': -1 }, + { 'name': 'shift', 'src': 'nächste:|r|n|s+nachste:|r|n|s+naechste:|r|n|s+kommende:n|r', 'value': 1 } + ], + 'parse': [ + '{months} {year?}', + '{sign} {num} {unit}', + '{num} {unit} {sign}', + '{shift} {unit:5-7}' + ], + 'timeParse': [ + '{shift?} {day|weekday}', + '{weekday?},? {date}\\.? {months?}\\.? {year?}' + ], + 'timeFrontParse': [ + '{shift} {weekday}', + '{weekday?},? {date}\\.? {months?}\\.? {year?}' + ] +}); + + +// This package does not export anything as it is +// simply registering the "de" locale. + +/***/ }), + +/***/ "./node_modules/sugar-date/locales/es.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/locales/es.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var addLocale = __webpack_require__(/*! ../date/addLocale */ "./node_modules/sugar-date/date/addLocale.js"); + +/* + * Spanish locale definition. + * See the readme for customization and more information. + * To set this locale globally: + * + * Sugar.Date.setLocale('es') + * + */ +addLocale('es', { + 'plural': true, + 'units': 'milisegundo:|s,segundo:|s,minuto:|s,hora:|s,día|días|dia|dias,semana:|s,mes:|es,año|años|ano|anos', + 'months': 'ene:ro|,feb:rero|,mar:zo|,abr:il|,may:o|,jun:io|,jul:io|,ago:sto|,sep:tiembre|,oct:ubre|,nov:iembre|,dic:iembre|', + 'weekdays': 'dom:ingo|,lun:es|,mar:tes|,mié:rcoles|+mie:rcoles|,jue:ves|,vie:rnes|,sáb:ado|+sab:ado|', + 'numerals': 'cero,uno,dos,tres,cuatro,cinco,seis,siete,ocho,nueve,diez', + 'tokens': 'el,la,de', + 'short': '{dd}/{MM}/{yyyy}', + 'medium': '{d} de {Month} de {yyyy}', + 'long': '{d} de {Month} de {yyyy} {time}', + 'full': '{weekday}, {d} de {month} de {yyyy} {time}', + 'stamp': '{dow} {d} {mon} {yyyy} {time}', + 'time': '{H}:{mm}', + 'past': '{sign} {num} {unit}', + 'future': '{sign} {num} {unit}', + 'duration': '{num} {unit}', + 'timeMarkers': 'a las', + 'ampm': 'am,pm', + 'modifiers': [ + { 'name': 'day', 'src': 'anteayer', 'value': -2 }, + { 'name': 'day', 'src': 'ayer', 'value': -1 }, + { 'name': 'day', 'src': 'hoy', 'value': 0 }, + { 'name': 'day', 'src': 'mañana|manana', 'value': 1 }, + { 'name': 'sign', 'src': 'hace', 'value': -1 }, + { 'name': 'sign', 'src': 'dentro de', 'value': 1 }, + { 'name': 'shift', 'src': 'pasad:o|a', 'value': -1 }, + { 'name': 'shift', 'src': 'próximo|próxima|proximo|proxima', 'value': 1 } + ], + 'parse': [ + '{months} {2?} {year?}', + '{sign} {num} {unit}', + '{num} {unit} {sign}', + '{0?}{1?} {unit:5-7} {shift}', + '{0?}{1?} {shift} {unit:5-7}' + ], + 'timeParse': [ + '{shift?} {day|weekday} {shift?}', + '{date} {2?} {months?}\\.? {2?} {year?}' + ], + 'timeFrontParse': [ + '{shift?} {weekday} {shift?}', + '{date} {2?} {months?}\\.? {2?} {year?}' + ] +}); + + +// This package does not export anything as it is +// simply registering the "es" locale. + +/***/ }), + +/***/ "./node_modules/sugar-date/locales/fi.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/locales/fi.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var addLocale = __webpack_require__(/*! ../date/addLocale */ "./node_modules/sugar-date/date/addLocale.js"); + +/* + * Finnish locale definition. + * See the readme for customization and more information. + * To set this locale globally: + * + * Sugar.Date.setLocale('fi') + * + */ +addLocale('fi', { + 'plural': true, + 'units': 'millisekun:ti|tia|nin|teja|tina,sekun:ti|tia|nin|teja|tina,minuut:ti|tia|in|teja|tina,tun:ti|tia|nin|teja|tina,päiv:ä|ää|än|iä|änä,viik:ko|koa|on|olla|koja|kona,kuukau:si|tta|den+kuussa,vuo:si|tta|den|sia|tena|nna', + 'months': 'tammi:kuuta||kuu,helmi:kuuta||kuu,maalis:kuuta||kuu,huhti:kuuta||kuu,touko:kuuta||kuu,kesä:kuuta||kuu,heinä:kuuta||kuu,elo:kuuta||kuu,syys:kuuta||kuu,loka:kuuta||kuu,marras:kuuta||kuu,joulu:kuuta||kuu', + 'weekdays': 'su:nnuntai||nnuntaina,ma:anantai||anantaina,ti:istai||istaina,ke:skiviikko||skiviikkona,to:rstai||rstaina,pe:rjantai||rjantaina,la:uantai||uantaina', + 'numerals': 'nolla,yksi|ensimmäinen,kaksi|toinen,kolm:e|as,neljä:|s,vii:si|des,kuu:si|des,seitsemä:n|s,kahdeksa:n|s,yhdeksä:n|s,kymmene:n|s', + 'short': '{d}.{M}.{yyyy}', + 'medium': '{d}. {month} {yyyy}', + 'long': '{d}. {month} {yyyy} klo {time}', + 'full': '{weekday} {d}. {month} {yyyy} klo {time}', + 'stamp': '{dow} {d} {mon} {yyyy} {time}', + 'time': '{H}.{mm}', + 'timeMarkers': 'klo,kello', + 'timeSeparator': '.', + 'ordinalSuffix': '.', + 'relative': function(num, unit, ms, format) { + var units = this['units']; + function numberWithUnit(mult) { + return num + ' ' + units[(8 * mult) + unit]; + } + function baseUnit() { + return numberWithUnit(num === 1 ? 0 : 1); + } + switch(format) { + case 'duration': return baseUnit(); + case 'past': return baseUnit() + ' sitten'; + case 'future': return numberWithUnit(2) + ' kuluttua'; + } + }, + 'modifiers': [ + { 'name': 'day', 'src': 'toissa päivänä', 'value': -2 }, + { 'name': 'day', 'src': 'eilen|eilistä', 'value': -1 }, + { 'name': 'day', 'src': 'tänään', 'value': 0 }, + { 'name': 'day', 'src': 'huomenna|huomista', 'value': 1 }, + { 'name': 'day', 'src': 'ylihuomenna|ylihuomista', 'value': 2 }, + { 'name': 'sign', 'src': 'sitten|aiemmin', 'value': -1 }, + { 'name': 'sign', 'src': 'päästä|kuluttua|myöhemmin', 'value': 1 }, + { 'name': 'edge', 'src': 'lopussa', 'value': 2 }, + { 'name': 'edge', 'src': 'ensimmäinen|ensimmäisenä', 'value': -2 }, + { 'name': 'shift', 'src': 'edel:linen|lisenä', 'value': -1 }, + { 'name': 'shift', 'src': 'viime', 'value': -1 }, + { 'name': 'shift', 'src': 'tä:llä|ssä|nä|mä', 'value': 0 }, + { 'name': 'shift', 'src': 'seuraava|seuraavana|tuleva|tulevana|ensi', 'value': 1 } + ], + 'parse': [ + '{months} {year?}', + '{shift} {unit:5-7}' + ], + 'timeParse': [ + '{shift?} {day|weekday}', + '{weekday?},? {date}\\.? {months?}\\.? {year?}' + ], + 'timeFrontParse': [ + '{shift?} {day|weekday}', + '{num?} {unit} {sign}', + '{weekday?},? {date}\\.? {months?}\\.? {year?}' + ] +}); + + +// This package does not export anything as it is +// simply registering the "fi" locale. + +/***/ }), + +/***/ "./node_modules/sugar-date/locales/fr.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/locales/fr.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var addLocale = __webpack_require__(/*! ../date/addLocale */ "./node_modules/sugar-date/date/addLocale.js"); + +/* + * French locale definition. + * See the readme for customization and more information. + * To set this locale globally: + * + * Sugar.Date.setLocale('fr') + * + */ +addLocale('fr', { + 'plural': true, + 'units': 'milliseconde:|s,seconde:|s,minute:|s,heure:|s,jour:|s,semaine:|s,mois,an:|s|née|nee', + 'months': 'janv:ier|,févr:ier|+fevr:ier|,mars,avr:il|,mai,juin,juil:let|,août,sept:embre|,oct:obre|,nov:embre|,déc:embre|+dec:embre|', + 'weekdays': 'dim:anche|,lun:di|,mar:di|,mer:credi|,jeu:di|,ven:dredi|,sam:edi|', + 'numerals': 'zéro,un:|e,deux,trois,quatre,cinq,six,sept,huit,neuf,dix', + 'tokens': "l'|la|le,er", + 'short': '{dd}/{MM}/{yyyy}', + 'medium': '{d} {month} {yyyy}', + 'long': '{d} {month} {yyyy} {time}', + 'full': '{weekday} {d} {month} {yyyy} {time}', + 'stamp': '{dow} {d} {mon} {yyyy} {time}', + 'time': '{H}:{mm}', + 'past': '{sign} {num} {unit}', + 'future': '{sign} {num} {unit}', + 'duration': '{num} {unit}', + 'timeMarkers': 'à', + 'ampm': 'am,pm', + 'modifiers': [ + { 'name': 'day', 'src': 'hier', 'value': -1 }, + { 'name': 'day', 'src': "aujourd'hui", 'value': 0 }, + { 'name': 'day', 'src': 'demain', 'value': 1 }, + { 'name': 'sign', 'src': 'il y a', 'value': -1 }, + { 'name': 'sign', 'src': "dans|d'ici", 'value': 1 }, + { 'name': 'shift', 'src': 'derni:èr|er|ère|ere', 'value': -1 }, + { 'name': 'shift', 'src': 'prochain:|e', 'value': 1 } + ], + 'parse': [ + '{months} {year?}', + '{sign} {num} {unit}', + '{0?} {unit:5-7} {shift}' + ], + 'timeParse': [ + '{day|weekday} {shift?}', + '{weekday?},? {0?} {date}{1?} {months}\\.? {year?}' + ], + 'timeFrontParse': [ + '{0?} {weekday} {shift}', + '{weekday?},? {0?} {date}{1?} {months}\\.? {year?}' + ] +}); + + +// This package does not export anything as it is +// simply registering the "fr" locale. + +/***/ }), + +/***/ "./node_modules/sugar-date/locales/index.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/locales/index.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +__webpack_require__(/*! ./ca */ "./node_modules/sugar-date/locales/ca.js"); +__webpack_require__(/*! ./da */ "./node_modules/sugar-date/locales/da.js"); +__webpack_require__(/*! ./de */ "./node_modules/sugar-date/locales/de.js"); +__webpack_require__(/*! ./es */ "./node_modules/sugar-date/locales/es.js"); +__webpack_require__(/*! ./fi */ "./node_modules/sugar-date/locales/fi.js"); +__webpack_require__(/*! ./fr */ "./node_modules/sugar-date/locales/fr.js"); +__webpack_require__(/*! ./it */ "./node_modules/sugar-date/locales/it.js"); +__webpack_require__(/*! ./ja */ "./node_modules/sugar-date/locales/ja.js"); +__webpack_require__(/*! ./ko */ "./node_modules/sugar-date/locales/ko.js"); +__webpack_require__(/*! ./nl */ "./node_modules/sugar-date/locales/nl.js"); +__webpack_require__(/*! ./no */ "./node_modules/sugar-date/locales/no.js"); +__webpack_require__(/*! ./pl */ "./node_modules/sugar-date/locales/pl.js"); +__webpack_require__(/*! ./pt */ "./node_modules/sugar-date/locales/pt.js"); +__webpack_require__(/*! ./ru */ "./node_modules/sugar-date/locales/ru.js"); +__webpack_require__(/*! ./sv */ "./node_modules/sugar-date/locales/sv.js"); +__webpack_require__(/*! ./zh-CN */ "./node_modules/sugar-date/locales/zh-CN.js"); +__webpack_require__(/*! ./zh-TW */ "./node_modules/sugar-date/locales/zh-TW.js"); + +module.exports = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +/***/ }), + +/***/ "./node_modules/sugar-date/locales/it.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/locales/it.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var addLocale = __webpack_require__(/*! ../date/addLocale */ "./node_modules/sugar-date/date/addLocale.js"); + +/* + * Italian locale definition. + * See the readme for customization and more information. + * To set this locale globally: + * + * Sugar.Date.setLocale('it') + * + */ +addLocale('it', { + 'plural': true, + 'units': 'millisecond:o|i,second:o|i,minut:o|i,or:a|e,giorn:o|i,settiman:a|e,mes:e|i,ann:o|i', + 'months': 'gen:naio|,feb:braio|,mar:zo|,apr:ile|,mag:gio|,giu:gno|,lug:lio|,ago:sto|,set:tembre|,ott:obre|,nov:embre|,dic:embre|', + 'weekdays': 'dom:enica|,lun:edì||edi,mar:tedì||tedi,mer:coledì||coledi,gio:vedì||vedi,ven:erdì||erdi,sab:ato|', + 'numerals': "zero,un:|a|o|',due,tre,quattro,cinque,sei,sette,otto,nove,dieci", + 'tokens': "l'|la|il", + 'short': '{dd}/{MM}/{yyyy}', + 'medium': '{d} {month} {yyyy}', + 'long': '{d} {month} {yyyy} {time}', + 'full': '{weekday}, {d} {month} {yyyy} {time}', + 'stamp': '{dow} {d} {mon} {yyyy} {time}', + 'time': '{H}:{mm}', + 'past': '{num} {unit} {sign}', + 'future': '{num} {unit} {sign}', + 'duration': '{num} {unit}', + 'timeMarkers': 'alle', + 'ampm': 'am,pm', + 'modifiers': [ + { 'name': 'day', 'src': 'ieri', 'value': -1 }, + { 'name': 'day', 'src': 'oggi', 'value': 0 }, + { 'name': 'day', 'src': 'domani', 'value': 1 }, + { 'name': 'day', 'src': 'dopodomani', 'value': 2 }, + { 'name': 'sign', 'src': 'fa', 'value': -1 }, + { 'name': 'sign', 'src': 'da adesso', 'value': 1 }, + { 'name': 'shift', 'src': 'scors:o|a', 'value': -1 }, + { 'name': 'shift', 'src': 'prossim:o|a', 'value': 1 } + ], + 'parse': [ + '{months} {year?}', + '{num} {unit} {sign}', + '{0?} {unit:5-7} {shift}', + '{0?} {shift} {unit:5-7}' + ], + 'timeParse': [ + '{day|weekday} {shift?}', + '{weekday?},? {date} {months?}\\.? {year?}' + ], + 'timeFrontParse': [ + '{day|weekday} {shift?}', + '{weekday?},? {date} {months?}\\.? {year?}' + ] +}); + + +// This package does not export anything as it is +// simply registering the "it" locale. + +/***/ }), + +/***/ "./node_modules/sugar-date/locales/ja.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/locales/ja.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var addLocale = __webpack_require__(/*! ../date/addLocale */ "./node_modules/sugar-date/date/addLocale.js"); + +/* + * Japanese locale definition. + * See the readme for customization and more information. + * To set this locale globally: + * + * Sugar.Date.setLocale('ja') + * + */ +addLocale('ja', { + 'ampmFront': true, + 'numeralUnits': true, + 'allowsFullWidth': true, + 'timeMarkerOptional': true, + 'firstDayOfWeek': 0, + 'firstDayOfWeekYear': 1, + 'units': 'ミリ秒,秒,分,時間,日,週間|週,ヶ月|ヵ月|月,年|年度', + 'weekdays': '日:曜日||曜,月:曜日||曜,火:曜日||曜,水:曜日||曜,木:曜日||曜,金:曜日||曜,土:曜日||曜', + 'numerals': '〇,一,二,三,四,五,六,七,八,九', + 'placeholders': '十,百,千,万', + 'timeSuffixes': ',秒,分,時,日,,月,年度?', + 'short': '{yyyy}/{MM}/{dd}', + 'medium': '{yyyy}年{M}月{d}日', + 'long': '{yyyy}年{M}月{d}日{time}', + 'full': '{yyyy}年{M}月{d}日{time} {weekday}', + 'stamp': '{yyyy}年{M}月{d}日 {H}:{mm} {dow}', + 'time': '{tt}{h}時{mm}分', + 'past': '{num}{unit}{sign}', + 'future': '{num}{unit}{sign}', + 'duration': '{num}{unit}', + 'ampm': '午前,午後', + 'modifiers': [ + { 'name': 'day', 'src': '一昨々日|前々々日', 'value': -3 }, + { 'name': 'day', 'src': '一昨日|おととい|前々日', 'value': -2 }, + { 'name': 'day', 'src': '昨日|前日', 'value': -1 }, + { 'name': 'day', 'src': '今日|当日|本日', 'value': 0 }, + { 'name': 'day', 'src': '明日|翌日|次日', 'value': 1 }, + { 'name': 'day', 'src': '明後日|翌々日', 'value': 2 }, + { 'name': 'day', 'src': '明々後日|翌々々日', 'value': 3 }, + { 'name': 'sign', 'src': '前', 'value': -1 }, + { 'name': 'sign', 'src': '後', 'value': 1 }, + { 'name': 'edge', 'src': '始|初日|頭', 'value': -2 }, + { 'name': 'edge', 'src': '末|尻', 'value': 2 }, + { 'name': 'edge', 'src': '末日', 'value': 1 }, + { 'name': 'shift', 'src': '一昨々|前々々', 'value': -3 }, + { 'name': 'shift', 'src': '一昨|前々|先々', 'value': -2 }, + { 'name': 'shift', 'src': '先|昨|去|前', 'value': -1 }, + { 'name': 'shift', 'src': '今|本|当', 'value': 0 }, + { 'name': 'shift', 'src': '来|明|翌|次', 'value': 1 }, + { 'name': 'shift', 'src': '明後|翌々|次々|再来|さ来', 'value': 2 }, + { 'name': 'shift', 'src': '明々後|翌々々', 'value': 3 } + ], + 'parse': [ + '{month}{edge}', + '{num}{unit}{sign}', + '{year?}{month}', + '{year}' + ], + 'timeParse': [ + '{day|weekday}', + '{shift}{unit:5}{weekday?}', + '{shift}{unit:7}{month}{edge}', + '{shift}{unit:7}{month?}{date?}', + '{shift}{unit:6}{edge?}{date?}', + '{year?}{month?}{date}' + ] +}); + + +// This package does not export anything as it is +// simply registering the "ja" locale. + +/***/ }), + +/***/ "./node_modules/sugar-date/locales/ko.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/locales/ko.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var addLocale = __webpack_require__(/*! ../date/addLocale */ "./node_modules/sugar-date/date/addLocale.js"); + +/* + * Korean locale definition. + * See the readme for customization and more information. + * To set this locale globally: + * + * Sugar.Date.setLocale('ko') + * + */ +addLocale('ko', { + 'ampmFront': true, + 'numeralUnits': true, + 'units': '밀리초,초,분,시간,일,주,개월|달,년|해', + 'weekdays': '일:요일|,월:요일|,화:요일|,수:요일|,목:요일|,금:요일|,토:요일|', + 'numerals': '영|제로,일|한,이,삼,사,오,육,칠,팔,구,십', + 'short': '{yyyy}.{MM}.{dd}', + 'medium': '{yyyy}년 {M}월 {d}일', + 'long': '{yyyy}년 {M}월 {d}일 {time}', + 'full': '{yyyy}년 {M}월 {d}일 {weekday} {time}', + 'stamp': '{yyyy}년 {M}월 {d}일 {H}:{mm} {dow}', + 'time': '{tt} {h}시 {mm}분', + 'past': '{num}{unit} {sign}', + 'future': '{num}{unit} {sign}', + 'duration': '{num}{unit}', + 'timeSuffixes': ',초,분,시,일,,월,년', + 'ampm': '오전,오후', + 'modifiers': [ + { 'name': 'day', 'src': '그저께', 'value': -2 }, + { 'name': 'day', 'src': '어제', 'value': -1 }, + { 'name': 'day', 'src': '오늘', 'value': 0 }, + { 'name': 'day', 'src': '내일', 'value': 1 }, + { 'name': 'day', 'src': '모레', 'value': 2 }, + { 'name': 'sign', 'src': '전', 'value': -1 }, + { 'name': 'sign', 'src': '후', 'value': 1 }, + { 'name': 'shift', 'src': '지난|작', 'value': -1 }, + { 'name': 'shift', 'src': '이번|올', 'value': 0 }, + { 'name': 'shift', 'src': '다음|내', 'value': 1 } + ], + 'parse': [ + '{num}{unit} {sign}', + '{shift?} {unit:5-7}', + '{year?} {month}', + '{year}' + ], + 'timeParse': [ + '{day|weekday}', + '{shift} {unit:5?} {weekday}', + '{year?} {month?} {date} {weekday?}' + ] +}); + + +// This package does not export anything as it is +// simply registering the "ko" locale. + +/***/ }), + +/***/ "./node_modules/sugar-date/locales/nl.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/locales/nl.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var addLocale = __webpack_require__(/*! ../date/addLocale */ "./node_modules/sugar-date/date/addLocale.js"); + +/* + * Dutch locale definition. + * See the readme for customization and more information. + * To set this locale globally: + * + * Sugar.Date.setLocale('nl') + * + */ +addLocale('nl', { + 'plural': true, + 'units': 'milliseconde:|n,seconde:|n,minu:ut|ten,uur,dag:|en,we:ek|ken,maand:|en,jaar', + 'months': 'jan:uari|,feb:ruari|,maart|mrt,apr:il|,mei,jun:i|,jul:i|,aug:ustus|,sep:tember|,okt:ober|,nov:ember|,dec:ember|', + 'weekdays': 'zondag|zo,maandag|ma,dinsdag|di,woensdag|wo|woe,donderdag|do,vrijdag|vr|vrij,zaterdag|za', + 'numerals': 'nul,een,twee,drie,vier,vijf,zes,zeven,acht,negen,tien', + 'short': '{dd}-{MM}-{yyyy}', + 'medium': '{d} {month} {yyyy}', + 'long': '{d} {Month} {yyyy} {time}', + 'full': '{weekday} {d} {Month} {yyyy} {time}', + 'stamp': '{dow} {d} {Mon} {yyyy} {time}', + 'time': '{H}:{mm}', + 'past': '{num} {unit} {sign}', + 'future': '{num} {unit} {sign}', + 'duration': '{num} {unit}', + 'timeMarkers': "'s,om", + 'modifiers': [ + { 'name': 'day', 'src': 'gisteren', 'value': -1 }, + { 'name': 'day', 'src': 'vandaag', 'value': 0 }, + { 'name': 'day', 'src': 'morgen', 'value': 1 }, + { 'name': 'day', 'src': 'overmorgen', 'value': 2 }, + { 'name': 'sign', 'src': 'geleden', 'value': -1 }, + { 'name': 'sign', 'src': 'vanaf nu', 'value': 1 }, + { 'name': 'shift', 'src': 'laatste|vorige|afgelopen', 'value': -1 }, + { 'name': 'shift', 'src': 'volgend:|e', 'value': 1 } + ], + 'parse': [ + '{months} {year?}', + '{num} {unit} {sign}', + '{0?} {unit:5-7} {shift}', + '{0?} {shift} {unit:5-7}' + ], + 'timeParse': [ + '{shift?} {day|weekday}', + '{weekday?},? {date} {months?}\\.? {year?}' + ], + 'timeFrontParse': [ + '{shift?} {day|weekday}', + '{weekday?},? {date} {months?}\\.? {year?}' + ] +}); + + +// This package does not export anything as it is +// simply registering the "nl" locale. + +/***/ }), + +/***/ "./node_modules/sugar-date/locales/no.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/locales/no.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var addLocale = __webpack_require__(/*! ../date/addLocale */ "./node_modules/sugar-date/date/addLocale.js"); + +/* + * Norwegian locale definition. + * See the readme for customization and more information. + * To set this locale globally: + * + * Sugar.Date.setLocale('no') + * + */ +addLocale('no', { + 'plural': true, + 'units': 'millisekund:|er,sekund:|er,minutt:|er,tim:e|er,dag:|er,uk:e|er|en,måned:|er|en+maaned:|er|en,år:||et+aar:||et', + 'months': 'januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember', + 'weekdays': 'søndag|sondag,mandag,tirsdag,onsdag,torsdag,fredag,lørdag|lordag', + 'numerals': 'en|et,to,tre,fire,fem,seks,sju|syv,åtte,ni,ti', + 'tokens': 'den,for', + 'articles': 'den', + 'short':'d. {d}. {month} {yyyy}', + 'long': 'den {d}. {month} {yyyy} {H}:{mm}', + 'full': '{Weekday} den {d}. {month} {yyyy} {H}:{mm}:{ss}', + 'past': '{num} {unit} {sign}', + 'future': '{sign} {num} {unit}', + 'duration': '{num} {unit}', + 'ampm': 'am,pm', + 'modifiers': [ + { 'name': 'day', 'src': 'forgårs|i forgårs|forgaars|i forgaars', 'value': -2 }, + { 'name': 'day', 'src': 'i går|igår|i gaar|igaar', 'value': -1 }, + { 'name': 'day', 'src': 'i dag|idag', 'value': 0 }, + { 'name': 'day', 'src': 'i morgen|imorgen', 'value': 1 }, + { 'name': 'day', 'src': 'overimorgen|overmorgen|over i morgen', 'value': 2 }, + { 'name': 'sign', 'src': 'siden', 'value': -1 }, + { 'name': 'sign', 'src': 'om', 'value': 1 }, + { 'name': 'shift', 'src': 'i siste|siste', 'value': -1 }, + { 'name': 'shift', 'src': 'denne', 'value': 0 }, + { 'name': 'shift', 'src': 'neste', 'value': 1 } + ], + 'parse': [ + '{num} {unit} {sign}', + '{sign} {num} {unit}', + '{1?} {num} {unit} {sign}', + '{shift} {unit:5-7}' + ], + 'timeParse': [ + '{date} {month}', + '{shift} {weekday}', + '{0?} {weekday?},? {date?} {month}\\.? {year}' + ] +}); + + +// This package does not export anything as it is +// simply registering the "no" locale. + +/***/ }), + +/***/ "./node_modules/sugar-date/locales/pl.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/locales/pl.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var addLocale = __webpack_require__(/*! ../date/addLocale */ "./node_modules/sugar-date/date/addLocale.js"); + +/* + * Polish locale definition. + * See the readme for customization and more information. + * To set this locale globally: + * + * Sugar.Date.setLocale('pl') + * + */ +addLocale('pl', { + 'plural': true, + 'units': 'milisekund:a|y|,sekund:a|y|,minut:a|y|,godzin:a|y|,dzień|dni|dni,tydzień|tygodnie|tygodni,miesiąc|miesiące|miesięcy,rok|lata|lat', + 'months': 'sty:cznia||czeń,lut:ego||y,mar:ca||zec,kwi:etnia||ecień,maj:a|,cze:rwca||rwiec,lip:ca||iec,sie:rpnia||rpień,wrz:eśnia||esień,paź:dziernika||dziernik,lis:topada||topad,gru:dnia||dzień', + 'weekdays': 'nie:dziela||dzielę,pon:iedziałek|,wt:orek|,śr:oda||odę,czw:artek|,piątek|pt,sobota|sb|sobotę', + 'numerals': 'zero,jeden|jedną,dwa|dwie,trzy,cztery,pięć,sześć,siedem,osiem,dziewięć,dziesięć', + 'tokens': 'w|we,roku', + 'short': '{dd}.{MM}.{yyyy}', + 'medium': '{d} {month} {yyyy}', + 'long': '{d} {month} {yyyy} {time}', + 'full' : '{weekday}, {d} {month} {yyyy} {time}', + 'stamp': '{dow} {d} {mon} {yyyy} {time}', + 'time': '{H}:{mm}', + 'timeMarkers': 'o', + 'ampm': 'am,pm', + 'modifiers': [ + { 'name': 'day', 'src': 'przedwczoraj', 'value': -2 }, + { 'name': 'day', 'src': 'wczoraj', 'value': -1 }, + { 'name': 'day', 'src': 'dzisiaj|dziś', 'value': 0 }, + { 'name': 'day', 'src': 'jutro', 'value': 1 }, + { 'name': 'day', 'src': 'pojutrze', 'value': 2 }, + { 'name': 'sign', 'src': 'temu|przed', 'value': -1 }, + { 'name': 'sign', 'src': 'za', 'value': 1 }, + { 'name': 'shift', 'src': 'zeszły|zeszła|ostatni|ostatnia', 'value': -1 }, + { 'name': 'shift', 'src': 'następny|następna|następnego|przyszły|przyszła|przyszłego', 'value': 1 } + ], + 'relative': function (num, unit, ms, format) { + // special cases for relative days + var DAY = 4; + if (unit === DAY) { + if (num === 1 && format === 'past') return 'wczoraj'; + if (num === 1 && format === 'future') return 'jutro'; + if (num === 2 && format === 'past') return 'przedwczoraj'; + if (num === 2 && format === 'future') return 'pojutrze'; + } + + var mult; + var last = +num.toFixed(0).slice(-1); + var last2 = +num.toFixed(0).slice(-2); + switch (true) { + case num === 1: mult = 0; break; + case last2 >= 12 && last2 <= 14: mult = 2; break; + case last >= 2 && last <= 4: mult = 1; break; + default: mult = 2; + } + var text = this['units'][(mult * 8) + unit]; + var prefix = num + ' '; + + // changing to accusative case for 'past' and 'future' formats + // (only singular feminine unit words are different in accusative, each of which ends with 'a') + if ((format === 'past' || format === 'future') && num === 1) { + text = text.replace(/a$/, 'ę'); + } + + text = prefix + text; + switch (format) { + case 'duration': return text; + case 'past': return text + ' temu'; + case 'future': return 'za ' + text; + } + }, + 'parse': [ + '{num} {unit} {sign}', + '{sign} {num} {unit}', + '{months} {year?}', + '{shift} {unit:5-7}', + '{0} {shift?} {weekday}' + ], + 'timeFrontParse': [ + '{day|weekday}', + '{date} {months} {year?} {1?}', + '{0?} {shift?} {weekday}' + ] +}); + + +// This package does not export anything as it is +// simply registering the "pl" locale. + +/***/ }), + +/***/ "./node_modules/sugar-date/locales/pt.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/locales/pt.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var addLocale = __webpack_require__(/*! ../date/addLocale */ "./node_modules/sugar-date/date/addLocale.js"); + +/* + * Portuguese locale definition. + * See the readme for customization and more information. + * To set this locale globally: + * + * Sugar.Date.setLocale('pt') + * + */ +addLocale('pt', { + 'plural': true, + 'units': 'milisegundo:|s,segundo:|s,minuto:|s,hora:|s,dia:|s,semana:|s,mês|mêses|mes|meses,ano:|s', + 'months': 'jan:eiro|,fev:ereiro|,mar:ço|,abr:il|,mai:o|,jun:ho|,jul:ho|,ago:sto|,set:embro|,out:ubro|,nov:embro|,dez:embro|', + 'weekdays': 'dom:ingo|,seg:unda-feira|,ter:ça-feira|,qua:rta-feira|,qui:nta-feira|,sex:ta-feira|,sáb:ado||ado', + 'numerals': 'zero,um:|a,dois|duas,três|tres,quatro,cinco,seis,sete,oito,nove,dez', + 'tokens': 'a,de', + 'short': '{dd}/{MM}/{yyyy}', + 'medium': '{d} de {Month} de {yyyy}', + 'long': '{d} de {Month} de {yyyy} {time}', + 'full': '{Weekday}, {d} de {Month} de {yyyy} {time}', + 'stamp': '{Dow} {d} {Mon} {yyyy} {time}', + 'time': '{H}:{mm}', + 'past': '{num} {unit} {sign}', + 'future': '{sign} {num} {unit}', + 'duration': '{num} {unit}', + 'timeMarkers': 'às', + 'ampm': 'am,pm', + 'modifiers': [ + { 'name': 'day', 'src': 'anteontem', 'value': -2 }, + { 'name': 'day', 'src': 'ontem', 'value': -1 }, + { 'name': 'day', 'src': 'hoje', 'value': 0 }, + { 'name': 'day', 'src': 'amanh:ã|a', 'value': 1 }, + { 'name': 'sign', 'src': 'atrás|atras|há|ha', 'value': -1 }, + { 'name': 'sign', 'src': 'daqui a', 'value': 1 }, + { 'name': 'shift', 'src': 'passad:o|a', 'value': -1 }, + { 'name': 'shift', 'src': 'próximo|próxima|proximo|proxima', 'value': 1 } + ], + 'parse': [ + '{months} {1?} {year?}', + '{num} {unit} {sign}', + '{sign} {num} {unit}', + '{0?} {unit:5-7} {shift}', + '{0?} {shift} {unit:5-7}' + ], + 'timeParse': [ + '{shift?} {day|weekday}', + '{0?} {shift} {weekday}', + '{date} {1?} {months?} {1?} {year?}' + ], + 'timeFrontParse': [ + '{shift?} {day|weekday}', + '{date} {1?} {months?} {1?} {year?}' + ] +}); + + +// This package does not export anything as it is +// simply registering the "pt" locale. + +/***/ }), + +/***/ "./node_modules/sugar-date/locales/ru.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/locales/ru.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var addLocale = __webpack_require__(/*! ../date/addLocale */ "./node_modules/sugar-date/date/addLocale.js"); + +/* + * Russian locale definition. + * See the readme for customization and more information. + * To set this locale globally: + * + * Sugar.Date.setLocale('ru') + * + */ +addLocale('ru', { + 'firstDayOfWeekYear': 1, + 'units': 'миллисекунд:а|у|ы|,секунд:а|у|ы|,минут:а|у|ы|,час:||а|ов,день|день|дня|дней,недел:я|ю|и|ь|е,месяц:||а|ев|е,год|год|года|лет|году', + 'months': 'янв:аря||.|арь,фев:раля||р.|раль,мар:та||т,апр:еля||.|ель,мая|май,июн:я||ь,июл:я||ь,авг:уста||.|уст,сен:тября||т.|тябрь,окт:ября||.|ябрь,ноя:бря||брь,дек:абря||.|абрь', + 'weekdays': 'воскресенье|вс,понедельник|пн,вторник|вт,среда|ср,четверг|чт,пятница|пт,суббота|сб', + 'numerals': 'ноль,од:ин|ну,дв:а|е,три,четыре,пять,шесть,семь,восемь,девять,десять', + 'tokens': 'в|на,г\\.?(?:ода)?', + 'short': '{dd}.{MM}.{yyyy}', + 'medium': '{d} {month} {yyyy} г.', + 'long': '{d} {month} {yyyy} г., {time}', + 'full': '{weekday}, {d} {month} {yyyy} г., {time}', + 'stamp': '{dow} {d} {mon} {yyyy} {time}', + 'time': '{H}:{mm}', + 'timeMarkers': 'в', + 'ampm': ' утра, вечера', + 'modifiers': [ + { 'name': 'day', 'src': 'позавчера', 'value': -2 }, + { 'name': 'day', 'src': 'вчера', 'value': -1 }, + { 'name': 'day', 'src': 'сегодня', 'value': 0 }, + { 'name': 'day', 'src': 'завтра', 'value': 1 }, + { 'name': 'day', 'src': 'послезавтра', 'value': 2 }, + { 'name': 'sign', 'src': 'назад', 'value': -1 }, + { 'name': 'sign', 'src': 'через', 'value': 1 }, + { 'name': 'shift', 'src': 'прошл:ый|ой|ом', 'value': -1 }, + { 'name': 'shift', 'src': 'следующ:ий|ей|ем', 'value': 1 } + ], + 'relative': function(num, unit, ms, format) { + var numberWithUnit, last = num.toString().slice(-1), mult; + switch(true) { + case num >= 11 && num <= 15: mult = 3; break; + case last == 1: mult = 1; break; + case last >= 2 && last <= 4: mult = 2; break; + default: mult = 3; + } + numberWithUnit = num + ' ' + this['units'][(mult * 8) + unit]; + switch(format) { + case 'duration': return numberWithUnit; + case 'past': return numberWithUnit + ' назад'; + case 'future': return 'через ' + numberWithUnit; + } + }, + 'parse': [ + '{num} {unit} {sign}', + '{sign} {num} {unit}', + '{months} {year?}', + '{0?} {shift} {unit:5-7}' + ], + 'timeParse': [ + '{day|weekday}', + '{0?} {shift} {weekday}', + '{date} {months?} {year?} {1?}' + ], + 'timeFrontParse': [ + '{0?} {shift} {weekday}', + '{date} {months?} {year?} {1?}' + ] +}); + + +// This package does not export anything as it is +// simply registering the "ru" locale. + +/***/ }), + +/***/ "./node_modules/sugar-date/locales/sv.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/locales/sv.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var addLocale = __webpack_require__(/*! ../date/addLocale */ "./node_modules/sugar-date/date/addLocale.js"); + +/* + * Swedish locale definition. + * See the readme for customization and more information. + * To set this locale globally: + * + * Sugar.Date.setLocale('sv') + * + */ +addLocale('sv', { + 'plural': true, + 'units': 'millisekund:|er,sekund:|er,minut:|er,timm:e|ar,dag:|ar,veck:a|or|an,månad:|er|en+manad:|er|en,år:||et+ar:||et', + 'months': 'jan:uari|,feb:ruari|,mar:s|,apr:il|,maj,jun:i|,jul:i|,aug:usti|,sep:tember|,okt:ober|,nov:ember|,dec:ember|', + 'weekdays': 'sön:dag|+son:dag|,mån:dag||dagen+man:dag||dagen,tis:dag|,ons:dag|,tor:sdag|,fre:dag|,lör:dag||dag', + 'numerals': 'noll,en|ett,två|tva,tre,fyra,fem,sex,sju,åtta|atta,nio,tio', + 'tokens': 'den,för|for', + 'articles': 'den', + 'short': '{yyyy}-{MM}-{dd}', + 'medium': '{d} {month} {yyyy}', + 'long': '{d} {month} {yyyy} {time}', + 'full': '{weekday} {d} {month} {yyyy} {time}', + 'stamp': '{dow} {d} {mon} {yyyy} {time}', + 'time': '{H}:{mm}', + 'past': '{num} {unit} {sign}', + 'future': '{sign} {num} {unit}', + 'duration': '{num} {unit}', + 'ampm': 'am,pm', + 'modifiers': [ + { 'name': 'day', 'src': 'förrgår|i förrgår|iförrgår|forrgar|i forrgar|iforrgar', 'value': -2 }, + { 'name': 'day', 'src': 'går|i går|igår|gar|i gar|igar', 'value': -1 }, + { 'name': 'day', 'src': 'dag|i dag|idag', 'value': 0 }, + { 'name': 'day', 'src': 'morgon|i morgon|imorgon', 'value': 1 }, + { 'name': 'day', 'src': 'över morgon|övermorgon|i över morgon|i övermorgon|iövermorgon|over morgon|overmorgon|i over morgon|i overmorgon|iovermorgon', 'value': 2 }, + { 'name': 'sign', 'src': 'sedan|sen', 'value': -1 }, + { 'name': 'sign', 'src': 'om', 'value': 1 }, + { 'name': 'shift', 'src': 'i förra|förra|i forra|forra', 'value': -1 }, + { 'name': 'shift', 'src': 'denna', 'value': 0 }, + { 'name': 'shift', 'src': 'nästa|nasta', 'value': 1 } + ], + 'parse': [ + '{months} {year?}', + '{num} {unit} {sign}', + '{sign} {num} {unit}', + '{1?} {num} {unit} {sign}', + '{shift} {unit:5-7}' + ], + 'timeParse': [ + '{day|weekday}', + '{shift} {weekday}', + '{0?} {weekday?},? {date} {months?}\\.? {year?}' + ], + 'timeFrontParse': [ + '{day|weekday}', + '{shift} {weekday}', + '{0?} {weekday?},? {date} {months?}\\.? {year?}' + ] +}); + + +// This package does not export anything as it is +// simply registering the "sv" locale. + +/***/ }), + +/***/ "./node_modules/sugar-date/locales/zh-CN.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/locales/zh-CN.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var addLocale = __webpack_require__(/*! ../date/addLocale */ "./node_modules/sugar-date/date/addLocale.js"); + +/* + * Simplified Chinese locale definition. + * See the readme for customization and more information. + * To set this locale globally: + * + * Sugar.Date.setLocale('zh-CN') + * + */ +addLocale('zh-CN', { + 'ampmFront': true, + 'numeralUnits': true, + 'allowsFullWidth': true, + 'timeMarkerOptional': true, + 'units': '毫秒,秒钟,分钟,小时,天,个星期|周,个月,年', + 'weekdays': '星期日|日|周日|星期天,星期一|一|周一,星期二|二|周二,星期三|三|周三,星期四|四|周四,星期五|五|周五,星期六|六|周六', + 'numerals': '〇,一,二,三,四,五,六,七,八,九', + 'placeholders': '十,百,千,万', + 'short': '{yyyy}-{MM}-{dd}', + 'medium': '{yyyy}年{M}月{d}日', + 'long': '{yyyy}年{M}月{d}日{time}', + 'full': '{yyyy}年{M}月{d}日{weekday}{time}', + 'stamp': '{yyyy}年{M}月{d}日{H}:{mm}{dow}', + 'time': '{tt}{h}点{mm}分', + 'past': '{num}{unit}{sign}', + 'future': '{num}{unit}{sign}', + 'duration': '{num}{unit}', + 'timeSuffixes': ',秒,分钟?,点|时,日|号,,月,年', + 'ampm': '上午,下午', + 'modifiers': [ + { 'name': 'day', 'src': '大前天', 'value': -3 }, + { 'name': 'day', 'src': '前天', 'value': -2 }, + { 'name': 'day', 'src': '昨天', 'value': -1 }, + { 'name': 'day', 'src': '今天', 'value': 0 }, + { 'name': 'day', 'src': '明天', 'value': 1 }, + { 'name': 'day', 'src': '后天', 'value': 2 }, + { 'name': 'day', 'src': '大后天', 'value': 3 }, + { 'name': 'sign', 'src': '前', 'value': -1 }, + { 'name': 'sign', 'src': '后', 'value': 1 }, + { 'name': 'shift', 'src': '上|去', 'value': -1 }, + { 'name': 'shift', 'src': '这', 'value': 0 }, + { 'name': 'shift', 'src': '下|明', 'value': 1 } + ], + 'parse': [ + '{num}{unit}{sign}', + '{shift}{unit:5-7}', + '{year?}{month}', + '{year}' + ], + 'timeParse': [ + '{day|weekday}', + '{shift}{weekday}', + '{year?}{month?}{date}' + ] +}); + + +// This package does not export anything as it is +// simply registering the "zh-CN" locale. + +/***/ }), + +/***/ "./node_modules/sugar-date/locales/zh-TW.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/locales/zh-TW.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var addLocale = __webpack_require__(/*! ../date/addLocale */ "./node_modules/sugar-date/date/addLocale.js"); + +/* + * Traditional Chinese locale definition. + * See the readme for customization and more information. + * To set this locale globally: + * + * Sugar.Date.setLocale('zh-TW') + * + */ +addLocale('zh-TW', { + 'ampmFront': true, + 'numeralUnits': true, + 'allowsFullWidth': true, + 'timeMarkerOptional': true, + 'units': '毫秒,秒鐘,分鐘,小時,天,個星期|週,個月,年', + 'weekdays': '星期日|日|週日|星期天,星期一|一|週一,星期二|二|週二,星期三|三|週三,星期四|四|週四,星期五|五|週五,星期六|六|週六', + 'numerals': '〇,一,二,三,四,五,六,七,八,九', + 'placeholders': '十,百,千,万', + 'short': '{yyyy}/{MM}/{dd}', + 'medium': '{yyyy}年{M}月{d}日', + 'long': '{yyyy}年{M}月{d}日{time}', + 'full': '{yyyy}年{M}月{d}日{weekday}{time}', + 'stamp': '{yyyy}年{M}月{d}日{H}:{mm}{dow}', + 'time': '{tt}{h}點{mm}分', + 'past': '{num}{unit}{sign}', + 'future': '{num}{unit}{sign}', + 'duration': '{num}{unit}', + 'timeSuffixes': ',秒,分鐘?,點|時,日|號,,月,年', + 'ampm': '上午,下午', + 'modifiers': [ + { 'name': 'day', 'src': '大前天', 'value': -3 }, + { 'name': 'day', 'src': '前天', 'value': -2 }, + { 'name': 'day', 'src': '昨天', 'value': -1 }, + { 'name': 'day', 'src': '今天', 'value': 0 }, + { 'name': 'day', 'src': '明天', 'value': 1 }, + { 'name': 'day', 'src': '後天', 'value': 2 }, + { 'name': 'day', 'src': '大後天', 'value': 3 }, + { 'name': 'sign', 'src': '前', 'value': -1 }, + { 'name': 'sign', 'src': '後', 'value': 1 }, + { 'name': 'shift', 'src': '上|去', 'value': -1 }, + { 'name': 'shift', 'src': '這', 'value': 0 }, + { 'name': 'shift', 'src': '下|明', 'value': 1 } + ], + 'parse': [ + '{num}{unit}{sign}', + '{shift}{unit:5-7}', + '{year?}{month}', + '{year}' + ], + 'timeParse': [ + '{day|weekday}', + '{shift}{weekday}', + '{year?}{month?}{date}' + ] +}); + + +// This package does not export anything as it is +// simply registering the "zh-TW" locale. + +/***/ }), + +/***/ "./node_modules/sugar-date/number/day.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/number/day.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.day; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/dayAfter.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/number/dayAfter.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.dayAfter; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/dayAgo.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/number/dayAgo.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.dayAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/dayBefore.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/number/dayBefore.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.dayBefore; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/dayFromNow.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/number/dayFromNow.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.dayFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/days.js": +/*!************************************************!*\ + !*** ./node_modules/sugar-date/number/days.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.days; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/daysAfter.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/number/daysAfter.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.daysAfter; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/daysAgo.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/number/daysAgo.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.daysAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/daysBefore.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/number/daysBefore.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.daysBefore; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/daysFromNow.js": +/*!*******************************************************!*\ + !*** ./node_modules/sugar-date/number/daysFromNow.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.daysFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/duration.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/number/duration.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"), + LocaleHelpers = __webpack_require__(/*! ../date/var/LocaleHelpers */ "./node_modules/sugar-date/date/var/LocaleHelpers.js"); + +var localeManager = LocaleHelpers.localeManager; + +Sugar.Number.defineInstance({ + + 'duration': function(n, localeCode) { + return localeManager.get(localeCode).getDuration(n); + } + +}); + +module.exports = Sugar.Number.duration; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/hour.js": +/*!************************************************!*\ + !*** ./node_modules/sugar-date/number/hour.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.hour; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/hourAfter.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/number/hourAfter.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.hourAfter; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/hourAgo.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/number/hourAgo.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.hourAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/hourBefore.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/number/hourBefore.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.hourBefore; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/hourFromNow.js": +/*!*******************************************************!*\ + !*** ./node_modules/sugar-date/number/hourFromNow.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.hourFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/hours.js": +/*!*************************************************!*\ + !*** ./node_modules/sugar-date/number/hours.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.hours; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/hoursAfter.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/number/hoursAfter.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.hoursAfter; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/hoursAgo.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/number/hoursAgo.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.hoursAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/hoursBefore.js": +/*!*******************************************************!*\ + !*** ./node_modules/sugar-date/number/hoursBefore.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.hoursBefore; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/hoursFromNow.js": +/*!********************************************************!*\ + !*** ./node_modules/sugar-date/number/hoursFromNow.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.hoursFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/millisecond.js": +/*!*******************************************************!*\ + !*** ./node_modules/sugar-date/number/millisecond.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.millisecond; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/millisecondAfter.js": +/*!************************************************************!*\ + !*** ./node_modules/sugar-date/number/millisecondAfter.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.millisecondAfter; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/millisecondAgo.js": +/*!**********************************************************!*\ + !*** ./node_modules/sugar-date/number/millisecondAgo.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.millisecondAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/millisecondBefore.js": +/*!*************************************************************!*\ + !*** ./node_modules/sugar-date/number/millisecondBefore.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.millisecondBefore; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/millisecondFromNow.js": +/*!**************************************************************!*\ + !*** ./node_modules/sugar-date/number/millisecondFromNow.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.millisecondFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/milliseconds.js": +/*!********************************************************!*\ + !*** ./node_modules/sugar-date/number/milliseconds.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.milliseconds; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/millisecondsAfter.js": +/*!*************************************************************!*\ + !*** ./node_modules/sugar-date/number/millisecondsAfter.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.millisecondsAfter; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/millisecondsAgo.js": +/*!***********************************************************!*\ + !*** ./node_modules/sugar-date/number/millisecondsAgo.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.millisecondsAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/millisecondsBefore.js": +/*!**************************************************************!*\ + !*** ./node_modules/sugar-date/number/millisecondsBefore.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.millisecondsBefore; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/millisecondsFromNow.js": +/*!***************************************************************!*\ + !*** ./node_modules/sugar-date/number/millisecondsFromNow.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.millisecondsFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/minute.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/number/minute.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.minute; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/minuteAfter.js": +/*!*******************************************************!*\ + !*** ./node_modules/sugar-date/number/minuteAfter.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.minuteAfter; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/minuteAgo.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/number/minuteAgo.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.minuteAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/minuteBefore.js": +/*!********************************************************!*\ + !*** ./node_modules/sugar-date/number/minuteBefore.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.minuteBefore; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/minuteFromNow.js": +/*!*********************************************************!*\ + !*** ./node_modules/sugar-date/number/minuteFromNow.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.minuteFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/minutes.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/number/minutes.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.minutes; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/minutesAfter.js": +/*!********************************************************!*\ + !*** ./node_modules/sugar-date/number/minutesAfter.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.minutesAfter; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/minutesAgo.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/number/minutesAgo.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.minutesAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/minutesBefore.js": +/*!*********************************************************!*\ + !*** ./node_modules/sugar-date/number/minutesBefore.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.minutesBefore; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/minutesFromNow.js": +/*!**********************************************************!*\ + !*** ./node_modules/sugar-date/number/minutesFromNow.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.minutesFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/month.js": +/*!*************************************************!*\ + !*** ./node_modules/sugar-date/number/month.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.month; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/monthAfter.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/number/monthAfter.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.monthAfter; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/monthAgo.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/number/monthAgo.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.monthAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/monthBefore.js": +/*!*******************************************************!*\ + !*** ./node_modules/sugar-date/number/monthBefore.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.monthBefore; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/monthFromNow.js": +/*!********************************************************!*\ + !*** ./node_modules/sugar-date/number/monthFromNow.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.monthFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/months.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/number/months.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.months; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/monthsAfter.js": +/*!*******************************************************!*\ + !*** ./node_modules/sugar-date/number/monthsAfter.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.monthsAfter; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/monthsAgo.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/number/monthsAgo.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.monthsAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/monthsBefore.js": +/*!********************************************************!*\ + !*** ./node_modules/sugar-date/number/monthsBefore.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.monthsBefore; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/monthsFromNow.js": +/*!*********************************************************!*\ + !*** ./node_modules/sugar-date/number/monthsFromNow.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.monthsFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/second.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/number/second.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.second; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/secondAfter.js": +/*!*******************************************************!*\ + !*** ./node_modules/sugar-date/number/secondAfter.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.secondAfter; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/secondAgo.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/number/secondAgo.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.secondAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/secondBefore.js": +/*!********************************************************!*\ + !*** ./node_modules/sugar-date/number/secondBefore.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.secondBefore; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/secondFromNow.js": +/*!*********************************************************!*\ + !*** ./node_modules/sugar-date/number/secondFromNow.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.secondFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/seconds.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/number/seconds.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.seconds; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/secondsAfter.js": +/*!********************************************************!*\ + !*** ./node_modules/sugar-date/number/secondsAfter.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.secondsAfter; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/secondsAgo.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/number/secondsAgo.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.secondsAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/secondsBefore.js": +/*!*********************************************************!*\ + !*** ./node_modules/sugar-date/number/secondsBefore.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.secondsBefore; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/secondsFromNow.js": +/*!**********************************************************!*\ + !*** ./node_modules/sugar-date/number/secondsFromNow.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.secondsFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/week.js": +/*!************************************************!*\ + !*** ./node_modules/sugar-date/number/week.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.week; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/weekAfter.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/number/weekAfter.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.weekAfter; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/weekAgo.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/number/weekAgo.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.weekAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/weekBefore.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/number/weekBefore.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.weekBefore; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/weekFromNow.js": +/*!*******************************************************!*\ + !*** ./node_modules/sugar-date/number/weekFromNow.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.weekFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/weeks.js": +/*!*************************************************!*\ + !*** ./node_modules/sugar-date/number/weeks.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.weeks; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/weeksAfter.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/number/weeksAfter.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.weeksAfter; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/weeksAgo.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/number/weeksAgo.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.weeksAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/weeksBefore.js": +/*!*******************************************************!*\ + !*** ./node_modules/sugar-date/number/weeksBefore.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.weeksBefore; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/weeksFromNow.js": +/*!********************************************************!*\ + !*** ./node_modules/sugar-date/number/weeksFromNow.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.weeksFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/year.js": +/*!************************************************!*\ + !*** ./node_modules/sugar-date/number/year.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.year; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/yearAfter.js": +/*!*****************************************************!*\ + !*** ./node_modules/sugar-date/number/yearAfter.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.yearAfter; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/yearAgo.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/number/yearAgo.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.yearAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/yearBefore.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/number/yearBefore.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.yearBefore; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/yearFromNow.js": +/*!*******************************************************!*\ + !*** ./node_modules/sugar-date/number/yearFromNow.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.yearFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/years.js": +/*!*************************************************!*\ + !*** ./node_modules/sugar-date/number/years.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.years; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/yearsAfter.js": +/*!******************************************************!*\ + !*** ./node_modules/sugar-date/number/yearsAfter.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.yearsAfter; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/yearsAgo.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/number/yearsAgo.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.yearsAgo; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/yearsBefore.js": +/*!*******************************************************!*\ + !*** ./node_modules/sugar-date/number/yearsBefore.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.yearsBefore; + +/***/ }), + +/***/ "./node_modules/sugar-date/number/yearsFromNow.js": +/*!********************************************************!*\ + !*** ./node_modules/sugar-date/number/yearsFromNow.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Sugar = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +__webpack_require__(/*! ../date/build/buildNumberUnitMethodsCall */ "./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js"); + +module.exports = Sugar.Number.yearsFromNow; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/build/buildDateRangeUnitsCall.js": +/*!************************************************************************!*\ + !*** ./node_modules/sugar-date/range/build/buildDateRangeUnitsCall.js ***! + \************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var buildDateRangeUnits = __webpack_require__(/*! ../internal/buildDateRangeUnits */ "./node_modules/sugar-date/range/internal/buildDateRangeUnits.js"); + +buildDateRangeUnits(); + +/***/ }), + +/***/ "./node_modules/sugar-date/range/clamp.js": +/*!************************************************!*\ + !*** ./node_modules/sugar-date/range/clamp.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Range = __webpack_require__(/*! ./internal/Range */ "./node_modules/sugar-date/range/internal/Range.js"), + rangeClamp = __webpack_require__(/*! ./internal/rangeClamp */ "./node_modules/sugar-date/range/internal/rangeClamp.js"), + defineOnPrototype = __webpack_require__(/*! ../common/internal/defineOnPrototype */ "./node_modules/sugar-date/common/internal/defineOnPrototype.js"); + +defineOnPrototype(Range, { + + 'clamp': function(el) { + return rangeClamp(this, el); + } + +}); + +// This package does not export anything as it is +// simply defining "clamp" on Range.prototype. + +/***/ }), + +/***/ "./node_modules/sugar-date/range/clone.js": +/*!************************************************!*\ + !*** ./node_modules/sugar-date/range/clone.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Range = __webpack_require__(/*! ./internal/Range */ "./node_modules/sugar-date/range/internal/Range.js"), + defineOnPrototype = __webpack_require__(/*! ../common/internal/defineOnPrototype */ "./node_modules/sugar-date/common/internal/defineOnPrototype.js"); + +defineOnPrototype(Range, { + + 'clone': function() { + return new Range(this.start, this.end); + } + +}); + +// This package does not export anything as it is +// simply defining "clone" on Range.prototype. + +/***/ }), + +/***/ "./node_modules/sugar-date/range/contains.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/range/contains.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Range = __webpack_require__(/*! ./internal/Range */ "./node_modules/sugar-date/range/internal/Range.js"), + defineOnPrototype = __webpack_require__(/*! ../common/internal/defineOnPrototype */ "./node_modules/sugar-date/common/internal/defineOnPrototype.js"); + +defineOnPrototype(Range, { + + 'contains': function(el) { + if (el == null) return false; + if (el.start && el.end) { + return el.start >= this.start && el.start <= this.end && + el.end >= this.start && el.end <= this.end; + } else { + return el >= this.start && el <= this.end; + } + } + +}); + +// This package does not export anything as it is +// simply defining "contains" on Range.prototype. + +/***/ }), + +/***/ "./node_modules/sugar-date/range/days.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/range/days.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +__webpack_require__(/*! ./build/buildDateRangeUnitsCall */ "./node_modules/sugar-date/range/build/buildDateRangeUnitsCall.js"); + +// This package does not export anything as it is +// simply defining "days" on Range.prototype. + +/***/ }), + +/***/ "./node_modules/sugar-date/range/every.js": +/*!************************************************!*\ + !*** ./node_modules/sugar-date/range/every.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Range = __webpack_require__(/*! ./internal/Range */ "./node_modules/sugar-date/range/internal/Range.js"), + rangeEvery = __webpack_require__(/*! ./internal/rangeEvery */ "./node_modules/sugar-date/range/internal/rangeEvery.js"), + defineOnPrototype = __webpack_require__(/*! ../common/internal/defineOnPrototype */ "./node_modules/sugar-date/common/internal/defineOnPrototype.js"); + +defineOnPrototype(Range, { + + 'every': function(amount, everyFn) { + return rangeEvery(this, amount, false, everyFn); + } + +}); + +// This package does not export anything as it is +// simply defining "every" on Range.prototype. + +/***/ }), + +/***/ "./node_modules/sugar-date/range/hours.js": +/*!************************************************!*\ + !*** ./node_modules/sugar-date/range/hours.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +__webpack_require__(/*! ./build/buildDateRangeUnitsCall */ "./node_modules/sugar-date/range/build/buildDateRangeUnitsCall.js"); + +// This package does not export anything as it is +// simply defining "hours" on Range.prototype. + +/***/ }), + +/***/ "./node_modules/sugar-date/range/index.js": +/*!************************************************!*\ + !*** ./node_modules/sugar-date/range/index.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// Static Methods +__webpack_require__(/*! ../date/range */ "./node_modules/sugar-date/date/range.js"); + +// Prototype Methods +__webpack_require__(/*! ./clamp */ "./node_modules/sugar-date/range/clamp.js"); +__webpack_require__(/*! ./clone */ "./node_modules/sugar-date/range/clone.js"); +__webpack_require__(/*! ./contains */ "./node_modules/sugar-date/range/contains.js"); +__webpack_require__(/*! ./days */ "./node_modules/sugar-date/range/days.js"); +__webpack_require__(/*! ./every */ "./node_modules/sugar-date/range/every.js"); +__webpack_require__(/*! ./hours */ "./node_modules/sugar-date/range/hours.js"); +__webpack_require__(/*! ./intersect */ "./node_modules/sugar-date/range/intersect.js"); +__webpack_require__(/*! ./isValid */ "./node_modules/sugar-date/range/isValid.js"); +__webpack_require__(/*! ./milliseconds */ "./node_modules/sugar-date/range/milliseconds.js"); +__webpack_require__(/*! ./minutes */ "./node_modules/sugar-date/range/minutes.js"); +__webpack_require__(/*! ./months */ "./node_modules/sugar-date/range/months.js"); +__webpack_require__(/*! ./seconds */ "./node_modules/sugar-date/range/seconds.js"); +__webpack_require__(/*! ./span */ "./node_modules/sugar-date/range/span.js"); +__webpack_require__(/*! ./toArray */ "./node_modules/sugar-date/range/toArray.js"); +__webpack_require__(/*! ./toString */ "./node_modules/sugar-date/range/toString.js"); +__webpack_require__(/*! ./union */ "./node_modules/sugar-date/range/union.js"); +__webpack_require__(/*! ./weeks */ "./node_modules/sugar-date/range/weeks.js"); +__webpack_require__(/*! ./years */ "./node_modules/sugar-date/range/years.js"); + +module.exports = __webpack_require__(/*! sugar-core */ "./node_modules/sugar-core/sugar-core.js"); + +/***/ }), + +/***/ "./node_modules/sugar-date/range/internal/Range.js": +/*!*********************************************************!*\ + !*** ./node_modules/sugar-date/range/internal/Range.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var cloneRangeMember = __webpack_require__(/*! ./cloneRangeMember */ "./node_modules/sugar-date/range/internal/cloneRangeMember.js"); + +function Range(start, end) { + this.start = cloneRangeMember(start); + this.end = cloneRangeMember(end); +} + +module.exports = Range; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/internal/buildDateRangeUnits.js": +/*!***********************************************************************!*\ + !*** ./node_modules/sugar-date/range/internal/buildDateRangeUnits.js ***! + \***********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var MULTIPLIERS = __webpack_require__(/*! ../var/MULTIPLIERS */ "./node_modules/sugar-date/range/var/MULTIPLIERS.js"), + DURATION_UNITS = __webpack_require__(/*! ../var/DURATION_UNITS */ "./node_modules/sugar-date/range/var/DURATION_UNITS.js"), + Range = __webpack_require__(/*! ./Range */ "./node_modules/sugar-date/range/internal/Range.js"), + trunc = __webpack_require__(/*! ../../common/var/trunc */ "./node_modules/sugar-date/common/var/trunc.js"), + forEach = __webpack_require__(/*! ../../common/internal/forEach */ "./node_modules/sugar-date/common/internal/forEach.js"), + rangeEvery = __webpack_require__(/*! ./rangeEvery */ "./node_modules/sugar-date/range/internal/rangeEvery.js"), + simpleCapitalize = __webpack_require__(/*! ../../common/internal/simpleCapitalize */ "./node_modules/sugar-date/common/internal/simpleCapitalize.js"), + defineOnPrototype = __webpack_require__(/*! ../../common/internal/defineOnPrototype */ "./node_modules/sugar-date/common/internal/defineOnPrototype.js"); + +function buildDateRangeUnits() { + var methods = {}; + forEach(DURATION_UNITS.split('|'), function(unit, i) { + var name = unit + 's', mult, fn; + if (i < 4) { + fn = function() { + return rangeEvery(this, unit, true); + }; + } else { + mult = MULTIPLIERS[simpleCapitalize(name)]; + fn = function() { + return trunc((this.end - this.start) / mult); + }; + } + methods[name] = fn; + }); + defineOnPrototype(Range, methods); +} + +module.exports = buildDateRangeUnits; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/internal/cloneRangeMember.js": +/*!********************************************************************!*\ + !*** ./node_modules/sugar-date/range/internal/cloneRangeMember.js ***! + \********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var classChecks = __webpack_require__(/*! ../../common/var/classChecks */ "./node_modules/sugar-date/common/var/classChecks.js"), + getRangeMemberPrimitiveValue = __webpack_require__(/*! ./getRangeMemberPrimitiveValue */ "./node_modules/sugar-date/range/internal/getRangeMemberPrimitiveValue.js"); + +var isDate = classChecks.isDate; + +function cloneRangeMember(m) { + if (isDate(m)) { + return new Date(m.getTime()); + } else { + return getRangeMemberPrimitiveValue(m); + } +} + +module.exports = cloneRangeMember; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/internal/createDateRangeFromString.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/sugar-date/range/internal/createDateRangeFromString.js ***! + \*****************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Range = __webpack_require__(/*! ./Range */ "./node_modules/sugar-date/range/internal/Range.js"), + DurationTextFormats = __webpack_require__(/*! ../var/DurationTextFormats */ "./node_modules/sugar-date/range/var/DurationTextFormats.js"), + incrementDate = __webpack_require__(/*! ./incrementDate */ "./node_modules/sugar-date/range/internal/incrementDate.js"), + getDateForRange = __webpack_require__(/*! ./getDateForRange */ "./node_modules/sugar-date/range/internal/getDateForRange.js"), + namespaceAliases = __webpack_require__(/*! ../../common/var/namespaceAliases */ "./node_modules/sugar-date/common/var/namespaceAliases.js"), + getDateIncrementObject = __webpack_require__(/*! ./getDateIncrementObject */ "./node_modules/sugar-date/range/internal/getDateIncrementObject.js"); + +var sugarDate = namespaceAliases.sugarDate, + RANGE_REG_FROM_TO = DurationTextFormats.RANGE_REG_FROM_TO, + RANGE_REG_REAR_DURATION = DurationTextFormats.RANGE_REG_REAR_DURATION, + RANGE_REG_FRONT_DURATION = DurationTextFormats.RANGE_REG_FRONT_DURATION; + +function createDateRangeFromString(str) { + var match, datetime, duration, dio, start, end; + if (sugarDate.get && (match = str.match(RANGE_REG_FROM_TO))) { + start = getDateForRange(match[1].replace('from', 'at')); + end = sugarDate.get(start, match[2]); + return new Range(start, end); + } + if (match = str.match(RANGE_REG_FRONT_DURATION)) { + duration = match[1]; + datetime = match[2]; + } + if (match = str.match(RANGE_REG_REAR_DURATION)) { + datetime = match[1]; + duration = match[2]; + } + if (datetime && duration) { + start = getDateForRange(datetime); + dio = getDateIncrementObject(duration); + end = incrementDate(start, dio[0], dio[1]); + } else { + start = str; + } + return new Range(getDateForRange(start), getDateForRange(end)); +} + +module.exports = createDateRangeFromString; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/internal/getDateForRange.js": +/*!*******************************************************************!*\ + !*** ./node_modules/sugar-date/range/internal/getDateForRange.js ***! + \*******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var classChecks = __webpack_require__(/*! ../../common/var/classChecks */ "./node_modules/sugar-date/common/var/classChecks.js"), + namespaceAliases = __webpack_require__(/*! ../../common/var/namespaceAliases */ "./node_modules/sugar-date/common/var/namespaceAliases.js"); + +var isDate = classChecks.isDate, + sugarDate = namespaceAliases.sugarDate; + +function getDateForRange(d) { + if (isDate(d)) { + return d; + } else if (d == null) { + return new Date(); + } else if (sugarDate.create) { + return sugarDate.create(d); + } + return new Date(d); +} + +module.exports = getDateForRange; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/internal/getDateIncrementObject.js": +/*!**************************************************************************!*\ + !*** ./node_modules/sugar-date/range/internal/getDateIncrementObject.js ***! + \**************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var DURATION_REG = __webpack_require__(/*! ../var/DURATION_REG */ "./node_modules/sugar-date/range/var/DURATION_REG.js"), + classChecks = __webpack_require__(/*! ../../common/var/classChecks */ "./node_modules/sugar-date/common/var/classChecks.js"), + simpleCapitalize = __webpack_require__(/*! ../../common/internal/simpleCapitalize */ "./node_modules/sugar-date/common/internal/simpleCapitalize.js"); + +var isNumber = classChecks.isNumber; + +function getDateIncrementObject(amt) { + var match, val, unit; + if (isNumber(amt)) { + return [amt, 'Milliseconds']; + } + match = amt.match(DURATION_REG); + val = +match[1] || 1; + unit = simpleCapitalize(match[2].toLowerCase()); + if (unit.match(/hour|minute|second/i)) { + unit += 's'; + } else if (unit === 'Year') { + unit = 'FullYear'; + } else if (unit === 'Week') { + unit = 'Date'; + val *= 7; + } else if (unit === 'Day') { + unit = 'Date'; + } + return [val, unit]; +} + +module.exports = getDateIncrementObject; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/internal/getGreaterPrecision.js": +/*!***********************************************************************!*\ + !*** ./node_modules/sugar-date/range/internal/getGreaterPrecision.js ***! + \***********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var mathAliases = __webpack_require__(/*! ../../common/var/mathAliases */ "./node_modules/sugar-date/common/var/mathAliases.js"), + getPrecision = __webpack_require__(/*! ./getPrecision */ "./node_modules/sugar-date/range/internal/getPrecision.js"); + +var max = mathAliases.max; + +function getGreaterPrecision(n1, n2) { + return max(getPrecision(n1), getPrecision(n2)); +} + +module.exports = getGreaterPrecision; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/internal/getPrecision.js": +/*!****************************************************************!*\ + !*** ./node_modules/sugar-date/range/internal/getPrecision.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var periodSplit = __webpack_require__(/*! ../../common/internal/periodSplit */ "./node_modules/sugar-date/common/internal/periodSplit.js"); + +function getPrecision(n) { + var split = periodSplit(n.toString()); + return split[1] ? split[1].length : 0; +} + +module.exports = getPrecision; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/internal/getRangeMemberNumericValue.js": +/*!******************************************************************************!*\ + !*** ./node_modules/sugar-date/range/internal/getRangeMemberNumericValue.js ***! + \******************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var classChecks = __webpack_require__(/*! ../../common/var/classChecks */ "./node_modules/sugar-date/common/var/classChecks.js"); + +var isString = classChecks.isString; + +function getRangeMemberNumericValue(m) { + return isString(m) ? m.charCodeAt(0) : m; +} + +module.exports = getRangeMemberNumericValue; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/internal/getRangeMemberPrimitiveValue.js": +/*!********************************************************************************!*\ + !*** ./node_modules/sugar-date/range/internal/getRangeMemberPrimitiveValue.js ***! + \********************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var classChecks = __webpack_require__(/*! ../../common/var/classChecks */ "./node_modules/sugar-date/common/var/classChecks.js"); + +var isDate = classChecks.isDate; + +function getRangeMemberPrimitiveValue(m) { + if (m == null) return m; + return isDate(m) ? m.getTime() : m.valueOf(); +} + +module.exports = getRangeMemberPrimitiveValue; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/internal/incrementDate.js": +/*!*****************************************************************!*\ + !*** ./node_modules/sugar-date/range/internal/incrementDate.js ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var MULTIPLIERS = __webpack_require__(/*! ../var/MULTIPLIERS */ "./node_modules/sugar-date/range/var/MULTIPLIERS.js"), + callDateSet = __webpack_require__(/*! ../../common/internal/callDateSet */ "./node_modules/sugar-date/common/internal/callDateSet.js"), + callDateGet = __webpack_require__(/*! ../../common/internal/callDateGet */ "./node_modules/sugar-date/common/internal/callDateGet.js"); + +function incrementDate(src, amount, unit) { + var mult = MULTIPLIERS[unit], d; + if (mult) { + d = new Date(src.getTime() + (amount * mult)); + } else { + d = new Date(src); + callDateSet(d, unit, callDateGet(src, unit) + amount); + } + return d; +} + +module.exports = incrementDate; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/internal/incrementNumber.js": +/*!*******************************************************************!*\ + !*** ./node_modules/sugar-date/range/internal/incrementNumber.js ***! + \*******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var withPrecision = __webpack_require__(/*! ../../common/internal/withPrecision */ "./node_modules/sugar-date/common/internal/withPrecision.js"); + +function incrementNumber(current, amount, precision) { + return withPrecision(current + amount, precision); +} + +module.exports = incrementNumber; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/internal/incrementString.js": +/*!*******************************************************************!*\ + !*** ./node_modules/sugar-date/range/internal/incrementString.js ***! + \*******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var chr = __webpack_require__(/*! ../../common/var/chr */ "./node_modules/sugar-date/common/var/chr.js"); + +function incrementString(current, amount) { + return chr(current.charCodeAt(0) + amount); +} + +module.exports = incrementString; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/internal/isValidRangeMember.js": +/*!**********************************************************************!*\ + !*** ./node_modules/sugar-date/range/internal/isValidRangeMember.js ***! + \**********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var valueIsNotInfinite = __webpack_require__(/*! ./valueIsNotInfinite */ "./node_modules/sugar-date/range/internal/valueIsNotInfinite.js"), + getRangeMemberPrimitiveValue = __webpack_require__(/*! ./getRangeMemberPrimitiveValue */ "./node_modules/sugar-date/range/internal/getRangeMemberPrimitiveValue.js"); + +function isValidRangeMember(m) { + var val = getRangeMemberPrimitiveValue(m); + return (!!val || val === 0) && valueIsNotInfinite(m); +} + +module.exports = isValidRangeMember; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/internal/rangeClamp.js": +/*!**************************************************************!*\ + !*** ./node_modules/sugar-date/range/internal/rangeClamp.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var cloneRangeMember = __webpack_require__(/*! ./cloneRangeMember */ "./node_modules/sugar-date/range/internal/cloneRangeMember.js"); + +function rangeClamp(range, obj) { + var clamped, + start = range.start, + end = range.end, + min = end < start ? end : start, + max = start > end ? start : end; + if (obj < min) { + clamped = min; + } else if (obj > max) { + clamped = max; + } else { + clamped = obj; + } + return cloneRangeMember(clamped); +} + +module.exports = rangeClamp; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/internal/rangeEvery.js": +/*!**************************************************************!*\ + !*** ./node_modules/sugar-date/range/internal/rangeEvery.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var classChecks = __webpack_require__(/*! ../../common/var/classChecks */ "./node_modules/sugar-date/common/var/classChecks.js"), + rangeIsValid = __webpack_require__(/*! ./rangeIsValid */ "./node_modules/sugar-date/range/internal/rangeIsValid.js"), + incrementDate = __webpack_require__(/*! ./incrementDate */ "./node_modules/sugar-date/range/internal/incrementDate.js"), + incrementNumber = __webpack_require__(/*! ./incrementNumber */ "./node_modules/sugar-date/range/internal/incrementNumber.js"), + incrementString = __webpack_require__(/*! ./incrementString */ "./node_modules/sugar-date/range/internal/incrementString.js"), + getGreaterPrecision = __webpack_require__(/*! ./getGreaterPrecision */ "./node_modules/sugar-date/range/internal/getGreaterPrecision.js"), + getDateIncrementObject = __webpack_require__(/*! ./getDateIncrementObject */ "./node_modules/sugar-date/range/internal/getDateIncrementObject.js"); + +var isNumber = classChecks.isNumber, + isString = classChecks.isString, + isDate = classChecks.isDate, + isFunction = classChecks.isFunction; + +function rangeEvery(range, step, countOnly, fn) { + var increment, + precision, + dio, + unit, + start = range.start, + end = range.end, + inverse = end < start, + current = start, + index = 0, + result = []; + + if (!rangeIsValid(range)) { + return countOnly ? NaN : []; + } + if (isFunction(step)) { + fn = step; + step = null; + } + step = step || 1; + if (isNumber(start)) { + precision = getGreaterPrecision(start, step); + increment = function() { + return incrementNumber(current, step, precision); + }; + } else if (isString(start)) { + increment = function() { + return incrementString(current, step); + }; + } else if (isDate(start)) { + dio = getDateIncrementObject(step); + step = dio[0]; + unit = dio[1]; + increment = function() { + return incrementDate(current, step, unit); + }; + } + // Avoiding infinite loops + if (inverse && step > 0) { + step *= -1; + } + while(inverse ? current >= end : current <= end) { + if (!countOnly) { + result.push(current); + } + if (fn) { + fn(current, index, range); + } + current = increment(); + index++; + } + return countOnly ? index - 1 : result; +} + +module.exports = rangeEvery; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/internal/rangeIsValid.js": +/*!****************************************************************!*\ + !*** ./node_modules/sugar-date/range/internal/rangeIsValid.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var isValidRangeMember = __webpack_require__(/*! ./isValidRangeMember */ "./node_modules/sugar-date/range/internal/isValidRangeMember.js"); + +function rangeIsValid(range) { + return isValidRangeMember(range.start) && + isValidRangeMember(range.end) && + typeof range.start === typeof range.end; +} + +module.exports = rangeIsValid; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/internal/valueIsNotInfinite.js": +/*!**********************************************************************!*\ + !*** ./node_modules/sugar-date/range/internal/valueIsNotInfinite.js ***! + \**********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function valueIsNotInfinite(m) { + return m !== -Infinity && m !== Infinity; +} + +module.exports = valueIsNotInfinite; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/intersect.js": +/*!****************************************************!*\ + !*** ./node_modules/sugar-date/range/intersect.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Range = __webpack_require__(/*! ./internal/Range */ "./node_modules/sugar-date/range/internal/Range.js"), + defineOnPrototype = __webpack_require__(/*! ../common/internal/defineOnPrototype */ "./node_modules/sugar-date/common/internal/defineOnPrototype.js"); + +defineOnPrototype(Range, { + + 'intersect': function(range) { + if (range.start > this.end || range.end < this.start) { + return new Range(NaN, NaN); + } + return new Range( + this.start > range.start ? this.start : range.start, + this.end < range.end ? this.end : range.end + ); + } + +}); + +// This package does not export anything as it is +// simply defining "intersect" on Range.prototype. + +/***/ }), + +/***/ "./node_modules/sugar-date/range/isValid.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/range/isValid.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Range = __webpack_require__(/*! ./internal/Range */ "./node_modules/sugar-date/range/internal/Range.js"), + rangeIsValid = __webpack_require__(/*! ./internal/rangeIsValid */ "./node_modules/sugar-date/range/internal/rangeIsValid.js"), + defineOnPrototype = __webpack_require__(/*! ../common/internal/defineOnPrototype */ "./node_modules/sugar-date/common/internal/defineOnPrototype.js"); + +defineOnPrototype(Range, { + + 'isValid': function() { + return rangeIsValid(this); + } + +}); + +// This package does not export anything as it is +// simply defining "isValid" on Range.prototype. + +/***/ }), + +/***/ "./node_modules/sugar-date/range/milliseconds.js": +/*!*******************************************************!*\ + !*** ./node_modules/sugar-date/range/milliseconds.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +__webpack_require__(/*! ./build/buildDateRangeUnitsCall */ "./node_modules/sugar-date/range/build/buildDateRangeUnitsCall.js"); + +// This package does not export anything as it is +// simply defining "milliseconds" on Range.prototype. + +/***/ }), + +/***/ "./node_modules/sugar-date/range/minutes.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/range/minutes.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +__webpack_require__(/*! ./build/buildDateRangeUnitsCall */ "./node_modules/sugar-date/range/build/buildDateRangeUnitsCall.js"); + +// This package does not export anything as it is +// simply defining "minutes" on Range.prototype. + +/***/ }), + +/***/ "./node_modules/sugar-date/range/months.js": +/*!*************************************************!*\ + !*** ./node_modules/sugar-date/range/months.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +__webpack_require__(/*! ./build/buildDateRangeUnitsCall */ "./node_modules/sugar-date/range/build/buildDateRangeUnitsCall.js"); + +// This package does not export anything as it is +// simply defining "months" on Range.prototype. + +/***/ }), + +/***/ "./node_modules/sugar-date/range/seconds.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/range/seconds.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +__webpack_require__(/*! ./build/buildDateRangeUnitsCall */ "./node_modules/sugar-date/range/build/buildDateRangeUnitsCall.js"); + +// This package does not export anything as it is +// simply defining "seconds" on Range.prototype. + +/***/ }), + +/***/ "./node_modules/sugar-date/range/span.js": +/*!***********************************************!*\ + !*** ./node_modules/sugar-date/range/span.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Range = __webpack_require__(/*! ./internal/Range */ "./node_modules/sugar-date/range/internal/Range.js"), + mathAliases = __webpack_require__(/*! ../common/var/mathAliases */ "./node_modules/sugar-date/common/var/mathAliases.js"), + rangeIsValid = __webpack_require__(/*! ./internal/rangeIsValid */ "./node_modules/sugar-date/range/internal/rangeIsValid.js"), + defineOnPrototype = __webpack_require__(/*! ../common/internal/defineOnPrototype */ "./node_modules/sugar-date/common/internal/defineOnPrototype.js"), + getRangeMemberNumericValue = __webpack_require__(/*! ./internal/getRangeMemberNumericValue */ "./node_modules/sugar-date/range/internal/getRangeMemberNumericValue.js"); + +var abs = mathAliases.abs; + +defineOnPrototype(Range, { + + 'span': function() { + var n = getRangeMemberNumericValue(this.end) - getRangeMemberNumericValue(this.start); + return rangeIsValid(this) ? abs(n) + 1 : NaN; + } + +}); + +// This package does not export anything as it is +// simply defining "span" on Range.prototype. + +/***/ }), + +/***/ "./node_modules/sugar-date/range/toArray.js": +/*!**************************************************!*\ + !*** ./node_modules/sugar-date/range/toArray.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Range = __webpack_require__(/*! ./internal/Range */ "./node_modules/sugar-date/range/internal/Range.js"), + rangeEvery = __webpack_require__(/*! ./internal/rangeEvery */ "./node_modules/sugar-date/range/internal/rangeEvery.js"), + defineOnPrototype = __webpack_require__(/*! ../common/internal/defineOnPrototype */ "./node_modules/sugar-date/common/internal/defineOnPrototype.js"); + +defineOnPrototype(Range, { + + 'toArray': function() { + return rangeEvery(this); + } + +}); + +// This package does not export anything as it is +// simply defining "toArray" on Range.prototype. + +/***/ }), + +/***/ "./node_modules/sugar-date/range/toString.js": +/*!***************************************************!*\ + !*** ./node_modules/sugar-date/range/toString.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Range = __webpack_require__(/*! ./internal/Range */ "./node_modules/sugar-date/range/internal/Range.js"), + rangeIsValid = __webpack_require__(/*! ./internal/rangeIsValid */ "./node_modules/sugar-date/range/internal/rangeIsValid.js"), + defineOnPrototype = __webpack_require__(/*! ../common/internal/defineOnPrototype */ "./node_modules/sugar-date/common/internal/defineOnPrototype.js"); + +defineOnPrototype(Range, { + + 'toString': function() { + return rangeIsValid(this) ? this.start + '..' + this.end : 'Invalid Range'; + } + +}); + +// This package does not export anything as it is +// simply defining "toString" on Range.prototype. + +/***/ }), + +/***/ "./node_modules/sugar-date/range/union.js": +/*!************************************************!*\ + !*** ./node_modules/sugar-date/range/union.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Range = __webpack_require__(/*! ./internal/Range */ "./node_modules/sugar-date/range/internal/Range.js"), + defineOnPrototype = __webpack_require__(/*! ../common/internal/defineOnPrototype */ "./node_modules/sugar-date/common/internal/defineOnPrototype.js"); + +defineOnPrototype(Range, { + + 'union': function(range) { + return new Range( + this.start < range.start ? this.start : range.start, + this.end > range.end ? this.end : range.end + ); + } + +}); + +// This package does not export anything as it is +// simply defining "union" on Range.prototype. + +/***/ }), + +/***/ "./node_modules/sugar-date/range/var/DURATION_REG.js": +/*!***********************************************************!*\ + !*** ./node_modules/sugar-date/range/var/DURATION_REG.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var DURATION_UNITS = __webpack_require__(/*! ./DURATION_UNITS */ "./node_modules/sugar-date/range/var/DURATION_UNITS.js"); + +module.exports = RegExp('(\\d+)?\\s*('+ DURATION_UNITS +')s?', 'i'); + +/***/ }), + +/***/ "./node_modules/sugar-date/range/var/DURATION_UNITS.js": +/*!*************************************************************!*\ + !*** ./node_modules/sugar-date/range/var/DURATION_UNITS.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = 'year|month|week|day|hour|minute|second|millisecond'; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/var/DateRangeConstructor.js": +/*!*******************************************************************!*\ + !*** ./node_modules/sugar-date/range/var/DateRangeConstructor.js ***! + \*******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Range = __webpack_require__(/*! ../internal/Range */ "./node_modules/sugar-date/range/internal/Range.js"), + classChecks = __webpack_require__(/*! ../../common/var/classChecks */ "./node_modules/sugar-date/common/var/classChecks.js"), + getDateForRange = __webpack_require__(/*! ../internal/getDateForRange */ "./node_modules/sugar-date/range/internal/getDateForRange.js"), + createDateRangeFromString = __webpack_require__(/*! ../internal/createDateRangeFromString */ "./node_modules/sugar-date/range/internal/createDateRangeFromString.js"); + +var isString = classChecks.isString; + +var DateRangeConstructor = function(start, end) { + if (arguments.length === 1 && isString(start)) { + return createDateRangeFromString(start); + } + return new Range(getDateForRange(start), getDateForRange(end)); +}; + +module.exports = DateRangeConstructor; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/var/DurationTextFormats.js": +/*!******************************************************************!*\ + !*** ./node_modules/sugar-date/range/var/DurationTextFormats.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var FULL_CAPTURED_DURATION = __webpack_require__(/*! ./FULL_CAPTURED_DURATION */ "./node_modules/sugar-date/range/var/FULL_CAPTURED_DURATION.js"); + +module.exports = { + RANGE_REG_FROM_TO: /(?:from)?\s*(.+)\s+(?:to|until)\s+(.+)$/i, + RANGE_REG_REAR_DURATION: RegExp('(.+)\\s*for\\s*' + FULL_CAPTURED_DURATION, 'i'), + RANGE_REG_FRONT_DURATION: RegExp('(?:for)?\\s*'+ FULL_CAPTURED_DURATION +'\\s*(?:starting)?\\s(?:at\\s)?(.+)', 'i') +}; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/var/FULL_CAPTURED_DURATION.js": +/*!*********************************************************************!*\ + !*** ./node_modules/sugar-date/range/var/FULL_CAPTURED_DURATION.js ***! + \*********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var DURATION_UNITS = __webpack_require__(/*! ./DURATION_UNITS */ "./node_modules/sugar-date/range/var/DURATION_UNITS.js"); + +module.exports = '((?:\\d+)?\\s*(?:' + DURATION_UNITS + '))s?'; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/var/MULTIPLIERS.js": +/*!**********************************************************!*\ + !*** ./node_modules/sugar-date/range/var/MULTIPLIERS.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var MULTIPLIERS = { + 'Hours': 60 * 60 * 1000, + 'Minutes': 60 * 1000, + 'Seconds': 1000, + 'Milliseconds': 1 +}; + +module.exports = MULTIPLIERS; + +/***/ }), + +/***/ "./node_modules/sugar-date/range/weeks.js": +/*!************************************************!*\ + !*** ./node_modules/sugar-date/range/weeks.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +__webpack_require__(/*! ./build/buildDateRangeUnitsCall */ "./node_modules/sugar-date/range/build/buildDateRangeUnitsCall.js"); + +// This package does not export anything as it is +// simply defining "weeks" on Range.prototype. + +/***/ }), + +/***/ "./node_modules/sugar-date/range/years.js": +/*!************************************************!*\ + !*** ./node_modules/sugar-date/range/years.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +__webpack_require__(/*! ./build/buildDateRangeUnitsCall */ "./node_modules/sugar-date/range/build/buildDateRangeUnitsCall.js"); + +// This package does not export anything as it is +// simply defining "years" on Range.prototype. + +/***/ }), + +/***/ "./node_modules/webpack/buildin/global.js": +/*!***********************************!*\ + !*** (webpack)/buildin/global.js ***! + \***********************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || Function("return this")() || (1, eval)("this"); +} catch (e) { + // This works if the window reference is available + if (typeof window === "object") g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + + +/***/ }), + +/***/ "./src/array.js": +/*!**********************!*\ + !*** ./src/array.js ***! + \**********************/ +/*! exports provided: has */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "has", function() { return has; }); +/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./string */ "./src/string.js"); +/** + * Array utilities + */ + +/** + * Checks if given item can be found in the passed collection + * @param {Array} arr collection + * @param {Any} val item to search + * @param {Boolean} caseSensitive respects case if true + * @return {Boolean} + */ + +var has = function has(arr, val, caseSensitive) { + var sCase = Boolean(caseSensitive); + + for (var i = 0, l = arr.length; i < l; i++) { + if (Object(_string__WEBPACK_IMPORTED_MODULE_0__["matchCase"])(arr[i].toString(), sCase) === val) { + return true; + } + } + + return false; +}; + +/***/ }), + +/***/ "./src/const.js": +/*!**********************!*\ + !*** ./src/const.js ***! + \**********************/ +/*! exports provided: INPUT, SELECT, MULTIPLE, CHECKLIST, NONE, ENTER_KEY, TAB_KEY, ESC_KEY, UP_ARROW_KEY, DOWN_ARROW_KEY, HEADER_TAG, CELL_TAG, STRING, NUMBER, FORMATTED_NUMBER, DATE, IP_ADDRESS, AUTO_FILTER_DELAY, FEATURES */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "INPUT", function() { return INPUT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SELECT", function() { return SELECT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MULTIPLE", function() { return MULTIPLE; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CHECKLIST", function() { return CHECKLIST; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NONE", function() { return NONE; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ENTER_KEY", function() { return ENTER_KEY; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TAB_KEY", function() { return TAB_KEY; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ESC_KEY", function() { return ESC_KEY; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UP_ARROW_KEY", function() { return UP_ARROW_KEY; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DOWN_ARROW_KEY", function() { return DOWN_ARROW_KEY; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HEADER_TAG", function() { return HEADER_TAG; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CELL_TAG", function() { return CELL_TAG; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STRING", function() { return STRING; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NUMBER", function() { return NUMBER; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FORMATTED_NUMBER", function() { return FORMATTED_NUMBER; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DATE", function() { return DATE; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IP_ADDRESS", function() { return IP_ADDRESS; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AUTO_FILTER_DELAY", function() { return AUTO_FILTER_DELAY; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FEATURES", function() { return FEATURES; }); +/* harmony import */ var _modules_dateType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modules/dateType */ "./src/modules/dateType.js"); +/* harmony import */ var _modules_help__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/help */ "./src/modules/help.js"); +/* harmony import */ var _modules_state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/state */ "./src/modules/state.js"); +/* harmony import */ var _modules_gridLayout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/gridLayout */ "./src/modules/gridLayout.js"); +/* harmony import */ var _modules_loader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modules/loader */ "./src/modules/loader.js"); +/* harmony import */ var _modules_highlightKeywords__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modules/highlightKeywords */ "./src/modules/highlightKeywords.js"); +/* harmony import */ var _modules_popupFilter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modules/popupFilter */ "./src/modules/popupFilter.js"); +/* harmony import */ var _modules_markActiveColumns__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modules/markActiveColumns */ "./src/modules/markActiveColumns.js"); +/* harmony import */ var _modules_rowsCounter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modules/rowsCounter */ "./src/modules/rowsCounter.js"); +/* harmony import */ var _modules_statusBar__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./modules/statusBar */ "./src/modules/statusBar.js"); +/* harmony import */ var _modules_clearButton__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./modules/clearButton */ "./src/modules/clearButton.js"); +/* harmony import */ var _modules_alternateRows__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./modules/alternateRows */ "./src/modules/alternateRows.js"); +/* harmony import */ var _modules_noResults__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modules/noResults */ "./src/modules/noResults.js"); +/* harmony import */ var _modules_paging__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./modules/paging */ "./src/modules/paging.js"); +/* harmony import */ var _modules_toolbar__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./modules/toolbar */ "./src/modules/toolbar.js"); + + + + + + + + + + + + + + + +/** + * Filter types + */ + +/** + * Input filter type + * @type {String} + */ + +var INPUT = 'input'; +/** + * Select filter type + * @type {String} + */ + +var SELECT = 'select'; +/** + * Multiple select filter type + * @type {String} + */ + +var MULTIPLE = 'multiple'; +/** + * Checklist filter type + * @type {String} + */ + +var CHECKLIST = 'checklist'; +/** + * None filter type + * @type {String} + */ + +var NONE = 'none'; +/** + * Key codes + */ + +/** + * Enter key code + * @type {Number} + */ + +var ENTER_KEY = 13; +/** + * Tab key code + * @type {Number} + */ + +var TAB_KEY = 9; +/** + * Escape key code + * @type {Number} + */ + +var ESC_KEY = 27; +/** + * Up arrow key code + * @type {Number} + */ + +var UP_ARROW_KEY = 38; +/** + * Down arrow key code + * @type {Number} + */ + +var DOWN_ARROW_KEY = 40; +/** + * HTML tags + */ + +/** + * Header cell tag + * @type {String} + */ + +var HEADER_TAG = 'TH'; +/** + * Cell tag + * @type {String} + */ + +var CELL_TAG = 'TD'; +/** + * Data types + */ + +/** + * String + * @type {String} + */ + +var STRING = 'string'; +/** + * Number + * @type {String} + */ + +var NUMBER = 'number'; +/** + * Formatted number + * @type {String} + */ + +var FORMATTED_NUMBER = 'formatted-number'; +/** + * Date + * @type {String} + */ + +var DATE = 'date'; +/** + * IP address + * @type {String} + */ + +var IP_ADDRESS = 'ipaddress'; +/** + * Default values + */ + +/** + * Auto filter delay in milliseconds + * @type {Number} + */ + +var AUTO_FILTER_DELAY = 750; +/** + * TableFilter features definitions + * @type {Object} + */ + +var FEATURES = { + dateType: { + class: _modules_dateType__WEBPACK_IMPORTED_MODULE_0__["DateType"], + name: 'dateType' + }, + help: { + class: _modules_help__WEBPACK_IMPORTED_MODULE_1__["Help"], + name: 'help', + enforce: true + }, + state: { + class: _modules_state__WEBPACK_IMPORTED_MODULE_2__["State"], + name: 'state' + }, + markActiveColumns: { + class: _modules_markActiveColumns__WEBPACK_IMPORTED_MODULE_7__["MarkActiveColumns"], + name: 'markActiveColumns' + }, + gridLayout: { + class: _modules_gridLayout__WEBPACK_IMPORTED_MODULE_3__["GridLayout"], + name: 'gridLayout' + }, + loader: { + class: _modules_loader__WEBPACK_IMPORTED_MODULE_4__["Loader"], + name: 'loader' + }, + highlightKeyword: { + class: _modules_highlightKeywords__WEBPACK_IMPORTED_MODULE_5__["HighlightKeyword"], + name: 'highlightKeyword', + property: 'highlightKeywords' + }, + popupFilter: { + class: _modules_popupFilter__WEBPACK_IMPORTED_MODULE_6__["PopupFilter"], + name: 'popupFilter', + property: 'popupFilters' + }, + rowsCounter: { + class: _modules_rowsCounter__WEBPACK_IMPORTED_MODULE_8__["RowsCounter"], + name: 'rowsCounter' + }, + statusBar: { + class: _modules_statusBar__WEBPACK_IMPORTED_MODULE_9__["StatusBar"], + name: 'statusBar' + }, + clearButton: { + class: _modules_clearButton__WEBPACK_IMPORTED_MODULE_10__["ClearButton"], + name: 'clearButton', + property: 'btnReset' + }, + alternateRows: { + class: _modules_alternateRows__WEBPACK_IMPORTED_MODULE_11__["AlternateRows"], + name: 'alternateRows' + }, + noResults: { + class: _modules_noResults__WEBPACK_IMPORTED_MODULE_12__["NoResults"], + name: 'noResults' + }, + paging: { + class: _modules_paging__WEBPACK_IMPORTED_MODULE_13__["Paging"], + name: 'paging' + }, + toolbar: { + class: _modules_toolbar__WEBPACK_IMPORTED_MODULE_14__["Toolbar"], + name: 'toolbar', + enforce: true + } +}; + +/***/ }), + +/***/ "./src/cookie.js": +/*!***********************!*\ + !*** ./src/cookie.js ***! + \***********************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./root */ "./src/root.js"); + +/** + * Cookie utilities + */ + +var doc = _root__WEBPACK_IMPORTED_MODULE_0__["root"].document; +/* harmony default export */ __webpack_exports__["default"] = ({ + /** + * Write a cookie + * @param {String} name Name of the cookie + * @param {String} value Value of the cookie + * @param {Number} hours Cookie duration in hours + */ + write: function write(name, value, hours) { + var expire = ''; + + if (hours) { + expire = new Date(new Date().getTime() + hours * 3600000); + expire = '; expires=' + expire.toGMTString(); + } + + doc.cookie = name + '=' + escape(value) + expire; + }, + + /** + * Read a cookie + * @param {String} name Name of the cookie + * @returns {String} Value of the cookie + */ + read: function read(name) { + var cookieValue = '', + search = name + '='; + + if (doc.cookie.length > 0) { + var cookie = doc.cookie, + offset = cookie.indexOf(search); + + if (offset !== -1) { + offset += search.length; + var end = cookie.indexOf(';', offset); + + if (end === -1) { + end = cookie.length; + } + + cookieValue = unescape(cookie.substring(offset, end)); + } + } + + return cookieValue; + }, + + /** + * Remove a cookie + * @param {String} name Name of the cookie + */ + remove: function remove(name) { + this.write(name, '', -1); + } +}); + +/***/ }), + +/***/ "./src/dom.js": +/*!********************!*\ + !*** ./src/dom.js ***! + \********************/ +/*! exports provided: getText, getFirstTextNode, createElm, removeElm, createText, hasClass, addClass, removeClass, createOpt, createCheckItem, elm, tag */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getText", function() { return getText; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getFirstTextNode", function() { return getFirstTextNode; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createElm", function() { return createElm; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeElm", function() { return removeElm; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createText", function() { return createText; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasClass", function() { return hasClass; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addClass", function() { return addClass; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeClass", function() { return removeClass; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createOpt", function() { return createOpt; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createCheckItem", function() { return createCheckItem; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "elm", function() { return elm; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tag", function() { return tag; }); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./root */ "./src/root.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./types */ "./src/types.js"); +/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./string */ "./src/string.js"); + + + +/** + * DOM utilities + */ + +var doc = _root__WEBPACK_IMPORTED_MODULE_0__["root"].document; +/** + * Returns text + text of children of given node + * @param {NodeElement} node + * @return {String} + */ + +var getText = function getText(node) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isUndef"])(node.textContent)) { + return Object(_string__WEBPACK_IMPORTED_MODULE_2__["trim"])(node.innerText); + } + + return Object(_string__WEBPACK_IMPORTED_MODULE_2__["trim"])(node.textContent); +}; +/** + * Returns the first text node contained in the supplied node + * @param {NodeElement} node node + * @return {String} + */ + +var getFirstTextNode = function getFirstTextNode(node) { + for (var i = 0; i < node.childNodes.length; i++) { + var n = node.childNodes[i]; + + if (n.nodeType === 3) { + return n.data; + } + } +}; +/** + * Creates an html element with given collection of attributes + * @param {String} tag a string of the html tag to create + * @param {Array} an undetermined number of arrays containing the with 2 + * items, the attribute name and its value ['id','myId'] + * @return {Object} created element + */ + +var createElm = function createElm() { + var tag = arguments.length <= 0 ? undefined : arguments[0]; + + if (!Object(_types__WEBPACK_IMPORTED_MODULE_1__["isString"])(tag)) { + return null; + } + + var el = doc.createElement(tag); + + for (var i = 0; i < arguments.length; i++) { + var arg = i < 0 || arguments.length <= i ? undefined : arguments[i]; + + if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isArray"])(arg) && arg.length === 2) { + el.setAttribute(arg[0], arg[1]); + } + } + + return el; +}; +/** + * Removes passed node from DOM + * @param {DOMElement} node + * @return {DOMElement} old node reference + */ + +var removeElm = function removeElm(node) { + return node.parentNode.removeChild(node); +}; +/** + * Returns a text node with given text + * @param {String} txt + * @return {Object} + */ + +var createText = function createText(txt) { + return doc.createTextNode(txt); +}; +/** + * Determine whether the passed elements is assigned the given class + * @param {DOMElement} ele DOM element + * @param {String} cls CSS class name + * @returns {Boolean} + */ + +var hasClass = function hasClass(ele, cls) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isUndef"])(ele)) { + return false; + } + + if (supportsClassList()) { + return ele.classList.contains(cls); + } + + return ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')); +}; +/** + * Adds the specified class to the passed element + * @param {DOMElement} ele DOM element + * @param {String} cls CSS class name + */ + +var addClass = function addClass(ele, cls) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isUndef"])(ele)) { + return; + } + + if (supportsClassList()) { + ele.classList.add(cls); + return; + } + + if (ele.className === '') { + ele.className = cls; + } else if (!hasClass(ele, cls)) { + ele.className += ' ' + cls; + } +}; +/** + * Removes the specified class to the passed element + * @param {DOMElement} ele DOM element + * @param {String} cls CSS class name + */ + +var removeClass = function removeClass(ele, cls) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isUndef"])(ele)) { + return; + } + + if (supportsClassList()) { + ele.classList.remove(cls); + return; + } + + var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)', 'g'); + ele.className = ele.className.replace(reg, ''); +}; +/** + * Creates and returns an option element + * @param {String} text option text + * @param {String} value option value + * @param {Boolean} isSel whether option is selected + * @return {Object} option element + */ + +var createOpt = function createOpt(text, value, isSel) { + var isSelected = isSel ? true : false; + var opt = isSelected ? createElm('option', ['value', value], ['selected', 'true']) : createElm('option', ['value', value]); + opt.appendChild(createText(text)); + return opt; +}; +/** + * Creates and returns a checklist item + * @param {String} id index of check item + * @param {String} chkValue check item value + * @param {String} labelText check item label text + * @param {Array} extraAttr array containing attribute name and its value + * @return {Object} li DOM element + */ + +var createCheckItem = function createCheckItem(id, chkValue, labelText) { + var extraAttr = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; + var li = createElm('li'); + var label = createElm('label', ['for', id]); + var check = createElm('input', ['id', id], ['name', id], ['type', 'checkbox'], ['value', chkValue], extraAttr); + label.appendChild(check); + label.appendChild(createText(labelText)); + li.appendChild(label); + li.label = label; + li.check = check; + return li; +}; +/** + * Returns the element matching the supplied Id + * @param {String} id Element identifier + * @return {DOMElement} + */ + +var elm = function elm(id) { + return doc.getElementById(id); +}; +/** + * Returns list of element matching the supplied tag name + * @param {String} tagname Tag name + * @return {NodeList} + */ + +var tag = function tag(o, tagname) { + return o.getElementsByTagName(tagname); +}; // HTML5 classList API + +function supportsClassList() { + return doc.documentElement.classList; +} + +/***/ }), + +/***/ "./src/emitter.js": +/*!************************!*\ + !*** ./src/emitter.js ***! + \************************/ +/*! exports provided: Emitter */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Emitter", function() { return Emitter; }); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +/** + * Event emitter class + */ +var Emitter = +/*#__PURE__*/ +function () { + /** + * Creates an instance of Emitter. + */ + function Emitter() { + _classCallCheck(this, Emitter); + + /** + * Events object + * @type {Object} + */ + this.events = {}; + } + /** + * Subscribe to an event + * @param {Array} evts Collection of event names + * @param {Function} fn Function invoked when event is emitted + */ + + + _createClass(Emitter, [{ + key: "on", + value: function on(evts, fn) { + var _this = this; + + evts.forEach(function (evt) { + _this.events[evt] = _this.events[evt] || []; + + _this.events[evt].push(fn); + }); + } + /** + * Unsubscribe to an event + * @param {Array} evts Collection of event names + * @param {Function} fn Function invoked when event is emitted + */ + + }, { + key: "off", + value: function off(evts, fn) { + var _this2 = this; + + evts.forEach(function (evt) { + if (evt in _this2.events) { + _this2.events[evt].splice(_this2.events[evt].indexOf(fn), 1); + } + }); + } + /** + * Emit an event + * @param {String} evt Event name followed by any other argument passed to + * the invoked function + */ + + }, { + key: "emit", + value: function emit(evt + /*, args...*/ + ) { + if (evt in this.events) { + for (var i = 0; i < this.events[evt].length; i++) { + this.events[evt][i].apply(this, [].slice.call(arguments, 1)); + } + } + } + }]); + + return Emitter; +}(); + +/***/ }), + +/***/ "./src/event.js": +/*!**********************!*\ + !*** ./src/event.js ***! + \**********************/ +/*! exports provided: addEvt, removeEvt, stopEvt, cancelEvt, targetEvt, keyCode, isKeyPressed, bound */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addEvt", function() { return addEvt; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeEvt", function() { return removeEvt; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stopEvt", function() { return stopEvt; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cancelEvt", function() { return cancelEvt; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "targetEvt", function() { return targetEvt; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keyCode", function() { return keyCode; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isKeyPressed", function() { return isKeyPressed; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bound", function() { return bound; }); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./root */ "./src/root.js"); + +/** + * DOM event utilities + */ + +/** + * Add event handler for specified event on passed element + * + * @param {DOMElement} obj Element + * @param {String} type Event type + * @param {Function} Handler + * @param {Boolean} capture Specifiy whether the event should be executed in + * the capturing or in the bubbling phase + */ + +var addEvt = function addEvt(obj, type, func, capture) { + if (obj.addEventListener) { + obj.addEventListener(type, func, capture); + } else if (obj.attachEvent) { + obj.attachEvent('on' + type, func); + } else { + obj['on' + type] = func; + } +}; +/** + * Remove event handler for specified event on passed element + * + * @param {DOMElement} obj Element + * @param {String} type Event type + * @param {Function} Handler + * @param {Boolean} capture Specifiy whether the event should be executed in + * the capturing or in the bubbling phase + */ + +var removeEvt = function removeEvt(obj, type, func, capture) { + if (obj.removeEventListener) { + obj.removeEventListener(type, func, capture); + } else if (obj.detachEvent) { + obj.detachEvent('on' + type, func); + } else { + obj['on' + type] = null; + } +}; +/** + * Prevents further propagation of the current event in the bubbling phase + * + * @param {Event} evt Event on the DOM + */ + +var stopEvt = function stopEvt(evt) { + if (!evt) { + evt = _root__WEBPACK_IMPORTED_MODULE_0__["root"].event; + } + + if (evt.stopPropagation) { + evt.stopPropagation(); + } else { + evt.cancelBubble = true; + } +}; +/** + * Cancels the event if it is cancelable, without stopping further + * propagation of the event. + * + * @param {Event} evt Event on the DOM + */ + +var cancelEvt = function cancelEvt(evt) { + if (!evt) { + evt = _root__WEBPACK_IMPORTED_MODULE_0__["root"].event; + } + + if (evt.preventDefault) { + evt.preventDefault(); + } else { + evt.returnValue = false; + } +}; +/** + * Reference to the object that dispatched the event + * + * @param {Event} evt Event on the DOM + * @returns {DOMElement} + */ + +var targetEvt = function targetEvt(evt) { + if (!evt) { + evt = _root__WEBPACK_IMPORTED_MODULE_0__["root"].event; + } + + return evt.target || evt.srcElement; +}; +/** + * Returns the Unicode value of pressed key + * + * @param {Event} evt Event on the DOM + * @returns {Number} + */ + +var keyCode = function keyCode(evt) { + return evt.charCode ? evt.charCode : evt.keyCode ? evt.keyCode : evt.which ? evt.which : 0; +}; +/** + * Check code of pressed key is one of the expected key codes + * + * @param {Event} evt key event + * @param {Array} keyCodes list of keycodes to check + */ + +var isKeyPressed = function isKeyPressed(evt) { + var keyCodes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + return keyCodes.indexOf(keyCode(evt)) !== -1; +}; +/** + * Bind passed function to passed scope + * @param {Function} fn function + * @param {Object} scope object instance + */ + +function bound(fn, scope) { + var boundFnName = "".concat(fn.name, "_bound"); + + if (!scope[boundFnName]) { + scope[boundFnName] = fn.bind(scope); + } + + return scope[boundFnName]; +} + +/***/ }), + +/***/ "./src/feature.js": +/*!************************!*\ + !*** ./src/feature.js ***! + \************************/ +/*! exports provided: Feature */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Feature", function() { return Feature; }); +/* harmony import */ var _tfBase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tfBase */ "./src/tfBase.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + +var NOT_IMPLEMENTED = 'Not implemented.'; +/** + * Base class defining the interface of a TableFilter feature + */ + +var Feature = +/*#__PURE__*/ +function (_TfBase) { + _inherits(Feature, _TfBase); + + /** + * Creates an instance of Feature + * @param {Object} tf TableFilter instance + * @param {String} feature Feature name known by TableFilter + */ + function Feature(tf, feature, cls) { + var _this; + + _classCallCheck(this, Feature); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(Feature).call(this, tf, cls)); + /** + * TableFilter instance + * @type {TableFilter} + */ + + _this.tf = tf; + /** + * Feature name + * @type {String} + */ + + _this.feature = feature; + /** + * TableFilter feature setting + * @type {Boolean} + */ + + _this.enabled = tf[feature]; + /** + * TableFilter configuration + * @type {Object} + */ + + _this.config = tf.config(); + /** + * TableFilter emitter instance + * @type {Emitter} + */ + + _this.emitter = tf.emitter; + /** + * Field indicating whether Feature is initialized + * @type {Boolean} + */ + + _this.initialized = false; + /** Subscribe to destroy event */ + + _this.emitter.on(['destroy'], function () { + return _this.destroy(); + }); + + return _this; + } + /** + * Initialize the feature + */ + + + _createClass(Feature, [{ + key: "init", + value: function init() { + throw new Error(NOT_IMPLEMENTED); + } + /** + * Reset the feature after being disabled + */ + + }, { + key: "reset", + value: function reset() { + this.enable(); + this.init(); + } + /** + * Destroy the feature + */ + + }, { + key: "destroy", + value: function destroy() { + throw new Error(NOT_IMPLEMENTED); + } + /** + * Enable the feature + */ + + }, { + key: "enable", + value: function enable() { + this.enabled = true; + } + /** + * Disable the feature + */ + + }, { + key: "disable", + value: function disable() { + this.enabled = false; + } + /** + * Indicate whether the feature is enabled or not + * @returns {Boolean} + */ + + }, { + key: "isEnabled", + value: function isEnabled() { + return this.enabled === true; + } + }]); + + return Feature; +}(_tfBase__WEBPACK_IMPORTED_MODULE_0__["TfBase"]); + +/***/ }), + +/***/ "./src/modules/alternateRows.js": +/*!**************************************!*\ + !*** ./src/modules/alternateRows.js ***! + \**************************************/ +/*! exports provided: AlternateRows */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AlternateRows", function() { return AlternateRows; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom */ "./src/dom.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../settings */ "./src/settings.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../event */ "./src/event.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + +/** + * Rows with alternating background color for improved readability + */ + +var AlternateRows = +/*#__PURE__*/ +function (_Feature) { + _inherits(AlternateRows, _Feature); + + /** + * Creates an instance of AlternateRows. + * + * @param {Object} tf TableFilter instance + */ + function AlternateRows(tf) { + var _this; + + _classCallCheck(this, AlternateRows); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(AlternateRows).call(this, tf, 'alternateRows')); + var config = _this.config; + /** + * Css class for even rows (default: 'even') + * @type {String} + */ + + _this.evenCss = Object(_settings__WEBPACK_IMPORTED_MODULE_2__["defaultsStr"])(config.even_row_css_class, 'even'); + /** + * Css class for odd rows (default: 'odd') + * @type {String} + */ + + _this.oddCss = Object(_settings__WEBPACK_IMPORTED_MODULE_2__["defaultsStr"])(config.odd_row_css_class, 'odd'); + return _this; + } + /** + * Sets alternating rows color + */ + + + _createClass(AlternateRows, [{ + key: "init", + value: function init() { + if (this.initialized) { + return; + } + + this.processAll(); // Subscribe to events + + this.emitter.on(['row-processed', 'row-paged'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.processRowHandler, this)); + this.emitter.on(['column-sorted', 'rows-changed'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.processAll, this)); + /** @inherited */ + + this.initialized = true; + } + /** + * Apply background to all valid rows + */ + + }, { + key: "processAll", + value: function processAll() { + if (!this.isEnabled()) { + return; + } + + var tf = this.tf; + var validRowsIndex = tf.getValidRows(true); + var indexLen = validRowsIndex.length; + var idx = 0; //alternates bg color + + for (var j = 0; j < indexLen; j++) { + var rowIdx = validRowsIndex[j]; + this.setRowBg(rowIdx, idx); + idx++; + } + } + /** + * Set/remove row background based on row validation + * @param {Number} rowIdx Row index + * @param {Number} arrIdx Array index + * @param {Boolean} isValid Valid row flag + */ + + }, { + key: "processRow", + value: function processRow(rowIdx, arrIdx, isValid) { + if (isValid) { + this.setRowBg(rowIdx, arrIdx); + } else { + this.removeRowBg(rowIdx); + } + } + /** + * Sets row background color + * @param {Number} rowIdx Row index + * @param {Number} idx Valid rows collection index needed to calculate bg + * color + * @private + */ + + }, { + key: "setRowBg", + value: function setRowBg(rowIdx, idx) { + if (!this.isEnabled() || isNaN(rowIdx)) { + return; + } + + var rows = this.tf.dom().rows; + var i = isNaN(idx) ? rowIdx : idx; + this.removeRowBg(rowIdx); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(rows[rowIdx], i % 2 ? this.evenCss : this.oddCss); + } + /** + * Removes row background color + * @param {Number} idx Row index + * @private + */ + + }, { + key: "removeRowBg", + value: function removeRowBg(idx) { + if (isNaN(idx)) { + return; + } + + var rows = this.tf.dom().rows; + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeClass"])(rows[idx], this.oddCss); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeClass"])(rows[idx], this.evenCss); + } + /** @private */ + + }, { + key: "processRowHandler", + value: function processRowHandler(tf, rowIndex, arrIndex, isValid) { + this.processRow(rowIndex, arrIndex, isValid); + } + /** + * Removes all alternating backgrounds + */ + + }, { + key: "destroy", + value: function destroy() { + var _this2 = this; + + if (!this.initialized) { + return; + } + + var eachRow = this.tf.eachRow(0); + eachRow(function (row, i) { + return _this2.removeRowBg(i); + }); // Unsubscribe to events + + this.emitter.off(['row-processed', 'row-paged'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.processRowHandler, this)); + this.emitter.off(['column-sorted', 'rows-changed'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.processAll, this)); + this.initialized = false; + } + }]); + + return AlternateRows; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + +/***/ }), + +/***/ "./src/modules/baseDropdown.js": +/*!*************************************!*\ + !*** ./src/modules/baseDropdown.js ***! + \*************************************/ +/*! exports provided: BaseDropdown */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BaseDropdown", function() { return BaseDropdown; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../feature */ "./src/feature.js"); +/* harmony import */ var _sort__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../sort */ "./src/sort.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../types */ "./src/types.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../const */ "./src/const.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + +/** + * Base class for Dropdown and CheckList UI components + * @export + * @class BaseDropdown + * @extends {Feature} + */ + +var BaseDropdown = +/*#__PURE__*/ +function (_Feature) { + _inherits(BaseDropdown, _Feature); + + /** + * Creates an instance of BaseDropdown + * @param {TableFilter} tf + */ + function BaseDropdown(tf) { + var _this; + + _classCallCheck(this, BaseDropdown); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(BaseDropdown).call(this, tf, 'baseDropdown')); + var f = _this.config; + /** + * Filter options custom sorter on a column basis + * @type {Object} + */ + + _this.customSorter = Object(_types__WEBPACK_IMPORTED_MODULE_2__["isObj"])(f.filter_options_sorter) && Object(_types__WEBPACK_IMPORTED_MODULE_2__["isArray"])(f.filter_options_sorter.col) && Object(_types__WEBPACK_IMPORTED_MODULE_2__["isArray"])(f.filter_options_sorter.comparer) ? f.filter_options_sorter : null; // TODO: move here all properties shared by Dropdown CheckList + + /** + * Has custom options + * @type {Boolean} + * @private + */ + + _this.isCustom = false; + /** + * List of options values + * @type {Array} + * @private + */ + + _this.opts = []; + /** + * List of options texts for custom values + * @type {Array} + * @private + */ + + _this.optsTxt = []; + /** + * List of options to be excluded from the checklist filter + * @type {Array} + * @private + */ + + _this.excludedOpts = []; + return _this; + } + /** + * Sort passed options based on the type of the specified column + * @param {Number} colIndex Column index + * @param {Array} [options=[]] Collection of values + * @return {Array} Sorted values + * @private + */ + + + _createClass(BaseDropdown, [{ + key: "sortOptions", + value: function sortOptions(colIndex) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + var tf = this.tf; + + if (tf.isCustomOptions(colIndex) || !tf.sortSlc || Object(_types__WEBPACK_IMPORTED_MODULE_2__["isArray"])(tf.sortSlc) && tf.sortSlc.indexOf(colIndex) === -1) { + return options; + } + + var caseSensitive = tf.caseSensitive, + sortNumDesc = tf.sortNumDesc; + var compareFn; + + if (this.customSorter && this.customSorter.col.indexOf(colIndex) !== -1) { + var idx = this.customSorter.col.indexOf(colIndex); + compareFn = this.customSorter.comparer[idx]; + } else if (tf.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_3__["NUMBER"], _const__WEBPACK_IMPORTED_MODULE_3__["FORMATTED_NUMBER"]])) { + var decimal = tf.getDecimal(colIndex); + var comparer = _sort__WEBPACK_IMPORTED_MODULE_1__["numSortAsc"]; + + if (sortNumDesc === true || sortNumDesc.indexOf(colIndex) !== -1) { + comparer = _sort__WEBPACK_IMPORTED_MODULE_1__["numSortDesc"]; + } + + compareFn = Object(_sort__WEBPACK_IMPORTED_MODULE_1__["sortNumberStr"])(comparer, decimal); + } else if (tf.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_3__["DATE"]])) { + var locale = tf.feature('dateType').getLocale(colIndex); + var _comparer = _sort__WEBPACK_IMPORTED_MODULE_1__["dateSortAsc"]; + compareFn = Object(_sort__WEBPACK_IMPORTED_MODULE_1__["sortDateStr"])(_comparer, locale); + } else { + // string + compareFn = caseSensitive ? undefined : _sort__WEBPACK_IMPORTED_MODULE_1__["ignoreCase"]; + } + + return options.sort(compareFn); + } + /** + * Regenerate filters of specified columns and maintain selection if any + * @param {Array} colIndexes Collection of column indexes + * @private + */ + + }, { + key: "refreshFilters", + value: function refreshFilters(colIndexes) { + var _this2 = this; + + colIndexes.forEach(function (colIdx) { + var values = _this2.getValues(colIdx); + + _this2.build(colIdx, _this2.tf.linkedFilters); + + _this2.selectOptions(colIdx, values); + }); + } + /** + * Check passed row contains a valid linked value + * @param {Number} rowIdx Row index + * @param {Number} activeFilterIdx Current active filter index + * @returns {Boolean} + */ + + }, { + key: "isValidLinkedValue", + value: function isValidLinkedValue(rowIdx, activeFilterIdx) { + var tf = this.tf; + + if (tf.disableExcludedOptions) { + return true; + } + + if (tf.paging) { + if (!Object(_types__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(activeFilterIdx) && tf.isRowValid(rowIdx)) { + return true; + } + } else { + if (tf.isRowDisplayed(rowIdx)) { + return true; + } + } + + return false; + } + /** + * Refresh linked filters to offer only selected options + */ + + }, { + key: "linkFilters", + value: function linkFilters() { + var tf = this.tf; + + if (!tf.linkedFilters || !tf.activeFilterId) { + return; + } + + this.refreshAll(); + } + }]); + + return BaseDropdown; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + +/***/ }), + +/***/ "./src/modules/checkList.js": +/*!**********************************!*\ + !*** ./src/modules/checkList.js ***! + \**********************************/ +/*! exports provided: CheckList */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CheckList", function() { return CheckList; }); +/* harmony import */ var _baseDropdown__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./baseDropdown */ "./src/modules/baseDropdown.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom */ "./src/dom.js"); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../array */ "./src/array.js"); +/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../string */ "./src/string.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../event */ "./src/event.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../types */ "./src/types.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../const */ "./src/const.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../settings */ "./src/settings.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + + + +/** + * Checklist filter UI component + * @export + * @class CheckList + * @extends {BaseDropdown} + */ + +var CheckList = +/*#__PURE__*/ +function (_BaseDropdown) { + _inherits(CheckList, _BaseDropdown); + + /** + * Creates an instance of CheckList + * @param {TableFilter} tf TableFilter instance + */ + function CheckList(tf) { + var _this; + + _classCallCheck(this, CheckList); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(CheckList).call(this, tf, 'checkList')); + var f = _this.config; + /** + * List of container DOM elements + * @type {Array} + */ + + _this.containers = []; + /** + * Css class for the container of the checklist filter (div) + * @type {String} + */ + + _this.containerCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_7__["defaultsStr"])(f.div_checklist_css_class, 'div_checklist'); + /** + * Css class for the checklist filter element (ul) + * @type {String} + */ + + _this.filterCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_7__["defaultsStr"])(f.checklist_css_class, 'flt_checklist'); + /** + * Css class for the item of a checklist (li) + * @type {String} + */ + + _this.itemCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_7__["defaultsStr"])(f.checklist_item_css_class, 'flt_checklist_item'); + /** + * Css class for a selected item of a checklist (li) + * @type {String} + */ + + _this.selectedItemCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_7__["defaultsStr"])(f.checklist_selected_item_css_class, 'flt_checklist_slc_item'); + /** + * Text placed in the filter's container when load filter on demand + * feature is enabled + * @type {String} + */ + + _this.activateText = Object(_settings__WEBPACK_IMPORTED_MODULE_7__["defaultsStr"])(f.activate_checklist_text, 'Click to load filter data'); + /** + * Css class for a disabled item of a checklist (li) + * @type {String} + */ + + _this.disabledItemCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_7__["defaultsStr"])(f.checklist_item_disabled_css_class, 'flt_checklist_item_disabled'); + /** + * Enable the reset filter option as first item + * @type {Boolean} + */ + + _this.enableResetOption = Object(_settings__WEBPACK_IMPORTED_MODULE_7__["defaultsBool"])(f.enable_checklist_reset_filter, true); + /** + * Prefix for container element ID + * @type {String} + * @private + */ + + _this.prfx = 'chkdiv_'; + return _this; + } + /** + * Checklist option click event handler + * @param {Event} evt + * @private + */ + + + _createClass(CheckList, [{ + key: "optionClick", + value: function optionClick(evt) { + var elm = Object(_event__WEBPACK_IMPORTED_MODULE_4__["targetEvt"])(evt); + var tf = this.tf; + this.emitter.emit('filter-focus', tf, elm); + this.setItemOption(elm); + tf.filter(); + } + /** + * Checklist container click event handler for load-on-demand feature + * @param {Event} evt + * @private + */ + + }, { + key: "onCheckListClick", + value: function onCheckListClick(evt) { + var _this2 = this; + + var elm = Object(_event__WEBPACK_IMPORTED_MODULE_4__["targetEvt"])(evt); + + if (this.tf.loadFltOnDemand && elm.getAttribute('filled') === '0') { + var ct = elm.getAttribute('ct'); + var div = this.containers[ct]; + this.build(ct); + Object(_event__WEBPACK_IMPORTED_MODULE_4__["removeEvt"])(div, 'click', function (evt) { + return _this2.onCheckListClick(evt); + }); + } + } + /** + * Refresh all checklist filters + */ + + }, { + key: "refreshAll", + value: function refreshAll() { + var colIdxs = this.tf.getFiltersByType(_const__WEBPACK_IMPORTED_MODULE_6__["CHECKLIST"], true); + this.refreshFilters(colIdxs); + } + /** + * Initialize checklist filter + * @param {Number} colIndex Column index + * @param {Boolean} isExternal External filter flag + * @param {DOMElement} container Dom element containing the filter + */ + + }, { + key: "init", + value: function init(colIndex, isExternal, container) { + var _this3 = this; + + var tf = this.tf; + var externalFltTgtId = isExternal ? tf.externalFltIds[colIndex] : null; + var divCont = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('div', ['id', "".concat(this.prfx).concat(colIndex, "_").concat(tf.id)], ['ct', colIndex], ['filled', '0']); + divCont.className = this.containerCssClass; //filter is appended in desired element + + if (externalFltTgtId) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(externalFltTgtId).appendChild(divCont); + } else { + container.appendChild(divCont); + } + + this.containers[colIndex] = divCont; + tf.fltIds.push(tf.buildFilterId(colIndex)); + + if (!tf.loadFltOnDemand) { + this.build(colIndex); + } else { + Object(_event__WEBPACK_IMPORTED_MODULE_4__["addEvt"])(divCont, 'click', function (evt) { + return _this3.onCheckListClick(evt); + }); + divCont.appendChild(Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createText"])(this.activateText)); + } + + this.emitter.on(['build-checklist-filter'], function (tf, colIndex, isLinked) { + return _this3.build(colIndex, isLinked); + }); + this.emitter.on(['select-checklist-options'], function (tf, colIndex, values) { + return _this3.selectOptions(colIndex, values); + }); + this.emitter.on(['rows-changed'], function () { + return _this3.refreshAll(); + }); + this.emitter.on(['after-filtering'], function () { + return _this3.linkFilters(); + }); + /** @inherited */ + + this.initialized = true; + } + /** + * Build checklist UI + * @param {Number} colIndex Column index + * @param {Boolean} isLinked Enable linked filters behaviour + */ + + }, { + key: "build", + value: function build(colIndex) { + var _this4 = this; + + var isLinked = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var tf = this.tf; + colIndex = Number(colIndex); + this.emitter.emit('before-populating-filter', tf, colIndex); + /** @inherited */ + + this.opts = []; + /** @inherited */ + + this.optsTxt = []; + var flt = this.containers[colIndex]; + var ul = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('ul', ['id', tf.fltIds[colIndex]], ['colIndex', colIndex]); + ul.className = this.filterCssClass; + var caseSensitive = tf.caseSensitive; + /** @inherited */ + + this.isCustom = tf.isCustomOptions(colIndex); //Retrieves custom values + + if (this.isCustom) { + var customValues = tf.getCustomOptions(colIndex); + this.opts = customValues[0]; + this.optsTxt = customValues[1]; + } + + var activeIdx; + var activeFilterId = tf.getActiveFilterId(); + + if (isLinked && activeFilterId) { + activeIdx = tf.getColumnIndexFromFilterId(activeFilterId); + } + + var filteredDataCol = []; + + if (isLinked && tf.disableExcludedOptions) { + /** @inherited */ + this.excludedOpts = []; + } + + flt.innerHTML = ''; + var eachRow = tf.eachRow(); + eachRow(function (row) { + var cellValue = tf.getCellValue(row.cells[colIndex]); //Vary Peter's patch + + var cellString = Object(_string__WEBPACK_IMPORTED_MODULE_3__["matchCase"])(cellValue, caseSensitive); // checks if celldata is already in array + + if (!Object(_array__WEBPACK_IMPORTED_MODULE_2__["has"])(_this4.opts, cellString, caseSensitive)) { + _this4.opts.push(cellValue); + } + + var filteredCol = filteredDataCol[colIndex]; + + if (isLinked && tf.disableExcludedOptions) { + if (!filteredCol) { + filteredCol = tf.getVisibleColumnValues(colIndex); + } + + if (!Object(_array__WEBPACK_IMPORTED_MODULE_2__["has"])(filteredCol, cellString, caseSensitive) && !Object(_array__WEBPACK_IMPORTED_MODULE_2__["has"])(_this4.excludedOpts, cellString, caseSensitive)) { + _this4.excludedOpts.push(cellValue); + } + } + }, // continue conditions function + function (row, k) { + // excluded rows don't need to appear on selects as always valid + if (tf.excludeRows.indexOf(k) !== -1) { + return true; + } // checks if row has expected number of cells + + + if (row.cells.length !== tf.nbCells || _this4.isCustom) { + return true; + } + + if (isLinked && !_this4.isValidLinkedValue(k, activeIdx)) { + return true; + } + }); //sort options + + this.opts = this.sortOptions(colIndex, this.opts); + + if (this.excludedOpts) { + this.excludedOpts = this.sortOptions(colIndex, this.excludedOpts); + } + + this.addChecks(colIndex, ul); + + if (tf.loadFltOnDemand) { + flt.innerHTML = ''; + } + + flt.appendChild(ul); + flt.setAttribute('filled', '1'); + this.emitter.emit('after-populating-filter', tf, colIndex, flt); + } + /** + * Add checklist options + * @param {Number} colIndex Column index + * @param {Object} ul Ul element + * @private + */ + + }, { + key: "addChecks", + value: function addChecks(colIndex, ul) { + var _this5 = this; + + var tf = this.tf; + var chkCt = this.addTChecks(colIndex, ul); + + for (var y = 0; y < this.opts.length; y++) { + var val = this.opts[y]; //item value + + var lbl = this.isCustom ? this.optsTxt[y] : val; //item text + + var fltId = tf.fltIds[colIndex]; + var lblIdx = y + chkCt; + var li = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createCheckItem"])("".concat(fltId, "_").concat(lblIdx), val, lbl, ['data-idx', lblIdx]); + li.className = this.itemCssClass; + + if (tf.linkedFilters && tf.disableExcludedOptions && Object(_array__WEBPACK_IMPORTED_MODULE_2__["has"])(this.excludedOpts, Object(_string__WEBPACK_IMPORTED_MODULE_3__["matchCase"])(val, tf.caseSensitive), tf.caseSensitive)) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(li, this.disabledItemCssClass); + li.check.disabled = true; + li.disabled = true; + } else { + Object(_event__WEBPACK_IMPORTED_MODULE_4__["addEvt"])(li.check, 'click', function (evt) { + return _this5.optionClick(evt); + }); + } + + ul.appendChild(li); + + if (val === '') { + //item is hidden + li.style.display = _const__WEBPACK_IMPORTED_MODULE_6__["NONE"]; + } + } + } + /** + * Add checklist header option + * @param {Number} colIndex Column index + * @param {Object} ul Ul element + * @private + */ + + }, { + key: "addTChecks", + value: function addTChecks(colIndex, ul) { + var _this6 = this; + + var tf = this.tf; + var chkCt = 1; + var fltId = tf.fltIds[colIndex]; + var li0 = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createCheckItem"])("".concat(fltId, "_0"), '', tf.getClearFilterText(colIndex), ['data-idx', 0]); + li0.className = this.itemCssClass; + ul.appendChild(li0); + Object(_event__WEBPACK_IMPORTED_MODULE_4__["addEvt"])(li0.check, 'click', function (evt) { + return _this6.optionClick(evt); + }); + + if (!this.enableResetOption) { + li0.style.display = _const__WEBPACK_IMPORTED_MODULE_6__["NONE"]; + } + + if (tf.enableEmptyOption) { + var li1 = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createCheckItem"])("".concat(fltId, "_1"), tf.emOperator, tf.emptyText, ['data-idx', 1]); + li1.className = this.itemCssClass; + ul.appendChild(li1); + Object(_event__WEBPACK_IMPORTED_MODULE_4__["addEvt"])(li1.check, 'click', function (evt) { + return _this6.optionClick(evt); + }); + chkCt++; + } + + if (tf.enableNonEmptyOption) { + var li2 = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createCheckItem"])("".concat(fltId, "_2"), tf.nmOperator, tf.nonEmptyText, ['data-idx', 2]); + li2.className = this.itemCssClass; + ul.appendChild(li2); + Object(_event__WEBPACK_IMPORTED_MODULE_4__["addEvt"])(li2.check, 'click', function (evt) { + return _this6.optionClick(evt); + }); + chkCt++; + } + + return chkCt; + } + /** + * Set/unset value of passed item option in filter's DOM element attribute + * @param {Object} o checklist option DOM element + * @private + */ + + }, { + key: "setItemOption", + value: function setItemOption(o) { + var _this7 = this; + + if (!o) { + return; + } + + var tf = this.tf; + var chkValue = o.value; //checked item value + + var chkIndex = o.dataset.idx; + var colIdx = tf.getColumnIndexFromFilterId(o.id); + var n = tf.getFilterElement(parseInt(colIdx, 10)); + var items = n.childNodes; + var li = items[chkIndex]; //selected values (ul tag) + + var slcValues = n.getAttribute('value') || ''; //selected items indexes (ul tag) + + var slcIndexes = n.getAttribute('indexes') || ''; + + if (o.checked) { + //show all item + if (chkValue === '') { + //items indexes + var indexes = slcIndexes.split(tf.separator); + indexes.forEach(function (idx) { + idx = Number(idx); + var li = items[idx]; + var chx = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(li, 'input')[0]; + + if (chx && idx > 0) { + chx.checked = false; + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeClass"])(li, _this7.selectedItemCssClass); + } + }); + n.setAttribute('value', ''); + n.setAttribute('indexes', ''); + } else { + var _indexes = slcIndexes + chkIndex + tf.separator; + + var values = Object(_string__WEBPACK_IMPORTED_MODULE_3__["trim"])(slcValues + ' ' + chkValue + ' ' + tf.orOperator); + n.setAttribute('value', values); + n.setAttribute('indexes', _indexes); //uncheck first option + + var chx0 = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(items[0], 'input')[0]; + + if (chx0) { + chx0.checked = false; + } + } + + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeClass"])(items[0], this.selectedItemCssClass); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(li, this.selectedItemCssClass); + } else { + //removes values and indexes + var replaceValue = new RegExp(Object(_string__WEBPACK_IMPORTED_MODULE_3__["rgxEsc"])(chkValue + ' ' + tf.orOperator)); + + var _values = slcValues.replace(replaceValue, ''); + + var replaceIndex = new RegExp(Object(_string__WEBPACK_IMPORTED_MODULE_3__["rgxEsc"])(chkIndex + tf.separator)); + + var _indexes2 = slcIndexes.replace(replaceIndex, ''); + + n.setAttribute('value', Object(_string__WEBPACK_IMPORTED_MODULE_3__["trim"])(_values)); + n.setAttribute('indexes', _indexes2); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeClass"])(li, this.selectedItemCssClass); + } + } + /** + * Select filter options programmatically + * @param {Number} colIndex Column index + * @param {Array} values Array of option values to select + */ + + }, { + key: "selectOptions", + value: function selectOptions(colIndex) { + var _this8 = this; + + var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + var tf = this.tf; + var flt = tf.getFilterElement(colIndex); + + if (!flt || values.length === 0) { + return; + } + + var lis = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(flt, 'li'); + flt.setAttribute('value', ''); + flt.setAttribute('indexes', ''); + [].forEach.call(lis, function (li) { + var chk = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(li, 'input')[0]; + var chkVal = Object(_string__WEBPACK_IMPORTED_MODULE_3__["matchCase"])(chk.value, tf.caseSensitive); + + if (chkVal !== '' && Object(_array__WEBPACK_IMPORTED_MODULE_2__["has"])(values, chkVal, tf.caseSensitive)) { + chk.checked = true; + } else { + // Check non-empty-text or empty-text option + if (values.indexOf(tf.nmOperator) !== -1 && chkVal === Object(_string__WEBPACK_IMPORTED_MODULE_3__["matchCase"])(tf.nonEmptyText, tf.caseSensitive)) { + chk.checked = true; + } else if (values.indexOf(tf.emOperator) !== -1 && chkVal === Object(_string__WEBPACK_IMPORTED_MODULE_3__["matchCase"])(tf.emptyText, tf.caseSensitive)) { + chk.checked = true; + } else { + chk.checked = false; + } + } + + _this8.setItemOption(chk); + }); + } + /** + * Get filter values for a given column index + * @param {Number} colIndex Column index + * @returns {Array} values Collection of selected values + */ + + }, { + key: "getValues", + value: function getValues(colIndex) { + var tf = this.tf; + var flt = tf.getFilterElement(colIndex); + + if (!flt) { + return []; + } + + var fltAttr = flt.getAttribute('value'); + var values = Object(_types__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(fltAttr) ? '' : fltAttr; //removes last operator || + + values = values.substr(0, values.length - 3); //turn || separated values into array + + values = values.split(' ' + tf.orOperator + ' '); + return values; + } + /** + * Destroy CheckList instance + */ + + }, { + key: "destroy", + value: function destroy() { + var _this9 = this; + + this.emitter.off(['build-checklist-filter'], function (tf, colIndex, isLinked) { + return _this9.build(colIndex, isLinked); + }); + this.emitter.off(['select-checklist-options'], function (tf, colIndex, values) { + return _this9.selectOptions(colIndex, values); + }); + this.emitter.off(['rows-changed'], function () { + return _this9.refreshAll(); + }); + this.emitter.off(['after-filtering'], function () { + return _this9.linkFilters(); + }); + this.initialized = false; + } + }]); + + return CheckList; +}(_baseDropdown__WEBPACK_IMPORTED_MODULE_0__["BaseDropdown"]); + +/***/ }), + +/***/ "./src/modules/clearButton.js": +/*!************************************!*\ + !*** ./src/modules/clearButton.js ***! + \************************************/ +/*! exports provided: ClearButton */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ClearButton", function() { return ClearButton; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom */ "./src/dom.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../event */ "./src/event.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../settings */ "./src/settings.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../types */ "./src/types.js"); +/* harmony import */ var _toolbar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./toolbar */ "./src/modules/toolbar.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + +/** + * Clear button UI component + */ + +var ClearButton = +/*#__PURE__*/ +function (_Feature) { + _inherits(ClearButton, _Feature); + + /** + * Creates an instance of ClearButton + * @param {TableFilter} tf TableFilter instance + */ + function ClearButton(tf) { + var _this; + + _classCallCheck(this, ClearButton); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(ClearButton).call(this, tf, 'btnReset')); + var f = _this.config.btn_reset || {}; + /** + * Container element ID + * @type {String} + */ + + _this.targetId = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(f.target_id, null); + /** + * Text for the clear button + * @type {String} + */ + + _this.text = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(f.text, null); + /** + * Css class for reset button + * @type {String} + */ + + _this.cssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(f.css_class, 'reset'); + /** + * Tooltip text for the clear button + * @type {String} + */ + + _this.tooltip = f.tooltip || 'Clear filters'; + /** + * Custom Html string for the clear button + * @type {String} + */ + + _this.html = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(f.html, !tf.enableIcons || _this.text ? null : ''); + /** + * Default position in toolbar ('left'|'center'|'right') + * @type {String} + */ + + _this.toolbarPosition = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(f.toolbar_position, _toolbar__WEBPACK_IMPORTED_MODULE_5__["RIGHT"]); + /** + * Clear button container element + * @type {DOMElement} + * @private + */ + + _this.container = null; + /** + * Clear button element + * @type {DOMElement} + * @private + */ + + _this.element = null; + return _this; + } + /** + * Click event handler for clear button + * @private + */ + + + _createClass(ClearButton, [{ + key: "onClick", + value: function onClick() { + if (!this.isEnabled()) { + return; + } + + this.tf.clearFilters(); + } + /** + * Initialize clear button component + */ + + }, { + key: "init", + value: function init() { + var _this2 = this; + + var tf = this.tf; + + if (this.initialized) { + return; + } + + this.emitter.emit('initializing-feature', this, !Object(_types__WEBPACK_IMPORTED_MODULE_4__["isNull"])(this.targetId)); + var cont = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span'); + var targetEl = !this.targetId ? tf.feature('toolbar').container(this.toolbarPosition) : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.targetId); + targetEl.appendChild(cont); + + if (!this.html) { + var fltReset = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:void(0);']); + fltReset.className = this.cssClass; + fltReset.appendChild(Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createText"])(this.text)); + cont.appendChild(fltReset); + Object(_event__WEBPACK_IMPORTED_MODULE_2__["addEvt"])(fltReset, 'click', function () { + return _this2.onClick(); + }); + } else { + cont.innerHTML = this.html; + var resetEl = cont.firstChild; + Object(_event__WEBPACK_IMPORTED_MODULE_2__["addEvt"])(resetEl, 'click', function () { + return _this2.onClick(); + }); + } + + this.element = cont.firstChild; + this.container = cont; + /** @inherited */ + + this.initialized = true; + this.emitter.emit('feature-initialized', this); + } + /** + * Destroy ClearButton instance + */ + + }, { + key: "destroy", + value: function destroy() { + if (!this.initialized) { + return; + } + + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.element); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.container); + this.element = null; + this.container = null; + this.initialized = false; + } + }]); + + return ClearButton; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); // TODO: remove as soon as feature name is fixed + +ClearButton.altName = 'btnReset'; + +/***/ }), + +/***/ "./src/modules/dateType.js": +/*!*********************************!*\ + !*** ./src/modules/dateType.js ***! + \*********************************/ +/*! exports provided: DateType */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DateType", function() { return DateType; }); +/* harmony import */ var sugar_date__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sugar-date */ "./node_modules/sugar-date/index.js"); +/* harmony import */ var sugar_date__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sugar_date__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var sugar_date_locales__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! sugar-date/locales */ "./node_modules/sugar-date/locales/index.js"); +/* harmony import */ var sugar_date_locales__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(sugar_date_locales__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../feature */ "./src/feature.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../types */ "./src/types.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../const */ "./src/const.js"); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../root */ "./src/root.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + +/** + * Wrapper for Sugar Date module providing datetime helpers and locales + * @export + * @class DateType + */ + +var DateType = +/*#__PURE__*/ +function (_Feature) { + _inherits(DateType, _Feature); + + /** + * Creates an instance of DateType + * @param {TableFilter} tf TableFilter instance + */ + function DateType(tf) { + var _this; + + _classCallCheck(this, DateType); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(DateType).call(this, tf, 'dateType')); + /** + * Global locale + * @type {String} + */ + + _this.locale = tf.locale; + /** + * Sugar Date instance + * @type {Object} + */ + + _this.datetime = sugar_date__WEBPACK_IMPORTED_MODULE_0__["Date"]; + + _this.enable(); + + return _this; + } + /** + * Initialize DateType instance + */ + + + _createClass(DateType, [{ + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized) { + return; + } // Set global locale + + + this.datetime.setLocale(this.locale); // Add formats from column types configuration if any + + this.addConfigFormats(this.tf.colTypes); + this.emitter.on(['add-date-type-formats'], function (tf, types) { + return _this2.addConfigFormats(types); + }); // Broadcast date-type initialization + + this.emitter.emit('date-type-initialized', this.tf, this); + /** @inherited */ + + this.initialized = true; + } + /** + * Parse a string representation of a date for a specified locale and return + * a date object + * @param {String} dateStr String representation of a date + * @param {String} localeCode Locale code (ie 'en-us') + * @returns {Date} + */ + + }, { + key: "parse", + value: function parse(dateStr, localeCode) { + return this.datetime.create(dateStr, localeCode); + } + /** + * Check string representation of a date for a specified locale is valid + * @param {any} dateStr String representation of a date + * @param {any} localeCode Locale code (ie 'en-us') + * @returns {Boolean} + */ + + }, { + key: "isValid", + value: function isValid(dateStr, localeCode) { + return this.datetime.isValid(this.parse(dateStr, localeCode)); + } + /** + * Return the type object of a specified column as per configuration or + * passed collection + * @param {Number} colIndex Column index + * @param {Array} types Collection of column types, optional + * @returns {Object} + */ + + }, { + key: "getOptions", + value: function getOptions(colIndex, types) { + types = types || this.tf.colTypes; + var colType = types[colIndex]; + return Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(colType) ? colType : {}; + } + /** + * Return the locale code for supplied column index as per configuration + * or global setting + * @param {Number} colIndex Column index + * @returns {String} Locale code (ie: 'en-us') + */ + + }, { + key: "getLocale", + value: function getLocale(colIndex) { + return this.getOptions(colIndex).locale || this.locale; + } + /** + * Add date time format(s) to a locale as specified by the passed + * collection of column types, ie: + * [ + * 'string', + * 'number', + * { type: 'date', locale: 'en', format: ['{dd}/{MM}/{yyyy}']} + * ] + * + * @param {Array} [types=[]] Collection of column types + */ + + }, { + key: "addConfigFormats", + value: function addConfigFormats() { + var _this3 = this; + + var types = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + types.forEach(function (type, idx) { + var options = _this3.getOptions(idx, types); + + if (options.type === _const__WEBPACK_IMPORTED_MODULE_4__["DATE"] && options.hasOwnProperty('format')) { + var locale = _this3.datetime.getLocale(options.locale || _this3.locale); + + var formats = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(options.format) ? options.format : [options.format]; // Sugar date module throws exceptions with locale.addFormat + + try { + formats.forEach(function (format) { + locale.addFormat(format); + }); + } catch (ex) { + _root__WEBPACK_IMPORTED_MODULE_5__["root"].console.error(ex); + } + } + }); + } + /** + * Remove DateType instance + */ + + }, { + key: "destroy", + value: function destroy() { + var _this4 = this; + + if (!this.initialized) { + return; + } // TODO: remove added formats + + + this.emitter.off(['add-date-type-formats'], function (tf, types) { + return _this4.addConfigFormats(types); + }); + this.initialized = false; + } + }]); + + return DateType; +}(_feature__WEBPACK_IMPORTED_MODULE_2__["Feature"]); + +/***/ }), + +/***/ "./src/modules/dropdown.js": +/*!*********************************!*\ + !*** ./src/modules/dropdown.js ***! + \*********************************/ +/*! exports provided: Dropdown */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Dropdown", function() { return Dropdown; }); +/* harmony import */ var _baseDropdown__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./baseDropdown */ "./src/modules/baseDropdown.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom */ "./src/dom.js"); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../array */ "./src/array.js"); +/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../string */ "./src/string.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../event */ "./src/event.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../const */ "./src/const.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../settings */ "./src/settings.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + + +/** + * Dropdown filter UI component + * @export + * @class Dropdown + * @extends {BaseDropdown} + */ + +var Dropdown = +/*#__PURE__*/ +function (_BaseDropdown) { + _inherits(Dropdown, _BaseDropdown); + + /** + * Creates an instance of Dropdown + * @param {TableFilter} tf TableFilter instance + */ + function Dropdown(tf) { + var _this; + + _classCallCheck(this, Dropdown); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(Dropdown).call(this, tf, 'dropdown')); // Configuration object + + var f = _this.config; + /** + * Enable the reset filter option as first item + * @type {Boolean} + */ + + _this.enableSlcResetFilter = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsBool"])(f.enable_slc_reset_filter, true); + /** + * Non empty option text + * @type {String} + */ + + _this.nonEmptyText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.non_empty_text, '(Non empty)'); + /** + * Tooltip text appearing on multiple select + * @type {String} + */ + + _this.multipleSlcTooltip = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.multiple_slc_tooltip, 'Use Ctrl/Cmd key for multiple selections'); + return _this; + } + /** + * Drop-down filter focus event handler + * @param {Event} e DOM Event + * @private + */ + + + _createClass(Dropdown, [{ + key: "onSlcFocus", + value: function onSlcFocus(e) { + var elm = Object(_event__WEBPACK_IMPORTED_MODULE_4__["targetEvt"])(e); + var tf = this.tf; // select is populated when element has focus + + if (tf.loadFltOnDemand && elm.getAttribute('filled') === '0') { + var ct = elm.getAttribute('ct'); + this.build(ct); + } + + this.emitter.emit('filter-focus', tf, elm); + } + /** + * Drop-down filter change event handler + * @private + */ + + }, { + key: "onSlcChange", + value: function onSlcChange() { + if (this.tf.onSlcChange) { + this.tf.filter(); + } + } + /** + * Refresh all drop-down filters + */ + + }, { + key: "refreshAll", + value: function refreshAll() { + var selectFlts = this.tf.getFiltersByType(_const__WEBPACK_IMPORTED_MODULE_5__["SELECT"], true); + var multipleFlts = this.tf.getFiltersByType(_const__WEBPACK_IMPORTED_MODULE_5__["MULTIPLE"], true); + var colIdxs = selectFlts.concat(multipleFlts); + this.refreshFilters(colIdxs); + } + /** + * Initialize drop-down filter + * @param {Number} colIndex Column index + * @param {Boolean} isExternal External filter flag + * @param {DOMElement} container Dom element containing the filter + */ + + }, { + key: "init", + value: function init(colIndex, isExternal, container) { + var _this2 = this; + + var tf = this.tf; + var col = tf.getFilterType(colIndex); + var externalFltTgtId = isExternal ? tf.externalFltIds[colIndex] : null; + var slc = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])(_const__WEBPACK_IMPORTED_MODULE_5__["SELECT"], ['id', tf.buildFilterId(colIndex)], ['ct', colIndex], ['filled', '0']); + + if (col === _const__WEBPACK_IMPORTED_MODULE_5__["MULTIPLE"]) { + slc.multiple = _const__WEBPACK_IMPORTED_MODULE_5__["MULTIPLE"]; + slc.title = this.multipleSlcTooltip; + } + + slc.className = col.toLowerCase() === _const__WEBPACK_IMPORTED_MODULE_5__["SELECT"] ? tf.fltCssClass : tf.fltMultiCssClass; //filter is appended in container element + + if (externalFltTgtId) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(externalFltTgtId).appendChild(slc); + } else { + container.appendChild(slc); + } + + tf.fltIds.push(slc.id); + + if (!tf.loadFltOnDemand) { + this.build(colIndex); + } else { + //1st option is created here since build isn't invoked + var opt0 = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createOpt"])(tf.getClearFilterText(colIndex), ''); + slc.appendChild(opt0); + } + + Object(_event__WEBPACK_IMPORTED_MODULE_4__["addEvt"])(slc, 'change', function () { + return _this2.onSlcChange(); + }); + Object(_event__WEBPACK_IMPORTED_MODULE_4__["addEvt"])(slc, 'focus', function (e) { + return _this2.onSlcFocus(e); + }); + this.emitter.on(['build-select-filter'], function (tf, colIndex, isLinked, isExternal) { + return _this2.build(colIndex, isLinked, isExternal); + }); + this.emitter.on(['select-options'], function (tf, colIndex, values) { + return _this2.selectOptions(colIndex, values); + }); + this.emitter.on(['rows-changed'], function () { + return _this2.refreshAll(); + }); + this.emitter.on(['after-filtering'], function () { + return _this2.linkFilters(); + }); + /** @inherited */ + + this.initialized = true; + } + /** + * Build drop-down filter UI + * @param {Number} colIndex Column index + * @param {Boolean} isLinked Enable linked filters behaviour + */ + + }, { + key: "build", + value: function build(colIndex) { + var _this3 = this; + + var isLinked = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var tf = this.tf; + colIndex = Number(colIndex); + this.emitter.emit('before-populating-filter', tf, colIndex); + /** @inherited */ + + this.opts = []; + /** @inherited */ + + this.optsTxt = []; + var slc = tf.getFilterElement(colIndex); //custom select test + + /** @inherited */ + + this.isCustom = tf.isCustomOptions(colIndex); //Retrieves custom values + + if (this.isCustom) { + var customValues = tf.getCustomOptions(colIndex); + this.opts = customValues[0]; + this.optsTxt = customValues[1]; + } //custom selects text + + + var activeIdx; + var activeFilterId = tf.getActiveFilterId(); + + if (isLinked && activeFilterId) { + activeIdx = tf.getColumnIndexFromFilterId(activeFilterId); + } + + var excludedOpts = null, + filteredDataCol = null; + + if (isLinked && tf.disableExcludedOptions) { + excludedOpts = []; + filteredDataCol = []; + } + + var eachRow = tf.eachRow(); + eachRow(function (row) { + var cellValue = tf.getCellValue(row.cells[colIndex]); //Vary Peter's patch + + var cellString = Object(_string__WEBPACK_IMPORTED_MODULE_3__["matchCase"])(cellValue, tf.caseSensitive); // checks if celldata is already in array + + if (!Object(_array__WEBPACK_IMPORTED_MODULE_2__["has"])(_this3.opts, cellString, tf.caseSensitive)) { + _this3.opts.push(cellValue); + } + + if (isLinked && tf.disableExcludedOptions) { + var filteredCol = filteredDataCol[colIndex]; + + if (!filteredCol) { + filteredCol = tf.getVisibleColumnValues(colIndex); + } + + if (!Object(_array__WEBPACK_IMPORTED_MODULE_2__["has"])(filteredCol, cellString, tf.caseSensitive) && !Object(_array__WEBPACK_IMPORTED_MODULE_2__["has"])(excludedOpts, cellString, tf.caseSensitive)) { + excludedOpts.push(cellValue); + } + } + }, // continue conditions function + function (row, k) { + // excluded rows don't need to appear on selects as always valid + if (tf.excludeRows.indexOf(k) !== -1) { + return true; + } // checks if row has expected number of cells + + + if (row.cells.length !== tf.nbCells || _this3.isCustom) { + return true; + } + + if (isLinked && !_this3.isValidLinkedValue(k, activeIdx)) { + return true; + } + }); //sort options + + this.opts = this.sortOptions(colIndex, this.opts); + + if (excludedOpts) { + excludedOpts = this.sortOptions(colIndex, excludedOpts); + } //populates drop-down + + + this.addOptions(colIndex, slc, isLinked, excludedOpts); + this.emitter.emit('after-populating-filter', tf, colIndex, slc); + } + /** + * Add drop-down options + * @param {Number} colIndex Column index + * @param {Object} slc Select Dom element + * @param {Boolean} isLinked Enable linked refresh behaviour + * @param {Array} excludedOpts Array of excluded options + */ + + }, { + key: "addOptions", + value: function addOptions(colIndex, slc, isLinked, excludedOpts) { + var tf = this.tf, + slcValue = slc.value; + slc.innerHTML = ''; + slc = this.addFirstOption(slc); + + for (var y = 0; y < this.opts.length; y++) { + if (this.opts[y] === '') { + continue; + } + + var val = this.opts[y]; //option value + + var lbl = this.isCustom ? this.optsTxt[y] : val; //option text + + var isDisabled = false; + + if (isLinked && tf.disableExcludedOptions && Object(_array__WEBPACK_IMPORTED_MODULE_2__["has"])(excludedOpts, Object(_string__WEBPACK_IMPORTED_MODULE_3__["matchCase"])(val, tf.caseSensitive), tf.caseSensitive)) { + isDisabled = true; + } + + var opt = void 0; //fill select on demand + + if (tf.loadFltOnDemand && slcValue === this.opts[y] && tf.getFilterType(colIndex) === _const__WEBPACK_IMPORTED_MODULE_5__["SELECT"]) { + opt = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createOpt"])(lbl, val, true); + } else { + opt = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createOpt"])(lbl, val, false); + } + + if (isDisabled) { + opt.disabled = true; + } + + slc.appendChild(opt); + } // for y + + + slc.setAttribute('filled', '1'); + } + /** + * Add drop-down header option + * @param {Object} slc Select DOM element + */ + + }, { + key: "addFirstOption", + value: function addFirstOption(slc) { + var tf = this.tf; + var colIdx = tf.getColumnIndexFromFilterId(slc.id); + var opt0 = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createOpt"])(!this.enableSlcResetFilter ? '' : tf.getClearFilterText(colIdx), ''); + + if (!this.enableSlcResetFilter) { + opt0.style.display = _const__WEBPACK_IMPORTED_MODULE_5__["NONE"]; + } + + slc.appendChild(opt0); + + if (tf.enableEmptyOption) { + var opt1 = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createOpt"])(tf.emptyText, tf.emOperator); + slc.appendChild(opt1); + } + + if (tf.enableNonEmptyOption) { + var opt2 = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createOpt"])(tf.nonEmptyText, tf.nmOperator); + slc.appendChild(opt2); + } + + return slc; + } + /** + * Select filter options programmatically + * @param {Number} colIndex Column index + * @param {Array} values Array of option values to select + */ + + }, { + key: "selectOptions", + value: function selectOptions(colIndex) { + var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + var tf = this.tf; + + if (values.length === 0) { + return; + } + + var slc = tf.getFilterElement(colIndex); + [].forEach.call(slc.options, function (option) { + // Empty value means clear all selections and first option is the + // clear all option + if (values[0] === '' || option.value === '') { + option.selected = false; + } + + if (option.value !== '' && Object(_array__WEBPACK_IMPORTED_MODULE_2__["has"])(values, option.value, true)) { + option.selected = true; + } //if + + }); + } + /** + * Get filter values for a given column index + * @param {Number} colIndex Column index + * @returns {Array} values Array of selected values + */ + + }, { + key: "getValues", + value: function getValues(colIndex) { + var tf = this.tf; + var slc = tf.getFilterElement(colIndex); + var values = []; // IE >= 9 does not support the selectedOptions property :( + + if (slc.selectedOptions) { + [].forEach.call(slc.selectedOptions, function (option) { + return values.push(option.value); + }); + } else { + [].forEach.call(slc.options, function (option) { + if (option.selected) { + values.push(option.value); + } + }); + } + + return values; + } + /** + * Destroy Dropdown instance + */ + + }, { + key: "destroy", + value: function destroy() { + var _this4 = this; + + this.emitter.off(['build-select-filter'], function (colIndex, isLinked, isExternal) { + return _this4.build(colIndex, isLinked, isExternal); + }); + this.emitter.off(['select-options'], function (tf, colIndex, values) { + return _this4.selectOptions(colIndex, values); + }); + this.emitter.off(['rows-changed'], function () { + return _this4.refreshAll(); + }); + this.emitter.off(['after-filtering'], function () { + return _this4.linkFilters(); + }); + this.initialized = false; + } + }]); + + return Dropdown; +}(_baseDropdown__WEBPACK_IMPORTED_MODULE_0__["BaseDropdown"]); + +/***/ }), + +/***/ "./src/modules/gridLayout.js": +/*!***********************************!*\ + !*** ./src/modules/gridLayout.js ***! + \***********************************/ +/*! exports provided: GridLayout */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GridLayout", function() { return GridLayout; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom */ "./src/dom.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../event */ "./src/event.js"); +/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../string */ "./src/string.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../const */ "./src/const.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../settings */ "./src/settings.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + +/** + * Grid layout, table with fixed headers + */ + +var GridLayout = +/*#__PURE__*/ +function (_Feature) { + _inherits(GridLayout, _Feature); + + /** + * Creates an instance of GridLayout + * @param {TableFilter} tf TableFilter instance + */ + function GridLayout(tf) { + var _this; + + _classCallCheck(this, GridLayout); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(GridLayout).call(this, tf, 'gridLayout')); + var f = _this.config.grid_layout || {}; + /** + * Grid-layout container width as CSS string + * @type {String} + */ + + _this.width = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.width, null); + /** + * Grid-layout container height as CSS string + * @type {String} + */ + + _this.height = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.height, null); + /** + * Css class for main container element + * @type {String} + */ + + _this.mainContCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.cont_css_class, 'grd_Cont'); + /** + * Css class for body table container element + * @type {String} + */ + + _this.contCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.tbl_cont_css_class, 'grd_tblCont'); + /** + * Css class for headers table container element + * @type {String} + */ + + _this.headContCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.tbl_head_css_class, 'grd_headTblCont'); + /** + * Css class for toolbar container element (rows counter, paging etc.) + * @type {String} + */ + + _this.infDivCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.inf_grid_css_class, 'grd_inf'); + /** + * Index of the headers row, default: 0 + * @type {Number} + */ + + _this.headRowIndex = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsNb"])(f.headers_row_index, 0); + /** + * Collection of the header row indexes to be moved into headers table + * @type {Array} + */ + + _this.headRows = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsArr"])(f.headers_rows, [0]); + /** + * Enable or disable column filters generation, default: true + * @type {Boolean} + */ + + _this.filters = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsBool"])(f.filters, true); + /** + * Enable or disable column headers, default: false + * @type {Boolean} + */ + + _this.noHeaders = Boolean(f.no_headers); + /** + * Grid-layout default column widht as CSS string + * @type {String} + */ + + _this.defaultColWidth = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.default_col_width, '100px'); + /** + * List of column elements + * @type {Array} + * @private + */ + + _this.colElms = []; + /** + * Prefix for grid-layout filter's cell ID + * @type {String} + * @private + */ + + _this.prfxGridFltTd = '_td_'; + /** + * Prefix for grid-layout header's cell ID + * @type {String} + * @private + */ + + _this.prfxGridTh = 'tblHeadTh_'; + /** + * Mark-up of original HTML table + * @type {String} + * @private + */ + + _this.sourceTblHtml = tf.dom().outerHTML; + /** + * Indicates if working table has column elements + * @type {Boolean} + * @private + */ + + _this.tblHasColTag = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(tf.dom(), 'col').length > 0 ? true : false; + /** + * Main container element + * @private + */ + + _this.tblMainCont = null; + /** + * Table container element + * @private + */ + + _this.tblCont = null; + /** + * Headers' table container element + * @private + */ + + _this.headTblCont = null; + /** + * Headers' table element + * @private + */ + + _this.headTbl = null; // filters flag at TF level + + tf.fltGrid = _this.filters; + return _this; + } + /** + * Generates a grid with fixed headers + * TODO: reduce size of init by extracting single purposed methods + */ + + + _createClass(GridLayout, [{ + key: "init", + value: function init() { + var _this2 = this; + + var tf = this.tf; + var tbl = tf.dom(); + + if (this.initialized) { + return; + } // Override relevant TableFilter properties + + + this.setOverrides(); // Assign default column widths + + this.setDefaultColWidths(); //Main container: it will contain all the elements + + this.tblMainCont = this.createContainer('div', this.mainContCssClass); + + if (this.width) { + this.tblMainCont.style.width = this.width; + } + + tbl.parentNode.insertBefore(this.tblMainCont, tbl); //Table container: div wrapping content table + + this.tblCont = this.createContainer('div', this.contCssClass); + this.setConfigWidth(this.tblCont); + + if (this.height) { + this.tblCont.style.height = this.height; + } + + tbl.parentNode.insertBefore(this.tblCont, tbl); + var t = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(tbl); + this.tblCont.appendChild(t); //In case table width is expressed in % + + if (tbl.style.width === '') { + var tblW = this.initialTableWidth(); + tbl.style.width = (Object(_string__WEBPACK_IMPORTED_MODULE_3__["contains"])('%', tblW) ? tbl.clientWidth : tblW) + 'px'; + } + + var d = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.tblCont); + this.tblMainCont.appendChild(d); //Headers table container: div wrapping headers table + + this.headTblCont = this.createContainer('div', this.headContCssClass); //Headers table + + this.headTbl = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('table'); + var tH = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('tHead'); //1st row should be headers row, ids are added if not set + //Those ids are used by the sort feature + + var hRow = tbl.rows[this.headRowIndex]; + var sortTriggers = this.getSortTriggerIds(hRow); //Filters row is created + + var filtersRow = this.createFiltersRow(); //Headers row are moved from content table to headers table + + this.setHeadersRow(tH); + this.headTbl.appendChild(tH); + + if (tf.filtersRowIndex === 0) { + tH.insertBefore(filtersRow, hRow); + } else { + tH.appendChild(filtersRow); + } + + this.headTblCont.appendChild(this.headTbl); + this.tblCont.parentNode.insertBefore(this.headTblCont, this.tblCont); //THead needs to be removed in content table for sort feature + + var thead = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(tbl, 'thead'); + + if (thead.length > 0) { + tbl.removeChild(thead[0]); + } // ensure table layout is always set even if already set in css + // definitions, potentially with custom css class this could be lost + + + this.headTbl.style.tableLayout = 'fixed'; + tbl.style.tableLayout = 'fixed'; //content table without headers needs col widths to be reset + + tf.setColWidths(this.headTbl); //Headers container width + + this.headTbl.style.width = tbl.style.width; // + //scroll synchronisation + + Object(_event__WEBPACK_IMPORTED_MODULE_2__["addEvt"])(this.tblCont, 'scroll', function (evt) { + var elm = Object(_event__WEBPACK_IMPORTED_MODULE_2__["targetEvt"])(evt); + var scrollLeft = elm.scrollLeft; + _this2.headTblCont.scrollLeft = scrollLeft; //New pointerX calc taking into account scrollLeft + // if(!o.isPointerXOverwritten){ + // try{ + // o.Evt.pointerX = function(evt){ + // let e = evt || global.event; + // let bdScrollLeft = tf_StandardBody().scrollLeft + + // scrollLeft; + // return (e.pageX + scrollLeft) || + // (e.clientX + bdScrollLeft); + // }; + // o.isPointerXOverwritten = true; + // } catch(err) { + // o.isPointerXOverwritten = false; + // } + // } + }); // TODO: Trigger a custom event handled by sort extension + + var sort = tf.extension('sort'); + + if (sort) { + sort.asyncSort = true; + sort.triggerIds = sortTriggers; + } //Col elements are enough to keep column widths after sorting and + //filtering + + + this.setColumnElements(); + + if (tf.popupFilters) { + filtersRow.style.display = _const__WEBPACK_IMPORTED_MODULE_4__["NONE"]; + } + /** @inherited */ + + + this.initialized = true; + } + /** + * Overrides TableFilter instance properties to adjust to grid layout mode + * @private + */ + + }, { + key: "setOverrides", + value: function setOverrides() { + var tf = this.tf; + tf.refRow = 0; + tf.headersRow = 0; + tf.filtersRowIndex = 1; + } + /** + * Set grid-layout default column widths if column widths are not defined + * @private + */ + + }, { + key: "setDefaultColWidths", + value: function setDefaultColWidths() { + var _this3 = this; + + var tf = this.tf; + + if (tf.colWidths.length > 0) { + return; + } + + tf.eachCol(function (k) { + var colW; + var cell = tf.dom().rows[tf.getHeadersRowIndex()].cells[k]; + + if (cell.width !== '') { + colW = cell.width; + } else if (cell.style.width !== '') { + colW = parseInt(cell.style.width, 10); + } else { + colW = _this3.defaultColWidth; + } + + tf.colWidths[k] = colW; + }); + tf.setColWidths(); + } + /** + * Initial table width + * @returns {Number} + * @private + */ + + }, { + key: "initialTableWidth", + value: function initialTableWidth() { + var tbl = this.tf.dom(); + var width; //initial table width + + if (tbl.width !== '') { + width = tbl.width; + } else if (tbl.style.width !== '') { + width = tbl.style.width; + } else { + width = tbl.clientWidth; + } + + return parseInt(width, 10); + } + /** + * Creates container element + * @param {String} tag Tag name + * @param {String} className Css class to assign to element + * @returns {DOMElement} + * @private + */ + + }, { + key: "createContainer", + value: function createContainer(tag, className) { + var element = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])(tag); + element.className = className; + return element; + } + /** + * Creates filters row with cells + * @returns {HTMLTableRowElement} + * @private + */ + + }, { + key: "createFiltersRow", + value: function createFiltersRow() { + var _this4 = this; + + var tf = this.tf; + var filtersRow = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('tr'); + + if (this.filters && tf.fltGrid) { + tf.externalFltIds = []; + tf.eachCol(function (j) { + var fltTdId = "".concat(tf.prfxFlt + j + _this4.prfxGridFltTd + tf.id); + var cl = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])(tf.fltCellTag, ['id', fltTdId]); + filtersRow.appendChild(cl); + tf.externalFltIds[j] = fltTdId; + }); + } + + return filtersRow; + } + /** + * Generates column elements if necessary and assigns their widths + * @private + */ + + }, { + key: "setColumnElements", + value: function setColumnElements() { + var tf = this.tf; + var cols = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(tf.dom(), 'col'); + this.tblHasColTag = cols.length > 0; + + for (var k = tf.getCellsNb() - 1; k >= 0; k--) { + var col = void 0; + + if (!this.tblHasColTag) { + col = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('col'); + tf.dom().insertBefore(col, tf.dom().firstChild); + } else { + col = cols[k]; + } + + col.style.width = tf.colWidths[k]; + this.colElms[k] = col; + } + + this.tblHasColTag = true; + } + /** + * Sets headers row in headers table + * @param {HTMLHeadElement} tableHead Table head element + * @private + */ + + }, { + key: "setHeadersRow", + value: function setHeadersRow(tableHead) { + if (this.noHeaders) { + // Handle table with no headers, assuming here headers do not + // exist + tableHead.appendChild(Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('tr')); + } else { + // Headers row are moved from content table to headers table + for (var i = 0; i < this.headRows.length; i++) { + var row = this.tf.dom().rows[this.headRows[i]]; + tableHead.appendChild(row); + } + } + } + /** + * Sets width defined in configuration to passed element + * @param {DOMElement} element DOM element + * @private + */ + + }, { + key: "setConfigWidth", + value: function setConfigWidth(element) { + if (!this.width) { + return; + } + + if (this.width.indexOf('%') !== -1) { + element.style.width = '100%'; + } else { + element.style.width = this.width; + } + } + /** + * Returns a list of header IDs used for specifing external sort triggers + * @param {HTMLTableRowElement} row DOM row element + * @returns {Array} List of IDs + * @private + */ + + }, { + key: "getSortTriggerIds", + value: function getSortTriggerIds(row) { + var _this5 = this; + + var tf = this.tf; + var sortTriggers = []; + tf.eachCol(function (n) { + var c = row.cells[n]; + var thId = c.getAttribute('id'); + + if (!thId || thId === '') { + thId = "".concat(_this5.prfxGridTh + n, "_").concat(tf.id); + c.setAttribute('id', thId); + } + + sortTriggers.push(thId); + }); + return sortTriggers; + } + /** + * Removes the grid layout + */ + + }, { + key: "destroy", + value: function destroy() { + var tf = this.tf; + var tbl = tf.dom(); + + if (!this.initialized) { + return; + } + + var t = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(tbl); + this.tblMainCont.parentNode.insertBefore(t, this.tblMainCont); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.tblMainCont); + this.tblMainCont = null; + this.headTblCont = null; + this.headTbl = null; + this.tblCont = null; + tbl.outerHTML = this.sourceTblHtml; //needed to keep reference of table element for future usage + + this.tf.tbl = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(tf.id); + this.initialized = false; + } + }]); + + return GridLayout; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + +/***/ }), + +/***/ "./src/modules/hash.js": +/*!*****************************!*\ + !*** ./src/modules/hash.js ***! + \*****************************/ +/*! exports provided: hasHashChange, Hash */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasHashChange", function() { return hasHashChange; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Hash", function() { return Hash; }); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../event */ "./src/event.js"); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../root */ "./src/root.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + + + +var JSON = _root__WEBPACK_IMPORTED_MODULE_1__["root"].JSON; +var location = _root__WEBPACK_IMPORTED_MODULE_1__["root"].location; +var decodeURIComponent = _root__WEBPACK_IMPORTED_MODULE_1__["root"].decodeURIComponent; +var encodeURIComponent = _root__WEBPACK_IMPORTED_MODULE_1__["root"].encodeURIComponent; +/** + * Checks if browser has onhashchange event + */ + +var hasHashChange = function hasHashChange() { + var docMode = _root__WEBPACK_IMPORTED_MODULE_1__["root"].documentMode; + return 'onhashchange' in _root__WEBPACK_IMPORTED_MODULE_1__["root"] && (docMode === undefined || docMode > 7); +}; +/** + * Manages state via URL hash changes + * + * @export + * @class Hash + */ + +var Hash = +/*#__PURE__*/ +function () { + /** + * Creates an instance of Hash + * + * @param {State} state Instance of State + */ + function Hash(state) { + _classCallCheck(this, Hash); + + /** + * State object + * @type {State} + */ + this.state = state; + /** + * Cached URL hash + * @type {String} Hash string + * @private + */ + + this.lastHash = null; + /** + * Application event emitter instance + * @type {Emitter} + */ + + this.emitter = state.emitter; + /** + * Bound sync wrapper for future use + * @private + */ + + this.boundSync = null; + } + /** + * Initializes the Hash object + */ + + + _createClass(Hash, [{ + key: "init", + value: function init() { + var _this = this; + + if (!hasHashChange()) { + return; + } + + this.lastHash = location.hash; //Store a bound sync wrapper + + this.boundSync = this.sync.bind(this); + this.emitter.on(['state-changed'], function (tf, state) { + return _this.update(state); + }); + this.emitter.on(['initialized'], this.boundSync); + Object(_event__WEBPACK_IMPORTED_MODULE_0__["addEvt"])(_root__WEBPACK_IMPORTED_MODULE_1__["root"], 'hashchange', this.boundSync); + } + /** + * Updates the URL hash based on a state change + * + * @param {State} state Instance of State + */ + + }, { + key: "update", + value: function update(state) { + var hash = "#".concat(encodeURIComponent(JSON.stringify(state))); + + if (this.lastHash === hash) { + return; + } + + location.hash = hash; + this.lastHash = hash; + } + /** + * Converts a URL hash into a state JSON object + * + * @param {String} hash URL hash fragment + * @returns {Object} JSON object + */ + + }, { + key: "parse", + value: function parse(hash) { + if (hash.indexOf('#') === -1) { + return null; + } + + hash = hash.substr(1); + return JSON.parse(decodeURIComponent(hash)); + } + /** + * Applies current hash state to features + */ + + }, { + key: "sync", + value: function sync() { + var state = this.parse(location.hash); + + if (!state) { + return; + } // override current state with persisted one and sync features + + + this.state.overrideAndSync(state); + } + /** + * Release Hash event subscriptions and clear fields + */ + + }, { + key: "destroy", + value: function destroy() { + var _this2 = this; + + this.emitter.off(['state-changed'], function (tf, state) { + return _this2.update(state); + }); + this.emitter.off(['initialized'], this.boundSync); + Object(_event__WEBPACK_IMPORTED_MODULE_0__["removeEvt"])(_root__WEBPACK_IMPORTED_MODULE_1__["root"], 'hashchange', this.boundSync); + this.state = null; + this.lastHash = null; + this.emitter = null; + } + }]); + + return Hash; +}(); + +/***/ }), + +/***/ "./src/modules/help.js": +/*!*****************************!*\ + !*** ./src/modules/help.js ***! + \*****************************/ +/*! exports provided: Help */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Help", function() { return Help; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom */ "./src/dom.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../event */ "./src/event.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../const */ "./src/const.js"); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../root */ "./src/root.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../types */ "./src/types.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../settings */ "./src/settings.js"); +/* harmony import */ var _toolbar__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./toolbar */ "./src/modules/toolbar.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + + + +var WIKI_URL = 'https://github.com/koalyptus/TableFilter/wiki/' + '4.-Filter-operators'; +var WEBSITE_URL = 'https://www.tablefilter.com/'; +/** + * Help UI component + */ + +var Help = +/*#__PURE__*/ +function (_Feature) { + _inherits(Help, _Feature); + + /** + * Creates an instance of Help + * @param {TableFilter} tf TableFilter instance + */ + function Help(tf) { + var _this; + + _classCallCheck(this, Help); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(Help).call(this, tf, 'help')); + var f = _this.config.help_instructions || {}; + /** + * ID of main custom container element + * @type {String} + */ + + _this.tgtId = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.target_id, null); + /** + * ID of custom container element for instructions + * @type {String} + */ + + _this.contTgtId = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.container_target_id, null); + /** + * Instructions text (accepts HTML) + * @type {String} + */ + + _this.instrText = !Object(_types__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(f.text) ? f.text : 'Use the filters above each column to filter and limit table ' + 'data. Advanced searches can be performed by using the following ' + 'operators:
<, <=, >, ' + '>=, =, *, !, {, }, ' + '||,&&, [empty], [nonempty], ' + 'rgx:
' + 'Learn more
'; + /** + * Instructions HTML + * @type {String} + */ + + _this.instrHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.html, null); + /** + * Help button text ('?') + * @type {String} + */ + + _this.btnText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_text, '?'); + /** + * Custom help button HTML + * @type {String} + */ + + _this.btnHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_html, null); + /** + * Css class for help button + * @type {String} + */ + + _this.btnCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_css_class, 'helpBtn'); + /** + * Css class for help container element + * @type {String} + */ + + _this.contCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.container_css_class, 'helpCont'); + /** + * Button DOM element + * @type {DOMElement} + */ + + _this.btn = null; + /** + * Help container DOM element + * @type {DOMElement} + */ + + _this.cont = null; + /** + * Bound mouseup wrapper + * @private + */ + + _this.boundMouseup = null; + /** + * Default HTML appended to instructions text + * @type {String} + */ + + _this.defaultHtml = '

TableFilter ' + 'v' + tf.version + '

' + '' + WEBSITE_URL + '' + '
©2015-' + tf.year + ' Max Guglielmi' + '
' + 'Close
'; + /** + * Default position in toolbar ('left'|'center'|'right') + * @type {String} + */ + + _this.toolbarPosition = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.toolbar_position, _toolbar__WEBPACK_IMPORTED_MODULE_7__["RIGHT"]); + + _this.emitter.on(['init-help'], function () { + return _this.init(); + }); + + return _this; + } + /** + * Mouse-up event handler handling popup auto-close behaviour + * @private + */ + + + _createClass(Help, [{ + key: "onMouseup", + value: function onMouseup(evt) { + var targetElm = Object(_event__WEBPACK_IMPORTED_MODULE_2__["targetEvt"])(evt); + + while (targetElm && targetElm !== this.cont && targetElm !== this.btn) { + targetElm = targetElm.parentNode; + } + + if (targetElm !== this.cont && targetElm !== this.btn) { + this.toggle(); + } + + return; + } + /** + * Initialise Help instance + */ + + }, { + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized) { + return; + } + + this.emitter.emit('initializing-feature', this, !Object(_types__WEBPACK_IMPORTED_MODULE_5__["isNull"])(this.tgtId)); + var tf = this.tf; + var btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span'); + var cont = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('div'); + this.boundMouseup = this.onMouseup.bind(this); //help button is added to defined element + + var targetEl = !this.tgtId ? tf.feature('toolbar').container(this.toolbarPosition) : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.tgtId); + targetEl.appendChild(btn); + var divContainer = !this.contTgtId ? btn : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contTgtId); + + if (!this.btnHtml) { + divContainer.appendChild(cont); + var helplink = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:void(0);']); + helplink.className = this.btnCssClass; + helplink.appendChild(Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createText"])(this.btnText)); + btn.appendChild(helplink); + Object(_event__WEBPACK_IMPORTED_MODULE_2__["addEvt"])(helplink, 'click', function () { + return _this2.toggle(); + }); + } else { + btn.innerHTML = this.btnHtml; + var helpEl = btn.firstChild; + Object(_event__WEBPACK_IMPORTED_MODULE_2__["addEvt"])(helpEl, 'click', function () { + return _this2.toggle(); + }); + divContainer.appendChild(cont); + } + + if (!this.instrHtml) { + cont.innerHTML = this.instrText; + cont.className = this.contCssClass; + } else { + if (this.contTgtId) { + divContainer.appendChild(cont); + } + + cont.innerHTML = this.instrHtml; + + if (!this.contTgtId) { + cont.className = this.contCssClass; + } + } + + cont.innerHTML += this.defaultHtml; + Object(_event__WEBPACK_IMPORTED_MODULE_2__["addEvt"])(cont, 'click', function () { + return _this2.toggle(); + }); + this.cont = cont; + this.btn = btn; + /** @inherited */ + + this.initialized = true; + this.emitter.emit('feature-initialized', this); + } + /** + * Toggle help pop-up + */ + + }, { + key: "toggle", + value: function toggle() { + // check only if explicitily disabled as in this case undefined + // signifies the help feature is enabled by default + if (!this.isEnabled()) { + return; + } // ensure mouseup event handler is removed + + + Object(_event__WEBPACK_IMPORTED_MODULE_2__["removeEvt"])(_root__WEBPACK_IMPORTED_MODULE_4__["root"], 'mouseup', this.boundMouseup); + var divDisplay = this.cont.style.display; + + if (divDisplay === '' || divDisplay === _const__WEBPACK_IMPORTED_MODULE_3__["NONE"]) { + this.cont.style.display = 'inline'; + Object(_event__WEBPACK_IMPORTED_MODULE_2__["addEvt"])(_root__WEBPACK_IMPORTED_MODULE_4__["root"], 'mouseup', this.boundMouseup); + } else { + this.cont.style.display = _const__WEBPACK_IMPORTED_MODULE_3__["NONE"]; + } + } + /** + * Remove help UI + */ + + }, { + key: "destroy", + value: function destroy() { + if (!this.initialized) { + return; + } + + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.btn); + this.btn = null; + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.cont); + this.cont = null; + this.boundMouseup = null; + this.initialized = false; + } + }]); + + return Help; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); // TODO: remove as soon as feature name is fixed + +Help.alwaysInstantiate = true; + +/***/ }), + +/***/ "./src/modules/highlightKeywords.js": +/*!******************************************!*\ + !*** ./src/modules/highlightKeywords.js ***! + \******************************************/ +/*! exports provided: HighlightKeyword */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HighlightKeyword", function() { return HighlightKeyword; }); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom */ "./src/dom.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../types */ "./src/types.js"); +/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../string */ "./src/string.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../settings */ "./src/settings.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + + + + + +/** + * Highlight matched keywords upon filtering + * + * @export + * @class HighlightKeyword + */ + +var HighlightKeyword = +/*#__PURE__*/ +function () { + /** + * Creates an instance of HighlightKeyword + * @param {TableFilter} tf TableFilter instance + */ + function HighlightKeyword(tf) { + _classCallCheck(this, HighlightKeyword); + + var f = tf.config(); + /** + * Css class for highlighted term + * @type {String} + */ + + this.highlightCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(f.highlight_css_class, 'keyword'); + /** + * TableFilter instance + * @type {TableFilter} + */ + + this.tf = tf; + /** + * TableFilter's emitter instance + * @type {Emitter} + */ + + this.emitter = tf.emitter; + } + /** + * Initializes HighlightKeyword instance + */ + + + _createClass(HighlightKeyword, [{ + key: "init", + value: function init() { + var _this = this; + + this.emitter.on(['before-filtering', 'destroy'], function () { + return _this.unhighlightAll(); + }); + this.emitter.on(['highlight-keyword'], function (tf, cell, term) { + return _this._processTerm(cell, term); + }); + } + /** + * Highlight occurences of searched term in passed node + * @param {Node} node + * @param {String} term Searched term + * @param {String} cssClass Css class name + * + * TODO: refactor this method + */ + + }, { + key: "highlight", + value: function highlight(node, term, cssClass) { + // Iterate into this nodes childNodes + if (node.hasChildNodes) { + var children = node.childNodes; + + for (var i = 0; i < children.length; i++) { + this.highlight(children[i], term, cssClass); + } + } + + if (node.nodeType === 3) { + var nodeVal = node.nodeValue.toLowerCase(); + var termIdx = nodeVal.indexOf(term.toLowerCase()); + + if (termIdx !== -1) { + var pn = node.parentNode; + + if (pn && pn.className !== cssClass) { + // term not highlighted yet + var nv = node.nodeValue, + // Create a load of replacement nodes + before = Object(_dom__WEBPACK_IMPORTED_MODULE_0__["createText"])(nv.substr(0, termIdx)), + value = nv.substr(termIdx, term.length), + after = Object(_dom__WEBPACK_IMPORTED_MODULE_0__["createText"])(nv.substr(termIdx + term.length)), + text = Object(_dom__WEBPACK_IMPORTED_MODULE_0__["createText"])(value), + container = Object(_dom__WEBPACK_IMPORTED_MODULE_0__["createElm"])('span'); + container.className = cssClass; + container.appendChild(text); + pn.insertBefore(before, node); + pn.insertBefore(container, node); + pn.insertBefore(after, node); + pn.removeChild(node); + } + } + } + } + /** + * Removes highlight to nodes matching passed string + * @param {String} term + * @param {String} cssClass Css class to remove + */ + + }, { + key: "unhighlight", + value: function unhighlight(term, cssClass) { + var highlightedNodes = this.tf.dom().querySelectorAll(".".concat(cssClass)); + + for (var i = 0; i < highlightedNodes.length; i++) { + var n = highlightedNodes[i]; + var nodeVal = Object(_dom__WEBPACK_IMPORTED_MODULE_0__["getText"])(n); + + if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isNull"])(term) || nodeVal.toLowerCase().indexOf(term.toLowerCase()) !== -1) { + var parentNode = n.parentNode; + parentNode.replaceChild(Object(_dom__WEBPACK_IMPORTED_MODULE_0__["createText"])(nodeVal), n); + parentNode.normalize(); + } + } + } + /** + * Clear all occurrences of highlighted nodes + */ + + }, { + key: "unhighlightAll", + value: function unhighlightAll() { + if (!this.tf.highlightKeywords) { + return; + } + + this.unhighlight(null, this.highlightCssClass); + } + /** Remove feature */ + + }, { + key: "destroy", + value: function destroy() { + var _this2 = this; + + this.emitter.off(['before-filtering', 'destroy'], function () { + return _this2.unhighlightAll(); + }); + this.emitter.off(['highlight-keyword'], function (tf, cell, term) { + return _this2._processTerm(cell, term); + }); + } + /** + * Ensure filtering operators are handled before highlighting any match + * @param {any} Table cell to look searched term into + * @param {any} Searched termIdx + */ + + }, { + key: "_processTerm", + value: function _processTerm(cell, term) { + var tf = this.tf; + var reLk = new RegExp(Object(_string__WEBPACK_IMPORTED_MODULE_2__["rgxEsc"])(tf.lkOperator)); + var reEq = new RegExp(tf.eqOperator); + var reSt = new RegExp(tf.stOperator); + var reEn = new RegExp(tf.enOperator); + var reLe = new RegExp(tf.leOperator); + var reGe = new RegExp(tf.geOperator); + var reL = new RegExp(tf.lwOperator); + var reG = new RegExp(tf.grOperator); + var reD = new RegExp(tf.dfOperator); + term = term.replace(reLk, '').replace(reEq, '').replace(reSt, '').replace(reEn, ''); + + if (reLe.test(term) || reGe.test(term) || reL.test(term) || reG.test(term) || reD.test(term)) { + term = Object(_dom__WEBPACK_IMPORTED_MODULE_0__["getText"])(cell); + } + + if (term === '') { + return; + } + + this.highlight(cell, term, this.highlightCssClass); + } + }]); + + return HighlightKeyword; +}(); // TODO: remove as soon as feature name is fixed + +HighlightKeyword.altName = 'highlightKeywords'; + +/***/ }), + +/***/ "./src/modules/loader.js": +/*!*******************************!*\ + !*** ./src/modules/loader.js ***! + \*******************************/ +/*! exports provided: Loader */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Loader", function() { return Loader; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom */ "./src/dom.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../types */ "./src/types.js"); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../root */ "./src/root.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../const */ "./src/const.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../settings */ "./src/settings.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + +var BEFORE_ACTION_EVENTS = ['before-filtering', 'before-populating-filter', 'before-page-change', 'before-clearing-filters', 'before-page-length-change', 'before-reset-page', 'before-reset-page-length', 'before-loading-extensions', 'before-loading-themes']; +var AFTER_ACTION_EVENTS = ['after-filtering', 'after-populating-filter', 'after-page-change', 'after-clearing-filters', 'after-page-length-change', 'after-reset-page', 'after-reset-page-length', 'after-loading-extensions', 'after-loading-themes']; +/** + * Activity indicator + * + * @export + * @class Loader + * @extends {Feature} + */ + +var Loader = +/*#__PURE__*/ +function (_Feature) { + _inherits(Loader, _Feature); + + /** + * Creates an instance of Loader. + * + * @param {TableFilter} tf TableFilter instance + */ + function Loader(tf) { + var _this; + + _classCallCheck(this, Loader); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(Loader).call(this, tf, 'loader')); + var f = _this.config.loader || {}; + /** + * ID of custom container element + * @type {String} + */ + + _this.targetId = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.target_id, null); + /** + * Loader container DOM element + * @type {DOMElement} + */ + + _this.cont = null; + /** + * Text displayed when indicator is visible + * @type {String} + */ + + _this.text = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.text, 'Loading...'); + /** + * Custom HTML injected in Loader's container element + * @type {String} + */ + + _this.html = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.html, null); + /** + * Css class for Loader's container element + * @type {String} + */ + + _this.cssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.css_class, 'loader'); + /** + * Close delay in milliseconds + * @type {Number} + */ + + _this.closeDelay = 250; + /** + * Callback fired when loader is displayed + * @type {Function} + */ + + _this.onShow = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsFn"])(f.on_show_loader, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired when loader is closed + * @type {Function} + */ + + _this.onHide = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsFn"])(f.on_hide_loader, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + return _this; + } + /** + * Initializes Loader instance + */ + + + _createClass(Loader, [{ + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized) { + return; + } + + var tf = this.tf; + var emitter = this.emitter; + var containerDiv = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('div'); + containerDiv.className = this.cssClass; + var targetEl = !this.targetId ? tf.dom().parentNode : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.targetId); + + if (!this.targetId) { + targetEl.insertBefore(containerDiv, tf.dom()); + } else { + targetEl.appendChild(containerDiv); + } + + this.cont = containerDiv; + + if (!this.html) { + this.cont.appendChild(Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createText"])(this.text)); + } else { + this.cont.innerHTML = this.html; + } + + this.show(_const__WEBPACK_IMPORTED_MODULE_4__["NONE"]); // Subscribe to events + + emitter.on(BEFORE_ACTION_EVENTS, function () { + return _this2.show(''); + }); + emitter.on(AFTER_ACTION_EVENTS, function () { + return _this2.show(_const__WEBPACK_IMPORTED_MODULE_4__["NONE"]); + }); + /** @inherited */ + + this.initialized = true; + } + /** + * Shows or hides activity indicator + * @param {String} Two possible values: '' or 'none' + */ + + }, { + key: "show", + value: function show(p) { + if (!this.isEnabled()) { + return; + } + + function displayLoader() { + if (!this.cont) { + return; + } + + if (p !== _const__WEBPACK_IMPORTED_MODULE_4__["NONE"]) { + this.onShow(this); + } + + this.cont.style.display = p; + + if (p === _const__WEBPACK_IMPORTED_MODULE_4__["NONE"]) { + this.onHide(this); + } + } + + ; + var t = p === _const__WEBPACK_IMPORTED_MODULE_4__["NONE"] ? this.closeDelay : 1; + _root__WEBPACK_IMPORTED_MODULE_3__["root"].setTimeout(displayLoader.bind(this), t); + } + /** + * Removes feature + */ + + }, { + key: "destroy", + value: function destroy() { + var _this3 = this; + + if (!this.initialized) { + return; + } + + var emitter = this.emitter; + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.cont); + this.cont = null; // Unsubscribe to events + + emitter.off(BEFORE_ACTION_EVENTS, function () { + return _this3.show(''); + }); + emitter.off(AFTER_ACTION_EVENTS, function () { + return _this3.show(_const__WEBPACK_IMPORTED_MODULE_4__["NONE"]); + }); + this.initialized = false; + } + }]); + + return Loader; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + +/***/ }), + +/***/ "./src/modules/markActiveColumns.js": +/*!******************************************!*\ + !*** ./src/modules/markActiveColumns.js ***! + \******************************************/ +/*! exports provided: MarkActiveColumns */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MarkActiveColumns", function() { return MarkActiveColumns; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom */ "./src/dom.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../types */ "./src/types.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../settings */ "./src/settings.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + +/** + * Visual indicator for filtered columns + * @export + * @class MarkActiveColumns + * @extends {Feature} + */ + +var MarkActiveColumns = +/*#__PURE__*/ +function (_Feature) { + _inherits(MarkActiveColumns, _Feature); + + /** + * Create an instance of MarkActiveColumns + * @param {TableFilter} tf TableFilter instance + */ + function MarkActiveColumns(tf) { + var _this; + + _classCallCheck(this, MarkActiveColumns); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(MarkActiveColumns).call(this, tf, 'markActiveColumns')); + var config = _this.config.mark_active_columns || {}; + /** + * Css class for filtered (active) columns + * @type {String} + */ + + _this.headerCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(config.header_css_class, 'activeHeader'); + /** + * Css class for filtered (active) column cells + * @type {String} + */ + + _this.cellCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(config.cell_css_class, 'activeCell'); + /** + * Enable/disable column highlighting + * @type {Boolean} + */ + + _this.highlightColumn = Boolean(config.highlight_column); + /** + * Callback fired before a column is marked as filtered + * @type {Function} + */ + + _this.onBeforeActiveColumn = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsFn"])(config.on_before_active_column, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after a column is marked as filtered + * @type {Function} + */ + + _this.onAfterActiveColumn = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsFn"])(config.on_after_active_column, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + return _this; + } + /** + * Initialise MarkActiveColumns instance + */ + + + _createClass(MarkActiveColumns, [{ + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized) { + return; + } + + this.emitter.on(['before-filtering'], function () { + return _this2.clearActiveColumns(); + }); + this.emitter.on(['cell-processed'], function (tf, colIndex) { + return _this2.markActiveColumn(colIndex); + }); + /** @inherited */ + + this.initialized = true; + } + /** + * Clear filtered columns visual indicator (background color) + */ + + }, { + key: "clearActiveColumns", + value: function clearActiveColumns() { + var _this3 = this; + + var tf = this.tf; + tf.eachCol(function (idx) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeClass"])(tf.getHeaderElement(idx), _this3.headerCssClass); + + if (_this3.highlightColumn) { + _this3.eachColumnCell(idx, function (cell) { + return Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeClass"])(cell, _this3.cellCssClass); + }); + } + }); + } + /** + * Mark currently filtered column + * @param {Number} colIndex Column index + */ + + }, { + key: "markActiveColumn", + value: function markActiveColumn(colIndex) { + var _this4 = this; + + var tf = this.tf; + var header = tf.getHeaderElement(colIndex); + + if (Object(_dom__WEBPACK_IMPORTED_MODULE_1__["hasClass"])(header, this.headerCssClass)) { + return; + } + + this.onBeforeActiveColumn(this, colIndex); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(header, this.headerCssClass); + + if (this.highlightColumn) { + this.eachColumnCell(colIndex, function (cell) { + return Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(cell, _this4.cellCssClass); + }); + } + + this.onAfterActiveColumn(this, colIndex); + } + /** + * Column cells iterator + * TODO: make public and move into TableFilter if used elsewhere + * @param {Number} colIndex + * @param {Function} fn + * @param {DOMElement} tbl + * @private + */ + + }, { + key: "eachColumnCell", + value: function eachColumnCell(colIndex) { + var fn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]; + var tbl = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.tf.dom(); + // TODO: remove [].forEach when polyfill for PhanthomJs is available + [].forEach.call(tbl.querySelectorAll("tbody td:nth-child(".concat(colIndex + 1, ")")), fn); + } + /** + * Remove feature + */ + + }, { + key: "destroy", + value: function destroy() { + var _this5 = this; + + if (!this.initialized) { + return; + } + + this.clearActiveColumns(); + this.emitter.off(['before-filtering'], function () { + return _this5.clearActiveColumns(); + }); + this.emitter.off(['cell-processed'], function (tf, colIndex) { + return _this5.markActiveColumn(colIndex); + }); + /** @inherited */ + + this.initialized = false; + } + }]); + + return MarkActiveColumns; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + +/***/ }), + +/***/ "./src/modules/noResults.js": +/*!**********************************!*\ + !*** ./src/modules/noResults.js ***! + \**********************************/ +/*! exports provided: NoResults */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NoResults", function() { return NoResults; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom */ "./src/dom.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../types */ "./src/types.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../const */ "./src/const.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../settings */ "./src/settings.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + +/** + * UI when filtering yields no matches + * @export + * @class NoResults + * @extends {Feature} + */ + +var NoResults = +/*#__PURE__*/ +function (_Feature) { + _inherits(NoResults, _Feature); + + /** + * Creates an instance of NoResults + * @param {TableFilter} tf TableFilter instance + */ + function NoResults(tf) { + var _this; + + _classCallCheck(this, NoResults); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(NoResults).call(this, tf, 'noResults')); //configuration object + + var f = _this.config.no_results_message || {}; + /** + * Text (accepts HTML) + * @type {String} + */ + + _this.content = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.content, 'No results'); + /** + * Custom container DOM element + * @type {DOMElement} + */ + + _this.customContainer = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.custom_container, null); + /** + * ID of custom container element + * @type {String} + */ + + _this.customContainerId = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.custom_container_id, null); + /** + * Indicates if UI is contained in a external element + * @type {Boolean} + * @private + */ + + _this.isExternal = !Object(_types__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(_this.customContainer) || !Object(_types__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(_this.customContainerId); + /** + * Css class assigned to container element + * @type {String} + */ + + _this.cssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.css_class, 'no-results'); + /** + * Stores container DOM element + * @type {DOMElement} + */ + + _this.cont = null; + /** + * Callback fired before the message is displayed + * @type {Function} + */ + + _this.onBeforeShow = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_before_show_msg, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after the message is displayed + * @type {Function} + */ + + _this.onAfterShow = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_after_show_msg, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired before the message is hidden + * @type {Function} + */ + + _this.onBeforeHide = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_before_hide_msg, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after the message is hidden + * @type {Function} + */ + + _this.onAfterHide = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_after_hide_msg, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + return _this; + } + /** + * Initializes NoResults instance + */ + + + _createClass(NoResults, [{ + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized) { + return; + } + + var tf = this.tf; + var target = this.customContainer || Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.customContainerId) || tf.dom(); //container + + var cont = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('div'); + cont.className = this.cssClass; + cont.innerHTML = this.content; + + if (this.isExternal) { + target.appendChild(cont); + } else { + target.parentNode.insertBefore(cont, target.nextSibling); + } + + this.cont = cont; // subscribe to after-filtering event + + this.emitter.on(['initialized', 'after-filtering'], function () { + return _this2.toggle(); + }); + /** @inherited */ + + this.initialized = true; + } + /** + * Toggle no results message + */ + + }, { + key: "toggle", + value: function toggle() { + if (this.tf.getValidRowsNb() > 0) { + this.hide(); + } else { + this.show(); + } + } + /** + * Show no results message + */ + + }, { + key: "show", + value: function show() { + if (!this.initialized || !this.isEnabled()) { + return; + } + + this.onBeforeShow(this.tf, this); + this.setWidth(); + this.cont.style.display = 'block'; + this.onAfterShow(this.tf, this); + } + /** + * Hide no results message + */ + + }, { + key: "hide", + value: function hide() { + if (!this.initialized || !this.isEnabled()) { + return; + } + + this.onBeforeHide(this.tf, this); + this.cont.style.display = _const__WEBPACK_IMPORTED_MODULE_3__["NONE"]; + this.onAfterHide(this.tf, this); + } + /** + * Sets no results container width + * @private + */ + + }, { + key: "setWidth", + value: function setWidth() { + if (!this.initialized || this.isExternal || !this.isEnabled()) { + return; + } + + var tf = this.tf; + + if (tf.gridLayout) { + var gridLayout = tf.feature('gridLayout'); + this.cont.style.width = gridLayout.headTbl.clientWidth + 'px'; + } else { + this.cont.style.width = (tf.dom().tHead ? tf.dom().tHead.clientWidth : tf.dom().tBodies[0].clientWidth) + 'px'; + } + } + /** Remove feature */ + + }, { + key: "destroy", + value: function destroy() { + var _this3 = this; + + if (!this.initialized) { + return; + } + + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.cont); + this.cont = null; // unsubscribe to after-filtering event + + this.emitter.off(['after-filtering'], function () { + return _this3.toggle(); + }); + this.initialized = false; + } + }]); + + return NoResults; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + +/***/ }), + +/***/ "./src/modules/paging.js": +/*!*******************************!*\ + !*** ./src/modules/paging.js ***! + \*******************************/ +/*! exports provided: Paging */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Paging", function() { return Paging; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom */ "./src/dom.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../types */ "./src/types.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../event */ "./src/event.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../const */ "./src/const.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../settings */ "./src/settings.js"); +/* harmony import */ var _toolbar__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./toolbar */ "./src/modules/toolbar.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + + + + + + + + +/** + * Paging UI component + * @export + * @class Paging + * @extends {Feature} + */ + +var Paging = +/*#__PURE__*/ +function (_Feature) { + _inherits(Paging, _Feature); + + /** + * Creates an instance of Paging + * @param {TableFilter} tf TableFilter instance + */ + function Paging(tf) { + var _this; + + _classCallCheck(this, Paging); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(Paging).call(this, tf, 'paging')); // Configuration object + + var f = _this.config.paging || {}; + /** + * Css class for the paging buttons (previous, next, etc.) + * @type {String} + */ + + _this.btnCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.btn_css_class, 'pgInp'); + /** + * Main select DOM element + * @type {DOMElement} + */ + + _this.pageSlc = null; + /** + * Results per page select DOM element + * @type {DOMElement} + */ + + _this.pageLengthSlc = null; + /** + * ID of custom container element + * @type {String} + */ + + _this.tgtId = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.target_id, null); + /** + * Number of rows contained in a page + * @type {Number} + */ + + _this.pageLength = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsNb"])(f.length, 10); + /** + * ID of custom container element for the results per page selector + * @type {String} + */ + + _this.pageLengthTgtId = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.results_per_page_target_id, null); + /** + * Css class for the paging select element + * @type {String} + */ + + _this.pgSlcCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.slc_css_class, 'pgSlc'); + /** + * Css class for the paging input element + * @type {String} + */ + + _this.pgInpCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.inp_css_class, 'pgNbInp'); + /** + * Label and values for the results per page select, example of usage: + * ['Records: ', [10,25,50,100]] + * @type {Array} + */ + + _this.resultsPerPage = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsArr"])(f.results_per_page, null); + /** + * Determines if results per page is configured + * @type {Boolean} + */ + + _this.hasResultsPerPage = Object(_types__WEBPACK_IMPORTED_MODULE_2__["isArray"])(_this.resultsPerPage); + /** + * Css class for the results per page select + * @type {String} + */ + + _this.resultsSlcCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.results_slc_css_class, 'rspg'); + /** + * Css class for the label preceding results per page select + * @type {String} + */ + + _this.resultsSpanCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.results_span_css_class, 'rspgSpan'); + /** + * Index of the first row of current page + * @type {Number} + * @private + */ + + _this.startPagingRow = 0; + /** + * Total number of pages + * @type {Number} + * @private + */ + + _this.nbPages = 0; + /** + * Current page number + * @type {Number} + * @private + */ + + _this.currentPageNb = 1; + /** + * Next page button text + * @type {String} + */ + + _this.btnNextPageText = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.btn_next_page_text, '>'); + /** + * Previous page button text + * @type {String} + */ + + _this.btnPrevPageText = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.btn_prev_page_text, '<'); + /** + * Last page button text + * @type {String} + */ + + _this.btnLastPageText = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.btn_last_page_text, '>|'); + /** + * First page button text + * @type {String} + */ + + _this.btnFirstPageText = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.btn_first_page_text, '|<'); + /** + * Next page button HTML + * @type {String} + */ + + _this.btnNextPageHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.btn_next_page_html, !tf.enableIcons ? null : ''); + /** + * Previous page button HTML + * @type {String} + */ + + _this.btnPrevPageHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.btn_prev_page_html, !tf.enableIcons ? null : ''); + /** + * First page button HTML + * @type {String} + */ + + _this.btnFirstPageHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.btn_first_page_html, !tf.enableIcons ? null : ''); + /** + * Last page button HTML + * @type {String} + */ + + _this.btnLastPageHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.btn_last_page_html, !tf.enableIcons ? null : ''); + /** + * Text preceeding page selector drop-down + * @type {String} + */ + + _this.pageText = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.page_text, ' Page '); + /** + * Text after page selector drop-down + * @type {String} + */ + + _this.ofText = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.of_text, ' of '); + /** + * Css class for the span containing total number of pages + * @type {String} + */ + + _this.nbPgSpanCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.nb_pages_css_class, 'nbpg'); + /** + * Determines if paging buttons are enabled (default: true) + * @type {Boolean} + */ + + _this.hasBtns = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsBool"])(f.btns, true); + /** + * Defines page selector type, two possible values: 'select', 'input' + * @type {String} + */ + + _this.pageSelectorType = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.page_selector_type, _const__WEBPACK_IMPORTED_MODULE_4__["SELECT"]); + /** + * Default position in toolbar ('left'|'center'|'right') + * @type {String} + */ + + _this.toolbarPosition = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.toolbar_position, _toolbar__WEBPACK_IMPORTED_MODULE_6__["CENTER"]); + /** + * Callback fired before the page is changed + * @type {Function} + */ + + _this.onBeforeChangePage = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsFn"])(f.on_before_change_page, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after the page is changed + * @type {Function} + */ + + _this.onAfterChangePage = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsFn"])(f.on_after_change_page, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Label preciding results per page select + * @type {DOMElement} + * @private + */ + + _this.slcResultsTxt = null; + /** + * Span containing next page button + * @type {DOMElement} + * @private + */ + + _this.btnNextCont = null; + /** + * Span containing previous page button + * @type {DOMElement} + * @private + */ + + _this.btnPrevCont = null; + /** + * Span containing last page button + * @type {DOMElement} + * @private + */ + + _this.btnLastCont = null; + /** + * Span containing first page button + * @type {DOMElement} + * @private + */ + + _this.btnFirstCont = null; + /** + * Span for tot nb pages + * @type {DOMElement} + * @private + */ + + _this.pgCont = null; + /** + * Span preceding pages select (contains 'Page') + * @type {DOMElement} + * @private + */ + + _this.pgBefore = null; + /** + * Span following pages select (contains ' of ') + * @type {DOMElement} + * @private + */ + + _this.pgAfter = null; + var startRow = tf.refRow; + var nrows = tf.getRowsNb(true); //calculates page nb + + _this.nbPages = Math.ceil((nrows - startRow) / _this.pageLength); + + var o = _assertThisInitialized(_assertThisInitialized(_this)); + /** + * Paging DOM events handlers + * @type {String} + * @private + */ + + + _this.evt = { + slcIndex: function slcIndex() { + return o.pageSelectorType === _const__WEBPACK_IMPORTED_MODULE_4__["SELECT"] ? o.pageSlc.options.selectedIndex : parseInt(o.pageSlc.value, 10) - 1; + }, + nbOpts: function nbOpts() { + return o.pageSelectorType === _const__WEBPACK_IMPORTED_MODULE_4__["SELECT"] ? parseInt(o.pageSlc.options.length, 10) - 1 : o.nbPages - 1; + }, + next: function next() { + var nextIndex = o.evt.slcIndex() < o.evt.nbOpts() ? o.evt.slcIndex() + 1 : 0; + o.changePage(nextIndex); + }, + prev: function prev() { + var prevIndex = o.evt.slcIndex() > 0 ? o.evt.slcIndex() - 1 : o.evt.nbOpts(); + o.changePage(prevIndex); + }, + last: function last() { + o.changePage(o.evt.nbOpts()); + }, + first: function first() { + o.changePage(0); + }, + _detectKey: function _detectKey(e) { + if (Object(_event__WEBPACK_IMPORTED_MODULE_3__["isKeyPressed"])(e, [_const__WEBPACK_IMPORTED_MODULE_4__["ENTER_KEY"]])) { + if (tf.sorted) { + tf.filter(); + o.changePage(o.evt.slcIndex()); + } else { + o.changePage(); + } + + this.blur(); + } + }, + slcPagesChange: null, + nextEvt: null, + prevEvt: null, + lastEvt: null, + firstEvt: null + }; + return _this; + } + /** + * Initialize DOM elements + */ + + + _createClass(Paging, [{ + key: "init", + value: function init() { + var _this2 = this; + + var slcPages; + var tf = this.tf; + var evt = this.evt; + + if (this.initialized) { + return; + } + + this.emitter.emit('initializing-feature', this, !Object(_types__WEBPACK_IMPORTED_MODULE_2__["isNull"])(this.tgtId)); // Check resultsPerPage is in expected format and initialise the + // results per page component + + if (this.hasResultsPerPage) { + if (this.resultsPerPage.length < 2) { + this.hasResultsPerPage = false; + } else { + this.pageLength = this.resultsPerPage[1][0]; + this.setResultsPerPage(); + } + } + + evt.slcPagesChange = function (event) { + var slc = event.target; + + _this2.changePage(slc.selectedIndex); + }; // Paging drop-down list selector + + + if (this.pageSelectorType === _const__WEBPACK_IMPORTED_MODULE_4__["SELECT"]) { + slcPages = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])(_const__WEBPACK_IMPORTED_MODULE_4__["SELECT"]); + slcPages.className = this.pgSlcCssClass; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(slcPages, 'change', evt.slcPagesChange); + } // Paging input selector + + + if (this.pageSelectorType === _const__WEBPACK_IMPORTED_MODULE_4__["INPUT"]) { + slcPages = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])(_const__WEBPACK_IMPORTED_MODULE_4__["INPUT"], ['value', this.currentPageNb]); + slcPages.className = this.pgInpCssClass; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(slcPages, 'keypress', evt._detectKey); + } // btns containers + + + var btnNextSpan = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span'); + var btnPrevSpan = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span'); + var btnLastSpan = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span'); + var btnFirstSpan = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span'); + + if (this.hasBtns) { + // Next button + if (!this.btnNextPageHtml) { + var btnNext = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])(_const__WEBPACK_IMPORTED_MODULE_4__["INPUT"], ['type', 'button'], ['value', this.btnNextPageText], ['title', 'Next']); + btnNext.className = this.btnCssClass; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btnNext, 'click', evt.next); + btnNextSpan.appendChild(btnNext); + } else { + btnNextSpan.innerHTML = this.btnNextPageHtml; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btnNextSpan, 'click', evt.next); + } // Previous button + + + if (!this.btnPrevPageHtml) { + var btnPrev = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])(_const__WEBPACK_IMPORTED_MODULE_4__["INPUT"], ['type', 'button'], ['value', this.btnPrevPageText], ['title', 'Previous']); + btnPrev.className = this.btnCssClass; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btnPrev, 'click', evt.prev); + btnPrevSpan.appendChild(btnPrev); + } else { + btnPrevSpan.innerHTML = this.btnPrevPageHtml; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btnPrevSpan, 'click', evt.prev); + } // Last button + + + if (!this.btnLastPageHtml) { + var btnLast = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])(_const__WEBPACK_IMPORTED_MODULE_4__["INPUT"], ['type', 'button'], ['value', this.btnLastPageText], ['title', 'Last']); + btnLast.className = this.btnCssClass; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btnLast, 'click', evt.last); + btnLastSpan.appendChild(btnLast); + } else { + btnLastSpan.innerHTML = this.btnLastPageHtml; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btnLastSpan, 'click', evt.last); + } // First button + + + if (!this.btnFirstPageHtml) { + var btnFirst = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])(_const__WEBPACK_IMPORTED_MODULE_4__["INPUT"], ['type', 'button'], ['value', this.btnFirstPageText], ['title', 'First']); + btnFirst.className = this.btnCssClass; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btnFirst, 'click', evt.first); + btnFirstSpan.appendChild(btnFirst); + } else { + btnFirstSpan.innerHTML = this.btnFirstPageHtml; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btnFirstSpan, 'click', evt.first); + } + } // paging elements (buttons+drop-down list) are added to defined element + + + var targetEl = !this.tgtId ? tf.feature('toolbar').container(this.toolbarPosition) : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.tgtId); + targetEl.appendChild(btnFirstSpan); + targetEl.appendChild(btnPrevSpan); + var pgBeforeSpan = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span'); + pgBeforeSpan.appendChild(Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createText"])(this.pageText)); + pgBeforeSpan.className = this.nbPgSpanCssClass; + targetEl.appendChild(pgBeforeSpan); + targetEl.appendChild(slcPages); + var pgAfterSpan = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span'); + pgAfterSpan.appendChild(Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createText"])(this.ofText)); + pgAfterSpan.className = this.nbPgSpanCssClass; + targetEl.appendChild(pgAfterSpan); + var pgSpan = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span'); + pgSpan.className = this.nbPgSpanCssClass; + pgSpan.appendChild(Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createText"])(' ' + this.nbPages + ' ')); + targetEl.appendChild(pgSpan); + targetEl.appendChild(btnNextSpan); + targetEl.appendChild(btnLastSpan); + this.btnNextCont = btnNextSpan; + this.btnPrevCont = btnPrevSpan; + this.btnLastCont = btnLastSpan; + this.btnFirstCont = btnFirstSpan; + this.pgCont = pgSpan; + this.pgBefore = pgBeforeSpan; + this.pgAfter = pgAfterSpan; + this.pageSlc = slcPages; + this.setPagingInfo(); + + if (!tf.fltGrid) { + tf.validateAllRows(); + this.setPagingInfo(tf.validRowsIndex); + } + + this.emitter.on(['after-filtering'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.resetPagingInfo, this)); + this.emitter.on(['change-page'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.changePageHandler, this)); + this.emitter.on(['change-page-results'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.changePageResultsHandler, this)); + /** @inherited */ + + this.initialized = true; + this.emitter.emit('feature-initialized', this); + } + /** + * Reset paging when filters are already instantiated + * @param {Boolean} filterTable Execute filtering once paging instanciated + */ + + }, { + key: "reset", + value: function reset() { + var filterTable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + this.enable(); + this.init(); + + if (filterTable) { + this.tf.filter(); + } + } + /** + * Reset paging info from scratch after a filtering process + */ + + }, { + key: "resetPagingInfo", + value: function resetPagingInfo() { + this.startPagingRow = 0; + this.currentPageNb = 1; + this.setPagingInfo(this.tf.validRowsIndex); + } + /** + * Calculate number of pages based on valid rows + * Refresh paging select according to number of pages + * @param {Array} validRows Collection of valid rows + */ + + }, { + key: "setPagingInfo", + value: function setPagingInfo(validRows) { + var tf = this.tf; + var cont = !this.tgtId ? tf.feature('toolbar').container(this.toolbarPosition) : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.tgtId); //store valid rows indexes + + tf.validRowsIndex = validRows || tf.getValidRows(true); //calculate nb of pages + + this.nbPages = Math.ceil(tf.validRowsIndex.length / this.pageLength); //refresh page nb span + + this.pgCont.innerHTML = this.nbPages; //select clearing shortcut + + if (this.pageSelectorType === _const__WEBPACK_IMPORTED_MODULE_4__["SELECT"]) { + this.pageSlc.innerHTML = ''; + } + + if (this.nbPages > 0) { + cont.style.visibility = 'visible'; + + if (this.pageSelectorType === _const__WEBPACK_IMPORTED_MODULE_4__["SELECT"]) { + for (var z = 0; z < this.nbPages; z++) { + var opt = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createOpt"])(z + 1, z * this.pageLength, false); + this.pageSlc.options[z] = opt; + } + } else { + //input type + this.pageSlc.value = this.currentPageNb; + } + } else { + /*** if no results paging select and buttons are hidden ***/ + cont.style.visibility = 'hidden'; + } + + this.groupByPage(tf.validRowsIndex); + } + /** + * Group table rows by page and display valid rows + * @param {Array} validRows Collection of valid rows + */ + + }, { + key: "groupByPage", + value: function groupByPage(validRows) { + var tf = this.tf; + var rows = tf.dom().rows; + var startPagingRow = parseInt(this.startPagingRow, 10); + var endPagingRow = startPagingRow + parseInt(this.pageLength, 10); //store valid rows indexes + + if (validRows) { + tf.validRowsIndex = validRows; + } //this loop shows valid rows of current page + + + for (var h = 0, len = tf.getValidRowsNb(true); h < len; h++) { + var validRowIdx = tf.validRowsIndex[h]; + var r = rows[validRowIdx]; + var isRowValid = r.getAttribute('validRow'); + var rowDisplayed = false; + + if (h >= startPagingRow && h < endPagingRow) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isNull"])(isRowValid) || Boolean(isRowValid === 'true')) { + r.style.display = ''; + rowDisplayed = true; + } + } else { + r.style.display = _const__WEBPACK_IMPORTED_MODULE_4__["NONE"]; + } + + this.emitter.emit('row-paged', tf, validRowIdx, h, rowDisplayed); + } // broadcast grouping by page + + + this.emitter.emit('grouped-by-page', tf, this); + } + /** + * Return the current page number + * @return {Number} Page number + */ + + }, { + key: "getPage", + value: function getPage() { + return this.currentPageNb; + } + /** + * Show page defined by passed argument (string or number): + * @param {String}/{Number} cmd possible string values: 'next', + * 'previous', 'last', 'first' or page number as per param + */ + + }, { + key: "setPage", + value: function setPage(cmd) { + var tf = this.tf; + + if (!tf.isInitialized() || !this.isEnabled()) { + return; + } + + var btnEvt = this.evt, + cmdtype = _typeof(cmd); + + if (cmdtype === 'string') { + switch (cmd.toLowerCase()) { + case 'next': + btnEvt.next(); + break; + + case 'previous': + btnEvt.prev(); + break; + + case 'last': + btnEvt.last(); + break; + + case 'first': + btnEvt.first(); + break; + + default: + btnEvt.next(); + break; + } + } else if (cmdtype === 'number') { + this.changePage(cmd - 1); + } + } + /** + * Generates UI elements for the number of results per page drop-down + */ + + }, { + key: "setResultsPerPage", + value: function setResultsPerPage() { + var _this3 = this; + + var tf = this.tf; + var evt = this.evt; + + if (this.pageLengthSlc || !this.resultsPerPage) { + return; + } + + evt.slcResultsChange = function (ev) { + _this3.onChangeResultsPerPage(); + + ev.target.blur(); + }; + + var slcR = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])(_const__WEBPACK_IMPORTED_MODULE_4__["SELECT"]); + slcR.className = this.resultsSlcCssClass; + var slcRText = this.resultsPerPage[0], + slcROpts = this.resultsPerPage[1]; + var slcRSpan = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span'); + slcRSpan.className = this.resultsSpanCssClass; // results per page select is added to external element + + var targetEl = !this.pageLengthTgtId ? tf.feature('toolbar').container(_toolbar__WEBPACK_IMPORTED_MODULE_6__["RIGHT"]) : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.pageLengthTgtId); + slcRSpan.appendChild(Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createText"])(slcRText)); + var help = tf.feature('help'); + + if (help && help.btn) { + help.btn.parentNode.insertBefore(slcRSpan, help.btn); + help.btn.parentNode.insertBefore(slcR, help.btn); + } else { + targetEl.appendChild(slcRSpan); + targetEl.appendChild(slcR); + } + + for (var r = 0; r < slcROpts.length; r++) { + var currOpt = new Option(slcROpts[r], slcROpts[r], false, false); + slcR.options[r] = currOpt; + } + + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(slcR, 'change', evt.slcResultsChange); + this.slcResultsTxt = slcRSpan; + this.pageLengthSlc = slcR; + } + /** + * Remove number of results per page UI elements + */ + + }, { + key: "removeResultsPerPage", + value: function removeResultsPerPage() { + var tf = this.tf; + + if (!tf.isInitialized() || !this.pageLengthSlc || !this.resultsPerPage) { + return; + } + + if (this.pageLengthSlc) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.pageLengthSlc); + } + + if (this.slcResultsTxt) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.slcResultsTxt); + } + + this.pageLengthSlc = null; + this.slcResultsTxt = null; + } + /** + * Change the page based on passed index + * @param {Number} index Index of the page (0-n) + */ + + }, { + key: "changePage", + value: function changePage(index) { + var tf = this.tf; + + if (!this.isEnabled()) { + return; + } + + this.emitter.emit('before-page-change', tf, index + 1); + + if (index === null) { + index = this.pageSelectorType === _const__WEBPACK_IMPORTED_MODULE_4__["SELECT"] ? this.pageSlc.options.selectedIndex : this.pageSlc.value - 1; + } + + if (index >= 0 && index <= this.nbPages - 1) { + this.onBeforeChangePage(this, index + 1); + this.currentPageNb = parseInt(index, 10) + 1; + + if (this.pageSelectorType === _const__WEBPACK_IMPORTED_MODULE_4__["SELECT"]) { + this.pageSlc.options[index].selected = true; + } else { + this.pageSlc.value = this.currentPageNb; + } + + this.startPagingRow = this.pageSelectorType === _const__WEBPACK_IMPORTED_MODULE_4__["SELECT"] ? this.pageSlc.value : index * this.pageLength; + this.groupByPage(); + this.onAfterChangePage(this, index + 1); + } + + this.emitter.emit('after-page-change', tf, index + 1); + } + /** + * Change the number of results per page based on passed value + * @param {String} val The number of results per page + */ + + }, { + key: "changeResultsPerPage", + value: function changeResultsPerPage(val) { + if (!this.isEnabled() || isNaN(val)) { + return; + } + + this.pageLengthSlc.value = val; + this.onChangeResultsPerPage(); + } + /** + * Change rows according to page results drop-down + */ + + }, { + key: "onChangeResultsPerPage", + value: function onChangeResultsPerPage() { + var tf = this.tf; + + if (!this.isEnabled() || tf.getValidRowsNb() === 0) { + return; + } + + var slcR = this.pageLengthSlc, + pageSelectorType = this.pageSelectorType, + pageSlc = this.pageSlc, + emitter = this.emitter; + emitter.emit('before-page-length-change', tf); + var slcIndex = slcR.selectedIndex; + var slcPagesSelIndex = pageSelectorType === _const__WEBPACK_IMPORTED_MODULE_4__["SELECT"] ? pageSlc.selectedIndex : parseInt(pageSlc.value - 1, 10); + this.pageLength = parseInt(slcR.options[slcIndex].value, 10); + this.startPagingRow = this.pageLength * slcPagesSelIndex; + + if (!isNaN(this.pageLength)) { + if (this.startPagingRow >= tf.nbFilterableRows) { + this.startPagingRow = tf.nbFilterableRows - this.pageLength; + } + + this.setPagingInfo(); + + if (pageSelectorType === _const__WEBPACK_IMPORTED_MODULE_4__["SELECT"]) { + var slcIdx = pageSlc.options.length - 1 <= slcPagesSelIndex ? pageSlc.options.length - 1 : slcPagesSelIndex; + pageSlc.options[slcIdx].selected = true; + } + } + + emitter.emit('after-page-length-change', tf, this.pageLength); + } + /** + * Re-set page nb at page re-load + */ + + }, { + key: "resetPage", + value: function resetPage() { + var tf = this.tf; + + if (!this.isEnabled()) { + return; + } + + this.emitter.emit('before-reset-page', tf); + var pgNb = tf.feature('store').getPageNb(); + + if (pgNb !== '') { + this.changePage(pgNb - 1); + } + + this.emitter.emit('after-reset-page', tf, pgNb); + } + /** + * Re-set page length value at page re-load + */ + + }, { + key: "resetPageLength", + value: function resetPageLength() { + var tf = this.tf; + + if (!this.isEnabled()) { + return; + } + + this.emitter.emit('before-reset-page-length', tf); + var pglenIndex = tf.feature('store').getPageLength(); + + if (pglenIndex !== '') { + this.pageLengthSlc.options[pglenIndex].selected = true; + this.changeResultsPerPage(); + } + + this.emitter.emit('after-reset-page-length', tf, pglenIndex); + } + /** @private */ + + }, { + key: "changePageHandler", + value: function changePageHandler(tf, pageNumber) { + this.setPage(pageNumber); + } + /** @private */ + + }, { + key: "changePageResultsHandler", + value: function changePageResultsHandler(tf, pageLength) { + this.changeResultsPerPage(pageLength); + } + /** + * Remove paging feature + */ + + }, { + key: "destroy", + value: function destroy() { + if (!this.initialized) { + return; + } + + var evt = this.evt; + + if (this.pageSlc) { + if (this.pageSelectorType === _const__WEBPACK_IMPORTED_MODULE_4__["SELECT"]) { + Object(_event__WEBPACK_IMPORTED_MODULE_3__["removeEvt"])(this.pageSlc, 'change', evt.slcPagesChange); + } else if (this.pageSelectorType === _const__WEBPACK_IMPORTED_MODULE_4__["INPUT"]) { + Object(_event__WEBPACK_IMPORTED_MODULE_3__["removeEvt"])(this.pageSlc, 'keypress', evt._detectKey); + } + + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.pageSlc); + } + + if (this.btnNextCont) { + Object(_event__WEBPACK_IMPORTED_MODULE_3__["removeEvt"])(this.btnNextCont, 'click', evt.next); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.btnNextCont); + this.btnNextCont = null; + } + + if (this.btnPrevCont) { + Object(_event__WEBPACK_IMPORTED_MODULE_3__["removeEvt"])(this.btnPrevCont, 'click', evt.prev); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.btnPrevCont); + this.btnPrevCont = null; + } + + if (this.btnLastCont) { + Object(_event__WEBPACK_IMPORTED_MODULE_3__["removeEvt"])(this.btnLastCont, 'click', evt.last); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.btnLastCont); + this.btnLastCont = null; + } + + if (this.btnFirstCont) { + Object(_event__WEBPACK_IMPORTED_MODULE_3__["removeEvt"])(this.btnFirstCont, 'click', evt.first); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.btnFirstCont); + this.btnFirstCont = null; + } + + if (this.pgBefore) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.pgBefore); + this.pgBefore = null; + } + + if (this.pgAfter) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.pgAfter); + this.pgAfter = null; + } + + if (this.pgCont) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.pgCont); + this.pgCont = null; + } + + if (this.hasResultsPerPage) { + this.removeResultsPerPage(); + } + + this.emitter.off(['after-filtering'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.resetPagingInfo, this)); + this.emitter.off(['change-page'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.changePageHandler, this)); + this.emitter.off(['change-page-results'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.changePageResultsHandler, this)); + this.pageSlc = null; + this.nbPages = 0; + this.initialized = false; + } + }]); + + return Paging; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + +/***/ }), + +/***/ "./src/modules/popupFilter.js": +/*!************************************!*\ + !*** ./src/modules/popupFilter.js ***! + \************************************/ +/*! exports provided: PopupFilter */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PopupFilter", function() { return PopupFilter; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../feature */ "./src/feature.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../types */ "./src/types.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom */ "./src/dom.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../event */ "./src/event.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../const */ "./src/const.js"); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../root */ "./src/root.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../settings */ "./src/settings.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + + +/** + * Pop-up filter component + * @export + * @class PopupFilter + * @extends {Feature} + */ + +var PopupFilter = +/*#__PURE__*/ +function (_Feature) { + _inherits(PopupFilter, _Feature); + + /** + * Creates an instance of PopupFilter + * @param {TableFilter} tf TableFilter instance + */ + function PopupFilter(tf) { + var _this; + + _classCallCheck(this, PopupFilter); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(PopupFilter).call(this, tf, 'popupFilters')); // Configuration object + + var f = _this.config.popup_filters || {}; + /** + * Close active popup filter upon filtering, enabled by default + * @type {Boolean} + */ + + _this.closeOnFiltering = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsBool"])(f.close_on_filtering, true); + /** + * Filter icon path + * @type {String} + */ + + _this.iconPath = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.image, tf.themesPath + 'icn_filter.gif'); + /** + * Active filter icon path + * @type {string} + */ + + _this.activeIconPath = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.image_active, tf.themesPath + 'icn_filterActive.gif'); + /** + * HTML for the filter icon + * @type {string} + */ + + _this.iconHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.image_html, 'Column filter'); + /** + * Css class assigned to the popup container element + * @type {String} + */ + + _this.placeholderCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.placeholder_css_class, 'popUpPlaceholder'); + /** + * Css class assigned to filter container element + * @type {String} + */ + + _this.containerCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.div_css_class, 'popUpFilter'); + /** + * Ensure filter's container element width matches column width, enabled + * by default + * @type {Boolean} + */ + + _this.adjustToContainer = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsBool"])(f.adjust_to_container, true); + /** + * Callback fired before a popup filter is opened + * @type {Function} + */ + + _this.onBeforeOpen = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_popup_filter_open, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]); + /** + * Callback fired after a popup filter is opened + * @type {Function} + */ + + _this.onAfterOpen = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_popup_filter_open, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]); + /** + * Callback fired before a popup filter is closed + * @type {Function} + */ + + _this.onBeforeClose = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_popup_filter_close, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]); + /** + * Callback fired after a popup filter is closed + * @type {Function} + */ + + _this.onAfterClose = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_popup_filter_close, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]); + /** + * Collection of filters spans + * @type {Array} + * @private + */ + + _this.fltSpans = []; + /** + * Collection of filters icons + * @type {Array} + * @private + */ + + _this.fltIcons = []; + /** + * Collection of filters icons cached after pop-up filters are removed + * @type {Array} + * @private + */ + + _this.filtersCache = null; + /** + * Collection of filters containers + * @type {Array} + * @private + */ + + _this.fltElms = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(_this.filtersCache, []); + /** + * Prefix for pop-up filter container ID + * @type {String} + * @private + */ + + _this.prfxDiv = 'popup_'; + /** + * Column index of popup filter currently active + * @type {Number} + * @private + */ + + _this.activeFilterIdx = -1; + return _this; + } + /** + * Click event handler for pop-up filter icon + * @private + */ + + + _createClass(PopupFilter, [{ + key: "onClick", + value: function onClick(evt) { + var elm = Object(_event__WEBPACK_IMPORTED_MODULE_3__["targetEvt"])(evt).parentNode; + var colIndex = parseInt(elm.getAttribute('ci'), 10); + this.closeAll(colIndex); + this.toggle(colIndex); + + if (this.adjustToContainer) { + var cont = this.fltElms[colIndex], + header = this.tf.getHeaderElement(colIndex), + headerWidth = header.clientWidth * 0.95; + cont.style.width = parseInt(headerWidth, 10) + 'px'; + } + + Object(_event__WEBPACK_IMPORTED_MODULE_3__["cancelEvt"])(evt); + Object(_event__WEBPACK_IMPORTED_MODULE_3__["stopEvt"])(evt); + } + /** + * Mouse-up event handler handling popup filter auto-close behaviour + * @private + */ + + }, { + key: "onMouseup", + value: function onMouseup(evt) { + if (this.activeFilterIdx === -1) { + return; + } + + var targetElm = Object(_event__WEBPACK_IMPORTED_MODULE_3__["targetEvt"])(evt); + var activeFlt = this.fltElms[this.activeFilterIdx]; + var icon = this.fltIcons[this.activeFilterIdx]; + + if (icon === targetElm) { + return; + } + + while (targetElm && targetElm !== activeFlt) { + targetElm = targetElm.parentNode; + } + + if (targetElm !== activeFlt) { + this.close(this.activeFilterIdx); + } + + return; + } + /** + * Initialize DOM elements + */ + + }, { + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized) { + return; + } + + var tf = this.tf; // Enable external filters + + tf.externalFltIds = ['']; // Override filters row index supplied by configuration + + tf.filtersRowIndex = 0; // Override headers row index if no grouped headers + // TODO: Because of the filters row generation, headers row index needs + // adjusting: prevent useless row generation + + if (tf.headersRow <= 1 && isNaN(tf.config().headers_row_index)) { + tf.headersRow = 0; + } // Adjust headers row index for grid-layout mode + // TODO: Because of the filters row generation, headers row index needs + // adjusting: prevent useless row generation + + + if (tf.gridLayout) { + tf.headersRow--; + this.buildIcons(); + } // subscribe to events + + + this.emitter.on(['before-filtering'], function () { + return _this2.setIconsState(); + }); + this.emitter.on(['after-filtering'], function () { + return _this2.closeAll(); + }); + this.emitter.on(['cell-processed'], function (tf, cellIndex) { + return _this2.changeState(cellIndex, true); + }); + this.emitter.on(['filters-row-inserted'], function () { + return _this2.buildIcons(); + }); + this.emitter.on(['before-filter-init'], function (tf, colIndex) { + return _this2.build(colIndex); + }); + /** @inherited */ + + this.initialized = true; + } + /** + * Reset previously destroyed feature + */ + + }, { + key: "reset", + value: function reset() { + this.enable(); + this.init(); + this.buildIcons(); + this.buildAll(); + } + /** + * Build all filters icons + */ + + }, { + key: "buildIcons", + value: function buildIcons() { + var _this3 = this; + + var tf = this.tf; // TODO: Because of the filters row generation, headers row index needs + // adjusting: prevent useless row generation + + tf.headersRow++; + tf.eachCol(function (i) { + var icon = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createElm"])('span', ['ci', i]); + icon.innerHTML = _this3.iconHtml; + var header = tf.getHeaderElement(i); + header.appendChild(icon); + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(icon, 'click', function (evt) { + return _this3.onClick(evt); + }); + _this3.fltSpans[i] = icon; + _this3.fltIcons[i] = icon.firstChild; + }, // continue condition function + function (i) { + return tf.getFilterType(i) === _const__WEBPACK_IMPORTED_MODULE_4__["NONE"]; + }); + } + /** + * Build all pop-up filters elements + */ + + }, { + key: "buildAll", + value: function buildAll() { + for (var i = 0; i < this.filtersCache.length; i++) { + this.build(i, this.filtersCache[i]); + } + } + /** + * Build a specified pop-up filter elements + * @param {Number} colIndex Column index + * @param {Object} div Optional container DOM element + */ + + }, { + key: "build", + value: function build(colIndex, div) { + var tf = this.tf; + var contId = "".concat(this.prfxDiv).concat(tf.id, "_").concat(colIndex); + var placeholder = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createElm"])('div', ['class', this.placeholderCssClass]); + var cont = div || Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createElm"])('div', ['id', contId], ['class', this.containerCssClass]); + tf.externalFltIds[colIndex] = cont.id; + placeholder.appendChild(cont); + var header = tf.getHeaderElement(colIndex); + header.insertBefore(placeholder, header.firstChild); + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(cont, 'click', function (evt) { + return Object(_event__WEBPACK_IMPORTED_MODULE_3__["stopEvt"])(evt); + }); + this.fltElms[colIndex] = cont; + } + /** + * Toggle visibility of specified filter + * @param {Number} colIndex Column index + */ + + }, { + key: "toggle", + value: function toggle(colIndex) { + if (!this.isOpen(colIndex)) { + this.open(colIndex); + } else { + this.close(colIndex); + } + } + /** + * Open popup filter of specified column + * @param {Number} colIndex Column index + */ + + }, { + key: "open", + value: function open(colIndex) { + var _this4 = this; + + var tf = this.tf, + container = this.fltElms[colIndex]; + this.onBeforeOpen(this, container, colIndex); + container.style.display = 'block'; + this.activeFilterIdx = colIndex; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(_root__WEBPACK_IMPORTED_MODULE_5__["root"], 'mouseup', function (evt) { + return _this4.onMouseup(evt); + }); + + if (tf.getFilterType(colIndex) === _const__WEBPACK_IMPORTED_MODULE_4__["INPUT"]) { + var flt = tf.getFilterElement(colIndex); + + if (flt) { + flt.focus(); + } + } + + this.onAfterOpen(this, container, colIndex); + } + /** + * Close popup filter of specified column + * @param {Number} colIndex Column index + */ + + }, { + key: "close", + value: function close(colIndex) { + var _this5 = this; + + var container = this.fltElms[colIndex]; + this.onBeforeClose(this, container, colIndex); + container.style.display = _const__WEBPACK_IMPORTED_MODULE_4__["NONE"]; + + if (this.activeFilterIdx === colIndex) { + this.activeFilterIdx = -1; + } + + Object(_event__WEBPACK_IMPORTED_MODULE_3__["removeEvt"])(_root__WEBPACK_IMPORTED_MODULE_5__["root"], 'mouseup', function (evt) { + return _this5.onMouseup(evt); + }); + this.onAfterClose(this, container, colIndex); + } + /** + * Check if popup filter for specified column is open + * @param {Number} colIndex Column index + * @returns {Boolean} + */ + + }, { + key: "isOpen", + value: function isOpen(colIndex) { + return this.fltElms[colIndex].style.display === 'block'; + } + /** + * Close all filters excepted for the specified one if any + * @param {Number} exceptIdx Column index of the filter to not close + */ + + }, { + key: "closeAll", + value: function closeAll(exceptIdx) { + // Do not close filters only if argument is undefined and close on + // filtering option is disabled + if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isUndef"])(exceptIdx) && !this.closeOnFiltering) { + return; + } + + for (var i = 0; i < this.fltElms.length; i++) { + if (i === exceptIdx) { + continue; + } + + var fltType = this.tf.getFilterType(i); + var isMultipleFilter = fltType === _const__WEBPACK_IMPORTED_MODULE_4__["CHECKLIST"] || fltType === _const__WEBPACK_IMPORTED_MODULE_4__["MULTIPLE"]; // Always hide all single selection filter types but hide multiple + // selection filter types only if index set + + if (!isMultipleFilter || !Object(_types__WEBPACK_IMPORTED_MODULE_1__["isUndef"])(exceptIdx)) { + this.close(i); + } + } + } + /** + * Build all the icons representing the pop-up filters + */ + + }, { + key: "setIconsState", + value: function setIconsState() { + for (var i = 0; i < this.fltIcons.length; i++) { + this.changeState(i, false); + } + } + /** + * Apply specified icon state + * @param {Number} colIndex Column index + * @param {Boolean} active Apply active state + */ + + }, { + key: "changeState", + value: function changeState(colIndex, active) { + var icon = this.fltIcons[colIndex]; + + if (icon) { + icon.src = active ? this.activeIconPath : this.iconPath; + } + } + /** + * Remove pop-up filters + */ + + }, { + key: "destroy", + value: function destroy() { + var _this6 = this; + + if (!this.initialized) { + return; + } + + this.filtersCache = []; + + for (var i = 0; i < this.fltElms.length; i++) { + var container = this.fltElms[i], + placeholder = container.parentNode, + icon = this.fltSpans[i], + iconImg = this.fltIcons[i]; + + if (container) { + Object(_dom__WEBPACK_IMPORTED_MODULE_2__["removeElm"])(container); + this.filtersCache[i] = container; + } + + container = null; + + if (placeholder) { + Object(_dom__WEBPACK_IMPORTED_MODULE_2__["removeElm"])(placeholder); + } + + placeholder = null; + + if (icon) { + Object(_dom__WEBPACK_IMPORTED_MODULE_2__["removeElm"])(icon); + } + + icon = null; + + if (iconImg) { + Object(_dom__WEBPACK_IMPORTED_MODULE_2__["removeElm"])(iconImg); + } + + iconImg = null; + } + + this.fltElms = []; + this.fltSpans = []; + this.fltIcons = []; // TODO: expose an API to handle external filter IDs + + this.tf.externalFltIds = []; // unsubscribe to events + + this.emitter.off(['before-filtering'], function () { + return _this6.setIconsState(); + }); + this.emitter.off(['after-filtering'], function () { + return _this6.closeAll(); + }); + this.emitter.off(['cell-processed'], function (tf, cellIndex) { + return _this6.changeState(cellIndex, true); + }); + this.emitter.off(['filters-row-inserted'], function () { + return _this6.buildIcons(); + }); + this.emitter.off(['before-filter-init'], function (tf, colIndex) { + return _this6.build(colIndex); + }); + this.initialized = false; + } + }]); + + return PopupFilter; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); // TODO: remove as soon as feature name is fixed + +PopupFilter.altName = 'popupFilters'; + +/***/ }), + +/***/ "./src/modules/rowsCounter.js": +/*!************************************!*\ + !*** ./src/modules/rowsCounter.js ***! + \************************************/ +/*! exports provided: RowsCounter */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RowsCounter", function() { return RowsCounter; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom */ "./src/dom.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../types */ "./src/types.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../settings */ "./src/settings.js"); +/* harmony import */ var _toolbar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./toolbar */ "./src/modules/toolbar.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + +/** + * Rows counter UI component + * @export + * @class RowsCounter + * @extends {Feature} + */ + +var RowsCounter = +/*#__PURE__*/ +function (_Feature) { + _inherits(RowsCounter, _Feature); + + /** + * Creates an instance of RowsCounter + * @param {TableFilter} tf TableFilter instance + */ + function RowsCounter(tf) { + var _this; + + _classCallCheck(this, RowsCounter); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(RowsCounter).call(this, tf, 'rowsCounter', RowsCounter)); // TableFilter configuration + + var f = _this.config.rows_counter || {}; + /** + * ID of custom container element + * @type {String} + */ + + _this.targetId = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(f.target_id, null); + /** + * Container DOM element + * @type {DOMElement} + * @private + */ + + _this.container = null; + /** + * Container DOM element for label displaying the total number of rows + * @type {DOMElement} + * @private + */ + + _this.label = null; + /** + * Text preceding the total number of rows + * @type {String} + */ + + _this.text = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(f.text, 'Rows: '); + /** + * Separator symbol appearing between the first and last visible rows of + * current page when paging is enabled. ie: Rows: 31-40 / 70 + * @type {String} + */ + + _this.fromToTextSeparator = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(f.separator, '-'); + /** + * Separator symbol appearing between the first and last visible rows of + * current page and the total number of filterable rows when paging is + * enabled. ie: Rows: 31-40 / 70 + * @type {String} + */ + + _this.overText = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(f.over_text, ' / '); + /** + * Css class for container element + * @type {String} + */ + + _this.cssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(f.css_class, 'tot'); + /** + * Default position in toolbar ('left'|'center'|'right') + * @type {String} + */ + + _this.toolbarPosition = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(f.toolbar_position, _toolbar__WEBPACK_IMPORTED_MODULE_4__["LEFT"]); + /** + * Callback fired before the counter is refreshed + * @type {Function} + */ + + _this.onBeforeRefreshCounter = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsFn"])(f.on_before_refresh_counter, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after the counter is refreshed + * @type {Function} + */ + + _this.onAfterRefreshCounter = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsFn"])(f.on_after_refresh_counter, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + return _this; + } + /** + * Initializes RowsCounter instance + */ + + + _createClass(RowsCounter, [{ + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized) { + return; + } + + this.emitter.emit('initializing-feature', this, !Object(_types__WEBPACK_IMPORTED_MODULE_2__["isNull"])(this.targetId)); + var tf = this.tf; //rows counter container + + var countDiv = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('div'); + countDiv.className = this.cssClass; //rows counter label + + var countSpan = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span'); + var countText = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span'); + countText.appendChild(Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createText"])(this.text)); // counter is added to defined element + + var targetEl = !this.targetId ? tf.feature('toolbar').container(this.toolbarPosition) : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.targetId); //default container: 'lDiv' + + if (!this.targetId) { + countDiv.appendChild(countText); + countDiv.appendChild(countSpan); + targetEl.appendChild(countDiv); + } else { + //custom container, no need to append statusDiv + targetEl.appendChild(countText); + targetEl.appendChild(countSpan); + } + + this.container = countDiv; + this.label = countSpan; // subscribe to events + + this.emitter.on(['after-filtering', 'grouped-by-page'], function () { + return _this2.refresh(tf.getValidRowsNb()); + }); + this.emitter.on(['rows-changed'], function () { + return _this2.refresh(); + }); + /** @inherited */ + + this.initialized = true; + this.refresh(); + this.emitter.emit('feature-initialized', this); + } + /** + * Refreshes the rows counter + * @param {Number} p Optional parameter the total number of rows to display + */ + + }, { + key: "refresh", + value: function refresh(p) { + if (!this.initialized || !this.isEnabled()) { + return; + } + + var tf = this.tf; + this.onBeforeRefreshCounter(tf, this.label); + var totTxt; + + if (!tf.paging) { + if (p && p !== '') { + totTxt = p; + } else { + totTxt = tf.getFilterableRowsNb() - tf.nbHiddenRows; + } + } else { + var paging = tf.feature('paging'); + + if (paging) { + var nbValidRows = tf.getValidRowsNb(); //paging start row + + var pagingStartRow = parseInt(paging.startPagingRow, 10) + (nbValidRows > 0 ? 1 : 0); + var pagingEndRow = pagingStartRow + paging.pageLength - 1 <= nbValidRows ? pagingStartRow + paging.pageLength - 1 : nbValidRows; + totTxt = pagingStartRow + this.fromToTextSeparator + pagingEndRow + this.overText + nbValidRows; + } + } + + this.label.innerHTML = totTxt; + this.onAfterRefreshCounter(tf, this.label, totTxt); + } + /** + * Remove feature + */ + + }, { + key: "destroy", + value: function destroy() { + var _this3 = this; + + if (!this.initialized) { + return; + } + + if (!this.targetId && this.container) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.container); + } else { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.targetId).innerHTML = ''; + } + + this.label = null; + this.container = null; // unsubscribe to events + + this.emitter.off(['after-filtering', 'grouped-by-page'], function () { + return _this3.refresh(tf.getValidRowsNb()); + }); + this.emitter.off(['rows-changed'], function () { + return _this3.refresh(); + }); + this.initialized = false; + } + }]); + + return RowsCounter; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + +/***/ }), + +/***/ "./src/modules/state.js": +/*!******************************!*\ + !*** ./src/modules/state.js ***! + \******************************/ +/*! exports provided: State */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "State", function() { return State; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../feature */ "./src/feature.js"); +/* harmony import */ var _hash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hash */ "./src/modules/hash.js"); +/* harmony import */ var _storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./storage */ "./src/modules/storage.js"); +/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../string */ "./src/string.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../types */ "./src/types.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../settings */ "./src/settings.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + +/** + * Features state object persistable with localStorage, cookie or URL hash + * + * @export + * @class State + * @extends {Feature} + */ + +var State = +/*#__PURE__*/ +function (_Feature) { + _inherits(State, _Feature); + + /** + * Creates an instance of State + * @param {TableFilter} tf TableFilter instance + */ + function State(tf) { + var _this; + + _classCallCheck(this, State); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(State).call(this, tf, 'state')); + var cfg = _this.config.state || {}; + /** + * Determines whether state is persisted with URL hash + * @type {Boolean} + */ + + _this.enableHash = cfg === true || Object(_types__WEBPACK_IMPORTED_MODULE_4__["isArray"])(cfg.types) && cfg.types.indexOf('hash') !== -1; + /** + * Determines whether state is persisted with localStorage + * @type {Boolean} + */ + + _this.enableLocalStorage = Object(_types__WEBPACK_IMPORTED_MODULE_4__["isArray"])(cfg.types) && cfg.types.indexOf('local_storage') !== -1; + /** + * Determines whether state is persisted with localStorage + * @type {Boolean} + */ + + _this.enableCookie = Object(_types__WEBPACK_IMPORTED_MODULE_4__["isArray"])(cfg.types) && cfg.types.indexOf('cookie') !== -1; + /** + * Persist filters values, enabled by default + * @type {Boolean} + */ + + _this.persistFilters = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsBool"])(cfg.filters, true); + /** + * Persist current page number when paging is enabled + * @type {Boolean} + */ + + _this.persistPageNumber = Boolean(cfg.page_number); + /** + * Persist page length when paging is enabled + * @type {Boolean} + */ + + _this.persistPageLength = Boolean(cfg.page_length); + /** + * Persist column sorting + * @type {Boolean} + */ + + _this.persistSort = Boolean(cfg.sort); + /** + * Persist columns visibility + * @type {Boolean} + */ + + _this.persistColsVisibility = Boolean(cfg.columns_visibility); + /** + * Persist filters row visibility + * @type {Boolean} + */ + + _this.persistFiltersVisibility = Boolean(cfg.filters_visibility); + /** + * Cookie duration in hours + * @type {Boolean} + */ + + _this.cookieDuration = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsNb"])(parseInt(cfg.cookie_duration, 10), 87600); + /** + * Enable Storage if localStorage or cookie is required + * @type {Boolean} + * @private + */ + + _this.enableStorage = _this.enableLocalStorage || _this.enableCookie; + /** + * Storage instance if storage is required + * @type {Storage} + * @private + */ + + _this.storage = null; + /** + * Hash instance if URL hash is required + * @type {Boolean} + * @private + */ + + _this.hash = null; + /** + * Current page number + * @type {Number} + * @private + */ + + _this.pageNb = null; + /** + * Current page length + * @type {Number} + * @private + */ + + _this.pageLength = null; + /** + * Current column sorting + * @type {Object} + * @private + */ + + _this.sort = null; + /** + * Current hidden columns + * @type {Object} + * @private + */ + + _this.hiddenCols = null; + /** + * Filters row visibility + * @type {Boolean} + * @private + */ + + _this.filtersVisibility = null; + /** + * State object + * @type {Object} + * @private + */ + + _this.state = {}; + /** + * Prefix for column ID + * @type {String} + * @private + */ + + _this.prfxCol = 'col_'; + /** + * Prefix for page number ID + * @type {String} + * @private + */ + + _this.pageNbKey = 'page'; + /** + * Prefix for page length ID + * @type {String} + * @private + */ + + _this.pageLengthKey = 'page_length'; + /** + * Prefix for filters visibility ID + * @type {String} + * @private + */ + + _this.filtersVisKey = 'filters_visibility'; + return _this; + } + /** + * Initializes State instance + */ + + + _createClass(State, [{ + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized) { + return; + } + + this.emitter.on(['after-filtering'], function () { + return _this2.update(); + }); + this.emitter.on(['after-page-change', 'after-clearing-filters'], function (tf, pageNb) { + return _this2.updatePage(pageNb); + }); + this.emitter.on(['after-page-length-change'], function (tf, pageLength) { + return _this2.updatePageLength(pageLength); + }); + this.emitter.on(['column-sorted'], function (tf, index, descending) { + return _this2.updateSort(index, descending); + }); + this.emitter.on(['sort-initialized'], function () { + return _this2._syncSort(); + }); + this.emitter.on(['columns-visibility-initialized'], function () { + return _this2._syncColsVisibility(); + }); + this.emitter.on(['column-shown', 'column-hidden'], function (tf, feature, colIndex, hiddenCols) { + return _this2.updateColsVisibility(hiddenCols); + }); + this.emitter.on(['filters-visibility-initialized'], function () { + return _this2._syncFiltersVisibility(); + }); + this.emitter.on(['filters-toggled'], function (tf, extension, visible) { + return _this2.updateFiltersVisibility(visible); + }); + + if (this.enableHash) { + this.hash = new _hash__WEBPACK_IMPORTED_MODULE_1__["Hash"](this); + this.hash.init(); + } + + if (this.enableStorage) { + this.storage = new _storage__WEBPACK_IMPORTED_MODULE_2__["Storage"](this); + this.storage.init(); + } + /** @inherited */ + + + this.initialized = true; + } + /** + * Update state object based on current features state + */ + + }, { + key: "update", + value: function update() { + var _this3 = this; + + if (!this.isEnabled()) { + return; + } + + var state = this.state; + var tf = this.tf; + + if (this.persistFilters) { + var filterValues = tf.getFiltersValue(); + filterValues.forEach(function (val, idx) { + var key = "".concat(_this3.prfxCol).concat(idx); + + if (Object(_types__WEBPACK_IMPORTED_MODULE_4__["isString"])(val) && Object(_string__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(val)) { + if (state.hasOwnProperty(key)) { + state[key].flt = undefined; + } + } else { + state[key] = state[key] || {}; + state[key].flt = val; + } + }); + } + + if (this.persistPageNumber) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_4__["isNull"])(this.pageNb)) { + state[this.pageNbKey] = undefined; + } else { + state[this.pageNbKey] = this.pageNb; + } + } + + if (this.persistPageLength) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_4__["isNull"])(this.pageLength)) { + state[this.pageLengthKey] = undefined; + } else { + state[this.pageLengthKey] = this.pageLength; + } + } + + if (this.persistSort) { + if (!Object(_types__WEBPACK_IMPORTED_MODULE_4__["isNull"])(this.sort)) { + // Remove previuosly sorted column + Object.keys(state).forEach(function (key) { + if (key.indexOf(_this3.prfxCol) !== -1 && state[key]) { + state[key].sort = undefined; + } + }); + var key = "".concat(this.prfxCol).concat(this.sort.column); + state[key] = state[key] || {}; + state[key].sort = { + descending: this.sort.descending + }; + } + } + + if (this.persistColsVisibility) { + if (!Object(_types__WEBPACK_IMPORTED_MODULE_4__["isNull"])(this.hiddenCols)) { + // Clear previuosly hidden columns + Object.keys(state).forEach(function (key) { + if (key.indexOf(_this3.prfxCol) !== -1 && state[key]) { + state[key].hidden = undefined; + } + }); + this.hiddenCols.forEach(function (colIdx) { + var key = "".concat(_this3.prfxCol).concat(colIdx); + state[key] = state[key] || {}; + state[key].hidden = true; + }); + } + } + + if (this.persistFiltersVisibility) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_4__["isNull"])(this.filtersVisibility)) { + state[this.filtersVisKey] = undefined; + } else { + state[this.filtersVisKey] = this.filtersVisibility; + } + } + + this.emitter.emit('state-changed', tf, state); + } + /** + * Refresh page number field on page number changes + * + * @param {Number} pageNb Current page number + */ + + }, { + key: "updatePage", + value: function updatePage(pageNb) { + this.pageNb = pageNb; + this.update(); + } + /** + * Refresh page length field on page length changes + * + * @param {Number} pageLength Current page length value + */ + + }, { + key: "updatePageLength", + value: function updatePageLength(pageLength) { + this.pageLength = pageLength; + this.update(); + } + /** + * Refresh column sorting information on sort changes + * + * @param index {Number} Column index + * @param {Boolean} descending Descending manner + */ + + }, { + key: "updateSort", + value: function updateSort(index, descending) { + this.sort = { + column: index, + descending: descending + }; + this.update(); + } + /** + * Refresh hidden columns information on columns visibility changes + * + * @param {Array} hiddenCols Columns indexes + */ + + }, { + key: "updateColsVisibility", + value: function updateColsVisibility(hiddenCols) { + this.hiddenCols = hiddenCols; + this.update(); + } + /** + * Refresh filters visibility on filters visibility change + * + * @param {Boolean} visible Visibility flad + */ + + }, { + key: "updateFiltersVisibility", + value: function updateFiltersVisibility(visible) { + this.filtersVisibility = visible; + this.update(); + } + /** + * Override state field + * + * @param state State object + */ + + }, { + key: "override", + value: function override(state) { + this.state = state; + this.emitter.emit('state-changed', this.tf, state); + } + /** + * Sync stored features state + */ + + }, { + key: "sync", + value: function sync() { + var state = this.state; + var tf = this.tf; + + this._syncFilters(); + + if (this.persistPageNumber) { + var pageNumber = state[this.pageNbKey]; + this.emitter.emit('change-page', tf, pageNumber); + } + + if (this.persistPageLength) { + var pageLength = state[this.pageLengthKey]; + this.emitter.emit('change-page-results', tf, pageLength); + } + + this._syncSort(); + + this._syncColsVisibility(); + + this._syncFiltersVisibility(); + } + /** + * Override current state with passed one and sync features + * + * @param {Object} state State object + */ + + }, { + key: "overrideAndSync", + value: function overrideAndSync(state) { + // To prevent state to react to features changes, state is temporarily + // disabled + this.disable(); // State is overriden with passed state object + + this.override(state); // New hash state is applied to features + + this.sync(); // State is re-enabled + + this.enable(); + } + /** + * Sync filters with stored values and filter table + * + * @private + */ + + }, { + key: "_syncFilters", + value: function _syncFilters() { + var _this4 = this; + + if (!this.persistFilters) { + return; + } + + var state = this.state; + var tf = this.tf; // clear all filters + // TODO: use tf.clearFilters() once it allows to not filter the table + + tf.eachCol(function (colIdx) { + return tf.setFilterValue(colIdx, ''); + }); + Object.keys(state).forEach(function (key) { + if (key.indexOf(_this4.prfxCol) !== -1) { + var colIdx = parseInt(key.replace(_this4.prfxCol, ''), 10); + var val = state[key].flt; + tf.setFilterValue(colIdx, val); + } + }); + tf.filter(); + } + /** + * Sync sorted column with stored sorting information and sort table + * + * @private + */ + + }, { + key: "_syncSort", + value: function _syncSort() { + var _this5 = this; + + if (!this.persistSort) { + return; + } + + var state = this.state; + var tf = this.tf; + Object.keys(state).forEach(function (key) { + if (key.indexOf(_this5.prfxCol) !== -1) { + var colIdx = parseInt(key.replace(_this5.prfxCol, ''), 10); + + if (!Object(_types__WEBPACK_IMPORTED_MODULE_4__["isUndef"])(state[key].sort)) { + var sort = state[key].sort; + + _this5.emitter.emit('sort', tf, colIdx, sort.descending); + } + } + }); + } + /** + * Sync hidden columns with stored information + * + * @private + */ + + }, { + key: "_syncColsVisibility", + value: function _syncColsVisibility() { + var _this6 = this; + + if (!this.persistColsVisibility) { + return; + } + + var state = this.state; + var tf = this.tf; + var hiddenCols = []; + Object.keys(state).forEach(function (key) { + if (key.indexOf(_this6.prfxCol) !== -1) { + var colIdx = parseInt(key.replace(_this6.prfxCol, ''), 10); + + if (!Object(_types__WEBPACK_IMPORTED_MODULE_4__["isUndef"])(state[key].hidden)) { + hiddenCols.push(colIdx); + } + } + }); + hiddenCols.forEach(function (colIdx) { + _this6.emitter.emit('hide-column', tf, colIdx); + }); + } + /** + * Sync filters visibility with stored information + * + * @private + */ + + }, { + key: "_syncFiltersVisibility", + value: function _syncFiltersVisibility() { + if (!this.persistFiltersVisibility) { + return; + } + + var state = this.state; + var tf = this.tf; + var filtersVisibility = state[this.filtersVisKey]; + this.filtersVisibility = filtersVisibility; + this.emitter.emit('show-filters', tf, filtersVisibility); + } + /** + * Destroy State instance + */ + + }, { + key: "destroy", + value: function destroy() { + var _this7 = this; + + if (!this.initialized) { + return; + } + + this.state = {}; + this.emitter.off(['after-filtering'], function () { + return _this7.update(); + }); + this.emitter.off(['after-page-change', 'after-clearing-filters'], function (tf, pageNb) { + return _this7.updatePage(pageNb); + }); + this.emitter.off(['after-page-length-change'], function (tf, index) { + return _this7.updatePageLength(index); + }); + this.emitter.off(['column-sorted'], function (tf, index, descending) { + return _this7.updateSort(index, descending); + }); + this.emitter.off(['sort-initialized'], function () { + return _this7._syncSort(); + }); + this.emitter.off(['columns-visibility-initialized'], function () { + return _this7._syncColsVisibility(); + }); + this.emitter.off(['column-shown', 'column-hidden'], function (tf, feature, colIndex, hiddenCols) { + return _this7.updateColsVisibility(hiddenCols); + }); + this.emitter.off(['filters-visibility-initialized'], function () { + return _this7._syncFiltersVisibility(); + }); + this.emitter.off(['filters-toggled'], function (tf, extension, visible) { + return _this7.updateFiltersVisibility(visible); + }); + + if (this.enableHash) { + this.hash.destroy(); + this.hash = null; + } + + if (this.enableStorage) { + this.storage.destroy(); + this.storage = null; + } + + this.initialized = false; + } + }]); + + return State; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + +/***/ }), + +/***/ "./src/modules/statusBar.js": +/*!**********************************!*\ + !*** ./src/modules/statusBar.js ***! + \**********************************/ +/*! exports provided: StatusBar */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StatusBar", function() { return StatusBar; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../feature */ "./src/feature.js"); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../root */ "./src/root.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom */ "./src/dom.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../types */ "./src/types.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../settings */ "./src/settings.js"); +/* harmony import */ var _toolbar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./toolbar */ "./src/modules/toolbar.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + +var EVENTS = ['after-filtering', 'after-populating-filter', 'after-page-change', 'after-clearing-filters', 'after-page-length-change', 'after-reset-page', 'after-reset-page-length', 'after-loading-extensions', 'after-loading-themes']; +/** + * Status bar UI component + * @export + * @class StatusBar + * @extends {Feature} + */ + +var StatusBar = +/*#__PURE__*/ +function (_Feature) { + _inherits(StatusBar, _Feature); + + /** + * Creates an instance of StatusBar + * @param {TableFilter} tf TableFilter instance + */ + function StatusBar(tf) { + var _this; + + _classCallCheck(this, StatusBar); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(StatusBar).call(this, tf, 'statusBar')); // Configuration object + + var f = _this.config.status_bar || {}; + /** + * ID of custom container element + * @type {String} + */ + + _this.targetId = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.target_id, null); + /** + * Container DOM element + * @type {DOMElement} + * @private + */ + + _this.container = null; + /** + * Message container DOM element + * @type {DOMElement} + * @private + */ + + _this.msgContainer = null; + /** + * Label container DOM element + * @type {DOMElement} + * @private + */ + + _this.labelContainer = null; + /** + * Text preceding status message + * @type {String} + */ + + _this.text = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.text, ''); + /** + * Css class for container element + * @type {String} + */ + + _this.cssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.css_class, 'status'); + /** + * Message visibility duration in milliseconds + * @type {Number} + * @private + */ + + _this.delay = 250; + /** + * Callback fired before the message is displayed + * @type {Function} + */ + + _this.onBeforeShowMsg = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_before_show_msg, _types__WEBPACK_IMPORTED_MODULE_3__["EMPTY_FN"]); + /** + * Callback fired after the message is displayed + * @type {Function} + */ + + _this.onAfterShowMsg = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_after_show_msg, _types__WEBPACK_IMPORTED_MODULE_3__["EMPTY_FN"]); + /** + * Message appearing upon filtering + * @type {String} + */ + + _this.msgFilter = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.msg_filter, 'Filtering data...'); + /** + * Message appearing when a drop-down filter is populated + * @type {String} + */ + + _this.msgPopulate = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.msg_populate, 'Populating filter...'); + /** + * Message appearing when a checklist filter is populated + * @type {String} + */ + + _this.msgPopulateCheckList = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.msg_populate_checklist, 'Populating list...'); + /** + * Message appearing when a pagination page is changed + * @type {String} + */ + + _this.msgChangePage = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.msg_change_page, 'Collecting paging data...'); + /** + * Message appearing when filters are cleared + * @type {String} + */ + + _this.msgClear = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.msg_clear, 'Clearing filters...'); + /** + * Message appearing when the page length is changed + * @type {String} + */ + + _this.msgChangeResults = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.msg_change_results, 'Changing results per page...'); + /** + * Message appearing when the page is re-set + * @type {String} + */ + + _this.msgResetPage = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.msg_reset_page, 'Re-setting page...'); + /** + * Message appearing when the page length is re-set + * @type {String} + */ + + _this.msgResetPageLength = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.msg_reset_page_length, 'Re-setting page length...'); + /** + * Message appearing upon column sorting + * @type {String} + */ + + _this.msgSort = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.msg_sort, 'Sorting data...'); + /** + * Message appearing when extensions are loading + * @type {String} + */ + + _this.msgLoadExtensions = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.msg_load_extensions, 'Loading extensions...'); + /** + * Message appearing when themes are loading + * @type {String} + */ + + _this.msgLoadThemes = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.msg_load_themes, 'Loading theme(s)...'); + /** + * Default position in toolbar ('left'|'center'|'right') + * @type {String} + */ + + _this.toolbarPosition = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.toolbar_position, _toolbar__WEBPACK_IMPORTED_MODULE_5__["LEFT"]); + return _this; + } + /** + * Initializes StatusBar instance + */ + + + _createClass(StatusBar, [{ + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized) { + return; + } + + var tf = this.tf; + var emitter = this.emitter; + emitter.emit('initializing-feature', this, !Object(_types__WEBPACK_IMPORTED_MODULE_3__["isNull"])(this.targetId)); // status bar container + + var statusDiv = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createElm"])('div'); + statusDiv.className = this.cssClass; // status bar label + + var statusSpan = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createElm"])('span'); // preceding text + + var statusSpanText = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createElm"])('span'); + statusSpanText.appendChild(Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createText"])(this.text)); // target element container + + var targetEl = !this.targetId ? tf.feature('toolbar').container(this.toolbarPosition) : Object(_dom__WEBPACK_IMPORTED_MODULE_2__["elm"])(this.targetId); // default container + + if (!this.targetId) { + statusDiv.appendChild(statusSpanText); + statusDiv.appendChild(statusSpan); + targetEl.appendChild(statusDiv); + } else { + // custom container, no need to append statusDiv + targetEl.appendChild(statusSpanText); + targetEl.appendChild(statusSpan); + } + + this.container = statusDiv; + this.msgContainer = statusSpan; + this.labelContainer = statusSpanText; // subscribe to events + + emitter.on(['before-filtering'], function () { + return _this2.message(_this2.msgFilter); + }); + emitter.on(['before-populating-filter'], function () { + return _this2.message(_this2.msgPopulate); + }); + emitter.on(['before-page-change'], function () { + return _this2.message(_this2.msgChangePage); + }); + emitter.on(['before-clearing-filters'], function () { + return _this2.message(_this2.msgClear); + }); + emitter.on(['before-page-length-change'], function () { + return _this2.message(_this2.msgChangeResults); + }); + emitter.on(['before-reset-page'], function () { + return _this2.message(_this2.msgResetPage); + }); + emitter.on(['before-reset-page-length'], function () { + return _this2.message(_this2.msgResetPageLength); + }); + emitter.on(['before-loading-extensions'], function () { + return _this2.message(_this2.msgLoadExtensions); + }); + emitter.on(['before-loading-themes'], function () { + return _this2.message(_this2.msgLoadThemes); + }); + emitter.on(EVENTS, function () { + return _this2.message(''); + }); + /** @inherited */ + + this.initialized = true; + emitter.emit('feature-initialized', this); + } + /** + * Display status message + * @param {String} [t=''] Message to be displayed + */ + + }, { + key: "message", + value: function message() { + var _this3 = this; + + var t = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + + if (!this.isEnabled()) { + return; + } + + this.onBeforeShowMsg(this.tf, t); + var d = t === '' ? this.delay : 1; + _root__WEBPACK_IMPORTED_MODULE_1__["root"].setTimeout(function () { + if (!_this3.initialized) { + return; + } + + _this3.msgContainer.innerHTML = t; + + _this3.onAfterShowMsg(_this3.tf, t); + }, d); + } + /** + * Destroy StatusBar instance + */ + + }, { + key: "destroy", + value: function destroy() { + var _this4 = this; + + if (!this.initialized) { + return; + } + + var emitter = this.emitter; + this.container.innerHTML = ''; + + if (!this.targetId) { + Object(_dom__WEBPACK_IMPORTED_MODULE_2__["removeElm"])(this.container); + } + + this.labelContainer = null; + this.msgContainer = null; + this.container = null; // Unsubscribe to events + + emitter.off(['before-filtering'], function () { + return _this4.message(_this4.msgFilter); + }); + emitter.off(['before-populating-filter'], function () { + return _this4.message(_this4.msgPopulate); + }); + emitter.off(['before-page-change'], function () { + return _this4.message(_this4.msgChangePage); + }); + emitter.off(['before-clearing-filters'], function () { + return _this4.message(_this4.msgClear); + }); + emitter.off(['before-page-length-change'], function () { + return _this4.message(_this4.msgChangeResults); + }); + emitter.off(['before-reset-page'], function () { + return _this4.message(_this4.msgResetPage); + }); + emitter.off(['before-reset-page-length'], function () { + return _this4.message(_this4.msgResetPageLength); + }); + emitter.off(['before-loading-extensions'], function () { + return _this4.message(_this4.msgLoadExtensions); + }); + emitter.off(['before-loading-themes'], function () { + return _this4.message(_this4.msgLoadThemes); + }); + emitter.off(EVENTS, function () { + return _this4.message(''); + }); + this.initialized = false; + } + }]); + + return StatusBar; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + +/***/ }), + +/***/ "./src/modules/storage.js": +/*!********************************!*\ + !*** ./src/modules/storage.js ***! + \********************************/ +/*! exports provided: hasStorage, Storage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasStorage", function() { return hasStorage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Storage", function() { return Storage; }); +/* harmony import */ var _cookie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../cookie */ "./src/cookie.js"); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../root */ "./src/root.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + + + +var JSON = _root__WEBPACK_IMPORTED_MODULE_1__["root"].JSON; +var localStorage = _root__WEBPACK_IMPORTED_MODULE_1__["root"].localStorage; +var location = _root__WEBPACK_IMPORTED_MODULE_1__["root"].location; +/** + * Checks if browser has Storage feature + */ + +var hasStorage = function hasStorage() { + return 'Storage' in _root__WEBPACK_IMPORTED_MODULE_1__["root"]; +}; +/** + * Stores the features state in browser's local storage or cookie + * + * @export + * @class Storage + */ + +var Storage = +/*#__PURE__*/ +function () { + /** + * Creates an instance of Storage + * + * @param {State} state Instance of State + */ + function Storage(state) { + _classCallCheck(this, Storage); + + /** + * State object + * @type {State} + * @private + */ + this.state = state; + /** + * TableFilter object + * @type {TableFilter} + * @private + */ + + this.tf = state.tf; + /** + * Persist with local storage + * @type {Boolean} + * @private + */ + + this.enableLocalStorage = state.enableLocalStorage && hasStorage(); + /** + * Persist with cookie + * @type {Boolean} + * @private + */ + + this.enableCookie = state.enableCookie && !this.enableLocalStorage; + /** + * Emitter object + * @type {Emitter} + * @private + */ + + this.emitter = state.emitter; + /** + * Cookie duration in hours from state object + * @type {Number} + * @private + */ + + this.duration = state.cookieDuration; + } + /** + * Initializes the Storage object + */ + + + _createClass(Storage, [{ + key: "init", + value: function init() { + var _this = this; + + this.emitter.on(['state-changed'], function (tf, state) { + return _this.save(state); + }); + this.emitter.on(['initialized'], function () { + return _this.sync(); + }); + } + /** + * Persists the features state on state changes + * + * @param {State} state Instance of State + */ + + }, { + key: "save", + value: function save(state) { + if (this.enableLocalStorage) { + localStorage[this.getKey()] = JSON.stringify(state); + } else { + _cookie__WEBPACK_IMPORTED_MODULE_0__["default"].write(this.getKey(), JSON.stringify(state), this.duration); + } + } + /** + * Turns stored string into a State JSON object + * + * @returns {Object} JSON object + */ + + }, { + key: "retrieve", + value: function retrieve() { + var state = null; + + if (this.enableLocalStorage) { + state = localStorage[this.getKey()]; + } else { + state = _cookie__WEBPACK_IMPORTED_MODULE_0__["default"].read(this.getKey()); + } + + if (!state) { + return null; + } + + return JSON.parse(state); + } + /** + * Removes persisted state from storage + */ + + }, { + key: "remove", + value: function remove() { + if (this.enableLocalStorage) { + localStorage.removeItem(this.getKey()); + } else { + _cookie__WEBPACK_IMPORTED_MODULE_0__["default"].remove(this.getKey()); + } + } + /** + * Applies persisted state to features + */ + + }, { + key: "sync", + value: function sync() { + var state = this.retrieve(); + + if (!state) { + return; + } // override current state with persisted one and sync features + + + this.state.overrideAndSync(state); + } + /** + * Returns the storage key + * + * @returns {String} Key + */ + + }, { + key: "getKey", + value: function getKey() { + return JSON.stringify({ + key: "".concat(this.tf.prfxTf, "_").concat(this.tf.id), + path: location.pathname + }); + } + /** + * Release Storage event subscriptions and clear fields + */ + + }, { + key: "destroy", + value: function destroy() { + var _this2 = this; + + this.emitter.off(['state-changed'], function (tf, state) { + return _this2.save(state); + }); + this.emitter.off(['initialized'], function () { + return _this2.sync(); + }); + this.remove(); + this.state = null; + this.emitter = null; + } + }]); + + return Storage; +}(); + +/***/ }), + +/***/ "./src/modules/toolbar.js": +/*!********************************!*\ + !*** ./src/modules/toolbar.js ***! + \********************************/ +/*! exports provided: LEFT, RIGHT, CENTER, Toolbar */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LEFT", function() { return LEFT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RIGHT", function() { return RIGHT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CENTER", function() { return CENTER; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Toolbar", function() { return Toolbar; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom */ "./src/dom.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../settings */ "./src/settings.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../types */ "./src/types.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + +var EVENTS = ['initializing-feature', 'initializing-extension']; +/** Left position in toolbar */ + +var LEFT = 'left'; +/** Right position in toolbar */ + +var RIGHT = 'right'; +/** Center position in toolbar */ + +var CENTER = 'center'; +/** + * Toolbar UI component + * @export + * @class Toolbar + * @extends {Feature} + */ + +var Toolbar = +/*#__PURE__*/ +function (_Feature) { + _inherits(Toolbar, _Feature); + + /** + * Create an instance of Toolbar + * @param {TableFilter} tf TableFilter instance + * @memberof Toolbar + */ + function Toolbar(tf) { + var _this; + + _classCallCheck(this, Toolbar); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(Toolbar).call(this, tf, 'toolbar')); // Configuration object + + var f = _this.config.toolbar || {}; + /** + * Css class for toolbar's container DOM element + * @type {String} + */ + + _this.contCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_2__["defaultsStr"])(f.container_css_class, 'inf'); + /** + * Css class for left-side inner container DOM element + * @type {String} + */ + + _this.lContCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_2__["defaultsStr"])(f.left_cont_css_class, 'ldiv'); + /** + * Css class for right-side inner container DOM element + * @type {String} + */ + + _this.rContCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_2__["defaultsStr"])(f.right_cont_css_class, 'rdiv'); + /** + * Css class for middle inner container DOM element + * @type {String} + */ + + _this.cContCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_2__["defaultsStr"])(f.center_cont_css_class, 'mdiv'); + /** + * Toolbar's custom container ID + * @type {String} + */ + + _this.tgtId = Object(_settings__WEBPACK_IMPORTED_MODULE_2__["defaultsStr"])(f.target_id, null); + /** + * Toolbar's container DOM element + * @type {DOMElement} + * @private + */ + + _this.cont = null; + /** + * Left-side inner container DOM element (rows counter in toolbar) + * @type {DOMElement} + * @private + */ + + _this.lCont = null; + /** + * Right-side inner container DOM element (reset button, + * page length selector in toolbar) + * @type {DOMElement} + * @private + */ + + _this.rCont = null; + /** + * Middle inner container DOM element (paging elements in toolbar) + * @type {DOMElement} + * @private + */ + + _this.cCont = null; + /** + * Container elements inside toolbar + * @private + */ + + _this.innerCont = { + left: null, + center: null, + right: null + }; + + _this.emitter.on(EVENTS, function (feature, isExternal) { + return _this.init(isExternal); + }); + /** @inherited */ + + + _this.enabled = true; + return _this; + } + /** + * Initialize toolbar components + * @param {Boolean} isExternal initialize only if component belongs + * to toolbar + */ + + + _createClass(Toolbar, [{ + key: "init", + value: function init(isExternal) { + if (this.initialized || isExternal) { + return; + } + + var tf = this.tf; // default container + + var container = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('div'); + container.className = this.contCssClass; // custom container + + if (this.tgtId) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.tgtId).appendChild(container); + } // grid-layout + else if (tf.gridLayout) { + var gridLayout = tf.Mod.gridLayout; + gridLayout.tblMainCont.appendChild(container); + container.className = gridLayout.infDivCssClass; + } // default location: just above the table + else { + var cont = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('caption'); + cont.appendChild(container); + tf.dom().insertBefore(cont, tf.dom().firstChild); + } + + this.cont = container; // left container + + this.lCont = this.createContainer(container, this.lContCssClass); // right container + + this.rCont = this.createContainer(container, this.rContCssClass); // middle container + + this.cCont = this.createContainer(container, this.cContCssClass); + this.innerCont = { + left: this.lCont, + center: this.cCont, + right: this.rCont + }; + /** @inherited */ + + this.initialized = true; // emit help initialisation only if undefined + + if (Object(_types__WEBPACK_IMPORTED_MODULE_3__["isUndef"])(tf.help)) { + // explicitily enable help to initialise feature by + // default, only if setting is undefined + tf.Mod.help.enable(); + this.emitter.emit('init-help', tf); + } + } + /** + * Return the container based on requested position inside the toolbar + * @param {String} [position=RIGHT] 3 possible positions: 'left', 'center', + * 'right' + * @param {DOMElement} el optional DOM element to be inserter in container + * @returns {DOMElement} + */ + + }, { + key: "container", + value: function container() { + var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : RIGHT; + var el = arguments.length > 1 ? arguments[1] : undefined; + var cont = this.innerCont[position]; + + if (el) { + cont.appendChild(el); + } + + return cont; + } + /** + * Create DOM element inside passed container + * @param {DOMElement} container + * @param {String} css + * @private + */ + + }, { + key: "createContainer", + value: function createContainer(container, css) { + var div = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('div', ['class', css]); + container.appendChild(div); + return div; + } + /** + * Destroy Toolbar instance + */ + + }, { + key: "destroy", + value: function destroy() { + if (!this.initialized) { + return; + } + + var tf = this.tf; + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.cont); + this.cont = null; + var tbl = tf.dom(); + var captions = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(tbl, 'caption'); + [].forEach.call(captions, function (el) { + return Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(el); + }); + /** @inherited */ + + this.initialized = false; + } + }]); + + return Toolbar; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); // TODO: remove as soon as feature name is fixed + +Toolbar.alwaysInstantiate = true; + +/***/ }), + +/***/ "./src/number.js": +/*!***********************!*\ + !*** ./src/number.js ***! + \***********************/ +/*! exports provided: parse */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parse", function() { return parse; }); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types */ "./src/types.js"); + +/** + * Takes a string, removes all formatting/cruft and returns the raw float value + * @param {String} Formatted number + * @param {String} Decimal type '.' or ',' + * @return {Number} Unformatted number + * + * https://github.com/openexchangerates/accounting.js/blob/master/accounting.js + */ + +var parse = function parse(value) { + var decimal = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '.'; + + // Return the value as-is if it's already a number + if (Object(_types__WEBPACK_IMPORTED_MODULE_0__["isNumber"])(value)) { + return value; + } // Build regex to strip out everything except digits, decimal point and + // minus sign + + + var regex = new RegExp('[^0-9-' + decimal + ']', ['g']); + var unformatted = parseFloat(('' + value). // replace bracketed values with negatives + replace(/\((.*)\)/, '-$1') // strip out any cruft + .replace(regex, '') // make sure decimal point is standard + .replace(decimal, '.')); // This will fail silently + + return !isNaN(unformatted) ? unformatted : 0; +}; + +/***/ }), + +/***/ "./src/root.js": +/*!*********************!*\ + !*** ./src/root.js ***! + \*********************/ +/*! exports provided: root */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "root", function() { return root; }); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +/** + * Export window or global object depending on the environment + */ +var root = (typeof self === "undefined" ? "undefined" : _typeof(self)) === 'object' && self.self === self && self || (typeof global === "undefined" ? "undefined" : _typeof(global)) === 'object' && global.global === global && global || undefined; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) + +/***/ }), + +/***/ "./src/settings.js": +/*!*************************!*\ + !*** ./src/settings.js ***! + \*************************/ +/*! exports provided: defaultsBool, defaultsStr, defaultsNb, defaultsArr, defaultsFn */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultsBool", function() { return defaultsBool; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultsStr", function() { return defaultsStr; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultsNb", function() { return defaultsNb; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultsArr", function() { return defaultsArr; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultsFn", function() { return defaultsFn; }); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types */ "./src/types.js"); + +/** Configuration settings helpers */ + +/** + * If passed value is not of boolean type return the default value + * otherwise return the value itself + * @param {Boolean|Any} value + * @param {Boolean} default value + * @return {Boolean|Any} + */ + +var defaultsBool = function defaultsBool(val, defaultVal) { + return Object(_types__WEBPACK_IMPORTED_MODULE_0__["isBoolean"])(val) ? val : defaultVal; +}; +/** + * If passed value is not of string type return the default value + * otherwise return the value itself + * @param {String|Any} value + * @param {String} default value + * @return {String|Any} + */ + +var defaultsStr = function defaultsStr(val, defaultVal) { + return Object(_types__WEBPACK_IMPORTED_MODULE_0__["isString"])(val) ? val : defaultVal; +}; +/** + * If passed value is not of number type return the default value + * otherwise return the value itself + * @param {Number|Any} value + * @param {Number} default value + * @return {Number|Any} + */ + +var defaultsNb = function defaultsNb(val, defaultVal) { + return isNaN(val) ? defaultVal : val; +}; +/** + * If passed value is not of array type return the default value + * otherwise return the value itself + * @param {Array|Any} value + * @param {Array} default value + * @return {Array|Any} + */ + +var defaultsArr = function defaultsArr(val, defaultVal) { + return Object(_types__WEBPACK_IMPORTED_MODULE_0__["isArray"])(val) ? val : defaultVal; +}; +/** + * If passed value is not of function type return the default value + * otherwise return the value itself + * @param {Function|Any} value + * @param {Function} default value + * @return {Function|Any} + */ + +var defaultsFn = function defaultsFn(val, defaultVal) { + return Object(_types__WEBPACK_IMPORTED_MODULE_0__["isFn"])(val) ? val : defaultVal; +}; + +/***/ }), + +/***/ "./src/sort.js": +/*!*********************!*\ + !*** ./src/sort.js ***! + \*********************/ +/*! exports provided: ignoreCase, numSortAsc, numSortDesc, dateSortAsc, dateSortDesc, sortNumberStr, sortDateStr */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ignoreCase", function() { return ignoreCase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "numSortAsc", function() { return numSortAsc; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "numSortDesc", function() { return numSortDesc; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dateSortAsc", function() { return dateSortAsc; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dateSortDesc", function() { return dateSortDesc; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sortNumberStr", function() { return sortNumberStr; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sortDateStr", function() { return sortDateStr; }); +/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number */ "./src/number.js"); +/* harmony import */ var sugar_date__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! sugar-date */ "./node_modules/sugar-date/index.js"); +/* harmony import */ var sugar_date__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(sugar_date__WEBPACK_IMPORTED_MODULE_1__); + + +/** Sorting utilities */ + +/** + * Case insensitive compare function for passed strings + * @param {String} First string + * @param {String} Second string + * @return {Number} -1 if first string lower than second one + * 0 if first string same order as second one + * 1 if first string greater than second one + */ + +var ignoreCase = function ignoreCase(a, b) { + var x = a.toLowerCase(); + var y = b.toLowerCase(); + return x < y ? -1 : x > y ? 1 : 0; +}; +/** + * Compare function for sorting passed numbers in ascending manner + * @param {Number} First number + * @param {Number} Second number + * @return {Number} Negative, zero or positive number + */ + +var numSortAsc = function numSortAsc(a, b) { + return a - b; +}; +/** + * Compare function for sorting passed numbers in descending manner + * @param {Number} First number + * @param {Number} Second number + * @return {Number} Negative, zero or positive number + */ + +var numSortDesc = function numSortDesc(a, b) { + return b - a; +}; +/** + * Compare function for sorting passed dates in ascending manner according to + * the corresponding UTC numeric value (returned by getTime) + * @param {Date} First date object + * @param {Date} Second date object + * @return {Number} Negative, zero or positive number + */ + +var dateSortAsc = function dateSortAsc(date1, date2) { + return date1.getTime() - date2.getTime(); +}; +/** + * Compare function for sorting passed dates in descending manner according to + * the corresponding UTC numeric value (returned by getTime) + * @param {Date} First date object + * @param {Date} Second date object + * @return {Number} Negative, zero or positive number + */ + +var dateSortDesc = function dateSortDesc(date1, date2) { + return date2.getTime() - date1.getTime(); +}; +/** + * Curried compare function for sorting passed formatted numbers in desired + * fashion according to supplied compare function and decimal separator + * @param {Function} Compare function + * @param {String} [decimal=','] Decimal separator + * @return {Function} Compare function receiving parsed numeric arguments + */ + +var sortNumberStr = function sortNumberStr(compareFn) { + var decimal = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ','; + return function (numStr1, numStr2) { + var num1 = Object(_number__WEBPACK_IMPORTED_MODULE_0__["parse"])(numStr1, decimal); + var num2 = Object(_number__WEBPACK_IMPORTED_MODULE_0__["parse"])(numStr2, decimal); + return compareFn(num1, num2); + }; +}; +/** + * Curried compare function for sorting passed formatted dates in desired + * fashion according to supplied compare function and locale + * @param {Function} Compare function + * @param {String} [locale='en-us'] Locale code + * @return {Function} Compare function receiving parsed date arguments + */ + +var sortDateStr = function sortDateStr(compareFn) { + var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-us'; + return function (dateStr1, dateStr2) { + var date1 = sugar_date__WEBPACK_IMPORTED_MODULE_1__["Date"].create(dateStr1, locale); + var date2 = sugar_date__WEBPACK_IMPORTED_MODULE_1__["Date"].create(dateStr2, locale); + return compareFn(date1, date2); + }; +}; + +/***/ }), + +/***/ "./src/string.js": +/*!***********************!*\ + !*** ./src/string.js ***! + \***********************/ +/*! exports provided: trim, isEmpty, rgxEsc, matchCase, contains, toCamelCase */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "trim", function() { return trim; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEmpty", function() { return isEmpty; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rgxEsc", function() { return rgxEsc; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "matchCase", function() { return matchCase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "contains", function() { return contains; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toCamelCase", function() { return toCamelCase; }); +/* harmony import */ var diacritics__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diacritics */ "./node_modules/diacritics/index.js"); +/* harmony import */ var diacritics__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(diacritics__WEBPACK_IMPORTED_MODULE_0__); + +/** + * String utilities + */ + +/** + * Removes whitespace from both sides of passed string + * @param {String} text + * @return {String} + */ + +var trim = function trim(text) { + if (text.trim) { + return text.trim(); + } + + return text.replace(/^\s*|\s*$/g, ''); +}; +/** + * Checks if passed string is empty + * @param {String} text + * @return {Boolean} + */ + +var isEmpty = function isEmpty(text) { + return trim(text) === ''; +}; +/** + * Makes regex safe string by escaping special characters from passed string + * @param {String} text + * @return {String} escaped string + */ + +var rgxEsc = function rgxEsc(text) { + var chars = /[-\/\\^$*+?.()|[\]{}]/g; + var escMatch = '\\$&'; + return String(text).replace(chars, escMatch); +}; +/** + * Returns passed string as lowercase if caseSensitive flag set false. By + * default it returns the string with no casing changes. + * @param {String} text + * @return {String} string + */ + +var matchCase = function matchCase(text) { + var caseSensitive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + if (!caseSensitive) { + return text.toLowerCase(); + } + + return text; +}; +/** + * Checks if passed data contains the searched term + * @param {String} term Searched term + * @param {String} data Data string + * @param {Boolean} exactMatch Exact match + * @param {Boolean} caseSensitive Case sensitive + * @param {Boolean} ignoreDiacritics Ignore diacritics + * @return {Boolean} + */ + +var contains = function contains(term, data) { + var exactMatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var caseSensitive = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + var ignoreDiacritics = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; + // Improved by Cedric Wartel (cwl) automatic exact match for selects and + // special characters are now filtered + var regexp; + var modifier = caseSensitive ? 'g' : 'gi'; + + if (ignoreDiacritics) { + term = Object(diacritics__WEBPACK_IMPORTED_MODULE_0__["remove"])(term); + data = Object(diacritics__WEBPACK_IMPORTED_MODULE_0__["remove"])(data); + } + + if (exactMatch) { + regexp = new RegExp('(^\\s*)' + rgxEsc(term) + '(\\s*$)', modifier); + } else { + regexp = new RegExp(rgxEsc(term), modifier); + } + + 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 + */ + +var toCamelCase = function toCamelCase() { + var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + console.log('in', text); + return text.replace(/^([A-Z])|[\s-_]+(\w)/g, function (match, p1, p2) { + if (p2) { + console.log('out', p2.toUpperCase()); + return p2.toUpperCase(); + } + + console.log('out', p1.toLowerCase()); + return p1.toLowerCase(); + }); +}; + +/***/ }), + +/***/ "./src/tablefilter.js": +/*!****************************!*\ + !*** ./src/tablefilter.js ***! + \****************************/ +/*! exports provided: TableFilter */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TableFilter", function() { return TableFilter; }); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./event */ "./src/event.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom */ "./src/dom.js"); +/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./string */ "./src/string.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./types */ "./src/types.js"); +/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./number */ "./src/number.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./settings */ "./src/settings.js"); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./root */ "./src/root.js"); +/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./emitter */ "./src/emitter.js"); +/* harmony import */ var _modules_dropdown__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modules/dropdown */ "./src/modules/dropdown.js"); +/* harmony import */ var _modules_checkList__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./modules/checkList */ "./src/modules/checkList.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./const */ "./src/const.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + + + + + + + + + + + + +var doc = _root__WEBPACK_IMPORTED_MODULE_6__["root"].document; +/** + * Makes HTML tables filterable and a bit more :) + * + * @export + * @class TableFilter + */ + +var TableFilter = +/*#__PURE__*/ +function () { + /** + * Creates an instance of TableFilter + * requires `table` or `id` arguments, `row` and `configuration` optional + * @param {HTMLTableElement} table Table DOM element + * @param {String} id Table id + * @param {Number} row index indicating the 1st row + * @param {Object} configuration object + */ + function TableFilter() { + var _this = this; + + _classCallCheck(this, TableFilter); + + /** + * ID of current instance + * @type {String} + * @private + */ + this.id = null; + /** + * Current version + * @type {String} + */ + + this.version = '0.6.77'; + /** + * Current year + * @type {Number} + * @private + */ + + this.year = new Date().getFullYear(); + /** + * HTML Table DOM element + * @type {DOMElement} + * @private + */ + + this.tbl = null; + /** + * Calculated row's index from which starts filtering once filters + * are generated + * @type {Number} + */ + + this.refRow = null; + /** + * Index of the headers row + * @type {Number} + * @private + */ + + this.headersRow = null; + /** + * Configuration object + * @type {Object} + * @private + */ + + this.cfg = {}; + /** + * Number of rows that can be filtered + * @type {Number} + * @private + */ + + this.nbFilterableRows = 0; + /** + * Number of cells in the reference row + * @type {Number} + * @private + */ + + this.nbCells = null; + /** + * Has a configuration object + * @type {Object} + * @private + */ + + this.hasConfig = false; + /** @private */ + + this.initialized = false; + var startRow; // TODO: use for-of + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + args.forEach(function (arg) { + if (_typeof(arg) === 'object' && arg.nodeName === 'TABLE') { + _this.tbl = arg; + _this.id = arg.id || "tf_".concat(new Date().getTime(), "_"); + _this.tbl.id = _this.id; + } else if (Object(_types__WEBPACK_IMPORTED_MODULE_3__["isString"])(arg)) { + _this.id = arg; + _this.tbl = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(arg); + } else if (Object(_types__WEBPACK_IMPORTED_MODULE_3__["isNumber"])(arg)) { + startRow = arg; + } else if (Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(arg)) { + _this.cfg = arg; + _this.hasConfig = true; + } + }); + + if (!this.tbl || this.tbl.nodeName !== 'TABLE') { + throw new Error("Could not instantiate TableFilter: HTML table\n DOM element not found."); + } + + if (this.getRowsNb(true) === 0) { + throw new Error("Could not instantiate TableFilter: HTML table\n requires at least 1 row."); + } // configuration object + + + var f = this.cfg; + /** + * Event emitter instance + * @type {Emitter} + */ + + this.emitter = new _emitter__WEBPACK_IMPORTED_MODULE_7__["Emitter"](); // start row + + this.refRow = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isUndef"])(startRow) ? 2 : startRow + 1; + /** + * Collection of filter type by column + * @type {Array} + * @private + */ + + this.filterTypes = [].map.call((this.dom().rows[this.refRow] || this.dom().rows[0]).cells, function (cell, idx) { + var colType = _this.cfg["col_".concat(idx)]; + + return !colType ? _const__WEBPACK_IMPORTED_MODULE_10__["INPUT"] : colType.toLowerCase(); + }); + /** + * Base path for static assets + * @type {String} + */ + + this.basePath = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.base_path, 'tablefilter/'); + /*** filters' grid properties ***/ + + /** + * Enable/disable filters + * @type {Boolean} + */ + + this.fltGrid = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsBool"])(f.grid, true); + /** + * Enable/disable grid layout (fixed headers) + * @type {Object|Boolean} + */ + + this.gridLayout = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(f.grid_layout) || Boolean(f.grid_layout); + /** + * Filters row index + * @type {Number} + */ + + this.filtersRowIndex = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsNb"])(f.filters_row_index, 0); + /** + * Headers row index + * @type {Number} + */ + + this.headersRow = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsNb"])(f.headers_row_index, this.filtersRowIndex === 0 ? 1 : 0); + /** + * Define the type of cell containing a filter (td/th) + * @type {String} + */ + + this.fltCellTag = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.filters_cell_tag, _const__WEBPACK_IMPORTED_MODULE_10__["CELL_TAG"]); + /** + * List of filters IDs + * @type {Array} + * @private + */ + + this.fltIds = []; + /** + * List of valid rows indexes (rows visible upon filtering) + * @type {Array} + * @private + */ + + this.validRowsIndex = []; + /*** filters' grid appearance ***/ + + /** + * Path for stylesheets + * @type {String} + */ + + this.stylePath = this.getStylePath(); + /** + * Main stylesheet path + * @type {String} + */ + + this.stylesheet = this.getStylesheetPath(); + /** + * Main stylesheet ID + * @type {String} + * @private + */ + + this.stylesheetId = this.id + '_style'; + /** + * Css class for the filters row + * @type {String} + */ + + this.fltsRowCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.flts_row_css_class, 'fltrow'); + /** + * Enable/disable icons (paging, reset button) + * @type {Boolean} + */ + + this.enableIcons = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsBool"])(f.enable_icons, true); + /** + * Enable/disable alternating rows + * @type {Boolean} + */ + + this.alternateRows = Boolean(f.alternate_rows); + /** + * Columns widths array + * @type {Array} + */ + + this.colWidths = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsArr"])(f.col_widths, []); + /** + * Default column width when column widths are defined + */ + + this.defaultColWidth = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsNb"])(f.default_col_width, 100); + /** + * Css class for a filter element + * @type {String} + */ + + this.fltCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.flt_css_class, 'flt'); + /** + * Css class for multiple select filters + * @type {String} + */ + + this.fltMultiCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.flt_multi_css_class, 'flt_multi'); + /** + * Css class for small filter (when submit button is active) + * @type {String} + */ + + this.fltSmallCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.flt_small_css_class, 'flt_s'); + /** + * Css class for single filter type + * @type {String} + */ + + this.singleFltCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])((f.single_filter || {}).css_class, 'single_flt'); + /*** filters' grid behaviours ***/ + + /** + * Enable/disable enter key for input type filters + * @type {Boolean} + */ + + this.enterKey = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsBool"])(f.enter_key, true); + /** + * Callback fired before filtering process starts + * @type {Function} + */ + + this.onBeforeFilter = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsFn"])(f.on_before_filter, _types__WEBPACK_IMPORTED_MODULE_3__["EMPTY_FN"]); + /** + * Callback fired after filtering process is completed + * @type {Function} + */ + + this.onAfterFilter = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsFn"])(f.on_after_filter, _types__WEBPACK_IMPORTED_MODULE_3__["EMPTY_FN"]); + /** + * Enable/disable case sensitivity filtering + * @type {Boolean} + */ + + this.caseSensitive = Boolean(f.case_sensitive); + /** + * Indicate whether exact match filtering is enabled on a per column + * basis + * @type {Boolean} + * @private + */ + + this.hasExactMatchByCol = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(f.columns_exact_match); + /** + * Exact match filtering per column array + * @type {Array} + */ + + this.exactMatchByCol = this.hasExactMatchByCol ? f.columns_exact_match : []; + /** + * Globally enable/disable exact match filtering + * @type {Boolean} + */ + + this.exactMatch = Boolean(f.exact_match); + /** + * Ignore diacritics globally or on a column basis + * @type {Boolean|Array} + */ + + this.ignoreDiacritics = f.ignore_diacritics; + /** + * Enable/disable linked filters filtering mode + * @type {Boolean} + */ + + this.linkedFilters = Boolean(f.linked_filters); + /** + * Enable/disable readonly state for excluded options when + * linked filters filtering mode is on + * @type {Boolean} + */ + + this.disableExcludedOptions = Boolean(f.disable_excluded_options); + /** + * Active filter ID + * @type {String} + * @private + */ + + this.activeFilterId = null; + /** + * Determine if there are excluded rows from filtering + * @type {Boolean} + * @private + */ + + this.hasExcludedRows = Boolean(Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(f.exclude_rows) && f.exclude_rows.length > 0); + /** + * List of row indexes to be excluded from filtering + * @type {Array} + */ + + this.excludeRows = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsArr"])(f.exclude_rows, []); + /** + * List of containers IDs where external filters will be generated + * @type {Array} + */ + + this.externalFltIds = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsArr"])(f.external_flt_ids, []); + /** + * Callback fired after filters are generated + * @type {Function} + */ + + this.onFiltersLoaded = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsFn"])(f.on_filters_loaded, _types__WEBPACK_IMPORTED_MODULE_3__["EMPTY_FN"]); + /** + * Enable/disable single filter mode + * @type {Boolean|Object} + */ + + this.singleFlt = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(f.single_filter) || Boolean(f.single_filter); + /** + * Specify columns to be excluded from single filter search, by default + * searching in all columns: + * single_filter: { + * exclude_cols: [2, 7] + * } + */ + + this.singleFltExcludeCols = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(f.single_filter) && Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(f.single_filter.exclude_cols) ? f.single_filter.exclude_cols : []; + /** + * Callback fired after a row is validated during filtering + * @type {Function} + */ + + this.onRowValidated = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsFn"])(f.on_row_validated, _types__WEBPACK_IMPORTED_MODULE_3__["EMPTY_FN"]); + /** + * Specify which column implements a custom cell parser to retrieve the + * cell value: + * cell_parser: { + * cols: [0, 2], + * parse: function(tf, cell, colIndex) { + * // custom cell parser logic here + * return cellValue; + * } + * } + * @type {Object} + */ + + this.cellParser = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(f.cell_parser) && Object(_types__WEBPACK_IMPORTED_MODULE_3__["isFn"])(f.cell_parser.parse) && Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(f.cell_parser.cols) ? f.cell_parser : { + cols: [], + parse: _types__WEBPACK_IMPORTED_MODULE_3__["EMPTY_FN"] + }; + /** + * Global watermark text for input filter type or watermark for each + * filter if an array is supplied + * @type {String|Array} + */ + + this.watermark = f.watermark || ''; + /** + * Indicate whether watermark is on a per column basis + * @type {Boolean} + * @private + */ + + this.isWatermarkArray = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(this.watermark); + /** + * Indicate whether help UI component is disabled + * @type {Boolean} + */ + + this.help = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isUndef"])(f.help_instructions) ? undefined : Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(f.help_instructions) || Boolean(f.help_instructions); + /** + * Indicate whether pop-up filters UI is enabled + * @type {Boolean|Object} + */ + + this.popupFilters = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(f.popup_filters) || Boolean(f.popup_filters); + /** + * Indicate whether filtered (active) columns indicator is enabled + * @type {Boolean} + */ + + this.markActiveColumns = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(f.mark_active_columns) || Boolean(f.mark_active_columns); + /*** select filter's customisation and behaviours ***/ + + /** + * Text for clear option in drop-down filter types (1st option) + * @type {String|Array} + */ + + this.clearFilterText = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.clear_filter_text, 'Clear'); + /** + * Indicate whether empty option is enabled in drop-down filter types + * @type {Boolean} + */ + + this.enableEmptyOption = Boolean(f.enable_empty_option); + /** + * Text for empty option in drop-down filter types + * @type {String} + */ + + this.emptyText = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.empty_text, '(Empty)'); + /** + * Indicate whether non-empty option is enabled in drop-down filter + * types + * @type {Boolean} + */ + + this.enableNonEmptyOption = Boolean(f.enable_non_empty_option); + /** + * Text for non-empty option in drop-down filter types + * @type {String} + */ + + this.nonEmptyText = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.non_empty_text, '(Non empty)'); + /** + * Indicate whether drop-down filter types filter the table by default + * on change event + * @type {Boolean} + */ + + this.onSlcChange = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsBool"])(f.on_change, true); + /** + * Make drop-down filter types options sorted in alpha-numeric manner + * by default globally or on a column basis + * @type {Boolean|Array} + */ + + this.sortSlc = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isUndef"])(f.sort_select) ? true : Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(f.sort_select) ? f.sort_select : Boolean(f.sort_select); + /** + * Indicate whether options in drop-down filter types are sorted in a + * ascending numeric manner + * @type {Boolean} + * @private + */ + + this.isSortNumAsc = Boolean(f.sort_num_asc); + /** + * List of columns implementing options sorting in a ascending numeric + * manner + * @type {Array} + */ + + this.sortNumAsc = this.isSortNumAsc ? f.sort_num_asc : []; + /** + * Indicate whether options in drop-down filter types are sorted in a + * descending numeric manner + * @type {Boolean} + * @private + */ + + this.isSortNumDesc = Boolean(f.sort_num_desc); + /** + * List of columns implementing options sorting in a descending numeric + * manner + * @type {Array} + */ + + this.sortNumDesc = this.isSortNumDesc ? f.sort_num_desc : []; + /** + * Indicate whether drop-down filter types are populated on demand at + * first usage + * @type {Boolean} + */ + + this.loadFltOnDemand = Boolean(f.load_filters_on_demand); + /** + * Indicate whether custom drop-down filter options are implemented + * @type {Boolean} + */ + + this.hasCustomOptions = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(f.custom_options); + /** + * Custom options definition of a per column basis, ie: + * custom_options: { + * cols:[0, 1], + * texts: [ + * ['a0', 'b0', 'c0'], + * ['a1', 'b1', 'c1'] + * ], + * values: [ + * ['a0', 'b0', 'c0'], + * ['a1', 'b1', 'c1'] + * ], + * sorts: [false, true] + * } + * + * @type {Object} + */ + + this.customOptions = f.custom_options; + /*** Filter operators ***/ + + /** + * Regular expression operator for input filter. Defaults to 'rgx:' + * @type {String} + */ + + this.rgxOperator = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.regexp_operator, 'rgx:'); + /** + * Empty cells operator for input filter. Defaults to '[empty]' + * @type {String} + */ + + this.emOperator = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.empty_operator, '[empty]'); + /** + * Non-empty cells operator for input filter. Defaults to '[nonempty]' + * @type {String} + */ + + this.nmOperator = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.nonempty_operator, '[nonempty]'); + /** + * Logical OR operator for input filter. Defaults to '||' + * @type {String} + */ + + this.orOperator = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.or_operator, '||'); + /** + * Logical AND operator for input filter. Defaults to '&&' + * @type {String} + */ + + this.anOperator = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.and_operator, '&&'); + /** + * Greater than operator for input filter. Defaults to '>' + * @type {String} + */ + + this.grOperator = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.greater_operator, '>'); + /** + * Lower than operator for input filter. Defaults to '<' + * @type {String} + */ + + this.lwOperator = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.lower_operator, '<'); + /** + * Lower than or equal operator for input filter. Defaults to '<=' + * @type {String} + */ + + this.leOperator = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.lower_equal_operator, '<='); + /** + * Greater than or equal operator for input filter. Defaults to '>=' + * @type {String} + */ + + this.geOperator = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.greater_equal_operator, '>='); + /** + * Inequality operator for input filter. Defaults to '!' + * @type {String} + */ + + this.dfOperator = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.different_operator, '!'); + /** + * Like operator for input filter. Defaults to '*' + * @type {String} + */ + + this.lkOperator = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.like_operator, '*'); + /** + * Strict equality operator for input filter. Defaults to '=' + * @type {String} + */ + + this.eqOperator = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.equal_operator, '='); + /** + * Starts with operator for input filter. Defaults to '=' + * @type {String} + */ + + this.stOperator = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.start_with_operator, '{'); + /** + * Ends with operator for input filter. Defaults to '=' + * @type {String} + */ + + this.enOperator = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.end_with_operator, '}'); // this.curExp = f.cur_exp || '^[¥£€$]'; + + /** + * Stored values separator + * @type {String} + */ + + this.separator = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.separator, ','); + /** + * Enable rows counter UI component + * @type {Boolean|Object} + */ + + this.rowsCounter = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(f.rows_counter) || Boolean(f.rows_counter); + /** + * Enable status bar UI component + * @type {Boolean|Object} + */ + + this.statusBar = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(f.status_bar) || Boolean(f.status_bar); + /** + * Enable activity/spinner indicator UI component + * @type {Boolean|Object} + */ + + this.loader = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(f.loader) || Boolean(f.loader); + /*** validation - reset buttons/links ***/ + + /** + * Enable filters submission button + * @type {Boolean} + */ + + this.displayBtn = Boolean(f.btn); + /** + * Define filters submission button text + * @type {String} + */ + + this.btnText = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.btn_text, !this.enableIcons ? 'Go' : ''); + /** + * Css class for filters submission button + * @type {String} + */ + + this.btnCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.btn_css_class, !this.enableIcons ? 'btnflt' : 'btnflt_icon'); + /** + * Enable clear button + * @type {Object|Boolean} + */ + + this.btnReset = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(f.btn_reset) || Boolean(f.btn_reset); + /** + * Callback fired before filters are cleared + * @type {Function} + */ + + this.onBeforeReset = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsFn"])(f.on_before_reset, _types__WEBPACK_IMPORTED_MODULE_3__["EMPTY_FN"]); + /** + * Callback fired after filters are cleared + * @type {Function} + */ + + this.onAfterReset = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsFn"])(f.on_after_reset, _types__WEBPACK_IMPORTED_MODULE_3__["EMPTY_FN"]); + /** + * Enable paging component + * @type {Object|Boolean} + */ + + this.paging = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(f.paging) || Boolean(f.paging); + /** + * Number of hidden rows + * @type {Number} + * @private + */ + + this.nbHiddenRows = 0; + /** + * Enable auto-filter behaviour, table is filtered when a user + * stops typing + * @type {Object|Boolean} + */ + + this.autoFilter = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(f.auto_filter) || Boolean(f.auto_filter); + /** + * Auto-filter delay in milliseconds + * @type {Number} + */ + + this.autoFilterDelay = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(f.auto_filter) && Object(_types__WEBPACK_IMPORTED_MODULE_3__["isNumber"])(f.auto_filter.delay) ? f.auto_filter.delay : _const__WEBPACK_IMPORTED_MODULE_10__["AUTO_FILTER_DELAY"]; + /** + * Indicate whether user is typing + * @type {Boolean} + * @private + */ + + this.isUserTyping = null; + /** + * Auto-filter interval ID + * @type {String} + * @private + */ + + this.autoFilterTimer = null; + /** + * Enable keyword highlighting behaviour + * @type {Boolean} + */ + + this.highlightKeywords = Boolean(f.highlight_keywords); + /** + * Enable no results message UI component + * @type {Object|Boolean} + */ + + this.noResults = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(f.no_results_message) || Boolean(f.no_results_message); + /** + * Enable state persistence + * @type {Object|Boolean} + */ + + this.state = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(f.state) || Boolean(f.state); + /*** data types ***/ + + /** + * Enable date type module + * @type {Boolean} + * @private + */ + + this.dateType = true; + /** + * Define default locale, default to 'en' as per Sugar Date module: + * https://sugarjs.com/docs/#/DateLocales + * @type {String} + */ + + this.locale = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.locale, 'en'); + /** + * Define thousands separator ',' or '.', defaults to ',' + * @type {String} + */ + + this.thousandsSeparator = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.thousands_separator, ','); + /** + * Define decimal separator ',' or '.', defaults to '.' + * @type {String} + */ + + this.decimalSeparator = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.decimal_separator, '.'); + /** + * Define data types on a column basis, possible values 'string', + * 'number', 'formatted-number', 'date', 'ipaddress' ie: + * col_types : [ + * 'string', 'date', 'number', + * { type: 'formatted-number', decimal: ',', thousands: '.' }, + * { type: 'date', locale: 'en-gb' }, + * { type: 'date', format: ['{dd}-{months}-{yyyy|yy}'] } + * ] + * + * Refer to https://sugarjs.com/docs/#/DateParsing for exhaustive + * information on date parsing formats supported by Sugar Date + * @type {Array} + */ + + this.colTypes = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(f.col_types) ? f.col_types : []; + /*** ids prefixes ***/ + + /** + * Main prefix + * @private + */ + + this.prfxTf = 'TF'; + /** + * Filter's ID prefix (inputs - selects) + * @private + */ + + this.prfxFlt = 'flt'; + /** + * Button's ID prefix + * @private + */ + + this.prfxValButton = 'btn'; + /** + * Responsive Css class + * @private + */ + + this.prfxResponsive = 'resp'; + /** @private */ + + this.stickyCssClass = 'sticky'; + /*** extensions ***/ + + /** + * List of loaded extensions + * @type {Array} + */ + + this.extensions = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsArr"])(f.extensions, []); + /*** themes ***/ + + /** + * Enable default theme + * @type {Boolean} + */ + + this.enableDefaultTheme = Boolean(f.enable_default_theme); + /** + * Determine whether themes are enables + * @type {Boolean} + * @private + */ + + this.hasThemes = this.enableDefaultTheme || Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(f.themes); + /** + * List of themes, ie: + * themes: [{ name: 'skyblue' }] + * @type {Array} + */ + + this.themes = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsArr"])(f.themes, []); + /** + * Define path to themes assets, defaults to + * 'tablefilter/style/themes/'. Usage: + * themes: [{ name: 'skyblue' }] + * @type {Array} + */ + + this.themesPath = this.getThemesPath(); + /** + * Enable responsive layout + * @type {Boolean} + */ + + this.responsive = Boolean(f.responsive); + /** + * Enable toolbar component + * @type {Object|Boolean} + */ + + this.toolbar = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(f.toolbar) || Boolean(f.toolbar); + /** + * Enable sticky headers + * @type {Boolean} + */ + + this.stickyHeaders = Boolean(f.sticky_headers); + /** + * Features registry + * @private + */ + + this.Mod = {}; + this._mod_ = []; + /** + * Extensions registry + * @private + */ + + this.ExtRegistry = {}; // conditionally instantiate required features + + this.instantiateFeatures(Object.keys(_const__WEBPACK_IMPORTED_MODULE_10__["FEATURES"]).map(function (item) { + return _const__WEBPACK_IMPORTED_MODULE_10__["FEATURES"][item]; + })); + } + /** + * Initialise features and layout + */ + + + _createClass(TableFilter, [{ + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized) { + return; + } // import main stylesheet + + + this.import(this.stylesheetId, this.getStylesheetPath(), null, 'link'); + var Mod = this.Mod; + var inpclass; //loads theme + + this.loadThemes(); + var dateType = _const__WEBPACK_IMPORTED_MODULE_10__["FEATURES"].dateType, + help = _const__WEBPACK_IMPORTED_MODULE_10__["FEATURES"].help, + state = _const__WEBPACK_IMPORTED_MODULE_10__["FEATURES"].state, + markActiveColumns = _const__WEBPACK_IMPORTED_MODULE_10__["FEATURES"].markActiveColumns, + gridLayout = _const__WEBPACK_IMPORTED_MODULE_10__["FEATURES"].gridLayout, + loader = _const__WEBPACK_IMPORTED_MODULE_10__["FEATURES"].loader, + highlightKeyword = _const__WEBPACK_IMPORTED_MODULE_10__["FEATURES"].highlightKeyword, + popupFilter = _const__WEBPACK_IMPORTED_MODULE_10__["FEATURES"].popupFilter, + rowsCounter = _const__WEBPACK_IMPORTED_MODULE_10__["FEATURES"].rowsCounter, + statusBar = _const__WEBPACK_IMPORTED_MODULE_10__["FEATURES"].statusBar, + clearButton = _const__WEBPACK_IMPORTED_MODULE_10__["FEATURES"].clearButton, + alternateRows = _const__WEBPACK_IMPORTED_MODULE_10__["FEATURES"].alternateRows, + noResults = _const__WEBPACK_IMPORTED_MODULE_10__["FEATURES"].noResults, + paging = _const__WEBPACK_IMPORTED_MODULE_10__["FEATURES"].paging, + toolbar = _const__WEBPACK_IMPORTED_MODULE_10__["FEATURES"].toolbar; //explicitly initialise features in given order + + this.initFeatures([dateType, help, state, markActiveColumns, gridLayout, loader, highlightKeyword, popupFilter]); //filters grid is not generated + + if (!this.fltGrid) { + this._initNoFilters(); + } else { + var fltrow = this._insertFiltersRow(); + + this.nbCells = this.getCellsNb(this.refRow); + this.nbFilterableRows = this.getRowsNb(); + var n = this.singleFlt ? 1 : this.nbCells; //build filters + + for (var i = 0; i < n; i++) { + this.emitter.emit('before-filter-init', this, i); + var fltCell = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])(this.fltCellTag), + col = this.getFilterType(i); + + if (this.singleFlt) { + fltCell.colSpan = this.nbCells; + } + + if (!this.gridLayout) { + fltrow.appendChild(fltCell); + } + + inpclass = i === n - 1 && this.displayBtn ? this.fltSmallCssClass : this.fltCssClass; //only 1 input for single search + + if (this.singleFlt) { + col = _const__WEBPACK_IMPORTED_MODULE_10__["INPUT"]; + inpclass = this.singleFltCssClass; + } //drop-down filters + + + if (col === _const__WEBPACK_IMPORTED_MODULE_10__["SELECT"] || col === _const__WEBPACK_IMPORTED_MODULE_10__["MULTIPLE"]) { + Mod.dropdown = Mod.dropdown || new _modules_dropdown__WEBPACK_IMPORTED_MODULE_8__["Dropdown"](this); + Mod.dropdown.init(i, this.isExternalFlt(), fltCell); + } // checklist + else if (col === _const__WEBPACK_IMPORTED_MODULE_10__["CHECKLIST"]) { + Mod.checkList = Mod.checkList || new _modules_checkList__WEBPACK_IMPORTED_MODULE_9__["CheckList"](this); + Mod.checkList.init(i, this.isExternalFlt(), fltCell); + } else { + this._buildInputFilter(i, inpclass, fltCell); + } // this adds submit button + + + if (i === n - 1 && this.displayBtn) { + this._buildSubmitButton(this.isExternalFlt() ? Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.externalFltIds[i]) : fltCell); + } + + this.emitter.emit('after-filter-init', this, i); + } + + this.emitter.on(['filter-focus'], function (tf, filter) { + return _this2.setActiveFilterId(filter.id); + }); + } //if this.fltGrid + + /* Features */ + + + if (this.hasExcludedRows) { + this.emitter.on(['after-filtering'], function () { + return _this2.setExcludeRows(); + }); + this.setExcludeRows(); + } + + this.initFeatures([rowsCounter, statusBar, clearButton, alternateRows, noResults, paging, toolbar]); + this.setColWidths(); //TF css class is added to table + + if (!this.gridLayout) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(this.dom(), this.prfxTf); + + if (this.responsive) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(this.dom(), this.prfxResponsive); + } + + if (this.colWidths.length > 0) { + this.setFixedLayout(); + } + + if (this.stickyHeaders && this.dom().tHead) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(this.dom(), this.stickyCssClass); + } + } + /* Load extensions */ + + + this.initExtensions(); + this.initialized = true; + this.onFiltersLoaded(this); + this.emitter.emit('initialized', this); + } + /** + * Detect key + * @param {Event} evt + */ + + }, { + key: "detectKey", + value: function detectKey(evt) { + if (!this.enterKey) { + return; + } + + if (Object(_event__WEBPACK_IMPORTED_MODULE_0__["isKeyPressed"])(evt, [_const__WEBPACK_IMPORTED_MODULE_10__["ENTER_KEY"]])) { + this.filter(); + Object(_event__WEBPACK_IMPORTED_MODULE_0__["cancelEvt"])(evt); + Object(_event__WEBPACK_IMPORTED_MODULE_0__["stopEvt"])(evt); + } else { + this.isUserTyping = true; + _root__WEBPACK_IMPORTED_MODULE_6__["root"].clearInterval(this.autoFilterTimer); + this.autoFilterTimer = null; + } + } + /** + * Filter's keyup event: if auto-filter on, detect user is typing and filter + * columns + * @param {Event} evt + */ + + }, { + key: "onKeyUp", + value: function onKeyUp(evt) { + if (!this.autoFilter) { + return; + } + + this.isUserTyping = false; + + function filter() { + _root__WEBPACK_IMPORTED_MODULE_6__["root"].clearInterval(this.autoFilterTimer); + this.autoFilterTimer = null; + + if (!this.isUserTyping) { + this.filter(); + this.isUserTyping = null; + } + } + + if (Object(_event__WEBPACK_IMPORTED_MODULE_0__["isKeyPressed"])(evt, [_const__WEBPACK_IMPORTED_MODULE_10__["ENTER_KEY"], _const__WEBPACK_IMPORTED_MODULE_10__["TAB_KEY"], _const__WEBPACK_IMPORTED_MODULE_10__["ESC_KEY"], _const__WEBPACK_IMPORTED_MODULE_10__["UP_ARROW_KEY"], _const__WEBPACK_IMPORTED_MODULE_10__["DOWN_ARROW_KEY"]])) { + _root__WEBPACK_IMPORTED_MODULE_6__["root"].clearInterval(this.autoFilterTimer); + this.autoFilterTimer = null; + } else { + if (this.autoFilterTimer !== null) { + return; + } + + this.autoFilterTimer = _root__WEBPACK_IMPORTED_MODULE_6__["root"].setInterval(filter.bind(this), this.autoFilterDelay); + } + } + /** + * Filter's keydown event: if auto-filter on, detect user is typing + */ + + }, { + key: "onKeyDown", + value: function onKeyDown() { + if (this.autoFilter) { + this.isUserTyping = true; + } + } + /** + * Filter's focus event + * @param {Event} evt + */ + + }, { + key: "onInpFocus", + value: function onInpFocus(evt) { + var elm = Object(_event__WEBPACK_IMPORTED_MODULE_0__["targetEvt"])(evt); + this.emitter.emit('filter-focus', this, elm); + } + /** + * Filter's blur event: if auto-filter on, clear interval on filter blur + */ + + }, { + key: "onInpBlur", + value: function onInpBlur() { + if (this.autoFilter) { + this.isUserTyping = false; + _root__WEBPACK_IMPORTED_MODULE_6__["root"].clearInterval(this.autoFilterTimer); + } + + this.emitter.emit('filter-blur', this); + } + /** + * Insert filters row at initialization + */ + + }, { + key: "_insertFiltersRow", + value: function _insertFiltersRow() { + // TODO: prevent filters row generation for popup filters too, + // to reduce and simplify headers row index adjusting across lib modules + // (GridLayout, PopupFilter etc) + if (this.gridLayout) { + return; + } + + var fltrow; + var thead = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(this.dom(), 'thead'); + + if (thead.length > 0) { + fltrow = thead[0].insertRow(this.filtersRowIndex); + } else { + fltrow = this.dom().insertRow(this.filtersRowIndex); + } + + fltrow.className = this.fltsRowCssClass; + + if (this.isExternalFlt()) { + fltrow.style.display = _const__WEBPACK_IMPORTED_MODULE_10__["NONE"]; + } + + this.emitter.emit('filters-row-inserted', this, fltrow); + return fltrow; + } + /** + * Initialize filtersless table + */ + + }, { + key: "_initNoFilters", + value: function _initNoFilters() { + if (this.fltGrid) { + return; + } + + this.refRow = this.refRow > 0 ? this.refRow - 1 : 0; + this.nbFilterableRows = this.getRowsNb(); + } + /** + * Build input filter type + * @param {Number} colIndex Column index + * @param {String} cssClass Css class applied to filter + * @param {DOMElement} container Container DOM element + */ + + }, { + key: "_buildInputFilter", + value: function _buildInputFilter(colIndex, cssClass, container) { + var _this3 = this; + + var col = this.getFilterType(colIndex); + var externalFltTgtId = this.isExternalFlt() ? this.externalFltIds[colIndex] : null; + var inpType = col === _const__WEBPACK_IMPORTED_MODULE_10__["INPUT"] ? 'text' : 'hidden'; + var inp = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])(_const__WEBPACK_IMPORTED_MODULE_10__["INPUT"], ['id', this.buildFilterId(colIndex)], ['type', inpType], ['ct', colIndex]); + + if (inpType !== 'hidden' && this.watermark) { + inp.setAttribute('placeholder', this.isWatermarkArray ? this.watermark[colIndex] || '' : this.watermark); + } + + inp.className = cssClass || this.fltCssClass; + Object(_event__WEBPACK_IMPORTED_MODULE_0__["addEvt"])(inp, 'focus', function (evt) { + return _this3.onInpFocus(evt); + }); //filter is appended in custom element + + if (externalFltTgtId) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(externalFltTgtId).appendChild(inp); + } else { + container.appendChild(inp); + } + + this.fltIds.push(inp.id); + Object(_event__WEBPACK_IMPORTED_MODULE_0__["addEvt"])(inp, 'keypress', function (evt) { + return _this3.detectKey(evt); + }); + Object(_event__WEBPACK_IMPORTED_MODULE_0__["addEvt"])(inp, 'keydown', function () { + return _this3.onKeyDown(); + }); + Object(_event__WEBPACK_IMPORTED_MODULE_0__["addEvt"])(inp, 'keyup', function (evt) { + return _this3.onKeyUp(evt); + }); + Object(_event__WEBPACK_IMPORTED_MODULE_0__["addEvt"])(inp, 'blur', function () { + return _this3.onInpBlur(); + }); + } + /** + * Build submit button + * @param {DOMElement} container Container DOM element + */ + + }, { + key: "_buildSubmitButton", + value: function _buildSubmitButton(container) { + var _this4 = this; + + var btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])(_const__WEBPACK_IMPORTED_MODULE_10__["INPUT"], ['type', 'button'], ['value', this.btnText]); + btn.className = this.btnCssClass; //filter is appended in container element + + container.appendChild(btn); + Object(_event__WEBPACK_IMPORTED_MODULE_0__["addEvt"])(btn, 'click', function () { + return _this4.filter(); + }); + } + /** + * 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' + * } + * @param {Array} [features=[]] + * @private + */ + + }, { + key: "instantiateFeatures", + value: function instantiateFeatures() { + var _this5 = this; + + var features = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + features.forEach(function (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 (!_this5.hasConfig || _this5[feature.property] === true || feature.enforce === true) { + var Cls = feature.class, + name = feature.name; + _this5.Mod[name] = _this5.Mod[name] || new Cls(_this5); + } + }); + } + /** + * Initialise the passed features collection. A feature is described by a + * `class` and `name` fields and and optional `property` field: + * { + * class: AClass, + * name: 'aClass' + * } + * @param {Array} [features=[]] + * @private + */ + + }, { + key: "initFeatures", + value: function initFeatures() { + var _this6 = this; + + var features = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + features.forEach(function (feature) { + var property = feature.property, + name = feature.name; + + if (_this6[property] === true && _this6.Mod[name]) { + _this6.Mod[name].init(); + } + }); + } + /** + * Return a feature instance for a given name + * @param {String} name Name of the feature + * @return {Object} + */ + + }, { + key: "feature", + value: function feature(name) { + return this.Mod[name]; + } + /** + * Initialise all the extensions defined in the configuration object + */ + + }, { + key: "initExtensions", + value: function initExtensions() { + var _this7 = this; + + var exts = this.extensions; + + if (exts.length === 0) { + return; + } // Set config's publicPath dynamically for Webpack... + + + __webpack_require__.p = this.basePath; + this.emitter.emit('before-loading-extensions', this); + exts.forEach(function (ext) { + _this7.loadExtension(ext); + }); + this.emitter.emit('after-loading-extensions', this); + } + /** + * Load an extension module + * @param {Object} ext Extension config object + */ + + }, { + key: "loadExtension", + value: function loadExtension(ext) { + var _this8 = this; + + if (!ext || !ext.name || this.hasExtension(ext.name)) { + return; + } + + var name = ext.name, + path = ext.path; + var modulePath; + + if (name && path) { + modulePath = ext.path + name; + } else { + name = name.replace('.js', ''); + modulePath = 'extensions/{}/{}'.replace(/{}/g, name); + } // Require pattern for Webpack + + + __webpack_require__.e(/*! AMD require */ 0).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__("./src sync recursive ^\\.\\/.*$")("./" + modulePath)]; (function (mod) { + /* eslint-disable */ + var inst = new mod.default(_this8, ext); + /* eslint-enable */ + + inst.init(); + _this8.ExtRegistry[name] = inst; + }).apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__);}).catch(__webpack_require__.oe); + } + /** + * Get an extension instance + * @param {String} name Name of the extension + * @return {Object} Extension instance + */ + + }, { + key: "extension", + value: function extension(name) { + return this.ExtRegistry[name]; + } + /** + * Check passed extension name exists + * @param {String} name Name of the extension + * @return {Boolean} + */ + + }, { + key: "hasExtension", + value: function hasExtension(name) { + return !Object(_types__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(this.ExtRegistry[name]); + } + /** + * Register the passed extension instance with associated name + * @param {Object} inst Extension instance + * @param {String} name Name of the extension + */ + + }, { + key: "registerExtension", + value: function registerExtension(inst, name) { + this.ExtRegistry[name] = inst; + } + /** + * Destroy all the extensions store in extensions registry + */ + + }, { + key: "destroyExtensions", + value: function destroyExtensions() { + var reg = this.ExtRegistry; + Object.keys(reg).forEach(function (key) { + reg[key].destroy(); + reg[key] = undefined; + }); + } + /** + * Load themes defined in the configuration object + */ + + }, { + key: "loadThemes", + value: function loadThemes() { + var _this9 = this; + + if (!this.hasThemes) { + return; + } + + var themes = this.themes; + this.emitter.emit('before-loading-themes', this); //Default theme config + + if (this.enableDefaultTheme) { + var defaultTheme = { + name: 'default' + }; + this.themes.push(defaultTheme); + } + + themes.forEach(function (theme, i) { + var name = theme.name, + path = theme.path; + var styleId = _this9.prfxTf + name; + + if (name && !path) { + path = _this9.themesPath + name + '/' + name + '.css'; + } else if (!name && theme.path) { + name = 'theme{0}'.replace('{0}', i); + } + + if (!_this9.isImported(path, 'link')) { + _this9.import(styleId, path, null, 'link'); + } + }); // Enable loader indicator + + this.loader = true; + this.emitter.emit('after-loading-themes', this); + } + /** + * Return stylesheet DOM element for a given theme name + * @return {DOMElement} stylesheet element + */ + + }, { + key: "getStylesheet", + value: function getStylesheet() { + var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'default'; + return Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.prfxTf + name); + } + /** + * Destroy filter grid + */ + + }, { + key: "destroy", + value: function destroy() { + var _this10 = this; + + if (!this.initialized) { + return; + } + + var emitter = this.emitter; + + if (this.isExternalFlt() && !this.popupFilters) { + this.removeExternalFlts(); + } + + this.destroyExtensions(); + this.validateAllRows(); // broadcast destroy event modules and extensions are subscribed to + + emitter.emit('destroy', this); + + if (this.fltGrid && !this.gridLayout) { + this.dom().deleteRow(this.filtersRowIndex); + } // unsubscribe to events + + + if (this.hasExcludedRows) { + emitter.off(['after-filtering'], function () { + return _this10.setExcludeRows(); + }); + } + + this.emitter.off(['filter-focus'], function (tf, filter) { + return _this10.setActiveFilterId(filter.id); + }); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeClass"])(this.dom(), this.prfxTf); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeClass"])(this.dom(), this.prfxResponsive); + + if (this.dom().tHead) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeClass"])(this.dom().tHead, this.stickyCssClass); + } + + this.nbHiddenRows = 0; + this.validRowsIndex = []; + this.fltIds = []; + this.initialized = false; + } + /** + * Remove all the external column filters + */ + + }, { + key: "removeExternalFlts", + value: function removeExternalFlts() { + if (!this.isExternalFlt()) { + return; + } + + var ids = this.externalFltIds; + ids.forEach(function (id) { + var externalFlt = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(id); + + if (externalFlt) { + externalFlt.innerHTML = ''; + } + }); + } + /** + * Check if given column implements a filter with custom options + * @param {Number} colIndex Column's index + * @return {Boolean} + */ + + }, { + key: "isCustomOptions", + value: function isCustomOptions(colIndex) { + return this.hasCustomOptions && this.customOptions.cols.indexOf(colIndex) !== -1; + } + /** + * Returns an array [[value0, value1 ...],[text0, text1 ...]] with the + * custom options values and texts + * @param {Number} colIndex Column's index + * @return {Array} + */ + + }, { + key: "getCustomOptions", + value: function getCustomOptions(colIndex) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(colIndex) || !this.isCustomOptions(colIndex)) { + return; + } + + var customOptions = this.customOptions; + var cols = customOptions.cols; + var optTxt = [], + optArray = []; + var index = cols.indexOf(colIndex); + var slcValues = customOptions.values[index]; + var slcTexts = customOptions.texts[index]; + var slcSort = customOptions.sorts[index]; + + for (var r = 0, len = slcValues.length; r < len; r++) { + optArray.push(slcValues[r]); + + if (slcTexts[r]) { + optTxt.push(slcTexts[r]); + } else { + optTxt.push(slcValues[r]); + } + } + + if (slcSort) { + optArray.sort(); + optTxt.sort(); + } + + return [optArray, optTxt]; + } + /** + * Filter the table by retrieving the data from each cell in every single + * row and comparing it to the search term for current column. A row is + * hidden when all the search terms are not found in inspected row. + */ + + }, { + key: "filter", + value: function filter() { + var _this11 = this; + + if (!this.fltGrid || !this.initialized) { + return; + } + + var emitter = this.emitter; //fire onbefore callback + + this.onBeforeFilter(this); + emitter.emit('before-filtering', this); + var hiddenRows = 0; + this.validRowsIndex = []; // search args + + var searchArgs = this.getFiltersValue(); + var eachRow = this.eachRow(); + eachRow(function (row, k) { + // already filtered rows display re-init + row.style.display = ''; + var cells = row.cells; + var nbCells = cells.length; + var occurence = [], + isMatch = true, + //only for single filter search + isSingleFltMatch = false; // this loop retrieves cell data + + for (var j = 0; j < nbCells; j++) { + //searched keyword + var sA = searchArgs[_this11.singleFlt ? 0 : j]; + + if (sA === '') { + continue; + } + + var cellValue = Object(_string__WEBPACK_IMPORTED_MODULE_2__["matchCase"])(_this11.getCellValue(cells[j]), _this11.caseSensitive); //multiple search parameter operator || + + var sAOrSplit = sA.toString().split(_this11.orOperator), + //multiple search || parameter boolean + hasMultiOrSA = sAOrSplit.length > 1, + //multiple search parameter operator && + sAAndSplit = sA.toString().split(_this11.anOperator), + //multiple search && parameter boolean + hasMultiAndSA = sAAndSplit.length > 1; //detect operators or array query + + if (Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(sA) || hasMultiOrSA || hasMultiAndSA) { + var cS = void 0, + s = void 0; + var found = false; + + if (Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(sA)) { + s = sA; + } else { + s = hasMultiOrSA ? sAOrSplit : sAAndSplit; + } // isolate search term and check occurence in cell data + + + for (var w = 0, len = s.length; w < len; w++) { + cS = Object(_string__WEBPACK_IMPORTED_MODULE_2__["trim"])(s[w]); + found = _this11._match(cS, cellValue, cells[j]); + + if (found) { + emitter.emit('highlight-keyword', _this11, cells[j], cS); + } + + if (hasMultiOrSA && found || hasMultiAndSA && !found) { + break; + } + + if (Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(sA) && found) { + break; + } + } + + occurence[j] = found; + } //single search parameter + else { + occurence[j] = _this11._match(Object(_string__WEBPACK_IMPORTED_MODULE_2__["trim"])(sA), cellValue, cells[j]); + + if (occurence[j]) { + emitter.emit('highlight-keyword', _this11, cells[j], sA); + } + } + + if (!occurence[j]) { + isMatch = false; + } + + if (_this11.singleFlt && _this11.singleFltExcludeCols.indexOf(j) === -1 && occurence[j]) { + isSingleFltMatch = true; + } + + emitter.emit('cell-processed', _this11, j, cells[j]); + } //for j + + + if (isSingleFltMatch) { + isMatch = true; + } + + _this11.validateRow(k, isMatch); + + if (!isMatch) { + hiddenRows++; + } + + emitter.emit('row-processed', _this11, k, _this11.validRowsIndex.length - 1, isMatch); + }, // continue condition + function (row) { + return row.cells.length !== _this11.nbCells; + }); + this.nbHiddenRows = hiddenRows; //fire onafterfilter callback + + this.onAfterFilter(this); + emitter.emit('after-filtering', this, searchArgs); + } + /** + * Match search term in cell data + * @param {String} term Search term + * @param {String} cellValue Cell data + * @param {DOMElement} cell Current cell + * @return {Boolean} + * @private + */ + + }, { + key: "_match", + value: function _match(term, cellValue, cell) { + var numData; + var colIdx = cell.cellIndex; + var decimal = this.getDecimal(colIdx); + var reLe = new RegExp(this.leOperator), + reGe = new RegExp(this.geOperator), + reL = new RegExp(this.lwOperator), + reG = new RegExp(this.grOperator), + reD = new RegExp(this.dfOperator), + reLk = new RegExp(Object(_string__WEBPACK_IMPORTED_MODULE_2__["rgxEsc"])(this.lkOperator)), + reEq = new RegExp(this.eqOperator), + reSt = new RegExp(this.stOperator), + reEn = new RegExp(this.enOperator), + // re_an = new RegExp(this.anOperator), + // re_cr = new RegExp(this.curExp), + reEm = this.emOperator, + reNm = this.nmOperator, + reRe = new RegExp(Object(_string__WEBPACK_IMPORTED_MODULE_2__["rgxEsc"])(this.rgxOperator)); + term = Object(_string__WEBPACK_IMPORTED_MODULE_2__["matchCase"])(term, this.caseSensitive); + var occurence = false; //Search arg operator tests + + var hasLO = reL.test(term), + hasLE = reLe.test(term), + hasGR = reG.test(term), + hasGE = reGe.test(term), + hasDF = reD.test(term), + hasEQ = reEq.test(term), + hasLK = reLk.test(term), + // hatermN = re_an.test(term), + hasST = reSt.test(term), + hasEN = reEn.test(term), + hasEM = reEm === term, + hasNM = reNm === term, + hasRE = reRe.test(term); // Check for dates or resolve date type + + if (this.hasType(colIdx, [_const__WEBPACK_IMPORTED_MODULE_10__["DATE"]])) { + var dte1, dte2; + var dateType = this.Mod.dateType; + var isValidDate = dateType.isValid.bind(dateType); + var parseDate = dateType.parse.bind(dateType); + var locale = dateType.getLocale(colIdx); // Search arg dates tests + + var isLDate = hasLO && isValidDate(term.replace(reL, ''), locale); + var isLEDate = hasLE && isValidDate(term.replace(reLe, ''), locale); + var isGDate = hasGR && isValidDate(term.replace(reG, ''), locale); + var isGEDate = hasGE && isValidDate(term.replace(reGe, ''), locale); + var isDFDate = hasDF && isValidDate(term.replace(reD, ''), locale); + var isEQDate = hasEQ && isValidDate(term.replace(reEq, ''), locale); + dte1 = parseDate(cellValue, locale); // lower equal date + + if (isLEDate) { + dte2 = parseDate(term.replace(reLe, ''), locale); + occurence = dte1 <= dte2; + } // lower date + else if (isLDate) { + dte2 = parseDate(term.replace(reL, ''), locale); + occurence = dte1 < dte2; + } // greater equal date + else if (isGEDate) { + dte2 = parseDate(term.replace(reGe, ''), locale); + occurence = dte1 >= dte2; + } // greater date + else if (isGDate) { + dte2 = parseDate(term.replace(reG, ''), locale); + occurence = dte1 > dte2; + } // different date + else if (isDFDate) { + dte2 = parseDate(term.replace(reD, ''), locale); + occurence = dte1.toString() !== dte2.toString(); + } // equal date + else if (isEQDate) { + dte2 = parseDate(term.replace(reEq, ''), locale); + occurence = dte1.toString() === dte2.toString(); + } // searched keyword with * operator doesn't have to be a date + else if (reLk.test(term)) { + // like date + occurence = Object(_string__WEBPACK_IMPORTED_MODULE_2__["contains"])(term.replace(reLk, ''), cellValue, false, this.caseSensitive); + } else if (isValidDate(term)) { + dte2 = parseDate(term, locale); + occurence = dte1.toString() === dte2.toString(); + } //empty + else if (hasEM) { + occurence = !cell.hasChildNodes(); + } //non-empty + else if (hasNM) { + occurence = cell.hasChildNodes(); + } else { + occurence = Object(_string__WEBPACK_IMPORTED_MODULE_2__["contains"])(term, cellValue, this.isExactMatch(colIdx), this.caseSensitive); + } + } else { + // Convert to number anyways to auto-resolve type in case not + // defined by configuration. Order is important first try to + // parse formatted number then fallback to Number coercion + // to avoid false positives with Number + numData = Object(_number__WEBPACK_IMPORTED_MODULE_4__["parse"])(cellValue, decimal) || Number(cellValue); // first checks if there is any operator (<,>,<=,>=,!,*,=,{,}, + // rgx:) + //regexp + + if (hasRE) { + //in case regexp throws + try { + //operator is removed + var srchArg = term.replace(reRe, ''); + var rgx = new RegExp(srchArg); + occurence = rgx.test(cellValue); + } catch (ex) { + occurence = false; + } + } // lower equal + else if (hasLE) { + occurence = numData <= Object(_number__WEBPACK_IMPORTED_MODULE_4__["parse"])(term.replace(reLe, ''), decimal); + } //greater equal + else if (hasGE) { + occurence = numData >= Object(_number__WEBPACK_IMPORTED_MODULE_4__["parse"])(term.replace(reGe, ''), decimal); + } //lower + else if (hasLO) { + occurence = numData < Object(_number__WEBPACK_IMPORTED_MODULE_4__["parse"])(term.replace(reL, ''), decimal); + } //greater + else if (hasGR) { + occurence = numData > Object(_number__WEBPACK_IMPORTED_MODULE_4__["parse"])(term.replace(reG, ''), decimal); + } //different + else if (hasDF) { + occurence = Object(_string__WEBPACK_IMPORTED_MODULE_2__["contains"])(term.replace(reD, ''), cellValue, false, this.caseSensitive) ? false : true; + } //like + else if (hasLK) { + occurence = Object(_string__WEBPACK_IMPORTED_MODULE_2__["contains"])(term.replace(reLk, ''), cellValue, false, this.caseSensitive); + } //equal + else if (hasEQ) { + occurence = Object(_string__WEBPACK_IMPORTED_MODULE_2__["contains"])(term.replace(reEq, ''), cellValue, true, this.caseSensitive); + } //starts with + else if (hasST) { + occurence = cellValue.indexOf(term.replace(reSt, '')) === 0 ? true : false; + } //ends with + else if (hasEN) { + var searchArg = term.replace(reEn, ''); + occurence = cellValue.lastIndexOf(searchArg, cellValue.length - 1) === cellValue.length - 1 - (searchArg.length - 1) && cellValue.lastIndexOf(searchArg, cellValue.length - 1) > -1 ? true : false; + } //empty + else if (hasEM) { + occurence = !cell.hasChildNodes(); + } //non-empty + else if (hasNM) { + occurence = cell.hasChildNodes(); + } else { + // If numeric type data, perform a strict equality test and + // fallback to unformatted number string comparison + if (numData && this.hasType(colIdx, [_const__WEBPACK_IMPORTED_MODULE_10__["NUMBER"], _const__WEBPACK_IMPORTED_MODULE_10__["FORMATTED_NUMBER"]]) && !this.singleFlt) { + // parseNb can return 0 for strings which are not + // formatted numbers, in that case return the original + // string. TODO: handle this in parseNb + term = Object(_number__WEBPACK_IMPORTED_MODULE_4__["parse"])(term, decimal) || term; + occurence = numData === term || Object(_string__WEBPACK_IMPORTED_MODULE_2__["contains"])(term.toString(), numData.toString(), this.isExactMatch(colIdx), this.caseSensitive); + } else { + // Finally test search term is contained in cell data + occurence = Object(_string__WEBPACK_IMPORTED_MODULE_2__["contains"])(term, cellValue, this.isExactMatch(colIdx), this.caseSensitive, this.ignoresDiacritics(colIdx)); + } + } + } //else + + + return occurence; + } + /** + * Return the data of a specified column + * @param {Number} colIndex Column index + * @param {Boolean} [includeHeaders=false] Include headers row + * @param {Array} [exclude=[]] List of row indexes to be excluded + * @return Flat list of data for a column + */ + + }, { + key: "getColumnData", + value: function getColumnData(colIndex) { + var includeHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var exclude = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; + return this.getColValues(colIndex, includeHeaders, true, exclude); + } + /** + * Return the values of a specified column + * @param {Number} colIndex Column index + * @param {Boolean} [includeHeaders=false] Include headers row + * @param {Array} [exclude=[]] List of row indexes to be excluded + * @return Flat list of values for a column + */ + + }, { + key: "getColumnValues", + value: function getColumnValues(colIndex) { + var includeHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var exclude = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; + return this.getColValues(colIndex, includeHeaders, false, exclude); + } + /** + * Return the data of a specified column + * @param {Number} colIndex Column index + * @param {Boolean} [includeHeaders=false] Include headers row + * @param {Boolean} [typed=false] Return a typed value + * @param {Array} [exclude=[]] List of row indexes to be excluded + * @return {Array} Flat list of data for a column + * @private + */ + + }, { + key: "getColValues", + value: function getColValues(colIndex) { + var _this12 = this; + + var includeHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var typed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var exclude = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; + var colValues = []; + var getContent = typed ? this.getCellData.bind(this) : this.getCellValue.bind(this); + + if (includeHeaders) { + colValues.push(this.getHeadersText()[colIndex]); + } + + var eachRow = this.eachRow(); + eachRow(function (row, i) { + // checks if current row index appears in exclude array + var isExludedRow = exclude.indexOf(i) !== -1; + var cells = row.cells; // checks if row has exact cell # and is not excluded + + if (cells.length === _this12.nbCells && !isExludedRow) { + var data = getContent(cells[colIndex]); + colValues.push(data); + } + }); + return colValues; + } + /** + * Return the filter's value of a specified column + * @param {Number} index Column index + * @return {String} Filter value + */ + + }, { + key: "getFilterValue", + value: function getFilterValue(index) { + if (!this.fltGrid) { + return; + } + + var fltValue = ''; + var flt = this.getFilterElement(index); + + if (!flt) { + return fltValue; + } + + var fltColType = this.getFilterType(index); + + if (fltColType !== _const__WEBPACK_IMPORTED_MODULE_10__["MULTIPLE"] && fltColType !== _const__WEBPACK_IMPORTED_MODULE_10__["CHECKLIST"]) { + fltValue = flt.value; + } //mutiple select + else if (fltColType === _const__WEBPACK_IMPORTED_MODULE_10__["MULTIPLE"]) { + fltValue = this.feature('dropdown').getValues(index); + } //checklist + else if (fltColType === _const__WEBPACK_IMPORTED_MODULE_10__["CHECKLIST"]) { + fltValue = this.feature('checkList').getValues(index); + } //return an empty string if collection is empty or contains a single + //empty string + + + if (Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(fltValue) && fltValue.length === 0 || fltValue.length === 1 && fltValue[0] === '') { + fltValue = ''; + } + + return fltValue; + } + /** + * Return the filters' values + * @return {Array} List of filters' values + */ + + }, { + key: "getFiltersValue", + value: function getFiltersValue() { + var _this13 = this; + + if (!this.fltGrid) { + return; + } + + var searchArgs = []; + this.fltIds.forEach(function (id, i) { + var fltValue = _this13.getFilterValue(i); + + if (Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(fltValue)) { + searchArgs.push(fltValue); + } else { + searchArgs.push(Object(_string__WEBPACK_IMPORTED_MODULE_2__["trim"])(fltValue)); + } + }); + return searchArgs; + } + /** + * Return the ID of a specified column's filter + * @param {Number} index Column's index + * @return {String} ID of the filter element + */ + + }, { + key: "getFilterId", + value: function getFilterId(index) { + if (!this.fltGrid) { + return; + } + + return this.fltIds[index]; + } + /** + * Return the list of ids of filters matching a specified type. + * Note: hidden filters are also returned + * + * @param {String} type Filter type string ('input', 'select', 'multiple', + * 'checklist') + * @param {Boolean} bool If true returns columns indexes instead of IDs + * @return {[type]} List of element IDs or column indexes + */ + + }, { + key: "getFiltersByType", + value: function getFiltersByType(type, bool) { + if (!this.fltGrid) { + return; + } + + var arr = []; + + for (var i = 0, len = this.fltIds.length; i < len; i++) { + var fltType = this.getFilterType(i); + + if (fltType === type.toLowerCase()) { + var a = bool ? i : this.fltIds[i]; + arr.push(a); + } + } + + return arr; + } + /** + * Return the filter's DOM element for a given column + * @param {Number} index Column's index + * @return {DOMElement} + */ + + }, { + key: "getFilterElement", + value: function getFilterElement(index) { + return Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.fltIds[index]); + } + /** + * Return the number of cells for a given row index + * @param {Number} rowIndex Index of the row + * @return {Number} Number of cells + */ + + }, { + key: "getCellsNb", + value: function getCellsNb() { + var rowIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + var tr = this.dom().rows[rowIndex >= 0 ? rowIndex : 0]; + return tr ? tr.cells.length : 0; + } + /** + * Return the number of working rows starting from reference row if + * defined + * @param {Boolean} includeHeaders Include the headers row(s) + * @return {Number} Number of working rows + */ + + }, { + key: "getRowsNb", + value: function getRowsNb(includeHeaders) { + var nbRows = this.getWorkingRows().length; + + if (this.dom().tHead) { + return includeHeaders ? nbRows + this.dom().querySelectorAll('thead > tr').length : nbRows; + } + + return includeHeaders ? nbRows : nbRows - this.refRow; + } + /** + * Return the collection of the working rows, that is, the rows belonging + * to the tbody section(s) + * @returns {Array} + */ + + }, { + key: "getWorkingRows", + value: function getWorkingRows() { + return doc.querySelectorAll("table#".concat(this.id, " > tbody > tr")); + } + /** + * Return the text content of a given cell + * @param {DOMElement} Cell's DOM element + * @return {String} + */ + + }, { + key: "getCellValue", + value: function getCellValue(cell) { + var idx = cell.cellIndex; + var cellParser = this.cellParser; // Invoke cellParser for this column if any + + if (cellParser.cols.indexOf(idx) !== -1) { + return cellParser.parse(this, cell, idx); + } else { + return Object(_dom__WEBPACK_IMPORTED_MODULE_1__["getText"])(cell); + } + } + /** + * Return the typed data of a given cell based on the column type definition + * @param {DOMElement} cell Cell's DOM element + * @return {String|Number|Date} + */ + + }, { + key: "getCellData", + value: function getCellData(cell) { + var colIndex = cell.cellIndex; + var value = this.getCellValue(cell); + + if (this.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_10__["FORMATTED_NUMBER"]])) { + return Object(_number__WEBPACK_IMPORTED_MODULE_4__["parse"])(value, this.getDecimal(colIndex)); + } else if (this.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_10__["NUMBER"]])) { + return Number(value); + } else if (this.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_10__["DATE"]])) { + var dateType = this.Mod.dateType; + return dateType.parse(value, dateType.getLocale(colIndex)); + } + + return value; + } + /** + * Return the table data based on its columns data type definitions + * with following structure: + * [ + * [rowIndex, [data0, data1...]], + * [rowIndex, [data0, data1...]] + * ] + * @param {Boolean} [includeHeaders=false] Include headers row + * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns + * @return {Array} + */ + + }, { + key: "getData", + value: function getData() { + var includeHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var excludeHiddenCols = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return this.getTableData(includeHeaders, excludeHiddenCols, true); + } + /** + * Return the table values with following structure: + * [ + * [rowIndex, [value0, value1...]], + * [rowIndex, [value0, value1...]] + * ] + * @param {Boolean} [includeHeaders=false] Include headers row + * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns + * @return {Array} + */ + + }, { + key: "getValues", + value: function getValues() { + var includeHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var excludeHiddenCols = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return this.getTableData(includeHeaders, excludeHiddenCols, false); + } + /** + * Return the table data with following structure: + * [ + * [rowIndex, [value0, value1...]], + * [rowIndex, [value0, value1...]] + * ] + * @param {Boolean} [includeHeaders=false] Include headers row + * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns + * @param {Boolean} [typed=false] Return typed value + * @return {Array} + * @private + * + * TODO: provide an API returning data in JSON format + */ + + }, { + key: "getTableData", + value: function getTableData() { + var _this14 = this; + + var includeHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var excludeHiddenCols = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var typed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var tblData = []; + var getContent = typed ? this.getCellData.bind(this) : this.getCellValue.bind(this); + + if (includeHeaders) { + var headers = this.getHeadersText(excludeHiddenCols); + tblData.push([this.getHeadersRowIndex(), headers]); + } + + var eachRow = this.eachRow(); + eachRow(function (row, k) { + var rowData = [k, []]; + var cells = row.cells; + + for (var j = 0, len = cells.length; j < len; j++) { + if (excludeHiddenCols && _this14.hasExtension('colsVisibility')) { + if (_this14.extension('colsVisibility').isColHidden(j)) { + continue; + } + } + + var cellContent = getContent(cells[j]); + rowData[1].push(cellContent); + } + + tblData.push(rowData); + }); + return tblData; + } + /** + * Return the filtered table data based on its columns data type definitions + * with following structure: + * [ + * [rowIndex, [data0, data1...]], + * [rowIndex, [data0, data1...]] + * ] + * @param {Boolean} [includeHeaders=false] Include headers row + * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns + * @return {Array} + * + * TODO: provide an API returning data in JSON format + */ + + }, { + key: "getFilteredData", + value: function getFilteredData() { + var includeHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var excludeHiddenCols = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return this.filteredData(includeHeaders, excludeHiddenCols, true); + } + /** + * Return the filtered table values with following structure: + * [ + * [rowIndex, [value0, value1...]], + * [rowIndex, [value0, value1...]] + * ] + * @param {Boolean} [includeHeaders=false] Include headers row + * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns + * @return {Array} + * + * TODO: provide an API returning data in JSON format + */ + + }, { + key: "getFilteredValues", + value: function getFilteredValues() { + var includeHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var excludeHiddenCols = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return this.filteredData(includeHeaders, excludeHiddenCols, false); + } + /** + * Return the filtered data with following structure: + * [ + * [rowIndex, [value0, value1...]], + * [rowIndex, [value0, value1...]] + * ] + * @param {Boolean} [includeHeaders=false] Include headers row + * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns + * @param {Boolean} [typed=false] Return typed value + * @return {Array} + * @private + * + * TODO: provide an API returning data in JSON format + */ + + }, { + key: "filteredData", + value: function filteredData() { + var includeHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var excludeHiddenCols = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var typed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + if (this.validRowsIndex.length === 0) { + return []; + } + + var rows = this.dom().rows, + filteredData = []; + var getContent = typed ? this.getCellData.bind(this) : this.getCellValue.bind(this); + + if (includeHeaders) { + var headers = this.getHeadersText(excludeHiddenCols); + filteredData.push([this.getHeadersRowIndex(), headers]); + } + + var validRows = this.getValidRows(true); + + for (var i = 0; i < validRows.length; i++) { + var rData = [this.validRowsIndex[i], []], + cells = rows[this.validRowsIndex[i]].cells; + + for (var k = 0; k < cells.length; k++) { + if (excludeHiddenCols && this.hasExtension('colsVisibility')) { + if (this.extension('colsVisibility').isColHidden(k)) { + continue; + } + } + + var cellValue = getContent(cells[k]); + rData[1].push(cellValue); + } + + filteredData.push(rData); + } + + return filteredData; + } + /** + * Return the filtered data for a given column index + * @param {any} colIndex Colmun's index + * @param {boolean} [includeHeaders=false] Optional Include headers row + * @param {any} [exclude=[]] Optional List of row indexes to be excluded + * @return {Array} Flat list of typed values [data0, data1, data2...] + * + * TODO: provide an API returning data in JSON format + */ + + }, { + key: "getFilteredColumnData", + value: function getFilteredColumnData(colIndex) { + var includeHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var exclude = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; + return this.getFilteredDataCol(colIndex, includeHeaders, true, exclude, false); + } + /** + * Return the filtered and visible data for a given column index + * @param {any} colIndex Colmun's index + * @param {boolean} [includeHeaders=false] Optional Include headers row + * @param {any} [exclude=[]] Optional List of row indexes to be excluded + * @return {Array} Flat list of typed values [data0, data1, data2...] + * + * TODO: provide an API returning data in JSON format + */ + + }, { + key: "getVisibleColumnData", + value: function getVisibleColumnData(colIndex) { + var includeHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var exclude = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; + return this.getFilteredDataCol(colIndex, includeHeaders, true, exclude, true); + } + /** + * Return the filtered values for a given column index + * @param {any} colIndex Colmun's index + * @param {boolean} [includeHeaders=false] Optional Include headers row + * @param {any} [exclude=[]] Optional List of row indexes to be excluded + * @return {Array} Flat list of values ['value0', 'value1', 'value2'...] + * + * TODO: provide an API returning data in JSON format + */ + + }, { + key: "getFilteredColumnValues", + value: function getFilteredColumnValues(colIndex) { + var includeHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var exclude = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; + return this.getFilteredDataCol(colIndex, includeHeaders, false, exclude, false); + } + /** + * Return the filtered and visible values for a given column index + * @param {any} colIndex Colmun's index + * @param {boolean} [includeHeaders=false] Optional Include headers row + * @param {any} [exclude=[]] Optional List of row indexes to be excluded + * @return {Array} Flat list of values ['value0', 'value1', 'value2'...] + * + * TODO: provide an API returning data in JSON format + */ + + }, { + key: "getVisibleColumnValues", + value: function getVisibleColumnValues(colIndex) { + var includeHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var exclude = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; + return this.getFilteredDataCol(colIndex, includeHeaders, false, exclude, true); + } + /** + * Return the filtered data for a given column index + * @param {Number} colIndex Colmun's index + * @param {Boolean} [includeHeaders=false] Include headers row + * @param {Boolean} [typed=false] Return typed value + * @param {Array} [exclude=[]] List of row indexes to be excluded + * @param {Boolean} [visible=true] Return only filtered and visible data + * (relevant for paging) + * @return {Array} Flat list of values ['val0','val1','val2'...] + * @private + * + * TODO: provide an API returning data in JSON format + */ + + }, { + key: "getFilteredDataCol", + value: function getFilteredDataCol(colIndex) { + var _this15 = this; + + var includeHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var typed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var exclude = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; + var visible = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + + if (Object(_types__WEBPACK_IMPORTED_MODULE_3__["isUndef"])(colIndex)) { + return []; + } + + var rows = this.dom().rows; + var getContent = typed ? this.getCellData.bind(this) : this.getCellValue.bind(this); // ensure valid rows index do not contain excluded rows and row is + // displayed + + var validRows = this.getValidRows(true).filter(function (rowIdx) { + return exclude.indexOf(rowIdx) === -1 && (visible ? _this15.getRowDisplay(rows[rowIdx]) !== 'none' : true); + }); // convert column value to expected type if necessary + + var validColValues = validRows.map(function (rowIdx) { + return getContent(rows[rowIdx].cells[colIndex]); + }); + + if (includeHeaders) { + validColValues.unshift(this.getHeadersText()[colIndex]); + } + + return validColValues; + } + /** + * Get the display value of a row + * @param {HTMLTableRowElement} row DOM element of the row + * @return {String} Usually 'none' or '' + */ + + }, { + key: "getRowDisplay", + value: function getRowDisplay(row) { + return row.style.display; + } + /** + * Validate/invalidate row by setting the 'validRow' attribute on the row + * @param {Number} rowIndex Index of the row + * @param {Boolean} isValid + */ + + }, { + key: "validateRow", + value: function validateRow(rowIndex, isValid) { + var row = this.dom().rows[rowIndex]; + + if (!row || !Object(_types__WEBPACK_IMPORTED_MODULE_3__["isBoolean"])(isValid)) { + return; + } // always visible rows are valid + + + if (this.excludeRows.indexOf(rowIndex) !== -1) { + isValid = true; + } + + var displayFlag = isValid ? '' : _const__WEBPACK_IMPORTED_MODULE_10__["NONE"], + validFlag = isValid ? 'true' : 'false'; + row.style.display = displayFlag; + + if (this.paging) { + row.setAttribute('validRow', validFlag); + } + + if (isValid) { + if (this.validRowsIndex.indexOf(rowIndex) === -1) { + this.validRowsIndex.push(rowIndex); + } + + this.onRowValidated(this, rowIndex); + this.emitter.emit('row-validated', this, rowIndex); + } + } + /** + * Validate all filterable rows + */ + + }, { + key: "validateAllRows", + value: function validateAllRows() { + if (!this.initialized) { + return; + } + + this.validRowsIndex = []; + + for (var k = this.refRow; k < this.nbFilterableRows; k++) { + this.validateRow(k, true); + } + } + /** + * Set search value to a given filter + * @param {Number} index Column's index + * @param {String or Array} query searcharg Search term + */ + + }, { + key: "setFilterValue", + value: function setFilterValue(index) { + var query = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + + if (!this.fltGrid) { + return; + } + + var slc = this.getFilterElement(index), + fltColType = this.getFilterType(index); + + if (!slc) { + return; + } //multiple selects + + + if (fltColType === _const__WEBPACK_IMPORTED_MODULE_10__["MULTIPLE"]) { + var values = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(query) ? query : query.split(' ' + this.orOperator + ' '); + + if (this.loadFltOnDemand && !this.initialized) { + this.emitter.emit('build-select-filter', this, index, this.linkedFilters, this.isExternalFlt()); + } + + this.emitter.emit('select-options', this, index, values); + } //checklist + else if (fltColType === _const__WEBPACK_IMPORTED_MODULE_10__["CHECKLIST"]) { + var _values = []; + + if (this.loadFltOnDemand && !this.initialized) { + this.emitter.emit('build-checklist-filter', this, index, this.linkedFilters); + } + + if (Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(query)) { + _values = query; + } else { + query = Object(_string__WEBPACK_IMPORTED_MODULE_2__["matchCase"])(query, this.caseSensitive); + _values = query.split(' ' + this.orOperator + ' '); + } + + this.emitter.emit('select-checklist-options', this, index, _values); + } else { + if (this.loadFltOnDemand && !this.initialized) { + this.emitter.emit('build-select-filter', this, index, this.linkedFilters, this.isExternalFlt()); + } + + slc.value = query; + } + } + /** + * Make passed or default working table element width fixed + * @param {TableElement} tbl optional table DOM element + */ + + }, { + key: "setFixedLayout", + value: function setFixedLayout() { + var tbl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.dom(); + var colWidths = this.colWidths; + var tableWidth = tbl.clientWidth; + + if (colWidths.length > 0) { + var defaultWidth = this.defaultColWidth; + tableWidth = colWidths.reduce(function (x, y) { + return parseInt(x || defaultWidth, 10) + parseInt(y || defaultWidth, 10); + }); + } + + tbl.style.width = "".concat(tableWidth, "px"); + tbl.style.tableLayout = 'fixed'; + } + /** + * Set passed or default working table columns' widths with configuration + * values + * @param {TableElement} tbl optional table DOM element + */ + + }, { + key: "setColWidths", + value: function setColWidths() { + var tbl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.dom(); + var colWidths = this.colWidths; + + if (colWidths.length === 0) { + return; + } + + var colTags = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(tbl, 'col'); + var tblHasColTag = colTags.length > 0; + var frag = !tblHasColTag ? doc.createDocumentFragment() : null; + this.eachCol(function (k) { + var col; + + if (tblHasColTag) { + col = colTags[k]; + } else { + col = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('col'); + frag.appendChild(col); + } + + col.style.width = colWidths[k]; + }); + + if (!tblHasColTag) { + tbl.insertBefore(frag, tbl.firstChild); + } + } + /** + * Exclude rows from actions + */ + + }, { + key: "setExcludeRows", + value: function setExcludeRows() { + var _this16 = this; + + if (!this.hasExcludedRows) { + return; + } + + this.excludeRows.forEach(function (rowIdx) { + return _this16.validateRow(rowIdx, true); + }); + } + /** + * Clear all the filters' values + */ + + }, { + key: "clearFilters", + value: function clearFilters() { + if (!this.fltGrid) { + return; + } + + this.emitter.emit('before-clearing-filters', this); + this.onBeforeReset(this, this.getFiltersValue()); + + for (var i = 0, len = this.fltIds.length; i < len; i++) { + this.setFilterValue(i, ''); + } + + this.filter(); + this.onAfterReset(this); + this.emitter.emit('after-clearing-filters', this); + } + /** + * Return the ID of the current active filter + * @return {String} + */ + + }, { + key: "getActiveFilterId", + value: function getActiveFilterId() { + return this.activeFilterId; + } + /** + * Set the ID of the current active filter + * @param {String} filterId Element ID + */ + + }, { + key: "setActiveFilterId", + value: function setActiveFilterId(filterId) { + this.activeFilterId = filterId; + } + /** + * Return the column index for a given filter ID + * @param {string} [filterId=''] Filter ID + * @return {Number} Column index + */ + + }, { + key: "getColumnIndexFromFilterId", + value: function getColumnIndexFromFilterId() { + var filterId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + var idx = filterId.split('_')[0]; + idx = idx.split(this.prfxFlt)[1]; + return parseInt(idx, 10); + } + /** + * Build filter element ID for a given column index + * @param {any} colIndex + * @return {String} Filter element ID string + * @private + */ + + }, { + key: "buildFilterId", + value: function buildFilterId(colIndex) { + return "".concat(this.prfxFlt).concat(colIndex, "_").concat(this.id); + } + /** + * Check if has external filters + * @returns {Boolean} + * @private + */ + + }, { + key: "isExternalFlt", + value: function isExternalFlt() { + return this.externalFltIds.length > 0; + } + /** + * Returns styles path + * @returns {String} + * @private + */ + + }, { + key: "getStylePath", + value: function getStylePath() { + return Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(this.config.style_path, this.basePath + 'style/'); + } + /** + * Returns main stylesheet path + * @returns {String} + * @private + */ + + }, { + key: "getStylesheetPath", + value: function getStylesheetPath() { + return Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(this.config.stylesheet, this.getStylePath() + 'tablefilter.css'); + } + /** + * Returns themes path + * @returns {String} + * @private + */ + + }, { + key: "getThemesPath", + value: function getThemesPath() { + return Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(this.config.themes_path, this.getStylePath() + 'themes/'); + } + /** + * Make specified column's filter active + * @param colIndex Index of a column + */ + + }, { + key: "activateFilter", + value: function activateFilter(colIndex) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_3__["isUndef"])(colIndex)) { + return; + } + + this.setActiveFilterId(this.getFilterId(colIndex)); + } + /** + * Determine if passed filter column implements exact query match + * @param {Number} colIndex Column index + * @return {Boolean} + */ + + }, { + key: "isExactMatch", + value: function isExactMatch(colIndex) { + var fltType = this.getFilterType(colIndex); + return this.exactMatchByCol[colIndex] || this.exactMatch || fltType !== _const__WEBPACK_IMPORTED_MODULE_10__["INPUT"]; + } + /** + * Check if passed row is valid + * @param {Number} rowIndex Row index + * @return {Boolean} + */ + + }, { + key: "isRowValid", + value: function isRowValid(rowIndex) { + return this.getValidRows().indexOf(rowIndex) !== -1; + } + /** + * Check if passed row is visible + * @param {Number} rowIndex Row index + * @return {Boolean} + */ + + }, { + key: "isRowDisplayed", + value: function isRowDisplayed(rowIndex) { + var row = this.dom().rows[rowIndex]; + return this.getRowDisplay(row) === ''; + } + /** + * Check if specified column filter ignores diacritics. + * Note this is only applicable to input filter types. + * @param {Number} colIndex Column index + * @return {Boolean} + */ + + }, { + key: "ignoresDiacritics", + value: function ignoresDiacritics(colIndex) { + var ignoreDiac = this.ignoreDiacritics; + + if (Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(ignoreDiac)) { + return ignoreDiac[colIndex]; + } + + return Boolean(ignoreDiac); + } + /** + * Return clear all text for specified filter column + * @param {Number} colIndex Column index + * @return {String} + */ + + }, { + key: "getClearFilterText", + value: function getClearFilterText(colIndex) { + var clearText = this.clearFilterText; + + if (Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(clearText)) { + return clearText[colIndex]; + } + + return clearText; + } + /** + * Column iterator invoking continue and break condition callbacks if any + * then calling supplied callback for each item + * @param {Function} [fn=EMPTY_FN] callback + * @param {Function} [continueFn=EMPTY_FN] continue condition callback + * @param {Function} [breakFn=EMPTY_FN] break condition callback + */ + + }, { + key: "eachCol", + value: function eachCol() { + var fn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _types__WEBPACK_IMPORTED_MODULE_3__["EMPTY_FN"]; + var continueFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _types__WEBPACK_IMPORTED_MODULE_3__["EMPTY_FN"]; + var breakFn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _types__WEBPACK_IMPORTED_MODULE_3__["EMPTY_FN"]; + var len = this.getCellsNb(this.refRow); + + for (var i = 0; i < len; i++) { + if (continueFn(i) === true) { + continue; + } + + if (breakFn(i) === true) { + break; + } + + fn(i); + } + } + /** + * Rows iterator starting from supplied row index or defaulting to reference + * row index. Closure function accepts a callback function and optional + * continue and break callbacks. + * @param {Number} startIdx Row index from which filtering starts + */ + + }, { + key: "eachRow", + value: function eachRow() { + var _this17 = this; + + var startIdx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.refRow; + return function () { + var fn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _types__WEBPACK_IMPORTED_MODULE_3__["EMPTY_FN"]; + var continueFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _types__WEBPACK_IMPORTED_MODULE_3__["EMPTY_FN"]; + var breakFn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _types__WEBPACK_IMPORTED_MODULE_3__["EMPTY_FN"]; + + var rows = _this17.dom().rows; + + var len = _this17.getRowsNb(true); + + for (var i = startIdx; i < len; i++) { + if (continueFn(rows[i], i) === true) { + continue; + } + + if (breakFn(rows[i], i) === true) { + break; + } + + fn(rows[i], i); + } + }; + } + /** + * Check if passed script or stylesheet is already imported + * @param {String} filePath Ressource path + * @param {String} type Possible values: 'script' or 'link' + * @return {Boolean} + */ + + }, { + key: "isImported", + value: function isImported(filePath) { + var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'script'; + var imported = false, + attr = type === 'script' ? 'src' : 'href', + files = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(doc, type); + + for (var i = 0, len = files.length; i < len; i++) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_3__["isUndef"])(files[i][attr])) { + continue; + } + + if (files[i][attr].match(filePath)) { + imported = true; + break; + } + } + + return imported; + } + /** + * Import script or stylesheet + * @param {String} fileId Ressource ID + * @param {String} filePath Ressource path + * @param {Function} callback Callback + * @param {String} type Possible values: 'script' or 'link' + */ + + }, { + key: "import", + value: function _import(fileId, filePath, callback) { + var _this18 = this; + + var type = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'script'; + + if (this.isImported(filePath, type)) { + return; + } + + var o = this, + isLoaded = false, + file, + head = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(doc, 'head')[0]; + + if (type.toLowerCase() === 'link') { + file = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('link', ['id', fileId], ['type', 'text/css'], ['rel', 'stylesheet'], ['href', filePath]); + } else { + file = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('script', ['id', fileId], ['type', 'text/javascript'], ['src', filePath]); + } //Browser <> IE onload event works only for scripts, not for stylesheets + + + file.onload = file.onreadystatechange = function () { + if (!isLoaded && (!_this18.readyState || _this18.readyState === 'loaded' || _this18.readyState === 'complete')) { + isLoaded = true; + + if (typeof callback === 'function') { + callback.call(null, o); + } + } + }; + + file.onerror = function () { + throw new Error("TableFilter could not load: ".concat(filePath)); + }; + + head.appendChild(file); + } + /** + * Check if table has filters grid + * @return {Boolean} + */ + + }, { + key: "isInitialized", + value: function isInitialized() { + return this.initialized; + } + /** + * Get list of filter IDs + * @return {Array} List of filters ids + */ + + }, { + key: "getFiltersId", + value: function getFiltersId() { + return this.fltIds || []; + } + /** + * Get filtered (valid) rows indexes + * @param {Boolean} reCalc Force calculation of filtered rows list + * @return {Array} List of row indexes + */ + + }, { + key: "getValidRows", + value: function getValidRows(reCalc) { + var _this19 = this; + + if (!reCalc) { + return this.validRowsIndex; + } + + this.validRowsIndex = []; + var eachRow = this.eachRow(); + eachRow(function (row) { + if (!_this19.paging) { + if (_this19.getRowDisplay(row) !== _const__WEBPACK_IMPORTED_MODULE_10__["NONE"]) { + _this19.validRowsIndex.push(row.rowIndex); + } + } else { + if (row.getAttribute('validRow') === 'true' || row.getAttribute('validRow') === null) { + _this19.validRowsIndex.push(row.rowIndex); + } + } + }); + return this.validRowsIndex; + } + /** + * Get the index of the row containing the filters + * @return {Number} + */ + + }, { + key: "getFiltersRowIndex", + value: function getFiltersRowIndex() { + return this.filtersRowIndex; + } + /** + * Get the index of the headers row + * @return {Number} + */ + + }, { + key: "getHeadersRowIndex", + value: function getHeadersRowIndex() { + return this.headersRow; + } + /** + * Get the row index from where the filtering process start (1st filterable + * row) + * @return {Number} + */ + + }, { + key: "getStartRowIndex", + value: function getStartRowIndex() { + return this.refRow; + } + /** + * Get the index of the last row + * @return {Number} + */ + + }, { + key: "getLastRowIndex", + value: function getLastRowIndex() { + var nbRows = this.getRowsNb(true); + return nbRows - 1; + } + /** + * Determine whether the specified column has one of the passed types + * @param {Number} colIndex Column index + * @param {Array} [types=[]] List of column types + * @return {Boolean} + */ + + }, { + key: "hasType", + value: function hasType(colIndex) { + var types = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + + if (this.colTypes.length === 0) { + return false; + } + + var colType = this.colTypes[colIndex]; + + if (Object(_types__WEBPACK_IMPORTED_MODULE_3__["isObj"])(colType)) { + colType = colType.type; + } + + return types.indexOf(colType) !== -1; + } + /** + * Get the header DOM element for a given column index + * @param {Number} colIndex Column index + * @return {Element} + */ + + }, { + key: "getHeaderElement", + value: function getHeaderElement(colIndex) { + var table = this.gridLayout ? this.Mod.gridLayout.headTbl : this.dom(); + var tHead = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(table, 'thead'); + var rowIdx = this.getHeadersRowIndex(); + var header; + + if (tHead.length === 0) { + header = table.rows[rowIdx].cells[colIndex]; + } + + if (tHead.length === 1) { + header = tHead[0].rows[rowIdx].cells[colIndex]; + } + + return header; + } + /** + * Return the list of headers' text + * @param {Boolean} excludeHiddenCols Optional: exclude hidden columns + * @return {Array} list of headers' text + */ + + }, { + key: "getHeadersText", + value: function getHeadersText() { + var _this20 = this; + + var excludeHiddenCols = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var headers = []; + this.eachCol(function (j) { + var header = _this20.getHeaderElement(j); + + var headerText = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["getFirstTextNode"])(header); + headers.push(headerText); + }, // continue condition function + function (j) { + if (excludeHiddenCols && _this20.hasExtension('colsVisibility')) { + return _this20.extension('colsVisibility').isColHidden(j); + } + + return false; + }); + return headers; + } + /** + * Return the filter type for a specified column + * @param {Number} colIndex Column's index + * @return {String} + */ + + }, { + key: "getFilterType", + value: function getFilterType(colIndex) { + return this.filterTypes[colIndex]; + } + /** + * Get the total number of filterable rows + * @return {Number} + */ + + }, { + key: "getFilterableRowsNb", + value: function getFilterableRowsNb() { + return this.getRowsNb(false); + } + /** + * Return the total number of valid rows + * @param {Boolean} [reCalc=false] Forces calculation of filtered rows + * @return {Number} + */ + + }, { + key: "getValidRowsNb", + value: function getValidRowsNb() { + var reCalc = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + return this.getValidRows(reCalc).length; + } + /** + * Return the working DOM element + * @return {HTMLTableElement} + */ + + }, { + key: "dom", + value: function dom() { + return this.tbl; + } + /** + * Return the decimal separator for supplied column as per column type + * configuration or global setting + * @param {Number} colIndex Column index + * @returns {String} '.' or ',' + */ + + }, { + key: "getDecimal", + value: function getDecimal(colIndex) { + var decimal = this.decimalSeparator; + + if (this.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_10__["FORMATTED_NUMBER"]])) { + var colType = this.colTypes[colIndex]; + + if (colType.hasOwnProperty('decimal')) { + decimal = colType.decimal; + } + } + + return decimal; + } + /** + * Get the configuration object (literal object) + * @return {Object} + */ + + }, { + key: "config", + value: function config() { + return this.cfg; + } + }]); + + return TableFilter; +}(); + +/***/ }), + +/***/ "./src/tfBase.js": +/*!***********************!*\ + !*** ./src/tfBase.js ***! + \***********************/ +/*! exports provided: TfBase */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TfBase", function() { return TfBase; }); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./settings */ "./src/settings.js"); +/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./string */ "./src/string.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + + + +var TfBase = function TfBase(tf) { + var cls = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + _classCallCheck(this, TfBase); + + console.log(cls.name); + /** + * TableFilter instance + * @type {TableFilter} + */ + + this.tf = tf; + /** + * Feature name, retrieved from alternate class name if found or from + * camelised class name + * @type {String} + */ + + this.feature = Object(_settings__WEBPACK_IMPORTED_MODULE_0__["defaultsStr"])(cls.altName, Object(_string__WEBPACK_IMPORTED_MODULE_1__["toCamelCase"])(cls.name)); + console.log(this.feature, Object(_string__WEBPACK_IMPORTED_MODULE_1__["toCamelCase"])(cls.name)); + + this.tf._mod_.push(this.feature); +}; + +/***/ }), + +/***/ "./src/types.js": +/*!**********************!*\ + !*** ./src/types.js ***! + \**********************/ +/*! exports provided: EMPTY_FN, isObj, isFn, isArray, isString, isNumber, isBoolean, isUndef, isNull, isEmpty */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EMPTY_FN", function() { return EMPTY_FN; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isObj", function() { return isObj; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isFn", function() { return isFn; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isArray", function() { return isArray; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isString", function() { return isString; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isNumber", function() { return isNumber; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isBoolean", function() { return isBoolean; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isUndef", function() { return isUndef; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isNull", function() { return isNull; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEmpty", function() { return isEmpty; }); +/** + * Types utilities + */ +var UNDEFINED = void 0; +/** + * Return an empty function + * @return {Function} + */ + +var EMPTY_FN = function EMPTY_FN() {}; +/** + * Check passed argument is an object + * @param {Object} obj + * @return {Boolean} + */ + +var isObj = function isObj(obj) { + return Object.prototype.toString.call(obj) === '[object Object]'; +}; +/** + * Check passed argument is a function + * @param {Function} obj + * @return {Boolean} + */ + +var isFn = function isFn(obj) { + return Object.prototype.toString.call(obj) === '[object Function]'; +}; +/** + * Check passed argument is an array + * @param {Array} obj + * @return {Boolean} + */ + +var isArray = function isArray(obj) { + return Object.prototype.toString.call(obj) === '[object Array]'; +}; +/** + * Check passed argument is a string + * @param {String} obj obj + * @returns {Boolean} + */ + +var isString = function isString(obj) { + return Object.prototype.toString.call(obj) === '[object String]'; +}; +/** + * Check passed argument is a number + * @param {Number} obj + * @returns {Boolean} + */ + +var isNumber = function isNumber(obj) { + return Object.prototype.toString.call(obj) === '[object Number]'; +}; +/** + * Check passed argument is a boolean + * @param {Boolean} obj + * @returns {Boolean} + */ + +var isBoolean = function isBoolean(obj) { + return Object.prototype.toString.call(obj) === '[object Boolean]'; +}; +/** + * Check passed argument is undefined + * @param {Any} obj + * @return {Boolean} + */ + +var isUndef = function isUndef(obj) { + return obj === UNDEFINED; +}; +/** + * Check passed argument is null + * @param {Any} obj + * @return {Boolean} + */ + +var isNull = function isNull(obj) { + return obj === null; +}; +/** + * Check passed argument is empty (undefined, null or empty string) + * @param {Any} obj + * @return {Boolean} + */ + +var isEmpty = function isEmpty(obj) { + return isUndef(obj) || isNull(obj) || obj.length === 0; +}; + +/***/ }) + +/******/ }); +}); //# sourceMappingURL=tablefilter.js.map \ No newline at end of file diff --git a/dist/tablefilter/tablefilter.js.map b/dist/tablefilter/tablefilter.js.map index b28477ae..e11d1142 100644 --- a/dist/tablefilter/tablefilter.js.map +++ b/dist/tablefilter/tablefilter.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:///./node_modules/sugar-core/sugar-core.js","webpack:///./src/settings.js","webpack:///./src/dom.js","webpack:///./src/types.js","webpack:///./src/const.js","webpack:///./src/event.js","webpack:///./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js","webpack:///./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js","webpack:///./src/root.js","webpack:///./src/string.js","webpack:///./src/feature.js","webpack:///./node_modules/sugar-date/date/var/DateUnitIndexes.js","webpack:///./node_modules/sugar-date/common/var/classChecks.js","webpack:///./node_modules/sugar-date/date/addLocale.js","webpack:///./node_modules/sugar-date/common/var/mathAliases.js","webpack:///./node_modules/sugar-date/date/var/LocaleHelpers.js","webpack:///./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js","webpack:///./node_modules/sugar-date/common/var/coreUtilityAliases.js","webpack:///./node_modules/sugar-date/range/internal/Range.js","webpack:///./src/modules/toolbar.js","webpack:///./src/array.js","webpack:///./node_modules/sugar-date/common/internal/defineOnPrototype.js","webpack:///./src/number.js","webpack:///./node_modules/sugar-date/common/internal/callDateGet.js","webpack:///./node_modules/sugar-date/date/internal/getWeekday.js","webpack:///./node_modules/sugar-date/range/build/buildDateRangeUnitsCall.js","webpack:///./node_modules/sugar-date/date/internal/setWeekday.js","webpack:///./node_modules/sugar-date/common/var/namespaceAliases.js","webpack:///./node_modules/sugar-date/date/internal/createDate.js","webpack:///./node_modules/sugar-date/common/var/trunc.js","webpack:///./node_modules/sugar-date/common/var/_utc.js","webpack:///./node_modules/sugar-date/date/internal/getMonth.js","webpack:///./node_modules/sugar-date/date/internal/getYear.js","webpack:///./node_modules/sugar-date/date/var/DateUnits.js","webpack:///./node_modules/sugar-date/common/internal/isDefined.js","webpack:///./node_modules/sugar-date/common/internal/forEach.js","webpack:///./src/sort.js","webpack:///./node_modules/sugar-date/date/internal/cloneDate.js","webpack:///./node_modules/sugar-date/date/internal/getDate.js","webpack:///./node_modules/sugar-date/date/internal/setDate.js","webpack:///./node_modules/sugar-date/common/internal/callDateSet.js","webpack:///./node_modules/sugar-date/date/internal/setUnitAndLowerToEdge.js","webpack:///./node_modules/sugar-date/date/internal/dateIsValid.js","webpack:///./node_modules/sugar-date/date/internal/advanceDate.js","webpack:///./node_modules/sugar-date/date/internal/getNewDate.js","webpack:///./node_modules/sugar-date/date/internal/getLowerUnitIndex.js","webpack:///./node_modules/sugar-date/common/internal/isUndefined.js","webpack:///./node_modules/sugar-date/index.js","webpack:///./node_modules/sugar-date/range/internal/rangeIsValid.js","webpack:///./node_modules/sugar-date/common/internal/defineInstanceSimilar.js","webpack:///./node_modules/sugar-date/date/internal/moveToBeginningOfUnit.js","webpack:///./node_modules/sugar-date/date/internal/moveToEndOfUnit.js","webpack:///./node_modules/sugar-date/date/internal/iterateOverDateParams.js","webpack:///./node_modules/sugar-date/date/internal/updateDate.js","webpack:///./node_modules/sugar-date/date/internal/tzOffset.js","webpack:///./node_modules/sugar-date/common/internal/spaceSplit.js","webpack:///./node_modules/sugar-date/common/var/CommonChars.js","webpack:///./node_modules/sugar-date/common/internal/simpleClone.js","webpack:///./node_modules/sugar-date/common/internal/simpleMerge.js","webpack:///./src/modules/baseDropdown.js","webpack:///./src/cookie.js","webpack:///./node_modules/sugar-date/range/internal/rangeEvery.js","webpack:///./node_modules/sugar-date/range/var/DURATION_UNITS.js","webpack:///./node_modules/sugar-date/date/internal/getWeekNumber.js","webpack:///./node_modules/sugar-date/common/internal/padNumber.js","webpack:///./node_modules/sugar-date/date/internal/getTimeDistanceForUnit.js","webpack:///./node_modules/sugar-date/common/internal/simpleCapitalize.js","webpack:///./node_modules/sugar-date/date/internal/moveToBeginningOfWeek.js","webpack:///./node_modules/sugar-date/date/var/_dateOptions.js","webpack:///./node_modules/sugar-date/date/internal/getExtendedDate.js","webpack:///./node_modules/sugar-date/date/internal/iterateOverDateUnits.js","webpack:///./node_modules/sugar-date/common/internal/isObjectType.js","webpack:///./node_modules/sugar-date/date/var/ISODefaults.js","webpack:///./node_modules/sugar-date/date/internal/getEnglishVariant.js","webpack:///./node_modules/diacritics/index.js","webpack:///./src/modules/checkList.js","webpack:///./src/modules/paging.js","webpack:///./src/modules/noResults.js","webpack:///./src/modules/alternateRows.js","webpack:///./src/modules/clearButton.js","webpack:///./src/modules/statusBar.js","webpack:///./src/modules/rowsCounter.js","webpack:///./src/modules/markActiveColumns.js","webpack:///./src/modules/popupFilter.js","webpack:///./src/modules/highlightKeywords.js","webpack:///./src/modules/loader.js","webpack:///./src/modules/gridLayout.js","webpack:///./src/modules/storage.js","webpack:///./src/modules/hash.js","webpack:///./src/modules/state.js","webpack:///./src/modules/help.js","webpack:///./src/modules/dateType.js","webpack:///./src/modules/dropdown.js","webpack:///./src/emitter.js","webpack:///./node_modules/sugar-date/range/internal/getDateIncrementObject.js","webpack:///./node_modules/sugar-date/range/var/MULTIPLIERS.js","webpack:///./node_modules/sugar-date/range/internal/incrementDate.js","webpack:///./node_modules/sugar-date/range/internal/getDateForRange.js","webpack:///./node_modules/sugar-date/range/internal/getRangeMemberPrimitiveValue.js","webpack:///./node_modules/sugar-date/range/internal/cloneRangeMember.js","webpack:///./node_modules/sugar-date/date/internal/dateRelative.js","webpack:///./node_modules/sugar-date/date/internal/fullCompareDate.js","webpack:///./node_modules/sugar-date/date/internal/assertDateIsValid.js","webpack:///./node_modules/sugar-date/date/internal/getUTCOffset.js","webpack:///./node_modules/sugar-date/date/internal/getHours.js","webpack:///./node_modules/sugar-date/date/var/CoreOutputFormats.js","webpack:///./node_modules/sugar-date/date/internal/dateFormat.js","webpack:///./node_modules/sugar-date/date/internal/collectUpdateDateArguments.js","webpack:///./node_modules/sugar-date/date/internal/advanceDateWithArgs.js","webpack:///./node_modules/sugar-date/date/internal/compareDate.js","webpack:///./node_modules/sugar-date/date/internal/moveToEndOfWeek.js","webpack:///./node_modules/sugar-date/date/internal/getDateParamKey.js","webpack:///./node_modules/sugar-date/date/internal/moveToFirstDayOfWeekYear.js","webpack:///./node_modules/sugar-date/date/internal/setISOWeekNumber.js","webpack:///./node_modules/sugar-date/date/internal/walkUnitDown.js","webpack:///./node_modules/sugar-date/date/internal/resetTime.js","webpack:///./node_modules/sugar-date/date/var/MINUTES.js","webpack:///./node_modules/sugar-date/date/internal/getAdjustedUnit.js","webpack:///./node_modules/sugar-date/common/internal/withPrecision.js","webpack:///./node_modules/sugar-date/common/var/chr.js","webpack:///./node_modules/sugar-date/date/internal/getDaysInMonth.js","webpack:///./node_modules/sugar-date/date/internal/getRegNonCapturing.js","webpack:///./node_modules/sugar-date/common/internal/isClass.js","webpack:///./node_modules/sugar-date/common/internal/map.js","webpack:///./node_modules/sugar-date/date/var/LocalizedParsingTokens.js","webpack:///./node_modules/sugar-date/date/var/AmericanEnglishDefinition.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/tablefilter.js","webpack:///./node_modules/sugar-date/locales/zh-TW.js","webpack:///./node_modules/sugar-date/locales/zh-CN.js","webpack:///./node_modules/sugar-date/locales/sv.js","webpack:///./node_modules/sugar-date/locales/ru.js","webpack:///./node_modules/sugar-date/locales/pt.js","webpack:///./node_modules/sugar-date/locales/pl.js","webpack:///./node_modules/sugar-date/locales/no.js","webpack:///./node_modules/sugar-date/locales/nl.js","webpack:///./node_modules/sugar-date/locales/ko.js","webpack:///./node_modules/sugar-date/locales/ja.js","webpack:///./node_modules/sugar-date/locales/it.js","webpack:///./node_modules/sugar-date/locales/fr.js","webpack:///./node_modules/sugar-date/locales/fi.js","webpack:///./node_modules/sugar-date/locales/es.js","webpack:///./node_modules/sugar-date/locales/de.js","webpack:///./node_modules/sugar-date/locales/da.js","webpack:///./node_modules/sugar-date/locales/ca.js","webpack:///./node_modules/sugar-date/locales/index.js","webpack:///./node_modules/sugar-date/range/years.js","webpack:///./node_modules/sugar-date/range/weeks.js","webpack:///./node_modules/sugar-date/range/union.js","webpack:///./node_modules/sugar-date/range/toString.js","webpack:///./node_modules/sugar-date/range/toArray.js","webpack:///./node_modules/sugar-date/range/internal/getRangeMemberNumericValue.js","webpack:///./node_modules/sugar-date/range/span.js","webpack:///./node_modules/sugar-date/range/seconds.js","webpack:///./node_modules/sugar-date/range/months.js","webpack:///./node_modules/sugar-date/range/minutes.js","webpack:///./node_modules/sugar-date/range/milliseconds.js","webpack:///./node_modules/sugar-date/range/isValid.js","webpack:///./node_modules/sugar-date/range/intersect.js","webpack:///./node_modules/sugar-date/range/hours.js","webpack:///./node_modules/sugar-date/range/every.js","webpack:///./node_modules/sugar-date/common/internal/periodSplit.js","webpack:///./node_modules/sugar-date/range/internal/getPrecision.js","webpack:///./node_modules/sugar-date/range/internal/getGreaterPrecision.js","webpack:///./node_modules/sugar-date/range/internal/incrementString.js","webpack:///./node_modules/sugar-date/range/internal/incrementNumber.js","webpack:///./node_modules/sugar-date/range/internal/valueIsNotInfinite.js","webpack:///./node_modules/sugar-date/range/internal/isValidRangeMember.js","webpack:///./node_modules/sugar-date/range/internal/buildDateRangeUnits.js","webpack:///./node_modules/sugar-date/range/days.js","webpack:///./node_modules/sugar-date/range/contains.js","webpack:///./node_modules/sugar-date/range/clone.js","webpack:///./node_modules/sugar-date/range/internal/rangeClamp.js","webpack:///./node_modules/sugar-date/range/clamp.js","webpack:///./node_modules/sugar-date/range/var/DURATION_REG.js","webpack:///./node_modules/sugar-date/range/var/FULL_CAPTURED_DURATION.js","webpack:///./node_modules/sugar-date/range/var/DurationTextFormats.js","webpack:///./node_modules/sugar-date/range/internal/createDateRangeFromString.js","webpack:///./node_modules/sugar-date/range/var/DateRangeConstructor.js","webpack:///./node_modules/sugar-date/date/range.js","webpack:///./node_modules/sugar-date/range/index.js","webpack:///./node_modules/sugar-date/date/setOption.js","webpack:///./node_modules/sugar-date/date/getOption.js","webpack:///./node_modules/sugar-date/date/yearsUntil.js","webpack:///./node_modules/sugar-date/date/yearsSince.js","webpack:///./node_modules/sugar-date/date/yearsFromNow.js","webpack:///./node_modules/sugar-date/date/yearsAgo.js","webpack:///./node_modules/sugar-date/date/weeksUntil.js","webpack:///./node_modules/sugar-date/date/weeksSince.js","webpack:///./node_modules/sugar-date/date/weeksFromNow.js","webpack:///./node_modules/sugar-date/date/weeksAgo.js","webpack:///./node_modules/sugar-date/date/setWeekday.js","webpack:///./node_modules/sugar-date/date/setUTC.js","webpack:///./node_modules/sugar-date/date/setISOWeek.js","webpack:///./node_modules/sugar-date/date/set.js","webpack:///./node_modules/sugar-date/date/secondsUntil.js","webpack:///./node_modules/sugar-date/date/secondsSince.js","webpack:///./node_modules/sugar-date/date/secondsFromNow.js","webpack:///./node_modules/sugar-date/date/secondsAgo.js","webpack:///./node_modules/sugar-date/date/rewind.js","webpack:///./node_modules/sugar-date/date/internal/getUnitIndexForParamName.js","webpack:///./node_modules/sugar-date/date/reset.js","webpack:///./node_modules/sugar-date/date/relativeTo.js","webpack:///./node_modules/sugar-date/date/internal/getAdjustedUnitForDate.js","webpack:///./node_modules/sugar-date/date/relative.js","webpack:///./node_modules/sugar-date/date/monthsUntil.js","webpack:///./node_modules/sugar-date/date/monthsSince.js","webpack:///./node_modules/sugar-date/date/monthsFromNow.js","webpack:///./node_modules/sugar-date/date/monthsAgo.js","webpack:///./node_modules/sugar-date/date/minutesUntil.js","webpack:///./node_modules/sugar-date/date/minutesSince.js","webpack:///./node_modules/sugar-date/date/minutesFromNow.js","webpack:///./node_modules/sugar-date/date/minutesAgo.js","webpack:///./node_modules/sugar-date/date/millisecondsUntil.js","webpack:///./node_modules/sugar-date/date/millisecondsSince.js","webpack:///./node_modules/sugar-date/date/millisecondsFromNow.js","webpack:///./node_modules/sugar-date/date/millisecondsAgo.js","webpack:///./node_modules/sugar-date/date/iso.js","webpack:///./node_modules/sugar-date/date/isYesterday.js","webpack:///./node_modules/sugar-date/date/isWeekend.js","webpack:///./node_modules/sugar-date/date/isWeekday.js","webpack:///./node_modules/sugar-date/date/isWednesday.js","webpack:///./node_modules/sugar-date/date/isValid.js","webpack:///./node_modules/sugar-date/date/internal/isUTC.js","webpack:///./node_modules/sugar-date/date/isUTC.js","webpack:///./node_modules/sugar-date/date/isTuesday.js","webpack:///./node_modules/sugar-date/date/isTomorrow.js","webpack:///./node_modules/sugar-date/date/isToday.js","webpack:///./node_modules/sugar-date/date/isThursday.js","webpack:///./node_modules/sugar-date/date/isThisYear.js","webpack:///./node_modules/sugar-date/date/isThisWeek.js","webpack:///./node_modules/sugar-date/date/isThisMonth.js","webpack:///./node_modules/sugar-date/date/isSunday.js","webpack:///./node_modules/sugar-date/date/isSaturday.js","webpack:///./node_modules/sugar-date/date/isPast.js","webpack:///./node_modules/sugar-date/date/isNextYear.js","webpack:///./node_modules/sugar-date/date/isNextWeek.js","webpack:///./node_modules/sugar-date/date/isNextMonth.js","webpack:///./node_modules/sugar-date/date/isMonday.js","webpack:///./node_modules/sugar-date/date/isLeapYear.js","webpack:///./node_modules/sugar-date/date/isLastYear.js","webpack:///./node_modules/sugar-date/date/isLastWeek.js","webpack:///./node_modules/sugar-date/date/isLastMonth.js","webpack:///./node_modules/sugar-date/date/isFuture.js","webpack:///./node_modules/sugar-date/date/internal/buildRelativeAliases.js","webpack:///./node_modules/sugar-date/date/isFriday.js","webpack:///./node_modules/sugar-date/date/isBetween.js","webpack:///./node_modules/sugar-date/date/isBefore.js","webpack:///./node_modules/sugar-date/date/isAfter.js","webpack:///./node_modules/sugar-date/date/internal/compareDay.js","webpack:///./node_modules/sugar-date/common/internal/trim.js","webpack:///./node_modules/sugar-date/date/is.js","webpack:///./node_modules/sugar-date/date/hoursUntil.js","webpack:///./node_modules/sugar-date/date/hoursSince.js","webpack:///./node_modules/sugar-date/date/hoursFromNow.js","webpack:///./node_modules/sugar-date/date/hoursAgo.js","webpack:///./node_modules/sugar-date/date/getWeekday.js","webpack:///./node_modules/sugar-date/date/getUTCWeekday.js","webpack:///./node_modules/sugar-date/date/getUTCOffset.js","webpack:///./node_modules/sugar-date/date/getISOWeek.js","webpack:///./node_modules/sugar-date/date/internal/createDateWithContext.js","webpack:///./node_modules/sugar-date/date/get.js","webpack:///./node_modules/sugar-date/common/var/INTERNAL_MEMOIZE_LIMIT.js","webpack:///./node_modules/sugar-date/common/internal/memoizeFunction.js","webpack:///./node_modules/sugar-date/common/var/STRING_FORMAT_REG.js","webpack:///./node_modules/sugar-date/common/internal/createFormatMatcher.js","webpack:///./node_modules/sugar-date/date/internal/getMeridiemToken.js","webpack:///./node_modules/sugar-date/date/internal/getDaysSince.js","webpack:///./node_modules/sugar-date/date/internal/getWeekYear.js","webpack:///./node_modules/sugar-date/common/internal/repeatString.js","webpack:///./node_modules/sugar-date/date/var/TIMEZONE_ABBREVIATION_REG.js","webpack:///./node_modules/sugar-date/date/var/FormatTokensBase.js","webpack:///./node_modules/sugar-date/date/var/formattingTokens.js","webpack:///./node_modules/sugar-date/date/format.js","webpack:///./node_modules/sugar-date/date/endOfYear.js","webpack:///./node_modules/sugar-date/date/endOfWeek.js","webpack:///./node_modules/sugar-date/date/endOfMonth.js","webpack:///./node_modules/sugar-date/date/endOfISOWeek.js","webpack:///./node_modules/sugar-date/date/endOfDay.js","webpack:///./node_modules/sugar-date/date/daysUntil.js","webpack:///./node_modules/sugar-date/date/daysSince.js","webpack:///./node_modules/sugar-date/date/daysInMonth.js","webpack:///./node_modules/sugar-date/date/daysFromNow.js","webpack:///./node_modules/sugar-date/date/daysAgo.js","webpack:///./node_modules/sugar-date/date/clone.js","webpack:///./node_modules/sugar-date/date/beginningOfYear.js","webpack:///./node_modules/sugar-date/date/beginningOfWeek.js","webpack:///./node_modules/sugar-date/date/beginningOfMonth.js","webpack:///./node_modules/sugar-date/date/beginningOfISOWeek.js","webpack:///./node_modules/sugar-date/date/beginningOfDay.js","webpack:///./node_modules/sugar-date/date/internal/collectDateParamsFromArguments.js","webpack:///./node_modules/sugar-date/date/internal/getDateParamsFromString.js","webpack:///./node_modules/sugar-date/date/advance.js","webpack:///./node_modules/sugar-date/date/addYears.js","webpack:///./node_modules/sugar-date/date/addWeeks.js","webpack:///./node_modules/sugar-date/date/addSeconds.js","webpack:///./node_modules/sugar-date/date/addMonths.js","webpack:///./node_modules/sugar-date/date/addMinutes.js","webpack:///./node_modules/sugar-date/date/addMilliseconds.js","webpack:///./node_modules/sugar-date/date/addHours.js","webpack:///./node_modules/sugar-date/date/internal/buildDateUnitMethods.js","webpack:///./node_modules/sugar-date/date/addDays.js","webpack:///./node_modules/sugar-date/number/yearsFromNow.js","webpack:///./node_modules/sugar-date/number/yearsBefore.js","webpack:///./node_modules/sugar-date/number/yearsAgo.js","webpack:///./node_modules/sugar-date/number/yearsAfter.js","webpack:///./node_modules/sugar-date/number/years.js","webpack:///./node_modules/sugar-date/number/yearFromNow.js","webpack:///./node_modules/sugar-date/number/yearBefore.js","webpack:///./node_modules/sugar-date/number/yearAgo.js","webpack:///./node_modules/sugar-date/number/yearAfter.js","webpack:///./node_modules/sugar-date/number/year.js","webpack:///./node_modules/sugar-date/number/weeksFromNow.js","webpack:///./node_modules/sugar-date/number/weeksBefore.js","webpack:///./node_modules/sugar-date/number/weeksAgo.js","webpack:///./node_modules/sugar-date/number/weeksAfter.js","webpack:///./node_modules/sugar-date/number/weeks.js","webpack:///./node_modules/sugar-date/number/weekFromNow.js","webpack:///./node_modules/sugar-date/number/weekBefore.js","webpack:///./node_modules/sugar-date/number/weekAgo.js","webpack:///./node_modules/sugar-date/number/weekAfter.js","webpack:///./node_modules/sugar-date/number/week.js","webpack:///./node_modules/sugar-date/number/secondsFromNow.js","webpack:///./node_modules/sugar-date/number/secondsBefore.js","webpack:///./node_modules/sugar-date/number/secondsAgo.js","webpack:///./node_modules/sugar-date/number/secondsAfter.js","webpack:///./node_modules/sugar-date/number/seconds.js","webpack:///./node_modules/sugar-date/number/secondFromNow.js","webpack:///./node_modules/sugar-date/number/secondBefore.js","webpack:///./node_modules/sugar-date/number/secondAgo.js","webpack:///./node_modules/sugar-date/number/secondAfter.js","webpack:///./node_modules/sugar-date/number/second.js","webpack:///./node_modules/sugar-date/number/monthsFromNow.js","webpack:///./node_modules/sugar-date/number/monthsBefore.js","webpack:///./node_modules/sugar-date/number/monthsAgo.js","webpack:///./node_modules/sugar-date/number/monthsAfter.js","webpack:///./node_modules/sugar-date/number/months.js","webpack:///./node_modules/sugar-date/number/monthFromNow.js","webpack:///./node_modules/sugar-date/number/monthBefore.js","webpack:///./node_modules/sugar-date/number/monthAgo.js","webpack:///./node_modules/sugar-date/number/monthAfter.js","webpack:///./node_modules/sugar-date/number/month.js","webpack:///./node_modules/sugar-date/number/minutesFromNow.js","webpack:///./node_modules/sugar-date/number/minutesBefore.js","webpack:///./node_modules/sugar-date/number/minutesAgo.js","webpack:///./node_modules/sugar-date/number/minutesAfter.js","webpack:///./node_modules/sugar-date/number/minutes.js","webpack:///./node_modules/sugar-date/number/minuteFromNow.js","webpack:///./node_modules/sugar-date/number/minuteBefore.js","webpack:///./node_modules/sugar-date/number/minuteAgo.js","webpack:///./node_modules/sugar-date/number/minuteAfter.js","webpack:///./node_modules/sugar-date/number/minute.js","webpack:///./node_modules/sugar-date/number/millisecondsFromNow.js","webpack:///./node_modules/sugar-date/number/millisecondsBefore.js","webpack:///./node_modules/sugar-date/number/millisecondsAgo.js","webpack:///./node_modules/sugar-date/number/millisecondsAfter.js","webpack:///./node_modules/sugar-date/number/milliseconds.js","webpack:///./node_modules/sugar-date/number/millisecondFromNow.js","webpack:///./node_modules/sugar-date/number/millisecondBefore.js","webpack:///./node_modules/sugar-date/number/millisecondAgo.js","webpack:///./node_modules/sugar-date/number/millisecondAfter.js","webpack:///./node_modules/sugar-date/number/millisecond.js","webpack:///./node_modules/sugar-date/number/hoursFromNow.js","webpack:///./node_modules/sugar-date/number/hoursBefore.js","webpack:///./node_modules/sugar-date/number/hoursAgo.js","webpack:///./node_modules/sugar-date/number/hoursAfter.js","webpack:///./node_modules/sugar-date/number/hours.js","webpack:///./node_modules/sugar-date/number/hourFromNow.js","webpack:///./node_modules/sugar-date/number/hourBefore.js","webpack:///./node_modules/sugar-date/number/hourAgo.js","webpack:///./node_modules/sugar-date/number/hourAfter.js","webpack:///./node_modules/sugar-date/number/hour.js","webpack:///./node_modules/sugar-date/number/duration.js","webpack:///./node_modules/sugar-date/number/daysFromNow.js","webpack:///./node_modules/sugar-date/number/daysBefore.js","webpack:///./node_modules/sugar-date/number/daysAgo.js","webpack:///./node_modules/sugar-date/number/daysAfter.js","webpack:///./node_modules/sugar-date/number/days.js","webpack:///./node_modules/sugar-date/number/dayFromNow.js","webpack:///./node_modules/sugar-date/number/dayBefore.js","webpack:///./node_modules/sugar-date/number/dayAgo.js","webpack:///./node_modules/sugar-date/number/dayAfter.js","webpack:///./node_modules/sugar-date/common/internal/collectSimilarMethods.js","webpack:///./node_modules/sugar-date/common/internal/wrapNamespace.js","webpack:///./node_modules/sugar-date/common/var/methodDefineAliases.js","webpack:///./node_modules/sugar-date/date/internal/buildNumberUnitMethods.js","webpack:///./node_modules/sugar-date/number/day.js","webpack:///./node_modules/sugar-date/date/setLocale.js","webpack:///./node_modules/sugar-date/date/removeLocale.js","webpack:///./node_modules/sugar-date/date/getLocale.js","webpack:///./node_modules/sugar-date/date/getAllLocales.js","webpack:///./node_modules/sugar-date/common/internal/getKeys.js","webpack:///./node_modules/sugar-date/date/getAllLocaleCodes.js","webpack:///./node_modules/sugar-date/common/internal/setChainableConstructor.js","webpack:///./node_modules/sugar-date/date/internal/setDateChainableConstructor.js","webpack:///./node_modules/sugar-date/date/build/setDateChainableConstructorCall.js","webpack:///./node_modules/sugar-date/date/internal/iterateOverHigherDateParams.js","webpack:///./node_modules/sugar-date/date/internal/getYearFromAbbreviation.js","webpack:///./node_modules/sugar-date/date/internal/deleteDateParam.js","webpack:///./node_modules/sugar-date/common/internal/getOwnKey.js","webpack:///./node_modules/sugar-date/date/internal/getDateParam.js","webpack:///./node_modules/sugar-date/date/internal/setMonth.js","webpack:///./node_modules/sugar-date/date/internal/setYear.js","webpack:///./node_modules/sugar-date/date/internal/callDateSetWithWeek.js","webpack:///./node_modules/sugar-date/date/internal/getHigherUnitIndex.js","webpack:///./node_modules/sugar-date/date/internal/resetLowerUnits.js","webpack:///./node_modules/sugar-date/common/internal/defineAccessor.js","webpack:///./node_modules/sugar-date/common/internal/defineOptionsAccessor.js","webpack:///./node_modules/sugar-date/date/internal/defaultNewDate.js","webpack:///./node_modules/sugar-date/date/var/DATE_OPTIONS.js","webpack:///./node_modules/sugar-date/date/var/ABBREVIATED_YEAR_REG.js","webpack:///./node_modules/sugar-date/date/create.js","webpack:///./node_modules/sugar-date/date/internal/getParsingTokenWithSuffix.js","webpack:///./node_modules/sugar-date/date/internal/getAdjustedUnitForNumber.js","webpack:///./node_modules/sugar-date/common/internal/allCharsReg.js","webpack:///./node_modules/sugar-date/common/var/fullwidthNumberHelpers.js","webpack:///./node_modules/sugar-date/common/internal/escapeRegExp.js","webpack:///./node_modules/sugar-date/date/internal/arrayToRegAlternates.js","webpack:///./node_modules/sugar-date/common/var/PRIVATE_PROP_PREFIX.js","webpack:///./node_modules/sugar-date/common/internal/privatePropertyAccessor.js","webpack:///./node_modules/sugar-date/date/internal/getArrayWithOffset.js","webpack:///./node_modules/sugar-date/common/internal/getOrdinalSuffix.js","webpack:///./node_modules/sugar-date/common/internal/hasValidPlainObjectPrototype.js","webpack:///./node_modules/sugar-date/common/internal/hasOwnEnumeratedProperties.js","webpack:///./node_modules/sugar-date/common/internal/isPlainObject.js","webpack:///./node_modules/sugar-date/common/var/NATIVE_TYPES.js","webpack:///./node_modules/sugar-date/common/internal/commaSplit.js","webpack:///./node_modules/sugar-date/common/internal/isArrayIndex.js","webpack:///./node_modules/sugar-date/common/internal/getSparseArrayIndexes.js","webpack:///./node_modules/sugar-date/common/internal/iterateOverSparseArray.js","webpack:///./node_modules/sugar-date/common/internal/filter.js","webpack:///./node_modules/sugar-date/date/var/CoreParsingFormats.js","webpack:///./node_modules/sugar-date/date/var/CoreParsingTokens.js","webpack:///./node_modules/sugar-date/date/var/LOCALE_ARRAY_FIELDS.js","webpack:///./node_modules/sugar-date/date/internal/getNewLocale.js","webpack:///./node_modules/sugar-date/date/var/CanadianEnglishDefinition.js","webpack:///./node_modules/sugar-date/date/var/EnglishLocaleBaseDefinition.js","webpack:///./node_modules/sugar-date/date/var/BritishEnglishDefinition.js","webpack:///./node_modules/sugar-date/date/var/LazyLoadedLocales.js","webpack:///./node_modules/sugar-date/date/index.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","a","i","window","webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","installedModules","1","__webpack_require__","l","e","requireEnsure","promises","installedChunkData","promise","Promise","resolve","reject","head","document","getElementsByTagName","script","createElement","charset","timeout","nc","setAttribute","src","p","0","setTimeout","onScriptComplete","type","target","event","onerror","onload","clearTimeout","chunk","errorType","realSrc","error","Error","request","undefined","appendChild","all","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","r","value","n","__esModule","getDefault","getModuleExports","object","property","oe","err","console","jsonpArray","oldJsonpFunction","bind","slice","s","global","Sugar","SUGAR_GLOBAL","STATIC","INSTANCE","PROPERTY_DESCRIPTOR_SUPPORT","defineProperties","globalContext","getGlobal","testGlobal","allowObjectPrototype","namespacesByName","namespacesByClassString","definePropertyShim","obj","prop","descriptor","DefaultChainable","getNewChainableClass","createNamespace","isObject","sugarNamespace","defineWithOptionCollect","methodName","instance","args","setProperty","arg1","arg2","arg3","opts","collectDefineOptions","defineMethods","methods","flags","forEachProperty","method","instanceMethod","staticMethod","wrapMethodWithArguments","wrapInstanceMethod","fn","wrapInstanceMethodFixed","this","b","setMethod","active","extend","last","extendNative","defineChainableMethod","source","methodsByName","nativeClass","nativeProto","staticMethods","instanceMethods","arrayOptionExists","field","val","arr","el","canExtend","objectRestricted","disallowedByFlags","methodIsExcepted","namespaceIsExcepted","arrayOptionExcludes","objectPrototype","hasOwn","mapNativeToChainable","mapObjectChainablesToNamespace","setObjectChainableOnNamespace","toString","startCollect","len","collectedArgs","Math","max","arguments","apply","polyfill","override","SugarChainable","arg","constructor","raw","existing","collision","dcp","wrapped","wrapWithChainableResult","disambiguate","disambiguateMethod","classToString","mapObjectChainableToAllNamespaces","proto","methodNames","ownPropertyNames","nativeMethodProhibited","getOwnPropertyNames","internalToString","internalHasOwnProperty","key","writable","getOwn","setupGlobal","split","setGlobalProperties","isString","isFunction","isArray","NO_KEYS_IN_STRING_OBJECTS","TRIM_CHARS","HALF_WIDTH_PERIOD","HALF_WIDTH_COMMA","sugarObject","sugarArray","Array","sugarDate","Date","sugarString","String","sugarFunction","Number","Function","RegExp","isClass","className","str","wrapNamespace","defineStaticPolyfill","defineInstancePolyfill","assertCallable","TypeError","isDefined","isObjectType","isPrimitive","isPlainObject","hasValidPlainObjectPrototype","hasToString","hasConstructor","hasOwnEnumeratedProperties","objectProto","isArrayIndex","iterateOverSparseArray","fromIndex","loop","index","indexes","getSparseArrayIndexes","fromRight","sort","aLoop","spaceSplit","forEach","fullWidthNumberMap","trunc","isFinite","ceil","floor","padNumber","num","place","sign","base","replacement","abs","repeatString","result","replace","pow","min","chr","round","fromCharCode","privatePropertyAccessor","privateKey","buildClassChecks","knownTypes","addKnownType","buildClassCheck","globalObject","getConstructorClassCheck","ctorStr","getToStringClassCheck","buildPrimitiveClassCheck","toLowerCase","t","addCoreTypes","names","Set","Map","addArrayTypes","isKnownType","buildFullWidthNumber","hwp","hwc","fwn","digit","allCharsReg","DONT_ENUM_PROPS","arrayIndexOf","search","defaultFromIndex","increment","sparseIndexOf","arrayReduce","initialValue","count","defined","buildDontEnumFix","propertyIsEnumerable","forEachEnumerableProperty","buildChainableNativeMethodsFix","defineNativeMethodsOnChainable","dateTokens","addDateTokens","prefix","tokens","keys","assertNonNull","coercePrimitiveToObject","forceStringCoercion","charAt","every","context","some","map","filter","indexOf","lastIndexOf","eachFn","reduce","reduceFn","reduceRight","TRIM_REG","trim","boundArgs","$i","$len","bound","concat","now","getTime","toISOString","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","toJSON","hasISOSupport","UTC","defaultsBool","defaultVal","_types__WEBPACK_IMPORTED_MODULE_0__","defaultsStr","defaultsNb","isNaN","defaultsArr","defaultsFn","doc","_root__WEBPACK_IMPORTED_MODULE_0__","getText","node","_types__WEBPACK_IMPORTED_MODULE_1__","textContent","_string__WEBPACK_IMPORTED_MODULE_2__","innerText","getFirstTextNode","childNodes","nodeType","createElm","tag","removeElm","parentNode","removeChild","createText","txt","createTextNode","hasClass","ele","cls","supportsClassList","classList","contains","match","addClass","add","removeClass","remove","reg","createOpt","text","isSel","opt","createCheckItem","id","chkValue","labelText","extraAttr","li","label","check","elm","getElementById","tagname","documentElement","__webpack_exports__","isEmpty","EMPTY_FN","isObj","isFn","isNumber","isBoolean","isUndef","isNull","INPUT","SELECT","MULTIPLE","CHECKLIST","NONE","ENTER_KEY","TAB_KEY","ESC_KEY","UP_ARROW_KEY","DOWN_ARROW_KEY","HEADER_TAG","CELL_TAG","STRING","NUMBER","FORMATTED_NUMBER","DATE","IP_ADDRESS","AUTO_FILTER_DELAY","FEATURES","dateType","class","_modules_dateType__WEBPACK_IMPORTED_MODULE_0__","help","_modules_help__WEBPACK_IMPORTED_MODULE_1__","enforce","state","_modules_state__WEBPACK_IMPORTED_MODULE_2__","markActiveColumns","_modules_markActiveColumns__WEBPACK_IMPORTED_MODULE_7__","gridLayout","_modules_gridLayout__WEBPACK_IMPORTED_MODULE_3__","loader","_modules_loader__WEBPACK_IMPORTED_MODULE_4__","highlightKeyword","_modules_highlightKeywords__WEBPACK_IMPORTED_MODULE_5__","popupFilter","_modules_popupFilter__WEBPACK_IMPORTED_MODULE_6__","rowsCounter","_modules_rowsCounter__WEBPACK_IMPORTED_MODULE_8__","statusBar","_modules_statusBar__WEBPACK_IMPORTED_MODULE_9__","clearButton","_modules_clearButton__WEBPACK_IMPORTED_MODULE_10__","alternateRows","_modules_alternateRows__WEBPACK_IMPORTED_MODULE_11__","noResults","_modules_noResults__WEBPACK_IMPORTED_MODULE_12__","paging","_modules_paging__WEBPACK_IMPORTED_MODULE_13__","toolbar","_modules_toolbar__WEBPACK_IMPORTED_MODULE_14__","addEvt","func","capture","addEventListener","attachEvent","removeEvt","removeEventListener","detachEvent","stopEvt","evt","stopPropagation","cancelBubble","cancelEvt","preventDefault","returnValue","targetEvt","srcElement","keyCode","charCode","which","isKeyPressed","scope","boundFnName","buildNumberUnitMethods","buildDateUnitMethods","self","_typeof","rgxEsc","matchCase","term","exactMatch","modifier","diacritics__WEBPACK_IMPORTED_MODULE_0__","test","NOT_IMPLEMENTED","Feature","tf","feature","_this","_classCallCheck","enabled","config","emitter","initialized","on","destroy","_createClass","init","reset","enable","disable","isEnabled","HOURS_INDEX","DAY_INDEX","WEEK_INDEX","MONTH_INDEX","YEAR_INDEX","isSerializable","isDate","isRegExp","isSet","isMap","isError","NATIVE_TYPES","localeManager","defineStatic","addLocale","code","set","English","LazyLoadedLocales","AmericanEnglishDefinition","getNewLocale","buildLocales","LocaleManager","loc","locales","fallback","current","getAll","def","compiledFormats","buildRelativeAliases","util","cloneRangeMember","Range","start","end","EVENTS","LEFT","RIGHT","CENTER","Toolbar","_Feature","f","_possibleConstructorReturn","_getPrototypeOf","contCssClass","_settings__WEBPACK_IMPORTED_MODULE_2__","container_css_class","lContCssClass","left_cont_css_class","rContCssClass","right_cont_css_class","cContCssClass","center_cont_css_class","tgtId","target_id","cont","lCont","rCont","cCont","innerCont","left","center","right","isExternal","_inherits","_feature__WEBPACK_IMPORTED_MODULE_0__","container","_dom__WEBPACK_IMPORTED_MODULE_1__","Mod","tblMainCont","infDivCssClass","dom","insertBefore","firstChild","createContainer","_types__WEBPACK_IMPORTED_MODULE_3__","emit","position","css","div","tbl","captions","_string__WEBPACK_IMPORTED_MODULE_0__","has","caseSensitive","sCase","Boolean","defineOnPrototype","ctor","parse","decimal","regex","unformatted","parseFloat","_utc","callDateGet","getWeekday","buildDateRangeUnits","setDate","getDate","classChecks","mathAliases","setWeekday","dow","dir","currentWeekday","ndir","offset","sugarNumber","sugarRegExp","getExtendedDate","createDate","options","forceClone","date","getMonth","getYear","getDaysInMonth","DateUnits","multiplier","alias","ambiguous","ignoreCase","x","y","numSortAsc","numSortDesc","dateSortAsc","date1","date2","dateSortDesc","sortNumberStr","compareFn","numStr1","numStr2","num1","_number__WEBPACK_IMPORTED_MODULE_0__","num2","sortDateStr","locale","dateStr1","dateStr2","sugar_date__WEBPACK_IMPORTED_MODULE_1__","create","cloneDate","clone","callDateSet","safe","walkUnitDown","setUnitAndLowerToEdge","startIndex","stopIndex","unit","dateIsValid","updateDate","advanceDate","_dateOptions","getNewDate","DateUnitIndexes","getLowerUnitIndex","isUndefined","isValidRangeMember","rangeIsValid","range","methodDefineAliases","collectSimilarMethods","defineInstance","defineInstanceSimilar","LocaleHelpers","moveToBeginningOfWeek","moveToBeginningOfUnit","unitIndex","localeCode","getFirstDayOfWeek","moveToEndOfWeek","moveToEndOfUnit","getDateParam","iterateOverDateUnits","iterateOverDateParams","params","endIndex","run","resetLowerUnits","getHigherUnitIndex","callDateSetWithWeek","advance","prefer","weekdayDir","contextDate","upperUnitIndex","setUnit","unitName","checkMonth","fraction","setUpperUnit","setSpecificity","specificity","handleFraction","lowerUnit","monthHasShifted","targetMonth","setTime","millisecond","canDisambiguate","disambiguateHigherUnit","tzOffset","getTimezoneOffset","HALF_WIDTH_ZERO","FULL_WIDTH_ZERO","FULL_WIDTH_PERIOD","OPEN_BRACE","CLOSE_BRACE","simpleMerge","simpleClone","BaseDropdown","customSorter","_types__WEBPACK_IMPORTED_MODULE_2__","filter_options_sorter","col","comparer","isCustom","optsTxt","excludedOpts","sortOptions","colIndex","isCustomOptions","sortSlc","sortNumDesc","idx","hasType","_const__WEBPACK_IMPORTED_MODULE_3__","getDecimal","_sort__WEBPACK_IMPORTED_MODULE_1__","getLocale","refreshFilters","colIndexes","_this2","colIdx","values","getValues","build","linkedFilters","selectOptions","isValidLinkedValue","rowIdx","activeFilterIdx","disableExcludedOptions","isRowValid","isRowDisplayed","linkFilters","activeFilterId","refreshAll","write","hours","expire","toGMTString","cookie","escape","read","cookieValue","unescape","substring","incrementDate","incrementNumber","incrementString","getGreaterPrecision","getDateIncrementObject","rangeEvery","step","countOnly","precision","dio","inverse","NaN","ISODefaults","moveToFirstDayOfWeekYear","ISO_FIRST_DAY_OF_WEEK","ISO_FIRST_DAY_OF_WEEK_YEAR","getWeekNumber","allowPrevious","firstDayOfWeek","firstDayOfWeekYear","isoWeek","getTimeDistanceForUnit","d1","d2","tmp","fwd","simpleCapitalize","toUpperCase","DATE_OPTIONS","namespaceAliases","defineOptionsAccessor","MINUTES","ABBREVIATED_YEAR_REG","resetTime","deleteDateParam","coreUtilityAliases","getYearFromAbbreviation","iterateOverHigherDateParams","afterCallbacks","relative","optPrefer","optLocale","optFromUTC","optSetUTC","optParams","optClone","parseFormatValues","dif","to","param","parseIrregular","parseValue","cloneDateByFlag","afterDateSet","handleTimezoneOffset","tzHour","tzMinute","minute","handleMidday","hour","handleRelativeUnit","edge","weekday","setOrdinalWeekday","half","day","separateAbsoluteUnits","handleEdge","units","weekdayOfMonth","edgeIndex","month","setupOptions","parseStringDate","cacheFormat","timestamp","ampm","utc","midday","fireCallbacks","EnglishLocaleBaseDefinition","getEnglishVariant","v","removeDiacritics","diacriticsMap","replacementList","chars","j","CheckList","_BaseDropdown","containers","containerCssClass","_settings__WEBPACK_IMPORTED_MODULE_7__","div_checklist_css_class","filterCssClass","checklist_css_class","itemCssClass","checklist_item_css_class","selectedItemCssClass","checklist_selected_item_css_class","activateText","activate_checklist_text","disabledItemCssClass","checklist_item_disabled_css_class","enableResetOption","enable_checklist_reset_filter","prfx","_baseDropdown__WEBPACK_IMPORTED_MODULE_0__","optionClick","_event__WEBPACK_IMPORTED_MODULE_4__","setItemOption","onCheckListClick","loadFltOnDemand","getAttribute","ct","colIdxs","getFiltersByType","_const__WEBPACK_IMPORTED_MODULE_6__","_this3","externalFltTgtId","externalFltIds","divCont","fltIds","buildFilterId","isLinked","_this4","flt","ul","activeIdx","customValues","getCustomOptions","getActiveFilterId","getColumnIndexFromFilterId","filteredDataCol","innerHTML","eachRow","row","cellValue","getCellValue","cells","cellString","_string__WEBPACK_IMPORTED_MODULE_3__","_array__WEBPACK_IMPORTED_MODULE_2__","filteredCol","getVisibleColumnValues","k","excludeRows","nbCells","addChecks","_this5","chkCt","addTChecks","lbl","fltId","lblIdx","disabled","style","display","_this6","li0","getClearFilterText","enableEmptyOption","li1","emOperator","emptyText","enableNonEmptyOption","li2","nmOperator","nonEmptyText","_this7","chkIndex","dataset","getFilterElement","parseInt","items","slcValues","slcIndexes","checked","separator","chx","orOperator","chx0","replaceValue","replaceIndex","_this8","lis","chk","chkVal","fltAttr","_types__WEBPACK_IMPORTED_MODULE_5__","substr","_this9","off","Paging","btnCssClass","_settings__WEBPACK_IMPORTED_MODULE_5__","btn_css_class","pageSlc","pageLengthSlc","pageLength","pageLengthTgtId","results_per_page_target_id","pgSlcCssClass","slc_css_class","pgInpCssClass","inp_css_class","resultsPerPage","results_per_page","hasResultsPerPage","resultsSlcCssClass","results_slc_css_class","resultsSpanCssClass","results_span_css_class","startPagingRow","nbPages","currentPageNb","btnNextPageText","btn_next_page_text","btnPrevPageText","btn_prev_page_text","btnLastPageText","btn_last_page_text","btnFirstPageText","btn_first_page_text","btnNextPageHtml","btn_next_page_html","enableIcons","btnPrevPageHtml","btn_prev_page_html","btnFirstPageHtml","btn_first_page_html","btnLastPageHtml","btn_last_page_html","pageText","page_text","ofText","of_text","nbPgSpanCssClass","nb_pages_css_class","hasBtns","btns","pageSelectorType","page_selector_type","_const__WEBPACK_IMPORTED_MODULE_4__","toolbarPosition","toolbar_position","_toolbar__WEBPACK_IMPORTED_MODULE_6__","onBeforeChangePage","on_before_change_page","onAfterChangePage","on_after_change_page","slcResultsTxt","btnNextCont","btnPrevCont","btnLastCont","btnFirstCont","pgCont","pgBefore","pgAfter","startRow","refRow","nrows","getRowsNb","_assertThisInitialized","slcIndex","selectedIndex","nbOpts","next","nextIndex","changePage","prev","prevIndex","first","_detectKey","_event__WEBPACK_IMPORTED_MODULE_3__","sorted","blur","slcPagesChange","nextEvt","prevEvt","lastEvt","firstEvt","slcPages","setResultsPerPage","slc","btnNextSpan","btnPrevSpan","btnLastSpan","btnFirstSpan","btnNext","btnPrev","btnLast","btnFirst","targetEl","pgBeforeSpan","pgAfterSpan","pgSpan","setPagingInfo","fltGrid","validateAllRows","validRowsIndex","resetPagingInfo","changePageHandler","changePageResultsHandler","filterTable","validRows","getValidRows","visibility","z","groupByPage","rows","endPagingRow","h","getValidRowsNb","validRowIdx","rowDisplayed","getPage","setPage","cmd","isInitialized","btnEvt","cmdtype","slcResultsChange","ev","onChangeResultsPerPage","slcR","slcRText","slcROpts","slcRSpan","btn","currOpt","Option","removeResultsPerPage","selected","changeResultsPerPage","slcPagesSelIndex","nbFilterableRows","slcIdx","resetPage","pgNb","getPageNb","resetPageLength","pglenIndex","getPageLength","pageNumber","NoResults","no_results_message","content","_settings__WEBPACK_IMPORTED_MODULE_4__","customContainer","custom_container","customContainerId","custom_container_id","cssClass","css_class","onBeforeShow","on_before_show_msg","onAfterShow","on_after_show_msg","onBeforeHide","on_before_hide_msg","onAfterHide","on_after_hide_msg","nextSibling","toggle","hide","show","setWidth","width","headTbl","clientWidth","tHead","tBodies","AlternateRows","evenCss","even_row_css_class","oddCss","odd_row_css_class","processAll","processRowHandler","indexLen","setRowBg","processRow","arrIdx","isValid","removeRowBg","rowIndex","arrIndex","ClearButton","btn_reset","targetId","_settings__WEBPACK_IMPORTED_MODULE_3__","tooltip","html","_toolbar__WEBPACK_IMPORTED_MODULE_5__","element","onClick","clearFilters","_types__WEBPACK_IMPORTED_MODULE_4__","resetEl","_event__WEBPACK_IMPORTED_MODULE_2__","fltReset","StatusBar","status_bar","msgContainer","labelContainer","delay","onBeforeShowMsg","onAfterShowMsg","msgFilter","msg_filter","msgPopulate","msg_populate","msgPopulateCheckList","msg_populate_checklist","msgChangePage","msg_change_page","msgClear","msg_clear","msgChangeResults","msg_change_results","msgResetPage","msg_reset_page","msgResetPageLength","msg_reset_page_length","msgSort","msg_sort","msgLoadExtensions","msg_load_extensions","msgLoadThemes","msg_load_themes","statusDiv","_dom__WEBPACK_IMPORTED_MODULE_2__","statusSpan","statusSpanText","message","_root__WEBPACK_IMPORTED_MODULE_1__","RowsCounter","rows_counter","fromToTextSeparator","overText","over_text","_toolbar__WEBPACK_IMPORTED_MODULE_4__","onBeforeRefreshCounter","on_before_refresh_counter","onAfterRefreshCounter","on_after_refresh_counter","countDiv","countSpan","countText","refresh","totTxt","nbValidRows","pagingStartRow","pagingEndRow","getFilterableRowsNb","nbHiddenRows","MarkActiveColumns","mark_active_columns","headerCssClass","header_css_class","cellCssClass","cell_css_class","highlightColumn","highlight_column","onBeforeActiveColumn","on_before_active_column","onAfterActiveColumn","on_after_active_column","clearActiveColumns","markActiveColumn","eachCol","getHeaderElement","eachColumnCell","cell","header","querySelectorAll","PopupFilter","popup_filters","closeOnFiltering","_settings__WEBPACK_IMPORTED_MODULE_6__","close_on_filtering","iconPath","image","themesPath","activeIconPath","image_active","iconHtml","image_html","placeholderCssClass","placeholder_css_class","div_css_class","adjustToContainer","adjust_to_container","onBeforeOpen","on_before_popup_filter_open","onAfterOpen","on_after_popup_filter_open","onBeforeClose","on_before_popup_filter_close","onAfterClose","on_after_popup_filter_close","fltSpans","fltIcons","filtersCache","fltElms","prfxDiv","closeAll","headerWidth","onMouseup","targetElm","activeFlt","close","filtersRowIndex","headersRow","headers_row_index","buildIcons","setIconsState","cellIndex","changeState","buildAll","icon","getFilterType","contId","placeholder","isOpen","open","_root__WEBPACK_IMPORTED_MODULE_5__","focus","exceptIdx","fltType","iconImg","HighlightKeyword","highlightCssClass","highlight_css_class","unhighlightAll","_processTerm","highlight","hasChildNodes","children","termIdx","nodeValue","pn","nv","before","_dom__WEBPACK_IMPORTED_MODULE_0__","after","unhighlight","highlightedNodes","nodeVal","replaceChild","normalize","highlightKeywords","reLk","lkOperator","reEq","eqOperator","reSt","stOperator","reEn","enOperator","reLe","leOperator","reGe","geOperator","reL","lwOperator","reG","grOperator","reD","dfOperator","BEFORE_ACTION_EVENTS","AFTER_ACTION_EVENTS","Loader","closeDelay","onShow","on_show_loader","onHide","on_hide_loader","containerDiv","_root__WEBPACK_IMPORTED_MODULE_3__","displayLoader","GridLayout","grid_layout","height","mainContCssClass","cont_css_class","tbl_cont_css_class","headContCssClass","tbl_head_css_class","inf_grid_css_class","headRowIndex","headRows","headers_rows","filters","noHeaders","no_headers","defaultColWidth","default_col_width","colElms","prfxGridFltTd","prfxGridTh","sourceTblHtml","outerHTML","tblHasColTag","tblCont","headTblCont","setOverrides","setDefaultColWidths","setConfigWidth","tblW","initialTableWidth","tH","hRow","sortTriggers","getSortTriggerIds","filtersRow","createFiltersRow","setHeadersRow","thead","tableLayout","setColWidths","scrollLeft","extension","asyncSort","triggerIds","setColumnElements","popupFilters","colWidths","colW","getHeadersRowIndex","fltTdId","prfxFlt","cl","fltCellTag","cols","getCellsNb","tableHead","thId","JSON","localStorage","location","hasStorage","Storage","enableLocalStorage","enableCookie","duration","cookieDuration","save","sync","getKey","stringify","_cookie__WEBPACK_IMPORTED_MODULE_0__","retrieve","removeItem","overrideAndSync","prfxTf","path","pathname","decodeURIComponent","encodeURIComponent","hasHashChange","docMode","documentMode","Hash","lastHash","boundSync","hash","update","_event__WEBPACK_IMPORTED_MODULE_0__","State","cfg","enableHash","types","persistFilters","persistPageNumber","page_number","persistPageLength","page_length","persistSort","persistColsVisibility","columns_visibility","persistFiltersVisibility","filters_visibility","cookie_duration","enableStorage","storage","pageNb","hiddenCols","filtersVisibility","prfxCol","pageNbKey","pageLengthKey","filtersVisKey","updatePage","updatePageLength","descending","updateSort","_syncSort","_syncColsVisibility","updateColsVisibility","_syncFiltersVisibility","visible","updateFiltersVisibility","_hash__WEBPACK_IMPORTED_MODULE_1__","_storage__WEBPACK_IMPORTED_MODULE_2__","getFiltersValue","column","hidden","_syncFilters","setFilterValue","WEBSITE_URL","Help","help_instructions","contTgtId","container_target_id","instrText","instrHtml","btnText","btn_text","btnHtml","btn_html","boundMouseup","defaultHtml","version","year","_toolbar__WEBPACK_IMPORTED_MODULE_7__","divContainer","helpEl","helplink","_root__WEBPACK_IMPORTED_MODULE_4__","divDisplay","DateType","datetime","sugar_date__WEBPACK_IMPORTED_MODULE_0__","_feature__WEBPACK_IMPORTED_MODULE_2__","setLocale","addConfigFormats","colTypes","dateStr","getOptions","colType","formats","format","addFormat","ex","Dropdown","enableSlcResetFilter","enable_slc_reset_filter","non_empty_text","multipleSlcTooltip","multiple_slc_tooltip","onSlcFocus","onSlcChange","selectFlts","_const__WEBPACK_IMPORTED_MODULE_5__","multipleFlts","multiple","title","fltCssClass","fltMultiCssClass","opt0","addOptions","slcValue","addFirstOption","isDisabled","opt1","opt2","option","selectedOptions","Emitter","events","evts","splice","DURATION_REG","amt","Hours","Minutes","Seconds","Milliseconds","MULTIPLIERS","amount","mult","getDateForRange","getRangeMemberPrimitiveValue","valueOf","dateFormat","assertDateIsValid","getAdjustedUnitForDate","dateRelative","dRelative","adu","getRelativeFormat","compareDay","compareDate","fullCompareDate","margin","weekdayMap","monthMap","getUTCOffset","iso","colon","getHours","ISO8601","RFC1123","RFC1036","CoreOutputFormats","formattingTokens","dateFormatMatcher","getDateParamsFromString","collectDateParamsFromArguments","collectUpdateDateArguments","allowDuration","advanceDateWithArgs","timezoneShift","compareEdges","loMargin","hiMargin","fromUTC","setUTC","addSpecificUnit","getTimezoneShift","getOwnKey","getDateParamKey","setYear","setMonth","setISOWeekNumber","getAdjustedUnit","ms","withPrecision","getRegNonCapturing","requiresSuffix","requiresSuffixOr","second","requiresNumerals","mdy","short","medium","long","full","stamp","time","g","eval","_root__WEBPACK_IMPORTED_MODULE_6__","TableFilter","getFullYear","hasConfig","_len","_key","nodeName","_emitter__WEBPACK_IMPORTED_MODULE_7__","filterTypes","_const__WEBPACK_IMPORTED_MODULE_10__","basePath","base_path","grid","filters_row_index","filters_cell_tag","stylePath","getStylePath","stylesheet","getStylesheetPath","stylesheetId","fltsRowCssClass","flts_row_css_class","enable_icons","alternate_rows","col_widths","flt_css_class","flt_multi_css_class","fltSmallCssClass","flt_small_css_class","singleFltCssClass","single_filter","enterKey","enter_key","onBeforeFilter","on_before_filter","onAfterFilter","on_after_filter","case_sensitive","hasExactMatchByCol","columns_exact_match","exactMatchByCol","exact_match","ignoreDiacritics","ignore_diacritics","linked_filters","disable_excluded_options","hasExcludedRows","exclude_rows","external_flt_ids","onFiltersLoaded","on_filters_loaded","singleFlt","singleFltExcludeCols","exclude_cols","onRowValidated","on_row_validated","cellParser","cell_parser","watermark","isWatermarkArray","clearFilterText","clear_filter_text","enable_empty_option","empty_text","enable_non_empty_option","on_change","sort_select","isSortNumAsc","sort_num_asc","sortNumAsc","isSortNumDesc","sort_num_desc","load_filters_on_demand","hasCustomOptions","custom_options","customOptions","rgxOperator","regexp_operator","empty_operator","nonempty_operator","or_operator","anOperator","and_operator","greater_operator","lower_operator","lower_equal_operator","greater_equal_operator","different_operator","like_operator","equal_operator","start_with_operator","end_with_operator","displayBtn","btnReset","onBeforeReset","on_before_reset","onAfterReset","on_after_reset","autoFilter","auto_filter","autoFilterDelay","isUserTyping","autoFilterTimer","highlight_keywords","thousandsSeparator","thousands_separator","decimalSeparator","decimal_separator","col_types","prfxValButton","prfxResponsive","stickyCssClass","extensions","enableDefaultTheme","enable_default_theme","hasThemes","themes","getThemesPath","responsive","stickyHeaders","sticky_headers","ExtRegistry","instantiateFeatures","item","import","inpclass","loadThemes","initFeatures","fltrow","_insertFiltersRow","fltCell","colSpan","dropdown","_modules_dropdown__WEBPACK_IMPORTED_MODULE_8__","isExternalFlt","checkList","_modules_checkList__WEBPACK_IMPORTED_MODULE_9__","_buildInputFilter","_buildSubmitButton","setActiveFilterId","_initNoFilters","setExcludeRows","setFixedLayout","initExtensions","detectKey","clearInterval","onKeyUp","setInterval","onKeyDown","onInpFocus","onInpBlur","insertRow","inpType","inp","Cls","exts","ext","loadExtension","hasExtension","modulePath","then","__WEBPACK_AMD_REQUIRE_ARRAY__","mod","inst","default","catch","registerExtension","destroyExtensions","theme","styleId","isImported","getStylesheet","_this10","removeExternalFlts","deleteRow","externalFlt","optTxt","optArray","slcTexts","texts","slcSort","sorts","_this11","hiddenRows","searchArgs","occurence","isMatch","isSingleFltMatch","sA","sAOrSplit","hasMultiOrSA","sAAndSplit","hasMultiAndSA","cS","found","w","_match","validateRow","numData","reEm","reNm","reRe","hasLO","hasLE","hasGR","hasGE","hasDF","hasEQ","hasLK","hasST","hasEN","hasEM","hasNM","hasRE","dte1","dte2","isValidDate","parseDate","isLDate","isLEDate","isGDate","isGEDate","isDFDate","isEQDate","isExactMatch","_number__WEBPACK_IMPORTED_MODULE_4__","srchArg","searchArg","ignoresDiacritics","getColumnData","includeHeaders","exclude","getColValues","getColumnValues","_this12","typed","colValues","getContent","getCellData","getHeadersText","isExludedRow","getFilterValue","fltValue","fltColType","_this13","getFilterId","bool","tr","nbRows","getWorkingRows","getData","excludeHiddenCols","getTableData","_this14","tblData","headers","rowData","isColHidden","cellContent","getFilteredData","filteredData","getFilteredValues","rData","getFilteredColumnData","getFilteredDataCol","getVisibleColumnData","getFilteredColumnValues","_this15","validColValues","getRowDisplay","unshift","displayFlag","validFlag","query","tableWidth","defaultWidth","colTags","frag","createDocumentFragment","_this16","filterId","style_path","themes_path","activateFilter","ignoreDiac","clearText","continueFn","breakFn","_this17","startIdx","filePath","imported","attr","files","_import","fileId","callback","_this18","file","isLoaded","onreadystatechange","readyState","getFiltersId","reCalc","_this19","getFiltersRowIndex","getStartRowIndex","getLastRowIndex","table","_this20","headerText","ampmFront","numeralUnits","allowsFullWidth","timeMarkerOptional","weekdays","numerals","placeholders","past","future","timeSuffixes","modifiers","timeParse","plural","months","articles","timeFrontParse","timeMarkers","numberWithUnit","toFixed","last2","timeSeparator","ordinalSuffix","baseUnit","union","toArray","getRangeMemberNumericValue","charCodeAt","span","intersect","everyFn","periodSplit","getPrecision","n1","n2","valueIsNotInfinite","Infinity","DURATION_UNITS","rangeClamp","clamp","FULL_CAPTURED_DURATION","RANGE_REG_FROM_TO","RANGE_REG_REAR_DURATION","RANGE_REG_FRONT_DURATION","DurationTextFormats","createDateRangeFromString","DateRangeConstructor","setOption","getOption","yearsUntil","yearsSince","yearsFromNow","yearsAgo","weeksUntil","weeksSince","weeksFromNow","weeksAgo","setISOWeek","defineInstanceWithArguments","secondsUntil","secondsSince","secondsFromNow","secondsAgo","rewind","getUnitIndexForParamName","relativeTo","u","relativeFn","monthsUntil","monthsSince","monthsFromNow","monthsAgo","minutesUntil","minutesSince","minutesFromNow","minutesAgo","millisecondsUntil","millisecondsSince","millisecondsFromNow","millisecondsAgo","isYesterday","isWeekend","isWeekday","isWednesday","isUTC","isTuesday","isTomorrow","isToday","isThursday","isThisYear","isThisWeek","isThisMonth","isSunday","isSaturday","isPast","isNextYear","isNextWeek","isNextMonth","isMonday","isLeapYear","isLastYear","isLastWeek","isLastMonth","isFuture","special","together","isFriday","isBetween","t1","t2","lo","hi","isBefore","isAfter","comp","is","hoursUntil","hoursSince","hoursFromNow","hoursAgo","getUTCWeekday","getUTCDay","getISOWeek","createDateWithContext","INTERNAL_MEMOIZE_LIMIT","memoizeFunction","memo","counter","STRING_FORMAT_REG","CommonChars","createFormatMatcher","bracketMatcher","percentMatcher","precheck","compileMemoized","compile","lastIndex","exec","getSubstring","getToken","token","literal","bKey","pLit","pKey","assertPassesPrecheck","bt","pt","getLiteral","sub","assertNoUnmatched","getMeridiemToken","getDaysSince","getWeekYear","week","getFirstDayOfWeekYear","TIMEZONE_ABBREVIATION_REG","FormatTokensBase","ldml","strf","lowerToken","getWeekdayName","allowAlternates","alternate","getMonthName","strfPadding","ldmlPaddedToken","ordinalToken","doy","ldmlTwoDigitToken","strfTwoDigitToken","ldmlTokens","strfTokens","buildDateFormatTokens","addFormats","buildLowercase","buildPadded","padding","buildTwoDigits","buildAlias","buildAlternate","getIdentityFormat","getPadded","buildOrdinal","getOrdinal","buildAlternates","buildDateFormatMatcher","getLdml","getStrf","checkDateToken","endOfYear","endOfWeek","endOfMonth","endOfISOWeek","endOfDay","daysUntil","daysSince","daysInMonth","daysFromNow","daysAgo","beginningOfYear","beginningOfWeek","beginningOfMonth","beginningOfISOWeek","beginningOfDay","addYears","addWeeks","addSeconds","addMonths","addMinutes","addMilliseconds","addHours","caps","addDays","yearsBefore","yearsAfter","years","yearFromNow","yearBefore","yearAgo","yearAfter","weeksBefore","weeksAfter","weeks","weekFromNow","weekBefore","weekAgo","weekAfter","secondsBefore","secondsAfter","seconds","secondFromNow","secondBefore","secondAgo","secondAfter","monthsBefore","monthsAfter","monthFromNow","monthBefore","monthAgo","monthAfter","minutesBefore","minutesAfter","minutes","minuteFromNow","minuteBefore","minuteAgo","minuteAfter","millisecondsBefore","millisecondsAfter","milliseconds","millisecondFromNow","millisecondBefore","millisecondAgo","millisecondAfter","hoursBefore","hoursAfter","hourFromNow","hourBefore","hourAgo","hourAfter","getDuration","daysBefore","daysAfter","days","dayFromNow","dayBefore","dayAgo","dayAfter","defineInstanceAndStatic","removeLocale","getAllLocales","getKeys","getAllLocaleCodes","setChainableConstructor","createFn","setDateChainableConstructor","delta","defineAccessor","namespace","defaults","defaultNewDate","newDateInternal","LocalizedParsingTokens","getParsingTokenWithSuffix","suffix","getAdjustedUnitForNumber","fullWidthNumberReg","fullWidthNumbers","fwp","escapeRegExp","arrayToRegAlternates","joined","join","PRIVATE_PROP_PREFIX","getArrayWithOffset","getOrdinalSuffix","commaSplit","localeCheck","yyyy","yy","ayy","MM","dd","hh","mm","ss","iyyyy","ihh","imm","GMT","Z","LOCALE_ARRAY_FIELDS","CoreParsingTokens","CoreParsingFormats","fullwidthNumberHelpers","Locale","monthSuffix","parseNumber","numeralMap","parseRegularNumerals","parseIrregularNumerals","lastWasPlace","isPlace","numeral","convertAdjustedToFormat","getTokenSrc","parsingAliases","formatToSrc","parsingTokens","parseInputFormat","addRawFormat","buildValueArray","setMap","forAllAlternates","forEachAlternate","alt","suffixes","addFormatSet","allowTime","timeFront","getFormatWithTime","baseFormat","timeBefore","getTimeBefore","getTimeAfter","localized","markers","initFormats","initDefinition","initArrayFields","buildNumerals","buildTimeFormats","getTimeFormat","standalone","sep","getTimeSeparatorSrc","buildParsingTokens","getCoreTokensForBase","getNumeralSrc","buildTimeSuffixes","buildModifiers","mapKey","addCoreFormats","df","addLocaleFormats","CanadianEnglishDefinition","BritishEnglishDefinition","en-US","en-GB","en-AU","en-CA"],"mappings":"CAAA,SAAAA,iCAAAC,EAAAC,GACA,oBAAAC,SAAA,iBAAAC,OACAA,OAAAD,QAAAD,SACA,sBAAAG,eAAAC,IACAD,OAAA,GAAAH,OACA,CACA,IAAAK,EAAAL,IACA,QAAAM,KAAAD,GAAA,iBAAAJ,gBAAAF,GAAAO,GAAAD,EAAAC,IAPA,CASCC,OAAA,WACD,mBCTA,SAAAC,qBAAAC,GAOA,IANA,IAKAC,EAAAC,EALAC,EAAAH,EAAA,GACAI,EAAAJ,EAAA,GAIAH,EAAA,EAAAQ,EAAA,GACQR,EAAAM,EAAAG,OAAoBT,IAC5BK,EAAAC,EAAAN,GACAU,EAAAL,IACAG,EAAAG,KAAAD,EAAAL,GAAA,IAEAK,EAAAL,GAAA,EAEA,IAAAD,KAAAG,EACAK,OAAAC,UAAAC,eAAAC,KAAAR,EAAAH,KACAY,EAAAZ,GAAAG,EAAAH,IAIA,IADAa,KAAAd,GACAK,EAAAC,QACAD,EAAAU,OAAAV,GAOA,IAAAW,EAAA,GAGAT,EAAA,CACAU,EAAA,GAMA,SAAAC,oBAAAjB,GAGA,GAAAe,EAAAf,GACA,OAAAe,EAAAf,GAAAT,QAGA,IAAAC,EAAAuB,EAAAf,GAAA,CACAJ,EAAAI,EACAkB,GAAA,EACA3B,QAAA,IAUA,OANAqB,EAAAZ,GAAAW,KAAAnB,EAAAD,QAAAC,IAAAD,QAAA0B,qBAGAzB,EAAA0B,GAAA,EAGA1B,EAAAD,QAKA0B,oBAAAE,EAAA,SAAAC,cAAAnB,GACA,IAAAoB,EAAA,GAKAC,EAAAhB,EAAAL,GACA,OAAAqB,EAGA,GAAAA,EACAD,EAAAd,KAAAe,EAAA,QACK,CAEL,IAAAC,EAAA,IAAAC,QAAA,SAAAC,EAAAC,GACAJ,EAAAhB,EAAAL,GAAA,CAAAwB,EAAAC,KAEAL,EAAAd,KAAAe,EAAA,GAAAC,GAGA,IAAAI,EAAAC,SAAAC,qBAAA,WACAC,EAAAF,SAAAG,cAAA,UAEAD,EAAAE,QAAA,QACAF,EAAAG,QAAA,KAEAhB,oBAAAiB,IACAJ,EAAAK,aAAA,QAAAlB,oBAAAiB,IAEAJ,EAAAM,IAAAnB,oBAAAoB,EAAA,UAAqDpC,OAAA,KAA6BqC,EAAA,wBAA2BrC,GAAA,MAC7G,IAAAgC,EAAAM,WAAA,WACAC,iBAAA,CAAwBC,KAAA,UAAAC,OAAAZ,KAClB,MAEN,SAAAU,iBAAAG,GAEAb,EAAAc,QAAAd,EAAAe,OAAA,KACAC,aAAAb,GACA,IAAAc,EAAAzC,EAAAL,GACA,OAAA8C,EAAA,CACA,GAAAA,EAAA,CACA,IAAAC,EAAAL,IAAA,SAAAA,EAAAF,KAAA,UAAAE,EAAAF,MACAQ,EAAAN,KAAAD,QAAAC,EAAAD,OAAAN,IACAc,EAAA,IAAAC,MAAA,iBAAAlD,EAAA,cAAA+C,EAAA,KAAAC,EAAA,KACAC,EAAAT,KAAAO,EACAE,EAAAE,QAAAH,EACAF,EAAA,GAAAG,GAEA5C,EAAAL,QAAAoD,GAfAvB,EAAAc,QAAAd,EAAAe,OAAAL,iBAkBAb,EAAA2B,YAAAxB,GAGA,OAAAN,QAAA+B,IAAAlC,IAIAJ,oBAAAuC,EAAA5C,EAGAK,oBAAAwC,EAAA1C,EAGAE,oBAAAyC,EAAA,SAAAnE,EAAAoE,EAAAC,GACA3C,oBAAA4C,EAAAtE,EAAAoE,IACAnD,OAAAsD,eAAAvE,EAAAoE,EAAA,CACAI,cAAA,EACAC,YAAA,EACAC,IAAAL,KAMA3C,oBAAAiD,EAAA,SAAA3E,GACAiB,OAAAsD,eAAAvE,EAAA,cAAiD4E,OAAA,KAIjDlD,oBAAAmD,EAAA,SAAA5E,GACA,IAAAoE,EAAApE,KAAA6E,WACA,SAAAC,aAA2B,OAAA9E,EAAA,SAC3B,SAAA+E,mBAAiC,OAAA/E,GAEjC,OADAyB,oBAAAyC,EAAAE,EAAA,IAAAA,GACAA,GAIA3C,oBAAA4C,EAAA,SAAAW,EAAAC,GAAsD,OAAAjE,OAAAC,UAAAC,eAAAC,KAAA6D,EAAAC,IAGtDxD,oBAAAoB,EAAA,GAGApB,oBAAAyD,GAAA,SAAAC,GAA8D,MAApBC,QAAA1B,MAAAyB,GAAoBA,GAE9D,IAAAE,EAAAhF,OAAA,aAAAA,OAAA,iBACAiF,EAAAD,EAAAtE,KAAAwE,KAAAF,GACAA,EAAAtE,KAAAT,qBACA+E,IAAAG,QACA,QAAApF,EAAA,EAAgBA,EAAAiF,EAAAxE,OAAuBT,IAAAE,qBAAA+E,EAAAjF,IACvC,IAAAiB,EAAAiE,EAIA,OAAA7D,wCAAAgE,EAAA,wBC1KA,SAAAC,IAQA,WACA,aAUA,IAAAC,EAGAC,EAAA,QAOAC,EAAA,EAGAC,EAAA,EAGAC,KAAA/E,OAAAsD,iBAAAtD,OAAAgF,kBAEAC,EAqBA,SAAAC,YAGA,OAAAC,gBAAA,IAAAT,OACAS,WAAA,oBAAA9F,gBAzBA6F,GAGAE,GAAA,EAGAC,EAAA,GAGAC,EAAA,GAIAhC,EAAAyB,EAAA/E,OAAAsD,eAiyBA,SAAAiC,mBAAAC,EAAAC,EAAAC,GACAF,EAAAC,GAAAC,EAAA/B,OA/xBAgC,EAAAC,qBAAA,aAYA,SAAAT,WAAAK,GAGA,OAAAA,KAAAxF,gBAAAwF,EAAA,KA2DA,SAAAK,gBAAA1C,GAGA,IAAA2C,EAAA,WAAA3C,EAGA4C,EAAAH,qBAAAzC,GA6JA,SAAA6C,wBAAAC,EAAAC,EAAAC,GACAC,YAAAL,EAAAE,EAAA,SAAAI,EAAAC,EAAAC,GACA,IAAAC,EAAAC,qBAAAJ,EAAAC,EAAAC,GAEA,OAkRA,SAAAG,cAAAX,EAAAY,EAAA1E,EAAAkE,EAAAS,GACAC,EAAAF,EAAA,SAAAG,EAAAb,GACA,IAAAc,EAAAC,EAAAF,EACAX,IACAa,EAAAC,wBAAAH,IAEAF,IACAI,EAAAJ,SAKA3E,EAAA6C,IAAAgC,EAAAZ,WACAa,EAkCA,SAAAG,mBAAAC,EAAAhB,GACA,OAAAA,EAAAc,wBAAAE,GAAA,GA6BA,SAAAC,wBAAAD,GACA,OAAAA,EAAAtH,QAIA,OACA,OACA,kBACA,OAAAsH,EAAAE,OAEA,OACA,gBAAAlI,GACA,OAAAgI,EAAAE,KAAAlI,IAEA,OACA,gBAAAA,EAAAmI,GACA,OAAAH,EAAAE,KAAAlI,EAAAmI,IAEA,OACA,gBAAAnI,EAAAmI,EAAArE,GACA,OAAAkE,EAAAE,KAAAlI,EAAAmI,EAAArE,IAEA,OACA,gBAAA9D,EAAAmI,EAAArE,EAAAC,GACA,OAAAiE,EAAAE,KAAAlI,EAAAmI,EAAArE,EAAAC,KArDAkE,CAAAD,GAnCAD,CAAAJ,EAAAX,GACAC,YAAAY,EAAA,WAAAD,IAGA9E,EAAA4C,GACAuB,YAAAY,EAAA,aAGAO,UAAAxB,EAAAE,EAAAe,GAEAjB,EAAAyB,QAGAzB,EAAA0B,OAAAxB,KA7SAS,CAAAX,EAAAS,EAAAG,QAAAT,EAAAC,EAAAK,EAAAkB,MACA3B,IAuPA,OA3NAC,wBAAA,eAAAnB,GAkCAmB,wBAAA,iBAAAlB,GAwBAkB,wBAAA,0BAAAlB,EAAAD,GA8BAmB,wBAAA,4BAAAnB,GAAA,GA6BAmB,wBAAA,8BAAAlB,GAAA,GA2BAsB,YAAAL,EAAA,gCAAAM,EAAAC,EAAAC,GACA,IAAAC,EAAAC,qBAAAJ,EAAAC,EAAAC,GAEA,OADAoB,aAAA1C,EAAA9B,GAAAqD,EAAAG,SAAA,EAAAH,EAAAkB,MACA3B,IA8BAK,YAAAL,EAAA,kCAAAM,EAAAC,EAAAC,GACA,IAAAC,EAAAC,qBAAAJ,EAAAC,EAAAC,GAMA,OALAoB,aAAA1C,EAAA9B,GAAAlD,UAAAuG,EAAAG,SAAA,EAAAH,EAAAkB,MAEAb,EAAAL,EAAAG,QAAA,SAAAQ,EAAAlB,GACA2B,sBAAA7B,EAAAE,EAAAkB,KAEApB,IAiBAK,YAAAL,EAAA,iBAAA5C,EAAA0E,GACA,IAAAf,EAAA,iBAAAe,EAAA9B,EAAA8B,KAEA,OADAN,UAAAxB,EAAA5C,EAAA2D,GACAf,IAIAK,YAAAL,EAAA,SAlVA,SAAAS,GAEA,IACkDsB,EADlDC,EAAA9C,EAAA9B,GAAA6E,EAAAD,EAAA9H,UACAgI,EAAA,GAA4BC,EAAA,GAO5B,SAAAC,kBAAAC,EAAAC,GACA,IAAAC,EAAA9B,EAAA4B,GACA,GAAAE,EACA,QAAAC,EAAAnJ,EAAA,EAA6BmJ,EAAAD,EAAAlJ,GAAaA,IAC1C,GAAAmJ,IAAAF,EACA,SAIA,SA+BA,SAAAG,UAAAvC,EAAAa,EAAA5E,GACA,OA9CA,SAAAuG,iBAAAtF,EAAAjB,GACA,OAAA4D,GAAA5D,IAAA8F,KACA5C,GAAA,QAAAjC,GAAA,QAAAA,GA4CAsF,CAAAxC,EAAA/D,KAzBA,SAAAwG,kBAAAzC,EAAA/D,EAAA0E,GAKA,IAAA1E,EAAA+D,KAAAW,EACA,SAEA,QAAAxH,EAAA,EAAuBA,EAAAwH,EAAA/G,OAAkBT,IACzC,QAAAoH,EAAAI,EAAAxH,IACA,SAgBAsJ,CAAAzC,EAAA/D,EAAA4E,EAAAF,SANA,SAAA+B,iBAAA1C,GACA,OAAAkC,kBAAA,SAAAlC,GAMA0C,CAAA1C,GAMA,GAFA6B,GADAtB,KAAA,IACAG,SAhBA,SAAAiC,sBACA,OAAAT,kBAAA,SAAAJ,IApBA,SAAAc,oBAAAT,EAAAC,GACA,OAAA7B,EAAA4B,KAAAD,kBAAAC,EAAAC,GAoBAQ,CAAA,aAAAd,GAgBAa,GAoCA,OAlCO9C,GAAA,kBAAAU,EAAAsC,kBAEP1D,EAAAoB,EAAAsC,iBAGAjC,EAAAiB,GAAA/B,EAAA,SAAAe,EAAAb,GACA6B,IAKAhB,EAAAf,EADAE,EAAAa,IAGAiC,OAAAjC,EAAA,aAAA0B,UAAAvC,EAAAa,EAAAkB,KACAE,EAAAjC,GAAAa,EAAAZ,UAEA6C,OAAAjC,EAAA,WAAA0B,UAAAvC,EAAAa,EAAAiB,KACAE,EAAAhC,GAAAa,KAOAa,aAAAI,EAAAE,GACAN,aAAAK,EAAAE,GAEAJ,GAKA1B,YAAAL,EAAA,aAEAA,IAsPAV,EAAAlC,GAAA4C,EACAT,EAAA,WAAAnC,EAAA,KAAA4C,EAEAiD,qBAAA7F,GAoNA,SAAA8F,+BAAAlD,GACAc,EAAAlC,EAAA3E,QAAA2E,EAAA3E,OAAAC,UAAA,SAAAoI,EAAApC,GACA,mBAAAoC,GACAa,8BAAAnD,EAAAE,EAAAoC,KAtNAY,CAAAlD,GAIApB,EAAAxB,GAAA4C,EAoBA,SAAAoD,WACA,OAAAvE,EAqCA,SAAA6B,qBAAAJ,EAAAC,EAAAC,GACA,IAAAI,EASA,OACAe,KATA,iBAAArB,IACAM,EAAA,IACAN,GAAAC,EACAC,IAEAI,EAAAN,EACAC,GAIAK,WAQA,SAAAM,wBAAAE,EAAAjB,GAMA,IAAAkD,EAAAjC,EAAAtH,OAAA,GAAAqG,EAAA,KACA,kBACA,IAAAmD,EAAAlD,EAAA,GAAAmD,EAAA,GACApD,GACAC,EAAApG,KAAAsH,MAEAgC,EAAAE,KAAAC,IAAAC,UAAA5J,OAAAuJ,GAEA,QAAAhK,EAAA,EAAqBA,EAAAiK,EAASjK,IAC9BA,EAAAgK,EACAjD,EAAApG,KAAA0J,UAAArK,IAEAkK,EAAAvJ,KAAA0J,UAAArK,IAIA,OADA+G,EAAApG,KAAAuJ,GACAnC,EAAAuC,MAAArC,KAAAlB,IAmCA,SAAAwB,aAAAzF,EAAA2F,EAAA8B,EAAAC,GACA/C,EAAAgB,EAAA,SAAAf,EAAA3D,GACAwG,IAAAC,GAAA1H,EAAAiB,IAIAiD,YAAAlE,EAAAiB,EAAA2D,KAIA,SAAAS,UAAAxB,EAAAE,EAAAa,IACAf,EAAAE,GAAAa,GACAZ,UACA0B,sBAAA7B,EAAAE,EAAAa,EAAAZ,UAOA,SAAAN,qBAAAzC,GACA,IAAAgE,EAAA,SAAA0C,eAAArE,EAAAsE,GACA,KAAAzC,gBAAAF,GACA,WAAAA,EAAA3B,EAAAsE,GAEAzC,KAAA0C,cAAA5C,IAEA3B,EAAA6B,KAAA0C,YAAAL,MAAAlE,EAAAiE,YAEApC,KAAA2C,IAAAxE,GAQA,OANAY,YAAAe,EAAA,sBACA,OAAAvC,EAAAzB,IAEAiD,YAAAe,EAAAlH,UAAA,qBACA,OAAAoH,KAAA2C,MAEA7C,EAGA,SAAAS,sBAAA7B,EAAAE,EAAAkB,GACA,IAAA8C,EAAAC,EAAAC,EAAAC,EAoDA,SAAAC,wBAAAlD,GACA,kBACA,WAAAxB,EAAAwB,EAAAuC,MAAArC,KAAA2C,IAAAP,aAtDAY,CAAAlD,GAQA+C,GANAD,GADAE,EAAAxE,EAAA1F,WACAgG,KAMAgE,IAAAjK,OAAAC,UAAAgG,GAGAgE,KAAAK,eACAH,EAAAlE,GAAAiE,EA8CA,SAAAK,mBAAAtE,GACA,IAAAkB,EAAA,WACA,IAAApB,EAAAiE,EAAA3C,KAAA2C,IAaA,OAZA,MAAAA,IAEAjE,EAAAT,EAAAkF,cAAAR,KAEAjE,IAKAA,EAAApB,EAAA3E,QAGA,IAAA+F,EAAAiE,GAAA/D,GAAAyD,MAAArC,KAAAoC,YAGA,OADAtC,EAAAmD,cAAA,EACAnD,EAhEAoD,CAAAtE,GAAAmE,GAaArE,EAAA9F,UAAAgG,GAAAmE,EACArE,IAAApB,EAAA3E,QAaA,SAAAyK,kCAAAxE,EAAAkB,GACAN,EAAAxB,EAAA,SAAAU,GACAmD,8BAAAnD,EAAAE,EAAAkB,KAdAsD,CAAAxE,EAAAmE,GAkBA,SAAAlB,8BAAAnD,EAAAE,EAAAkB,GACA,IAAAuD,EAAA3E,EAAA9F,UACA8I,OAAA2B,EAAAzE,KACAyE,EAAAzE,GAAAkB,GA+BA,SAAA6B,qBAAA7F,EAAAwH,GACA,IAAA5E,EAAAV,EAAAlC,GACA6E,EAAA/C,EAAA9B,GAAAlD,WAEA0K,GAAAC,IACAD,EAAAC,EAAA5C,IAGAnB,EAAA8D,EAAA,SAAA1E,GACA,IAsBA,SAAA4E,uBAAA5E,GACA,sBAAAA,GACA,YAAAA,GACA,cAAAA,EAzBA4E,CAAA5E,GAAA,CAOA,IACA,IAAAkB,EAAAa,EAAA/B,GACA,sBAAAkB,EAEA,OAEO,MAAAxG,GAGP,OAEAiH,sBAAA7B,EAAAE,EAAAkB,MAcA,IAAAyD,EAAA5K,OAAA8K,oBACAC,EAAA/K,OAAAC,UAAAkJ,SACA6B,EAAAhL,OAAAC,UAAAC,eAIA2G,EAAA,SAAArB,EAAA2B,GACA,QAAA8D,KAAAzF,EACA,GAAAuD,OAAAvD,EAAAyF,KACA,IAAA9D,EAAAhH,KAAAqF,IAAAyF,KAAAzF,GAAA,OASA,SAAAY,YAAAlE,EAAAiB,EAAAQ,EAAAH,GACAF,EAAApB,EAAAiB,EAAA,CACAQ,QACAH,eACAD,cAAA,EACA2H,UAAA,IAQA,SAAAV,cAAAhF,GACA,OAAAuF,EAAA5K,KAAAqF,GAGA,SAAAuD,OAAAvD,EAAAC,GACA,QAAAD,GAAAwF,EAAA7K,KAAAqF,EAAAC,GAGA,SAAA0F,OAAA3F,EAAAC,GACA,GAAAsD,OAAAvD,EAAAC,GACA,OAAAD,EAAAC,IAvyBA,SAAA2F,cAGA,KAFAzG,EAAAM,EAAAL,IAEA,CAiBA,GAbAD,EAAA,SAAAmF,GAUA,OATAjD,EAAAlC,EAAA,SAAAoB,EAAA5C,GAKA4F,OAAA1D,EAAAlC,IACA4C,EAAA0B,OAAAqC,KAGAnF,QAGA,IAAA3F,KAAAD,QAEAC,EAAAD,QAAA4F,OAGA,IACAM,EAAAL,GAAAD,EACO,MAAAhE,IAIPkG,EA5EA,kDA4EAwE,MAAA,cAAAlI,GACA0C,gBAAA1C,KAybA,SAAAmI,sBACAlF,YAAAzB,EAAA,mBACAyB,YAAAzB,EAAA,SAAAA,GACAyB,YAAAzB,EAAA,WAAAwE,UACA/C,YAAAzB,EAAA,kBAAAkB,iBAEAO,YAAAzB,EAAA,QACAoE,cACAoC,cACA/E,wBACAoE,4BACAlH,iBACAuD,kBACAmC,4CApcAsC,IAywBAF,GAQA,IAwCAG,EACAC,EACAC,EApCAC,IAAA,MAAA1L,OAAA,MASA2L,EAAA,iDAQAC,EAAA,IAEAC,EAAA,IAKAC,EAAAnH,EAAA3E,OACA+L,EAAApH,EAAAqH,MACAC,EAAAtH,EAAAuH,KACAC,EAAAxH,EAAAyH,OAEAC,GADA1H,EAAA2H,OACA3H,EAAA4H,UACA5H,EAAA6H,OAsHA,SAAAC,QAAAjH,EAAAkH,EAAAC,GAIA,OAHAA,IACAA,EAAAnC,cAAAhF,IAEAmH,IAAA,WAAAD,EAAA,IAKA,SAAAE,cAAA9F,GACA,gBAAAf,EAAAM,EAAAC,GACAP,EAAAe,GAAAT,EAAAC,IAKAsG,cAAA,SACAA,cAAA,gBACAA,cAAA,kBAFA,IAGAC,EAAAD,cAAA,wBACAE,EAAAF,cAAA,0BACAA,cAAA,2BACAA,cAAA,+BAyFA,SAAAG,eAAAvH,GACA,IAAAgG,EAAAhG,GACA,UAAAwH,UAAA,4BAiCA,SAAAC,UAAA5J,GACA,YAAAR,IAAAQ,EAsQA,SAAA6J,aAAA1H,EAAAvD,GACA,QAAAuD,GAAA,YAAAvD,UAAAuD,GAGA,SAAA2H,YAAA3H,EAAAvD,GAEA,OADAA,YAAAuD,EACA,MAAAA,GAAA,WAAAvD,GAAA,WAAAA,GAAA,YAAAA,EAGA,SAAAmL,cAAA5H,EAAAkH,GACA,OAAAQ,aAAA1H,IACAiH,QAAAjH,EAAA,SAAAkH,IAKA,SAAAW,6BAAA7H,GACA,IAAA8H,EAAA,aAAA9H,EACA+H,EAAA,gBAAA/H,EASA,OAAA+H,IAAAD,GACAC,IAAAxE,OAAAvD,EAAA,gBACAuD,OAAAvD,EAAAuE,YAAA9J,UAAA,iBAjBAoN,CAAA7H,IAoBA,SAAAgI,2BAAAhI,GAKA,IAAAiI,EAAAzN,OAAAC,UACA,QAAAgL,KAAAzF,EAAA,CACA,IAAA6C,EAAA7C,EAAAyF,GACA,IAAAlC,OAAAvD,EAAAyF,IAAA5C,IAAAoF,EAAAxC,GACA,SAGA,SA/BAuC,CAAAhI,GAgOA,SAAAkI,aAAA9J,GACA,OAAAA,IAAA,GAAAA,GAAA,YAAAA,EAGA,SAAA+J,uBAAArF,EAAAnB,EAAAyG,EAAAC,GAEA,IADA,IAAAC,EAAAC,EAAAC,sBAAA1F,EAAAsF,EAAAC,GACAzO,EAAA,EAAAiK,EAAA0E,EAAAlO,OAAyCT,EAAAiK,EAASjK,IAClD0O,EAAAC,EAAA3O,GACA+H,EAAAhH,KAAAmI,IAAAwF,KAAAxF,GAEA,OAAAA,EAMA,SAAA0F,sBAAA1F,EAAAsF,EAAAC,EAAAI,GACA,IAAA7O,EAAA2O,EAAA,GACA,IAAA3O,KAAAkJ,EAEAoF,aAAAtO,KAAAyO,IAAAI,EAAA7O,GAAAwO,KAAAxO,KACA2O,EAAAhO,MAAAX,GAaA,OAVA2O,EAAAG,KAAA,SAAA/O,EAAAmI,GACA,IAAA6G,EAAAP,EAAAzO,EAIA,OAAAgP,IAHAP,EAAAtG,EAIA6G,GAAA,IAEAhP,EAAAmI,IAEAyG,EA4CA,SAAAK,WAAAzB,GACA,OAAAA,EAAAtB,MAAA,KAWA,SAAAgD,QAAA/F,EAAAnB,GACA,QAAA/H,EAAA,EAAAiK,EAAAf,EAAAzI,OAAqCT,EAAAiK,EAASjK,IAAA,CAC9C,KAAAA,KAAAkJ,GACA,OAAAqF,uBAAArF,EAAAnB,EAAA/H,GAEA+H,EAAAmB,EAAAlJ,OAoCA,IAwCAkP,EAxCAC,EAAAhF,KAAAgF,OAAA,SAAA3K,GACA,WAAAA,GAAA4K,SAAA5K,GACAA,EAAA,EAAA6K,EAAA7K,GAAA8K,EAAA9K,GADAA,GAgBA,SAAA+K,UAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GACA,IAAArC,EAAAsC,EAAAL,GAAAzF,SAAA4F,GAAA,IAKA,OAJApC,EAuEA,SAAAuC,aAAAvC,EAAAiC,GACA,IAAAO,EAAA,GACAxC,IAAAxD,WACA,OAAAyF,GACA,EAAAA,IACAO,GAAAxC,IAEAiC,IAAA,KACAjC,MAGA,OAAAwC,EAlFAD,CAAAF,GAAA,IAAAH,EAAAlC,EAAAyC,QAAA,YAAAvP,QAAA8M,GACAmC,GAAAF,EAAA,KACAjC,GAAAiC,EAAA,WAAAjC,GAEAA,EAkDA,IAAAsC,EAAA1F,KAAA0F,IAIAR,GAHAlF,KAAA8F,IACA9F,KAAA+F,IACA/F,KAAAC,IACAD,KAAAkF,MACAC,EAAAnF,KAAAmF,MAMAa,GALAhG,KAAAiG,MAKApD,OAAAqD,eAnsBA,SAAAC,wBAAAzE,GACA,IAAA0E,EA5SA,UA4SA1E,EACA,gBAAAzF,EAAA6C,GACA,SAAAoB,UAAA5J,QACAuG,YAAAZ,EAAAmK,EAAAtH,GACA7C,GAEAA,EAAAmK,KAm1BAD,CAAA,QAlmCA,SAAAE,mBAEA,IAAAC,EAAA,GAkDA,SAAAC,aAAApD,GAEAmD,EADA,WAAAnD,EAAA,MACA,EAOA,SAAAqD,gBAAArD,EAAAsD,GAEA,OAAAA,GAAAvD,QAAA,IAAAuD,EAAA,UAWA,SAAAC,yBAAAzK,GACA,IAAA0K,EAAA9D,OAAA5G,GACA,gBAAAA,GACA,OAAA4G,OAAA5G,EAAAuE,eAAAmG,GAbAD,CAAAD,GAiBA,SAAAG,sBAAAzD,GACA,gBAAAlH,EAAAmH,GAEA,OAAAF,QAAAjH,EAAAkH,EAAAC,IAlBAwD,CAAAzD,GAsBA,SAAA0D,yBAAA1D,GACA,IAAAzK,EAAAyK,EAAA2D,cACA,gBAAA7K,GACA,IAAA8K,SAAA9K,EACA,OAAA8K,IAAArO,GAAA,WAAAqO,GAAA7D,QAAAjH,EAAAkH,KAxFA,SAAA6D,eAEA,IAAAC,EAAApC,WA/CA,kEAiDAgC,yBAAAI,EAAA,IACAJ,yBAAAI,EAAA,IACAjF,EAAA6E,yBAAAI,EAAA,IAEAT,gBAAAS,EAAA,IACAT,gBAAAS,EAAA,IAWAhF,EAAAuE,gBAAAS,EAAA,IAGA/E,EAAAO,MAAAP,SAAAsE,gBAAAS,EAAA,IACAT,gBAAAS,EAAA,IAEAT,gBAAAS,EAAA,uBAAAC,UACAV,gBAAAS,EAAA,uBAAAE,UAIAZ,aAAA,aACAA,aAAAU,EAAA,IACAV,aAAAU,EAAA,IACAV,aAAAU,EAAA,IACAV,aAAAU,EAAA,IACAV,aAAAU,EAAA,IACAV,aAAAU,EAAA,IAuDAD,GAnDA,SAAAI,gBAEAtC,QAAAD,WADA,qEACA,SAAAzB,GACAmD,aAAAnD,EAAA,WAiDAgE,GAEA,SAAAnL,EAAAkH,GAMA,OAhDA,SAAAkE,YAAAlE,GACA,OAAAmD,EAAAnD,GA+CAkE,CAAAlE,IAAAU,cAAA5H,EAAAkH,IAujCAkD,GA/PA,SAAAiB,uBACA,IAAAC,EAAAlF,EAAAmF,EAAAlF,EAAAmF,EAAA,GACA1C,EAAA,GACA,QAAA2C,EAAA7R,EAAA,EAA0BA,GAAA,EAAQA,IAElC4R,GADAC,EAAA1B,EAAAnQ,EA37BA,OA67BAkP,EAAA2C,GAAA1B,EAAAnQ,EA97BA,IAg8BAkP,EAAAyC,GAAA,GACAzC,EA97BA,KA87BAwC,EAGAxC,EAAAwC,KA2JA,SAAAI,YAAAtP,GACA,OAAA4K,OAAA,IAAA5K,EAAA,SA3JAsP,CAAAF,EAl8BA,IAk8BAD,EAAAD,GACAE,EAkPAH,GAYA,IAAAM,EAAA,CACA,UACA,WACA,cACA,gBACA,iBACA,iBACA,wBAkGA,SAAAC,aAAA9I,EAAA+I,EAAAzD,EAAAK,GACA,IAAAqD,EAAAxD,EAAAyD,EAAA1R,EAAAyI,EAAAzI,OAiBA,IAfA0R,EAAAtD,GAAA,IACAqD,EAAArD,EAAApO,EAAA,KACA+N,EAAAW,EAAAX,KACA,IAAAA,IACAA,EAAA0D,GAEA1D,EAAA,IACAA,EAAA/N,EAAA+N,KAEAK,GAAAL,EAAA,GAAAK,GAAApO,GAAA+N,KACAA,EAAA0D,GAGAxD,EAAAF,EAEAK,GAAA,GAAAH,IAAAG,GAAAH,EAAAjO,GAAA,CACA,KAAAiO,KAAAxF,GACA,OAAAkJ,cAAAlJ,EAAA+I,EAAAzD,EAAAK,GAEA,GAAAP,aAAAI,IAAAxF,EAAAwF,KAAAuD,EACA,OAAAvD,EAEAA,GAAAyD,EAEA,SAGA,SAAAC,cAAAlJ,EAAA+I,EAAAzD,EAAAK,GACA,IAAAH,EAAAC,EAAAC,sBAAA1F,EAAAsF,GAAA,EAAAK,GAIA,IAHAF,EAAAG,KAAA,SAAA/O,EAAAmI,GACA,OAAA2G,EAAA3G,EAAAnI,IAAAmI,SAEAzE,KAAAiL,EAAAC,EAAAzN,UACA,GAAAgI,EAAAwF,KAAAuD,EACA,OAAAvD,EAGA,SAGA,SAAA2D,YAAAnJ,EAAAnB,EAAAuK,EAAAzD,GACA,IAAAkB,EAAArB,EAAAjO,EAAAyI,EAAAzI,OAAA8R,EAAA,EAAAC,EAAA3E,UAAAyE,GAEA,GADA3E,eAAA5F,GACA,GAAAtH,IAAA+R,EACA,UAAA5E,UAAA,sDAOA,IANK4E,EACLzC,EAAAuC,GAEAvC,EAAA7G,EAAA2F,EAAApO,EAAA,EAAA8R,GACAA,KAEAA,EAAA9R,IACAiO,EAAAG,EAAApO,EAAA8R,EAAA,EAAAA,KACArJ,IACA6G,EAAAhI,EAAAgI,EAAA7G,EAAAwF,KAAAxF,IAEAqJ,IAEA,OAAAxC,GAxJA,SAAA0C,mBACA,KAAW1I,SAAA,GAAW2I,qBAAA,aACtB,IAAAC,EAAAlL,EACAA,EAAA,SAAArB,EAAA2B,GACA4K,EAAAvM,EAAA2B,GACA,QAAA8D,EAAA7L,EAAA,GAA4B6L,EAAAkG,EAAA/R,OAC5B2J,OAAAvD,EAAAyF,KACA,IAAA9D,EAAAhH,KAAAqF,IAAAyF,KAAAzF,IAFsDpG,QA0DtDyS,GA7CA,SAAAG,iCACAhS,OAAA8K,qBASA,SAAAmH,iCAEA,IAUAC,EAAA,yDAAA7G,MAAA,KAEA,SAAA8G,cAAAC,EAAA9J,GACA,QAAAlJ,EAAA,EAAqBA,EAAA8S,EAAArS,OAAuBT,IAC5CkJ,EAAAvI,KAAAqS,EAAAF,EAAA9S,IAIAyH,EAlBA,CACA0F,SAAA,aACAC,OAAA,oBACAF,OAAA,mDACAtM,OAAA,mEACAgM,MAAA,8EACAE,KAAA,2IACAE,OAAA,6PAWA,SAAAO,EAAAxJ,GACA,IAAAkP,EAAA1F,EAAAtB,MAAA,KACA,SAAAlI,IACAgP,cAAA,MAAAE,GACAF,cAAA,MAAAE,GACAF,cAAA,SAAAE,GACAF,cAAA,SAAAE,IAEAA,EAAAtS,KAAA,YACAiJ,qBAAA7F,EAAAkP,KArCAJ,GA4CAD,GAWAnF,EAAAf,EAAA,CAEAwG,KAAA,SAAA9M,GACA,IAAA8M,EAAA,GAKA,OAdA,SAAAC,cAAA/M,GACA,SAAAA,EACA,UAAAwH,UAAA,mBAQAuF,CAAA/M,GACAqB,EAlsBA,SAAA2L,wBAAAhN,GAQA,OAPA2H,YAAA3H,KACAA,EAAAxF,OAAAwF,IAGAkG,GAAAH,EAAA/F,IASA,SAAAiN,oBAAAjN,GAEA,IADA,IAAA+J,EAAAnQ,EAAA,EACAmQ,EAAA/J,EAAAkN,OAAAtT,IACAoG,EAAApG,KAAAmQ,EAXAkD,CAAAjN,GAEAA,EA0rBAgN,CAAAhN,GAAA,SAAA6C,EAAA4C,GACAqH,EAAAvS,KAAAkL,KAEAqH,KAwEAzF,EAAAd,EAAA,CAkBAN,QAAA,SAAAjG,GACA,OAAAiG,EAAAjG,MAKAsH,EAAAf,EAAA,CAEA4G,MAAA,SAAAxL,GAEAsC,UAAA5J,OAAA,IAAA+S,EAAAnJ,UAAA,GACA5J,EAAAwH,KAAAxH,OAAAiO,EAAA,EAEA,IADAf,eAAA5F,GACA2G,EAAAjO,GAAA,CACA,GAAAiO,KAAAzG,OAAAF,EAAAhH,KAAAyS,EAAAvL,KAAAyG,KAAAzG,MACA,SAEAyG,IAEA,UAGA+E,KAAA,SAAA1L,GAEAsC,UAAA5J,OAAA,IAAA+S,EAAAnJ,UAAA,GACA5J,EAAAwH,KAAAxH,OAAAiO,EAAA,EAEA,IADAf,eAAA5F,GACA2G,EAAAjO,GAAA,CACA,GAAAiO,KAAAzG,MAAAF,EAAAhH,KAAAyS,EAAAvL,KAAAyG,KAAAzG,MACA,SAEAyG,IAEA,UAGAgF,IAAA,SAAA3L,GAEAsC,UAAA5J,OAAA,IAAA+S,EAAAnJ,UAAA,GACA5J,EAAAwH,KAAAxH,OAAAiO,EAAA,EAAAqB,EAAA,IAAAnD,MAAAnM,GAEA,IADAkN,eAAA5F,GACA2G,EAAAjO,GACAiO,KAAAzG,OACA8H,EAAArB,GAAA3G,EAAAhH,KAAAyS,EAAAvL,KAAAyG,KAAAzG,OAEAyG,IAEA,OAAAqB,GAGA4D,OAAA,SAAA5L,GAEAsC,UAAA5J,OAAA,IAAA+S,EAAAnJ,UAAA,GACA5J,EAAAwH,KAAAxH,OAAAiO,EAAA,EAAAqB,EAAA,GAEA,IADApC,eAAA5F,GACA2G,EAAAjO,GACAiO,KAAAzG,MAAAF,EAAAhH,KAAAyS,EAAAvL,KAAAyG,KAAAzG,OACA8H,EAAApP,KAAAsH,KAAAyG,IAEAA,IAEA,OAAAqB,GAoBA6D,QAAA,SAAA3B,GAEA5H,UAAA5J,OAAA,IAAA+N,EAAAnE,UAAA,GACA,OAAA8B,EAAAlE,WAAA2L,QAAA3B,EAAAzD,GACAwD,aAAA/J,KAAAgK,EAAAzD,IAmBAqF,YAAA,SAAA5B,GAEA5H,UAAA5J,OAAA,IAAA+N,EAAAnE,UAAA,GACA,OAAA8B,EAAAlE,WAAA4L,YAAA5B,EAAAzD,GACAwD,aAAA/J,KAAAgK,EAAAzD,GAAA,IAsBAS,QAAA,SAAA6E,GAEAzJ,UAAA5J,OAAA,IAAA+S,EAAAnJ,UAAA,GACA5J,EAAAwH,KAAAxH,OAAAiO,EAAA,EAEA,IADAf,eAAAmG,GACApF,EAAAjO,GACAiO,KAAAzG,MACA6L,EAAA/S,KAAAyS,EAAAvL,KAAAyG,KAAAzG,MAEAyG,KAqCAqF,OAAA,SAAAC,GAEA3J,UAAA5J,OACA,OAAA4R,YAAApK,KAAA+L,EADA3J,UAAA,KA8BA4J,YAAA,SAAAD,GAEA3J,UAAA5J,OACA,OAAA4R,YAAApK,KAAA+L,EADA3J,UAAA,IACA,MAQA,IAAA6J,EAAA9G,OAAA,KAAAb,EAAA,OAAAA,EAAA,WAEAmB,EAAAX,EAAA,CAgBAoH,KAAA,WACA,OAAAlM,KAAA8B,WAAAiG,QAAAkE,EAAA,OAOAxG,EAAAT,EAAA,CAoBA9H,KAAA,SAAAqO,GAEyB,IAAzB,IAAAY,EAAA,GAAyBC,EAAA,EAAAC,EAAAjK,UAAA5J,OAAyC4T,EAAAC,EAAWD,IAAAD,EAAAzT,KAAA0J,UAAAgK,IAC7E,IAAAE,EAAAxM,EAAAE,KAQA,OAPA0F,eAAA1F,OACAsM,EAAA,WAEsB,IAAtB,IAAAxN,EAAA,GAAsBsN,EAAA,EAAAC,EAAAjK,UAAA5J,OAAyC4T,EAAAC,EAAWD,IAAAtN,EAAApG,KAAA0J,UAAAgK,IAC1E,OAAAtM,EAAAuC,MAAAvC,EAAAlH,WAAAoH,gBAAAF,EAAAE,KAAAuL,EAAAY,EAAAI,OAAAzN,MAEAlG,UAAAoH,KAAApH,UACA0T,KAQA9G,EAAAZ,EAAA,CAeA4H,IAAA,WACA,WAAA3H,MAAA4H,aAUAhH,EAAAb,EAAA,CAcA8H,YAAA,WACA,OAAApF,UAAAtH,KAAA2M,iBAAA,OACArF,UAAAtH,KAAA4M,cAAA,SACAtF,UAAAtH,KAAA6M,aAAA,OACAvF,UAAAtH,KAAA8M,cAAA,OACAxF,UAAAtH,KAAA+M,gBAAA,OACAzF,UAAAtH,KAAAgN,gBAAA,OACA1F,UAAAtH,KAAAiN,qBAAA,QAgBAC,OAAA,SAAAtJ,GAEAxB,UAAA5J,OACA,OAAAwH,KAAA0M,YAAA9I,MA7CA,SAAAuJ,gBACA,IAAAtR,EAAA,IAAAgJ,UAAAuI,IAAA,QACA,QAAAvR,EAAA6Q,aAAA,6BAAA7Q,EAAA6Q,cA8CGS,MAEFrU,KAAAkH,2RCtmFYqN,EACT,SADSA,aACRrM,EAAKsM,GAAN,OAAqB3U,OAAA4U,EAAA,UAAA5U,CAAUqI,GAAOA,EAAMsM,GASnCE,EACT,SADSA,YACRxM,EAAKsM,GAAN,OAAqB3U,OAAA4U,EAAA,SAAA5U,CAASqI,GAAOA,EAAMsM,GASlCG,EACT,SADSA,WACRzM,EAAKsM,GAAN,OAAqBI,MAAM1M,GAAOsM,EAAatM,GAStC2M,EACT,SADSA,YACR3M,EAAKsM,GAAN,OAAqB3U,OAAA4U,EAAA,QAAA5U,CAAQqI,GAAOA,EAAMsM,GASjCM,EACT,SADSA,WACR5M,EAAKsM,GAAN,OAAqB3U,OAAA4U,EAAA,KAAA5U,CAAKqI,GAAOA,EAAMsM,iiBC5CrCO,EAAMC,EAAA,KAAK/T,SAOJgU,EAAU,SAAVA,QAAWC,GACpB,OAAIrV,OAAAsV,EAAA,QAAAtV,CAAQqV,EAAKE,aACNvV,OAAAwV,EAAA,KAAAxV,CAAKqV,EAAKI,WAEdzV,OAAAwV,EAAA,KAAAxV,CAAKqV,EAAKE,cAQRG,EAAmB,SAAnBA,iBAAoBL,GAC7B,IAAK,IAAIjW,EAAI,EAAGA,EAAIiW,EAAKM,WAAW9V,OAAQT,IAAK,CAC7C,IAAIwE,EAAIyR,EAAKM,WAAWvW,GACxB,GAAmB,IAAfwE,EAAEgS,SACF,OAAOhS,EAAErE,OAYRsW,EAAY,SAAZA,YACT,IAAIC,EAAGrM,UAAA5J,QAAA,OAAAgD,EAAA4G,UAAA,GACP,IAAKzJ,OAAAsV,EAAA,SAAAtV,CAAS8V,GACV,OAAO,KAIX,IADA,IAAIvN,EAAK2M,EAAI3T,cAAcuU,GAClB1W,EAAI,EAAGA,EAAIqK,UAAK5J,OAAQT,IAAK,CAClC,IAAI0K,EAAW1K,EAAR,GAAAqK,UAAA5J,QAAQT,OAARyD,EAAA4G,UAAQrK,GAEXY,OAAAsV,EAAA,QAAAtV,CAAQ8J,IAAuB,IAAfA,EAAIjK,QACpB0I,EAAG5G,aAAamI,EAAI,GAAIA,EAAI,IAGpC,OAAOvB,GAQEwN,EAAY,SAAZA,UAAaV,GAAD,OAAUA,EAAKW,WAAWC,YAAYZ,IAOlDa,EAAa,SAAbA,WAAcC,GAAD,OAASjB,EAAIkB,eAAeD,IAQzCE,EAAW,SAAXA,SAAYC,EAAKC,GAC1B,OAAIvW,OAAAsV,EAAA,QAAAtV,CAAQsW,KAIRE,oBACOF,EAAIG,UAAUC,SAASH,GAE3BD,EAAI5J,UAAUiK,MAAM,IAAInK,OAAO,UAAY+J,EAAM,cAQ/CK,EAAW,SAAXA,SAAYN,EAAKC,GACtBvW,OAAAsV,EAAA,QAAAtV,CAAQsW,KAIRE,oBACAF,EAAIG,UAAUI,IAAIN,GAIA,KAAlBD,EAAI5J,UACJ4J,EAAI5J,UAAY6J,EAEVF,EAASC,EAAKC,KACpBD,EAAI5J,WAAa,IAAM6J,KASlBO,EAAc,SAAdA,YAAeR,EAAKC,GAC7B,IAAIvW,OAAAsV,EAAA,QAAAtV,CAAQsW,GAIZ,GAAIE,oBACAF,EAAIG,UAAUM,OAAOR,OADzB,CAIA,IAAIS,EAAM,IAAIxK,OAAO,UAAY+J,EAAM,UAAW,KAClDD,EAAI5J,UAAY4J,EAAI5J,UAAU0C,QAAQ4H,EAAK,MAUlCC,EAAY,SAAZA,UAAaC,EAAMvT,EAAOwT,GACnC,IACIC,IADaD,EAEbtB,EAAU,SAAU,CAAC,QAASlS,GAAQ,CAAC,WAAY,SACnDkS,EAAU,SAAU,CAAC,QAASlS,IAElC,OADAyT,EAAItU,YAAYoT,EAAWgB,IACpBE,GAWEC,EAAkB,SAAlBA,gBAAmBC,EAAIC,EAAUC,GAA8B,IAAnBC,EAAmB,EAAAhO,UAAA5J,aAAAgD,IAAA4G,UAAA,GAAAA,UAAA,GAAP,GAC7DiO,EAAK7B,EAAU,MACf8B,EAAQ9B,EAAU,QAAS,CAAC,MAAOyB,IACnCM,EAAQ/B,EAAU,QAClB,CAAC,KAAMyB,GACP,CAAC,OAAQA,GACT,CAAC,OAAQ,YACT,CAAC,QAASC,GACVE,GAOJ,OALAE,EAAM7U,YAAY8U,GAClBD,EAAM7U,YAAYoT,EAAWsB,IAC7BE,EAAG5U,YAAY6U,GACfD,EAAGC,MAAQA,EACXD,EAAGE,MAAQA,EACJF,GAQEG,EAAM,SAANA,IAAOP,GAAD,OAAQpC,EAAI4C,eAAeR,IAOjCxB,EAAM,SAANA,IAAOzS,EAAG0U,GAAJ,OAAgB1U,EAAEhC,qBAAqB0W,IAG1D,SAASvB,oBACL,OAAOtB,EAAI8C,gBAAgBvB,qYC7L/BhW,EAAAyC,EAAA+U,EAAA,4BAAAC,IAIA,IAMaC,EAAW,SAAXA,aAOAC,EACT,SADSA,MACR5S,GAAD,MAAiD,oBAAxCxF,OAAOC,UAAUkJ,SAAShJ,KAAKqF,IAO/B6S,EACT,SADSA,KACR7S,GAAD,MAAiD,sBAAxCxF,OAAOC,UAAUkJ,SAAShJ,KAAKqF,IAO/BiG,EACT,SADSA,QACRjG,GAAD,MAAiD,mBAAxCxF,OAAOC,UAAUkJ,SAAShJ,KAAKqF,IAO/B+F,EACT,SADSA,SACR/F,GAAD,MAAiD,oBAAxCxF,OAAOC,UAAUkJ,SAAShJ,KAAKqF,IAO/B8S,EACT,SADSA,SACR9S,GAAD,MAAiD,oBAAxCxF,OAAOC,UAAUkJ,SAAShJ,KAAKqF,IAO/B+S,EACT,SADSA,UACR/S,GAAD,MAAiD,qBAAxCxF,OAAOC,UAAUkJ,SAAShJ,KAAKqF,IAO/BgT,EAAU,SAAVA,QAAWhT,GAAD,YA7DL,IA6DcA,GAOnBiT,EAAS,SAATA,OAAUjT,GAAD,OAAiB,OAARA,GAOlB0S,EAAU,SAAVA,QAAW1S,GAAD,OAASgT,EAAQhT,IAAQiT,EAAOjT,IAAuB,IAAfA,EAAI3F,45BCxDtD6Y,EAAQ,QAKRC,EAAS,SAKTC,EAAW,WAKXC,EAAY,YAKZC,EAAO,OAUPC,EAAY,GAKZC,EAAU,EAKVC,EAAU,GAKVC,EAAe,GAKfC,EAAiB,GAUjBC,EAAa,KAKbC,EAAW,KAUXC,EAAS,SAMTC,EAAS,SAMTC,EAAmB,mBAMnBC,EAAO,OAMPC,EAAa,YAUbC,EAAoB,IAMpBC,EAAW,CACpBC,SAAU,CACNC,MAAOC,EAAA,SACP5W,KAAM,YAEV6W,KAAM,CACFF,MAAOG,EAAA,KACP9W,KAAM,OACN+W,SAAS,GAEbC,MAAO,CACHL,MAAOM,EAAA,MACPjX,KAAM,SAEVkX,kBAAmB,CACfP,MAAOQ,EAAA,kBACPnX,KAAM,qBAEVoX,WAAY,CACRT,MAAOU,EAAA,WACPrX,KAAM,cAEVsX,OAAQ,CACJX,MAAOY,EAAA,OACPvX,KAAM,UAEVwX,iBAAkB,CACdb,MAAOc,EAAA,iBACPzX,KAAM,mBACNc,SAAU,qBAEd4W,YAAa,CACTf,MAAOgB,EAAA,YACP3X,KAAM,cACNc,SAAU,gBAEd8W,YAAa,CACTjB,MAAOkB,EAAA,YACP7X,KAAM,eAEV8X,UAAW,CACPnB,MAAOoB,EAAA,UACP/X,KAAM,aAEVgY,YAAa,CACTrB,MAAOsB,EAAA,YACPjY,KAAM,cACNc,SAAU,YAEdoX,cAAe,CACXvB,MAAOwB,EAAA,cACPnY,KAAM,iBAEVoY,UAAW,CACPzB,MAAO0B,EAAA,UACPrY,KAAM,aAEVsY,OAAQ,CACJ3B,MAAO4B,EAAA,OACPvY,KAAM,UAEVwY,QAAS,CACL7B,MAAO8B,EAAA,QACPzY,KAAM,UACN+W,SAAS,gXC5LJ2B,EAAS,SAATA,OAAUrW,EAAKvD,EAAM6Z,EAAMC,GAChCvW,EAAIwW,iBACJxW,EAAIwW,iBAAiB/Z,EAAM6Z,EAAMC,GAE5BvW,EAAIyW,YACTzW,EAAIyW,YAAY,KAAOha,EAAM6Z,GAE7BtW,EAAI,KAAOvD,GAAQ6Z,GAadI,EAAY,SAAZA,UAAa1W,EAAKvD,EAAM6Z,EAAMC,GACnCvW,EAAI2W,oBACJ3W,EAAI2W,oBAAoBla,EAAM6Z,EAAMC,GAC7BvW,EAAI4W,YACX5W,EAAI4W,YAAY,KAAOna,EAAM6Z,GAE7BtW,EAAI,KAAOvD,GAAQ,MASdoa,EAAU,SAAVA,QAAWC,GACfA,IACDA,EAAMnH,EAAA,KAAKhT,OAEXma,EAAIC,gBACJD,EAAIC,kBAEJD,EAAIE,cAAe,GAUdC,EAAY,SAAZA,UAAaH,GACjBA,IACDA,EAAMnH,EAAA,KAAKhT,OAEXma,EAAII,eACJJ,EAAII,iBAEJJ,EAAIK,aAAc,GAUbC,EAAY,SAAZA,UAAaN,GAItB,OAHKA,IACDA,EAAMnH,EAAA,KAAKhT,OAERma,EAAIpa,QAAUoa,EAAIO,YAShBC,EAAU,SAAVA,QAAWR,GACpB,OAAOA,EAAIS,SAAWT,EAAIS,SACrBT,EAAIQ,QAAUR,EAAIQ,QAAWR,EAAIU,MAAQV,EAAIU,MAAQ,GASjDC,EAAe,SAAfA,aAAgBX,GACzB,OAA2C,KADK,EAAA7S,UAAA5J,aAAAgD,IAAA4G,UAAA,GAAAA,UAAA,GAAP,IACzBuJ,QAAQ8J,EAAQR,KAQ7B,SAAS3I,MAAMxM,EAAI+V,GACtB,IAAIC,EAAW,GAAAvJ,OAAMzM,EAAGhE,KAAT,UAIf,OAHK+Z,EAAMC,KACPD,EAAMC,GAAehW,EAAG5C,KAAK2Y,IAE1BA,EAAMC,kCCxHjB1c,EAAA,IAEA2c,iCCFA3c,EAAA,IAEA4c,wVCDO,IAAMxe,EAAwB,YAAhB,oBAAOye,KAAP,YAAAC,QAAOD,QAAqBA,KAAKA,OAASA,MAAQA,MAChD,iBAAlB,IAAO5Y,EAAP,YAAA6Y,QAAO7Y,KAAuBA,EAAOA,SAAWA,GAAUA,QAC3D7B,mQCMS0Q,EAAO,SAAPA,KAAQ2D,GACjB,OAAIA,EAAK3D,KACE2D,EAAK3D,OAET2D,EAAK9H,QAAQ,aAAc,KAQzB8I,EAAU,SAAVA,QAAWhB,GAAD,MAAyB,KAAf3D,EAAK2D,IAOzBsG,EAAS,SAATA,OAAUtG,GAGnB,OAAO9K,OAAO8K,GAAM9H,QAFR,yBACG,SAUNqO,EAAY,SAAZA,UAAavG,GACtB,OADsD,EAAAzN,UAAA5J,aAAAgD,IAAA4G,UAAA,IAAAA,UAAA,GAI/CyN,EAFIA,EAAK7G,eAcPqG,EAAW,SAAXA,SAAYgH,EAAMne,GACE,IADIoe,EACJ,EAAAlU,UAAA5J,aAAAgD,IAAA4G,UAAA,IAAAA,UAAA,GAIzBmU,EAJyB,EAAAnU,UAAA5J,aAAAgD,IAAA4G,UAAA,IAAAA,UAAA,GAIE,IAAM,KAWrC,OAf6B,EAAAA,UAAA5J,aAAAgD,IAAA4G,UAAA,IAAAA,UAAA,KAMzBiU,EAAO1d,OAAA6d,EAAA,OAAA7d,CAAiB0d,GACxBne,EAAOS,OAAA6d,EAAA,OAAA7d,CAAiBT,KAExBoe,EACS,IAAInR,OAAO,UAAYgR,EAAOE,GAAQ,UAC3CE,GAEK,IAAIpR,OAAOgR,EAAOE,GAAOE,IAExBE,KAAKve,qQCzEvB,IAAMwe,EAAkB,mBAKXC,EAAb,WAMI,SAAAA,QAAYC,EAAIC,GAAS,IAAAC,EAAA9W,kHAAA+W,CAAA/W,KAAA2W,SAKrB3W,KAAK4W,GAAKA,EAMV5W,KAAK6W,QAAUA,EAMf7W,KAAKgX,QAAUJ,EAAGC,GAMlB7W,KAAKiX,OAASL,EAAGK,SAMjBjX,KAAKkX,QAAUN,EAAGM,QAMlBlX,KAAKmX,aAAc,EAGnBnX,KAAKkX,QAAQE,GAAG,CAAC,WAAY,kBAAMN,EAAKO,YA5ChD,2GAAAC,CAAAX,QAAA,EAAA/S,IAAA,OAAAtH,MAAA,SAAAib,OAmDQ,MAAM,IAAIjc,MAAMob,KAnDxB,CAAA9S,IAAA,QAAAtH,MAAA,SAAAkb,QA0DQxX,KAAKyX,SACLzX,KAAKuX,SA3Db,CAAA3T,IAAA,UAAAtH,MAAA,SAAA+a,UAkEQ,MAAM,IAAI/b,MAAMob,KAlExB,CAAA9S,IAAA,SAAAtH,MAAA,SAAAmb,SAyEQzX,KAAKgX,SAAU,IAzEvB,CAAApT,IAAA,UAAAtH,MAAA,SAAAob,UAgFQ1X,KAAKgX,SAAU,IAhFvB,CAAApT,IAAA,YAAAtH,MAAA,SAAAqb,YAwFQ,OAAwB,IAAjB3X,KAAKgX,YAxFpBL,QAAA,iCCJAhf,EAAAD,QAAA,CACAkgB,YAAA,EACAC,UAAA,EACAC,WAAA,EACAC,YAAA,EACAC,WAAA,iCCLA,IAMAC,EACA/G,EAAAD,EAAA/M,EACAgU,EAAAC,EAAAhU,EACAC,EAAAgU,EAAAC,EAAAC,EATAC,EAAAnf,EAAA,KACA4N,EAAA5N,EAAA,IACAgM,EAAAhM,EAAA,KACA2N,EAAA3N,EAAA,IACA2M,EAAA3M,EAAA,MAOA,SAAAmP,mBAEA,IAAAC,EAAA,GAkDA,SAAAC,aAAApD,GAEAmD,EADA,WAAAnD,EAAA,MACA,EAOA,SAAAqD,gBAAArD,EAAAsD,GAEA,OAAAA,GAAAvD,EAAA,IAAAuD,EAAA,UAWA,SAAAC,yBAAAzK,GACA,IAAA0K,EAAA9D,OAAA5G,GACA,gBAAAA,GACA,OAAA4G,OAAA5G,EAAAuE,eAAAmG,GAbAD,CAAAD,GAiBA,SAAAG,sBAAAzD,GACA,gBAAAlH,EAAAmH,GAEA,OAAAF,EAAAjH,EAAAkH,EAAAC,IAlBAwD,CAAAzD,GAsBA,SAAA0D,yBAAA1D,GACA,IAAAzK,EAAAyK,EAAA2D,cACA,gBAAA7K,GACA,IAAA8K,SAAA9K,EACA,OAAA8K,IAAArO,GAAA,WAAAqO,GAAA7D,EAAAjH,EAAAkH,KAxFA,SAAA6D,eAEA,IAAAC,EAAApC,EAAAwR,GAEArH,EAAAnI,yBAAAI,EAAA,IACA8H,EAAAlI,yBAAAI,EAAA,IACAjF,EAAA6E,yBAAAI,EAAA,IAEA+O,EAAAxP,gBAAAS,EAAA,IACAgP,EAAAzP,gBAAAS,EAAA,IAWAhF,EAAAuE,gBAAAS,EAAA,IAGA/E,EAAAO,MAAAP,SAAAsE,gBAAAS,EAAA,IACAmP,EAAA5P,gBAAAS,EAAA,IAEAiP,EAAA1P,gBAAAS,EAAA,uBAAAC,UACAiP,EAAA3P,gBAAAS,EAAA,uBAAAE,UAIAZ,aAAA,aACAA,aAAAU,EAAA,IACAV,aAAAU,EAAA,IACAV,aAAAU,EAAA,IACAV,aAAAU,EAAA,IACAV,aAAAU,EAAA,IACAV,aAAAU,EAAA,IAuDAD,GAnDA,SAAAI,gBAEAtC,EAAAD,EADA,qEACA,SAAAzB,GACAmD,aAAAnD,EAAA,WAiDAgE,GAEA2O,EAAA,SAAA9Z,EAAAkH,GAMA,OAhDA,SAAAkE,YAAAlE,GACA,OAAAmD,EAAAnD,GA+CAkE,CAAAlE,IAAAU,EAAA5H,EAAAkH,IAKAkD,GAEA5Q,EAAAD,QAAA,CACAugB,iBACA/G,YACAD,WACA/M,WACAgU,SACAC,WACAhU,aACAC,UACAgU,QACAC,QACAC,yCCtIA,IAAAhb,EAAAlE,EAAA,GAGAof,EAFApf,EAAA,IAEAof,cAEAlb,EAAAuH,KAAA4T,aAAA,CAEAC,UAAA,SAAAC,EAAAC,GACA,OAAAJ,EAAAhJ,IAAAmJ,EAAAC,MAKAjhB,EAAAD,QAAA4F,EAAAuH,KAAA6T,wCCbA/gB,EAAAD,QAAA,CACAkQ,IAAA1F,KAAA0F,IACAI,IAAA9F,KAAA8F,IACAC,IAAA/F,KAAA+F,IACA9F,IAAAD,KAAAC,IACAiF,KAAAlF,KAAAkF,KACAC,MAAAnF,KAAAmF,MACAc,MAAAjG,KAAAiG,qCCPA,IAIA0Q,EAAAL,EAJAM,EAAA1f,EAAA,KACA2f,EAAA3f,EAAA,KACA4f,EAAA5f,EAAA,MAIA,SAAA6f,eAEA,SAAAC,cAAAC,GACAnZ,KAAAoZ,QAAA,GACApZ,KAAAwP,IAAA2J,GAGAD,cAAAtgB,UAAA,CAEAwD,IAAA,SAAAuc,EAAAU,GACA,IAAAF,EAAAnZ,KAAAoZ,QAAAT,GAMA,OALAQ,GAAAL,EAAAH,GACAQ,EAAAnZ,KAAAwP,IAAAmJ,EAAAG,EAAAH,KACOQ,GAAAR,IACPQ,EAAAnZ,KAAAoZ,QAAAT,EAAAxb,MAAA,OAEAgc,IAAA,IAAAE,EAAAF,EAAAnZ,KAAAsZ,SAGAC,OAAA,WACA,OAAAvZ,KAAAoZ,SAGAR,IAAA,SAAAD,GACA,IAAAQ,EAAAnZ,KAAA5D,IAAAuc,GAAA,GACA,IAAAQ,EACA,UAAAxT,UAAA,mBAAAgT,GAEA,OAAA3Y,KAAAsZ,QAAAH,GAGA3J,IAAA,SAAAmJ,EAAAa,GACAA,EAIAA,EAAAb,OAFAA,GADAa,EAAAb,GACAA,KAIA,IAAAQ,EAAAK,EAAAC,gBAAAD,EAAAR,EAAAQ,GAKA,OAJAxZ,KAAAoZ,QAAAT,GAAAQ,EACAnZ,KAAAsZ,UACAtZ,KAAAsZ,QAAAH,GAEAA,GAGAzJ,OAAA,SAAAiJ,GAIA,OAHA3Y,KAAAsZ,QAAAX,WACA3Y,KAAAsZ,QAAAtZ,KAAA5D,IAAA,cAEA4D,KAAAoZ,QAAAT,KAMAE,EAAAG,EAAAD,GACAP,EAAA,IAAAU,cAAAL,GAGAI,GAEAthB,EAAAD,QAAA,CACAmhB,UACAL,+CCtEApf,EAAA,IAEAsgB,iCCFA,IAAApc,EAAAlE,EAAA,GAEAzB,EAAAD,QAAA,CACAgK,OAAApE,EAAAqc,KAAAjY,OACAoC,OAAAxG,EAAAqc,KAAA7V,OACA/E,YAAAzB,EAAAqc,KAAA5a,YACAoE,cAAA7F,EAAAqc,KAAAxW,cACAlH,eAAAqB,EAAAqc,KAAA1d,eACAuD,gBAAAlC,EAAAqc,KAAAna,gBACAmC,qBAAArE,EAAAqc,KAAAhY,oDCTA,IAAAiY,EAAAxgB,EAAA,IAOAzB,EAAAD,QALA,SAAAmiB,MAAAC,EAAAC,GACA/Z,KAAA8Z,MAAAF,EAAAE,GACA9Z,KAAA+Z,IAAAH,EAAAG,6rCCDA,IAAMC,EAAS,CACX,uBACA,0BAISC,EAAO,OAEPC,EAAQ,QAERC,EAAS,SAQTC,EAAb,SAAAC,GAOI,SAAAD,QAAYxD,GAAI,IAAAE,+GAAAC,CAAA/W,KAAAoa,SAIZ,IAAIE,GAHJxD,EAAAyD,2BAAAva,KAAAwa,gBAAAJ,SAAAthB,KAAAkH,KAAM4W,EAAI,aAGGK,OAAO3C,SAAW,GAJnB,OAUZwC,EAAK2D,aAAe9hB,OAAA+hB,EAAA,YAAA/hB,CAAY2hB,EAAEK,oBAAqB,OAMvD7D,EAAK8D,cAAgBjiB,OAAA+hB,EAAA,YAAA/hB,CAAY2hB,EAAEO,oBAAqB,QAMxD/D,EAAKgE,cAAgBniB,OAAA+hB,EAAA,YAAA/hB,CAAY2hB,EAAES,qBAAsB,QAMzDjE,EAAKkE,cAAgBriB,OAAA+hB,EAAA,YAAA/hB,CAAY2hB,EAAEW,sBAAuB,QAM1DnE,EAAKoE,MAAQviB,OAAA+hB,EAAA,YAAA/hB,CAAY2hB,EAAEa,UAAW,MAOtCrE,EAAKsE,KAAO,KAOZtE,EAAKuE,MAAQ,KAQbvE,EAAKwE,MAAQ,KAObxE,EAAKyE,MAAQ,KAMbzE,EAAK0E,UAAY,CACbC,KAAM,KACNC,OAAQ,KACRC,MAAO,MAGX7E,EAAKI,QAAQE,GAAG4C,EACZ,SAACnD,EAAS+E,GAAV,OAAyB9E,EAAKS,KAAKqE,KAGvC9E,EAAKE,SAAU,EA/EHF,EAPpB,iQAAA+E,CAAAzB,QAA6B0B,EAAA,gHAA7BxE,CAAA8C,QAAA,EAAAxW,IAAA,OAAAtH,MAAA,SAAAib,KA8FSqE,GACD,IAAI5b,KAAKmX,cAAeyE,EAAxB,CAIA,IAAIhF,EAAK5W,KAAK4W,GAGVmF,EAAYpjB,OAAAqjB,EAAA,UAAArjB,CAAU,OAI1B,GAHAojB,EAAU1W,UAAYrF,KAAKya,aAGvBza,KAAKkb,MACLviB,OAAAqjB,EAAA,IAAArjB,CAAIqH,KAAKkb,OAAOzf,YAAYsgB,QAG3B,GAAInF,EAAG1D,WAAY,CACpB,IAAIA,EAAa0D,EAAGqF,IAAI/I,WACxBA,EAAWgJ,YAAYzgB,YAAYsgB,GACnCA,EAAU1W,UAAY6N,EAAWiJ,mBAGhC,CACD,IAAIf,EAAOziB,OAAAqjB,EAAA,UAAArjB,CAAU,WACrByiB,EAAK3f,YAAYsgB,GACjBnF,EAAGwF,MAAMC,aAAajB,EAAMxE,EAAGwF,MAAME,YAEzCtc,KAAKob,KAAOW,EAGZ/b,KAAKqb,MAAQrb,KAAKuc,gBAAgBR,EAAW/b,KAAK4a,eAGlD5a,KAAKsb,MAAQtb,KAAKuc,gBAAgBR,EAAW/b,KAAK8a,eAGlD9a,KAAKub,MAAQvb,KAAKuc,gBAAgBR,EAAW/b,KAAKgb,eAElDhb,KAAKwb,UAAY,CACbC,KAAMzb,KAAKqb,MACXK,OAAQ1b,KAAKub,MACbI,MAAO3b,KAAKsb,OAIhBtb,KAAKmX,aAAc,EAGfxe,OAAA6jB,EAAA,QAAA7jB,CAAQie,EAAGjE,QAGXiE,EAAGqF,IAAItJ,KAAK8E,SACZzX,KAAKkX,QAAQuF,KAAK,YAAa7F,OAlJ3C,CAAAhT,IAAA,YAAAtH,MAAA,SAAAyf,YA6JoC,IAAtBW,EAAsB,EAAAta,UAAA5J,aAAAgD,IAAA4G,UAAA,GAAAA,UAAA,GAAX8X,EAAOhZ,EAAI,EAAAkB,UAAA5J,OAAA4J,UAAA,QAAA5G,EACxB4f,EAAOpb,KAAKwb,UAAUkB,GAI1B,OAHIxb,GACAka,EAAK3f,YAAYyF,GAEdka,IAlKf,CAAAxX,IAAA,kBAAAtH,MAAA,SAAAigB,gBA2KoBR,EAAWY,GACvB,IAAIC,EAAMjkB,OAAAqjB,EAAA,UAAArjB,CAAU,MAAO,CAAC,QAASgkB,IAErC,OADAZ,EAAUtgB,YAAYmhB,GACfA,IA9Kf,CAAAhZ,IAAA,UAAAtH,MAAA,SAAA+a,UAqLQ,GAAKrX,KAAKmX,YAAV,CAIA,IAAIP,EAAK5W,KAAK4W,GAEdje,OAAAqjB,EAAA,UAAArjB,CAAUqH,KAAKob,MACfpb,KAAKob,KAAO,KAEZ,IAAIyB,EAAMjG,EAAGwF,MACTU,EAAWnkB,OAAAqjB,EAAA,IAAArjB,CAAIkkB,EAAK,WACxB,GAAG7V,QAAQlO,KAAKgkB,EAAU,SAAC5b,GAAD,OAAQvI,OAAAqjB,EAAA,UAAArjB,CAAUuI,KAG5ClB,KAAKmX,aAAc,OAnM3BiD,QAAA,0ECvBA,IAAA2C,EAAA3jB,EAAA,GAaa4jB,EAAM,SAANA,IAAO/b,EAAKD,EAAKic,GAE1B,IADA,IAAIC,EAAQC,QAAQF,GACXllB,EAAI,EAAGsB,EAAI4H,EAAIzI,OAAQT,EAAIsB,EAAGtB,IACnC,GAAIY,OAAAokB,EAAA,UAAApkB,CAAUsI,EAAIlJ,GAAG+J,WAAYob,KAAWlc,EACxC,OAAO,EAGf,OAAO,iCClBX,IAEAxB,EAFApG,EAAA,IAEAoG,gBASA7H,EAAAD,QAPA,SAAA0lB,kBAAAC,EAAA/d,GACA,IAAA+D,EAAAga,EAAAzkB,UACA4G,EAAAF,EAAA,SAAA0B,EAAA4C,GACAP,EAAAO,GAAA5C,yFCCasc,EAAQ,SAARA,MAAShhB,GAAyB,IAAlBihB,EAAkB,EAAAnb,UAAA5J,aAAAgD,IAAA4G,UAAA,GAAAA,UAAA,GAAR,IAEnC,GAAIzJ,OAAA4U,EAAA,SAAA5U,CAAS2D,GACT,OAAOA,EAKX,IAAIkhB,EAAQ,IAAIrY,OAAO,SAAWoY,EAAU,IAAK,CAAC,MAC9CE,EAAcC,YACb,GAAKphB,GAEDyL,QAAQ,WAAY,OAEpBA,QAAQyV,EAAO,IAEfzV,QAAQwV,EAAS,MAI1B,OAAQ7P,MAAM+P,GAA6B,EAAdA,iCC5BjC,IAAAE,EAAAvkB,EAAA,IAMAzB,EAAAD,QAJA,SAAAkmB,YAAA/hB,EAAA4D,GACA,OAAA5D,EAAA,OAAA8hB,EAAA9hB,GAAA,UAAA4D,oCCHA,IAAAme,EAAAxkB,EAAA,IAMAzB,EAAAD,QAJA,SAAAmmB,WAAAhiB,GACA,OAAA+hB,EAAA/hB,EAAA,sCCHAzC,EAAA,IAEA0kB,iCCFA,IAAAC,EAAA3kB,EAAA,IACA4kB,EAAA5kB,EAAA,IACAykB,EAAAzkB,EAAA,IACA6kB,EAAA7kB,EAAA,IACA8kB,EAAA9kB,EAAA,IAEA6X,EAAAgN,EAAAhN,SACArJ,EAAAsW,EAAAtW,IAkBAjQ,EAAAD,QAhBA,SAAAymB,WAAAtiB,EAAAuiB,EAAAC,GACA,GAAApN,EAAAmN,GAAA,CACA,IAAAE,EAAAT,EAAAhiB,GACA,GAAAwiB,EAAA,CAGA,IAAAE,EAAA,EAAAF,EAAA,KACAG,EAAAJ,EAAA,EAAAE,EACAE,KAAA5W,EAAA4W,KAAAD,IACAH,GAAA,EAAAG,GAIA,OADAR,EAAAliB,EAAAmiB,EAAAniB,GAAAuiB,EAAAE,GACAziB,EAAA4Q,0CCtBA,IAAAnP,EAAAlE,EAAA,GAEAzB,EAAAD,QAAA,CACA+M,YAAAnH,EAAA3E,OACA+L,WAAApH,EAAAqH,MACAC,UAAAtH,EAAAuH,KACAC,YAAAxH,EAAAyH,OACA0Z,YAAAnhB,EAAA2H,OACAD,cAAA1H,EAAA4H,SACAwZ,YAAAphB,EAAA6H,sCCTA,IAAAwZ,EAAAvlB,EAAA,IAMAzB,EAAAD,QAJA,SAAAknB,WAAA/iB,EAAAgjB,EAAAC,GACA,OAAAH,EAAA,KAAA9iB,EAAAgjB,EAAAC,GAAAC,oCCHA,IAAAb,EAAA9kB,EAAA,IAEAgO,EAAA8W,EAAA9W,KACAC,EAAA6W,EAAA7W,MAEAH,EAAAhF,KAAAgF,OAAA,SAAA3K,GACA,WAAAA,GAAA4K,SAAA5K,GACAA,EAAA,EAAA6K,EAAA7K,GAAA8K,EAAA9K,GADAA,GAIA5E,EAAAD,QAAAwP,gCCVA,IAAAmB,EAAAjP,EAAA,KAEAzB,EAAAD,QAAA2Q,EAAA,qCCFA,IAAAuV,EAAAxkB,EAAA,IAMAzB,EAAAD,QAJA,SAAAsnB,SAAAnjB,GACA,OAAA+hB,EAAA/hB,EAAA,wCCHA,IAAA+hB,EAAAxkB,EAAA,IAMAzB,EAAAD,QAJA,SAAAunB,QAAApjB,GACA,OAAA+hB,EAAA/hB,EAAA,2CCHA,IAAAqjB,EAAA9lB,EAAA,KAEA+lB,EAAA,CACA,CACArjB,KAAA,cACA2D,OAAA,eACA2f,WAAA,EACAtF,MAAA,EACAC,IAAA,KAEA,CACAje,KAAA,SACA2D,OAAA,UACA2f,WAAA,IACAtF,MAAA,EACAC,IAAA,IAEA,CACAje,KAAA,SACA2D,OAAA,UACA2f,WAAA,IACAtF,MAAA,EACAC,IAAA,IAEA,CACAje,KAAA,OACA2D,OAAA,QACA2f,WAAA,KACAtF,MAAA,EACAC,IAAA,IAEA,CACAje,KAAA,MACAujB,MAAA,OACA5f,OAAA,OACA6f,WAAA,EACAF,WAAA,MACAtF,MAAA,EACAC,IAAA,SAAAle,GACA,OAAAqjB,EAAArjB,KAGA,CACAC,KAAA,OACA2D,OAAA,UACA6f,WAAA,EACAF,WAAA,QAEA,CACAtjB,KAAA,QACA2D,OAAA,QACA6f,WAAA,EACAF,WAAA,QACAtF,MAAA,EACAC,IAAA,IAEA,CACAje,KAAA,OACA2D,OAAA,WACA6f,WAAA,EACAF,WAAA,SACAtF,MAAA,IAIAniB,EAAAD,QAAAynB,gCC7DAxnB,EAAAD,QAJA,SAAAkO,UAAA5J,GACA,YAAAR,IAAAQ,iCCDA,IAAAsK,EAAAlN,EAAA,KAWAzB,EAAAD,QATA,SAAAsP,QAAA/F,EAAAnB,GACA,QAAA/H,EAAA,EAAAiK,EAAAf,EAAAzI,OAAmCT,EAAAiK,EAASjK,IAAA,CAC5C,KAAAA,KAAAkJ,GACA,OAAAqF,EAAArF,EAAAnB,EAAA/H,GAEA+H,EAAAmB,EAAAlJ,wWCIawnB,EAAa,SAAbA,WAAcznB,EAAGmI,GAC1B,IAAIuf,EAAI1nB,EAAEkR,cACNyW,EAAIxf,EAAE+I,cACV,OAAOwW,EAAIC,GAAK,EAASA,EAAJD,EAAQ,EAAI,GASxBE,EAAa,SAAbA,WAAc5nB,EAAGmI,GAAJ,OAAWnI,EAAImI,GAQ5B0f,EAAc,SAAdA,YAAe7nB,EAAGmI,GAAJ,OAAWA,EAAInI,GAS7B8nB,EAAc,SAAdA,YAAeC,EAAOC,GAAR,OAAkBD,EAAMpT,UAAYqT,EAAMrT,WASxDsT,EAAe,SAAfA,aAAgBF,EAAOC,GAAR,OAAkBA,EAAMrT,UAAYoT,EAAMpT,WASzDuT,EAAgB,SAAhBA,cAAiBC,GAA6B,IAAlB1C,EAAkB,EAAAnb,UAAA5J,aAAAgD,IAAA4G,UAAA,GAAAA,UAAA,GAAR,IAC/C,OAAO,SAAC8d,EAASC,GACb,IAAIC,EAAOznB,OAAA0nB,EAAA,MAAA1nB,CAAQunB,EAAS3C,GACxB+C,EAAO3nB,OAAA0nB,EAAA,MAAA1nB,CAAQwnB,EAAS5C,GAC5B,OAAO0C,EAAUG,EAAME,KAWlBC,EAAc,SAAdA,YAAeN,GAAgC,IAArBO,EAAqB,EAAApe,UAAA5J,aAAAgD,IAAA4G,UAAA,GAAAA,UAAA,GAAZ,QAC5C,OAAO,SAACqe,EAAUC,GACd,IAAIb,EAAQc,EAAA,KAAUC,OAAOH,EAAUD,GACnCV,EAAQa,EAAA,KAAUC,OAAOF,EAAUF,GACvC,OAAOP,EAAUJ,EAAOC,mCC7EhC,IAAAnC,EAAAvkB,EAAA,IAUAzB,EAAAD,QARA,SAAAmpB,UAAAhlB,GAGA,IAAAilB,EAAA,IAAAjc,KAAAhJ,EAAA4Q,WAEA,OADAkR,EAAAmD,IAAAnD,EAAA9hB,IACAilB,iCCPA,IAAAlD,EAAAxkB,EAAA,IAMAzB,EAAAD,QAJA,SAAAsmB,QAAAniB,GACA,OAAA+hB,EAAA/hB,EAAA,uCCHA,IAAAklB,EAAA3nB,EAAA,IAMAzB,EAAAD,QAJA,SAAAqmB,QAAAliB,EAAAmF,GACA+f,EAAAllB,EAAA,OAAAmF,kCCHA,IAAA2c,EAAAvkB,EAAA,IACAwkB,EAAAxkB,EAAA,IAgBAzB,EAAAD,QAdA,SAAAqpB,YAAAllB,EAAA4D,EAAAnD,EAAA0kB,GAQAA,GAAA1kB,IAAAshB,EAAA/hB,EAAA4D,EAAAnD,IAGAT,EAAA,OAAA8hB,EAAA9hB,GAAA,UAAA4D,GAAAnD,kCCdA,IAAAsJ,EAAAxM,EAAA,IACA6kB,EAAA7kB,EAAA,IACA2nB,EAAA3nB,EAAA,IACA6nB,EAAA7nB,EAAA,KAEA+K,EAAA8Z,EAAA9Z,WAcAxM,EAAAD,QAZA,SAAAwpB,sBAAArlB,EAAAslB,EAAAC,EAAArH,GASA,OARAkH,EAAAE,EAAA,SAAAE,EAAAtpB,GACA,IAAAiJ,EAAA+Y,EAAAsH,EAAAtH,IAAAsH,EAAAvH,MAKA,OAJA3V,EAAAnD,KACAA,IAAAnF,IAEAklB,EAAAllB,EAAAwlB,EAAA5hB,OAAAuB,IACA4E,EAAAwb,MAAArpB,IAEA8D,iCCZAlE,EAAAD,QAJA,SAAA4pB,YAAAzlB,GACA,OAAA6R,MAAA7R,EAAA4Q,0CCDA,IAAA8U,EAAAnoB,EAAA,IAQAzB,EAAAD,QANA,SAAA8pB,YAAA3lB,EAAAwlB,EAAA9Z,EAAAiQ,GACA,IAAAoB,EAAA,GAEA,OADAA,EAAAyI,GAAA9Z,EACAga,EAAA1lB,EAAA+c,EAAApB,EAAA,kCCLA,IAAAiK,EAAAroB,EAAA,IAMAzB,EAAAD,QAJA,SAAAgqB,aACA,OAAAD,EAAA,kBAAAA,kCCHA,IAAAE,EAAAvoB,EAAA,IAEAwe,EAAA+J,EAAA/J,YACAC,EAAA8J,EAAA9J,UACAC,EAAA6J,EAAA7J,WACAC,EAAA4J,EAAA5J,YAWApgB,EAAAD,QATA,SAAAkqB,kBAAAnb,GACA,OAAAA,IAAAsR,EACAF,EACGpR,IAAAqR,EACHF,EAEAnR,EAAA,iCCTA9O,EAAAD,QAJA,SAAAmqB,YAAA7lB,GACA,YAAAR,IAAAQ,iCCDA5C,EAAA,KACAA,EAAA,KAEAzB,EAAAD,QAAA0B,EAAA,iCCHA,IAAA0oB,EAAA1oB,EAAA,KAQAzB,EAAAD,QANA,SAAAqqB,aAAAC,GACA,OAAAF,EAAAE,EAAAlI,QACAgI,EAAAE,EAAAjI,aACAiI,EAAAlI,cAAAkI,EAAAjI,mCCLA,IAAAkI,EAAA7oB,EAAA,KACA8oB,EAAA9oB,EAAA,KAEA+oB,EAAAF,EAAAE,eAMAxqB,EAAAD,QAJA,SAAA0qB,sBAAA1jB,EAAAka,EAAA9Y,EAAAP,GACA4iB,EAAAzjB,EAAAwjB,EAAAtJ,EAAA9Y,GAAAP,kCCNA,IAAA8iB,EAAAjpB,EAAA,IACAuoB,EAAAvoB,EAAA,IACAwoB,EAAAxoB,EAAA,IACAkpB,EAAAlpB,EAAA,IACA8nB,EAAA9nB,EAAA,IAEA0e,EAAA6J,EAAA7J,WACAU,EAAA6J,EAAA7J,cASA7gB,EAAAD,QAPA,SAAA6qB,sBAAA1mB,EAAA2mB,EAAAC,GAIA,OAHAD,IAAA1K,GACAwK,EAAAzmB,EAAA2c,EAAApc,IAAAqmB,GAAAC,qBAEAxB,EAAArlB,EAAA+lB,EAAAY,mCCbA,IAAAH,EAAAjpB,EAAA,IACAuoB,EAAAvoB,EAAA,IACAupB,EAAAvpB,EAAA,KACAwoB,EAAAxoB,EAAA,IACA8nB,EAAA9nB,EAAA,IAEA0e,EAAA6J,EAAA7J,WACAU,EAAA6J,EAAA7J,cASA7gB,EAAAD,QAPA,SAAAkrB,gBAAA/mB,EAAA2mB,EAAAC,EAAArB,GAIA,OAHAoB,IAAA1K,GACA6K,EAAA9mB,EAAA2c,EAAApc,IAAAqmB,GAAAC,qBAEAxB,EAAArlB,EAAA+lB,EAAAY,GAAApB,GAAA,kCCbA,IAAAO,EAAAvoB,EAAA,IACAwM,EAAAxM,EAAA,IACAypB,EAAAzpB,EAAA,KACA0pB,EAAA1pB,EAAA,IAEAye,EAAA8J,EAAA9J,UAwBAlgB,EAAAD,QAtBA,SAAAqrB,sBAAAC,EAAAljB,EAAAqhB,EAAA8B,GAEA,SAAAC,IAAApnB,EAAAulB,EAAAtpB,GACA,IAAAiJ,EAAA6hB,EAAAG,EAAAlnB,GACA8J,EAAA5E,IACAlB,EAAAhE,EAAAkF,EAAAqgB,EAAAtpB,GAIA+qB,EAAA,SAAAzB,EAAAtpB,GACA,IAAA+P,EAAAob,IAAA7B,EAAAvlB,KAAAulB,EAAAtpB,GAOA,OANA,IAAA+P,GAAA/P,IAAA8f,IAIA/P,EAAAob,IAAA,UAAA7B,EAAAtpB,IAEA+P,GACGqZ,EAAA8B,kCCzBH,IAAA9D,EAAA/lB,EAAA,IACAuoB,EAAAvoB,EAAA,IACA8N,EAAA9N,EAAA,IACA2kB,EAAA3kB,EAAA,IACA4kB,EAAA5kB,EAAA,IACA4lB,EAAA5lB,EAAA,IACAsoB,EAAAtoB,EAAA,IACA+kB,EAAA/kB,EAAA,IACA8kB,EAAA9kB,EAAA,IACAwkB,EAAAxkB,EAAA,IACA6kB,EAAA7kB,EAAA,IACA+pB,EAAA/pB,EAAA,KACAwoB,EAAAxoB,EAAA,IACAgqB,EAAAhqB,EAAA,KACAiqB,EAAAjqB,EAAA,KACA2pB,EAAA3pB,EAAA,IAEAye,EAAA8J,EAAA9J,UACAC,EAAA6J,EAAA7J,WACAC,EAAA4J,EAAA5J,YACAC,EAAA2J,EAAA3J,WACA7P,EAAA+V,EAAA/V,MACA8I,EAAAgN,EAAAhN,SAoJAtZ,EAAAD,QAlJA,SAAA6pB,WAAA1lB,EAAAmnB,EAAAxL,EAAA8L,EAAAC,EAAAC,EAAAC,GACA,IAAAC,EAqDA,SAAAC,QAAAC,EAAAtnB,EAAA+kB,EAAAmB,GACA,IAAAqB,EAAAC,EAAArkB,EAAA4hB,EAAA5hB,QApDA,SAAAskB,aAAAH,EAAApB,GACAe,IAAAG,IAEAA,EADA,YAAAE,EACA9L,EAEAsL,EAAAZ,IAiDAuB,CAAAH,EAAApB,GA5CA,SAAAwB,eAAAxB,GAGAA,EAAAQ,EAAAiB,cAGAjB,EAAAiB,YAAAzB,GAuCAwB,CAAAxB,IAEAsB,EAAAxnB,EAAA,KArBA,SAAA4nB,eAAA7C,EAAAmB,EAAAsB,GACA,GAAAtB,EAAA,CACA,IAAA2B,EAAAhF,EAAAyC,EAAAY,IACAxhB,EAAAmH,EAAAkZ,EAAAjC,WAAA+E,EAAA/E,WAAA0E,GACAd,EAAAmB,EAAAroB,MAAAkF,GAmBAkjB,CAAA7C,EAAAmB,EAAAsB,GACAxnB,EAAA4K,EAAA5K,IAGA,YAAAsnB,GAUAC,EAAArB,IAAAzK,GAAA,GAAAiG,EAAAniB,IAwBAynB,GAAAjC,EAAA/B,WAGKgE,IACLd,IAAA1K,IACAxb,GAAA,EACAmD,EAAA0f,EAAAtH,GAAApY,QAEAnD,IAAAgnB,EAAA1F,EAAA/hB,EAAA4D,IAEA4jB,EAAAxnB,EAAA4D,EAAAnD,EAAAgnB,GACAO,GAhEA,SAAAO,gBAAAvoB,EAAAwoB,GAIA,OAHAA,EAAA,IACAA,IAAA,OAEAA,EAAA,KAAArF,EAAAnjB,GA4DAuoB,CAAAvoB,EAAAS,IAKAyhB,EAAAliB,EAAA,IAfAA,EAAAyoB,QAAAzoB,EAAA4Q,UAAAnQ,EAAAgnB,EAAAjC,EAAAjC,aAlCAkE,GAKAnF,EAAAtiB,EAAAS,EAAAknB,GAgDA,GAAAvS,EAAA+R,IAAAM,EAEAN,EAAA,CAAcuB,YAAAvB,QACX,GAAA/R,EAAA+R,GAGH,OADAnnB,EAAAyoB,QAAAtB,GACAnnB,EAiBA,OAdAknB,EAAAC,EAAAW,SAEAnM,GAAAwL,EAAAiB,aACAd,EAAAtnB,EAAAmnB,EAAAiB,aA9GA,SAAAO,kBACA,GAAAd,KAAA1L,EAAA0L,GAIA,OAAAH,GACA,cAAA1nB,IAAA4nB,GAAA/B,KACA,cAAA7lB,IAAA4nB,GAAA/B,MA+GA8C,IA3GA,SAAAC,yBACA,IAAApD,EAAAlC,EAAAuE,GACAJ,EAAAC,EACAI,QAAAtC,EAAAvlB,KAAA,EAAAulB,EAAAqC,GAyGAe,GAEA5oB,iCCnKAlE,EAAAD,QAJA,SAAAgtB,SAAA7oB,GACA,OAAAA,EAAA8oB,mDCGAhtB,EAAAD,QAJA,SAAAqP,WAAAzB,GACA,OAAAA,EAAAtB,MAAA,oCCDArM,EAAAD,QAAA,CACAktB,gBAAA,GACAC,gBAAA,MACAtgB,kBAAA,IACAugB,kBAAA,IACAtgB,iBAAA,IACAugB,WAAA,IACAC,YAAA,mCCPA,IAAAC,EAAA7rB,EAAA,IAMAzB,EAAAD,QAJA,SAAAwtB,YAAA/mB,GACA,OAAA8mB,EAAA,GAAuB9mB,kCCHvB,IAEAqB,EAFApG,EAAA,IAEAoG,gBASA7H,EAAAD,QAPA,SAAAutB,YAAApqB,EAAA2F,GAIA,OAHAhB,EAAAgB,EAAA,SAAAQ,EAAA4C,GACA/I,EAAA+I,GAAA5C,IAEAnG,slCCIA,IAAasqB,EAAb,SAAA9K,GAMI,SAAA8K,aAAYvO,GAAI,IAAAE,+GAAAC,CAAA/W,KAAAmlB,cAGZ,IAAI7K,GAFJxD,EAAAyD,2BAAAva,KAAAwa,gBAAA2K,cAAArsB,KAAAkH,KAAM4W,EAAI,kBAEGK,OAHD,OASZH,EAAKsO,aAAezsB,OAAA0sB,EAAA,MAAA1sB,CAAM2hB,EAAEgL,wBACxB3sB,OAAA0sB,EAAA,QAAA1sB,CAAQ2hB,EAAEgL,sBAAsBC,MAChC5sB,OAAA0sB,EAAA,QAAA1sB,CAAQ2hB,EAAEgL,sBAAsBE,UAChClL,EAAEgL,sBACF,KASJxO,EAAK2O,UAAW,EAOhB3O,EAAK3X,KAAO,GAOZ2X,EAAK4O,QAAU,GAOf5O,EAAK6O,aAAe,GA3CR7O,EANpB,iQAAA+E,CAAAsJ,aAAkCrJ,EAAA,gHAAlCxE,CAAA6N,aAAA,EAAAvhB,IAAA,cAAAtH,MAAA,SAAAspB,YA2DgBC,GAAwB,IAAdhH,EAAc,EAAAzc,UAAA5J,aAAAgD,IAAA4G,UAAA,GAAAA,UAAA,GAAJ,GACxBwU,EAAK5W,KAAK4W,GAEd,GAAIA,EAAGkP,gBAAgBD,KAAcjP,EAAGmP,SACnCptB,OAAA0sB,EAAA,QAAA1sB,CAAQie,EAAGmP,WAA8C,IAAlCnP,EAAGmP,QAAQpa,QAAQka,GAC3C,OAAOhH,EALqB,IAS5BoB,EADEhD,EAA+BrG,EAA/BqG,cAAe+I,EAAgBpP,EAAhBoP,YAGrB,GAAIhmB,KAAKolB,eACwC,IAA7CplB,KAAKolB,aAAaG,IAAI5Z,QAAQka,GAAkB,CAChD,IAAII,EAAMjmB,KAAKolB,aAAaG,IAAI5Z,QAAQka,GACxC5F,EAAYjgB,KAAKolB,aAAaI,SAASS,QAEtC,GAAIrP,EAAGsP,QAAQL,EAAU,CAACM,EAAA,OAAQA,EAAA,mBAAoB,CACvD,IAAI5I,EAAU3G,EAAGwP,WAAWP,GACxBL,EAAWa,EAAA,YACK,IAAhBL,IAA2D,IAAnCA,EAAYra,QAAQka,KAC5CL,EAAWa,EAAA,aAEfpG,EAAYtnB,OAAA0tB,EAAA,cAAA1tB,CAAc6sB,EAAUjI,QAEnC,GAAI3G,EAAGsP,QAAQL,EAAU,CAACM,EAAA,OAAQ,CACnC,IAAI3F,EAAS5J,EAAGC,QAAQ,YAAYyP,UAAUT,GAC1CL,EAAWa,EAAA,YACfpG,EAAYtnB,OAAA0tB,EAAA,YAAA1tB,CAAY6sB,EAAUhF,QAElCP,EAAYhD,OAAgBzhB,EAAY6qB,EAAA,WAG5C,OAAOxH,EAAQhY,KAAKoZ,KA3F5B,CAAArc,IAAA,iBAAAtH,MAAA,SAAAiqB,eAmGmBC,GAAY,IAAAC,EAAAzmB,KACvBwmB,EAAWxf,QAAQ,SAAC0f,GAChB,IAAIC,EAASF,EAAKG,UAAUF,GAC5BD,EAAKI,MAAMH,EAAQD,EAAK7P,GAAGkQ,eAC3BL,EAAKM,cAAcL,EAAQC,OAvGvC,CAAA/iB,IAAA,qBAAAtH,MAAA,SAAA0qB,mBAiHuBC,EAAQC,GACvB,IAAItQ,EAAK5W,KAAK4W,GAEd,GAAIA,EAAGuQ,uBACH,OAAO,EAGX,GAAIvQ,EAAGxC,QACH,IAAKzb,OAAA0sB,EAAA,QAAA1sB,CAAQuuB,IAAoBtQ,EAAGwQ,WAAWH,GAC3C,OAAO,OAGX,GAAIrQ,EAAGyQ,eAAeJ,GAClB,OAAO,EAIf,OAAO,IAlIf,CAAArjB,IAAA,cAAAtH,MAAA,SAAAgrB,cAyIQ,IAAI1Q,EAAK5W,KAAK4W,GACTA,EAAGkQ,eAAkBlQ,EAAG2Q,gBAI7BvnB,KAAKwnB,iBA9IbrC,aAAA,4CCRMtX,OAAM,KAAK9T,SAEjB6W,EAAA,SAQI6W,MARW,SAAAA,MAQL3rB,EAAMQ,EAAOorB,GACf,IAAIC,EAAS,GACTD,IAEAC,EAAS,cADTA,EAAS,IAAI9iB,MAAM,IAAIA,MAAQ4H,UAAoB,KAARib,IACZE,eAEnC/Z,EAAIga,OAAS/rB,EAAO,IAAMgsB,OAAOxrB,GAASqrB,GAQ9CI,KAtBW,SAAAA,KAsBNjsB,GACD,IAAIksB,EAAc,GACdhe,EAASlO,EAAO,IACpB,GAAwB,EAApB+R,EAAIga,OAAOrvB,OAAY,CACvB,IAAIqvB,EAASha,EAAIga,OACbrJ,EAASqJ,EAAOlc,QAAQ3B,GAC5B,IAAgB,IAAZwU,EAAe,CACfA,GAAUxU,EAAOxR,OACjB,IAAIuhB,EAAM8N,EAAOlc,QAAQ,IAAK6S,IACjB,IAATzE,IACAA,EAAM8N,EAAOrvB,QAEjBwvB,EAAcC,SAASJ,EAAOK,UAAU1J,EAAQzE,KAGxD,OAAOiO,GAOXtY,OA5CW,SAAAA,OA4CJ5T,GACHkE,KAAKynB,MAAM3rB,EAAM,IAAK,mCCnD9B,IAAAmiB,EAAA7kB,EAAA,IACA2oB,EAAA3oB,EAAA,IACA+uB,EAAA/uB,EAAA,IACAgvB,EAAAhvB,EAAA,KACAivB,EAAAjvB,EAAA,KACAkvB,EAAAlvB,EAAA,KACAmvB,EAAAnvB,EAAA,IAEA6X,EAAAgN,EAAAhN,SACA/M,EAAA+Z,EAAA/Z,SACAgU,EAAA+F,EAAA/F,OACA/T,EAAA8Z,EAAA9Z,WAwDAxM,EAAAD,QAtDA,SAAA8wB,WAAAxG,EAAAyG,EAAAC,EAAA5oB,GACA,IAAAoK,EACAye,EACAC,EACAvH,EACAvH,EAAAkI,EAAAlI,MACAC,EAAAiI,EAAAjI,IACA8O,EAAA9O,EAAAD,EACAR,EAAAQ,EACArT,EAAA,EACAqB,EAAA,GAEA,IAAAia,EAAAC,GACA,OAAA0G,EAAAI,IAAA,GA4BA,IA1BA3kB,EAAAskB,KACA3oB,EAAA2oB,EACAA,EAAA,MAEAA,KAAA,EACAxX,EAAA6I,IACA6O,EAAAL,EAAAxO,EAAA2O,GACAve,EAAA,WACA,OAAAke,EAAA9O,EAAAmP,EAAAE,KAEGzkB,EAAA4V,GACH5P,EAAA,WACA,OAAAme,EAAA/O,EAAAmP,IAEGvQ,EAAA4B,KACH8O,EAAAL,EAAAE,GACAA,EAAAG,EAAA,GACAvH,EAAAuH,EAAA,GACA1e,EAAA,WACA,OAAAie,EAAA7O,EAAAmP,EAAApH,KAIAwH,GAAA,EAAAJ,IACAA,IAAA,GAEAI,EAAA9O,GAAAT,KAAAS,GACA2O,GACA5gB,EAAApP,KAAA4gB,GAEAxZ,GACAA,EAAAwZ,EAAA7S,EAAAub,GAEA1I,EAAApP,IACAzD,IAEA,OAAAiiB,EAAAjiB,EAAA,EAAAqB,iCChEAnQ,EAAAD,QAAA,mFCAA,IAAAqxB,EAAA3vB,EAAA,IACA2kB,EAAA3kB,EAAA,IACA4kB,EAAA5kB,EAAA,IACAynB,EAAAznB,EAAA,IACAyoB,EAAAzoB,EAAA,IACAupB,EAAAvpB,EAAA,KACAkpB,EAAAlpB,EAAA,IACA4vB,EAAA5vB,EAAA,KAEA6vB,EAAAF,EAAAE,sBACAC,EAAAH,EAAAG,2BA6BAvxB,EAAAD,QA3BA,SAAAyxB,cAAAttB,EAAAutB,EAAAC,EAAAC,GACA,IAAAC,EAAAhtB,EAAA,EAkBA,IAjBAslB,EAAAwH,KACAA,EAAAJ,GAEApH,EAAAyH,KACAA,EAAAJ,GAIAK,EAAA5G,EAAA9B,EAAAhlB,GAAAwtB,GACAL,EAAAO,EAAAF,EAAAC,GACAF,GAAAvtB,EAAA0tB,IAIAA,EAAAjH,EAAAzB,EAAAhlB,GAAAwtB,GACAL,EAAAO,EAAAF,EAAAC,IAEAC,GAAA1tB,GAEAkiB,EAAAwL,EAAAvL,EAAAuL,GAAA,GACAhtB,IAEA,OAAAA,iCCpCA,IAAA2hB,EAAA9kB,EAAA,IACAyO,EAAAzO,EAAA,KAEAwO,EAAAsW,EAAAtW,IAWAjQ,EAAAD,QATA,SAAA4P,UAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GACA,IAAArC,EAAAsC,EAAAL,GAAAzF,SAAA4F,GAAA,IAKA,OAJApC,EAAAuC,EAAAF,GAAA,IAAAH,EAAAlC,EAAAyC,QAAA,YAAAvP,QAAA8M,GACAmC,GAAAF,EAAA,KACAjC,GAAAiC,EAAA,WAAAjC,GAEAA,iCCXA,IAAA4B,EAAA9N,EAAA,IACAynB,EAAAznB,EAAA,IACAooB,EAAApoB,EAAA,IAuCAzB,EAAAD,QArCA,SAAA8xB,uBAAAC,EAAAC,EAAArI,GACA,IAAA9Z,EAAAoiB,EAAAC,EAAAH,EAAAC,EAmBA,GAlBAE,IACAD,EAAAD,EACAA,EAAAD,EACAA,EAAAE,GAEApiB,EAAAmiB,EAAAD,EACA,EAAApI,EAAAjC,aACA7X,EAAAL,EAAAK,EAAA8Z,EAAAjC,aAWAiC,EAAA/B,UAMA,IALAmK,EAAA5I,EAAA4I,GACAliB,IACAA,GAAA,EACAia,EAAAiI,EAAApI,EAAAvlB,KAAAyL,IAEAkiB,EAAAC,IACAlI,EAAAiI,EAAApI,EAAAvlB,KAAA,KACA4tB,EAAAD,KAGAliB,GAAA,EAGA,OAAAqiB,GAAAriB,mCClCA5P,EAAAD,QAJA,SAAAmyB,iBAAAvkB,GACA,OAAAA,EAAA+F,OAAA,GAAAye,cAAAxkB,EAAAnI,MAAA,kCCDA,IAAAghB,EAAA/kB,EAAA,IACAykB,EAAAzkB,EAAA,IAGAiO,EAFAjO,EAAA,IAEAiO,MAOA1P,EAAAD,QALA,SAAA4qB,sBAAAzmB,EAAAwtB,GAEA,OADAlL,EAAAtiB,EAAA,EAAAwL,GAAAwW,EAAAhiB,GAAAwtB,GAAA,GAAAA,GACAxtB,iCCRA,IAAAkuB,EAAA3wB,EAAA,KACA4wB,EAAA5wB,EAAA,IACA6wB,EAAA7wB,EAAA,KAEAwL,EAAAolB,EAAAplB,UAEAjN,EAAAD,QAAAuyB,EAAArlB,EAAAmlB,iCCNA,IAAAG,EAAA9wB,EAAA,KACA+wB,EAAA/wB,EAAA,KACAipB,EAAAjpB,EAAA,IACAuoB,EAAAvoB,EAAA,IACAukB,EAAAvkB,EAAA,IACA8N,EAAA9N,EAAA,IACA4N,EAAA5N,EAAA,IACAsrB,EAAAtrB,EAAA,IACAwM,EAAAxM,EAAA,IACAgxB,EAAAhxB,EAAA,KACAsoB,EAAAtoB,EAAA,IACAmoB,EAAAnoB,EAAA,IACA+kB,EAAA/kB,EAAA,IACA6rB,EAAA7rB,EAAA,IACAooB,EAAApoB,EAAA,IACAyoB,EAAAzoB,EAAA,IACA6kB,EAAA7kB,EAAA,IACAkoB,EAAAloB,EAAA,IACA8rB,EAAA9rB,EAAA,IACAyM,EAAAzM,EAAA,IACAwpB,EAAAxpB,EAAA,IACAixB,EAAAjxB,EAAA,KACAkxB,EAAAlxB,EAAA,IACAmpB,EAAAnpB,EAAA,IACA2pB,EAAA3pB,EAAA,IACAmxB,EAAAnxB,EAAA,KACAoxB,EAAApxB,EAAA,KAEA6X,EAAAgN,EAAAhN,SACA/M,EAAA+Z,EAAA/Z,SACAgU,EAAA+F,EAAA/F,OACApU,EAAAwmB,EAAAxmB,OACA+U,EAAAwJ,EAAAxJ,QACAL,EAAA6J,EAAA7J,cACAX,EAAA8J,EAAA9J,UACAC,EAAA6J,EAAA7J,WACAC,EAAA4J,EAAA5J,YACAC,EAAA2J,EAAA3J,WAoaArgB,EAAAD,QAlaA,SAAAinB,gBAAA8E,EAAA5nB,EAAAkU,EAAA+O,GAGA,IAAAC,EAAAnG,EAAAO,EAAAsR,EAAAC,EAAAlH,EAGAmH,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAgBA,SAAAC,kBAAA3b,EAAA4b,GACA,IAAAtS,EAAAmS,GAAA,GAaA,OAZA/jB,EAAAkkB,EAAAC,GAAA,SAAAC,EAAArzB,GACA,IAAAiJ,EAAAsE,EAAAgK,EAAAvX,EAAA,GACAuN,IAEAtE,EAWA,SAAAqqB,eAAA/lB,EAAA8lB,GACA,WAAAA,EACA,SACK,YAAAA,EAAA,CACL,IAAA9b,EAAAhK,EAAAgK,MAAA6a,GACA,GAAA7a,EACA,OAAAib,EAAAjb,EAAA,GAAAyP,EAAA4L,IAjBAU,CAAA/lB,EAAA8lB,GAEAvJ,EAAA7gB,KACAA,EAAAmY,EAAAmS,WAAAhmB,EAAA8lB,IAGAxS,EAAAwS,GAAApqB,KAEA4X,EAgBA,SAAA2S,gBAAA1vB,EAAAilB,GAUA,OATAnD,EAAA9hB,KAAA+J,EAAAilB,KACAA,GAAA,GAEAlN,EAAA9hB,KAAA+J,EAAAklB,KACAA,GAAA,GAEAhK,IACAjlB,EAAA,IAAAgJ,KAAAhJ,EAAA4Q,YAEA5Q,EAGA,SAAA2vB,aAAA1rB,GACA2qB,EAAA/xB,KAAAoH,GAwGA,SAAA2rB,qBAAAC,EAAAC,GAEAhO,EAAAoB,GAAA,GAKA2M,EAAA,IACAC,IAAA,GAGA,IAAAnN,EAAA,GAAAkN,GAAAC,GAAA,GACAnN,IACA5F,EAAAgT,QAAAhT,EAAAgT,QAAA,GAAApN,GAwBA,SAAAqN,aAAAC,GACAlT,EAAAkT,OAAA,GACA,GAAAA,GAIAN,aAAA,WACAhK,EAAAzC,EAAA,OAAA7X,EAAA4kB,EAAA,OAcA,SAAAC,mBAAAvJ,GACA,IAAAjb,EAGAA,EADA3B,EAAAgT,EAAArR,KACAqR,EAAArR,IACK3B,EAAAgT,EAAAoT,OAAAnK,EAAAjJ,EAAA3f,OACL,EAEA,EAeA2M,EAAAgT,EAAAqT,WACAzJ,IAAAzK,GACAmU,kBAAA3kB,GACAA,EAAA,IAEAga,EAAAxC,EAAA,CAA0BkN,QAAArT,EAAAqT,UAAuB,UACjDrT,EAAAqT,UAIArT,EAAAuT,OAKA5kB,GAAAqR,EAAAuT,MAGAvmB,EAAAgT,EAAA3f,OAEAsO,GAAAqR,EAAA3f,MACK2f,EAAAnR,OAELF,GAAAqR,EAAAnR,MAGA7B,EAAAgT,EAAAwT,OAEA7kB,GAAAqR,EAAAwT,WACAxT,EAAAwT,KAwEA,SAAAC,sBAAA7J,GACA,IAAAQ,EAEAD,EAAAnK,EAAA,SAAA9c,EAAAkF,EAAAqgB,EAAAtpB,GAIA,GAAAyqB,GAAAzqB,EAEA,OADAgnB,EAAAuF,QAAAwE,MACA,EACO/wB,EAAAyqB,KAGPQ,KAAA,IACAlnB,GAAAkF,EACAqpB,EAAAzR,EAAA9c,MAGAknB,IACAwI,aAAA,WACAjK,EAAAxC,EAAAiE,GAAA,OAAAQ,GACAuH,GACA9F,EAAA8F,EAAA/H,KAGApK,EAAAoT,OAEAM,WAAA1T,EAAAoT,KAAAhJ,UACApK,EAAAoT,OA7FAK,CAAA7J,GAGA5J,EAAAC,EAAA0T,MAAA/J,IAAAjb,EACAmjB,GAAA,EAGA,SAAA4B,WAAAN,EAAAhJ,GACA,IAAAwJ,EAAAC,EAAAzJ,EAAA3B,KACAoL,GAEAjC,EAAAxH,EAAA,SAAAY,EAAA5iB,EAAAqgB,EAAAtpB,GACA,YAAA6rB,GAAAhe,EAAAod,EAAA0J,SAOAD,EAAA10B,KAGA00B,IAAA1U,GAAAnS,EAAAod,EAAAiJ,WAGAO,EAAAxJ,EAAAiJ,eACAjJ,EAAAiJ,SAEAT,aAAA,WACA,IAAApK,EAIA4K,EAAA,EACAzJ,EAAAxD,EAAA0N,EAAA7B,GACO,EAAAoB,IACP,IAAAA,GAEAzJ,EAAAxD,EADAqC,EAAAvJ,GAGA+K,EAAA7D,EAAA0N,EAAA7B,EAAAxJ,IAEAxb,EAAA4mB,KACArO,EAAAY,EAAAyN,GAAAR,GACA5B,EAAArL,MAIAiE,EAAAiB,YADAwI,IAAA1U,EACAF,EAEA4U,EAAA,EAIA,SAAAP,kBAAA3kB,GAMAqR,EAAAqT,QAAA,GAAA1kB,EAAA,GAAAqR,EAAAqT,QACArT,EAAAmG,KAAA,EACAyE,EAAA,EA+DA,OApZAiH,EAAA,GAIA,SAAAkC,aAAA5c,GACAA,EAAA7L,EAAA6L,GAAA,CAA2ByQ,OAAAzQ,GAAcA,GAAA,GACzC4a,KAAA7mB,EAAAiM,EAAA,aAAAjM,EAAAiM,EAAA,QACA6a,EAAA9mB,EAAAiM,EAAA,UACA8a,EAAA/mB,EAAAiM,EAAA,WACA+a,EAAAhnB,EAAAiM,EAAA,UACAgb,EAAAjnB,EAAAiM,EAAA,UACAib,EAAAlnB,EAAAiM,EAAA,SATA4c,CAAA5c,GA0XAgP,EAHA0E,GAAA5nB,EAGA0vB,gBAAA9H,GAAA,GAEA/B,IAGA/D,EAAAoB,EAAA8L,GAEA3mB,EAAArI,GACAkjB,EAjUA,SAAA6N,gBAAAtnB,GAEAA,IAAA0D,cAIAmQ,EAAAX,EAAApc,IAAAwuB,GAEA,QAAAM,EAAA5b,EAAAvX,EAAA,EAA+BmzB,EAAA/R,EAAAM,gBAAA1hB,GAA8BA,IAE7D,GADAuX,EAAAhK,EAAAgK,MAAA4b,EAAAvb,KACA,CAUA,GAJAwJ,EAAA0T,YAAA3B,EAAAnzB,GAEA6gB,EAAAqS,kBAAA3b,EAAA4b,GAEAtlB,EAAAgT,EAAAkU,WAAA,CACA/N,EAAAuF,QAAA1L,EAAAkU,WACA,MAGAlnB,EAAAgT,EAAAmU,QA6DA,KADAA,EA3DAnU,EAAAmU,OA4DAnU,EAAAkT,KAAA,GAEAlT,EAAAkT,MAAA,GACK,IAAAiB,GAAA,KAAAnU,EAAAkT,OAELlT,EAAAkT,KAAA,KA9DAlT,EAAAoU,KAAApnB,EAAAgT,EAAA8S,UACAD,qBAAA7S,EAAA8S,OAAA9S,EAAA+S,UAGA/lB,EAAAgT,EAAA3f,QAAA4oB,EAAAjJ,EAAAyI,QAgFAzb,EAAAgT,EAAA8T,OAEA9T,EAAAyI,KAAArJ,EACKpS,EAAAgT,EAAAqT,WAELrT,EAAAyI,KAAAvJ,IAhFAlS,EAAAgT,EAAArR,MAAAsa,EAAAjJ,EAAAyI,QAoFA9Z,EAlFAqR,EAAArR,IAmFA3B,EAAAgT,EAAAqT,SAEAC,kBAAA3kB,GACK3B,EAAAgT,EAAA8T,SAEL9T,EAAAmG,KAAAnG,EAAArR,MArFAqR,EAAAqU,QAEApB,aAAAjT,EAAAqU,QAGArnB,EAAAgT,EAAAwT,OAEAxT,EAAAwT,IA+FAhC,EAAArL,GACA8C,EAAAjJ,EAAAyI,QACAzI,EAAAyI,KAAAxJ,EACAe,EAAArR,IAAAqR,EAAAwT,WACAxT,EAAAwT,MAhGAxmB,EAAAgT,EAAAyI,OAEA0K,mBAAAnT,EAAAyI,MAGAzI,EAAAoT,MAEAM,WAAA1T,EAAAoT,KAAApT,GAGA,MA2DA,IAAArR,EArCAwlB,EAHA,OAfAnU,EASK8R,EACLnJ,EAAAxC,EAAAnG,GAAA,KAEA2I,EAAAxC,EAAAnG,GAAA,IAAA+R,EAAAnH,EAAAC,IATA1E,EAAA,IAAAla,KAAAS,GACAulB,GAAAvJ,EAAAvC,IAGAA,EAAAuF,QAAAvF,EAAAtS,UAAAiY,EAAA3F,GAAAmL,IAhFA,SAAAgD,gBACAlmB,EAAAyjB,EAAA,SAAA3qB,GACAA,EAAAhH,SAqFAo0B,GACAnO,EA+OA6N,CAAA/wB,GACGqc,EAAArc,GACHkjB,EAAAwM,gBAAA1vB,EAAAmvB,GAAAlM,GACGjZ,EAAAhK,IACH+c,EAAAsM,EAAArpB,GACA0lB,EAAAxC,EAAAnG,GAAA,KACG3H,EAAApV,IAAA,OAAAA,IACHkjB,EAAAuF,QAAAzoB,GAQA8hB,EAAAoB,IAAA+L,GACA,CACAlS,MACAmG,uCCrcA,IAAAI,EAAA/lB,EAAA,IACAuoB,EAAAvoB,EAAA,IACAyoB,EAAAzoB,EAAA,IAEA4e,EAAA2J,EAAA3J,WAcArgB,EAAAD,QAZA,SAAAorB,qBAAAhjB,EAAAqhB,EAAA8B,GACAA,KAAA,EACApB,EAAAV,KACAA,EAAAnJ,GAEA,QAAAvR,EAAA0a,EAA8B8B,GAAAxc,IAC9B,IAAA3G,EAAAqf,EAAA1Y,MADiDA,qCCPjD9O,EAAAD,QAJA,SAAAmO,aAAA1H,EAAAvD,GACA,QAAAuD,GAAA,YAAAvD,UAAAuD,kCCDAxG,EAAAD,QAAA,CACAuxB,sBAAA,EACAC,2BAAA,iCCFA,IAAAiE,EAAA/zB,EAAA,KACA6rB,EAAA7rB,EAAA,IACA8rB,EAAA9rB,EAAA,IAMAzB,EAAAD,QAJA,SAAA01B,kBAAAC,GACA,OAAApI,EAAAC,EAAAiI,GAAAE,mBCPA31B,EAAAgY,OAoTA,SAAA4d,iBAAAhoB,GACA,OAAAA,EAAAyC,QAAA,6BAAAnM,GACA,OAAA2xB,EAAA3xB,SATA,IA3SA,IAAA4xB,EAAA,CACA,CACA9lB,KAAA,IACA+lB,MAAA,KACG,CACH/lB,KAAA,IACA+lB,MAAA,KACG,CACH/lB,KAAA,IACA+lB,MAAA,qCACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,KACA+lB,MAAA,OACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,KACA+lB,MAAA,MACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,IACA+lB,MAAA,WACG,CACH/lB,KAAA,IACA+lB,MAAA,gBACG,CACH/lB,KAAA,IACA+lB,MAAA,iBACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,KACA+lB,MAAA,MACG,CACH/lB,KAAA,KACA+lB,MAAA,MACG,CACH/lB,KAAA,IACA+lB,MAAA,mCACG,CACH/lB,KAAA,IACA+lB,MAAA,UACG,CACH/lB,KAAA,IACA+lB,MAAA,mBACG,CACH/lB,KAAA,IACA+lB,MAAA,iBACG,CACH/lB,KAAA,IACA+lB,MAAA,uBACG,CACH/lB,KAAA,IACA+lB,MAAA,SACG,CACH/lB,KAAA,IACA+lB,MAAA,iBACG,CACH/lB,KAAA,IACA+lB,MAAA,qBACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,IACA+lB,MAAA,YACG,CACH/lB,KAAA,IACA+lB,MAAA,oBACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,IACA+lB,MAAA,8CACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,IACA+lB,MAAA,aACG,CACH/lB,KAAA,IACA+lB,MAAA,SACG,CACH/lB,KAAA,IACA+lB,MAAA,oBACG,CACH/lB,KAAA,IACA+lB,MAAA,oBACG,CACH/lB,KAAA,IACA+lB,MAAA,kBACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,IACA+lB,MAAA,qCACG,CACH/lB,KAAA,IACA+lB,MAAA,WACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,IACA+lB,MAAA,aACG,CACH/lB,KAAA,IACA+lB,MAAA,QACG,CACH/lB,KAAA,IACA+lB,MAAA,kBACG,CACH/lB,KAAA,IACA+lB,MAAA,iBACG,CACH/lB,KAAA,IACA+lB,MAAA,uCACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,KACA+lB,MAAA,OACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,KACA+lB,MAAA,MACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,IACA+lB,MAAA,aACG,CACH/lB,KAAA,IACA+lB,MAAA,gBACG,CACH/lB,KAAA,IACA+lB,MAAA,oBACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,KACA+lB,MAAA,MACG,CACH/lB,KAAA,IACA+lB,MAAA,iCACG,CACH/lB,KAAA,IACA+lB,MAAA,QACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,MACA+lB,MAAA,KACG,CACH/lB,KAAA,MACA+lB,MAAA,KACG,CACH/lB,KAAA,IACA+lB,MAAA,kBACG,CACH/lB,KAAA,IACA+lB,MAAA,kBACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,IACA+lB,MAAA,uBACG,CACH/lB,KAAA,IACA+lB,MAAA,SACG,CACH/lB,KAAA,IACA+lB,MAAA,iBACG,CACH/lB,KAAA,IACA+lB,MAAA,uBACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,IACA+lB,MAAA,WACG,CACH/lB,KAAA,IACA+lB,MAAA,sBACG,CACH/lB,KAAA,KACA+lB,MAAA,KACG,CACH/lB,KAAA,IACA+lB,MAAA,+CACG,CACH/lB,KAAA,KACA+lB,MAAA,K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AAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KAGAA,EAAA,KACAA,EAAA,KAEAzB,EAAAD,QAAA0B,EAAA","file":"tablefilter.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn "," \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1]\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar head = document.getElementsByTagName('head')[0];\n \t\t\t\tvar script = document.createElement('script');\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120000;\n\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = __webpack_require__.p + \"tf-\" + ({}[chunkId]||chunkId) + \"-\" + {\"0\":\"2ee7121cac5efcfd8556\"}[chunkId] + \".js\";\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tfunction onScriptComplete(event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\tvar error = new Error('Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')');\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\thead.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 127);\n","/*\n * Sugar v2.0.6\n *\n * Freely distributable and licensed under the MIT-style license.\n * Copyright (c) Andrew Plummer\n * https://sugarjs.com/\n *\n * ---------------------------- */\n(function() {\n 'use strict';\n\n /***\n * @module Core\n * @description Core functionality including the ability to define methods and\n * extend onto natives.\n *\n ***/\n\n // The global to export.\n var Sugar;\n\n // The name of Sugar in the global namespace.\n var SUGAR_GLOBAL = 'Sugar';\n\n // Natives available on initialization. Letting Object go first to ensure its\n // global is set by the time the rest are checking for chainable Object methods.\n var NATIVE_NAMES = 'Object Number String Array Date RegExp Function';\n\n // Static method flag\n var STATIC = 0x1;\n\n // Instance method flag\n var INSTANCE = 0x2;\n\n // IE8 has a broken defineProperty but no defineProperties so this saves a try/catch.\n var PROPERTY_DESCRIPTOR_SUPPORT = !!(Object.defineProperty && Object.defineProperties);\n\n var globalContext = getGlobal();\n\n // Whether object instance methods can be mapped to the prototype.\n var allowObjectPrototype = false;\n\n // A map from Array to SugarArray.\n var namespacesByName = {};\n\n // A map from [object Object] to namespace.\n var namespacesByClassString = {};\n\n // Defining properties.\n // istanbul ignore next\n var defineProperty = PROPERTY_DESCRIPTOR_SUPPORT ? Object.defineProperty : definePropertyShim;\n\n // A default chainable class for unknown types.\n var DefaultChainable = getNewChainableClass('Chainable');\n\n\n // Global methods\n\n function getGlobal() {\n // Get global context by keyword here to avoid issues with libraries\n // that can potentially alter this script's context object.\n return testGlobal(typeof global !== 'undefined' && global) ||\n testGlobal(typeof window !== 'undefined' && window);\n }\n\n function testGlobal(obj) {\n // Note that Rhino uses a different \"global\" keyword so perform an\n // extra check here to ensure that it's actually the global object.\n return obj && obj.Object === Object ? obj : null;\n }\n\n function setupGlobal() {\n Sugar = globalContext[SUGAR_GLOBAL];\n // istanbul ignore if\n if (Sugar) {\n // Reuse already defined Sugar global object.\n return;\n }\n Sugar = function(arg) {\n forEachProperty(Sugar, function(sugarNamespace, name) {\n // Although only the only enumerable properties on the global\n // object are Sugar namespaces, environments that can't set\n // non-enumerable properties will step through the utility methods\n // as well here, so use this check to only allow true namespaces.\n if (hasOwn(namespacesByName, name)) {\n sugarNamespace.extend(arg);\n }\n });\n return Sugar;\n };\n // istanbul ignore else\n if (typeof module !== 'undefined' && module.exports) {\n // Node or webpack environment\n module.exports = Sugar;\n } else {\n // Unwrapped browser environment\n try {\n globalContext[SUGAR_GLOBAL] = Sugar;\n } catch (e) {\n // Contexts such as QML have a read-only global context.\n }\n }\n forEachProperty(NATIVE_NAMES.split(' '), function(name) {\n createNamespace(name);\n });\n setGlobalProperties();\n }\n\n /***\n * @method createNamespace(name)\n * @returns SugarNamespace\n * @namespace Sugar\n * @short Creates a new Sugar namespace.\n * @extra This method is for plugin developers who want to define methods to be\n * used with natives that Sugar does not handle by default. The new\n * namespace will appear on the `Sugar` global with all the methods of\n * normal namespaces, including the ability to define new methods. When\n * extended, any defined methods will be mapped to `name` in the global\n * context.\n *\n * @example\n *\n * Sugar.createNamespace('Boolean');\n *\n * @param {string} name - The namespace name.\n *\n ***/\n function createNamespace(name) {\n\n // Is the current namespace Object?\n var isObject = name === 'Object';\n\n // A Sugar namespace is also a chainable class: Sugar.Array, etc.\n var sugarNamespace = getNewChainableClass(name, true);\n\n /***\n * @method extend([opts])\n * @returns Sugar\n * @namespace Sugar\n * @short Extends Sugar defined methods onto natives.\n * @extra This method can be called on individual namespaces like\n * `Sugar.Array` or on the `Sugar` global itself, in which case\n * [opts] will be forwarded to each `extend` call. For more,\n * see `extending`.\n *\n * @options\n *\n * methods An array of method names to explicitly extend.\n *\n * except An array of method names or global namespaces (`Array`,\n * `String`) to explicitly exclude. Namespaces should be the\n * actual global objects, not strings.\n *\n * namespaces An array of global namespaces (`Array`, `String`) to\n * explicitly extend. Namespaces should be the actual\n * global objects, not strings.\n *\n * enhance A shortcut to disallow all \"enhance\" flags at once\n * (flags listed below). For more, see `enhanced methods`.\n * Default is `true`.\n *\n * enhanceString A boolean allowing String enhancements. Default is `true`.\n *\n * enhanceArray A boolean allowing Array enhancements. Default is `true`.\n *\n * objectPrototype A boolean allowing Sugar to extend Object.prototype\n * with instance methods. This option is off by default\n * and should generally not be used except with caution.\n * For more, see `object methods`.\n *\n * @example\n *\n * Sugar.Array.extend();\n * Sugar.extend();\n *\n * @option {Array} [methods]\n * @option {Array} [except]\n * @option {Array} [namespaces]\n * @option {boolean} [enhance]\n * @option {boolean} [enhanceString]\n * @option {boolean} [enhanceArray]\n * @option {boolean} [objectPrototype]\n * @param {ExtendOptions} [opts]\n *\n ***\n * @method extend([opts])\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Extends Sugar defined methods for a specific namespace onto natives.\n * @param {ExtendOptions} [opts]\n *\n ***/\n var extend = function (opts) {\n\n var nativeClass = globalContext[name], nativeProto = nativeClass.prototype;\n var staticMethods = {}, instanceMethods = {}, methodsByName;\n\n function objectRestricted(name, target) {\n return isObject && target === nativeProto &&\n (!allowObjectPrototype || name === 'get' || name === 'set');\n }\n\n function arrayOptionExists(field, val) {\n var arr = opts[field];\n if (arr) {\n for (var i = 0, el; el = arr[i]; i++) {\n if (el === val) {\n return true;\n }\n }\n }\n return false;\n }\n\n function arrayOptionExcludes(field, val) {\n return opts[field] && !arrayOptionExists(field, val);\n }\n\n function disallowedByFlags(methodName, target, flags) {\n // Disallowing methods by flag currently only applies if methods already\n // exist to avoid enhancing native methods, as aliases should still be\n // extended (i.e. Array#all should still be extended even if Array#every\n // is being disallowed by a flag).\n if (!target[methodName] || !flags) {\n return false;\n }\n for (var i = 0; i < flags.length; i++) {\n if (opts[flags[i]] === false) {\n return true;\n }\n }\n }\n\n function namespaceIsExcepted() {\n return arrayOptionExists('except', nativeClass) ||\n arrayOptionExcludes('namespaces', nativeClass);\n }\n\n function methodIsExcepted(methodName) {\n return arrayOptionExists('except', methodName);\n }\n\n function canExtend(methodName, method, target) {\n return !objectRestricted(methodName, target) &&\n !disallowedByFlags(methodName, target, method.flags) &&\n !methodIsExcepted(methodName);\n }\n\n opts = opts || {};\n methodsByName = opts.methods;\n\n if (namespaceIsExcepted()) {\n return;\n } else if (isObject && typeof opts.objectPrototype === 'boolean') {\n // Store \"objectPrototype\" flag for future reference.\n allowObjectPrototype = opts.objectPrototype;\n }\n\n forEachProperty(methodsByName || sugarNamespace, function(method, methodName) {\n if (methodsByName) {\n // If we have method names passed in an array,\n // then we need to flip the key and value here\n // and find the method in the Sugar namespace.\n methodName = method;\n method = sugarNamespace[methodName];\n }\n if (hasOwn(method, 'instance') && canExtend(methodName, method, nativeProto)) {\n instanceMethods[methodName] = method.instance;\n }\n if(hasOwn(method, 'static') && canExtend(methodName, method, nativeClass)) {\n staticMethods[methodName] = method;\n }\n });\n\n // Accessing the extend target each time instead of holding a reference as\n // it may have been overwritten (for example Date by Sinon). Also need to\n // access through the global to allow extension of user-defined namespaces.\n extendNative(nativeClass, staticMethods);\n extendNative(nativeProto, instanceMethods);\n\n if (!methodsByName) {\n // If there are no method names passed, then\n // all methods in the namespace will be extended\n // to the native. This includes all future defined\n // methods, so add a flag here to check later.\n setProperty(sugarNamespace, 'active', true);\n }\n return sugarNamespace;\n };\n\n function defineWithOptionCollect(methodName, instance, args) {\n setProperty(sugarNamespace, methodName, function(arg1, arg2, arg3) {\n var opts = collectDefineOptions(arg1, arg2, arg3);\n defineMethods(sugarNamespace, opts.methods, instance, args, opts.last);\n return sugarNamespace;\n });\n }\n\n /***\n * @method defineStatic(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines static methods on the namespace that can later be extended\n * onto the native globals.\n * @extra Accepts either a single object mapping names to functions, or name\n * and function as two arguments. If `extend` was previously called\n * with no arguments, the method will be immediately mapped to its\n * native when defined.\n *\n * @example\n *\n * Sugar.Number.defineStatic({\n * isOdd: function (num) {\n * return num % 2 === 1;\n * }\n * });\n *\n * @signature defineStatic(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineStatic', STATIC);\n\n /***\n * @method defineInstance(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines methods on the namespace that can later be extended as\n * instance methods onto the native prototype.\n * @extra Accepts either a single object mapping names to functions, or name\n * and function as two arguments. All functions should accept the\n * native for which they are mapped as their first argument, and should\n * never refer to `this`. If `extend` was previously called with no\n * arguments, the method will be immediately mapped to its native when\n * defined.\n *\n * Methods cannot accept more than 4 arguments in addition to the\n * native (5 arguments total). Any additional arguments will not be\n * mapped. If the method needs to accept unlimited arguments, use\n * `defineInstanceWithArguments`. Otherwise if more options are\n * required, use an options object instead.\n *\n * @example\n *\n * Sugar.Number.defineInstance({\n * square: function (num) {\n * return num * num;\n * }\n * });\n *\n * @signature defineInstance(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineInstance', INSTANCE);\n\n /***\n * @method defineInstanceAndStatic(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short A shortcut to define both static and instance methods on the namespace.\n * @extra This method is intended for use with `Object` instance methods. Sugar\n * will not map any methods to `Object.prototype` by default, so defining\n * instance methods as static helps facilitate their proper use.\n *\n * @example\n *\n * Sugar.Object.defineInstanceAndStatic({\n * isAwesome: function (obj) {\n * // check if obj is awesome!\n * }\n * });\n *\n * @signature defineInstanceAndStatic(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineInstanceAndStatic', INSTANCE | STATIC);\n\n\n /***\n * @method defineStaticWithArguments(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines static methods that collect arguments.\n * @extra This method is identical to `defineStatic`, except that when defined\n * methods are called, they will collect any arguments past `n - 1`,\n * where `n` is the number of arguments that the method accepts.\n * Collected arguments will be passed to the method in an array\n * as the last argument defined on the function.\n *\n * @example\n *\n * Sugar.Number.defineStaticWithArguments({\n * addAll: function (num, args) {\n * for (var i = 0; i < args.length; i++) {\n * num += args[i];\n * }\n * return num;\n * }\n * });\n *\n * @signature defineStaticWithArguments(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineStaticWithArguments', STATIC, true);\n\n /***\n * @method defineInstanceWithArguments(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines instance methods that collect arguments.\n * @extra This method is identical to `defineInstance`, except that when\n * defined methods are called, they will collect any arguments past\n * `n - 1`, where `n` is the number of arguments that the method\n * accepts. Collected arguments will be passed to the method as the\n * last argument defined on the function.\n *\n * @example\n *\n * Sugar.Number.defineInstanceWithArguments({\n * addAll: function (num, args) {\n * for (var i = 0; i < args.length; i++) {\n * num += args[i];\n * }\n * return num;\n * }\n * });\n *\n * @signature defineInstanceWithArguments(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineInstanceWithArguments', INSTANCE, true);\n\n /***\n * @method defineStaticPolyfill(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines static methods that are mapped onto the native if they do\n * not already exist.\n * @extra Intended only for use creating polyfills that follow the ECMAScript\n * spec. Accepts either a single object mapping names to functions, or\n * name and function as two arguments. Note that polyfill methods will\n * be immediately mapped onto their native prototype regardless of the\n * use of `extend`.\n *\n * @example\n *\n * Sugar.Object.defineStaticPolyfill({\n * keys: function (obj) {\n * // get keys!\n * }\n * });\n *\n * @signature defineStaticPolyfill(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n setProperty(sugarNamespace, 'defineStaticPolyfill', function(arg1, arg2, arg3) {\n var opts = collectDefineOptions(arg1, arg2, arg3);\n extendNative(globalContext[name], opts.methods, true, opts.last);\n return sugarNamespace;\n });\n\n /***\n * @method defineInstancePolyfill(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines instance methods that are mapped onto the native prototype\n * if they do not already exist.\n * @extra Intended only for use creating polyfills that follow the ECMAScript\n * spec. Accepts either a single object mapping names to functions, or\n * name and function as two arguments. This method differs from\n * `defineInstance` as there is no static signature (as the method\n * is mapped as-is to the native), so it should refer to its `this`\n * object. Note that polyfill methods will be immediately mapped onto\n * their native prototype regardless of the use of `extend`.\n *\n * @example\n *\n * Sugar.Array.defineInstancePolyfill({\n * indexOf: function (arr, el) {\n * // index finding code here!\n * }\n * });\n *\n * @signature defineInstancePolyfill(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n setProperty(sugarNamespace, 'defineInstancePolyfill', function(arg1, arg2, arg3) {\n var opts = collectDefineOptions(arg1, arg2, arg3);\n extendNative(globalContext[name].prototype, opts.methods, true, opts.last);\n // Map instance polyfills to chainable as well.\n forEachProperty(opts.methods, function(fn, methodName) {\n defineChainableMethod(sugarNamespace, methodName, fn);\n });\n return sugarNamespace;\n });\n\n /***\n * @method alias(toName, from)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Aliases one Sugar method to another.\n *\n * @example\n *\n * Sugar.Array.alias('all', 'every');\n *\n * @signature alias(toName, fn)\n * @param {string} toName - Name for new method.\n * @param {string|Function} from - Method to alias, or string shortcut.\n ***/\n setProperty(sugarNamespace, 'alias', function(name, source) {\n var method = typeof source === 'string' ? sugarNamespace[source] : source;\n setMethod(sugarNamespace, name, method);\n return sugarNamespace;\n });\n\n // Each namespace can extend only itself through its .extend method.\n setProperty(sugarNamespace, 'extend', extend);\n\n // Cache the class to namespace relationship for later use.\n namespacesByName[name] = sugarNamespace;\n namespacesByClassString['[object ' + name + ']'] = sugarNamespace;\n\n mapNativeToChainable(name);\n mapObjectChainablesToNamespace(sugarNamespace);\n\n\n // Export\n return Sugar[name] = sugarNamespace;\n }\n\n function setGlobalProperties() {\n setProperty(Sugar, 'VERSION', '2.0.6');\n setProperty(Sugar, 'extend', Sugar);\n setProperty(Sugar, 'toString', toString);\n setProperty(Sugar, 'createNamespace', createNamespace);\n\n setProperty(Sugar, 'util', {\n 'hasOwn': hasOwn,\n 'getOwn': getOwn,\n 'setProperty': setProperty,\n 'classToString': classToString,\n 'defineProperty': defineProperty,\n 'forEachProperty': forEachProperty,\n 'mapNativeToChainable': mapNativeToChainable\n });\n }\n\n function toString() {\n return SUGAR_GLOBAL;\n }\n\n\n // Defining Methods\n\n function defineMethods(sugarNamespace, methods, type, args, flags) {\n forEachProperty(methods, function(method, methodName) {\n var instanceMethod, staticMethod = method;\n if (args) {\n staticMethod = wrapMethodWithArguments(method);\n }\n if (flags) {\n staticMethod.flags = flags;\n }\n\n // A method may define its own custom implementation, so\n // make sure that's not the case before creating one.\n if (type & INSTANCE && !method.instance) {\n instanceMethod = wrapInstanceMethod(method, args);\n setProperty(staticMethod, 'instance', instanceMethod);\n }\n\n if (type & STATIC) {\n setProperty(staticMethod, 'static', true);\n }\n\n setMethod(sugarNamespace, methodName, staticMethod);\n\n if (sugarNamespace.active) {\n // If the namespace has been activated (.extend has been called),\n // then map this method as well.\n sugarNamespace.extend(methodName);\n }\n });\n }\n\n function collectDefineOptions(arg1, arg2, arg3) {\n var methods, last;\n if (typeof arg1 === 'string') {\n methods = {};\n methods[arg1] = arg2;\n last = arg3;\n } else {\n methods = arg1;\n last = arg2;\n }\n return {\n last: last,\n methods: methods\n };\n }\n\n function wrapInstanceMethod(fn, args) {\n return args ? wrapMethodWithArguments(fn, true) : wrapInstanceMethodFixed(fn);\n }\n\n function wrapMethodWithArguments(fn, instance) {\n // Functions accepting enumerated arguments will always have \"args\" as the\n // last argument, so subtract one from the function length to get the point\n // at which to start collecting arguments. If this is an instance method on\n // a prototype, then \"this\" will be pushed into the arguments array so start\n // collecting 1 argument earlier.\n var startCollect = fn.length - 1 - (instance ? 1 : 0);\n return function() {\n var args = [], collectedArgs = [], len;\n if (instance) {\n args.push(this);\n }\n len = Math.max(arguments.length, startCollect);\n // Optimized: no leaking arguments\n for (var i = 0; i < len; i++) {\n if (i < startCollect) {\n args.push(arguments[i]);\n } else {\n collectedArgs.push(arguments[i]);\n }\n }\n args.push(collectedArgs);\n return fn.apply(this, args);\n };\n }\n\n function wrapInstanceMethodFixed(fn) {\n switch(fn.length) {\n // Wrapped instance methods will always be passed the instance\n // as the first argument, but requiring the argument to be defined\n // may cause confusion here, so return the same wrapped function regardless.\n case 0:\n case 1:\n return function() {\n return fn(this);\n };\n case 2:\n return function(a) {\n return fn(this, a);\n };\n case 3:\n return function(a, b) {\n return fn(this, a, b);\n };\n case 4:\n return function(a, b, c) {\n return fn(this, a, b, c);\n };\n case 5:\n return function(a, b, c, d) {\n return fn(this, a, b, c, d);\n };\n }\n }\n\n // Method helpers\n\n function extendNative(target, source, polyfill, override) {\n forEachProperty(source, function(method, name) {\n if (polyfill && !override && target[name]) {\n // Method exists, so bail.\n return;\n }\n setProperty(target, name, method);\n });\n }\n\n function setMethod(sugarNamespace, methodName, method) {\n sugarNamespace[methodName] = method;\n if (method.instance) {\n defineChainableMethod(sugarNamespace, methodName, method.instance, true);\n }\n }\n\n\n // Chainables\n\n function getNewChainableClass(name) {\n var fn = function SugarChainable(obj, arg) {\n if (!(this instanceof fn)) {\n return new fn(obj, arg);\n }\n if (this.constructor !== fn) {\n // Allow modules to define their own constructors.\n obj = this.constructor.apply(obj, arguments);\n }\n this.raw = obj;\n };\n setProperty(fn, 'toString', function() {\n return SUGAR_GLOBAL + name;\n });\n setProperty(fn.prototype, 'valueOf', function() {\n return this.raw;\n });\n return fn;\n }\n\n function defineChainableMethod(sugarNamespace, methodName, fn) {\n var wrapped = wrapWithChainableResult(fn), existing, collision, dcp;\n dcp = DefaultChainable.prototype;\n existing = dcp[methodName];\n\n // If the method was previously defined on the default chainable, then a\n // collision exists, so set the method to a disambiguation function that will\n // lazily evaluate the object and find it's associated chainable. An extra\n // check is required to avoid false positives from Object inherited methods.\n collision = existing && existing !== Object.prototype[methodName];\n\n // The disambiguation function is only required once.\n if (!existing || !existing.disambiguate) {\n dcp[methodName] = collision ? disambiguateMethod(methodName) : wrapped;\n }\n\n // The target chainable always receives the wrapped method. Additionally,\n // if the target chainable is Sugar.Object, then map the wrapped method\n // to all other namespaces as well if they do not define their own method\n // of the same name. This way, a Sugar.Number will have methods like\n // isEqual that can be called on any object without having to traverse up\n // the prototype chain and perform disambiguation, which costs cycles.\n // Note that the \"if\" block below actually does nothing on init as Object\n // goes first and no other namespaces exist yet. However it needs to be\n // here as Object instance methods defined later also need to be mapped\n // back onto existing namespaces.\n sugarNamespace.prototype[methodName] = wrapped;\n if (sugarNamespace === Sugar.Object) {\n mapObjectChainableToAllNamespaces(methodName, wrapped);\n }\n }\n\n function mapObjectChainablesToNamespace(sugarNamespace) {\n forEachProperty(Sugar.Object && Sugar.Object.prototype, function(val, methodName) {\n if (typeof val === 'function') {\n setObjectChainableOnNamespace(sugarNamespace, methodName, val);\n }\n });\n }\n\n function mapObjectChainableToAllNamespaces(methodName, fn) {\n forEachProperty(namespacesByName, function(sugarNamespace) {\n setObjectChainableOnNamespace(sugarNamespace, methodName, fn);\n });\n }\n\n function setObjectChainableOnNamespace(sugarNamespace, methodName, fn) {\n var proto = sugarNamespace.prototype;\n if (!hasOwn(proto, methodName)) {\n proto[methodName] = fn;\n }\n }\n\n function wrapWithChainableResult(fn) {\n return function() {\n return new DefaultChainable(fn.apply(this.raw, arguments));\n };\n }\n\n function disambiguateMethod(methodName) {\n var fn = function() {\n var raw = this.raw, sugarNamespace;\n if (raw != null) {\n // Find the Sugar namespace for this unknown.\n sugarNamespace = namespacesByClassString[classToString(raw)];\n }\n if (!sugarNamespace) {\n // If no sugarNamespace can be resolved, then default\n // back to Sugar.Object so that undefined and other\n // non-supported types can still have basic object\n // methods called on them, such as type checks.\n sugarNamespace = Sugar.Object;\n }\n\n return new sugarNamespace(raw)[methodName].apply(this, arguments);\n };\n fn.disambiguate = true;\n return fn;\n }\n\n function mapNativeToChainable(name, methodNames) {\n var sugarNamespace = namespacesByName[name],\n nativeProto = globalContext[name].prototype;\n\n if (!methodNames && ownPropertyNames) {\n methodNames = ownPropertyNames(nativeProto);\n }\n\n forEachProperty(methodNames, function(methodName) {\n if (nativeMethodProhibited(methodName)) {\n // Sugar chainables have their own constructors as well as \"valueOf\"\n // methods, so exclude them here. The __proto__ argument should be trapped\n // by the function check below, however simply accessing this property on\n // Object.prototype causes QML to segfault, so pre-emptively excluding it.\n return;\n }\n try {\n var fn = nativeProto[methodName];\n if (typeof fn !== 'function') {\n // Bail on anything not a function.\n return;\n }\n } catch (e) {\n // Function.prototype has properties that\n // will throw errors when accessed.\n return;\n }\n defineChainableMethod(sugarNamespace, methodName, fn);\n });\n }\n\n function nativeMethodProhibited(methodName) {\n return methodName === 'constructor' ||\n methodName === 'valueOf' ||\n methodName === '__proto__';\n }\n\n\n // Util\n\n // Internal references\n var ownPropertyNames = Object.getOwnPropertyNames,\n internalToString = Object.prototype.toString,\n internalHasOwnProperty = Object.prototype.hasOwnProperty;\n\n // Defining this as a variable here as the ES5 module\n // overwrites it to patch DONTENUM.\n var forEachProperty = function (obj, fn) {\n for(var key in obj) {\n if (!hasOwn(obj, key)) continue;\n if (fn.call(obj, obj[key], key, obj) === false) break;\n }\n };\n\n // istanbul ignore next\n function definePropertyShim(obj, prop, descriptor) {\n obj[prop] = descriptor.value;\n }\n\n function setProperty(target, name, value, enumerable) {\n defineProperty(target, name, {\n value: value,\n enumerable: !!enumerable,\n configurable: true,\n writable: true\n });\n }\n\n // PERF: Attempts to speed this method up get very Heisenbergy. Quickly\n // returning based on typeof works for primitives, but slows down object\n // types. Even === checks on null and undefined (no typeof) will end up\n // basically breaking even. This seems to be as fast as it can go.\n function classToString(obj) {\n return internalToString.call(obj);\n }\n\n function hasOwn(obj, prop) {\n return !!obj && internalHasOwnProperty.call(obj, prop);\n }\n\n function getOwn(obj, prop) {\n if (hasOwn(obj, prop)) {\n return obj[prop];\n }\n }\n\n setupGlobal();\n\n /***\n * @module Common\n * @description Internal utility and common methods.\n ***/\n\n // Flag allowing native methods to be enhanced.\n var ENHANCEMENTS_FLAG = 'enhance';\n\n // For type checking, etc. Excludes object as this is more nuanced.\n var NATIVE_TYPES = 'Boolean Number String Date RegExp Function Array Error Set Map';\n\n // Do strings have no keys?\n var NO_KEYS_IN_STRING_OBJECTS = !('0' in Object('a'));\n\n // Prefix for private properties.\n var PRIVATE_PROP_PREFIX = '_sugar_';\n\n // Matches 1..2 style ranges in properties.\n var PROPERTY_RANGE_REG = /^(.*?)\\[([-\\d]*)\\.\\.([-\\d]*)\\](.*)$/;\n\n // WhiteSpace/LineTerminator as defined in ES5.1 plus Unicode characters in the Space, Separator category.\n var TRIM_CHARS = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u2028\\u2029\\u3000\\uFEFF';\n\n // Regex for matching a formatted string.\n var STRING_FORMAT_REG = /([{}])\\1|{([^}]*)}|(%)%|(%(\\w*))/g;\n\n // Common chars\n var HALF_WIDTH_ZERO = 0x30,\n FULL_WIDTH_ZERO = 0xff10,\n HALF_WIDTH_PERIOD = '.',\n FULL_WIDTH_PERIOD = '.',\n HALF_WIDTH_COMMA = ',',\n OPEN_BRACE = '{',\n CLOSE_BRACE = '}';\n\n // Namespace aliases\n var sugarObject = Sugar.Object,\n sugarArray = Sugar.Array,\n sugarDate = Sugar.Date,\n sugarString = Sugar.String,\n sugarNumber = Sugar.Number,\n sugarFunction = Sugar.Function,\n sugarRegExp = Sugar.RegExp;\n\n // Class checks\n var isSerializable,\n isBoolean, isNumber, isString,\n isDate, isRegExp, isFunction,\n isArray, isSet, isMap, isError;\n\n function buildClassChecks() {\n\n var knownTypes = {};\n\n function addCoreTypes() {\n\n var names = spaceSplit(NATIVE_TYPES);\n\n isBoolean = buildPrimitiveClassCheck(names[0]);\n isNumber = buildPrimitiveClassCheck(names[1]);\n isString = buildPrimitiveClassCheck(names[2]);\n\n isDate = buildClassCheck(names[3]);\n isRegExp = buildClassCheck(names[4]);\n\n // Wanted to enhance performance here by using simply \"typeof\"\n // but Firefox has two major issues that make this impossible,\n // one fixed, the other not, so perform a full class check here.\n //\n // 1. Regexes can be typeof \"function\" in FF < 3\n // https://bugzilla.mozilla.org/show_bug.cgi?id=61911 (fixed)\n //\n // 2. HTMLEmbedElement and HTMLObjectElement are be typeof \"function\"\n // https://bugzilla.mozilla.org/show_bug.cgi?id=268945 (won't fix)\n isFunction = buildClassCheck(names[5]);\n\n // istanbul ignore next\n isArray = Array.isArray || buildClassCheck(names[6]);\n isError = buildClassCheck(names[7]);\n\n isSet = buildClassCheck(names[8], typeof Set !== 'undefined' && Set);\n isMap = buildClassCheck(names[9], typeof Map !== 'undefined' && Map);\n\n // Add core types as known so that they can be checked by value below,\n // notably excluding Functions and adding Arguments and Error.\n addKnownType('Arguments');\n addKnownType(names[0]);\n addKnownType(names[1]);\n addKnownType(names[2]);\n addKnownType(names[3]);\n addKnownType(names[4]);\n addKnownType(names[6]);\n\n }\n\n function addArrayTypes() {\n var types = 'Int8 Uint8 Uint8Clamped Int16 Uint16 Int32 Uint32 Float32 Float64';\n forEach(spaceSplit(types), function(str) {\n addKnownType(str + 'Array');\n });\n }\n\n function addKnownType(className) {\n var str = '[object '+ className +']';\n knownTypes[str] = true;\n }\n\n function isKnownType(className) {\n return knownTypes[className];\n }\n\n function buildClassCheck(className, globalObject) {\n // istanbul ignore if\n if (globalObject && isClass(new globalObject, 'Object')) {\n return getConstructorClassCheck(globalObject);\n } else {\n return getToStringClassCheck(className);\n }\n }\n\n // Map and Set may be [object Object] in certain IE environments.\n // In this case we need to perform a check using the constructor\n // instead of Object.prototype.toString.\n // istanbul ignore next\n function getConstructorClassCheck(obj) {\n var ctorStr = String(obj);\n return function(obj) {\n return String(obj.constructor) === ctorStr;\n };\n }\n\n function getToStringClassCheck(className) {\n return function(obj, str) {\n // perf: Returning up front on instanceof appears to be slower.\n return isClass(obj, className, str);\n };\n }\n\n function buildPrimitiveClassCheck(className) {\n var type = className.toLowerCase();\n return function(obj) {\n var t = typeof obj;\n return t === type || t === 'object' && isClass(obj, className);\n };\n }\n\n addCoreTypes();\n addArrayTypes();\n\n isSerializable = function(obj, className) {\n // Only known objects can be serialized. This notably excludes functions,\n // host objects, Symbols (which are matched by reference), and instances\n // of classes. The latter can arguably be matched by value, but\n // distinguishing between these and host objects -- which should never be\n // compared by value -- is very tricky so not dealing with it here.\n return isKnownType(className) || isPlainObject(obj, className);\n };\n\n }\n\n function isClass(obj, className, str) {\n if (!str) {\n str = classToString(obj);\n }\n return str === '[object '+ className +']';\n }\n\n // Wrapping the core's \"define\" methods to\n // save a few bytes in the minified script.\n function wrapNamespace(method) {\n return function(sugarNamespace, arg1, arg2) {\n sugarNamespace[method](arg1, arg2);\n };\n }\n\n // Method define aliases\n var alias = wrapNamespace('alias'),\n defineStatic = wrapNamespace('defineStatic'),\n defineInstance = wrapNamespace('defineInstance'),\n defineStaticPolyfill = wrapNamespace('defineStaticPolyfill'),\n defineInstancePolyfill = wrapNamespace('defineInstancePolyfill'),\n defineInstanceAndStatic = wrapNamespace('defineInstanceAndStatic'),\n defineInstanceWithArguments = wrapNamespace('defineInstanceWithArguments');\n\n function defineInstanceSimilar(sugarNamespace, set, fn, flags) {\n defineInstance(sugarNamespace, collectSimilarMethods(set, fn), flags);\n }\n\n function defineInstanceAndStaticSimilar(sugarNamespace, set, fn, flags) {\n defineInstanceAndStatic(sugarNamespace, collectSimilarMethods(set, fn), flags);\n }\n\n function collectSimilarMethods(set, fn) {\n var methods = {};\n if (isString(set)) {\n set = spaceSplit(set);\n }\n forEach(set, function(el, i) {\n fn(methods, el, i);\n });\n return methods;\n }\n\n // This song and dance is to fix methods to a different length\n // from what they actually accept in order to stay in line with\n // spec. Additionally passing argument length, as some methods\n // throw assertion errors based on this (undefined check is not\n // enough). Fortunately for now spec is such that passing 3\n // actual arguments covers all requirements. Note that passing\n // the argument length also forces the compiler to not rewrite\n // length of the compiled function.\n function fixArgumentLength(fn) {\n var staticFn = function(a) {\n var args = arguments;\n return fn(a, args[1], args[2], args.length - 1);\n };\n staticFn.instance = function(b) {\n var args = arguments;\n return fn(this, b, args[1], args.length);\n };\n return staticFn;\n }\n\n function defineAccessor(namespace, name, fn) {\n setProperty(namespace, name, fn);\n }\n\n function defineOptionsAccessor(namespace, defaults) {\n var obj = simpleClone(defaults);\n\n function getOption(name) {\n return obj[name];\n }\n\n function setOption(arg1, arg2) {\n var options;\n if (arguments.length === 1) {\n options = arg1;\n } else {\n options = {};\n options[arg1] = arg2;\n }\n forEachProperty(options, function(val, name) {\n if (val === null) {\n val = defaults[name];\n }\n obj[name] = val;\n });\n }\n\n defineAccessor(namespace, 'getOption', getOption);\n defineAccessor(namespace, 'setOption', setOption);\n return getOption;\n }\n\n // For methods defined directly on the prototype like Range\n function defineOnPrototype(ctor, methods) {\n var proto = ctor.prototype;\n forEachProperty(methods, function(val, key) {\n proto[key] = val;\n });\n }\n\n // Argument helpers\n\n function assertArgument(exists) {\n if (!exists) {\n throw new TypeError('Argument required');\n }\n }\n\n function assertCallable(obj) {\n if (!isFunction(obj)) {\n throw new TypeError('Function is not callable');\n }\n }\n\n function assertArray(obj) {\n if (!isArray(obj)) {\n throw new TypeError('Array required');\n }\n }\n\n function assertWritable(obj) {\n if (isPrimitive(obj)) {\n // If strict mode is active then primitives will throw an\n // error when attempting to write properties. We can't be\n // sure if strict mode is available, so pre-emptively\n // throw an error here to ensure consistent behavior.\n throw new TypeError('Property cannot be written');\n }\n }\n\n // Coerces an object to a positive integer.\n // Does not allow Infinity.\n function coercePositiveInteger(n) {\n n = +n || 0;\n if (n < 0 || !isNumber(n) || !isFinite(n)) {\n throw new RangeError('Invalid number');\n }\n return trunc(n);\n }\n\n\n // General helpers\n\n function isDefined(o) {\n return o !== undefined;\n }\n\n function isUndefined(o) {\n return o === undefined;\n }\n\n function privatePropertyAccessor(key) {\n var privateKey = PRIVATE_PROP_PREFIX + key;\n return function(obj, val) {\n if (arguments.length > 1) {\n setProperty(obj, privateKey, val);\n return obj;\n }\n return obj[privateKey];\n };\n }\n\n function setChainableConstructor(sugarNamespace, createFn) {\n sugarNamespace.prototype.constructor = function() {\n return createFn.apply(this, arguments);\n };\n }\n\n // Fuzzy matching helpers\n\n function getMatcher(f) {\n if (!isPrimitive(f)) {\n var className = classToString(f);\n if (isRegExp(f, className)) {\n return regexMatcher(f);\n } else if (isDate(f, className)) {\n return dateMatcher(f);\n } else if (isFunction(f, className)) {\n return functionMatcher(f);\n } else if (isPlainObject(f, className)) {\n return fuzzyMatcher(f);\n }\n }\n // Default is standard isEqual\n return defaultMatcher(f);\n }\n\n function fuzzyMatcher(obj) {\n var matchers = {};\n return function(el, i, arr) {\n var matched = true;\n if (!isObjectType(el)) {\n return false;\n }\n forEachProperty(obj, function(val, key) {\n matchers[key] = getOwn(matchers, key) || getMatcher(val);\n if (matchers[key].call(arr, el[key], i, arr) === false) {\n matched = false;\n }\n return matched;\n });\n return matched;\n };\n }\n\n function defaultMatcher(f) {\n return function(el) {\n return isEqual(el, f);\n };\n }\n\n function regexMatcher(reg) {\n reg = RegExp(reg);\n return function(el) {\n return reg.test(el);\n };\n }\n\n function dateMatcher(d) {\n var ms = d.getTime();\n return function(el) {\n return !!(el && el.getTime) && el.getTime() === ms;\n };\n }\n\n function functionMatcher(fn) {\n return function(el, i, arr) {\n // Return true up front if match by reference\n return el === fn || fn.call(arr, el, i, arr);\n };\n }\n\n // Object helpers\n\n function getKeys(obj) {\n return Object.keys(obj);\n }\n\n function deepHasProperty(obj, key, any) {\n return handleDeepProperty(obj, key, any, true);\n }\n\n function deepGetProperty(obj, key, any) {\n return handleDeepProperty(obj, key, any, false);\n }\n\n function deepSetProperty(obj, key, val) {\n handleDeepProperty(obj, key, false, false, true, false, val);\n return obj;\n }\n\n function handleDeepProperty(obj, key, any, has, fill, fillLast, val) {\n var ns, bs, ps, cbi, set, isLast, isPush, isIndex, nextIsIndex, exists;\n ns = obj;\n if (key == null) return;\n\n if (isObjectType(key)) {\n // Allow array and array-like accessors\n bs = [key];\n } else {\n key = String(key);\n if (key.indexOf('..') !== -1) {\n return handleArrayIndexRange(obj, key, any, val);\n }\n bs = key.split('[');\n }\n\n set = isDefined(val);\n\n for (var i = 0, blen = bs.length; i < blen; i++) {\n ps = bs[i];\n\n if (isString(ps)) {\n ps = periodSplit(ps);\n }\n\n for (var j = 0, plen = ps.length; j < plen; j++) {\n key = ps[j];\n\n // Is this the last key?\n isLast = i === blen - 1 && j === plen - 1;\n\n // Index of the closing ]\n cbi = key.indexOf(']');\n\n // Is the key an array index?\n isIndex = cbi !== -1;\n\n // Is this array push syntax \"[]\"?\n isPush = set && cbi === 0;\n\n // If the bracket split was successful and this is the last element\n // in the dot split, then we know the next key will be an array index.\n nextIsIndex = blen > 1 && j === plen - 1;\n\n if (isPush) {\n // Set the index to the end of the array\n key = ns.length;\n } else if (isIndex) {\n // Remove the closing ]\n key = key.slice(0, -1);\n }\n\n // If the array index is less than 0, then\n // add its length to allow negative indexes.\n if (isIndex && key < 0) {\n key = +key + ns.length;\n }\n\n // Bracket keys may look like users[5] or just [5], so the leading\n // characters are optional. We can enter the namespace if this is the\n // 2nd part, if there is only 1 part, or if there is an explicit key.\n if (i || key || blen === 1) {\n\n // TODO: need to be sure this check handles ''.length when\n // we refactor.\n exists = any ? key in Object(ns) : hasOwn(ns, key);\n\n // Non-existent namespaces are only filled if they are intermediate\n // (not at the end) or explicitly filling the last.\n if (fill && (!isLast || fillLast) && !exists) {\n // For our purposes, last only needs to be an array.\n ns = ns[key] = nextIsIndex || (fillLast && isLast) ? [] : {};\n continue;\n }\n\n if (has) {\n if (isLast || !exists) {\n return exists;\n }\n } else if (set && isLast) {\n assertWritable(ns);\n ns[key] = val;\n }\n\n ns = exists ? ns[key] : undefined;\n }\n\n }\n }\n return ns;\n }\n\n // Get object property with support for 0..1 style range notation.\n function handleArrayIndexRange(obj, key, any, val) {\n var match, start, end, leading, trailing, arr, set;\n match = key.match(PROPERTY_RANGE_REG);\n if (!match) {\n return;\n }\n\n set = isDefined(val);\n leading = match[1];\n\n if (leading) {\n arr = handleDeepProperty(obj, leading, any, false, set ? true : false, true);\n } else {\n arr = obj;\n }\n\n assertArray(arr);\n\n trailing = match[4];\n start = match[2] ? +match[2] : 0;\n end = match[3] ? +match[3] : arr.length;\n\n // A range of 0..1 is inclusive, so we need to add 1 to the end. If this\n // pushes the index from -1 to 0, then set it to the full length of the\n // array, otherwise it will return nothing.\n end = end === -1 ? arr.length : end + 1;\n\n if (set) {\n for (var i = start; i < end; i++) {\n handleDeepProperty(arr, i + trailing, any, false, true, false, val);\n }\n } else {\n arr = arr.slice(start, end);\n\n // If there are trailing properties, then they need to be mapped for each\n // element in the array.\n if (trailing) {\n if (trailing.charAt(0) === HALF_WIDTH_PERIOD) {\n // Need to chomp the period if one is trailing after the range. We\n // can't do this at the regex level because it will be required if\n // we're setting the value as it needs to be concatentated together\n // with the array index to be set.\n trailing = trailing.slice(1);\n }\n return map(arr, function(el) {\n return handleDeepProperty(el, trailing);\n });\n }\n }\n return arr;\n }\n\n function getOwnKey(obj, key) {\n if (hasOwn(obj, key)) {\n return key;\n }\n }\n\n function hasProperty(obj, prop) {\n return !isPrimitive(obj) && prop in obj;\n }\n\n function isObjectType(obj, type) {\n return !!obj && (type || typeof obj) === 'object';\n }\n\n function isPrimitive(obj, type) {\n type = type || typeof obj;\n return obj == null || type === 'string' || type === 'number' || type === 'boolean';\n }\n\n function isPlainObject(obj, className) {\n return isObjectType(obj) &&\n isClass(obj, 'Object', className) &&\n hasValidPlainObjectPrototype(obj) &&\n hasOwnEnumeratedProperties(obj);\n }\n\n function hasValidPlainObjectPrototype(obj) {\n var hasToString = 'toString' in obj;\n var hasConstructor = 'constructor' in obj;\n // An object created with Object.create(null) has no methods in the\n // prototype chain, so check if any are missing. The additional hasToString\n // check is for false positives on some host objects in old IE which have\n // toString but no constructor. If the object has an inherited constructor,\n // then check if it is Object (the \"isPrototypeOf\" tapdance here is a more\n // robust way of ensuring this if the global has been hijacked). Note that\n // accessing the constructor directly (without \"in\" or \"hasOwnProperty\")\n // will throw a permissions error in IE8 on cross-domain windows.\n return (!hasConstructor && !hasToString) ||\n (hasConstructor && !hasOwn(obj, 'constructor') &&\n hasOwn(obj.constructor.prototype, 'isPrototypeOf'));\n }\n\n function hasOwnEnumeratedProperties(obj) {\n // Plain objects are generally defined as having enumerated properties\n // all their own, however in early IE environments without defineProperty,\n // there may also be enumerated methods in the prototype chain, so check\n // for both of these cases.\n var objectProto = Object.prototype;\n for (var key in obj) {\n var val = obj[key];\n if (!hasOwn(obj, key) && val !== objectProto[key]) {\n return false;\n }\n }\n return true;\n }\n\n function simpleRepeat(n, fn) {\n for (var i = 0; i < n; i++) {\n fn(i);\n }\n }\n\n function simpleClone(obj) {\n return simpleMerge({}, obj);\n }\n\n // TODO: Use Object.assign here going forward.\n function simpleMerge(target, source) {\n forEachProperty(source, function(val, key) {\n target[key] = val;\n });\n return target;\n }\n\n // Make primtives types like strings into objects.\n function coercePrimitiveToObject(obj) {\n if (isPrimitive(obj)) {\n obj = Object(obj);\n }\n // istanbul ignore next\n if (NO_KEYS_IN_STRING_OBJECTS && isString(obj)) {\n forceStringCoercion(obj);\n }\n return obj;\n }\n\n // Force strings to have their indexes set in\n // environments that don't do this automatically.\n // istanbul ignore next\n function forceStringCoercion(obj) {\n var i = 0, chr;\n while (chr = obj.charAt(i)) {\n obj[i++] = chr;\n }\n }\n\n // Equality helpers\n\n // Perf\n function isEqual(a, b, stack) {\n var aClass, bClass;\n if (a === b) {\n // Return quickly up front when matched by reference,\n // but be careful about 0 !== -0.\n return a !== 0 || 1 / a === 1 / b;\n }\n aClass = classToString(a);\n bClass = classToString(b);\n if (aClass !== bClass) {\n return false;\n }\n\n if (isSerializable(a, aClass) && isSerializable(b, bClass)) {\n return objectIsEqual(a, b, aClass, stack);\n } else if (isSet(a, aClass) && isSet(b, bClass)) {\n return a.size === b.size && isEqual(setToArray(a), setToArray(b), stack);\n } else if (isMap(a, aClass) && isMap(b, bClass)) {\n return a.size === b.size && isEqual(mapToArray(a), mapToArray(b), stack);\n } else if (isError(a, aClass) && isError(b, bClass)) {\n return a.toString() === b.toString();\n }\n\n return false;\n }\n\n // Perf\n function objectIsEqual(a, b, aClass, stack) {\n var aType = typeof a, bType = typeof b, propsEqual, count;\n if (aType !== bType) {\n return false;\n }\n if (isObjectType(a.valueOf())) {\n if (a.length !== b.length) {\n // perf: Quickly returning up front for arrays.\n return false;\n }\n count = 0;\n propsEqual = true;\n iterateWithCyclicCheck(a, false, stack, function(key, val, cyc, stack) {\n if (!cyc && (!(key in b) || !isEqual(val, b[key], stack))) {\n propsEqual = false;\n }\n count++;\n return propsEqual;\n });\n if (!propsEqual || count !== getKeys(b).length) {\n return false;\n }\n }\n // Stringifying the value handles NaN, wrapped primitives, dates, and errors in one go.\n return a.valueOf().toString() === b.valueOf().toString();\n }\n\n // Serializes an object in a way that will provide a token unique\n // to the type, class, and value of an object. Host objects, class\n // instances etc, are not serializable, and are held in an array\n // of references that will return the index as a unique identifier\n // for the object. This array is passed from outside so that the\n // calling function can decide when to dispose of this array.\n function serializeInternal(obj, refs, stack) {\n var type = typeof obj, sign = '', className, value, ref;\n\n // Return up front on\n if (1 / obj === -Infinity) {\n sign = '-';\n }\n\n // Return quickly for primitives to save cycles\n if (isPrimitive(obj, type) && !isRealNaN(obj)) {\n return type + sign + obj;\n }\n\n className = classToString(obj);\n\n if (!isSerializable(obj, className)) {\n ref = indexOf(refs, obj);\n if (ref === -1) {\n ref = refs.length;\n refs.push(obj);\n }\n return ref;\n } else if (isObjectType(obj)) {\n value = serializeDeep(obj, refs, stack) + obj.toString();\n } else if (obj.valueOf) {\n value = obj.valueOf();\n }\n return type + className + sign + value;\n }\n\n function serializeDeep(obj, refs, stack) {\n var result = '';\n iterateWithCyclicCheck(obj, true, stack, function(key, val, cyc, stack) {\n result += cyc ? 'CYC' : key + serializeInternal(val, refs, stack);\n });\n return result;\n }\n\n function iterateWithCyclicCheck(obj, sortedKeys, stack, fn) {\n\n function next(val, key) {\n var cyc = false;\n\n // Allowing a step into the structure before triggering this check to save\n // cycles on standard JSON structures and also to try as hard as possible to\n // catch basic properties that may have been modified.\n if (stack.length > 1) {\n var i = stack.length;\n while (i--) {\n if (stack[i] === val) {\n cyc = true;\n }\n }\n }\n\n stack.push(val);\n fn(key, val, cyc, stack);\n stack.pop();\n }\n\n function iterateWithSortedKeys() {\n // Sorted keys is required for serialization, where object order\n // does not matter but stringified order does.\n var arr = getKeys(obj).sort(), key;\n for (var i = 0; i < arr.length; i++) {\n key = arr[i];\n next(obj[key], arr[i]);\n }\n }\n\n // This method for checking for cyclic structures was egregiously stolen from\n // the ingenious method by @kitcambridge from the Underscore script:\n // https://github.com/documentcloud/underscore/issues/240\n if (!stack) {\n stack = [];\n }\n\n if (sortedKeys) {\n iterateWithSortedKeys();\n } else {\n forEachProperty(obj, next);\n }\n }\n\n\n // Array helpers\n\n function isArrayIndex(n) {\n return n >>> 0 == n && n != 0xFFFFFFFF;\n }\n\n function iterateOverSparseArray(arr, fn, fromIndex, loop) {\n var indexes = getSparseArrayIndexes(arr, fromIndex, loop), index;\n for (var i = 0, len = indexes.length; i < len; i++) {\n index = indexes[i];\n fn.call(arr, arr[index], index, arr);\n }\n return arr;\n }\n\n // It's unclear whether or not sparse arrays qualify as \"simple enumerables\".\n // If they are not, however, the wrapping function will be deoptimized, so\n // isolate here (also to share between es5 and array modules).\n function getSparseArrayIndexes(arr, fromIndex, loop, fromRight) {\n var indexes = [], i;\n for (i in arr) {\n // istanbul ignore next\n if (isArrayIndex(i) && (loop || (fromRight ? i <= fromIndex : i >= fromIndex))) {\n indexes.push(+i);\n }\n }\n indexes.sort(function(a, b) {\n var aLoop = a > fromIndex;\n var bLoop = b > fromIndex;\n // This block cannot be reached unless ES5 methods are being shimmed.\n // istanbul ignore if\n if (aLoop !== bLoop) {\n return aLoop ? -1 : 1;\n }\n return a - b;\n });\n return indexes;\n }\n\n function getEntriesForIndexes(obj, find, loop, isString) {\n var result, length = obj.length;\n if (!isArray(find)) {\n return entryAtIndex(obj, find, length, loop, isString);\n }\n result = new Array(find.length);\n forEach(find, function(index, i) {\n result[i] = entryAtIndex(obj, index, length, loop, isString);\n });\n return result;\n }\n\n function getNormalizedIndex(index, length, loop) {\n if (index && loop) {\n index = index % length;\n }\n if (index < 0) index = length + index;\n return index;\n }\n\n function entryAtIndex(obj, index, length, loop, isString) {\n index = getNormalizedIndex(index, length, loop);\n return isString ? obj.charAt(index) : obj[index];\n }\n\n function mapWithShortcuts(el, f, context, mapArgs) {\n if (!f) {\n return el;\n } else if (f.apply) {\n return f.apply(context, mapArgs);\n } else if (isArray(f)) {\n return map(f, function(m) {\n return mapWithShortcuts(el, m, context, mapArgs);\n });\n } else if (isFunction(el[f])) {\n return el[f].call(el);\n } else {\n return deepGetProperty(el, f, true);\n }\n }\n\n function spaceSplit(str) {\n return str.split(' ');\n }\n\n function commaSplit(str) {\n return str.split(HALF_WIDTH_COMMA);\n }\n\n function periodSplit(str) {\n return str.split(HALF_WIDTH_PERIOD);\n }\n\n function forEach(arr, fn) {\n for (var i = 0, len = arr.length; i < len; i++) {\n if (!(i in arr)) {\n return iterateOverSparseArray(arr, fn, i);\n }\n fn(arr[i], i);\n }\n }\n\n function filter(arr, fn) {\n var result = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n var el = arr[i];\n if (i in arr && fn(el, i)) {\n result.push(el);\n }\n }\n return result;\n }\n\n function map(arr, fn) {\n // perf: Not using fixed array len here as it may be sparse.\n var result = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n if (i in arr) {\n result.push(fn(arr[i], i));\n }\n }\n return result;\n }\n\n function indexOf(arr, el) {\n for (var i = 0, len = arr.length; i < len; i++) {\n if (i in arr && arr[i] === el) return i;\n }\n return -1;\n }\n\n // Number helpers\n\n // istanbul ignore next\n var trunc = Math.trunc || function(n) {\n if (n === 0 || !isFinite(n)) return n;\n return n < 0 ? ceil(n) : floor(n);\n };\n\n function isRealNaN(obj) {\n // This is only true of NaN\n return obj != null && obj !== obj;\n }\n\n function withPrecision(val, precision, fn) {\n var multiplier = pow(10, abs(precision || 0));\n fn = fn || round;\n if (precision < 0) multiplier = 1 / multiplier;\n return fn(val * multiplier) / multiplier;\n }\n\n function padNumber(num, place, sign, base, replacement) {\n var str = abs(num).toString(base || 10);\n str = repeatString(replacement || '0', place - str.replace(/\\.\\d+/, '').length) + str;\n if (sign || num < 0) {\n str = (num < 0 ? '-' : '+') + str;\n }\n return str;\n }\n\n function getOrdinalSuffix(num) {\n if (num >= 11 && num <= 13) {\n return 'th';\n } else {\n switch(num % 10) {\n case 1: return 'st';\n case 2: return 'nd';\n case 3: return 'rd';\n default: return 'th';\n }\n }\n }\n\n // Fullwidth number helpers\n var fullWidthNumberReg, fullWidthNumberMap, fullWidthNumbers;\n\n function buildFullWidthNumber() {\n var fwp = FULL_WIDTH_PERIOD, hwp = HALF_WIDTH_PERIOD, hwc = HALF_WIDTH_COMMA, fwn = '';\n fullWidthNumberMap = {};\n for (var i = 0, digit; i <= 9; i++) {\n digit = chr(i + FULL_WIDTH_ZERO);\n fwn += digit;\n fullWidthNumberMap[digit] = chr(i + HALF_WIDTH_ZERO);\n }\n fullWidthNumberMap[hwc] = '';\n fullWidthNumberMap[fwp] = hwp;\n // Mapping this to itself to capture it easily\n // in stringToNumber to detect decimals later.\n fullWidthNumberMap[hwp] = hwp;\n fullWidthNumberReg = allCharsReg(fwn + fwp + hwc + hwp);\n fullWidthNumbers = fwn;\n }\n\n // Takes into account full-width characters, commas, and decimals.\n function stringToNumber(str, base) {\n var sanitized, isDecimal;\n sanitized = str.replace(fullWidthNumberReg, function(chr) {\n var replacement = getOwn(fullWidthNumberMap, chr);\n if (replacement === HALF_WIDTH_PERIOD) {\n isDecimal = true;\n }\n return replacement;\n });\n return isDecimal ? parseFloat(sanitized) : parseInt(sanitized, base || 10);\n }\n\n // Math aliases\n var abs = Math.abs,\n pow = Math.pow,\n min = Math.min,\n max = Math.max,\n ceil = Math.ceil,\n floor = Math.floor,\n round = Math.round;\n\n\n // String helpers\n\n var chr = String.fromCharCode;\n\n function trim(str) {\n return str.trim();\n }\n\n function repeatString(str, num) {\n var result = '';\n str = str.toString();\n while (num > 0) {\n if (num & 1) {\n result += str;\n }\n if (num >>= 1) {\n str += str;\n }\n }\n return result;\n }\n\n function simpleCapitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n function createFormatMatcher(bracketMatcher, percentMatcher, precheck) {\n\n var reg = STRING_FORMAT_REG;\n var compileMemoized = memoizeFunction(compile);\n\n function getToken(format, match) {\n var get, token, literal, fn;\n var bKey = match[2];\n var pLit = match[3];\n var pKey = match[5];\n if (match[4] && percentMatcher) {\n token = pKey;\n get = percentMatcher;\n } else if (bKey) {\n token = bKey;\n get = bracketMatcher;\n } else if (pLit && percentMatcher) {\n literal = pLit;\n } else {\n literal = match[1] || match[0];\n }\n if (get) {\n assertPassesPrecheck(precheck, bKey, pKey);\n fn = function(obj, opt) {\n return get(obj, token, opt);\n };\n }\n format.push(fn || getLiteral(literal));\n }\n\n function getSubstring(format, str, start, end) {\n if (end > start) {\n var sub = str.slice(start, end);\n assertNoUnmatched(sub, OPEN_BRACE);\n assertNoUnmatched(sub, CLOSE_BRACE);\n format.push(function() {\n return sub;\n });\n }\n }\n\n function getLiteral(str) {\n return function() {\n return str;\n };\n }\n\n function assertPassesPrecheck(precheck, bt, pt) {\n if (precheck && !precheck(bt, pt)) {\n throw new TypeError('Invalid token '+ (bt || pt) +' in format string');\n }\n }\n\n function assertNoUnmatched(str, chr) {\n if (str.indexOf(chr) !== -1) {\n throw new TypeError('Unmatched '+ chr +' in format string');\n }\n }\n\n function compile(str) {\n var format = [], lastIndex = 0, match;\n reg.lastIndex = 0;\n while(match = reg.exec(str)) {\n getSubstring(format, str, lastIndex, match.index);\n getToken(format, match);\n lastIndex = reg.lastIndex;\n }\n getSubstring(format, str, lastIndex, str.length);\n return format;\n }\n\n return function(str, obj, opt) {\n var format = compileMemoized(str), result = '';\n for (var i = 0; i < format.length; i++) {\n result += format[i](obj, opt);\n }\n return result;\n };\n }\n\n // Inflection helper\n\n var Inflections = {};\n\n function getAcronym(str) {\n // istanbul ignore next\n return Inflections.acronyms && Inflections.acronyms.find(str);\n }\n\n function getHumanWord(str) {\n // istanbul ignore next\n return Inflections.human && Inflections.human.find(str);\n }\n\n function runHumanRules(str) {\n // istanbul ignore next\n return Inflections.human && Inflections.human.runRules(str) || str;\n }\n\n // RegExp helpers\n\n function allCharsReg(src) {\n return RegExp('[' + src + ']', 'g');\n }\n\n function getRegExpFlags(reg, add) {\n var flags = '';\n add = add || '';\n function checkFlag(prop, flag) {\n if (prop || add.indexOf(flag) > -1) {\n flags += flag;\n }\n }\n checkFlag(reg.global, 'g');\n checkFlag(reg.ignoreCase, 'i');\n checkFlag(reg.multiline, 'm');\n checkFlag(reg.sticky, 'y');\n return flags;\n }\n\n function escapeRegExp(str) {\n if (!isString(str)) str = String(str);\n return str.replace(/([\\\\/'*+?|()[\\]{}.^$-])/g,'\\\\$1');\n }\n\n // Date helpers\n\n var _utc = privatePropertyAccessor('utc');\n\n function callDateGet(d, method) {\n return d['get' + (_utc(d) ? 'UTC' : '') + method]();\n }\n\n function callDateSet(d, method, value, safe) {\n // \"Safe\" denotes not setting the date if the value is the same as what is\n // currently set. In theory this should be a noop, however it will cause\n // timezone shifts when in the middle of a DST fallback. This is unavoidable\n // as the notation itself is ambiguous (i.e. there are two \"1:00ams\" on\n // November 1st, 2015 in northern hemisphere timezones that follow DST),\n // however when advancing or rewinding dates this can throw off calculations\n // so avoiding this unintentional shifting on an opt-in basis.\n if (safe && value === callDateGet(d, method, value)) {\n return;\n }\n d['set' + (_utc(d) ? 'UTC' : '') + method](value);\n }\n\n // Memoization helpers\n\n var INTERNAL_MEMOIZE_LIMIT = 1000;\n\n // Note that attemps to consolidate this with Function#memoize\n // ended up clunky as that is also serializing arguments. Separating\n // these implementations turned out to be simpler.\n function memoizeFunction(fn) {\n var memo = {}, counter = 0;\n\n return function(key) {\n if (hasOwn(memo, key)) {\n return memo[key];\n }\n // istanbul ignore if\n if (counter === INTERNAL_MEMOIZE_LIMIT) {\n memo = {};\n counter = 0;\n }\n counter++;\n return memo[key] = fn(key);\n };\n }\n\n // ES6 helpers\n\n function setToArray(set) {\n var arr = new Array(set.size), i = 0;\n set.forEach(function(val) {\n arr[i++] = val;\n });\n return arr;\n }\n\n function mapToArray(map) {\n var arr = new Array(map.size), i = 0;\n map.forEach(function(val, key) {\n arr[i++] = [key, val];\n });\n return arr;\n }\n\n buildClassChecks();\n buildFullWidthNumber();\n\n /***\n * @module ES5\n * @description Functions and polyfill methods that fix ES5 functionality. This\n * module is excluded from default builds, and can be included if\n * you need legacy browser support (IE8 and below).\n *\n ***/\n\n // Non-enumerable properties on Object.prototype. In early JScript implementations\n // (< IE9) these will shadow object properties and break for..in loops.\n var DONT_ENUM_PROPS = [\n 'valueOf',\n 'toString',\n 'constructor',\n 'isPrototypeOf',\n 'hasOwnProperty',\n 'toLocaleString',\n 'propertyIsEnumerable'\n ];\n\n /***\n * @fix\n * @short Fixes DontEnum bug for iteration methods in < IE9.\n ***/\n function buildDontEnumFix() {\n if (!({toString:1}).propertyIsEnumerable('toString')) {\n var forEachEnumerableProperty = forEachProperty;\n forEachProperty = function(obj, fn) {\n forEachEnumerableProperty(obj, fn);\n for (var i = 0, key; key = DONT_ENUM_PROPS[i]; i++) {\n if (hasOwn(obj, key)) {\n if(fn.call(obj, obj[key], key, obj) === false) break;\n }\n }\n };\n }\n }\n\n /***\n * @fix\n * @short Adds native methods to chainables in < IE9.\n ***/\n function buildChainableNativeMethodsFix() {\n if (!Object.getOwnPropertyNames) {\n defineNativeMethodsOnChainable();\n }\n }\n\n // Polyfilled methods will automatically be added to the chainable prototype.\n // However, Object.getOwnPropertyNames cannot be shimmed for non-enumerable\n // properties, so if it does not exist, then the only way to access native\n // methods previous to ES5 is to provide them as a list of tokens here.\n function defineNativeMethodsOnChainable() {\n\n var nativeTokens = {\n 'Function': 'apply,call',\n 'RegExp': 'compile,exec,test',\n 'Number': 'toExponential,toFixed,toLocaleString,toPrecision',\n 'Object': 'hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString',\n 'Array': 'concat,join,pop,push,reverse,shift,slice,sort,splice,toLocaleString,unshift',\n 'Date': 'getTime,getTimezoneOffset,setTime,toDateString,toGMTString,toLocaleDateString,toLocaleString,toLocaleTimeString,toTimeString,toUTCString',\n 'String': 'anchor,big,blink,bold,charAt,charCodeAt,concat,fixed,fontcolor,fontsize,indexOf,italics,lastIndexOf,link,localeCompare,match,replace,search,slice,small,split,strike,sub,substr,substring,sup,toLocaleLowerCase,toLocaleUpperCase,toLowerCase,toUpperCase'\n };\n\n var dateTokens = 'FullYear,Month,Date,Hours,Minutes,Seconds,Milliseconds'.split(',');\n\n function addDateTokens(prefix, arr) {\n for (var i = 0; i < dateTokens.length; i++) {\n arr.push(prefix + dateTokens[i]);\n }\n }\n\n forEachProperty(nativeTokens, function(str, name) {\n var tokens = str.split(',');\n if (name === 'Date') {\n addDateTokens('get', tokens);\n addDateTokens('set', tokens);\n addDateTokens('getUTC', tokens);\n addDateTokens('setUTC', tokens);\n }\n tokens.push('toString');\n mapNativeToChainable(name, tokens);\n });\n\n }\n\n\n buildDontEnumFix();\n buildChainableNativeMethodsFix();\n\n\n /*** @namespace Object ***/\n\n function assertNonNull(obj) {\n if (obj == null) {\n throw new TypeError('Object required');\n }\n }\n\n defineStaticPolyfill(sugarObject, {\n\n 'keys': function(obj) {\n var keys = [];\n assertNonNull(obj);\n forEachProperty(coercePrimitiveToObject(obj), function(val, key) {\n keys.push(key);\n });\n return keys;\n }\n\n });\n\n\n /*** @namespace Array ***/\n\n function arrayIndexOf(arr, search, fromIndex, fromRight) {\n var length = arr.length, defaultFromIndex, index, increment;\n\n increment = fromRight ? -1 : 1;\n defaultFromIndex = fromRight ? length - 1 : 0;\n fromIndex = trunc(fromIndex);\n if (!fromIndex && fromIndex !== 0) {\n fromIndex = defaultFromIndex;\n }\n if (fromIndex < 0) {\n fromIndex = length + fromIndex;\n }\n if ((!fromRight && fromIndex < 0) || (fromRight && fromIndex >= length)) {\n fromIndex = defaultFromIndex;\n }\n\n index = fromIndex;\n\n while((fromRight && index >= 0) || (!fromRight && index < length)) {\n if (!(index in arr)) {\n return sparseIndexOf(arr, search, fromIndex, fromRight);\n }\n if (isArrayIndex(index) && arr[index] === search) {\n return index;\n }\n index += increment;\n }\n return -1;\n }\n\n function sparseIndexOf(arr, search, fromIndex, fromRight) {\n var indexes = getSparseArrayIndexes(arr, fromIndex, false, fromRight), index;\n indexes.sort(function(a, b) {\n return fromRight ? b - a : a - b;\n });\n while ((index = indexes.shift()) !== undefined) {\n if (arr[index] === search) {\n return +index;\n }\n }\n return -1;\n }\n\n function arrayReduce(arr, fn, initialValue, fromRight) {\n var length = arr.length, count = 0, defined = isDefined(initialValue), result, index;\n assertCallable(fn);\n if (length == 0 && !defined) {\n throw new TypeError('Reduce called on empty array with no initial value');\n } else if (defined) {\n result = initialValue;\n } else {\n result = arr[fromRight ? length - 1 : count];\n count++;\n }\n while(count < length) {\n index = fromRight ? length - count - 1 : count;\n if (index in arr) {\n result = fn(result, arr[index], index, arr);\n }\n count++;\n }\n return result;\n }\n\n defineStaticPolyfill(sugarArray, {\n\n /***\n *\n * @method isArray(obj)\n * @returns Boolean\n * @polyfill ES5\n * @static\n * @short Returns true if `obj` is an Array.\n *\n * @example\n *\n * Array.isArray(3) -> false\n * Array.isArray(true) -> false\n * Array.isArray('wasabi') -> false\n * Array.isArray([1,2,3]) -> true\n *\n ***/\n 'isArray': function(obj) {\n return isArray(obj);\n }\n\n });\n\n defineInstancePolyfill(sugarArray, {\n\n 'every': function(fn) {\n // Force compiler to respect argument length.\n var argLen = arguments.length, context = arguments[1];\n var length = this.length, index = 0;\n assertCallable(fn);\n while(index < length) {\n if (index in this && !fn.call(context, this[index], index, this)) {\n return false;\n }\n index++;\n }\n return true;\n },\n\n 'some': function(fn) {\n // Force compiler to respect argument length.\n var argLen = arguments.length, context = arguments[1];\n var length = this.length, index = 0;\n assertCallable(fn);\n while(index < length) {\n if (index in this && fn.call(context, this[index], index, this)) {\n return true;\n }\n index++;\n }\n return false;\n },\n\n 'map': function(fn) {\n // Force compiler to respect argument length.\n var argLen = arguments.length, context = arguments[1];\n var length = this.length, index = 0, result = new Array(length);\n assertCallable(fn);\n while(index < length) {\n if (index in this) {\n result[index] = fn.call(context, this[index], index, this);\n }\n index++;\n }\n return result;\n },\n\n 'filter': function(fn) {\n // Force compiler to respect argument length.\n var argLen = arguments.length, context = arguments[1];\n var length = this.length, index = 0, result = [];\n assertCallable(fn);\n while(index < length) {\n if (index in this && fn.call(context, this[index], index, this)) {\n result.push(this[index]);\n }\n index++;\n }\n return result;\n },\n\n /***\n * @method indexOf(search, [fromIndex] = 0)\n * @returns Number\n * @polyfill ES5\n * @short Searches the array and returns the first index where `search` occurs,\n * or `-1` if the element is not found.\n * @extra [fromIndex] is the index from which to begin the search. This\n * method performs a simple strict equality comparison on `search`.\n * Sugar does not enhance this method to support `enhanced matching`.\n * For such functionality, use the `findIndex` method instead.\n *\n * @example\n *\n * [1,2,3].indexOf(3) -> 1\n * [1,2,3].indexOf(7) -> -1\n *\n ***/\n 'indexOf': function(search) {\n // Force compiler to respect argument length.\n var argLen = arguments.length, fromIndex = arguments[1];\n if (isString(this)) return this.indexOf(search, fromIndex);\n return arrayIndexOf(this, search, fromIndex);\n },\n\n /***\n * @method lastIndexOf(search, [fromIndex] = array.length - 1)\n * @returns Number\n * @polyfill ES5\n * @short Searches the array from the end and returns the first index where\n * `search` occurs, or `-1` if the element is not found.\n * @extra [fromIndex] is the index from which to begin the search. This method\n * performs a simple strict equality comparison on `search`.\n * Sugar does not enhance this method to support `enhanced matching`.\n *\n * @example\n *\n * [1,2,1].lastIndexOf(1) -> 2\n * [1,2,1].lastIndexOf(7) -> -1\n *\n ***/\n 'lastIndexOf': function(search) {\n // Force compiler to respect argument length.\n var argLen = arguments.length, fromIndex = arguments[1];\n if (isString(this)) return this.lastIndexOf(search, fromIndex);\n return arrayIndexOf(this, search, fromIndex, true);\n },\n\n /***\n * @method forEach([eachFn], [context])\n * @polyfill ES5\n * @short Iterates over the array, calling [eachFn] on each loop.\n * @extra [context] becomes the `this` object.\n *\n * @callback eachFn\n *\n * el The element of the current iteration.\n * i The index of the current iteration.\n * arr A reference to the array.\n *\n * @example\n *\n * ['a','b','c'].forEach(function(a) {\n * // Called 3 times: 'a','b','c'\n * });\n *\n ***/\n 'forEach': function(eachFn) {\n // Force compiler to respect argument length.\n var argLen = arguments.length, context = arguments[1];\n var length = this.length, index = 0;\n assertCallable(eachFn);\n while(index < length) {\n if (index in this) {\n eachFn.call(context, this[index], index, this);\n }\n index++;\n }\n },\n\n /***\n * @method reduce(reduceFn, [init])\n * @returns Mixed\n * @polyfill ES5\n * @short Reduces the array to a single result.\n * @extra This operation is sometimes called \"accumulation\", as it takes the\n * result of the last iteration of `reduceFn` and passes it as the first\n * argument to the next iteration, \"accumulating\" that value as it goes.\n * The return value of this method will be the return value of the final\n * iteration of `reduceFn`. If [init] is passed, it will be the initial\n * \"accumulator\" (the first argument). If [init] is not passed, then it\n * will take the first element in the array, and `reduceFn` will not be\n * called for that element.\n *\n * @callback reduceFn\n *\n * acc The \"accumulator\". Either [init], the result of the last iteration\n * of `reduceFn`, or the first element of the array.\n * el The current element for this iteration.\n * idx The current index for this iteration.\n * arr A reference to the array.\n *\n * @example\n *\n * [1,2,3].reduce(function(a, b) {\n * return a - b; // 1 - 2 - 3\n * });\n *\n * [1,2,3].reduce(function(a, b) {\n * return a - b; // 100 - 1 - 2 - 3\n * }, 100);\n *\n ***/\n 'reduce': function(reduceFn) {\n // Force compiler to respect argument length.\n var argLen = arguments.length, context = arguments[1];\n return arrayReduce(this, reduceFn, context);\n },\n\n /***\n * @method reduceRight([reduceFn], [init])\n * @returns Mixed\n * @polyfill ES5\n * @short Similar to `Array#reduce`, but operates on the elements in reverse.\n *\n * @callback reduceFn\n *\n * acc The \"accumulator\", either [init], the result of the last iteration\n * of `reduceFn`, or the last element of the array.\n * el The current element for this iteration.\n * idx The current index for this iteration.\n * arr A reference to the array.\n *\n * @example\n *\n * [1,2,3].reduceRight(function(a, b) {\n * return a - b; // 3 - 2 - 1\n * });\n *\n * [1,2,3].reduceRight(function(a, b) {\n * return a - b; // 100 - 3 - 2 - 1\n * }, 100);\n *\n *\n ***/\n 'reduceRight': function(reduceFn) {\n // Force compiler to respect argument length.\n var argLen = arguments.length, context = arguments[1];\n return arrayReduce(this, reduceFn, context, true);\n }\n\n });\n\n\n /*** @namespace String ***/\n\n var TRIM_REG = RegExp('^[' + TRIM_CHARS + ']+|['+ TRIM_CHARS +']+$', 'g');\n\n defineInstancePolyfill(sugarString, {\n /***\n * @method trim()\n * @returns String\n * @polyfill ES5\n * @short Removes leading and trailing whitespace from the string.\n * @extra Whitespace is defined as line breaks, tabs, and any character in the\n * \"Space, Separator\" Unicode category, conforming to the the ES5 spec.\n *\n * @example\n *\n * ' wasabi '.trim() -> 'wasabi'\n * ' wasabi '.trimLeft() -> 'wasabi '\n * ' wasabi '.trimRight() -> ' wasabi'\n *\n ***/\n 'trim': function() {\n return this.toString().replace(TRIM_REG, '');\n }\n });\n\n\n /*** @namespace Function ***/\n\n defineInstancePolyfill(sugarFunction, {\n\n /***\n * @method bind(context, [arg1], ...)\n * @returns Function\n * @polyfill ES5\n * @short Binds `context` as the `this` object for the function when it is\n * called. Also allows currying an unlimited number of parameters.\n * @extra \"currying\" means setting parameters ([arg1], [arg2], etc.) ahead of\n * time so that they are passed when the function is called later. If\n * you pass additional parameters when the function is actually called,\n * they will be added to the end of the curried parameters.\n *\n * @example\n *\n * logThis.bind('woof')() -> logs 'woof' as its this object\n * addArgs.bind(1, 2, 3)() -> returns 5 with 1 as the this object\n * addArgs.bind(1)(2, 3, 4) -> returns 9\n *\n ***/\n 'bind': function(context) {\n // Optimized: no leaking arguments\n var boundArgs = []; for(var $i = 1, $len = arguments.length; $i < $len; $i++) boundArgs.push(arguments[$i]);\n var fn = this, bound;\n assertCallable(this);\n bound = function() {\n // Optimized: no leaking arguments\n var args = []; for(var $i = 0, $len = arguments.length; $i < $len; $i++) args.push(arguments[$i]);\n return fn.apply(fn.prototype && this instanceof fn ? this : context, boundArgs.concat(args));\n };\n bound.prototype = this.prototype;\n return bound;\n }\n\n });\n\n\n /*** @namespace Date ***/\n\n defineStaticPolyfill(sugarDate, {\n\n /***\n * @method now()\n * @returns String\n * @polyfill ES5\n * @static\n * @short Returns the current time as a Unix timestamp.\n * @extra The number of milliseconds since January 1st, 1970 00:00:00 (UTC).\n *\n * @example\n *\n * Date.now() -> ex. 1311938296231\n *\n ***/\n 'now': function() {\n return new Date().getTime();\n }\n\n });\n\n function hasISOSupport() {\n var d = new Date(Date.UTC(2000, 0));\n return !!d.toISOString && d.toISOString() === '2000-01-01T00:00:00.000Z';\n }\n\n defineInstancePolyfill(sugarDate, {\n\n /***\n * @method toISOString()\n * @returns String\n * @polyfill ES5\n * @short Formats the string to ISO8601 format.\n * @extra This will always format as UTC time.\n *\n * @example\n *\n * Date.create().toISOString() -> ex. 2011-07-05 12:24:55.528Z\n *\n ***/\n 'toISOString': function() {\n return padNumber(this.getUTCFullYear(), 4) + '-' +\n padNumber(this.getUTCMonth() + 1, 2) + '-' +\n padNumber(this.getUTCDate(), 2) + 'T' +\n padNumber(this.getUTCHours(), 2) + ':' +\n padNumber(this.getUTCMinutes(), 2) + ':' +\n padNumber(this.getUTCSeconds(), 2) + '.' +\n padNumber(this.getUTCMilliseconds(), 3) + 'Z';\n },\n\n /***\n * @method toJSON([key])\n * @returns String\n * @polyfill ES5\n * @short Returns a JSON representation of the date.\n * @extra This is effectively an alias for `toISOString`. Will always return\n * the date in UTC time. [key] is ignored.\n *\n * @example\n *\n * Date.create().toJSON() -> ex. 2011-07-05 12:24:55.528Z\n *\n ***/\n 'toJSON': function(key) {\n // Force compiler to respect argument length.\n var argLen = arguments.length;\n return this.toISOString(key);\n }\n\n }, !hasISOSupport());\n\n}).call(this);","import {isBoolean, isString, isFn, isArray} from './types';\r\n\r\n/** Configuration settings helpers */\r\n\r\n/**\r\n * If passed value is not of boolean type return the default value\r\n * otherwise return the value itself\r\n * @param {Boolean|Any} value\r\n * @param {Boolean} default value\r\n * @return {Boolean|Any}\r\n */\r\nexport const defaultsBool =\r\n (val, defaultVal) => isBoolean(val) ? val : defaultVal;\r\n\r\n/**\r\n * If passed value is not of string type return the default value\r\n * otherwise return the value itself\r\n * @param {String|Any} value\r\n * @param {String} default value\r\n * @return {String|Any}\r\n */\r\nexport const defaultsStr =\r\n (val, defaultVal) => isString(val) ? val : defaultVal;\r\n\r\n/**\r\n * If passed value is not of number type return the default value\r\n * otherwise return the value itself\r\n * @param {Number|Any} value\r\n * @param {Number} default value\r\n * @return {Number|Any}\r\n */\r\nexport const defaultsNb =\r\n (val, defaultVal) => isNaN(val) ? defaultVal : val;\r\n\r\n/**\r\n * If passed value is not of array type return the default value\r\n * otherwise return the value itself\r\n * @param {Array|Any} value\r\n * @param {Array} default value\r\n * @return {Array|Any}\r\n */\r\nexport const defaultsArr =\r\n (val, defaultVal) => isArray(val) ? val : defaultVal;\r\n\r\n/**\r\n * If passed value is not of function type return the default value\r\n * otherwise return the value itself\r\n * @param {Function|Any} value\r\n * @param {Function} default value\r\n * @return {Function|Any}\r\n */\r\nexport const defaultsFn =\r\n (val, defaultVal) => isFn(val) ? val : defaultVal;\r\n","import {root} from './root';\r\nimport {isArray, isString, isUndef} from './types';\r\nimport {trim} from './string';\r\n\r\n/**\r\n * DOM utilities\r\n */\r\n\r\nconst doc = root.document;\r\n\r\n/**\r\n * Returns text + text of children of given node\r\n * @param {NodeElement} node\r\n * @return {String}\r\n */\r\nexport const getText = (node) => {\r\n if (isUndef(node.textContent)) {\r\n return trim(node.innerText);\r\n }\r\n return trim(node.textContent);\r\n};\r\n\r\n/**\r\n * Returns the first text node contained in the supplied node\r\n * @param {NodeElement} node node\r\n * @return {String}\r\n */\r\nexport const getFirstTextNode = (node) => {\r\n for (let i = 0; i < node.childNodes.length; i++) {\r\n let n = node.childNodes[i];\r\n if (n.nodeType === 3) {\r\n return n.data;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Creates an html element with given collection of attributes\r\n * @param {String} tag a string of the html tag to create\r\n * @param {Array} an undetermined number of arrays containing the with 2\r\n * items, the attribute name and its value ['id','myId']\r\n * @return {Object} created element\r\n */\r\nexport const createElm = (...args) => {\r\n let tag = args[0];\r\n if (!isString(tag)) {\r\n return null;\r\n }\r\n\r\n let el = doc.createElement(tag);\r\n for (let i = 0; i < args.length; i++) {\r\n let arg = args[i];\r\n\r\n if (isArray(arg) && arg.length === 2) {\r\n el.setAttribute(arg[0], arg[1]);\r\n }\r\n }\r\n return el;\r\n};\r\n\r\n/**\r\n * Removes passed node from DOM\r\n * @param {DOMElement} node\r\n * @return {DOMElement} old node reference\r\n */\r\nexport const removeElm = (node) => node.parentNode.removeChild(node);\r\n\r\n/**\r\n * Returns a text node with given text\r\n * @param {String} txt\r\n * @return {Object}\r\n */\r\nexport const createText = (txt) => doc.createTextNode(txt);\r\n\r\n/**\r\n * Determine whether the passed elements is assigned the given class\r\n * @param {DOMElement} ele DOM element\r\n * @param {String} cls CSS class name\r\n * @returns {Boolean}\r\n */\r\nexport const hasClass = (ele, cls) => {\r\n if (isUndef(ele)) {\r\n return false;\r\n }\r\n\r\n if (supportsClassList()) {\r\n return ele.classList.contains(cls);\r\n }\r\n return ele.className.match(new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)'));\r\n};\r\n\r\n/**\r\n * Adds the specified class to the passed element\r\n * @param {DOMElement} ele DOM element\r\n * @param {String} cls CSS class name\r\n */\r\nexport const addClass = (ele, cls) => {\r\n if (isUndef(ele)) {\r\n return;\r\n }\r\n\r\n if (supportsClassList()) {\r\n ele.classList.add(cls);\r\n return;\r\n }\r\n\r\n if (ele.className === '') {\r\n ele.className = cls;\r\n }\r\n else if (!hasClass(ele, cls)) {\r\n ele.className += ' ' + cls;\r\n }\r\n};\r\n\r\n/**\r\n * Removes the specified class to the passed element\r\n * @param {DOMElement} ele DOM element\r\n * @param {String} cls CSS class name\r\n */\r\nexport const removeClass = (ele, cls) => {\r\n if (isUndef(ele)) {\r\n return;\r\n }\r\n\r\n if (supportsClassList()) {\r\n ele.classList.remove(cls);\r\n return;\r\n }\r\n let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)', 'g');\r\n ele.className = ele.className.replace(reg, '');\r\n};\r\n\r\n/**\r\n * Creates and returns an option element\r\n * @param {String} text option text\r\n * @param {String} value option value\r\n * @param {Boolean} isSel whether option is selected\r\n * @return {Object} option element\r\n */\r\nexport const createOpt = (text, value, isSel) => {\r\n let isSelected = isSel ? true : false;\r\n let opt = isSelected ?\r\n createElm('option', ['value', value], ['selected', 'true']) :\r\n createElm('option', ['value', value]);\r\n opt.appendChild(createText(text));\r\n return opt;\r\n};\r\n\r\n/**\r\n * Creates and returns a checklist item\r\n * @param {String} id index of check item\r\n * @param {String} chkValue check item value\r\n * @param {String} labelText check item label text\r\n * @param {Array} extraAttr array containing attribute name and its value\r\n * @return {Object} li DOM element\r\n */\r\nexport const createCheckItem = (id, chkValue, labelText, extraAttr = []) => {\r\n let li = createElm('li');\r\n let label = createElm('label', ['for', id]);\r\n let check = createElm('input',\r\n ['id', id],\r\n ['name', id],\r\n ['type', 'checkbox'],\r\n ['value', chkValue],\r\n extraAttr\r\n );\r\n label.appendChild(check);\r\n label.appendChild(createText(labelText));\r\n li.appendChild(label);\r\n li.label = label;\r\n li.check = check;\r\n return li;\r\n};\r\n\r\n/**\r\n * Returns the element matching the supplied Id\r\n * @param {String} id Element identifier\r\n * @return {DOMElement}\r\n */\r\nexport const elm = (id) => doc.getElementById(id);\r\n\r\n/**\r\n * Returns list of element matching the supplied tag name\r\n * @param {String} tagname Tag name\r\n * @return {NodeList}\r\n */\r\nexport const tag = (o, tagname) => o.getElementsByTagName(tagname);\r\n\r\n// HTML5 classList API\r\nfunction supportsClassList() {\r\n return doc.documentElement.classList;\r\n}\r\n","\r\n/**\r\n * Types utilities\r\n */\r\n\r\nconst UNDEFINED = void 0;\r\n\r\n/**\r\n * Return an empty function\r\n * @return {Function}\r\n */\r\nexport const EMPTY_FN = function() {};\r\n\r\n/**\r\n * Check passed argument is an object\r\n * @param {Object} obj\r\n * @return {Boolean}\r\n */\r\nexport const isObj =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Object]';\r\n\r\n/**\r\n * Check passed argument is a function\r\n * @param {Function} obj\r\n * @return {Boolean}\r\n */\r\nexport const isFn =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Function]';\r\n\r\n/**\r\n * Check passed argument is an array\r\n * @param {Array} obj\r\n * @return {Boolean}\r\n */\r\nexport const isArray =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Array]';\r\n\r\n/**\r\n * Check passed argument is a string\r\n * @param {String} obj obj\r\n * @returns {Boolean}\r\n */\r\nexport const isString =\r\n (obj) => Object.prototype.toString.call(obj) === '[object String]';\r\n\r\n/**\r\n * Check passed argument is a number\r\n * @param {Number} obj\r\n * @returns {Boolean}\r\n */\r\nexport const isNumber =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Number]';\r\n\r\n/**\r\n * Check passed argument is a boolean\r\n * @param {Boolean} obj\r\n * @returns {Boolean}\r\n */\r\nexport const isBoolean =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Boolean]';\r\n\r\n/**\r\n * Check passed argument is undefined\r\n * @param {Any} obj\r\n * @return {Boolean}\r\n */\r\nexport const isUndef = (obj) => obj === UNDEFINED;\r\n\r\n/**\r\n * Check passed argument is null\r\n * @param {Any} obj\r\n * @return {Boolean}\r\n */\r\nexport const isNull = (obj) => obj === null;\r\n\r\n/**\r\n * Check passed argument is empty (undefined, null or empty string)\r\n * @param {Any} obj\r\n * @return {Boolean}\r\n */\r\nexport const isEmpty = (obj) => isUndef(obj) || isNull(obj) || obj.length === 0;\r\n","import {DateType} from './modules/dateType';\r\nimport {Help} from './modules/help';\r\nimport {State} from './modules/state';\r\nimport {GridLayout} from './modules/gridLayout';\r\nimport {Loader} from './modules/loader';\r\nimport {HighlightKeyword} from './modules/highlightKeywords';\r\nimport {PopupFilter} from './modules/popupFilter';\r\nimport {MarkActiveColumns} from './modules/markActiveColumns';\r\nimport {RowsCounter} from './modules/rowsCounter';\r\nimport {StatusBar} from './modules/statusBar';\r\nimport {ClearButton} from './modules/clearButton';\r\nimport {AlternateRows} from './modules/alternateRows';\r\nimport {NoResults} from './modules/noResults';\r\nimport {Paging} from './modules/paging';\r\nimport {Toolbar} from './modules/toolbar';\r\n\r\n/**\r\n * Filter types\r\n */\r\n\r\n/**\r\n * Input filter type\r\n * @type {String}\r\n */\r\nexport const INPUT = 'input';\r\n/**\r\n * Select filter type\r\n * @type {String}\r\n */\r\nexport const SELECT = 'select';\r\n/**\r\n * Multiple select filter type\r\n * @type {String}\r\n */\r\nexport const MULTIPLE = 'multiple';\r\n/**\r\n * Checklist filter type\r\n * @type {String}\r\n */\r\nexport const CHECKLIST = 'checklist';\r\n/**\r\n * None filter type\r\n * @type {String}\r\n */\r\nexport const NONE = 'none';\r\n\r\n/**\r\n * Key codes\r\n */\r\n\r\n/**\r\n * Enter key code\r\n * @type {Number}\r\n */\r\nexport const ENTER_KEY = 13;\r\n/**\r\n * Tab key code\r\n * @type {Number}\r\n */\r\nexport const TAB_KEY = 9;\r\n/**\r\n * Escape key code\r\n * @type {Number}\r\n */\r\nexport const ESC_KEY = 27;\r\n/**\r\n * Up arrow key code\r\n * @type {Number}\r\n */\r\nexport const UP_ARROW_KEY = 38;\r\n/**\r\n * Down arrow key code\r\n * @type {Number}\r\n */\r\nexport const DOWN_ARROW_KEY = 40;\r\n\r\n/**\r\n * HTML tags\r\n */\r\n\r\n/**\r\n * Header cell tag\r\n * @type {String}\r\n */\r\nexport const HEADER_TAG = 'TH';\r\n/**\r\n * Cell tag\r\n * @type {String}\r\n */\r\nexport const CELL_TAG = 'TD';\r\n\r\n/**\r\n * Data types\r\n */\r\n\r\n/**\r\n * String\r\n * @type {String}\r\n */\r\nexport const STRING = 'string';\r\n\r\n/**\r\n * Number\r\n * @type {String}\r\n */\r\nexport const NUMBER = 'number';\r\n\r\n/**\r\n * Formatted number\r\n * @type {String}\r\n */\r\nexport const FORMATTED_NUMBER = 'formatted-number';\r\n\r\n/**\r\n * Date\r\n * @type {String}\r\n */\r\nexport const DATE = 'date';\r\n\r\n/**\r\n * IP address\r\n * @type {String}\r\n */\r\nexport const IP_ADDRESS = 'ipaddress';\r\n\r\n/**\r\n * Default values\r\n */\r\n\r\n/**\r\n * Auto filter delay in milliseconds\r\n * @type {Number}\r\n */\r\nexport const AUTO_FILTER_DELAY = 750;\r\n\r\n/**\r\n * TableFilter features definitions\r\n * @type {Object}\r\n */\r\nexport const FEATURES = {\r\n dateType: {\r\n class: DateType,\r\n name: 'dateType'\r\n },\r\n help: {\r\n class: Help,\r\n name: 'help',\r\n enforce: true\r\n },\r\n state: {\r\n class: State,\r\n name: 'state'\r\n },\r\n markActiveColumns: {\r\n class: MarkActiveColumns,\r\n name: 'markActiveColumns'\r\n },\r\n gridLayout: {\r\n class: GridLayout,\r\n name: 'gridLayout'\r\n },\r\n loader: {\r\n class: Loader,\r\n name: 'loader'\r\n },\r\n highlightKeyword: {\r\n class: HighlightKeyword,\r\n name: 'highlightKeyword',\r\n property: 'highlightKeywords'\r\n },\r\n popupFilter: {\r\n class: PopupFilter,\r\n name: 'popupFilter',\r\n property: 'popupFilters'\r\n },\r\n rowsCounter: {\r\n class: RowsCounter,\r\n name: 'rowsCounter'\r\n },\r\n statusBar: {\r\n class: StatusBar,\r\n name: 'statusBar'\r\n },\r\n clearButton: {\r\n class: ClearButton,\r\n name: 'clearButton',\r\n property: 'btnReset'\r\n },\r\n alternateRows: {\r\n class: AlternateRows,\r\n name: 'alternateRows'\r\n },\r\n noResults: {\r\n class: NoResults,\r\n name: 'noResults'\r\n },\r\n paging: {\r\n class: Paging,\r\n name: 'paging'\r\n },\r\n toolbar: {\r\n class: Toolbar,\r\n name: 'toolbar',\r\n enforce: true\r\n }\r\n};\r\n","import {root} from './root';\r\n\r\n/**\r\n * DOM event utilities\r\n */\r\n\r\n/**\r\n * Add event handler for specified event on passed element\r\n *\r\n * @param {DOMElement} obj Element\r\n * @param {String} type Event type\r\n * @param {Function} Handler\r\n * @param {Boolean} capture Specifiy whether the event should be executed in\r\n * the capturing or in the bubbling phase\r\n */\r\nexport const addEvt = (obj, type, func, capture) => {\r\n if (obj.addEventListener) {\r\n obj.addEventListener(type, func, capture);\r\n }\r\n else if (obj.attachEvent) {\r\n obj.attachEvent('on' + type, func);\r\n } else {\r\n obj['on' + type] = func;\r\n }\r\n};\r\n\r\n/**\r\n * Remove event handler for specified event on passed element\r\n *\r\n * @param {DOMElement} obj Element\r\n * @param {String} type Event type\r\n * @param {Function} Handler\r\n * @param {Boolean} capture Specifiy whether the event should be executed in\r\n * the capturing or in the bubbling phase\r\n */\r\nexport const removeEvt = (obj, type, func, capture) => {\r\n if (obj.removeEventListener) {\r\n obj.removeEventListener(type, func, capture);\r\n } else if (obj.detachEvent) {\r\n obj.detachEvent('on' + type, func);\r\n } else {\r\n obj['on' + type] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Prevents further propagation of the current event in the bubbling phase\r\n *\r\n * @param {Event} evt Event on the DOM\r\n */\r\nexport const stopEvt = (evt) => {\r\n if (!evt) {\r\n evt = root.event;\r\n }\r\n if (evt.stopPropagation) {\r\n evt.stopPropagation();\r\n } else {\r\n evt.cancelBubble = true;\r\n }\r\n};\r\n\r\n/**\r\n * Cancels the event if it is cancelable, without stopping further\r\n * propagation of the event.\r\n *\r\n * @param {Event} evt Event on the DOM\r\n */\r\nexport const cancelEvt = (evt) => {\r\n if (!evt) {\r\n evt = root.event;\r\n }\r\n if (evt.preventDefault) {\r\n evt.preventDefault();\r\n } else {\r\n evt.returnValue = false;\r\n }\r\n};\r\n\r\n/**\r\n * Reference to the object that dispatched the event\r\n *\r\n * @param {Event} evt Event on the DOM\r\n * @returns {DOMElement}\r\n */\r\nexport const targetEvt = (evt) => {\r\n if (!evt) {\r\n evt = root.event;\r\n }\r\n return evt.target || evt.srcElement;\r\n};\r\n\r\n/**\r\n * Returns the Unicode value of pressed key\r\n *\r\n * @param {Event} evt Event on the DOM\r\n * @returns {Number}\r\n */\r\nexport const keyCode = (evt) => {\r\n return evt.charCode ? evt.charCode :\r\n (evt.keyCode ? evt.keyCode : (evt.which ? evt.which : 0));\r\n};\r\n\r\n/**\r\n * Check code of pressed key is one of the expected key codes\r\n *\r\n * @param {Event} evt key event\r\n * @param {Array} keyCodes list of keycodes to check\r\n */\r\nexport const isKeyPressed = (evt, keyCodes = []) => {\r\n return keyCodes.indexOf(keyCode(evt)) !== -1;\r\n};\r\n\r\n/**\r\n * Bind passed function to passed scope\r\n * @param {Function} fn function\r\n * @param {Object} scope object instance\r\n */\r\nexport function bound(fn, scope) {\r\n let boundFnName = `${fn.name}_bound`;\r\n if (!scope[boundFnName]) {\r\n scope[boundFnName] = fn.bind(scope);\r\n }\r\n return scope[boundFnName];\r\n}\r\n","'use strict';\n\nvar buildNumberUnitMethods = require('../internal/buildNumberUnitMethods');\n\nbuildNumberUnitMethods();","'use strict';\n\nvar buildDateUnitMethods = require('../internal/buildDateUnitMethods');\n\nbuildDateUnitMethods();","/**\r\n * Export window or global object depending on the environment\r\n */\r\nexport const root = (typeof self === 'object' && self.self === self && self) ||\r\n (typeof global === 'object' && global.global === global && global) ||\r\n this;\r\n","import {remove as removeDiacritics} from 'diacritics';\r\n\r\n/**\r\n * String utilities\r\n */\r\n\r\n/**\r\n * Removes whitespace from both sides of passed string\r\n * @param {String} text\r\n * @return {String}\r\n */\r\nexport const trim = (text) => {\r\n if (text.trim) {\r\n return text.trim();\r\n }\r\n return text.replace(/^\\s*|\\s*$/g, '');\r\n};\r\n\r\n/**\r\n * Checks if passed string is empty\r\n * @param {String} text\r\n * @return {Boolean}\r\n */\r\nexport const isEmpty = (text) => trim(text) === '';\r\n\r\n/**\r\n * Makes regex safe string by escaping special characters from passed string\r\n * @param {String} text\r\n * @return {String} escaped string\r\n */\r\nexport const rgxEsc = (text) => {\r\n let chars = /[-\\/\\\\^$*+?.()|[\\]{}]/g;\r\n let escMatch = '\\\\$&';\r\n return String(text).replace(chars, escMatch);\r\n};\r\n\r\n/**\r\n * Returns passed string as lowercase if caseSensitive flag set false. By\r\n * default it returns the string with no casing changes.\r\n * @param {String} text\r\n * @return {String} string\r\n */\r\nexport const matchCase = (text, caseSensitive = false) => {\r\n if (!caseSensitive) {\r\n return text.toLowerCase();\r\n }\r\n return text;\r\n};\r\n\r\n/**\r\n * Checks if passed data contains the searched term\r\n * @param {String} term Searched term\r\n * @param {String} data Data string\r\n * @param {Boolean} exactMatch Exact match\r\n * @param {Boolean} caseSensitive Case sensitive\r\n * @param {Boolean} ignoreDiacritics Ignore diacritics\r\n * @return {Boolean}\r\n */\r\nexport const contains = (term, data, exactMatch = false, caseSensitive = false,\r\n ignoreDiacritics = false) => {\r\n // Improved by Cedric Wartel (cwl) automatic exact match for selects and\r\n // special characters are now filtered\r\n let regexp;\r\n let modifier = caseSensitive ? 'g' : 'gi';\r\n if (ignoreDiacritics) {\r\n term = removeDiacritics(term);\r\n data = removeDiacritics(data);\r\n }\r\n if (exactMatch) {\r\n regexp = new RegExp('(^\\\\s*)' + rgxEsc(term) + '(\\\\s*$)',\r\n modifier);\r\n } else {\r\n regexp = new RegExp(rgxEsc(term), modifier);\r\n }\r\n return regexp.test(data);\r\n};\r\n","\r\nconst NOT_IMPLEMENTED = 'Not implemented.';\r\n\r\n/**\r\n * Base class defining the interface of a TableFilter feature\r\n */\r\nexport class Feature {\r\n /**\r\n * Creates an instance of Feature\r\n * @param {Object} tf TableFilter instance\r\n * @param {String} feature Feature name known by TableFilter\r\n */\r\n constructor(tf, feature) {\r\n /**\r\n * TableFilter instance\r\n * @type {TableFilter}\r\n */\r\n this.tf = tf;\r\n\r\n /**\r\n * Feature name\r\n * @type {String}\r\n */\r\n this.feature = feature;\r\n\r\n /**\r\n * TableFilter feature setting\r\n * @type {Boolean}\r\n */\r\n this.enabled = tf[feature];\r\n\r\n /**\r\n * TableFilter configuration\r\n * @type {Object}\r\n */\r\n this.config = tf.config();\r\n\r\n /**\r\n * TableFilter emitter instance\r\n * @type {Emitter}\r\n */\r\n this.emitter = tf.emitter;\r\n\r\n /**\r\n * Field indicating whether Feature is initialized\r\n * @type {Boolean}\r\n */\r\n this.initialized = false;\r\n\r\n /** Subscribe to destroy event */\r\n this.emitter.on(['destroy'], () => this.destroy());\r\n }\r\n\r\n /**\r\n * Initialize the feature\r\n */\r\n init() {\r\n throw new Error(NOT_IMPLEMENTED);\r\n }\r\n\r\n /**\r\n * Reset the feature after being disabled\r\n */\r\n reset() {\r\n this.enable();\r\n this.init();\r\n }\r\n\r\n /**\r\n * Destroy the feature\r\n */\r\n destroy() {\r\n throw new Error(NOT_IMPLEMENTED);\r\n }\r\n\r\n /**\r\n * Enable the feature\r\n */\r\n enable() {\r\n this.enabled = true;\r\n }\r\n\r\n /**\r\n * Disable the feature\r\n */\r\n disable() {\r\n this.enabled = false;\r\n }\r\n\r\n /**\r\n * Indicate whether the feature is enabled or not\r\n * @returns {Boolean}\r\n */\r\n isEnabled() {\r\n return this.enabled === true;\r\n }\r\n}\r\n","'use strict';\n\nmodule.exports = {\n HOURS_INDEX: 3,\n DAY_INDEX: 4,\n WEEK_INDEX: 5,\n MONTH_INDEX: 6,\n YEAR_INDEX: 7\n};","'use strict';\n\nvar NATIVE_TYPES = require('./NATIVE_TYPES'),\n forEach = require('../internal/forEach'),\n isClass = require('../internal/isClass'),\n spaceSplit = require('../internal/spaceSplit'),\n isPlainObject = require('../internal/isPlainObject');\n\nvar isSerializable,\n isBoolean, isNumber, isString,\n isDate, isRegExp, isFunction,\n isArray, isSet, isMap, isError;\n\nfunction buildClassChecks() {\n\n var knownTypes = {};\n\n function addCoreTypes() {\n\n var names = spaceSplit(NATIVE_TYPES);\n\n isBoolean = buildPrimitiveClassCheck(names[0]);\n isNumber = buildPrimitiveClassCheck(names[1]);\n isString = buildPrimitiveClassCheck(names[2]);\n\n isDate = buildClassCheck(names[3]);\n isRegExp = buildClassCheck(names[4]);\n\n // Wanted to enhance performance here by using simply \"typeof\"\n // but Firefox has two major issues that make this impossible,\n // one fixed, the other not, so perform a full class check here.\n //\n // 1. Regexes can be typeof \"function\" in FF < 3\n // https://bugzilla.mozilla.org/show_bug.cgi?id=61911 (fixed)\n //\n // 2. HTMLEmbedElement and HTMLObjectElement are be typeof \"function\"\n // https://bugzilla.mozilla.org/show_bug.cgi?id=268945 (won't fix)\n isFunction = buildClassCheck(names[5]);\n\n // istanbul ignore next\n isArray = Array.isArray || buildClassCheck(names[6]);\n isError = buildClassCheck(names[7]);\n\n isSet = buildClassCheck(names[8], typeof Set !== 'undefined' && Set);\n isMap = buildClassCheck(names[9], typeof Map !== 'undefined' && Map);\n\n // Add core types as known so that they can be checked by value below,\n // notably excluding Functions and adding Arguments and Error.\n addKnownType('Arguments');\n addKnownType(names[0]);\n addKnownType(names[1]);\n addKnownType(names[2]);\n addKnownType(names[3]);\n addKnownType(names[4]);\n addKnownType(names[6]);\n\n }\n\n function addArrayTypes() {\n var types = 'Int8 Uint8 Uint8Clamped Int16 Uint16 Int32 Uint32 Float32 Float64';\n forEach(spaceSplit(types), function(str) {\n addKnownType(str + 'Array');\n });\n }\n\n function addKnownType(className) {\n var str = '[object '+ className +']';\n knownTypes[str] = true;\n }\n\n function isKnownType(className) {\n return knownTypes[className];\n }\n\n function buildClassCheck(className, globalObject) {\n // istanbul ignore if\n if (globalObject && isClass(new globalObject, 'Object')) {\n return getConstructorClassCheck(globalObject);\n } else {\n return getToStringClassCheck(className);\n }\n }\n\n // Map and Set may be [object Object] in certain IE environments.\n // In this case we need to perform a check using the constructor\n // instead of Object.prototype.toString.\n // istanbul ignore next\n function getConstructorClassCheck(obj) {\n var ctorStr = String(obj);\n return function(obj) {\n return String(obj.constructor) === ctorStr;\n };\n }\n\n function getToStringClassCheck(className) {\n return function(obj, str) {\n // perf: Returning up front on instanceof appears to be slower.\n return isClass(obj, className, str);\n };\n }\n\n function buildPrimitiveClassCheck(className) {\n var type = className.toLowerCase();\n return function(obj) {\n var t = typeof obj;\n return t === type || t === 'object' && isClass(obj, className);\n };\n }\n\n addCoreTypes();\n addArrayTypes();\n\n isSerializable = function(obj, className) {\n // Only known objects can be serialized. This notably excludes functions,\n // host objects, Symbols (which are matched by reference), and instances\n // of classes. The latter can arguably be matched by value, but\n // distinguishing between these and host objects -- which should never be\n // compared by value -- is very tricky so not dealing with it here.\n return isKnownType(className) || isPlainObject(obj, className);\n };\n\n}\n\nbuildClassChecks();\n\nmodule.exports = {\n isSerializable: isSerializable,\n isBoolean: isBoolean,\n isNumber: isNumber,\n isString: isString,\n isDate: isDate,\n isRegExp: isRegExp,\n isFunction: isFunction,\n isArray: isArray,\n isSet: isSet,\n isMap: isMap,\n isError: isError\n};","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'addLocale': function(code, set) {\n return localeManager.add(code, set);\n }\n\n});\n\nmodule.exports = Sugar.Date.addLocale;","'use strict';\n\nmodule.exports = {\n abs: Math.abs,\n pow: Math.pow,\n min: Math.min,\n max: Math.max,\n ceil: Math.ceil,\n floor: Math.floor,\n round: Math.round\n};","'use strict';\n\nvar LazyLoadedLocales = require('./LazyLoadedLocales'),\n AmericanEnglishDefinition = require('./AmericanEnglishDefinition'),\n getNewLocale = require('../internal/getNewLocale');\n\nvar English, localeManager;\n\nfunction buildLocales() {\n\n function LocaleManager(loc) {\n this.locales = {};\n this.add(loc);\n }\n\n LocaleManager.prototype = {\n\n get: function(code, fallback) {\n var loc = this.locales[code];\n if (!loc && LazyLoadedLocales[code]) {\n loc = this.add(code, LazyLoadedLocales[code]);\n } else if (!loc && code) {\n loc = this.locales[code.slice(0, 2)];\n }\n return loc || fallback === false ? loc : this.current;\n },\n\n getAll: function() {\n return this.locales;\n },\n\n set: function(code) {\n var loc = this.get(code, false);\n if (!loc) {\n throw new TypeError('Invalid Locale: ' + code);\n }\n return this.current = loc;\n },\n\n add: function(code, def) {\n if (!def) {\n def = code;\n code = def.code;\n } else {\n def.code = code;\n }\n var loc = def.compiledFormats ? def : getNewLocale(def);\n this.locales[code] = loc;\n if (!this.current) {\n this.current = loc;\n }\n return loc;\n },\n\n remove: function(code) {\n if (this.current.code === code) {\n this.current = this.get('en');\n }\n return delete this.locales[code];\n }\n\n };\n\n // Sorry about this guys...\n English = getNewLocale(AmericanEnglishDefinition);\n localeManager = new LocaleManager(English);\n}\n\nbuildLocales();\n\nmodule.exports = {\n English: English,\n localeManager: localeManager\n};","'use strict';\n\nvar buildRelativeAliases = require('../internal/buildRelativeAliases');\n\nbuildRelativeAliases();","'use strict';\n\nvar Sugar = require('sugar-core');\n\nmodule.exports = {\n hasOwn: Sugar.util.hasOwn,\n getOwn: Sugar.util.getOwn,\n setProperty: Sugar.util.setProperty,\n classToString: Sugar.util.classToString,\n defineProperty: Sugar.util.defineProperty,\n forEachProperty: Sugar.util.forEachProperty,\n mapNativeToChainable: Sugar.util.mapNativeToChainable\n};","'use strict';\n\nvar cloneRangeMember = require('./cloneRangeMember');\n\nfunction Range(start, end) {\n this.start = cloneRangeMember(start);\n this.end = cloneRangeMember(end);\n}\n\nmodule.exports = Range;","import {Feature} from '../feature';\r\nimport {createElm, removeElm, elm, tag} from '../dom';\r\nimport {defaultsStr} from '../settings';\r\nimport {isUndef} from '../types';\r\n\r\nconst EVENTS = [\r\n 'initializing-feature',\r\n 'initializing-extension'\r\n];\r\n\r\n/** Left position in toolbar */\r\nexport const LEFT = 'left';\r\n/** Right position in toolbar */\r\nexport const RIGHT = 'right';\r\n/** Center position in toolbar */\r\nexport const CENTER = 'center';\r\n\r\n/**\r\n * Toolbar UI component\r\n * @export\r\n * @class Toolbar\r\n * @extends {Feature}\r\n */\r\nexport class Toolbar extends Feature {\r\n\r\n /**\r\n * Create an instance of Toolbar\r\n * @param {TableFilter} tf TableFilter instance\r\n * @memberof Toolbar\r\n */\r\n constructor(tf) {\r\n super(tf, 'toolbar');\r\n\r\n // Configuration object\r\n let f = this.config.toolbar || {};\r\n\r\n /**\r\n * Css class for toolbar's container DOM element\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.container_css_class, 'inf');\r\n\r\n /**\r\n * Css class for left-side inner container DOM element\r\n * @type {String}\r\n */\r\n this.lContCssClass = defaultsStr(f.left_cont_css_class, 'ldiv');\r\n\r\n /**\r\n * Css class for right-side inner container DOM element\r\n * @type {String}\r\n */\r\n this.rContCssClass = defaultsStr(f.right_cont_css_class, 'rdiv');\r\n\r\n /**\r\n * Css class for middle inner container DOM element\r\n * @type {String}\r\n */\r\n this.cContCssClass = defaultsStr(f.center_cont_css_class, 'mdiv');\r\n\r\n /**\r\n * Toolbar's custom container ID\r\n * @type {String}\r\n */\r\n this.tgtId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Toolbar's container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.cont = null;\r\n\r\n /**\r\n * Left-side inner container DOM element (rows counter in toolbar)\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.lCont = null;\r\n\r\n /**\r\n * Right-side inner container DOM element (reset button,\r\n * page length selector in toolbar)\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.rCont = null;\r\n\r\n /**\r\n * Middle inner container DOM element (paging elements in toolbar)\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.cCont = null;\r\n\r\n /**\r\n * Container elements inside toolbar\r\n * @private\r\n */\r\n this.innerCont = {\r\n left: null,\r\n center: null,\r\n right: null\r\n };\r\n\r\n this.emitter.on(EVENTS,\r\n (feature, isExternal) => this.init(isExternal));\r\n\r\n /** @inherited */\r\n this.enabled = true;\r\n }\r\n\r\n /**\r\n * Initialize toolbar components\r\n * @param {Boolean} isExternal initialize only if component belongs\r\n * to toolbar\r\n */\r\n init(isExternal) {\r\n if (this.initialized || isExternal) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n // default container\r\n let container = createElm('div');\r\n container.className = this.contCssClass;\r\n\r\n // custom container\r\n if (this.tgtId) {\r\n elm(this.tgtId).appendChild(container);\r\n }\r\n // grid-layout\r\n else if (tf.gridLayout) {\r\n let gridLayout = tf.Mod.gridLayout;\r\n gridLayout.tblMainCont.appendChild(container);\r\n container.className = gridLayout.infDivCssClass;\r\n }\r\n // default location: just above the table\r\n else {\r\n let cont = createElm('caption');\r\n cont.appendChild(container);\r\n tf.dom().insertBefore(cont, tf.dom().firstChild);\r\n }\r\n this.cont = container;\r\n\r\n // left container\r\n this.lCont = this.createContainer(container, this.lContCssClass);\r\n\r\n // right container\r\n this.rCont = this.createContainer(container, this.rContCssClass);\r\n\r\n // middle container\r\n this.cCont = this.createContainer(container, this.cContCssClass);\r\n\r\n this.innerCont = {\r\n left: this.lCont,\r\n center: this.cCont,\r\n right: this.rCont\r\n };\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n // emit help initialisation only if undefined\r\n if (isUndef(tf.help)) {\r\n // explicitily enable help to initialise feature by\r\n // default, only if setting is undefined\r\n tf.Mod.help.enable();\r\n this.emitter.emit('init-help', tf);\r\n }\r\n }\r\n\r\n /**\r\n * Return the container based on requested position inside the toolbar\r\n * @param {String} [position=RIGHT] 3 possible positions: 'left', 'center',\r\n * 'right'\r\n * @param {DOMElement} el optional DOM element to be inserter in container\r\n * @returns {DOMElement}\r\n */\r\n container(position = RIGHT, el) {\r\n let cont = this.innerCont[position];\r\n if (el) {\r\n cont.appendChild(el);\r\n }\r\n return cont;\r\n }\r\n\r\n /**\r\n * Create DOM element inside passed container\r\n * @param {DOMElement} container\r\n * @param {String} css\r\n * @private\r\n */\r\n createContainer(container, css) {\r\n let div = createElm('div', ['class', css]);\r\n container.appendChild(div);\r\n return div;\r\n }\r\n\r\n /**\r\n * Destroy Toolbar instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n removeElm(this.cont);\r\n this.cont = null;\r\n\r\n let tbl = tf.dom();\r\n let captions = tag(tbl, 'caption');\r\n [].forEach.call(captions, (el) => removeElm(el));\r\n\r\n /** @inherited */\r\n this.initialized = false;\r\n }\r\n}\r\n","/**\r\n * Array utilities\r\n */\r\n\r\nimport {matchCase} from './string';\r\n\r\n/**\r\n * Checks if given item can be found in the passed collection\r\n * @param {Array} arr collection\r\n * @param {Any} val item to search\r\n * @param {Boolean} caseSensitive respects case if true\r\n * @return {Boolean}\r\n */\r\nexport const has = (arr, val, caseSensitive) => {\r\n let sCase = Boolean(caseSensitive);\r\n for (var i = 0, l = arr.length; i < l; i++) {\r\n if (matchCase(arr[i].toString(), sCase) === val) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar forEachProperty = coreUtilityAliases.forEachProperty;\n\nfunction defineOnPrototype(ctor, methods) {\n var proto = ctor.prototype;\n forEachProperty(methods, function(val, key) {\n proto[key] = val;\n });\n}\n\nmodule.exports = defineOnPrototype;","import {isNumber} from './types';\r\n\r\n/**\r\n * Takes a string, removes all formatting/cruft and returns the raw float value\r\n * @param {String} Formatted number\r\n * @param {String} Decimal type '.' or ','\r\n * @return {Number} Unformatted number\r\n *\r\n * https://github.com/openexchangerates/accounting.js/blob/master/accounting.js\r\n */\r\nexport const parse = (value, decimal = '.') => {\r\n // Return the value as-is if it's already a number\r\n if (isNumber(value)) {\r\n return value;\r\n }\r\n\r\n // Build regex to strip out everything except digits, decimal point and\r\n // minus sign\r\n let regex = new RegExp('[^0-9-' + decimal + ']', ['g']);\r\n let unformatted = parseFloat(\r\n ('' + value)\r\n // replace bracketed values with negatives\r\n .replace(/\\((.*)\\)/, '-$1')\r\n // strip out any cruft\r\n .replace(regex, '')\r\n // make sure decimal point is standard\r\n .replace(decimal, '.')\r\n );\r\n\r\n // This will fail silently\r\n return !isNaN(unformatted) ? unformatted : 0;\r\n};\r\n","'use strict';\n\nvar _utc = require('../var/_utc');\n\nfunction callDateGet(d, method) {\n return d['get' + (_utc(d) ? 'UTC' : '') + method]();\n}\n\nmodule.exports = callDateGet;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getWeekday(d) {\n return callDateGet(d, 'Day');\n}\n\nmodule.exports = getWeekday;","'use strict';\n\nvar buildDateRangeUnits = require('../internal/buildDateRangeUnits');\n\nbuildDateRangeUnits();","'use strict';\n\nvar setDate = require('./setDate'),\n getDate = require('./getDate'),\n getWeekday = require('./getWeekday'),\n classChecks = require('../../common/var/classChecks'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar isNumber = classChecks.isNumber,\n abs = mathAliases.abs;\n\nfunction setWeekday(d, dow, dir) {\n if (!isNumber(dow)) return;\n var currentWeekday = getWeekday(d);\n if (dir) {\n // Allow a \"direction\" parameter to determine whether a weekday can\n // be set beyond the current weekday in either direction.\n var ndir = dir > 0 ? 1 : -1;\n var offset = dow % 7 - currentWeekday;\n if (offset && offset / abs(offset) !== ndir) {\n dow += 7 * ndir;\n }\n }\n setDate(d, getDate(d) + dow - currentWeekday);\n return d.getTime();\n}\n\nmodule.exports = setWeekday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nmodule.exports = {\n sugarObject: Sugar.Object,\n sugarArray: Sugar.Array,\n sugarDate: Sugar.Date,\n sugarString: Sugar.String,\n sugarNumber: Sugar.Number,\n sugarFunction: Sugar.Function,\n sugarRegExp: Sugar.RegExp\n};","'use strict';\n\nvar getExtendedDate = require('./getExtendedDate');\n\nfunction createDate(d, options, forceClone) {\n return getExtendedDate(null, d, options, forceClone).date;\n}\n\nmodule.exports = createDate;","'use strict';\n\nvar mathAliases = require('./mathAliases');\n\nvar ceil = mathAliases.ceil,\n floor = mathAliases.floor;\n\nvar trunc = Math.trunc || function(n) {\n if (n === 0 || !isFinite(n)) return n;\n return n < 0 ? ceil(n) : floor(n);\n};\n\nmodule.exports = trunc;","'use strict';\n\nvar privatePropertyAccessor = require('../internal/privatePropertyAccessor');\n\nmodule.exports = privatePropertyAccessor('utc');","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getMonth(d) {\n return callDateGet(d, 'Month');\n}\n\nmodule.exports = getMonth;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getYear(d) {\n return callDateGet(d, 'FullYear');\n}\n\nmodule.exports = getYear;","'use strict';\n\nvar getDaysInMonth = require('../internal/getDaysInMonth');\n\nvar DateUnits = [\n {\n name: 'millisecond',\n method: 'Milliseconds',\n multiplier: 1,\n start: 0,\n end: 999\n },\n {\n name: 'second',\n method: 'Seconds',\n multiplier: 1000,\n start: 0,\n end: 59\n },\n {\n name: 'minute',\n method: 'Minutes',\n multiplier: 60 * 1000,\n start: 0,\n end: 59\n },\n {\n name: 'hour',\n method: 'Hours',\n multiplier: 60 * 60 * 1000,\n start: 0,\n end: 23\n },\n {\n name: 'day',\n alias: 'date',\n method: 'Date',\n ambiguous: true,\n multiplier: 24 * 60 * 60 * 1000,\n start: 1,\n end: function(d) {\n return getDaysInMonth(d);\n }\n },\n {\n name: 'week',\n method: 'ISOWeek',\n ambiguous: true,\n multiplier: 7 * 24 * 60 * 60 * 1000\n },\n {\n name: 'month',\n method: 'Month',\n ambiguous: true,\n multiplier: 30.4375 * 24 * 60 * 60 * 1000,\n start: 0,\n end: 11\n },\n {\n name: 'year',\n method: 'FullYear',\n ambiguous: true,\n multiplier: 365.25 * 24 * 60 * 60 * 1000,\n start: 0\n }\n];\n\nmodule.exports = DateUnits;","'use strict';\n\nfunction isDefined(o) {\n return o !== undefined;\n}\n\nmodule.exports = isDefined;","'use strict';\n\nvar iterateOverSparseArray = require('./iterateOverSparseArray');\n\nfunction forEach(arr, fn) {\n for (var i = 0, len = arr.length; i < len; i++) {\n if (!(i in arr)) {\n return iterateOverSparseArray(arr, fn, i);\n }\n fn(arr[i], i);\n }\n}\n\nmodule.exports = forEach;","import {parse as parseNb} from './number';\r\nimport {Date as SugarDate} from 'sugar-date';\r\n\r\n/** Sorting utilities */\r\n\r\n/**\r\n * Case insensitive compare function for passed strings\r\n * @param {String} First string\r\n * @param {String} Second string\r\n * @return {Number} -1 if first string lower than second one\r\n * 0 if first string same order as second one\r\n * 1 if first string greater than second one\r\n */\r\nexport const ignoreCase = (a, b) => {\r\n let x = a.toLowerCase();\r\n let y = b.toLowerCase();\r\n return x < y ? -1 : (x > y ? 1 : 0);\r\n};\r\n\r\n/**\r\n * Compare function for sorting passed numbers in ascending manner\r\n * @param {Number} First number\r\n * @param {Number} Second number\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const numSortAsc = (a, b) => (a - b);\r\n\r\n/**\r\n * Compare function for sorting passed numbers in descending manner\r\n * @param {Number} First number\r\n * @param {Number} Second number\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const numSortDesc = (a, b) => (b - a);\r\n\r\n/**\r\n * Compare function for sorting passed dates in ascending manner according to\r\n * the corresponding UTC numeric value (returned by getTime)\r\n * @param {Date} First date object\r\n * @param {Date} Second date object\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const dateSortAsc = (date1, date2) => date1.getTime() - date2.getTime();\r\n\r\n/**\r\n * Compare function for sorting passed dates in descending manner according to\r\n * the corresponding UTC numeric value (returned by getTime)\r\n * @param {Date} First date object\r\n * @param {Date} Second date object\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const dateSortDesc = (date1, date2) => date2.getTime() - date1.getTime();\r\n\r\n/**\r\n * Curried compare function for sorting passed formatted numbers in desired\r\n * fashion according to supplied compare function and decimal separator\r\n * @param {Function} Compare function\r\n * @param {String} [decimal=','] Decimal separator\r\n * @return {Function} Compare function receiving parsed numeric arguments\r\n */\r\nexport const sortNumberStr = (compareFn, decimal = ',') => {\r\n return (numStr1, numStr2) => {\r\n let num1 = parseNb(numStr1, decimal);\r\n let num2 = parseNb(numStr2, decimal);\r\n return compareFn(num1, num2);\r\n };\r\n};\r\n\r\n/**\r\n * Curried compare function for sorting passed formatted dates in desired\r\n * fashion according to supplied compare function and locale\r\n * @param {Function} Compare function\r\n * @param {String} [locale='en-us'] Locale code\r\n * @return {Function} Compare function receiving parsed date arguments\r\n */\r\nexport const sortDateStr = (compareFn, locale = 'en-us') => {\r\n return (dateStr1, dateStr2) => {\r\n let date1 = SugarDate.create(dateStr1, locale);\r\n let date2 = SugarDate.create(dateStr2, locale);\r\n return compareFn(date1, date2);\r\n };\r\n};\r\n","'use strict';\n\nvar _utc = require('../../common/var/_utc');\n\nfunction cloneDate(d) {\n // Rhino environments have a bug where new Date(d) truncates\n // milliseconds so need to call getTime() here.\n var clone = new Date(d.getTime());\n _utc(clone, !!_utc(d));\n return clone;\n}\n\nmodule.exports = cloneDate;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getDate(d) {\n return callDateGet(d, 'Date');\n}\n\nmodule.exports = getDate;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet');\n\nfunction setDate(d, val) {\n callDateSet(d, 'Date', val);\n}\n\nmodule.exports = setDate;","'use strict';\n\nvar _utc = require('../var/_utc'),\n callDateGet = require('./callDateGet');\n\nfunction callDateSet(d, method, value, safe) {\n // \"Safe\" denotes not setting the date if the value is the same as what is\n // currently set. In theory this should be a noop, however it will cause\n // timezone shifts when in the middle of a DST fallback. This is unavoidable\n // as the notation itself is ambiguous (i.e. there are two \"1:00ams\" on\n // November 1st, 2015 in northern hemisphere timezones that follow DST),\n // however when advancing or rewinding dates this can throw off calculations\n // so avoiding this unintentional shifting on an opt-in basis.\n if (safe && value === callDateGet(d, method, value)) {\n return;\n }\n d['set' + (_utc(d) ? 'UTC' : '') + method](value);\n}\n\nmodule.exports = callDateSet;","'use strict';\n\nvar isDefined = require('../../common/internal/isDefined'),\n classChecks = require('../../common/var/classChecks'),\n callDateSet = require('../../common/internal/callDateSet'),\n walkUnitDown = require('./walkUnitDown');\n\nvar isFunction = classChecks.isFunction;\n\nfunction setUnitAndLowerToEdge(d, startIndex, stopIndex, end) {\n walkUnitDown(startIndex, function(unit, i) {\n var val = end ? unit.end : unit.start;\n if (isFunction(val)) {\n val = val(d);\n }\n callDateSet(d, unit.method, val);\n return !isDefined(stopIndex) || i > stopIndex;\n });\n return d;\n}\n\nmodule.exports = setUnitAndLowerToEdge;","'use strict';\n\nfunction dateIsValid(d) {\n return !isNaN(d.getTime());\n}\n\nmodule.exports = dateIsValid;","'use strict';\n\nvar updateDate = require('./updateDate');\n\nfunction advanceDate(d, unit, num, reset) {\n var set = {};\n set[unit] = num;\n return updateDate(d, set, reset, 1);\n}\n\nmodule.exports = advanceDate;","'use strict';\n\nvar _dateOptions = require('../var/_dateOptions');\n\nfunction getNewDate() {\n return _dateOptions('newDateInternal')();\n}\n\nmodule.exports = getNewDate;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes');\n\nvar HOURS_INDEX = DateUnitIndexes.HOURS_INDEX,\n DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction getLowerUnitIndex(index) {\n if (index === MONTH_INDEX) {\n return DAY_INDEX;\n } else if (index === WEEK_INDEX) {\n return HOURS_INDEX;\n }\n return index - 1;\n}\n\nmodule.exports = getLowerUnitIndex;","'use strict';\n\nfunction isUndefined(o) {\n return o === undefined;\n}\n\nmodule.exports = isUndefined;","'use strict';\n\nrequire('./date');\nrequire('./range');\n\nmodule.exports = require('sugar-core');","'use strict';\n\nvar isValidRangeMember = require('./isValidRangeMember');\n\nfunction rangeIsValid(range) {\n return isValidRangeMember(range.start) &&\n isValidRangeMember(range.end) &&\n typeof range.start === typeof range.end;\n}\n\nmodule.exports = rangeIsValid;","'use strict';\n\nvar methodDefineAliases = require('../var/methodDefineAliases'),\n collectSimilarMethods = require('./collectSimilarMethods');\n\nvar defineInstance = methodDefineAliases.defineInstance;\n\nfunction defineInstanceSimilar(sugarNamespace, set, fn, flags) {\n defineInstance(sugarNamespace, collectSimilarMethods(set, fn), flags);\n}\n\nmodule.exports = defineInstanceSimilar;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n getLowerUnitIndex = require('./getLowerUnitIndex'),\n moveToBeginningOfWeek = require('./moveToBeginningOfWeek'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nvar WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n localeManager = LocaleHelpers.localeManager;\n\nfunction moveToBeginningOfUnit(d, unitIndex, localeCode) {\n if (unitIndex === WEEK_INDEX) {\n moveToBeginningOfWeek(d, localeManager.get(localeCode).getFirstDayOfWeek());\n }\n return setUnitAndLowerToEdge(d, getLowerUnitIndex(unitIndex));\n}\n\nmodule.exports = moveToBeginningOfUnit;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n moveToEndOfWeek = require('./moveToEndOfWeek'),\n getLowerUnitIndex = require('./getLowerUnitIndex'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nvar WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n localeManager = LocaleHelpers.localeManager;\n\nfunction moveToEndOfUnit(d, unitIndex, localeCode, stopIndex) {\n if (unitIndex === WEEK_INDEX) {\n moveToEndOfWeek(d, localeManager.get(localeCode).getFirstDayOfWeek());\n }\n return setUnitAndLowerToEdge(d, getLowerUnitIndex(unitIndex), stopIndex, true);\n}\n\nmodule.exports = moveToEndOfUnit;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n isDefined = require('../../common/internal/isDefined'),\n getDateParam = require('./getDateParam'),\n iterateOverDateUnits = require('./iterateOverDateUnits');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nfunction iterateOverDateParams(params, fn, startIndex, endIndex) {\n\n function run(name, unit, i) {\n var val = getDateParam(params, name);\n if (isDefined(val)) {\n fn(name, val, unit, i);\n }\n }\n\n iterateOverDateUnits(function (unit, i) {\n var result = run(unit.name, unit, i);\n if (result !== false && i === DAY_INDEX) {\n // Check for \"weekday\", which has a distinct meaning\n // in the context of setting a date, but has the same\n // meaning as \"day\" as a unit of time.\n result = run('weekday', unit, i);\n }\n return result;\n }, startIndex, endIndex);\n\n}\n\nmodule.exports = iterateOverDateParams;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n trunc = require('../../common/var/trunc'),\n setDate = require('./setDate'),\n getDate = require('./getDate'),\n getMonth = require('./getMonth'),\n getNewDate = require('./getNewDate'),\n setWeekday = require('./setWeekday'),\n mathAliases = require('../../common/var/mathAliases'),\n callDateGet = require('../../common/internal/callDateGet'),\n classChecks = require('../../common/var/classChecks'),\n resetLowerUnits = require('./resetLowerUnits'),\n getLowerUnitIndex = require('./getLowerUnitIndex'),\n getHigherUnitIndex = require('./getHigherUnitIndex'),\n callDateSetWithWeek = require('./callDateSetWithWeek'),\n iterateOverDateParams = require('./iterateOverDateParams');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX,\n YEAR_INDEX = DateUnitIndexes.YEAR_INDEX,\n round = mathAliases.round,\n isNumber = classChecks.isNumber;\n\nfunction updateDate(d, params, reset, advance, prefer, weekdayDir, contextDate) {\n var upperUnitIndex;\n\n function setUpperUnit(unitName, unitIndex) {\n if (prefer && !upperUnitIndex) {\n if (unitName === 'weekday') {\n upperUnitIndex = WEEK_INDEX;\n } else {\n upperUnitIndex = getHigherUnitIndex(unitIndex);\n }\n }\n }\n\n function setSpecificity(unitIndex) {\n // Other functions may preemptively set the specificity before arriving\n // here so concede to them if they have already set more specific units.\n if (unitIndex > params.specificity) {\n return;\n }\n params.specificity = unitIndex;\n }\n\n function canDisambiguate() {\n if (!upperUnitIndex || upperUnitIndex > YEAR_INDEX) {\n return;\n }\n\n switch(prefer) {\n case -1: return d >= (contextDate || getNewDate());\n case 1: return d <= (contextDate || getNewDate());\n }\n }\n\n function disambiguateHigherUnit() {\n var unit = DateUnits[upperUnitIndex];\n advance = prefer;\n setUnit(unit.name, 1, unit, upperUnitIndex);\n }\n\n function handleFraction(unit, unitIndex, fraction) {\n if (unitIndex) {\n var lowerUnit = DateUnits[getLowerUnitIndex(unitIndex)];\n var val = round(unit.multiplier / lowerUnit.multiplier * fraction);\n params[lowerUnit.name] = val;\n }\n }\n\n function monthHasShifted(d, targetMonth) {\n if (targetMonth < 0) {\n targetMonth = targetMonth % 12 + 12;\n }\n return targetMonth % 12 !== getMonth(d);\n }\n\n function setUnit(unitName, value, unit, unitIndex) {\n var method = unit.method, checkMonth, fraction;\n\n setUpperUnit(unitName, unitIndex);\n setSpecificity(unitIndex);\n\n fraction = value % 1;\n if (fraction) {\n handleFraction(unit, unitIndex, fraction);\n value = trunc(value);\n }\n\n if (unitName === 'weekday') {\n if (!advance) {\n // Weekdays are always considered absolute units so simply set them\n // here even if it is an \"advance\" operation. This is to help avoid\n // ambiguous meanings in \"advance\" as well as to neatly allow formats\n // like \"Wednesday of next week\" without more complex logic.\n setWeekday(d, value, weekdayDir);\n }\n return;\n }\n checkMonth = unitIndex === MONTH_INDEX && getDate(d) > 28;\n\n // If we are advancing or rewinding, then we need we need to set the\n // absolute time if the unit is \"hours\" or less. This is due to the fact\n // that setting by method is ambiguous during DST shifts. For example,\n // 1:00am on November 1st 2015 occurs twice in North American timezones\n // with DST, the second time being after the clocks are rolled back at\n // 2:00am. When springing forward this is automatically handled as there\n // is no 2:00am so the date automatically jumps to 3:00am. However, when\n // rolling back, setHours(2) will always choose the first \"2am\" even if\n // the date is currently set to the second, causing unintended jumps.\n // This ambiguity is unavoidable when setting dates as the notation is\n // ambiguous. However when advancing, we clearly want the resulting date\n // to be an acutal hour ahead, which can only be accomplished by setting\n // the absolute time. Conversely, any unit higher than \"hours\" MUST use\n // the internal set methods, as they are ambiguous as absolute units of\n // time. Years may be 365 or 366 days depending on leap years, months are\n // all over the place, and even days may be 23-25 hours depending on DST\n // shifts. Finally, note that the kind of jumping described above will\n // occur when calling ANY \"set\" method on the date and will occur even if\n // the value being set is identical to the one currently set (i.e.\n // setHours(2) on a date at 2am may not be a noop). This is precarious,\n // so avoiding this situation in callDateSet by checking up front that\n // the value is not the same before setting.\n if (advance && !unit.ambiguous) {\n d.setTime(d.getTime() + (value * advance * unit.multiplier));\n return;\n } else if (advance) {\n if (unitIndex === WEEK_INDEX) {\n value *= 7;\n method = DateUnits[DAY_INDEX].method;\n }\n value = (value * advance) + callDateGet(d, method);\n }\n callDateSetWithWeek(d, method, value, advance);\n if (checkMonth && monthHasShifted(d, value)) {\n // As we are setting the units in reverse order, there is a chance that\n // our date may accidentally traverse into a new month, such as setting\n // { month: 1, date 15 } on January 31st. Check for this here and reset\n // the date to the last day of the previous month if this has happened.\n setDate(d, 0);\n }\n }\n\n if (isNumber(params) && advance) {\n // If param is a number and advancing, the number is in milliseconds.\n params = { millisecond: params };\n } else if (isNumber(params)) {\n // Otherwise just set the timestamp and return.\n d.setTime(params);\n return d;\n }\n\n iterateOverDateParams(params, setUnit);\n\n if (reset && params.specificity) {\n resetLowerUnits(d, params.specificity);\n }\n\n // If past or future is preferred, then the process of \"disambiguation\" will\n // ensure that an ambiguous time/date (\"4pm\", \"thursday\", \"June\", etc.) will\n // be in the past or future. Weeks are only considered ambiguous if there is\n // a weekday, i.e. \"thursday\" is an ambiguous week, but \"the 4th\" is an\n // ambiguous month.\n if (canDisambiguate()) {\n disambiguateHigherUnit();\n }\n return d;\n}\n\nmodule.exports = updateDate;","'use strict';\n\nfunction tzOffset(d) {\n return d.getTimezoneOffset();\n}\n\nmodule.exports = tzOffset;","'use strict';\n\nfunction spaceSplit(str) {\n return str.split(' ');\n}\n\nmodule.exports = spaceSplit;","'use strict';\n\nmodule.exports = {\n HALF_WIDTH_ZERO: 0x30,\n FULL_WIDTH_ZERO: 0xff10,\n HALF_WIDTH_PERIOD: '.',\n FULL_WIDTH_PERIOD: '.',\n HALF_WIDTH_COMMA: ',',\n OPEN_BRACE: '{',\n CLOSE_BRACE: '}'\n};","'use strict';\n\nvar simpleMerge = require('./simpleMerge');\n\nfunction simpleClone(obj) {\n return simpleMerge({}, obj);\n}\n\nmodule.exports = simpleClone;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar forEachProperty = coreUtilityAliases.forEachProperty;\n\nfunction simpleMerge(target, source) {\n forEachProperty(source, function(val, key) {\n target[key] = val;\n });\n return target;\n}\n\nmodule.exports = simpleMerge;","import {Feature} from '../feature';\r\nimport {\r\n ignoreCase, numSortAsc, numSortDesc,\r\n dateSortAsc, sortNumberStr, sortDateStr\r\n} from '../sort';\r\nimport {isArray, isObj, isEmpty} from '../types';\r\nimport {NUMBER, FORMATTED_NUMBER, DATE} from '../const';\r\n\r\n/**\r\n * Base class for Dropdown and CheckList UI components\r\n * @export\r\n * @class BaseDropdown\r\n * @extends {Feature}\r\n */\r\nexport class BaseDropdown extends Feature {\r\n\r\n /**\r\n * Creates an instance of BaseDropdown\r\n * @param {TableFilter} tf\r\n */\r\n constructor(tf) {\r\n super(tf, 'baseDropdown');\r\n\r\n let f = this.config;\r\n\r\n /**\r\n * Filter options custom sorter on a column basis\r\n * @type {Object}\r\n */\r\n this.customSorter = isObj(f.filter_options_sorter) &&\r\n isArray(f.filter_options_sorter.col) &&\r\n isArray(f.filter_options_sorter.comparer) ?\r\n f.filter_options_sorter :\r\n null;\r\n\r\n // TODO: move here all properties shared by Dropdown CheckList\r\n\r\n /**\r\n * Has custom options\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isCustom = false;\r\n\r\n /**\r\n * List of options values\r\n * @type {Array}\r\n * @private\r\n */\r\n this.opts = [];\r\n\r\n /**\r\n * List of options texts for custom values\r\n * @type {Array}\r\n * @private\r\n */\r\n this.optsTxt = [];\r\n\r\n /**\r\n * List of options to be excluded from the checklist filter\r\n * @type {Array}\r\n * @private\r\n */\r\n this.excludedOpts = [];\r\n }\r\n\r\n /**\r\n * Sort passed options based on the type of the specified column\r\n * @param {Number} colIndex Column index\r\n * @param {Array} [options=[]] Collection of values\r\n * @return {Array} Sorted values\r\n * @private\r\n */\r\n sortOptions(colIndex, options = []) {\r\n let tf = this.tf;\r\n\r\n if (tf.isCustomOptions(colIndex) || !tf.sortSlc ||\r\n (isArray(tf.sortSlc) && tf.sortSlc.indexOf(colIndex) === -1)) {\r\n return options;\r\n }\r\n\r\n let { caseSensitive, sortNumDesc } = tf;\r\n let compareFn;\r\n\r\n if (this.customSorter &&\r\n this.customSorter.col.indexOf(colIndex) !== -1) {\r\n var idx = this.customSorter.col.indexOf(colIndex);\r\n compareFn = this.customSorter.comparer[idx];\r\n }\r\n else if (tf.hasType(colIndex, [NUMBER, FORMATTED_NUMBER])) {\r\n let decimal = tf.getDecimal(colIndex);\r\n let comparer = numSortAsc;\r\n if (sortNumDesc === true || sortNumDesc.indexOf(colIndex) !== -1) {\r\n comparer = numSortDesc;\r\n }\r\n compareFn = sortNumberStr(comparer, decimal);\r\n }\r\n else if (tf.hasType(colIndex, [DATE])) {\r\n let locale = tf.feature('dateType').getLocale(colIndex);\r\n let comparer = dateSortAsc;\r\n compareFn = sortDateStr(comparer, locale);\r\n } else { // string\r\n compareFn = caseSensitive ? undefined : ignoreCase;\r\n }\r\n\r\n return options.sort(compareFn);\r\n }\r\n\r\n /**\r\n * Regenerate filters of specified columns and maintain selection if any\r\n * @param {Array} colIndexes Collection of column indexes\r\n * @private\r\n */\r\n refreshFilters(colIndexes) {\r\n colIndexes.forEach((colIdx) => {\r\n let values = this.getValues(colIdx);\r\n this.build(colIdx, this.tf.linkedFilters);\r\n this.selectOptions(colIdx, values);\r\n });\r\n }\r\n\r\n /**\r\n * Check passed row contains a valid linked value\r\n * @param {Number} rowIdx Row index\r\n * @param {Number} activeFilterIdx Current active filter index\r\n * @returns {Boolean}\r\n */\r\n isValidLinkedValue(rowIdx, activeFilterIdx) {\r\n let tf = this.tf;\r\n\r\n if (tf.disableExcludedOptions) {\r\n return true;\r\n }\r\n\r\n if (tf.paging) {\r\n if (!isEmpty(activeFilterIdx) && tf.isRowValid(rowIdx)) {\r\n return true;\r\n }\r\n } else {\r\n if (tf.isRowDisplayed(rowIdx)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Refresh linked filters to offer only selected options\r\n */\r\n linkFilters() {\r\n let tf = this.tf;\r\n if (!tf.linkedFilters || !tf.activeFilterId) {\r\n return;\r\n }\r\n\r\n this.refreshAll();\r\n }\r\n}\r\n","import {root} from './root';\r\n\r\n/**\r\n * Cookie utilities\r\n */\r\n\r\nconst doc = root.document;\r\n\r\nexport default {\r\n\r\n /**\r\n * Write a cookie\r\n * @param {String} name Name of the cookie\r\n * @param {String} value Value of the cookie\r\n * @param {Number} hours Cookie duration in hours\r\n */\r\n write(name, value, hours) {\r\n let expire = '';\r\n if (hours) {\r\n expire = new Date((new Date()).getTime() + hours * 3600000);\r\n expire = '; expires=' + expire.toGMTString();\r\n }\r\n doc.cookie = name + '=' + escape(value) + expire;\r\n },\r\n\r\n /**\r\n * Read a cookie\r\n * @param {String} name Name of the cookie\r\n * @returns {String} Value of the cookie\r\n */\r\n read(name) {\r\n let cookieValue = '',\r\n search = name + '=';\r\n if (doc.cookie.length > 0) {\r\n let cookie = doc.cookie,\r\n offset = cookie.indexOf(search);\r\n if (offset !== -1) {\r\n offset += search.length;\r\n let end = cookie.indexOf(';', offset);\r\n if (end === -1) {\r\n end = cookie.length;\r\n }\r\n cookieValue = unescape(cookie.substring(offset, end));\r\n }\r\n }\r\n return cookieValue;\r\n },\r\n\r\n /**\r\n * Remove a cookie\r\n * @param {String} name Name of the cookie\r\n */\r\n remove(name) {\r\n this.write(name, '', -1);\r\n }\r\n\r\n};\r\n","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n rangeIsValid = require('./rangeIsValid'),\n incrementDate = require('./incrementDate'),\n incrementNumber = require('./incrementNumber'),\n incrementString = require('./incrementString'),\n getGreaterPrecision = require('./getGreaterPrecision'),\n getDateIncrementObject = require('./getDateIncrementObject');\n\nvar isNumber = classChecks.isNumber,\n isString = classChecks.isString,\n isDate = classChecks.isDate,\n isFunction = classChecks.isFunction;\n\nfunction rangeEvery(range, step, countOnly, fn) {\n var increment,\n precision,\n dio,\n unit,\n start = range.start,\n end = range.end,\n inverse = end < start,\n current = start,\n index = 0,\n result = [];\n\n if (!rangeIsValid(range)) {\n return countOnly ? NaN : [];\n }\n if (isFunction(step)) {\n fn = step;\n step = null;\n }\n step = step || 1;\n if (isNumber(start)) {\n precision = getGreaterPrecision(start, step);\n increment = function() {\n return incrementNumber(current, step, precision);\n };\n } else if (isString(start)) {\n increment = function() {\n return incrementString(current, step);\n };\n } else if (isDate(start)) {\n dio = getDateIncrementObject(step);\n step = dio[0];\n unit = dio[1];\n increment = function() {\n return incrementDate(current, step, unit);\n };\n }\n // Avoiding infinite loops\n if (inverse && step > 0) {\n step *= -1;\n }\n while(inverse ? current >= end : current <= end) {\n if (!countOnly) {\n result.push(current);\n }\n if (fn) {\n fn(current, index, range);\n }\n current = increment();\n index++;\n }\n return countOnly ? index - 1 : result;\n}\n\nmodule.exports = rangeEvery;","'use strict';\n\nmodule.exports = 'year|month|week|day|hour|minute|second|millisecond';","'use strict';\n\nvar ISODefaults = require('../var/ISODefaults'),\n setDate = require('./setDate'),\n getDate = require('./getDate'),\n cloneDate = require('./cloneDate'),\n isUndefined = require('../../common/internal/isUndefined'),\n moveToEndOfWeek = require('./moveToEndOfWeek'),\n moveToBeginningOfWeek = require('./moveToBeginningOfWeek'),\n moveToFirstDayOfWeekYear = require('./moveToFirstDayOfWeekYear');\n\nvar ISO_FIRST_DAY_OF_WEEK = ISODefaults.ISO_FIRST_DAY_OF_WEEK,\n ISO_FIRST_DAY_OF_WEEK_YEAR = ISODefaults.ISO_FIRST_DAY_OF_WEEK_YEAR;\n\nfunction getWeekNumber(d, allowPrevious, firstDayOfWeek, firstDayOfWeekYear) {\n var isoWeek, n = 0;\n if (isUndefined(firstDayOfWeek)) {\n firstDayOfWeek = ISO_FIRST_DAY_OF_WEEK;\n }\n if (isUndefined(firstDayOfWeekYear)) {\n firstDayOfWeekYear = ISO_FIRST_DAY_OF_WEEK_YEAR;\n }\n // Moving to the end of the week allows for forward year traversal, ie\n // Dec 29 2014 is actually week 01 of 2015.\n isoWeek = moveToEndOfWeek(cloneDate(d), firstDayOfWeek);\n moveToFirstDayOfWeekYear(isoWeek, firstDayOfWeek, firstDayOfWeekYear);\n if (allowPrevious && d < isoWeek) {\n // If the date is still before the start of the year, then it should be\n // the last week of the previous year, ie Jan 1 2016 is actually week 53\n // of 2015, so move to the beginning of the week to traverse the year.\n isoWeek = moveToBeginningOfWeek(cloneDate(d), firstDayOfWeek);\n moveToFirstDayOfWeekYear(isoWeek, firstDayOfWeek, firstDayOfWeekYear);\n }\n while (isoWeek <= d) {\n // Doing a very simple walk to get the week number.\n setDate(isoWeek, getDate(isoWeek) + 7);\n n++;\n }\n return n;\n}\n\nmodule.exports = getWeekNumber;","'use strict';\n\nvar mathAliases = require('../var/mathAliases'),\n repeatString = require('./repeatString');\n\nvar abs = mathAliases.abs;\n\nfunction padNumber(num, place, sign, base, replacement) {\n var str = abs(num).toString(base || 10);\n str = repeatString(replacement || '0', place - str.replace(/\\.\\d+/, '').length) + str;\n if (sign || num < 0) {\n str = (num < 0 ? '-' : '+') + str;\n }\n return str;\n}\n\nmodule.exports = padNumber;","'use strict';\n\nvar trunc = require('../../common/var/trunc'),\n cloneDate = require('./cloneDate'),\n advanceDate = require('./advanceDate');\n\nfunction getTimeDistanceForUnit(d1, d2, unit) {\n var fwd = d2 > d1, num, tmp;\n if (!fwd) {\n tmp = d2;\n d2 = d1;\n d1 = tmp;\n }\n num = d2 - d1;\n if (unit.multiplier > 1) {\n num = trunc(num / unit.multiplier);\n }\n // For higher order with potential ambiguity, use the numeric calculation\n // as a starting point, then iterate until we pass the target date. Decrement\n // starting point by 1 to prevent overshooting the date due to inconsistencies\n // in ambiguous units numerically. For example, calculating the number of days\n // from the beginning of the year to August 5th at 11:59:59 by doing a simple\n // d2 - d1 will produce different results depending on whether or not a\n // timezone shift was encountered due to DST, however that should not have an\n // effect on our calculation here, so subtract by 1 to ensure that the\n // starting point has not already overshot our target date.\n if (unit.ambiguous) {\n d1 = cloneDate(d1);\n if (num) {\n num -= 1;\n advanceDate(d1, unit.name, num);\n }\n while (d1 < d2) {\n advanceDate(d1, unit.name, 1);\n if (d1 > d2) {\n break;\n }\n num += 1;\n }\n }\n return fwd ? -num : num;\n}\n\nmodule.exports = getTimeDistanceForUnit;","'use strict';\n\nfunction simpleCapitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nmodule.exports = simpleCapitalize;","'use strict';\n\nvar setWeekday = require('./setWeekday'),\n getWeekday = require('./getWeekday'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar floor = mathAliases.floor;\n\nfunction moveToBeginningOfWeek(d, firstDayOfWeek) {\n setWeekday(d, floor((getWeekday(d) - firstDayOfWeek) / 7) * 7 + firstDayOfWeek);\n return d;\n}\n\nmodule.exports = moveToBeginningOfWeek;","'use strict';\n\nvar DATE_OPTIONS = require('./DATE_OPTIONS'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n defineOptionsAccessor = require('../../common/internal/defineOptionsAccessor');\n\nvar sugarDate = namespaceAliases.sugarDate;\n\nmodule.exports = defineOptionsAccessor(sugarDate, DATE_OPTIONS);","'use strict';\n\nvar MINUTES = require('../var/MINUTES'),\n ABBREVIATED_YEAR_REG = require('../var/ABBREVIATED_YEAR_REG'),\n LocaleHelpers = require('../var/LocaleHelpers'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n _utc = require('../../common/var/_utc'),\n trunc = require('../../common/var/trunc'),\n forEach = require('../../common/internal/forEach'),\n tzOffset = require('./tzOffset'),\n isDefined = require('../../common/internal/isDefined'),\n resetTime = require('./resetTime'),\n getNewDate = require('./getNewDate'),\n updateDate = require('./updateDate'),\n setWeekday = require('./setWeekday'),\n simpleMerge = require('../../common/internal/simpleMerge'),\n advanceDate = require('./advanceDate'),\n isUndefined = require('../../common/internal/isUndefined'),\n classChecks = require('../../common/var/classChecks'),\n dateIsValid = require('./dateIsValid'),\n simpleClone = require('../../common/internal/simpleClone'),\n isObjectType = require('../../common/internal/isObjectType'),\n moveToEndOfUnit = require('./moveToEndOfUnit'),\n deleteDateParam = require('./deleteDateParam'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases'),\n moveToBeginningOfUnit = require('./moveToBeginningOfUnit'),\n iterateOverDateParams = require('./iterateOverDateParams'),\n getYearFromAbbreviation = require('./getYearFromAbbreviation'),\n iterateOverHigherDateParams = require('./iterateOverHigherDateParams');\n\nvar isNumber = classChecks.isNumber,\n isString = classChecks.isString,\n isDate = classChecks.isDate,\n getOwn = coreUtilityAliases.getOwn,\n English = LocaleHelpers.English,\n localeManager = LocaleHelpers.localeManager,\n DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX,\n YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction getExtendedDate(contextDate, d, opt, forceClone) {\n\n // Locals\n var date, set, loc, afterCallbacks, relative, weekdayDir;\n\n // Options\n var optPrefer, optLocale, optFromUTC, optSetUTC, optParams, optClone;\n\n afterCallbacks = [];\n\n setupOptions(opt);\n\n function setupOptions(opt) {\n opt = isString(opt) ? { locale: opt } : opt || {};\n optPrefer = +!!getOwn(opt, 'future') - +!!getOwn(opt, 'past');\n optLocale = getOwn(opt, 'locale');\n optFromUTC = getOwn(opt, 'fromUTC');\n optSetUTC = getOwn(opt, 'setUTC');\n optParams = getOwn(opt, 'params');\n optClone = getOwn(opt, 'clone');\n }\n\n function parseFormatValues(match, dif) {\n var set = optParams || {};\n forEach(dif.to, function(param, i) {\n var str = match[i + 1], val;\n if (!str) return;\n\n val = parseIrregular(str, param);\n\n if (isUndefined(val)) {\n val = loc.parseValue(str, param);\n }\n\n set[param] = val;\n });\n return set;\n }\n\n function parseIrregular(str, param) {\n if (param === 'utc') {\n return 1;\n } else if (param === 'year') {\n var match = str.match(ABBREVIATED_YEAR_REG);\n if (match) {\n return getYearFromAbbreviation(match[1], date, optPrefer);\n }\n }\n }\n\n // Force the UTC flags to be true if the source date\n // date is UTC, as they will be overwritten later.\n function cloneDateByFlag(d, clone) {\n if (_utc(d) && !isDefined(optFromUTC)) {\n optFromUTC = true;\n }\n if (_utc(d) && !isDefined(optSetUTC)) {\n optSetUTC = true;\n }\n if (clone) {\n d = new Date(d.getTime());\n }\n return d;\n }\n\n function afterDateSet(fn) {\n afterCallbacks.push(fn);\n }\n\n function fireCallbacks() {\n forEach(afterCallbacks, function(fn) {\n fn.call();\n });\n }\n\n function parseStringDate(str) {\n\n str = str.toLowerCase();\n\n // The act of getting the locale will initialize\n // if it is missing and add the required formats.\n loc = localeManager.get(optLocale);\n\n for (var i = 0, dif, match; dif = loc.compiledFormats[i]; i++) {\n match = str.match(dif.reg);\n if (match) {\n\n // Note that caching the format will modify the compiledFormats array\n // which is not a good idea to do inside its for loop, however we\n // know at this point that we have a matched format and that we will\n // break out below, so simpler to do it here.\n loc.cacheFormat(dif, i);\n\n set = parseFormatValues(match, dif);\n\n if (isDefined(set.timestamp)) {\n date.setTime(set.timestamp);\n break;\n }\n\n if (isDefined(set.ampm)) {\n handleAmpm(set.ampm);\n }\n\n if (set.utc || isDefined(set.tzHour)) {\n handleTimezoneOffset(set.tzHour, set.tzMinute);\n }\n\n if (isDefined(set.shift) && isUndefined(set.unit)) {\n // \"next january\", \"next monday\", etc\n handleUnitlessShift();\n }\n\n if (isDefined(set.num) && isUndefined(set.unit)) {\n // \"the second of January\", etc\n handleUnitlessNum(set.num);\n }\n\n if (set.midday) {\n // \"noon\" and \"midnight\"\n handleMidday(set.midday);\n }\n\n if (isDefined(set.day)) {\n // Relative day localizations such as \"today\" and \"tomorrow\".\n handleRelativeDay(set.day);\n }\n\n if (isDefined(set.unit)) {\n // \"3 days ago\", etc\n handleRelativeUnit(set.unit);\n }\n\n if (set.edge) {\n // \"the end of January\", etc\n handleEdge(set.edge, set);\n }\n\n break;\n }\n }\n\n if (!set) {\n // TODO: remove in next major version\n // Fall back to native parsing\n date = new Date(str);\n if (optFromUTC && dateIsValid(date)) {\n // Falling back to system date here which cannot be parsed as UTC,\n // so if we're forcing UTC then simply add the offset.\n date.setTime(date.getTime() + (tzOffset(date) * MINUTES));\n }\n } else if (relative) {\n updateDate(date, set, false, 1);\n } else {\n updateDate(date, set, true, 0, optPrefer, weekdayDir, contextDate);\n }\n fireCallbacks();\n return date;\n }\n\n function handleAmpm(ampm) {\n if (ampm === 1 && set.hour < 12) {\n // If the time is 1pm-11pm advance the time by 12 hours.\n set.hour += 12;\n } else if (ampm === 0 && set.hour === 12) {\n // If it is 12:00am then set the hour to 0.\n set.hour = 0;\n }\n }\n\n function handleTimezoneOffset(tzHour, tzMinute) {\n // Adjust for timezone offset\n _utc(date, true);\n\n // Sign is parsed as part of the hour, so flip\n // the minutes if it's negative.\n\n if (tzHour < 0) {\n tzMinute *= -1;\n }\n\n var offset = tzHour * 60 + (tzMinute || 0);\n if (offset) {\n set.minute = (set.minute || 0) - offset;\n }\n }\n\n function handleUnitlessShift() {\n if (isDefined(set.month)) {\n // \"next January\"\n set.unit = YEAR_INDEX;\n } else if (isDefined(set.weekday)) {\n // \"next Monday\"\n set.unit = WEEK_INDEX;\n }\n }\n\n function handleUnitlessNum(num) {\n if (isDefined(set.weekday)) {\n // \"The second Tuesday of March\"\n setOrdinalWeekday(num);\n } else if (isDefined(set.month)) {\n // \"The second of March\"\n set.date = set.num;\n }\n }\n\n function handleMidday(hour) {\n set.hour = hour % 24;\n if (hour > 23) {\n // If the date has hours past 24, we need to prevent it from traversing\n // into a new day as that would make it being part of a new week in\n // ambiguous dates such as \"Monday\".\n afterDateSet(function() {\n advanceDate(date, 'date', trunc(hour / 24));\n });\n }\n }\n\n function handleRelativeDay() {\n resetTime(date);\n if (isUndefined(set.unit)) {\n set.unit = DAY_INDEX;\n set.num = set.day;\n delete set.day;\n }\n }\n\n function handleRelativeUnit(unitIndex) {\n var num;\n\n if (isDefined(set.num)) {\n num = set.num;\n } else if (isDefined(set.edge) && isUndefined(set.shift)) {\n num = 0;\n } else {\n num = 1;\n }\n\n // If a weekday is defined, there are 3 possible formats being applied:\n //\n // 1. \"the day after monday\": unit is days\n // 2. \"next monday\": short for \"next week monday\", unit is weeks\n // 3. \"the 2nd monday of next month\": unit is months\n //\n // In the first case, we need to set the weekday up front, as the day is\n // relative to it. The second case also needs to be handled up front for\n // formats like \"next monday at midnight\" which will have its weekday reset\n // if not set up front. The last case will set up the params necessary to\n // shift the weekday and allow separateAbsoluteUnits below to handle setting\n // it after the date has been shifted.\n if(isDefined(set.weekday)) {\n if(unitIndex === MONTH_INDEX) {\n setOrdinalWeekday(num);\n num = 1;\n } else {\n updateDate(date, { weekday: set.weekday }, true);\n delete set.weekday;\n }\n }\n\n if (set.half) {\n // Allow localized \"half\" as a standalone colloquialism. Purposely avoiding\n // the locale number system to reduce complexity. The units \"month\" and\n // \"week\" are purposely excluded in the English date formats below, as\n // \"half a week\" and \"half a month\" are meaningless as exact dates.\n num *= set.half;\n }\n\n if (isDefined(set.shift)) {\n // Shift and unit, ie \"next month\", \"last week\", etc.\n num *= set.shift;\n } else if (set.sign) {\n // Unit and sign, ie \"months ago\", \"weeks from now\", etc.\n num *= set.sign;\n }\n\n if (isDefined(set.day)) {\n // \"the day after tomorrow\"\n num += set.day;\n delete set.day;\n }\n\n // Formats like \"the 15th of last month\" or \"6:30pm of next week\"\n // contain absolute units in addition to relative ones, so separate\n // them here, remove them from the params, and set up a callback to\n // set them after the relative ones have been set.\n separateAbsoluteUnits(unitIndex);\n\n // Finally shift the unit.\n set[English.units[unitIndex]] = num;\n relative = true;\n }\n\n function handleEdge(edge, params) {\n var edgeIndex = params.unit, weekdayOfMonth;\n if (!edgeIndex) {\n // If we have \"the end of January\", then we need to find the unit index.\n iterateOverHigherDateParams(params, function(unitName, val, unit, i) {\n if (unitName === 'weekday' && isDefined(params.month)) {\n // If both a month and weekday exist, then we have a format like\n // \"the last tuesday in November, 2012\", where the \"last\" is still\n // relative to the end of the month, so prevent the unit \"weekday\"\n // from taking over.\n return;\n }\n edgeIndex = i;\n });\n }\n if (edgeIndex === MONTH_INDEX && isDefined(params.weekday)) {\n // If a weekday in a month exists (as described above),\n // then set it up to be set after the date has been shifted.\n weekdayOfMonth = params.weekday;\n delete params.weekday;\n }\n afterDateSet(function() {\n var stopIndex;\n // \"edge\" values that are at the very edge are \"2\" so the beginning of the\n // year is -2 and the end of the year is 2. Conversely, the \"last day\" is\n // actually 00:00am so it is 1. -1 is reserved but unused for now.\n if (edge < 0) {\n moveToBeginningOfUnit(date, edgeIndex, optLocale);\n } else if (edge > 0) {\n if (edge === 1) {\n stopIndex = DAY_INDEX;\n moveToBeginningOfUnit(date, DAY_INDEX);\n }\n moveToEndOfUnit(date, edgeIndex, optLocale, stopIndex);\n }\n if (isDefined(weekdayOfMonth)) {\n setWeekday(date, weekdayOfMonth, -edge);\n resetTime(date);\n }\n });\n if (edgeIndex === MONTH_INDEX) {\n params.specificity = DAY_INDEX;\n } else {\n params.specificity = edgeIndex - 1;\n }\n }\n\n function setOrdinalWeekday(num) {\n // If we have \"the 2nd Tuesday of June\", then pass the \"weekdayDir\"\n // flag along to updateDate so that the date does not accidentally traverse\n // into the previous month. This needs to be independent of the \"prefer\"\n // flag because we are only ensuring that the weekday is in the future, not\n // the entire date.\n set.weekday = 7 * (num - 1) + set.weekday;\n set.date = 1;\n weekdayDir = 1;\n }\n\n function separateAbsoluteUnits(unitIndex) {\n var params;\n\n iterateOverDateParams(set, function(name, val, unit, i) {\n // If there is a time unit set that is more specific than\n // the matched unit we have a string like \"5:30am in 2 minutes\",\n // which is meaningless, so invalidate the date...\n if (i >= unitIndex) {\n date.setTime(NaN);\n return false;\n } else if (i < unitIndex) {\n // ...otherwise set the params to set the absolute date\n // as a callback after the relative date has been set.\n params = params || {};\n params[name] = val;\n deleteDateParam(set, name);\n }\n });\n if (params) {\n afterDateSet(function() {\n updateDate(date, params, true, 0, false, weekdayDir);\n if (optParams) {\n simpleMerge(optParams, params);\n }\n });\n if (set.edge) {\n // \"the end of March of next year\"\n handleEdge(set.edge, params);\n delete set.edge;\n }\n }\n }\n\n if (contextDate && d) {\n // If a context date is passed (\"get\" and \"unitsFromNow\"),\n // then use it as the starting point.\n date = cloneDateByFlag(contextDate, true);\n } else {\n date = getNewDate();\n }\n\n _utc(date, optFromUTC);\n\n if (isString(d)) {\n date = parseStringDate(d);\n } else if (isDate(d)) {\n date = cloneDateByFlag(d, optClone || forceClone);\n } else if (isObjectType(d)) {\n set = simpleClone(d);\n updateDate(date, set, true);\n } else if (isNumber(d) || d === null) {\n date.setTime(d);\n }\n // A date created by parsing a string presumes that the format *itself* is\n // UTC, but not that the date, once created, should be manipulated as such. In\n // other words, if you are creating a date object from a server time\n // \"2012-11-15T12:00:00Z\", in the majority of cases you are using it to create\n // a date that will, after creation, be manipulated as local, so reset the utc\n // flag here unless \"setUTC\" is also set.\n _utc(date, !!optSetUTC);\n return {\n set: set,\n date: date\n };\n}\n\nmodule.exports = getExtendedDate;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n isUndefined = require('../../common/internal/isUndefined');\n\nvar YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction iterateOverDateUnits(fn, startIndex, endIndex) {\n endIndex = endIndex || 0;\n if (isUndefined(startIndex)) {\n startIndex = YEAR_INDEX;\n }\n for (var index = startIndex; index >= endIndex; index--) {\n if (fn(DateUnits[index], index) === false) {\n break;\n }\n }\n}\n\nmodule.exports = iterateOverDateUnits;","'use strict';\n\nfunction isObjectType(obj, type) {\n return !!obj && (type || typeof obj) === 'object';\n}\n\nmodule.exports = isObjectType;","'use strict';\n\nmodule.exports = {\n ISO_FIRST_DAY_OF_WEEK: 1,\n ISO_FIRST_DAY_OF_WEEK_YEAR: 4\n};","'use strict';\n\nvar EnglishLocaleBaseDefinition = require('../var/EnglishLocaleBaseDefinition'),\n simpleMerge = require('../../common/internal/simpleMerge'),\n simpleClone = require('../../common/internal/simpleClone');\n\nfunction getEnglishVariant(v) {\n return simpleMerge(simpleClone(EnglishLocaleBaseDefinition), v);\n}\n\nmodule.exports = getEnglishVariant;","exports.remove = removeDiacritics;\n\nvar replacementList = [\n {\n base: ' ',\n chars: \"\\u00A0\",\n }, {\n base: '0',\n chars: \"\\u07C0\",\n }, {\n base: 'A',\n chars: \"\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F\",\n }, {\n base: 'AA',\n chars: \"\\uA732\",\n }, {\n base: 'AE',\n chars: \"\\u00C6\\u01FC\\u01E2\",\n }, {\n base: 'AO',\n chars: \"\\uA734\",\n }, {\n base: 'AU',\n chars: \"\\uA736\",\n }, {\n base: 'AV',\n chars: \"\\uA738\\uA73A\",\n }, {\n base: 'AY',\n chars: \"\\uA73C\",\n }, {\n base: 'B',\n chars: \"\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0181\",\n }, {\n base: 'C',\n chars: \"\\u24b8\\uff23\\uA73E\\u1E08\\u0106\\u0043\\u0108\\u010A\\u010C\\u00C7\\u0187\\u023B\",\n }, {\n base: 'D',\n chars: \"\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018A\\u0189\\u1D05\\uA779\",\n }, {\n base: 'Dh',\n chars: \"\\u00D0\",\n }, {\n base: 'DZ',\n chars: \"\\u01F1\\u01C4\",\n }, {\n base: 'Dz',\n chars: \"\\u01F2\\u01C5\",\n }, {\n base: 'E',\n chars: \"\\u025B\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E\\u1D07\",\n }, {\n base: 'F',\n chars: \"\\uA77C\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B\",\n }, {\n base: 'G',\n chars: \"\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E\\u0262\",\n }, {\n base: 'H',\n chars: \"\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D\",\n }, {\n base: 'I',\n chars: \"\\u24BE\\uFF29\\xCC\\xCD\\xCE\\u0128\\u012A\\u012C\\u0130\\xCF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197\",\n }, {\n base: 'J',\n chars: \"\\u24BF\\uFF2A\\u0134\\u0248\\u0237\",\n }, {\n base: 'K',\n chars: \"\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2\",\n }, {\n base: 'L',\n chars: \"\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780\",\n }, {\n base: 'LJ',\n chars: \"\\u01C7\",\n }, {\n base: 'Lj',\n chars: \"\\u01C8\",\n }, {\n base: 'M',\n chars: \"\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C\\u03FB\",\n }, {\n base: 'N',\n chars: \"\\uA7A4\\u0220\\u24C3\\uFF2E\\u01F8\\u0143\\xD1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u019D\\uA790\\u1D0E\",\n }, {\n base: 'NJ',\n chars: \"\\u01CA\",\n }, {\n base: 'Nj',\n chars: \"\\u01CB\",\n }, {\n base: 'O',\n chars: \"\\u24C4\\uFF2F\\xD2\\xD3\\xD4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\xD5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\xD6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\xD8\\u01FE\\u0186\\u019F\\uA74A\\uA74C\",\n }, {\n base: 'OE',\n chars: \"\\u0152\",\n }, {\n base: 'OI',\n chars: \"\\u01A2\",\n }, {\n base: 'OO',\n chars: \"\\uA74E\",\n }, {\n base: 'OU',\n chars: \"\\u0222\",\n }, {\n base: 'P',\n chars: \"\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754\",\n }, {\n base: 'Q',\n chars: \"\\u24C6\\uFF31\\uA756\\uA758\\u024A\",\n }, {\n base: 'R',\n chars: \"\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782\",\n }, {\n base: 'S',\n chars: \"\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784\",\n }, {\n base: 'T',\n chars: \"\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786\",\n }, {\n base: 'Th',\n chars: \"\\u00DE\",\n }, {\n base: 'TZ',\n chars: \"\\uA728\",\n }, {\n base: 'U',\n chars: \"\\u24CA\\uFF35\\xD9\\xDA\\xDB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\xDC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244\",\n }, {\n base: 'V',\n chars: \"\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245\",\n }, {\n base: 'VY',\n chars: \"\\uA760\",\n }, {\n base: 'W',\n chars: \"\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72\",\n }, {\n base: 'X',\n chars: \"\\u24CD\\uFF38\\u1E8A\\u1E8C\",\n }, {\n base: 'Y',\n chars: \"\\u24CE\\uFF39\\u1EF2\\xDD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE\",\n }, {\n base: 'Z',\n chars: \"\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762\",\n }, {\n base: 'a',\n chars: \"\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250\\u0251\",\n }, {\n base: 'aa',\n chars: \"\\uA733\",\n }, {\n base: 'ae',\n chars: \"\\u00E6\\u01FD\\u01E3\",\n }, {\n base: 'ao',\n chars: \"\\uA735\",\n }, {\n base: 'au',\n chars: \"\\uA737\",\n }, {\n base: 'av',\n chars: \"\\uA739\\uA73B\",\n }, {\n base: 'ay',\n chars: \"\\uA73D\",\n }, {\n base: 'b',\n chars: \"\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253\\u0182\",\n }, {\n base: 'c',\n chars: \"\\uFF43\\u24D2\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184\",\n }, {\n base: 'd',\n chars: \"\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\u018B\\u13E7\\u0501\\uA7AA\",\n }, {\n base: 'dh',\n chars: \"\\u00F0\",\n }, {\n base: 'dz',\n chars: \"\\u01F3\\u01C6\",\n }, {\n base: 'e',\n chars: \"\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u01DD\",\n }, {\n base: 'f',\n chars: \"\\u24D5\\uFF46\\u1E1F\\u0192\",\n }, {\n base: 'ff',\n chars: \"\\uFB00\",\n }, {\n base: 'fi',\n chars: \"\\uFB01\",\n }, {\n base: 'fl',\n chars: \"\\uFB02\",\n }, {\n base: 'ffi',\n chars: \"\\uFB03\",\n }, {\n base: 'ffl',\n chars: \"\\uFB04\",\n }, {\n base: 'g',\n chars: \"\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\uA77F\\u1D79\",\n }, {\n base: 'h',\n chars: \"\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265\",\n }, {\n base: 'hv',\n chars: \"\\u0195\",\n }, {\n base: 'i',\n chars: \"\\u24D8\\uFF49\\xEC\\xED\\xEE\\u0129\\u012B\\u012D\\xEF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131\",\n }, {\n base: 'j',\n chars: \"\\u24D9\\uFF4A\\u0135\\u01F0\\u0249\",\n }, {\n base: 'k',\n chars: \"\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3\",\n }, {\n base: 'l',\n chars: \"\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747\\u026D\",\n }, {\n base: 'lj',\n chars: \"\\u01C9\",\n }, {\n base: 'm',\n chars: \"\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F\",\n }, {\n base: 'n',\n chars: \"\\u24DD\\uFF4E\\u01F9\\u0144\\xF1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5\\u043B\\u0509\",\n }, {\n base: 'nj',\n chars: \"\\u01CC\",\n }, {\n base: 'o',\n chars: \"\\u24DE\\uFF4F\\xF2\\xF3\\xF4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\xF5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\xF6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\xF8\\u01FF\\uA74B\\uA74D\\u0275\\u0254\\u1D11\",\n }, {\n base: 'oe',\n chars: \"\\u0153\",\n }, {\n base: 'oi',\n chars: \"\\u01A3\",\n }, {\n base: 'oo',\n chars: \"\\uA74F\",\n }, {\n base: 'ou',\n chars: \"\\u0223\",\n }, {\n base: 'p',\n chars: \"\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755\\u03C1\",\n }, {\n base: 'q',\n chars: \"\\u24E0\\uFF51\\u024B\\uA757\\uA759\",\n }, {\n base: 'r',\n chars: \"\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783\",\n }, {\n base: 's',\n chars: \"\\u24E2\\uFF53\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B\\u0282\",\n }, {\n base: 'ss',\n chars: \"\\xDF\",\n }, {\n base: 't',\n chars: \"\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787\",\n }, {\n base: 'th',\n chars: \"\\u00FE\",\n }, {\n base: 'tz',\n chars: \"\\uA729\",\n }, {\n base: 'u',\n chars: \"\\u24E4\\uFF55\\xF9\\xFA\\xFB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\xFC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289\",\n }, {\n base: 'v',\n chars: \"\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C\",\n }, {\n base: 'vy',\n chars: \"\\uA761\",\n }, {\n base: 'w',\n chars: \"\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73\",\n }, {\n base: 'x',\n chars: \"\\u24E7\\uFF58\\u1E8B\\u1E8D\",\n }, {\n base: 'y',\n chars: \"\\u24E8\\uFF59\\u1EF3\\xFD\\u0177\\u1EF9\\u0233\\u1E8F\\xFF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF\",\n }, {\n base: 'z',\n chars: \"\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763\",\n }\n];\n\nvar diacriticsMap = {};\nfor (var i = 0; i < replacementList.length; i += 1) {\n var chars = replacementList[i].chars;\n for (var j = 0; j < chars.length; j += 1) {\n diacriticsMap[chars[j]] = replacementList[i].base;\n }\n}\n\nfunction removeDiacritics(str) {\n return str.replace(/[^\\u0000-\\u007e]/g, function(c) {\n return diacriticsMap[c] || c;\n });\n}\n\nexports.replacementList = replacementList;\nexports.diacriticsMap = diacriticsMap;\n","import {BaseDropdown} from './baseDropdown';\r\nimport {\r\n addClass, createCheckItem, createText, createElm, elm, removeClass, tag\r\n} from '../dom';\r\nimport {has} from '../array';\r\nimport {matchCase, trim, rgxEsc} from '../string';\r\nimport {addEvt, removeEvt, targetEvt} from '../event';\r\nimport {isEmpty} from '../types';\r\nimport {CHECKLIST, NONE} from '../const';\r\nimport {defaultsStr, defaultsBool} from '../settings';\r\n\r\n/**\r\n * Checklist filter UI component\r\n * @export\r\n * @class CheckList\r\n * @extends {BaseDropdown}\r\n */\r\nexport class CheckList extends BaseDropdown {\r\n\r\n /**\r\n * Creates an instance of CheckList\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'checkList');\r\n\r\n let f = this.config;\r\n\r\n /**\r\n * List of container DOM elements\r\n * @type {Array}\r\n */\r\n this.containers = [];\r\n\r\n /**\r\n * Css class for the container of the checklist filter (div)\r\n * @type {String}\r\n */\r\n this.containerCssClass = defaultsStr(f.div_checklist_css_class,\r\n 'div_checklist');\r\n\r\n /**\r\n * Css class for the checklist filter element (ul)\r\n * @type {String}\r\n */\r\n this.filterCssClass = defaultsStr(f.checklist_css_class,\r\n 'flt_checklist');\r\n\r\n /**\r\n * Css class for the item of a checklist (li)\r\n * @type {String}\r\n */\r\n this.itemCssClass = defaultsStr(f.checklist_item_css_class,\r\n 'flt_checklist_item');\r\n\r\n /**\r\n * Css class for a selected item of a checklist (li)\r\n * @type {String}\r\n */\r\n this.selectedItemCssClass = defaultsStr(\r\n f.checklist_selected_item_css_class,\r\n 'flt_checklist_slc_item'\r\n );\r\n\r\n /**\r\n * Text placed in the filter's container when load filter on demand\r\n * feature is enabled\r\n * @type {String}\r\n */\r\n this.activateText = defaultsStr(\r\n f.activate_checklist_text,\r\n 'Click to load filter data'\r\n );\r\n\r\n /**\r\n * Css class for a disabled item of a checklist (li)\r\n * @type {String}\r\n */\r\n this.disabledItemCssClass = defaultsStr(\r\n f.checklist_item_disabled_css_class,\r\n 'flt_checklist_item_disabled'\r\n );\r\n\r\n /**\r\n * Enable the reset filter option as first item\r\n * @type {Boolean}\r\n */\r\n this.enableResetOption = defaultsBool(f.enable_checklist_reset_filter,\r\n true);\r\n\r\n /**\r\n * Prefix for container element ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfx = 'chkdiv_';\r\n }\r\n\r\n /**\r\n * Checklist option click event handler\r\n * @param {Event} evt\r\n * @private\r\n */\r\n optionClick(evt) {\r\n let elm = targetEvt(evt);\r\n let tf = this.tf;\r\n\r\n this.emitter.emit('filter-focus', tf, elm);\r\n this.setItemOption(elm);\r\n tf.filter();\r\n }\r\n\r\n /**\r\n * Checklist container click event handler for load-on-demand feature\r\n * @param {Event} evt\r\n * @private\r\n */\r\n onCheckListClick(evt) {\r\n let elm = targetEvt(evt);\r\n if (this.tf.loadFltOnDemand && elm.getAttribute('filled') === '0') {\r\n let ct = elm.getAttribute('ct');\r\n let div = this.containers[ct];\r\n this.build(ct);\r\n removeEvt(div, 'click', (evt) => this.onCheckListClick(evt));\r\n }\r\n }\r\n\r\n /**\r\n * Refresh all checklist filters\r\n */\r\n refreshAll() {\r\n let colIdxs = this.tf.getFiltersByType(CHECKLIST, true);\r\n this.refreshFilters(colIdxs);\r\n }\r\n\r\n /**\r\n * Initialize checklist filter\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isExternal External filter flag\r\n * @param {DOMElement} container Dom element containing the filter\r\n */\r\n init(colIndex, isExternal, container) {\r\n let tf = this.tf;\r\n let externalFltTgtId = isExternal ?\r\n tf.externalFltIds[colIndex] : null;\r\n\r\n let divCont = createElm('div',\r\n ['id', `${this.prfx}${colIndex}_${tf.id}`],\r\n ['ct', colIndex], ['filled', '0']);\r\n divCont.className = this.containerCssClass;\r\n\r\n //filter is appended in desired element\r\n if (externalFltTgtId) {\r\n elm(externalFltTgtId).appendChild(divCont);\r\n } else {\r\n container.appendChild(divCont);\r\n }\r\n\r\n this.containers[colIndex] = divCont;\r\n tf.fltIds.push(tf.buildFilterId(colIndex));\r\n\r\n if (!tf.loadFltOnDemand) {\r\n this.build(colIndex);\r\n } else {\r\n addEvt(divCont, 'click', (evt) => this.onCheckListClick(evt));\r\n divCont.appendChild(createText(this.activateText));\r\n }\r\n\r\n this.emitter.on(\r\n ['build-checklist-filter'],\r\n (tf, colIndex, isLinked) => this.build(colIndex, isLinked)\r\n );\r\n\r\n this.emitter.on(\r\n ['select-checklist-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n\r\n this.emitter.on(['rows-changed'], () => this.refreshAll());\r\n\r\n this.emitter.on(['after-filtering'], () => this.linkFilters());\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Build checklist UI\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isLinked Enable linked filters behaviour\r\n */\r\n build(colIndex, isLinked = false) {\r\n let tf = this.tf;\r\n colIndex = Number(colIndex);\r\n\r\n this.emitter.emit('before-populating-filter', tf, colIndex);\r\n\r\n /** @inherited */\r\n this.opts = [];\r\n /** @inherited */\r\n this.optsTxt = [];\r\n\r\n let flt = this.containers[colIndex];\r\n let ul = createElm('ul',\r\n ['id', tf.fltIds[colIndex]],\r\n ['colIndex', colIndex]);\r\n ul.className = this.filterCssClass;\r\n\r\n let caseSensitive = tf.caseSensitive;\r\n /** @inherited */\r\n this.isCustom = tf.isCustomOptions(colIndex);\r\n\r\n //Retrieves custom values\r\n if (this.isCustom) {\r\n let customValues = tf.getCustomOptions(colIndex);\r\n this.opts = customValues[0];\r\n this.optsTxt = customValues[1];\r\n }\r\n\r\n let activeIdx;\r\n let activeFilterId = tf.getActiveFilterId();\r\n\r\n if (isLinked && activeFilterId) {\r\n activeIdx = tf.getColumnIndexFromFilterId(activeFilterId);\r\n }\r\n\r\n let filteredDataCol = [];\r\n if (isLinked && tf.disableExcludedOptions) {\r\n /** @inherited */\r\n this.excludedOpts = [];\r\n }\r\n\r\n flt.innerHTML = '';\r\n\r\n let eachRow = tf.eachRow();\r\n eachRow(\r\n (row) => {\r\n let cellValue = tf.getCellValue(row.cells[colIndex]);\r\n //Vary Peter's patch\r\n let cellString = matchCase(cellValue, caseSensitive);\r\n // checks if celldata is already in array\r\n if (!has(this.opts, cellString, caseSensitive)) {\r\n this.opts.push(cellValue);\r\n }\r\n let filteredCol = filteredDataCol[colIndex];\r\n if (isLinked && tf.disableExcludedOptions) {\r\n if (!filteredCol) {\r\n filteredCol = tf.getVisibleColumnValues(colIndex);\r\n }\r\n if (!has(filteredCol, cellString, caseSensitive) &&\r\n !has(this.excludedOpts, cellString, caseSensitive)) {\r\n this.excludedOpts.push(cellValue);\r\n }\r\n }\r\n },\r\n // continue conditions function\r\n (row, k) => {\r\n // excluded rows don't need to appear on selects as always valid\r\n if (tf.excludeRows.indexOf(k) !== -1) {\r\n return true;\r\n }\r\n\r\n // checks if row has expected number of cells\r\n if (row.cells.length !== tf.nbCells || this.isCustom) {\r\n return true;\r\n }\r\n\r\n if (isLinked && !this.isValidLinkedValue(k, activeIdx)) {\r\n return true;\r\n }\r\n }\r\n );\r\n\r\n //sort options\r\n this.opts = this.sortOptions(colIndex, this.opts);\r\n if (this.excludedOpts) {\r\n this.excludedOpts = this.sortOptions(colIndex, this.excludedOpts);\r\n }\r\n\r\n this.addChecks(colIndex, ul);\r\n\r\n if (tf.loadFltOnDemand) {\r\n flt.innerHTML = '';\r\n }\r\n flt.appendChild(ul);\r\n flt.setAttribute('filled', '1');\r\n\r\n this.emitter.emit('after-populating-filter', tf, colIndex, flt);\r\n }\r\n\r\n /**\r\n * Add checklist options\r\n * @param {Number} colIndex Column index\r\n * @param {Object} ul Ul element\r\n * @private\r\n */\r\n addChecks(colIndex, ul) {\r\n let tf = this.tf;\r\n let chkCt = this.addTChecks(colIndex, ul);\r\n\r\n for (let y = 0; y < this.opts.length; y++) {\r\n let val = this.opts[y]; //item value\r\n let lbl = this.isCustom ? this.optsTxt[y] : val; //item text\r\n let fltId = tf.fltIds[colIndex];\r\n let lblIdx = y + chkCt;\r\n let li = createCheckItem(`${fltId}_${lblIdx}`, val, lbl,\r\n ['data-idx', lblIdx]);\r\n li.className = this.itemCssClass;\r\n\r\n if (tf.linkedFilters && tf.disableExcludedOptions &&\r\n has(this.excludedOpts, matchCase(val, tf.caseSensitive),\r\n tf.caseSensitive)) {\r\n addClass(li, this.disabledItemCssClass);\r\n li.check.disabled = true;\r\n li.disabled = true;\r\n } else {\r\n addEvt(li.check, 'click', evt => this.optionClick(evt));\r\n }\r\n ul.appendChild(li);\r\n\r\n if (val === '') {\r\n //item is hidden\r\n li.style.display = NONE;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Add checklist header option\r\n * @param {Number} colIndex Column index\r\n * @param {Object} ul Ul element\r\n * @private\r\n */\r\n addTChecks(colIndex, ul) {\r\n let tf = this.tf;\r\n let chkCt = 1;\r\n let fltId = tf.fltIds[colIndex];\r\n let li0 = createCheckItem(`${fltId}_0`, '',\r\n tf.getClearFilterText(colIndex), ['data-idx', 0]);\r\n li0.className = this.itemCssClass;\r\n ul.appendChild(li0);\r\n\r\n addEvt(li0.check, 'click', evt => this.optionClick(evt));\r\n\r\n if (!this.enableResetOption) {\r\n li0.style.display = NONE;\r\n }\r\n\r\n if (tf.enableEmptyOption) {\r\n let li1 = createCheckItem(`${fltId}_1`, tf.emOperator,\r\n tf.emptyText, ['data-idx', 1]);\r\n li1.className = this.itemCssClass;\r\n ul.appendChild(li1);\r\n addEvt(li1.check, 'click', evt => this.optionClick(evt));\r\n chkCt++;\r\n }\r\n\r\n if (tf.enableNonEmptyOption) {\r\n let li2 = createCheckItem(`${fltId}_2`, tf.nmOperator,\r\n tf.nonEmptyText, ['data-idx', 2]);\r\n li2.className = this.itemCssClass;\r\n ul.appendChild(li2);\r\n addEvt(li2.check, 'click', evt => this.optionClick(evt));\r\n chkCt++;\r\n }\r\n return chkCt;\r\n }\r\n\r\n /**\r\n * Set/unset value of passed item option in filter's DOM element attribute\r\n * @param {Object} o checklist option DOM element\r\n * @private\r\n */\r\n setItemOption(o) {\r\n if (!o) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n let chkValue = o.value; //checked item value\r\n let chkIndex = o.dataset.idx;\r\n let colIdx = tf.getColumnIndexFromFilterId(o.id);\r\n let n = tf.getFilterElement(parseInt(colIdx, 10));\r\n let items = n.childNodes;\r\n let li = items[chkIndex];\r\n //selected values (ul tag)\r\n let slcValues = n.getAttribute('value') || '';\r\n //selected items indexes (ul tag)\r\n let slcIndexes = n.getAttribute('indexes') || '';\r\n\r\n if (o.checked) {\r\n //show all item\r\n if (chkValue === '') {\r\n //items indexes\r\n let indexes = slcIndexes.split(tf.separator);\r\n indexes.forEach(idx => {\r\n idx = Number(idx);\r\n let li = items[idx];\r\n let chx = tag(li, 'input')[0];\r\n if (chx && idx > 0) {\r\n chx.checked = false;\r\n removeClass(li, this.selectedItemCssClass);\r\n }\r\n });\r\n\r\n n.setAttribute('value', '');\r\n n.setAttribute('indexes', '');\r\n\r\n } else {\r\n let indexes = slcIndexes + chkIndex + tf.separator;\r\n let values =\r\n trim(slcValues + ' ' + chkValue + ' ' + tf.orOperator);\r\n\r\n n.setAttribute('value', values);\r\n n.setAttribute('indexes', indexes);\r\n\r\n //uncheck first option\r\n let chx0 = tag(items[0], 'input')[0];\r\n if (chx0) {\r\n chx0.checked = false;\r\n }\r\n }\r\n\r\n removeClass(items[0], this.selectedItemCssClass);\r\n addClass(li, this.selectedItemCssClass);\r\n } else { //removes values and indexes\r\n let replaceValue =\r\n new RegExp(rgxEsc(chkValue + ' ' + tf.orOperator));\r\n let values = slcValues.replace(replaceValue, '');\r\n let replaceIndex = new RegExp(rgxEsc(chkIndex + tf.separator));\r\n let indexes = slcIndexes.replace(replaceIndex, '');\r\n\r\n n.setAttribute('value', trim(values));\r\n n.setAttribute('indexes', indexes);\r\n\r\n removeClass(li, this.selectedItemCssClass);\r\n }\r\n }\r\n\r\n /**\r\n * Select filter options programmatically\r\n * @param {Number} colIndex Column index\r\n * @param {Array} values Array of option values to select\r\n */\r\n selectOptions(colIndex, values = []) {\r\n let tf = this.tf;\r\n let flt = tf.getFilterElement(colIndex);\r\n if (!flt || values.length === 0) {\r\n return;\r\n }\r\n\r\n let lis = tag(flt, 'li');\r\n\r\n flt.setAttribute('value', '');\r\n flt.setAttribute('indexes', '');\r\n\r\n [].forEach.call(lis, (li) => {\r\n let chk = tag(li, 'input')[0];\r\n let chkVal = matchCase(chk.value, tf.caseSensitive);\r\n\r\n if (chkVal !== '' && has(values, chkVal, tf.caseSensitive)) {\r\n chk.checked = true;\r\n } else {\r\n // Check non-empty-text or empty-text option\r\n if (values.indexOf(tf.nmOperator) !== -1 &&\r\n chkVal === matchCase(tf.nonEmptyText, tf.caseSensitive)) {\r\n chk.checked = true;\r\n }\r\n else if (values.indexOf(tf.emOperator) !== -1 &&\r\n chkVal === matchCase(tf.emptyText, tf.caseSensitive)) {\r\n chk.checked = true;\r\n } else {\r\n chk.checked = false;\r\n }\r\n }\r\n this.setItemOption(chk);\r\n });\r\n }\r\n\r\n /**\r\n * Get filter values for a given column index\r\n * @param {Number} colIndex Column index\r\n * @returns {Array} values Collection of selected values\r\n */\r\n getValues(colIndex) {\r\n let tf = this.tf;\r\n let flt = tf.getFilterElement(colIndex);\r\n if (!flt) {\r\n return [];\r\n }\r\n\r\n let fltAttr = flt.getAttribute('value');\r\n let values = isEmpty(fltAttr) ? '' : fltAttr;\r\n //removes last operator ||\r\n values = values.substr(0, values.length - 3);\r\n //turn || separated values into array\r\n values = values.split(' ' + tf.orOperator + ' ');\r\n\r\n return values;\r\n }\r\n\r\n /**\r\n * Destroy CheckList instance\r\n */\r\n destroy() {\r\n this.emitter.off(\r\n ['build-checklist-filter'],\r\n (tf, colIndex, isLinked) => this.build(colIndex, isLinked)\r\n );\r\n this.emitter.off(\r\n ['select-checklist-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n this.emitter.off(['rows-changed'], () => this.refreshAll());\r\n this.emitter.off(['after-filtering'], () => this.linkFilters());\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createOpt, createText, elm, removeElm} from '../dom';\r\nimport {isArray, isNull, EMPTY_FN} from '../types';\r\nimport {addEvt, removeEvt, isKeyPressed, bound} from '../event';\r\nimport {INPUT, SELECT, NONE, ENTER_KEY} from '../const';\r\nimport {\r\n defaultsStr, defaultsNb, defaultsBool, defaultsArr, defaultsFn\r\n} from '../settings';\r\nimport {CENTER, RIGHT} from './toolbar';\r\n\r\n/**\r\n * Paging UI component\r\n * @export\r\n * @class Paging\r\n * @extends {Feature}\r\n */\r\nexport class Paging extends Feature {\r\n\r\n /**\r\n * Creates an instance of Paging\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'paging');\r\n\r\n // Configuration object\r\n let f = this.config.paging || {};\r\n\r\n /**\r\n * Css class for the paging buttons (previous, next, etc.)\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'pgInp');\r\n\r\n /**\r\n * Main select DOM element\r\n * @type {DOMElement}\r\n */\r\n this.pageSlc = null;\r\n\r\n /**\r\n * Results per page select DOM element\r\n * @type {DOMElement}\r\n */\r\n this.pageLengthSlc = null;\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.tgtId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Number of rows contained in a page\r\n * @type {Number}\r\n */\r\n this.pageLength = defaultsNb(f.length, 10);\r\n\r\n /**\r\n * ID of custom container element for the results per page selector\r\n * @type {String}\r\n */\r\n this.pageLengthTgtId = defaultsStr(f.results_per_page_target_id, null);\r\n\r\n /**\r\n * Css class for the paging select element\r\n * @type {String}\r\n */\r\n this.pgSlcCssClass = defaultsStr(f.slc_css_class, 'pgSlc');\r\n\r\n /**\r\n * Css class for the paging input element\r\n * @type {String}\r\n */\r\n this.pgInpCssClass = defaultsStr(f.inp_css_class, 'pgNbInp');\r\n\r\n /**\r\n * Label and values for the results per page select, example of usage:\r\n * ['Records: ', [10,25,50,100]]\r\n * @type {Array}\r\n */\r\n this.resultsPerPage = defaultsArr(f.results_per_page, null);\r\n\r\n /**\r\n * Determines if results per page is configured\r\n * @type {Boolean}\r\n */\r\n this.hasResultsPerPage = isArray(this.resultsPerPage);\r\n\r\n /**\r\n * Css class for the results per page select\r\n * @type {String}\r\n */\r\n this.resultsSlcCssClass = defaultsStr(f.results_slc_css_class, 'rspg');\r\n\r\n /**\r\n * Css class for the label preceding results per page select\r\n * @type {String}\r\n */\r\n this.resultsSpanCssClass = defaultsStr(f.results_span_css_class,\r\n 'rspgSpan');\r\n\r\n /**\r\n * Index of the first row of current page\r\n * @type {Number}\r\n * @private\r\n */\r\n this.startPagingRow = 0;\r\n\r\n /**\r\n * Total number of pages\r\n * @type {Number}\r\n * @private\r\n */\r\n this.nbPages = 0;\r\n\r\n /**\r\n * Current page number\r\n * @type {Number}\r\n * @private\r\n */\r\n this.currentPageNb = 1;\r\n\r\n /**\r\n * Next page button text\r\n * @type {String}\r\n */\r\n this.btnNextPageText = defaultsStr(f.btn_next_page_text, '>');\r\n\r\n /**\r\n * Previous page button text\r\n * @type {String}\r\n */\r\n this.btnPrevPageText = defaultsStr(f.btn_prev_page_text, '<');\r\n\r\n /**\r\n * Last page button text\r\n * @type {String}\r\n */\r\n this.btnLastPageText = defaultsStr(f.btn_last_page_text, '>|');\r\n\r\n /**\r\n * First page button text\r\n * @type {String}\r\n */\r\n this.btnFirstPageText = defaultsStr(f.btn_first_page_text, '|<');\r\n\r\n /**\r\n * Next page button HTML\r\n * @type {String}\r\n */\r\n this.btnNextPageHtml = defaultsStr(f.btn_next_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * Previous page button HTML\r\n * @type {String}\r\n */\r\n this.btnPrevPageHtml = defaultsStr(f.btn_prev_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * First page button HTML\r\n * @type {String}\r\n */\r\n this.btnFirstPageHtml = defaultsStr(f.btn_first_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * Last page button HTML\r\n * @type {String}\r\n */\r\n this.btnLastPageHtml = defaultsStr(f.btn_last_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * Text preceeding page selector drop-down\r\n * @type {String}\r\n */\r\n this.pageText = defaultsStr(f.page_text, ' Page ');\r\n\r\n /**\r\n * Text after page selector drop-down\r\n * @type {String}\r\n */\r\n this.ofText = defaultsStr(f.of_text, ' of ');\r\n\r\n /**\r\n * Css class for the span containing total number of pages\r\n * @type {String}\r\n */\r\n this.nbPgSpanCssClass = defaultsStr(f.nb_pages_css_class, 'nbpg');\r\n\r\n /**\r\n * Determines if paging buttons are enabled (default: true)\r\n * @type {Boolean}\r\n */\r\n this.hasBtns = defaultsBool(f.btns, true);\r\n\r\n /**\r\n * Defines page selector type, two possible values: 'select', 'input'\r\n * @type {String}\r\n */\r\n this.pageSelectorType = defaultsStr(f.page_selector_type, SELECT);\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, CENTER);\r\n\r\n /**\r\n * Callback fired before the page is changed\r\n * @type {Function}\r\n */\r\n this.onBeforeChangePage = defaultsFn(f.on_before_change_page, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the page is changed\r\n * @type {Function}\r\n */\r\n this.onAfterChangePage = defaultsFn(f.on_after_change_page, EMPTY_FN);\r\n\r\n /**\r\n * Label preciding results per page select\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.slcResultsTxt = null;\r\n /**\r\n * Span containing next page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnNextCont = null;\r\n /**\r\n * Span containing previous page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnPrevCont = null;\r\n /**\r\n * Span containing last page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnLastCont = null;\r\n /**\r\n * Span containing first page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnFirstCont = null;\r\n /**\r\n * Span for tot nb pages\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.pgCont = null;\r\n /**\r\n * Span preceding pages select (contains 'Page')\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.pgBefore = null;\r\n /**\r\n * Span following pages select (contains ' of ')\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.pgAfter = null;\r\n\r\n let startRow = tf.refRow;\r\n let nrows = tf.getRowsNb(true);\r\n //calculates page nb\r\n this.nbPages = Math.ceil((nrows - startRow) / this.pageLength);\r\n\r\n let o = this;\r\n /**\r\n * Paging DOM events handlers\r\n * @type {String}\r\n * @private\r\n */\r\n this.evt = {\r\n slcIndex() {\r\n return (o.pageSelectorType === SELECT) ?\r\n o.pageSlc.options.selectedIndex :\r\n parseInt(o.pageSlc.value, 10) - 1;\r\n },\r\n nbOpts() {\r\n return (o.pageSelectorType === SELECT) ?\r\n parseInt(o.pageSlc.options.length, 10) - 1 :\r\n (o.nbPages - 1);\r\n },\r\n next() {\r\n let nextIndex = o.evt.slcIndex() < o.evt.nbOpts() ?\r\n o.evt.slcIndex() + 1 : 0;\r\n o.changePage(nextIndex);\r\n },\r\n prev() {\r\n let prevIndex = o.evt.slcIndex() > 0 ?\r\n o.evt.slcIndex() - 1 : o.evt.nbOpts();\r\n o.changePage(prevIndex);\r\n },\r\n last() {\r\n o.changePage(o.evt.nbOpts());\r\n },\r\n first() {\r\n o.changePage(0);\r\n },\r\n _detectKey(e) {\r\n if (isKeyPressed(e, [ENTER_KEY])) {\r\n if (tf.sorted) {\r\n tf.filter();\r\n o.changePage(o.evt.slcIndex());\r\n } else {\r\n o.changePage();\r\n }\r\n this.blur();\r\n }\r\n },\r\n slcPagesChange: null,\r\n nextEvt: null,\r\n prevEvt: null,\r\n lastEvt: null,\r\n firstEvt: null\r\n };\r\n }\r\n\r\n /**\r\n * Initialize DOM elements\r\n */\r\n init() {\r\n let slcPages;\r\n let tf = this.tf;\r\n let evt = this.evt;\r\n\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.tgtId));\r\n\r\n // Check resultsPerPage is in expected format and initialise the\r\n // results per page component\r\n if (this.hasResultsPerPage) {\r\n if (this.resultsPerPage.length < 2) {\r\n this.hasResultsPerPage = false;\r\n } else {\r\n this.pageLength = this.resultsPerPage[1][0];\r\n this.setResultsPerPage();\r\n }\r\n }\r\n\r\n evt.slcPagesChange = (event) => {\r\n let slc = event.target;\r\n this.changePage(slc.selectedIndex);\r\n };\r\n\r\n // Paging drop-down list selector\r\n if (this.pageSelectorType === SELECT) {\r\n slcPages = createElm(SELECT);\r\n slcPages.className = this.pgSlcCssClass;\r\n addEvt(slcPages, 'change', evt.slcPagesChange);\r\n }\r\n\r\n // Paging input selector\r\n if (this.pageSelectorType === INPUT) {\r\n slcPages = createElm(INPUT, ['value', this.currentPageNb]);\r\n slcPages.className = this.pgInpCssClass;\r\n addEvt(slcPages, 'keypress', evt._detectKey);\r\n }\r\n\r\n // btns containers\r\n let btnNextSpan = createElm('span');\r\n let btnPrevSpan = createElm('span');\r\n let btnLastSpan = createElm('span');\r\n let btnFirstSpan = createElm('span');\r\n\r\n if (this.hasBtns) {\r\n // Next button\r\n if (!this.btnNextPageHtml) {\r\n let btnNext = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnNextPageText],\r\n ['title', 'Next']\r\n );\r\n btnNext.className = this.btnCssClass;\r\n addEvt(btnNext, 'click', evt.next);\r\n btnNextSpan.appendChild(btnNext);\r\n } else {\r\n btnNextSpan.innerHTML = this.btnNextPageHtml;\r\n addEvt(btnNextSpan, 'click', evt.next);\r\n }\r\n // Previous button\r\n if (!this.btnPrevPageHtml) {\r\n let btnPrev = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnPrevPageText],\r\n ['title', 'Previous']\r\n );\r\n btnPrev.className = this.btnCssClass;\r\n addEvt(btnPrev, 'click', evt.prev);\r\n btnPrevSpan.appendChild(btnPrev);\r\n } else {\r\n btnPrevSpan.innerHTML = this.btnPrevPageHtml;\r\n addEvt(btnPrevSpan, 'click', evt.prev);\r\n }\r\n // Last button\r\n if (!this.btnLastPageHtml) {\r\n let btnLast = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnLastPageText],\r\n ['title', 'Last']\r\n );\r\n btnLast.className = this.btnCssClass;\r\n addEvt(btnLast, 'click', evt.last);\r\n btnLastSpan.appendChild(btnLast);\r\n } else {\r\n btnLastSpan.innerHTML = this.btnLastPageHtml;\r\n addEvt(btnLastSpan, 'click', evt.last);\r\n }\r\n // First button\r\n if (!this.btnFirstPageHtml) {\r\n let btnFirst = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnFirstPageText],\r\n ['title', 'First']\r\n );\r\n btnFirst.className = this.btnCssClass;\r\n addEvt(btnFirst, 'click', evt.first);\r\n btnFirstSpan.appendChild(btnFirst);\r\n } else {\r\n btnFirstSpan.innerHTML = this.btnFirstPageHtml;\r\n addEvt(btnFirstSpan, 'click', evt.first);\r\n }\r\n }\r\n\r\n // paging elements (buttons+drop-down list) are added to defined element\r\n let targetEl = !this.tgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.tgtId);\r\n targetEl.appendChild(btnFirstSpan);\r\n targetEl.appendChild(btnPrevSpan);\r\n\r\n let pgBeforeSpan = createElm('span');\r\n pgBeforeSpan.appendChild(createText(this.pageText));\r\n pgBeforeSpan.className = this.nbPgSpanCssClass;\r\n targetEl.appendChild(pgBeforeSpan);\r\n targetEl.appendChild(slcPages);\r\n let pgAfterSpan = createElm('span');\r\n pgAfterSpan.appendChild(createText(this.ofText));\r\n pgAfterSpan.className = this.nbPgSpanCssClass;\r\n targetEl.appendChild(pgAfterSpan);\r\n let pgSpan = createElm('span');\r\n pgSpan.className = this.nbPgSpanCssClass;\r\n pgSpan.appendChild(createText(' ' + this.nbPages + ' '));\r\n targetEl.appendChild(pgSpan);\r\n targetEl.appendChild(btnNextSpan);\r\n targetEl.appendChild(btnLastSpan);\r\n\r\n this.btnNextCont = btnNextSpan;\r\n this.btnPrevCont = btnPrevSpan;\r\n this.btnLastCont = btnLastSpan;\r\n this.btnFirstCont = btnFirstSpan;\r\n this.pgCont = pgSpan;\r\n this.pgBefore = pgBeforeSpan;\r\n this.pgAfter = pgAfterSpan;\r\n this.pageSlc = slcPages;\r\n\r\n this.setPagingInfo();\r\n\r\n if (!tf.fltGrid) {\r\n tf.validateAllRows();\r\n this.setPagingInfo(tf.validRowsIndex);\r\n }\r\n\r\n this.emitter.on(['after-filtering'], bound(this.resetPagingInfo, this));\r\n this.emitter.on(['change-page'], bound(this.changePageHandler, this));\r\n this.emitter.on(['change-page-results'],\r\n bound(this.changePageResultsHandler, this));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Reset paging when filters are already instantiated\r\n * @param {Boolean} filterTable Execute filtering once paging instanciated\r\n */\r\n reset(filterTable = false) {\r\n this.enable();\r\n this.init();\r\n\r\n if (filterTable) {\r\n this.tf.filter();\r\n }\r\n }\r\n\r\n /**\r\n * Reset paging info from scratch after a filtering process\r\n */\r\n resetPagingInfo() {\r\n this.startPagingRow = 0;\r\n this.currentPageNb = 1;\r\n this.setPagingInfo(this.tf.validRowsIndex);\r\n }\r\n\r\n /**\r\n * Calculate number of pages based on valid rows\r\n * Refresh paging select according to number of pages\r\n * @param {Array} validRows Collection of valid rows\r\n */\r\n setPagingInfo(validRows) {\r\n let tf = this.tf;\r\n let cont = !this.tgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.tgtId);\r\n\r\n //store valid rows indexes\r\n tf.validRowsIndex = validRows || tf.getValidRows(true);\r\n\r\n //calculate nb of pages\r\n this.nbPages = Math.ceil(tf.validRowsIndex.length / this.pageLength);\r\n //refresh page nb span\r\n this.pgCont.innerHTML = this.nbPages;\r\n //select clearing shortcut\r\n if (this.pageSelectorType === SELECT) {\r\n this.pageSlc.innerHTML = '';\r\n }\r\n\r\n if (this.nbPages > 0) {\r\n cont.style.visibility = 'visible';\r\n if (this.pageSelectorType === SELECT) {\r\n for (let z = 0; z < this.nbPages; z++) {\r\n let opt = createOpt(z + 1, z * this.pageLength, false);\r\n this.pageSlc.options[z] = opt;\r\n }\r\n } else {\r\n //input type\r\n this.pageSlc.value = this.currentPageNb;\r\n }\r\n\r\n } else {\r\n /*** if no results paging select and buttons are hidden ***/\r\n cont.style.visibility = 'hidden';\r\n }\r\n this.groupByPage(tf.validRowsIndex);\r\n }\r\n\r\n /**\r\n * Group table rows by page and display valid rows\r\n * @param {Array} validRows Collection of valid rows\r\n */\r\n groupByPage(validRows) {\r\n let tf = this.tf;\r\n let rows = tf.dom().rows;\r\n let startPagingRow = parseInt(this.startPagingRow, 10);\r\n let endPagingRow = startPagingRow + parseInt(this.pageLength, 10);\r\n\r\n //store valid rows indexes\r\n if (validRows) {\r\n tf.validRowsIndex = validRows;\r\n }\r\n\r\n //this loop shows valid rows of current page\r\n for (let h = 0, len = tf.getValidRowsNb(true); h < len; h++) {\r\n let validRowIdx = tf.validRowsIndex[h];\r\n let r = rows[validRowIdx];\r\n let isRowValid = r.getAttribute('validRow');\r\n let rowDisplayed = false;\r\n\r\n if (h >= startPagingRow && h < endPagingRow) {\r\n if (isNull(isRowValid) || Boolean(isRowValid === 'true')) {\r\n r.style.display = '';\r\n rowDisplayed = true;\r\n }\r\n } else {\r\n r.style.display = NONE;\r\n }\r\n this.emitter.emit('row-paged', tf, validRowIdx, h, rowDisplayed);\r\n }\r\n\r\n // broadcast grouping by page\r\n this.emitter.emit('grouped-by-page', tf, this);\r\n }\r\n\r\n /**\r\n * Return the current page number\r\n * @return {Number} Page number\r\n */\r\n getPage() {\r\n return this.currentPageNb;\r\n }\r\n\r\n /**\r\n * Show page defined by passed argument (string or number):\r\n * @param {String}/{Number} cmd possible string values: 'next',\r\n * 'previous', 'last', 'first' or page number as per param\r\n */\r\n setPage(cmd) {\r\n let tf = this.tf;\r\n if (!tf.isInitialized() || !this.isEnabled()) {\r\n return;\r\n }\r\n let btnEvt = this.evt,\r\n cmdtype = typeof cmd;\r\n if (cmdtype === 'string') {\r\n switch (cmd.toLowerCase()) {\r\n case 'next':\r\n btnEvt.next();\r\n break;\r\n case 'previous':\r\n btnEvt.prev();\r\n break;\r\n case 'last':\r\n btnEvt.last();\r\n break;\r\n case 'first':\r\n btnEvt.first();\r\n break;\r\n default:\r\n btnEvt.next();\r\n break;\r\n }\r\n }\r\n else if (cmdtype === 'number') {\r\n this.changePage(cmd - 1);\r\n }\r\n }\r\n\r\n /**\r\n * Generates UI elements for the number of results per page drop-down\r\n */\r\n setResultsPerPage() {\r\n let tf = this.tf;\r\n let evt = this.evt;\r\n\r\n if (this.pageLengthSlc || !this.resultsPerPage) {\r\n return;\r\n }\r\n\r\n evt.slcResultsChange = (ev) => {\r\n this.onChangeResultsPerPage();\r\n ev.target.blur();\r\n };\r\n\r\n let slcR = createElm(SELECT);\r\n slcR.className = this.resultsSlcCssClass;\r\n let slcRText = this.resultsPerPage[0],\r\n slcROpts = this.resultsPerPage[1];\r\n let slcRSpan = createElm('span');\r\n slcRSpan.className = this.resultsSpanCssClass;\r\n\r\n // results per page select is added to external element\r\n let targetEl = !this.pageLengthTgtId ?\r\n tf.feature('toolbar').container(RIGHT) :\r\n elm(this.pageLengthTgtId);\r\n slcRSpan.appendChild(createText(slcRText));\r\n\r\n let help = tf.feature('help');\r\n if (help && help.btn) {\r\n help.btn.parentNode.insertBefore(slcRSpan, help.btn);\r\n help.btn.parentNode.insertBefore(slcR, help.btn);\r\n } else {\r\n targetEl.appendChild(slcRSpan);\r\n targetEl.appendChild(slcR);\r\n }\r\n\r\n for (let r = 0; r < slcROpts.length; r++) {\r\n let currOpt = new Option(slcROpts[r], slcROpts[r], false, false);\r\n slcR.options[r] = currOpt;\r\n }\r\n addEvt(slcR, 'change', evt.slcResultsChange);\r\n this.slcResultsTxt = slcRSpan;\r\n this.pageLengthSlc = slcR;\r\n }\r\n\r\n /**\r\n * Remove number of results per page UI elements\r\n */\r\n removeResultsPerPage() {\r\n let tf = this.tf;\r\n if (!tf.isInitialized() || !this.pageLengthSlc ||\r\n !this.resultsPerPage) {\r\n return;\r\n }\r\n if (this.pageLengthSlc) {\r\n removeElm(this.pageLengthSlc);\r\n }\r\n if (this.slcResultsTxt) {\r\n removeElm(this.slcResultsTxt);\r\n }\r\n this.pageLengthSlc = null;\r\n this.slcResultsTxt = null;\r\n }\r\n\r\n /**\r\n * Change the page based on passed index\r\n * @param {Number} index Index of the page (0-n)\r\n */\r\n changePage(index) {\r\n let tf = this.tf;\r\n\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('before-page-change', tf, (index + 1));\r\n\r\n if (index === null) {\r\n index = this.pageSelectorType === SELECT ?\r\n this.pageSlc.options.selectedIndex : this.pageSlc.value - 1;\r\n }\r\n if (index >= 0 && index <= (this.nbPages - 1)) {\r\n this.onBeforeChangePage(this, (index + 1));\r\n\r\n this.currentPageNb = parseInt(index, 10) + 1;\r\n if (this.pageSelectorType === SELECT) {\r\n this.pageSlc.options[index].selected = true;\r\n } else {\r\n this.pageSlc.value = this.currentPageNb;\r\n }\r\n\r\n this.startPagingRow = (this.pageSelectorType === SELECT) ?\r\n this.pageSlc.value : (index * this.pageLength);\r\n\r\n this.groupByPage();\r\n\r\n this.onAfterChangePage(this, (index + 1));\r\n }\r\n\r\n this.emitter.emit('after-page-change', tf, (index + 1));\r\n }\r\n\r\n /**\r\n * Change the number of results per page based on passed value\r\n * @param {String} val The number of results per page\r\n */\r\n changeResultsPerPage(val) {\r\n if (!this.isEnabled() || isNaN(val)) {\r\n return;\r\n }\r\n\r\n this.pageLengthSlc.value = val;\r\n this.onChangeResultsPerPage();\r\n }\r\n\r\n /**\r\n * Change rows according to page results drop-down\r\n */\r\n onChangeResultsPerPage() {\r\n let tf = this.tf;\r\n\r\n if (!this.isEnabled() || tf.getValidRowsNb() === 0) {\r\n return;\r\n }\r\n\r\n let {\r\n pageLengthSlc: slcR, pageSelectorType, pageSlc, emitter\r\n } = this;\r\n\r\n emitter.emit('before-page-length-change', tf);\r\n\r\n let slcIndex = slcR.selectedIndex;\r\n let slcPagesSelIndex = (pageSelectorType === SELECT) ?\r\n pageSlc.selectedIndex : parseInt(pageSlc.value - 1, 10);\r\n this.pageLength = parseInt(slcR.options[slcIndex].value, 10);\r\n this.startPagingRow = this.pageLength * slcPagesSelIndex;\r\n\r\n if (!isNaN(this.pageLength)) {\r\n if (this.startPagingRow >= tf.nbFilterableRows) {\r\n this.startPagingRow = (tf.nbFilterableRows - this.pageLength);\r\n }\r\n this.setPagingInfo();\r\n\r\n if (pageSelectorType === SELECT) {\r\n let slcIdx = (pageSlc.options.length - 1 <= slcPagesSelIndex) ?\r\n (pageSlc.options.length - 1) :\r\n slcPagesSelIndex;\r\n pageSlc.options[slcIdx].selected = true;\r\n }\r\n }\r\n\r\n emitter.emit('after-page-length-change', tf, this.pageLength);\r\n }\r\n\r\n /**\r\n * Re-set page nb at page re-load\r\n */\r\n resetPage() {\r\n let tf = this.tf;\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n this.emitter.emit('before-reset-page', tf);\r\n let pgNb = tf.feature('store').getPageNb();\r\n if (pgNb !== '') {\r\n this.changePage((pgNb - 1));\r\n }\r\n this.emitter.emit('after-reset-page', tf, pgNb);\r\n }\r\n\r\n /**\r\n * Re-set page length value at page re-load\r\n */\r\n resetPageLength() {\r\n let tf = this.tf;\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n this.emitter.emit('before-reset-page-length', tf);\r\n let pglenIndex = tf.feature('store').getPageLength();\r\n\r\n if (pglenIndex !== '') {\r\n this.pageLengthSlc.options[pglenIndex].selected = true;\r\n this.changeResultsPerPage();\r\n }\r\n this.emitter.emit('after-reset-page-length', tf, pglenIndex);\r\n }\r\n\r\n /** @private */\r\n changePageHandler(tf, pageNumber) {\r\n this.setPage(pageNumber);\r\n }\r\n\r\n /** @private */\r\n changePageResultsHandler(tf, pageLength) {\r\n this.changeResultsPerPage(pageLength);\r\n }\r\n\r\n /**\r\n * Remove paging feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let evt = this.evt;\r\n\r\n if (this.pageSlc) {\r\n if (this.pageSelectorType === SELECT) {\r\n removeEvt(this.pageSlc, 'change', evt.slcPagesChange);\r\n }\r\n else if (this.pageSelectorType === INPUT) {\r\n removeEvt(this.pageSlc, 'keypress', evt._detectKey);\r\n }\r\n removeElm(this.pageSlc);\r\n }\r\n\r\n if (this.btnNextCont) {\r\n removeEvt(this.btnNextCont, 'click', evt.next);\r\n removeElm(this.btnNextCont);\r\n this.btnNextCont = null;\r\n }\r\n\r\n if (this.btnPrevCont) {\r\n removeEvt(this.btnPrevCont, 'click', evt.prev);\r\n removeElm(this.btnPrevCont);\r\n this.btnPrevCont = null;\r\n }\r\n\r\n if (this.btnLastCont) {\r\n removeEvt(this.btnLastCont, 'click', evt.last);\r\n removeElm(this.btnLastCont);\r\n this.btnLastCont = null;\r\n }\r\n\r\n if (this.btnFirstCont) {\r\n removeEvt(this.btnFirstCont, 'click', evt.first);\r\n removeElm(this.btnFirstCont);\r\n this.btnFirstCont = null;\r\n }\r\n\r\n if (this.pgBefore) {\r\n removeElm(this.pgBefore);\r\n this.pgBefore = null;\r\n }\r\n\r\n if (this.pgAfter) {\r\n removeElm(this.pgAfter);\r\n this.pgAfter = null;\r\n }\r\n\r\n if (this.pgCont) {\r\n removeElm(this.pgCont);\r\n this.pgCont = null;\r\n }\r\n\r\n if (this.hasResultsPerPage) {\r\n this.removeResultsPerPage();\r\n }\r\n\r\n this.emitter.off(['after-filtering'],\r\n bound(this.resetPagingInfo, this));\r\n this.emitter.off(['change-page'], bound(this.changePageHandler, this));\r\n this.emitter.off(['change-page-results'],\r\n bound(this.changePageResultsHandler, this));\r\n\r\n this.pageSlc = null;\r\n this.nbPages = 0;\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, elm, removeElm} from '../dom';\r\nimport {isEmpty, EMPTY_FN} from '../types';\r\nimport {NONE} from '../const';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\n\r\n/**\r\n * UI when filtering yields no matches\r\n * @export\r\n * @class NoResults\r\n * @extends {Feature}\r\n */\r\nexport class NoResults extends Feature {\r\n\r\n /**\r\n * Creates an instance of NoResults\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'noResults');\r\n\r\n //configuration object\r\n let f = this.config.no_results_message || {};\r\n\r\n /**\r\n * Text (accepts HTML)\r\n * @type {String}\r\n */\r\n this.content = defaultsStr(f.content, 'No results');\r\n\r\n /**\r\n * Custom container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.customContainer = defaultsStr(f.custom_container, null);\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.customContainerId = defaultsStr(f.custom_container_id, null);\r\n\r\n /**\r\n * Indicates if UI is contained in a external element\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isExternal = !isEmpty(this.customContainer) ||\r\n !isEmpty(this.customContainerId);\r\n\r\n /**\r\n * Css class assigned to container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'no-results');\r\n\r\n /**\r\n * Stores container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.cont = null;\r\n\r\n /**\r\n * Callback fired before the message is displayed\r\n * @type {Function}\r\n */\r\n this.onBeforeShow = defaultsFn(f.on_before_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the message is displayed\r\n * @type {Function}\r\n */\r\n this.onAfterShow = defaultsFn(f.on_after_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before the message is hidden\r\n * @type {Function}\r\n */\r\n this.onBeforeHide = defaultsFn(f.on_before_hide_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the message is hidden\r\n * @type {Function}\r\n */\r\n this.onAfterHide = defaultsFn(f.on_after_hide_msg, EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initializes NoResults instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let target = this.customContainer || elm(this.customContainerId) ||\r\n tf.dom();\r\n\r\n //container\r\n let cont = createElm('div');\r\n cont.className = this.cssClass;\r\n cont.innerHTML = this.content;\r\n\r\n if (this.isExternal) {\r\n target.appendChild(cont);\r\n } else {\r\n target.parentNode.insertBefore(cont, target.nextSibling);\r\n }\r\n\r\n this.cont = cont;\r\n\r\n // subscribe to after-filtering event\r\n this.emitter.on(\r\n ['initialized', 'after-filtering'],\r\n () => this.toggle()\r\n );\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Toggle no results message\r\n */\r\n toggle() {\r\n if (this.tf.getValidRowsNb() > 0) {\r\n this.hide();\r\n } else {\r\n this.show();\r\n }\r\n }\r\n\r\n /**\r\n * Show no results message\r\n */\r\n show() {\r\n if (!this.initialized || !this.isEnabled()) {\r\n return;\r\n }\r\n this.onBeforeShow(this.tf, this);\r\n\r\n this.setWidth();\r\n this.cont.style.display = 'block';\r\n\r\n this.onAfterShow(this.tf, this);\r\n }\r\n\r\n /**\r\n * Hide no results message\r\n */\r\n hide() {\r\n if (!this.initialized || !this.isEnabled()) {\r\n return;\r\n }\r\n this.onBeforeHide(this.tf, this);\r\n\r\n this.cont.style.display = NONE;\r\n\r\n this.onAfterHide(this.tf, this);\r\n }\r\n\r\n /**\r\n * Sets no results container width\r\n * @private\r\n */\r\n setWidth() {\r\n if (!this.initialized || this.isExternal || !this.isEnabled()) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n if (tf.gridLayout) {\r\n let gridLayout = tf.feature('gridLayout');\r\n this.cont.style.width = gridLayout.headTbl.clientWidth + 'px';\r\n } else {\r\n this.cont.style.width = (tf.dom().tHead ?\r\n tf.dom().tHead.clientWidth :\r\n tf.dom().tBodies[0].clientWidth) + 'px';\r\n }\r\n }\r\n\r\n /** Remove feature */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n removeElm(this.cont);\r\n this.cont = null;\r\n // unsubscribe to after-filtering event\r\n this.emitter.off(['after-filtering'], () => this.toggle());\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {addClass, removeClass} from '../dom';\r\nimport {defaultsStr} from '../settings';\r\nimport {bound} from '../event';\r\n\r\n/**\r\n * Rows with alternating background color for improved readability\r\n */\r\nexport class AlternateRows extends Feature {\r\n\r\n /**\r\n * Creates an instance of AlternateRows.\r\n *\r\n * @param {Object} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'alternateRows');\r\n\r\n let config = this.config;\r\n /**\r\n * Css class for even rows (default: 'even')\r\n * @type {String}\r\n */\r\n this.evenCss = defaultsStr(config.even_row_css_class, 'even');\r\n\r\n /**\r\n * Css class for odd rows (default: 'odd')\r\n * @type {String}\r\n */\r\n this.oddCss = defaultsStr(config.odd_row_css_class, 'odd');\r\n }\r\n\r\n /**\r\n * Sets alternating rows color\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.processAll();\r\n\r\n // Subscribe to events\r\n this.emitter.on(['row-processed', 'row-paged'],\r\n bound(this.processRowHandler, this));\r\n this.emitter.on(['column-sorted', 'rows-changed'],\r\n bound(this.processAll, this));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Apply background to all valid rows\r\n */\r\n processAll() {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let validRowsIndex = tf.getValidRows(true);\r\n let indexLen = validRowsIndex.length;\r\n let idx = 0;\r\n\r\n //alternates bg color\r\n for (let j = 0; j < indexLen; j++) {\r\n let rowIdx = validRowsIndex[j];\r\n this.setRowBg(rowIdx, idx);\r\n idx++;\r\n }\r\n }\r\n\r\n /**\r\n * Set/remove row background based on row validation\r\n * @param {Number} rowIdx Row index\r\n * @param {Number} arrIdx Array index\r\n * @param {Boolean} isValid Valid row flag\r\n */\r\n processRow(rowIdx, arrIdx, isValid) {\r\n if (isValid) {\r\n this.setRowBg(rowIdx, arrIdx);\r\n } else {\r\n this.removeRowBg(rowIdx);\r\n }\r\n }\r\n\r\n /**\r\n * Sets row background color\r\n * @param {Number} rowIdx Row index\r\n * @param {Number} idx Valid rows collection index needed to calculate bg\r\n * color\r\n * @private\r\n */\r\n setRowBg(rowIdx, idx) {\r\n if (!this.isEnabled() || isNaN(rowIdx)) {\r\n return;\r\n }\r\n let rows = this.tf.dom().rows;\r\n let i = isNaN(idx) ? rowIdx : idx;\r\n this.removeRowBg(rowIdx);\r\n\r\n addClass(rows[rowIdx], (i % 2) ? this.evenCss : this.oddCss);\r\n }\r\n\r\n /**\r\n * Removes row background color\r\n * @param {Number} idx Row index\r\n * @private\r\n */\r\n removeRowBg(idx) {\r\n if (isNaN(idx)) {\r\n return;\r\n }\r\n let rows = this.tf.dom().rows;\r\n removeClass(rows[idx], this.oddCss);\r\n removeClass(rows[idx], this.evenCss);\r\n }\r\n\r\n /** @private */\r\n processRowHandler(tf, rowIndex, arrIndex, isValid) {\r\n this.processRow(rowIndex, arrIndex, isValid);\r\n }\r\n\r\n /**\r\n * Removes all alternating backgrounds\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let eachRow = this.tf.eachRow(0);\r\n eachRow((row, i) => this.removeRowBg(i));\r\n\r\n // Unsubscribe to events\r\n this.emitter.off(['row-processed', 'row-paged'],\r\n bound(this.processRowHandler, this));\r\n this.emitter.off(['column-sorted', 'rows-changed'],\r\n bound(this.processAll, this));\r\n\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {addEvt} from '../event';\r\nimport {defaultsStr} from '../settings';\r\nimport {isNull} from '../types';\r\nimport {RIGHT} from './toolbar';\r\n\r\n/**\r\n * Clear button UI component\r\n */\r\nexport class ClearButton extends Feature {\r\n\r\n /**\r\n * Creates an instance of ClearButton\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'btnReset');\r\n\r\n let f = this.config.btn_reset || {};\r\n\r\n /**\r\n * Container element ID\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Text for the clear button\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, null);\r\n\r\n /**\r\n * Css class for reset button\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'reset');\r\n\r\n /**\r\n * Tooltip text for the clear button\r\n * @type {String}\r\n */\r\n this.tooltip = f.tooltip || 'Clear filters';\r\n\r\n /**\r\n * Custom Html string for the clear button\r\n * @type {String}\r\n */\r\n this.html = defaultsStr(f.html,\r\n (!tf.enableIcons || this.text ? null :\r\n ''));\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 * Clear button container element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.container = null;\r\n\r\n /**\r\n * Clear button element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.element = null;\r\n }\r\n\r\n /**\r\n * Click event handler for clear button\r\n * @private\r\n */\r\n onClick() {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n this.tf.clearFilters();\r\n }\r\n\r\n /**\r\n * Initialize clear button component\r\n */\r\n init() {\r\n let tf = this.tf;\r\n\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.targetId));\r\n\r\n let cont = createElm('span');\r\n\r\n let targetEl = !this.targetId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n targetEl.appendChild(cont);\r\n\r\n if (!this.html) {\r\n let fltReset = createElm('a', ['href', 'javascript:void(0);']);\r\n fltReset.className = this.cssClass;\r\n fltReset.appendChild(createText(this.text));\r\n cont.appendChild(fltReset);\r\n addEvt(fltReset, 'click', () => this.onClick());\r\n } else {\r\n cont.innerHTML = this.html;\r\n let resetEl = cont.firstChild;\r\n addEvt(resetEl, 'click', () => this.onClick());\r\n }\r\n this.element = cont.firstChild;\r\n this.container = cont;\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Destroy ClearButton instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n removeElm(this.element);\r\n removeElm(this.container);\r\n this.element = null;\r\n this.container = null;\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {root} from '../root';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {EMPTY_FN, isNull} from '../types';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\nimport {LEFT} from './toolbar';\r\n\r\nconst EVENTS = [\r\n 'after-filtering',\r\n 'after-populating-filter',\r\n 'after-page-change',\r\n 'after-clearing-filters',\r\n 'after-page-length-change',\r\n 'after-reset-page',\r\n 'after-reset-page-length',\r\n 'after-loading-extensions',\r\n 'after-loading-themes'\r\n];\r\n\r\n/**\r\n * Status bar UI component\r\n * @export\r\n * @class StatusBar\r\n * @extends {Feature}\r\n */\r\nexport class StatusBar extends Feature {\r\n\r\n /**\r\n * Creates an instance of StatusBar\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'statusBar');\r\n\r\n // Configuration object\r\n let f = this.config.status_bar || {};\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.container = null;\r\n\r\n /**\r\n * Message container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.msgContainer = null;\r\n\r\n /**\r\n * Label container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.labelContainer = null;\r\n\r\n /**\r\n * Text preceding status message\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, '');\r\n\r\n /**\r\n * Css class for container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'status');\r\n\r\n /**\r\n * Message visibility duration in milliseconds\r\n * @type {Number}\r\n * @private\r\n */\r\n this.delay = 250;\r\n\r\n /**\r\n * Callback fired before the message is displayed\r\n * @type {Function}\r\n */\r\n this.onBeforeShowMsg = defaultsFn(f.on_before_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the message is displayed\r\n * @type {Function}\r\n */\r\n this.onAfterShowMsg = defaultsFn(f.on_after_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Message appearing upon filtering\r\n * @type {String}\r\n */\r\n this.msgFilter = defaultsStr(f.msg_filter, 'Filtering data...');\r\n\r\n /**\r\n * Message appearing when a drop-down filter is populated\r\n * @type {String}\r\n */\r\n this.msgPopulate = defaultsStr(f.msg_populate, 'Populating filter...');\r\n\r\n /**\r\n * Message appearing when a checklist filter is populated\r\n * @type {String}\r\n */\r\n this.msgPopulateCheckList = defaultsStr(f.msg_populate_checklist,\r\n 'Populating list...');\r\n\r\n /**\r\n * Message appearing when a pagination page is changed\r\n * @type {String}\r\n */\r\n this.msgChangePage = defaultsStr(f.msg_change_page,\r\n 'Collecting paging data...');\r\n\r\n /**\r\n * Message appearing when filters are cleared\r\n * @type {String}\r\n */\r\n this.msgClear = defaultsStr(f.msg_clear, 'Clearing filters...');\r\n\r\n /**\r\n * Message appearing when the page length is changed\r\n * @type {String}\r\n */\r\n this.msgChangeResults = defaultsStr(f.msg_change_results,\r\n 'Changing results per page...');\r\n\r\n /**\r\n * Message appearing when the page is re-set\r\n * @type {String}\r\n */\r\n this.msgResetPage = defaultsStr(f.msg_reset_page, 'Re-setting page...');\r\n\r\n /**\r\n * Message appearing when the page length is re-set\r\n * @type {String}\r\n */\r\n this.msgResetPageLength = defaultsStr(f.msg_reset_page_length,\r\n 'Re-setting page length...');\r\n\r\n /**\r\n * Message appearing upon column sorting\r\n * @type {String}\r\n */\r\n this.msgSort = defaultsStr(f.msg_sort, 'Sorting data...');\r\n\r\n /**\r\n * Message appearing when extensions are loading\r\n * @type {String}\r\n */\r\n this.msgLoadExtensions = defaultsStr(f.msg_load_extensions,\r\n 'Loading extensions...');\r\n\r\n /**\r\n * Message appearing when themes are loading\r\n * @type {String}\r\n */\r\n this.msgLoadThemes = defaultsStr(f.msg_load_themes,\r\n 'Loading theme(s)...');\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, LEFT);\r\n }\r\n\r\n /**\r\n * Initializes StatusBar instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n let emitter = this.emitter;\r\n\r\n emitter.emit('initializing-feature', this, !isNull(this.targetId));\r\n\r\n // status bar container\r\n let statusDiv = createElm('div');\r\n statusDiv.className = this.cssClass;\r\n\r\n // status bar label\r\n let statusSpan = createElm('span');\r\n // preceding text\r\n let statusSpanText = createElm('span');\r\n statusSpanText.appendChild(createText(this.text));\r\n\r\n // target element container\r\n let targetEl = (!this.targetId) ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n\r\n // default container\r\n if (!this.targetId) {\r\n statusDiv.appendChild(statusSpanText);\r\n statusDiv.appendChild(statusSpan);\r\n targetEl.appendChild(statusDiv);\r\n } else {\r\n // custom container, no need to append statusDiv\r\n targetEl.appendChild(statusSpanText);\r\n targetEl.appendChild(statusSpan);\r\n }\r\n\r\n this.container = statusDiv;\r\n this.msgContainer = statusSpan;\r\n this.labelContainer = statusSpanText;\r\n\r\n // subscribe to events\r\n emitter.on(['before-filtering'], () => this.message(this.msgFilter));\r\n emitter.on(['before-populating-filter'],\r\n () => this.message(this.msgPopulate));\r\n emitter.on(['before-page-change'],\r\n () => this.message(this.msgChangePage));\r\n emitter.on(['before-clearing-filters'], () =>\r\n this.message(this.msgClear));\r\n emitter.on(['before-page-length-change'],\r\n () => this.message(this.msgChangeResults));\r\n emitter.on(['before-reset-page'],\r\n () => this.message(this.msgResetPage));\r\n emitter.on(['before-reset-page-length'],\r\n () => this.message(this.msgResetPageLength));\r\n emitter.on(['before-loading-extensions'],\r\n () => this.message(this.msgLoadExtensions));\r\n emitter.on(['before-loading-themes'],\r\n () => this.message(this.msgLoadThemes));\r\n\r\n emitter.on(EVENTS, () => this.message(''));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Display status message\r\n * @param {String} [t=''] Message to be displayed\r\n */\r\n message(t = '') {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n this.onBeforeShowMsg(this.tf, t);\r\n\r\n let d = t === '' ? this.delay : 1;\r\n root.setTimeout(() => {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n this.msgContainer.innerHTML = t;\r\n\r\n this.onAfterShowMsg(this.tf, t);\r\n }, d);\r\n }\r\n\r\n /**\r\n * Destroy StatusBar instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let emitter = this.emitter;\r\n\r\n this.container.innerHTML = '';\r\n if (!this.targetId) {\r\n removeElm(this.container);\r\n }\r\n this.labelContainer = null;\r\n this.msgContainer = null;\r\n this.container = null;\r\n\r\n // Unsubscribe to events\r\n emitter.off(['before-filtering'], () => this.message(this.msgFilter));\r\n emitter.off(['before-populating-filter'],\r\n () => this.message(this.msgPopulate));\r\n emitter.off(['before-page-change'],\r\n () => this.message(this.msgChangePage));\r\n emitter.off(['before-clearing-filters'],\r\n () => this.message(this.msgClear));\r\n emitter.off(['before-page-length-change'],\r\n () => this.message(this.msgChangeResults));\r\n emitter.off(['before-reset-page'], () =>\r\n this.message(this.msgResetPage));\r\n emitter.off(['before-reset-page-length'],\r\n () => this.message(this.msgResetPageLength));\r\n emitter.off(['before-loading-extensions'],\r\n () => this.message(this.msgLoadExtensions));\r\n emitter.off(['before-loading-themes'],\r\n () => this.message(this.msgLoadThemes));\r\n\r\n emitter.off(EVENTS, () => this.message(''));\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {EMPTY_FN, isNull} from '../types';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\nimport {LEFT} from './toolbar';\r\n\r\n/**\r\n * Rows counter UI component\r\n * @export\r\n * @class RowsCounter\r\n * @extends {Feature}\r\n */\r\nexport class RowsCounter extends Feature {\r\n\r\n /**\r\n * Creates an instance of RowsCounter\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'rowsCounter');\r\n\r\n // TableFilter configuration\r\n let f = this.config.rows_counter || {};\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.container = null;\r\n\r\n /**\r\n * Container DOM element for label displaying the total number of rows\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.label = null;\r\n\r\n /**\r\n * Text preceding the total number of rows\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, 'Rows: ');\r\n\r\n /**\r\n * Separator symbol appearing between the first and last visible rows of\r\n * current page when paging is enabled. ie: Rows: 31-40 / 70\r\n * @type {String}\r\n */\r\n this.fromToTextSeparator = defaultsStr(f.separator, '-');\r\n\r\n /**\r\n * Separator symbol appearing between the first and last visible rows of\r\n * current page and the total number of filterable rows when paging is\r\n * enabled. ie: Rows: 31-40 / 70\r\n * @type {String}\r\n */\r\n this.overText = defaultsStr(f.over_text, ' / ');\r\n\r\n /**\r\n * Css class for container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'tot');\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, LEFT);\r\n\r\n /**\r\n * Callback fired before the counter is refreshed\r\n * @type {Function}\r\n */\r\n this.onBeforeRefreshCounter = defaultsFn(f.on_before_refresh_counter,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the counter is refreshed\r\n * @type {Function}\r\n */\r\n this.onAfterRefreshCounter = defaultsFn(f.on_after_refresh_counter,\r\n EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initializes RowsCounter instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.targetId));\r\n\r\n let tf = this.tf;\r\n\r\n //rows counter container\r\n let countDiv = createElm('div');\r\n countDiv.className = this.cssClass;\r\n //rows counter label\r\n let countSpan = createElm('span');\r\n let countText = createElm('span');\r\n countText.appendChild(createText(this.text));\r\n\r\n // counter is added to defined element\r\n let targetEl = !this.targetId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n\r\n //default container: 'lDiv'\r\n if (!this.targetId) {\r\n countDiv.appendChild(countText);\r\n countDiv.appendChild(countSpan);\r\n targetEl.appendChild(countDiv);\r\n } else {\r\n //custom container, no need to append statusDiv\r\n targetEl.appendChild(countText);\r\n targetEl.appendChild(countSpan);\r\n }\r\n this.container = countDiv;\r\n this.label = countSpan;\r\n\r\n // subscribe to events\r\n this.emitter.on(['after-filtering', 'grouped-by-page'],\r\n () => this.refresh(tf.getValidRowsNb()));\r\n this.emitter.on(['rows-changed'], () => this.refresh());\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n this.refresh();\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Refreshes the rows counter\r\n * @param {Number} p Optional parameter the total number of rows to display\r\n */\r\n refresh(p) {\r\n if (!this.initialized || !this.isEnabled()) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n this.onBeforeRefreshCounter(tf, this.label);\r\n\r\n let totTxt;\r\n if (!tf.paging) {\r\n if (p && p !== '') {\r\n totTxt = p;\r\n } else {\r\n totTxt = tf.getFilterableRowsNb() - tf.nbHiddenRows;\r\n }\r\n } else {\r\n let paging = tf.feature('paging');\r\n if (paging) {\r\n let nbValidRows = tf.getValidRowsNb();\r\n //paging start row\r\n let pagingStartRow = parseInt(paging.startPagingRow, 10) +\r\n ((nbValidRows > 0) ? 1 : 0);\r\n let pagingEndRow =\r\n (pagingStartRow + paging.pageLength) - 1 <=\r\n nbValidRows ?\r\n pagingStartRow + paging.pageLength - 1 :\r\n nbValidRows;\r\n totTxt = pagingStartRow + this.fromToTextSeparator +\r\n pagingEndRow + this.overText + nbValidRows;\r\n }\r\n }\r\n\r\n this.label.innerHTML = totTxt;\r\n this.onAfterRefreshCounter(tf, this.label, totTxt);\r\n }\r\n\r\n /**\r\n * Remove feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n if (!this.targetId && this.container) {\r\n removeElm(this.container);\r\n } else {\r\n elm(this.targetId).innerHTML = '';\r\n }\r\n this.label = null;\r\n this.container = null;\r\n\r\n // unsubscribe to events\r\n this.emitter.off(['after-filtering', 'grouped-by-page'],\r\n () => this.refresh(tf.getValidRowsNb()));\r\n this.emitter.off(['rows-changed'], () => this.refresh());\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {addClass, removeClass, hasClass} from '../dom';\r\nimport {EMPTY_FN} from '../types';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\n\r\n/**\r\n * Visual indicator for filtered columns\r\n * @export\r\n * @class MarkActiveColumns\r\n * @extends {Feature}\r\n */\r\nexport class MarkActiveColumns extends Feature {\r\n\r\n /**\r\n * Create an instance of MarkActiveColumns\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'markActiveColumns');\r\n\r\n let config = this.config.mark_active_columns || {};\r\n\r\n /**\r\n * Css class for filtered (active) columns\r\n * @type {String}\r\n */\r\n this.headerCssClass = defaultsStr(config.header_css_class,\r\n 'activeHeader');\r\n\r\n /**\r\n * Css class for filtered (active) column cells\r\n * @type {String}\r\n */\r\n this.cellCssClass = defaultsStr(config.cell_css_class,\r\n 'activeCell');\r\n\r\n /**\r\n * Enable/disable column highlighting\r\n * @type {Boolean}\r\n */\r\n this.highlightColumn = Boolean(config.highlight_column);\r\n\r\n /**\r\n * Callback fired before a column is marked as filtered\r\n * @type {Function}\r\n */\r\n this.onBeforeActiveColumn = defaultsFn(config.on_before_active_column,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a column is marked as filtered\r\n * @type {Function}\r\n */\r\n this.onAfterActiveColumn = defaultsFn(config.on_after_active_column,\r\n EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initialise MarkActiveColumns instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.on(['before-filtering'], () => this.clearActiveColumns());\r\n this.emitter.on(\r\n ['cell-processed'],\r\n (tf, colIndex) => this.markActiveColumn(colIndex)\r\n );\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Clear filtered columns visual indicator (background color)\r\n */\r\n clearActiveColumns() {\r\n let tf = this.tf;\r\n tf.eachCol((idx) => {\r\n removeClass(tf.getHeaderElement(idx), this.headerCssClass);\r\n\r\n if (this.highlightColumn) {\r\n this.eachColumnCell(idx,\r\n (cell) => removeClass(cell, this.cellCssClass));\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mark currently filtered column\r\n * @param {Number} colIndex Column index\r\n */\r\n markActiveColumn(colIndex) {\r\n let tf = this.tf;\r\n let header = tf.getHeaderElement(colIndex);\r\n if (hasClass(header, this.headerCssClass)) {\r\n return;\r\n }\r\n\r\n this.onBeforeActiveColumn(this, colIndex);\r\n\r\n addClass(header, this.headerCssClass);\r\n\r\n if (this.highlightColumn) {\r\n this.eachColumnCell(colIndex,\r\n (cell) => addClass(cell, this.cellCssClass));\r\n }\r\n\r\n this.onAfterActiveColumn(this, colIndex);\r\n }\r\n\r\n /**\r\n * Column cells iterator\r\n * TODO: make public and move into TableFilter if used elsewhere\r\n * @param {Number} colIndex\r\n * @param {Function} fn\r\n * @param {DOMElement} tbl\r\n * @private\r\n */\r\n eachColumnCell(colIndex, fn = EMPTY_FN, tbl = this.tf.dom()) {\r\n // TODO: remove [].forEach when polyfill for PhanthomJs is available\r\n [].forEach.call(\r\n tbl.querySelectorAll(`tbody td:nth-child(${colIndex + 1})`), fn);\r\n }\r\n\r\n /**\r\n * Remove feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.clearActiveColumns();\r\n this.emitter.off(['before-filtering'], () => this.clearActiveColumns());\r\n this.emitter.off(\r\n ['cell-processed'],\r\n (tf, colIndex) => this.markActiveColumn(colIndex)\r\n );\r\n\r\n /** @inherited */\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {isUndef, EMPTY_FN} from '../types';\r\nimport {createElm, removeElm} from '../dom';\r\nimport {addEvt, cancelEvt, stopEvt, targetEvt, removeEvt} from '../event';\r\nimport {INPUT, NONE, CHECKLIST, MULTIPLE} from '../const';\r\nimport {root} from '../root';\r\nimport {defaultsStr, defaultsBool, defaultsArr, defaultsFn} from '../settings';\r\n\r\n/**\r\n * Pop-up filter component\r\n * @export\r\n * @class PopupFilter\r\n * @extends {Feature}\r\n */\r\nexport class PopupFilter extends Feature {\r\n\r\n /**\r\n * Creates an instance of PopupFilter\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'popupFilters');\r\n\r\n // Configuration object\r\n let f = this.config.popup_filters || {};\r\n\r\n /**\r\n * Close active popup filter upon filtering, enabled by default\r\n * @type {Boolean}\r\n */\r\n this.closeOnFiltering = defaultsBool(f.close_on_filtering, true);\r\n\r\n /**\r\n * Filter icon path\r\n * @type {String}\r\n */\r\n this.iconPath = defaultsStr(f.image, tf.themesPath + 'icn_filter.gif');\r\n\r\n /**\r\n * Active filter icon path\r\n * @type {string}\r\n */\r\n this.activeIconPath = defaultsStr(f.image_active,\r\n tf.themesPath + 'icn_filterActive.gif');\r\n\r\n /**\r\n * HTML for the filter icon\r\n * @type {string}\r\n */\r\n this.iconHtml = defaultsStr(f.image_html,\r\n '\"Column');\r\n\r\n /**\r\n * Css class assigned to the popup container element\r\n * @type {String}\r\n */\r\n this.placeholderCssClass = defaultsStr(f.placeholder_css_class,\r\n 'popUpPlaceholder');\r\n\r\n /**\r\n * Css class assigned to filter container element\r\n * @type {String}\r\n */\r\n this.containerCssClass = defaultsStr(f.div_css_class, 'popUpFilter');\r\n\r\n /**\r\n * Ensure filter's container element width matches column width, enabled\r\n * by default\r\n * @type {Boolean}\r\n */\r\n this.adjustToContainer = defaultsBool(f.adjust_to_container, true);\r\n\r\n /**\r\n * Callback fired before a popup filter is opened\r\n * @type {Function}\r\n */\r\n this.onBeforeOpen = defaultsFn(f.on_before_popup_filter_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a popup filter is opened\r\n * @type {Function}\r\n */\r\n this.onAfterOpen = defaultsFn(f.on_after_popup_filter_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a popup filter is closed\r\n * @type {Function}\r\n */\r\n this.onBeforeClose = defaultsFn(f.on_before_popup_filter_close,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a popup filter is closed\r\n * @type {Function}\r\n */\r\n this.onAfterClose = defaultsFn(f.on_after_popup_filter_close, EMPTY_FN);\r\n\r\n /**\r\n * Collection of filters spans\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltSpans = [];\r\n\r\n /**\r\n * Collection of filters icons\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltIcons = [];\r\n\r\n /**\r\n * Collection of filters icons cached after pop-up filters are removed\r\n * @type {Array}\r\n * @private\r\n */\r\n this.filtersCache = null;\r\n\r\n /**\r\n * Collection of filters containers\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltElms = defaultsArr(this.filtersCache, []);\r\n\r\n /**\r\n * Prefix for pop-up filter container ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxDiv = 'popup_';\r\n\r\n /**\r\n * Column index of popup filter currently active\r\n * @type {Number}\r\n * @private\r\n */\r\n this.activeFilterIdx = -1;\r\n }\r\n\r\n /**\r\n * Click event handler for pop-up filter icon\r\n * @private\r\n */\r\n onClick(evt) {\r\n let elm = targetEvt(evt).parentNode;\r\n let colIndex = parseInt(elm.getAttribute('ci'), 10);\r\n\r\n this.closeAll(colIndex);\r\n this.toggle(colIndex);\r\n\r\n if (this.adjustToContainer) {\r\n let cont = this.fltElms[colIndex],\r\n header = this.tf.getHeaderElement(colIndex),\r\n headerWidth = header.clientWidth * 0.95;\r\n cont.style.width = parseInt(headerWidth, 10) + 'px';\r\n }\r\n cancelEvt(evt);\r\n stopEvt(evt);\r\n }\r\n\r\n /**\r\n * Mouse-up event handler handling popup filter auto-close behaviour\r\n * @private\r\n */\r\n onMouseup(evt) {\r\n if (this.activeFilterIdx === -1) {\r\n return;\r\n }\r\n let targetElm = targetEvt(evt);\r\n let activeFlt = this.fltElms[this.activeFilterIdx];\r\n let icon = this.fltIcons[this.activeFilterIdx];\r\n\r\n if (icon === targetElm) {\r\n return;\r\n }\r\n\r\n while (targetElm && targetElm !== activeFlt) {\r\n targetElm = targetElm.parentNode;\r\n }\r\n\r\n if (targetElm !== activeFlt) {\r\n this.close(this.activeFilterIdx);\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Initialize DOM elements\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n // Enable external filters\r\n tf.externalFltIds = [''];\r\n\r\n // Override filters row index supplied by configuration\r\n tf.filtersRowIndex = 0;\r\n\r\n // Override headers row index if no grouped headers\r\n // TODO: Because of the filters row generation, headers row index needs\r\n // adjusting: prevent useless row generation\r\n if (tf.headersRow <= 1 && isNaN(tf.config().headers_row_index)) {\r\n tf.headersRow = 0;\r\n }\r\n\r\n // Adjust headers row index for grid-layout mode\r\n // TODO: Because of the filters row generation, headers row index needs\r\n // adjusting: prevent useless row generation\r\n if (tf.gridLayout) {\r\n tf.headersRow--;\r\n this.buildIcons();\r\n }\r\n\r\n // subscribe to events\r\n this.emitter.on(['before-filtering'], () => this.setIconsState());\r\n this.emitter.on(['after-filtering'], () => this.closeAll());\r\n this.emitter.on(['cell-processed'],\r\n (tf, cellIndex) => this.changeState(cellIndex, true));\r\n this.emitter.on(['filters-row-inserted'], () => this.buildIcons());\r\n this.emitter.on(['before-filter-init'],\r\n (tf, colIndex) => this.build(colIndex));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Reset previously destroyed feature\r\n */\r\n reset() {\r\n this.enable();\r\n this.init();\r\n this.buildIcons();\r\n this.buildAll();\r\n }\r\n\r\n /**\r\n * Build all filters icons\r\n */\r\n buildIcons() {\r\n let tf = this.tf;\r\n\r\n // TODO: Because of the filters row generation, headers row index needs\r\n // adjusting: prevent useless row generation\r\n tf.headersRow++;\r\n\r\n tf.eachCol(\r\n (i) => {\r\n let icon = createElm('span', ['ci', i]);\r\n icon.innerHTML = this.iconHtml;\r\n let header = tf.getHeaderElement(i);\r\n header.appendChild(icon);\r\n addEvt(icon, 'click', (evt) => this.onClick(evt));\r\n this.fltSpans[i] = icon;\r\n this.fltIcons[i] = icon.firstChild;\r\n },\r\n // continue condition function\r\n (i) => tf.getFilterType(i) === NONE\r\n );\r\n }\r\n\r\n /**\r\n * Build all pop-up filters elements\r\n */\r\n buildAll() {\r\n for (let i = 0; i < this.filtersCache.length; i++) {\r\n this.build(i, this.filtersCache[i]);\r\n }\r\n }\r\n\r\n /**\r\n * Build a specified pop-up filter elements\r\n * @param {Number} colIndex Column index\r\n * @param {Object} div Optional container DOM element\r\n */\r\n build(colIndex, div) {\r\n let tf = this.tf;\r\n let contId = `${this.prfxDiv}${tf.id}_${colIndex}`;\r\n let placeholder = createElm('div', ['class', this.placeholderCssClass]);\r\n let cont = div ||\r\n createElm('div', ['id', contId], ['class', this.containerCssClass]);\r\n tf.externalFltIds[colIndex] = cont.id;\r\n placeholder.appendChild(cont);\r\n\r\n let header = tf.getHeaderElement(colIndex);\r\n header.insertBefore(placeholder, header.firstChild);\r\n addEvt(cont, 'click', (evt) => stopEvt(evt));\r\n this.fltElms[colIndex] = cont;\r\n }\r\n\r\n /**\r\n * Toggle visibility of specified filter\r\n * @param {Number} colIndex Column index\r\n */\r\n toggle(colIndex) {\r\n if (!this.isOpen(colIndex)) {\r\n this.open(colIndex);\r\n } else {\r\n this.close(colIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Open popup filter of specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n open(colIndex) {\r\n let tf = this.tf,\r\n container = this.fltElms[colIndex];\r\n\r\n this.onBeforeOpen(this, container, colIndex);\r\n\r\n container.style.display = 'block';\r\n this.activeFilterIdx = colIndex;\r\n addEvt(root, 'mouseup', (evt) => this.onMouseup(evt));\r\n\r\n if (tf.getFilterType(colIndex) === INPUT) {\r\n let flt = tf.getFilterElement(colIndex);\r\n if (flt) {\r\n flt.focus();\r\n }\r\n }\r\n\r\n this.onAfterOpen(this, container, colIndex);\r\n }\r\n\r\n /**\r\n * Close popup filter of specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n close(colIndex) {\r\n let container = this.fltElms[colIndex];\r\n\r\n this.onBeforeClose(this, container, colIndex);\r\n\r\n container.style.display = NONE;\r\n if (this.activeFilterIdx === colIndex) {\r\n this.activeFilterIdx = -1;\r\n }\r\n removeEvt(root, 'mouseup', (evt) => this.onMouseup(evt));\r\n\r\n this.onAfterClose(this, container, colIndex);\r\n }\r\n\r\n /**\r\n * Check if popup filter for specified column is open\r\n * @param {Number} colIndex Column index\r\n * @returns {Boolean}\r\n */\r\n isOpen(colIndex) {\r\n return this.fltElms[colIndex].style.display === 'block';\r\n }\r\n\r\n /**\r\n * Close all filters excepted for the specified one if any\r\n * @param {Number} exceptIdx Column index of the filter to not close\r\n */\r\n closeAll(exceptIdx) {\r\n // Do not close filters only if argument is undefined and close on\r\n // filtering option is disabled\r\n if (isUndef(exceptIdx) && !this.closeOnFiltering) {\r\n return;\r\n }\r\n for (let i = 0; i < this.fltElms.length; i++) {\r\n if (i === exceptIdx) {\r\n continue;\r\n }\r\n let fltType = this.tf.getFilterType(i);\r\n let isMultipleFilter =\r\n (fltType === CHECKLIST || fltType === MULTIPLE);\r\n\r\n // Always hide all single selection filter types but hide multiple\r\n // selection filter types only if index set\r\n if (!isMultipleFilter || !isUndef(exceptIdx)) {\r\n this.close(i);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Build all the icons representing the pop-up filters\r\n */\r\n setIconsState() {\r\n for (let i = 0; i < this.fltIcons.length; i++) {\r\n this.changeState(i, false);\r\n }\r\n }\r\n\r\n /**\r\n * Apply specified icon state\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} active Apply active state\r\n */\r\n changeState(colIndex, active) {\r\n let icon = this.fltIcons[colIndex];\r\n if (icon) {\r\n icon.src = active ? this.activeIconPath : this.iconPath;\r\n }\r\n }\r\n\r\n /**\r\n * Remove pop-up filters\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.filtersCache = [];\r\n for (let i = 0; i < this.fltElms.length; i++) {\r\n let container = this.fltElms[i],\r\n placeholder = container.parentNode,\r\n icon = this.fltSpans[i],\r\n iconImg = this.fltIcons[i];\r\n if (container) {\r\n removeElm(container);\r\n this.filtersCache[i] = container;\r\n }\r\n container = null;\r\n if (placeholder) {\r\n removeElm(placeholder);\r\n }\r\n placeholder = null;\r\n if (icon) {\r\n removeElm(icon);\r\n }\r\n icon = null;\r\n if (iconImg) {\r\n removeElm(iconImg);\r\n }\r\n iconImg = null;\r\n }\r\n this.fltElms = [];\r\n this.fltSpans = [];\r\n this.fltIcons = [];\r\n\r\n // TODO: expose an API to handle external filter IDs\r\n this.tf.externalFltIds = [];\r\n\r\n // unsubscribe to events\r\n this.emitter.off(['before-filtering'], () => this.setIconsState());\r\n this.emitter.off(['after-filtering'], () => this.closeAll());\r\n this.emitter.off(['cell-processed'],\r\n (tf, cellIndex) => this.changeState(cellIndex, true));\r\n this.emitter.off(['filters-row-inserted'], () => this.buildIcons());\r\n this.emitter.off(['before-filter-init'],\r\n (tf, colIndex) => this.build(colIndex));\r\n\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {createText, createElm, getText} from '../dom';\r\nimport {isNull} from '../types';\r\nimport {rgxEsc} from '../string';\r\nimport {defaultsStr} from '../settings';\r\n\r\n/**\r\n * Highlight matched keywords upon filtering\r\n *\r\n * @export\r\n * @class HighlightKeyword\r\n */\r\nexport class HighlightKeyword {\r\n\r\n /**\r\n * Creates an instance of HighlightKeyword\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n let f = tf.config();\r\n\r\n /**\r\n * Css class for highlighted term\r\n * @type {String}\r\n */\r\n this.highlightCssClass = defaultsStr(f.highlight_css_class, 'keyword');\r\n\r\n /**\r\n * TableFilter instance\r\n * @type {TableFilter}\r\n */\r\n this.tf = tf;\r\n\r\n /**\r\n * TableFilter's emitter instance\r\n * @type {Emitter}\r\n */\r\n this.emitter = tf.emitter;\r\n }\r\n\r\n /**\r\n * Initializes HighlightKeyword instance\r\n */\r\n init() {\r\n this.emitter.on(\r\n ['before-filtering', 'destroy'],\r\n () => this.unhighlightAll()\r\n );\r\n this.emitter.on(\r\n ['highlight-keyword'],\r\n (tf, cell, term) => this._processTerm(cell, term)\r\n );\r\n }\r\n\r\n /**\r\n * Highlight occurences of searched term in passed node\r\n * @param {Node} node\r\n * @param {String} term Searched term\r\n * @param {String} cssClass Css class name\r\n *\r\n * TODO: refactor this method\r\n */\r\n highlight(node, term, cssClass) {\r\n // Iterate into this nodes childNodes\r\n if (node.hasChildNodes) {\r\n let children = node.childNodes;\r\n for (let i = 0; i < children.length; i++) {\r\n this.highlight(children[i], term, cssClass);\r\n }\r\n }\r\n\r\n if (node.nodeType === 3) {\r\n let nodeVal = node.nodeValue.toLowerCase();\r\n let termIdx = nodeVal.indexOf(term.toLowerCase());\r\n\r\n if (termIdx !== -1) {\r\n let pn = node.parentNode;\r\n if (pn && pn.className !== cssClass) {\r\n // term not highlighted yet\r\n let nv = node.nodeValue,\r\n // Create a load of replacement nodes\r\n before = createText(nv.substr(0, termIdx)),\r\n value = nv.substr(termIdx, term.length),\r\n after = createText(nv.substr(termIdx + term.length)),\r\n text = createText(value),\r\n container = createElm('span');\r\n container.className = cssClass;\r\n container.appendChild(text);\r\n pn.insertBefore(before, node);\r\n pn.insertBefore(container, node);\r\n pn.insertBefore(after, node);\r\n pn.removeChild(node);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes highlight to nodes matching passed string\r\n * @param {String} term\r\n * @param {String} cssClass Css class to remove\r\n */\r\n unhighlight(term, cssClass) {\r\n let highlightedNodes = this.tf.dom().querySelectorAll(`.${cssClass}`);\r\n for (let i = 0; i < highlightedNodes.length; i++) {\r\n let n = highlightedNodes[i];\r\n let nodeVal = getText(n);\r\n\r\n if (isNull(term) ||\r\n nodeVal.toLowerCase().indexOf(term.toLowerCase()) !== -1) {\r\n let parentNode = n.parentNode;\r\n parentNode.replaceChild(createText(nodeVal), n);\r\n parentNode.normalize();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clear all occurrences of highlighted nodes\r\n */\r\n unhighlightAll() {\r\n if (!this.tf.highlightKeywords) {\r\n return;\r\n }\r\n\r\n this.unhighlight(null, this.highlightCssClass);\r\n }\r\n\r\n /** Remove feature */\r\n destroy() {\r\n this.emitter.off(\r\n ['before-filtering', 'destroy'],\r\n () => this.unhighlightAll()\r\n );\r\n this.emitter.off(\r\n ['highlight-keyword'],\r\n (tf, cell, term) => this._processTerm(cell, term)\r\n );\r\n }\r\n\r\n /**\r\n * Ensure filtering operators are handled before highlighting any match\r\n * @param {any} Table cell to look searched term into\r\n * @param {any} Searched termIdx\r\n */\r\n _processTerm(cell, term) {\r\n let tf = this.tf;\r\n let reLk = new RegExp(rgxEsc(tf.lkOperator));\r\n let reEq = new RegExp(tf.eqOperator);\r\n let reSt = new RegExp(tf.stOperator);\r\n let reEn = new RegExp(tf.enOperator);\r\n let reLe = new RegExp(tf.leOperator);\r\n let reGe = new RegExp(tf.geOperator);\r\n let reL = new RegExp(tf.lwOperator);\r\n let reG = new RegExp(tf.grOperator);\r\n let reD = new RegExp(tf.dfOperator);\r\n\r\n term = term\r\n .replace(reLk, '')\r\n .replace(reEq, '')\r\n .replace(reSt, '')\r\n .replace(reEn, '');\r\n\r\n if (reLe.test(term) || reGe.test(term) || reL.test(term) ||\r\n reG.test(term) || reD.test(term)) {\r\n term = getText(cell);\r\n }\r\n\r\n if (term === '') {\r\n return;\r\n }\r\n\r\n this.highlight(cell, term, this.highlightCssClass);\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {EMPTY_FN} from '../types';\r\nimport {root} from '../root';\r\nimport {NONE} from '../const';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\n\r\nconst BEFORE_ACTION_EVENTS = [\r\n 'before-filtering',\r\n 'before-populating-filter',\r\n 'before-page-change',\r\n 'before-clearing-filters',\r\n 'before-page-length-change',\r\n 'before-reset-page',\r\n 'before-reset-page-length',\r\n 'before-loading-extensions',\r\n 'before-loading-themes'\r\n];\r\n\r\nconst AFTER_ACTION_EVENTS = [\r\n 'after-filtering',\r\n 'after-populating-filter',\r\n 'after-page-change',\r\n 'after-clearing-filters',\r\n 'after-page-length-change',\r\n 'after-reset-page',\r\n 'after-reset-page-length',\r\n 'after-loading-extensions',\r\n 'after-loading-themes'\r\n];\r\n\r\n/**\r\n * Activity indicator\r\n *\r\n * @export\r\n * @class Loader\r\n * @extends {Feature}\r\n */\r\nexport class Loader extends Feature {\r\n\r\n /**\r\n * Creates an instance of Loader.\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'loader');\r\n\r\n let f = this.config.loader || {};\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Loader container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.cont = null;\r\n\r\n /**\r\n * Text displayed when indicator is visible\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, 'Loading...');\r\n\r\n /**\r\n * Custom HTML injected in Loader's container element\r\n * @type {String}\r\n */\r\n this.html = defaultsStr(f.html, null);\r\n\r\n /**\r\n * Css class for Loader's container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'loader');\r\n\r\n /**\r\n * Close delay in milliseconds\r\n * @type {Number}\r\n */\r\n this.closeDelay = 250;\r\n\r\n /**\r\n * Callback fired when loader is displayed\r\n * @type {Function}\r\n */\r\n this.onShow = defaultsFn(f.on_show_loader, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired when loader is closed\r\n * @type {Function}\r\n */\r\n this.onHide = defaultsFn(f.on_hide_loader, EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initializes Loader instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n let emitter = this.emitter;\r\n\r\n let containerDiv = createElm('div');\r\n containerDiv.className = this.cssClass;\r\n\r\n let targetEl = !this.targetId ?\r\n tf.dom().parentNode : elm(this.targetId);\r\n if (!this.targetId) {\r\n targetEl.insertBefore(containerDiv, tf.dom());\r\n } else {\r\n targetEl.appendChild(containerDiv);\r\n }\r\n this.cont = containerDiv;\r\n if (!this.html) {\r\n this.cont.appendChild(createText(this.text));\r\n } else {\r\n this.cont.innerHTML = this.html;\r\n }\r\n\r\n this.show(NONE);\r\n\r\n // Subscribe to events\r\n emitter.on(BEFORE_ACTION_EVENTS, () => this.show(''));\r\n emitter.on(AFTER_ACTION_EVENTS, () => this.show(NONE));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Shows or hides activity indicator\r\n * @param {String} Two possible values: '' or 'none'\r\n */\r\n show(p) {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n function displayLoader() {\r\n if (!this.cont) {\r\n return;\r\n }\r\n if (p !== NONE) {\r\n this.onShow(this);\r\n }\r\n this.cont.style.display = p;\r\n if (p === NONE) {\r\n this.onHide(this);\r\n }\r\n };\r\n\r\n let t = p === NONE ? this.closeDelay : 1;\r\n root.setTimeout(displayLoader.bind(this), t);\r\n }\r\n\r\n /**\r\n * Removes feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let emitter = this.emitter;\r\n\r\n removeElm(this.cont);\r\n this.cont = null;\r\n\r\n // Unsubscribe to events\r\n emitter.off(BEFORE_ACTION_EVENTS, () => this.show(''));\r\n emitter.off(AFTER_ACTION_EVENTS, () => this.show(NONE));\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, removeElm, elm, tag} from '../dom';\r\nimport {addEvt, targetEvt} from '../event';\r\nimport {contains} from '../string';\r\nimport {NONE} from '../const';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsNb, defaultsArr\r\n} from '../settings';\r\n\r\n/**\r\n * Grid layout, table with fixed headers\r\n */\r\nexport class GridLayout extends Feature {\r\n\r\n /**\r\n * Creates an instance of GridLayout\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'gridLayout');\r\n\r\n let f = this.config.grid_layout || {};\r\n\r\n /**\r\n * Grid-layout container width as CSS string\r\n * @type {String}\r\n */\r\n this.width = defaultsStr(f.width, null);\r\n\r\n /**\r\n * Grid-layout container height as CSS string\r\n * @type {String}\r\n */\r\n this.height = defaultsStr(f.height, null);\r\n\r\n /**\r\n * Css class for main container element\r\n * @type {String}\r\n */\r\n this.mainContCssClass = defaultsStr(f.cont_css_class, 'grd_Cont');\r\n\r\n /**\r\n * Css class for body table container element\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.tbl_cont_css_class, 'grd_tblCont');\r\n\r\n /**\r\n * Css class for headers table container element\r\n * @type {String}\r\n */\r\n this.headContCssClass = defaultsStr(f.tbl_head_css_class,\r\n 'grd_headTblCont');\r\n\r\n /**\r\n * Css class for toolbar container element (rows counter, paging etc.)\r\n * @type {String}\r\n */\r\n this.infDivCssClass = defaultsStr(f.inf_grid_css_class, 'grd_inf');\r\n\r\n /**\r\n * Index of the headers row, default: 0\r\n * @type {Number}\r\n */\r\n this.headRowIndex = defaultsNb(f.headers_row_index, 0);\r\n\r\n /**\r\n * Collection of the header row indexes to be moved into headers table\r\n * @type {Array}\r\n */\r\n this.headRows = defaultsArr(f.headers_rows, [0]);\r\n\r\n /**\r\n * Enable or disable column filters generation, default: true\r\n * @type {Boolean}\r\n */\r\n this.filters = defaultsBool(f.filters, true);\r\n\r\n /**\r\n * Enable or disable column headers, default: false\r\n * @type {Boolean}\r\n */\r\n this.noHeaders = Boolean(f.no_headers);\r\n\r\n /**\r\n * Grid-layout default column widht as CSS string\r\n * @type {String}\r\n */\r\n this.defaultColWidth = defaultsStr(f.default_col_width, '100px');\r\n\r\n /**\r\n * List of column elements\r\n * @type {Array}\r\n * @private\r\n */\r\n this.colElms = [];\r\n\r\n /**\r\n * Prefix for grid-layout filter's cell ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxGridFltTd = '_td_';\r\n\r\n /**\r\n * Prefix for grid-layout header's cell ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxGridTh = 'tblHeadTh_';\r\n\r\n /**\r\n * Mark-up of original HTML table\r\n * @type {String}\r\n * @private\r\n */\r\n this.sourceTblHtml = tf.dom().outerHTML;\r\n\r\n /**\r\n * Indicates if working table has column elements\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.tblHasColTag = tag(tf.dom(), 'col').length > 0 ? true : false;\r\n\r\n /**\r\n * Main container element\r\n * @private\r\n */\r\n this.tblMainCont = null;\r\n\r\n /**\r\n * Table container element\r\n * @private\r\n */\r\n this.tblCont = null;\r\n\r\n /**\r\n * Headers' table container element\r\n * @private\r\n */\r\n this.headTblCont = null;\r\n\r\n /**\r\n * Headers' table element\r\n * @private\r\n */\r\n this.headTbl = null;\r\n\r\n // filters flag at TF level\r\n tf.fltGrid = this.filters;\r\n }\r\n\r\n /**\r\n * Generates a grid with fixed headers\r\n * TODO: reduce size of init by extracting single purposed methods\r\n */\r\n init() {\r\n let tf = this.tf;\r\n let tbl = tf.dom();\r\n\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n // Override relevant TableFilter properties\r\n this.setOverrides();\r\n\r\n // Assign default column widths\r\n this.setDefaultColWidths();\r\n\r\n //Main container: it will contain all the elements\r\n this.tblMainCont = this.createContainer(\r\n 'div', this.mainContCssClass);\r\n if (this.width) {\r\n this.tblMainCont.style.width = this.width;\r\n }\r\n tbl.parentNode.insertBefore(this.tblMainCont, tbl);\r\n\r\n //Table container: div wrapping content table\r\n this.tblCont = this.createContainer('div', this.contCssClass);\r\n this.setConfigWidth(this.tblCont);\r\n if (this.height) {\r\n this.tblCont.style.height = this.height;\r\n }\r\n tbl.parentNode.insertBefore(this.tblCont, tbl);\r\n let t = removeElm(tbl);\r\n this.tblCont.appendChild(t);\r\n\r\n //In case table width is expressed in %\r\n if (tbl.style.width === '') {\r\n let tblW = this.initialTableWidth();\r\n tbl.style.width = (contains('%', tblW) ?\r\n tbl.clientWidth : tblW) + 'px';\r\n }\r\n\r\n let d = removeElm(this.tblCont);\r\n this.tblMainCont.appendChild(d);\r\n\r\n //Headers table container: div wrapping headers table\r\n this.headTblCont = this.createContainer(\r\n 'div', this.headContCssClass);\r\n\r\n //Headers table\r\n this.headTbl = createElm('table');\r\n let tH = createElm('tHead');\r\n\r\n //1st row should be headers row, ids are added if not set\r\n //Those ids are used by the sort feature\r\n let hRow = tbl.rows[this.headRowIndex];\r\n let sortTriggers = this.getSortTriggerIds(hRow);\r\n\r\n //Filters row is created\r\n let filtersRow = this.createFiltersRow();\r\n\r\n //Headers row are moved from content table to headers table\r\n this.setHeadersRow(tH);\r\n\r\n this.headTbl.appendChild(tH);\r\n if (tf.filtersRowIndex === 0) {\r\n tH.insertBefore(filtersRow, hRow);\r\n } else {\r\n tH.appendChild(filtersRow);\r\n }\r\n\r\n this.headTblCont.appendChild(this.headTbl);\r\n this.tblCont.parentNode.insertBefore(this.headTblCont, this.tblCont);\r\n\r\n //THead needs to be removed in content table for sort feature\r\n let thead = tag(tbl, 'thead');\r\n if (thead.length > 0) {\r\n tbl.removeChild(thead[0]);\r\n }\r\n\r\n // ensure table layout is always set even if already set in css\r\n // definitions, potentially with custom css class this could be lost\r\n this.headTbl.style.tableLayout = 'fixed';\r\n tbl.style.tableLayout = 'fixed';\r\n\r\n //content table without headers needs col widths to be reset\r\n tf.setColWidths(this.headTbl);\r\n\r\n //Headers container width\r\n this.headTbl.style.width = tbl.style.width;\r\n //\r\n\r\n //scroll synchronisation\r\n addEvt(this.tblCont, 'scroll', (evt) => {\r\n let elm = targetEvt(evt);\r\n let scrollLeft = elm.scrollLeft;\r\n this.headTblCont.scrollLeft = scrollLeft;\r\n //New pointerX calc taking into account scrollLeft\r\n // if(!o.isPointerXOverwritten){\r\n // try{\r\n // o.Evt.pointerX = function(evt){\r\n // let e = evt || global.event;\r\n // let bdScrollLeft = tf_StandardBody().scrollLeft +\r\n // scrollLeft;\r\n // return (e.pageX + scrollLeft) ||\r\n // (e.clientX + bdScrollLeft);\r\n // };\r\n // o.isPointerXOverwritten = true;\r\n // } catch(err) {\r\n // o.isPointerXOverwritten = false;\r\n // }\r\n // }\r\n });\r\n\r\n // TODO: Trigger a custom event handled by sort extension\r\n let sort = tf.extension('sort');\r\n if (sort) {\r\n sort.asyncSort = true;\r\n sort.triggerIds = sortTriggers;\r\n }\r\n\r\n //Col elements are enough to keep column widths after sorting and\r\n //filtering\r\n this.setColumnElements();\r\n\r\n if (tf.popupFilters) {\r\n filtersRow.style.display = NONE;\r\n }\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Overrides TableFilter instance properties to adjust to grid layout mode\r\n * @private\r\n */\r\n setOverrides() {\r\n let tf = this.tf;\r\n tf.refRow = 0;\r\n tf.headersRow = 0;\r\n tf.filtersRowIndex = 1;\r\n }\r\n\r\n /**\r\n * Set grid-layout default column widths if column widths are not defined\r\n * @private\r\n */\r\n setDefaultColWidths() {\r\n let tf = this.tf;\r\n if (tf.colWidths.length > 0) {\r\n return;\r\n }\r\n\r\n tf.eachCol((k) => {\r\n let colW;\r\n let cell = tf.dom().rows[tf.getHeadersRowIndex()].cells[k];\r\n if (cell.width !== '') {\r\n colW = cell.width;\r\n } else if (cell.style.width !== '') {\r\n colW = parseInt(cell.style.width, 10);\r\n } else {\r\n colW = this.defaultColWidth;\r\n }\r\n tf.colWidths[k] = colW;\r\n });\r\n\r\n tf.setColWidths();\r\n }\r\n\r\n /**\r\n * Initial table width\r\n * @returns {Number}\r\n * @private\r\n */\r\n initialTableWidth() {\r\n let tbl = this.tf.dom();\r\n let width; //initial table width\r\n\r\n if (tbl.width !== '') {\r\n width = tbl.width;\r\n }\r\n else if (tbl.style.width !== '') {\r\n width = tbl.style.width;\r\n } else {\r\n width = tbl.clientWidth;\r\n }\r\n return parseInt(width, 10);\r\n }\r\n\r\n /**\r\n * Creates container element\r\n * @param {String} tag Tag name\r\n * @param {String} className Css class to assign to element\r\n * @returns {DOMElement}\r\n * @private\r\n */\r\n createContainer(tag, className) {\r\n let element = createElm(tag);\r\n element.className = className;\r\n return element;\r\n }\r\n\r\n /**\r\n * Creates filters row with cells\r\n * @returns {HTMLTableRowElement}\r\n * @private\r\n */\r\n createFiltersRow() {\r\n let tf = this.tf;\r\n let filtersRow = createElm('tr');\r\n if (this.filters && tf.fltGrid) {\r\n tf.externalFltIds = [];\r\n tf.eachCol((j) => {\r\n let fltTdId = `${tf.prfxFlt + j + this.prfxGridFltTd + tf.id}`;\r\n let cl = createElm(tf.fltCellTag, ['id', fltTdId]);\r\n filtersRow.appendChild(cl);\r\n tf.externalFltIds[j] = fltTdId;\r\n });\r\n }\r\n return filtersRow;\r\n }\r\n\r\n /**\r\n * Generates column elements if necessary and assigns their widths\r\n * @private\r\n */\r\n setColumnElements() {\r\n let tf = this.tf;\r\n let cols = tag(tf.dom(), 'col');\r\n this.tblHasColTag = cols.length > 0;\r\n\r\n for (let k = (tf.getCellsNb() - 1); k >= 0; k--) {\r\n let col;\r\n\r\n if (!this.tblHasColTag) {\r\n col = createElm('col');\r\n tf.dom().insertBefore(col, tf.dom().firstChild);\r\n } else {\r\n col = cols[k];\r\n }\r\n col.style.width = tf.colWidths[k];\r\n this.colElms[k] = col;\r\n }\r\n this.tblHasColTag = true;\r\n }\r\n\r\n /**\r\n * Sets headers row in headers table\r\n * @param {HTMLHeadElement} tableHead Table head element\r\n * @private\r\n */\r\n setHeadersRow(tableHead) {\r\n if (this.noHeaders) {\r\n // Handle table with no headers, assuming here headers do not\r\n // exist\r\n tableHead.appendChild(createElm('tr'));\r\n } else {\r\n // Headers row are moved from content table to headers table\r\n for (let i = 0; i < this.headRows.length; i++) {\r\n let row = this.tf.dom().rows[this.headRows[i]];\r\n tableHead.appendChild(row);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets width defined in configuration to passed element\r\n * @param {DOMElement} element DOM element\r\n * @private\r\n */\r\n setConfigWidth(element) {\r\n if (!this.width) {\r\n return;\r\n }\r\n if (this.width.indexOf('%') !== -1) {\r\n element.style.width = '100%';\r\n } else {\r\n element.style.width = this.width;\r\n }\r\n }\r\n\r\n /**\r\n * Returns a list of header IDs used for specifing external sort triggers\r\n * @param {HTMLTableRowElement} row DOM row element\r\n * @returns {Array} List of IDs\r\n * @private\r\n */\r\n getSortTriggerIds(row) {\r\n let tf = this.tf;\r\n let sortTriggers = [];\r\n tf.eachCol((n) => {\r\n let c = row.cells[n];\r\n let thId = c.getAttribute('id');\r\n if (!thId || thId === '') {\r\n thId = `${this.prfxGridTh + n}_${tf.id}`;\r\n c.setAttribute('id', thId);\r\n }\r\n sortTriggers.push(thId);\r\n });\r\n return sortTriggers;\r\n }\r\n\r\n /**\r\n * Removes the grid layout\r\n */\r\n destroy() {\r\n let tf = this.tf;\r\n let tbl = tf.dom();\r\n\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let t = removeElm(tbl);\r\n this.tblMainCont.parentNode.insertBefore(t, this.tblMainCont);\r\n removeElm(this.tblMainCont);\r\n\r\n this.tblMainCont = null;\r\n this.headTblCont = null;\r\n this.headTbl = null;\r\n this.tblCont = null;\r\n\r\n tbl.outerHTML = this.sourceTblHtml;\r\n //needed to keep reference of table element for future usage\r\n this.tf.tbl = elm(tf.id);\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import Cookie from '../cookie';\r\nimport {root} from '../root';\r\n\r\nconst JSON = root.JSON;\r\nconst localStorage = root.localStorage;\r\nconst location = root.location;\r\n\r\n/**\r\n * Checks if browser has Storage feature\r\n */\r\nexport const hasStorage = () => {\r\n return 'Storage' in root;\r\n};\r\n\r\n/**\r\n * Stores the features state in browser's local storage or cookie\r\n *\r\n * @export\r\n * @class Storage\r\n */\r\nexport class Storage {\r\n\r\n /**\r\n * Creates an instance of Storage\r\n *\r\n * @param {State} state Instance of State\r\n */\r\n constructor(state) {\r\n\r\n /**\r\n * State object\r\n * @type {State}\r\n * @private\r\n */\r\n this.state = state;\r\n\r\n /**\r\n * TableFilter object\r\n * @type {TableFilter}\r\n * @private\r\n */\r\n this.tf = state.tf;\r\n\r\n /**\r\n * Persist with local storage\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.enableLocalStorage = state.enableLocalStorage && hasStorage();\r\n\r\n /**\r\n * Persist with cookie\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.enableCookie = state.enableCookie && !this.enableLocalStorage;\r\n\r\n /**\r\n * Emitter object\r\n * @type {Emitter}\r\n * @private\r\n */\r\n this.emitter = state.emitter;\r\n\r\n /**\r\n * Cookie duration in hours from state object\r\n * @type {Number}\r\n * @private\r\n */\r\n this.duration = state.cookieDuration;\r\n }\r\n\r\n\r\n /**\r\n * Initializes the Storage object\r\n */\r\n init() {\r\n this.emitter.on(['state-changed'], (tf, state) => this.save(state));\r\n this.emitter.on(['initialized'], () => this.sync());\r\n }\r\n\r\n /**\r\n * Persists the features state on state changes\r\n *\r\n * @param {State} state Instance of State\r\n */\r\n save(state) {\r\n if (this.enableLocalStorage) {\r\n localStorage[this.getKey()] = JSON.stringify(state);\r\n } else {\r\n Cookie.write(this.getKey(), JSON.stringify(state), this.duration);\r\n }\r\n }\r\n\r\n /**\r\n * Turns stored string into a State JSON object\r\n *\r\n * @returns {Object} JSON object\r\n */\r\n retrieve() {\r\n let state = null;\r\n if (this.enableLocalStorage) {\r\n state = localStorage[this.getKey()];\r\n } else {\r\n state = Cookie.read(this.getKey());\r\n }\r\n\r\n if (!state) {\r\n return null;\r\n }\r\n return JSON.parse(state);\r\n }\r\n\r\n /**\r\n * Removes persisted state from storage\r\n */\r\n remove() {\r\n if (this.enableLocalStorage) {\r\n localStorage.removeItem(this.getKey());\r\n } else {\r\n Cookie.remove(this.getKey());\r\n }\r\n }\r\n\r\n /**\r\n * Applies persisted state to features\r\n */\r\n sync() {\r\n let state = this.retrieve();\r\n if (!state) {\r\n return;\r\n }\r\n // override current state with persisted one and sync features\r\n this.state.overrideAndSync(state);\r\n }\r\n\r\n /**\r\n * Returns the storage key\r\n *\r\n * @returns {String} Key\r\n */\r\n getKey() {\r\n return JSON.stringify({\r\n key: `${this.tf.prfxTf}_${this.tf.id}`,\r\n path: location.pathname\r\n });\r\n }\r\n\r\n /**\r\n * Release Storage event subscriptions and clear fields\r\n */\r\n destroy() {\r\n this.emitter.off(['state-changed'], (tf, state) => this.save(state));\r\n this.emitter.off(['initialized'], () => this.sync());\r\n\r\n this.remove();\r\n\r\n this.state = null;\r\n this.emitter = null;\r\n }\r\n}\r\n","import {addEvt, removeEvt} from '../event';\r\nimport {root} from '../root';\r\n\r\nconst JSON = root.JSON;\r\nconst location = root.location;\r\nconst decodeURIComponent = root.decodeURIComponent;\r\nconst encodeURIComponent = root.encodeURIComponent;\r\n\r\n/**\r\n * Checks if browser has onhashchange event\r\n */\r\nexport const hasHashChange = () => {\r\n let docMode = root.documentMode;\r\n return ('onhashchange' in root) && (docMode === undefined || docMode > 7);\r\n};\r\n\r\n/**\r\n * Manages state via URL hash changes\r\n *\r\n * @export\r\n * @class Hash\r\n */\r\nexport class Hash {\r\n\r\n /**\r\n * Creates an instance of Hash\r\n *\r\n * @param {State} state Instance of State\r\n */\r\n constructor(state) {\r\n /**\r\n * State object\r\n * @type {State}\r\n */\r\n this.state = state;\r\n\r\n /**\r\n * Cached URL hash\r\n * @type {String} Hash string\r\n * @private\r\n */\r\n this.lastHash = null;\r\n\r\n /**\r\n * Application event emitter instance\r\n * @type {Emitter}\r\n */\r\n this.emitter = state.emitter;\r\n\r\n /**\r\n * Bound sync wrapper for future use\r\n * @private\r\n */\r\n this.boundSync = null;\r\n }\r\n\r\n /**\r\n * Initializes the Hash object\r\n */\r\n init() {\r\n if (!hasHashChange()) {\r\n return;\r\n }\r\n\r\n this.lastHash = location.hash;\r\n //Store a bound sync wrapper\r\n this.boundSync = this.sync.bind(this);\r\n this.emitter.on(['state-changed'], (tf, state) => this.update(state));\r\n this.emitter.on(['initialized'], this.boundSync);\r\n addEvt(root, 'hashchange', this.boundSync);\r\n }\r\n\r\n /**\r\n * Updates the URL hash based on a state change\r\n *\r\n * @param {State} state Instance of State\r\n */\r\n update(state) {\r\n let hash = `#${encodeURIComponent(JSON.stringify(state))}`;\r\n if (this.lastHash === hash) {\r\n return;\r\n }\r\n\r\n location.hash = hash;\r\n this.lastHash = hash;\r\n }\r\n\r\n /**\r\n * Converts a URL hash into a state JSON object\r\n *\r\n * @param {String} hash URL hash fragment\r\n * @returns {Object} JSON object\r\n */\r\n parse(hash) {\r\n if (hash.indexOf('#') === -1) {\r\n return null;\r\n }\r\n hash = hash.substr(1);\r\n return JSON.parse(decodeURIComponent(hash));\r\n }\r\n\r\n /**\r\n * Applies current hash state to features\r\n */\r\n sync() {\r\n let state = this.parse(location.hash);\r\n if (!state) {\r\n return;\r\n }\r\n // override current state with persisted one and sync features\r\n this.state.overrideAndSync(state);\r\n }\r\n\r\n /**\r\n * Release Hash event subscriptions and clear fields\r\n */\r\n destroy() {\r\n this.emitter.off(['state-changed'], (tf, state) => this.update(state));\r\n this.emitter.off(['initialized'], this.boundSync);\r\n removeEvt(root, 'hashchange', this.boundSync);\r\n\r\n this.state = null;\r\n this.lastHash = null;\r\n this.emitter = null;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {Hash} from './hash';\r\nimport {Storage} from './storage';\r\nimport {isEmpty} from '../string';\r\nimport {isArray, isNull, isString, isUndef} from '../types';\r\nimport {defaultsBool, defaultsNb} from '../settings';\r\n\r\n/**\r\n * Features state object persistable with localStorage, cookie or URL hash\r\n *\r\n * @export\r\n * @class State\r\n * @extends {Feature}\r\n */\r\nexport class State extends Feature {\r\n\r\n /**\r\n * Creates an instance of State\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'state');\r\n\r\n let cfg = this.config.state || {};\r\n\r\n /**\r\n * Determines whether state is persisted with URL hash\r\n * @type {Boolean}\r\n */\r\n this.enableHash = cfg === true ||\r\n (isArray(cfg.types) && cfg.types.indexOf('hash') !== -1);\r\n\r\n /**\r\n * Determines whether state is persisted with localStorage\r\n * @type {Boolean}\r\n */\r\n this.enableLocalStorage = isArray(cfg.types) &&\r\n cfg.types.indexOf('local_storage') !== -1;\r\n\r\n /**\r\n * Determines whether state is persisted with localStorage\r\n * @type {Boolean}\r\n */\r\n this.enableCookie = isArray(cfg.types) &&\r\n cfg.types.indexOf('cookie') !== -1;\r\n\r\n /**\r\n * Persist filters values, enabled by default\r\n * @type {Boolean}\r\n */\r\n this.persistFilters = defaultsBool(cfg.filters, true);\r\n\r\n /**\r\n * Persist current page number when paging is enabled\r\n * @type {Boolean}\r\n */\r\n this.persistPageNumber = Boolean(cfg.page_number);\r\n\r\n /**\r\n * Persist page length when paging is enabled\r\n * @type {Boolean}\r\n */\r\n this.persistPageLength = Boolean(cfg.page_length);\r\n\r\n /**\r\n * Persist column sorting\r\n * @type {Boolean}\r\n */\r\n this.persistSort = Boolean(cfg.sort);\r\n\r\n /**\r\n * Persist columns visibility\r\n * @type {Boolean}\r\n */\r\n this.persistColsVisibility = Boolean(cfg.columns_visibility);\r\n\r\n /**\r\n * Persist filters row visibility\r\n * @type {Boolean}\r\n */\r\n this.persistFiltersVisibility = Boolean(cfg.filters_visibility);\r\n\r\n /**\r\n * Cookie duration in hours\r\n * @type {Boolean}\r\n */\r\n this.cookieDuration = defaultsNb(parseInt(cfg.cookie_duration, 10),\r\n 87600);\r\n\r\n /**\r\n * Enable Storage if localStorage or cookie is required\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.enableStorage = this.enableLocalStorage || this.enableCookie;\r\n\r\n /**\r\n * Storage instance if storage is required\r\n * @type {Storage}\r\n * @private\r\n */\r\n this.storage = null;\r\n\r\n /**\r\n * Hash instance if URL hash is required\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.hash = null;\r\n\r\n /**\r\n * Current page number\r\n * @type {Number}\r\n * @private\r\n */\r\n this.pageNb = null;\r\n\r\n /**\r\n * Current page length\r\n * @type {Number}\r\n * @private\r\n */\r\n this.pageLength = null;\r\n\r\n /**\r\n * Current column sorting\r\n * @type {Object}\r\n * @private\r\n */\r\n this.sort = null;\r\n\r\n /**\r\n * Current hidden columns\r\n * @type {Object}\r\n * @private\r\n */\r\n this.hiddenCols = null;\r\n\r\n /**\r\n * Filters row visibility\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.filtersVisibility = null;\r\n\r\n /**\r\n * State object\r\n * @type {Object}\r\n * @private\r\n */\r\n this.state = {};\r\n\r\n /**\r\n * Prefix for column ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxCol = 'col_';\r\n\r\n /**\r\n * Prefix for page number ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.pageNbKey = 'page';\r\n\r\n /**\r\n * Prefix for page length ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.pageLengthKey = 'page_length';\r\n\r\n /**\r\n * Prefix for filters visibility ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.filtersVisKey = 'filters_visibility';\r\n }\r\n\r\n /**\r\n * Initializes State instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.on(['after-filtering'], () => this.update());\r\n this.emitter.on(['after-page-change', 'after-clearing-filters'],\r\n (tf, pageNb) => this.updatePage(pageNb));\r\n this.emitter.on(['after-page-length-change'],\r\n (tf, pageLength) => this.updatePageLength(pageLength));\r\n this.emitter.on(['column-sorted'],\r\n (tf, index, descending) => this.updateSort(index, descending));\r\n this.emitter.on(['sort-initialized'], () => this._syncSort());\r\n this.emitter.on(['columns-visibility-initialized'],\r\n () => this._syncColsVisibility());\r\n this.emitter.on(['column-shown', 'column-hidden'], (tf, feature,\r\n colIndex, hiddenCols) => this.updateColsVisibility(hiddenCols));\r\n this.emitter.on(['filters-visibility-initialized'],\r\n () => this._syncFiltersVisibility());\r\n this.emitter.on(['filters-toggled'],\r\n (tf, extension, visible) => this.updateFiltersVisibility(visible));\r\n\r\n if (this.enableHash) {\r\n this.hash = new Hash(this);\r\n this.hash.init();\r\n }\r\n if (this.enableStorage) {\r\n this.storage = new Storage(this);\r\n this.storage.init();\r\n }\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n\r\n /**\r\n * Update state object based on current features state\r\n */\r\n update() {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n if (this.persistFilters) {\r\n let filterValues = tf.getFiltersValue();\r\n\r\n filterValues.forEach((val, idx) => {\r\n let key = `${this.prfxCol}${idx}`;\r\n\r\n if (isString(val) && isEmpty(val)) {\r\n if (state.hasOwnProperty(key)) {\r\n state[key].flt = undefined;\r\n }\r\n } else {\r\n state[key] = state[key] || {};\r\n state[key].flt = val;\r\n }\r\n });\r\n }\r\n\r\n if (this.persistPageNumber) {\r\n if (isNull(this.pageNb)) {\r\n state[this.pageNbKey] = undefined;\r\n } else {\r\n state[this.pageNbKey] = this.pageNb;\r\n }\r\n }\r\n\r\n if (this.persistPageLength) {\r\n if (isNull(this.pageLength)) {\r\n state[this.pageLengthKey] = undefined;\r\n } else {\r\n state[this.pageLengthKey] = this.pageLength;\r\n }\r\n }\r\n\r\n if (this.persistSort) {\r\n if (!isNull(this.sort)) {\r\n // Remove previuosly sorted column\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1 && state[key]) {\r\n state[key].sort = undefined;\r\n }\r\n });\r\n\r\n let key = `${this.prfxCol}${this.sort.column}`;\r\n state[key] = state[key] || {};\r\n state[key].sort = { descending: this.sort.descending };\r\n }\r\n }\r\n\r\n if (this.persistColsVisibility) {\r\n if (!isNull(this.hiddenCols)) {\r\n // Clear previuosly hidden columns\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1 && state[key]) {\r\n state[key].hidden = undefined;\r\n }\r\n });\r\n\r\n this.hiddenCols.forEach((colIdx) => {\r\n let key = `${this.prfxCol}${colIdx}`;\r\n state[key] = state[key] || {};\r\n state[key].hidden = true;\r\n });\r\n }\r\n }\r\n\r\n if (this.persistFiltersVisibility) {\r\n if (isNull(this.filtersVisibility)) {\r\n state[this.filtersVisKey] = undefined;\r\n } else {\r\n state[this.filtersVisKey] = this.filtersVisibility;\r\n }\r\n }\r\n\r\n this.emitter.emit('state-changed', tf, state);\r\n }\r\n\r\n /**\r\n * Refresh page number field on page number changes\r\n *\r\n * @param {Number} pageNb Current page number\r\n */\r\n updatePage(pageNb) {\r\n this.pageNb = pageNb;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh page length field on page length changes\r\n *\r\n * @param {Number} pageLength Current page length value\r\n */\r\n updatePageLength(pageLength) {\r\n this.pageLength = pageLength;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh column sorting information on sort changes\r\n *\r\n * @param index {Number} Column index\r\n * @param {Boolean} descending Descending manner\r\n */\r\n updateSort(index, descending) {\r\n this.sort = {\r\n column: index,\r\n descending: descending\r\n };\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh hidden columns information on columns visibility changes\r\n *\r\n * @param {Array} hiddenCols Columns indexes\r\n */\r\n updateColsVisibility(hiddenCols) {\r\n this.hiddenCols = hiddenCols;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh filters visibility on filters visibility change\r\n *\r\n * @param {Boolean} visible Visibility flad\r\n */\r\n updateFiltersVisibility(visible) {\r\n this.filtersVisibility = visible;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Override state field\r\n *\r\n * @param state State object\r\n */\r\n override(state) {\r\n this.state = state;\r\n this.emitter.emit('state-changed', this.tf, state);\r\n }\r\n\r\n /**\r\n * Sync stored features state\r\n */\r\n sync() {\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n this._syncFilters();\r\n\r\n if (this.persistPageNumber) {\r\n let pageNumber = state[this.pageNbKey];\r\n this.emitter.emit('change-page', tf, pageNumber);\r\n }\r\n\r\n if (this.persistPageLength) {\r\n let pageLength = state[this.pageLengthKey];\r\n this.emitter.emit('change-page-results', tf, pageLength);\r\n }\r\n\r\n this._syncSort();\r\n this._syncColsVisibility();\r\n this._syncFiltersVisibility();\r\n }\r\n\r\n /**\r\n * Override current state with passed one and sync features\r\n *\r\n * @param {Object} state State object\r\n */\r\n overrideAndSync(state) {\r\n // To prevent state to react to features changes, state is temporarily\r\n // disabled\r\n this.disable();\r\n // State is overriden with passed state object\r\n this.override(state);\r\n // New hash state is applied to features\r\n this.sync();\r\n // State is re-enabled\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Sync filters with stored values and filter table\r\n *\r\n * @private\r\n */\r\n _syncFilters() {\r\n if (!this.persistFilters) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n // clear all filters\r\n // TODO: use tf.clearFilters() once it allows to not filter the table\r\n tf.eachCol((colIdx) => tf.setFilterValue(colIdx, ''));\r\n\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1) {\r\n let colIdx = parseInt(key.replace(this.prfxCol, ''), 10);\r\n let val = state[key].flt;\r\n tf.setFilterValue(colIdx, val);\r\n }\r\n });\r\n\r\n tf.filter();\r\n }\r\n\r\n /**\r\n * Sync sorted column with stored sorting information and sort table\r\n *\r\n * @private\r\n */\r\n _syncSort() {\r\n if (!this.persistSort) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1) {\r\n let colIdx = parseInt(key.replace(this.prfxCol, ''), 10);\r\n if (!isUndef(state[key].sort)) {\r\n let sort = state[key].sort;\r\n this.emitter.emit('sort', tf, colIdx, sort.descending);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Sync hidden columns with stored information\r\n *\r\n * @private\r\n */\r\n _syncColsVisibility() {\r\n if (!this.persistColsVisibility) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n let hiddenCols = [];\r\n\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1) {\r\n let colIdx = parseInt(key.replace(this.prfxCol, ''), 10);\r\n if (!isUndef(state[key].hidden)) {\r\n hiddenCols.push(colIdx);\r\n }\r\n }\r\n });\r\n\r\n hiddenCols.forEach((colIdx) => {\r\n this.emitter.emit('hide-column', tf, colIdx);\r\n });\r\n }\r\n\r\n /**\r\n * Sync filters visibility with stored information\r\n *\r\n * @private\r\n */\r\n _syncFiltersVisibility() {\r\n if (!this.persistFiltersVisibility) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n let filtersVisibility = state[this.filtersVisKey];\r\n\r\n this.filtersVisibility = filtersVisibility;\r\n this.emitter.emit('show-filters', tf, filtersVisibility);\r\n }\r\n\r\n /**\r\n * Destroy State instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.state = {};\r\n\r\n this.emitter.off(['after-filtering'], () => this.update());\r\n this.emitter.off(['after-page-change', 'after-clearing-filters'],\r\n (tf, pageNb) => this.updatePage(pageNb));\r\n this.emitter.off(['after-page-length-change'],\r\n (tf, index) => this.updatePageLength(index));\r\n this.emitter.off(['column-sorted'],\r\n (tf, index, descending) => this.updateSort(index, descending));\r\n this.emitter.off(['sort-initialized'], () => this._syncSort());\r\n this.emitter.off(['columns-visibility-initialized'],\r\n () => this._syncColsVisibility());\r\n this.emitter.off(['column-shown', 'column-hidden'], (tf, feature,\r\n colIndex, hiddenCols) => this.updateColsVisibility(hiddenCols));\r\n this.emitter.off(['filters-visibility-initialized'],\r\n () => this._syncFiltersVisibility());\r\n this.emitter.off(['filters-toggled'],\r\n (tf, extension, visible) => this.updateFiltersVisibility(visible));\r\n\r\n if (this.enableHash) {\r\n this.hash.destroy();\r\n this.hash = null;\r\n }\r\n\r\n if (this.enableStorage) {\r\n this.storage.destroy();\r\n this.storage = null;\r\n }\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {addEvt, targetEvt, removeEvt} from '../event';\r\nimport {NONE} from '../const';\r\nimport {root} from '../root';\r\nimport {isEmpty, isNull} from '../types';\r\nimport {defaultsStr} from '../settings';\r\nimport {RIGHT} from './toolbar';\r\n\r\nconst WIKI_URL = 'https://github.com/koalyptus/TableFilter/wiki/' +\r\n '4.-Filter-operators';\r\nconst WEBSITE_URL = 'https://www.tablefilter.com/';\r\n\r\n/**\r\n * Help UI component\r\n */\r\nexport class Help extends Feature {\r\n\r\n /**\r\n * Creates an instance of Help\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'help');\r\n\r\n let f = this.config.help_instructions || {};\r\n\r\n /**\r\n * ID of main custom container element\r\n * @type {String}\r\n */\r\n this.tgtId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * ID of custom container element for instructions\r\n * @type {String}\r\n */\r\n this.contTgtId = defaultsStr(f.container_target_id, null);\r\n\r\n /**\r\n * Instructions text (accepts HTML)\r\n * @type {String}\r\n */\r\n this.instrText = !isEmpty(f.text) ? f.text :\r\n 'Use the filters above each column to filter and limit table ' +\r\n 'data. Advanced searches can be performed by using the following ' +\r\n 'operators:
<, <=, >, ' +\r\n '>=, =, *, !, {, }, ' +\r\n '||,&&, [empty], [nonempty], ' +\r\n 'rgx:
' +\r\n 'Learn more
';\r\n\r\n /**\r\n * Instructions HTML\r\n * @type {String}\r\n */\r\n this.instrHtml = defaultsStr(f.html, null);\r\n\r\n /**\r\n * Help button text ('?')\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, '?');\r\n\r\n /**\r\n * Custom help button 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 help button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'helpBtn');\r\n\r\n /**\r\n * Css class for help container element\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.container_css_class, 'helpCont');\r\n\r\n /**\r\n * Button DOM element\r\n * @type {DOMElement}\r\n */\r\n this.btn = null;\r\n\r\n /**\r\n * Help container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.cont = null;\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 * Default HTML appended to instructions text\r\n * @type {String}\r\n */\r\n this.defaultHtml = '

TableFilter ' +\r\n 'v' + tf.version + '

' + '' + WEBSITE_URL + '' +\r\n '
©2015-' + tf.year + ' Max Guglielmi' +\r\n '
' +\r\n 'Close
';\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 this.emitter.on(['init-help'], () => this.init());\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.cont && targetElm !== this.btn) {\r\n targetElm = targetElm.parentNode;\r\n }\r\n\r\n if (targetElm !== this.cont && targetElm !== this.btn) {\r\n this.toggle();\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Initialise Help instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.tgtId));\r\n\r\n let tf = this.tf;\r\n\r\n let btn = createElm('span');\r\n let cont = createElm('div');\r\n\r\n this.boundMouseup = this.onMouseup.bind(this);\r\n\r\n //help button is added to defined element\r\n let targetEl = !this.tgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.tgtId);\r\n targetEl.appendChild(btn);\r\n\r\n let divContainer = !this.contTgtId ? btn : elm(this.contTgtId);\r\n\r\n if (!this.btnHtml) {\r\n divContainer.appendChild(cont);\r\n let helplink = createElm('a', ['href', 'javascript:void(0);']);\r\n helplink.className = this.btnCssClass;\r\n helplink.appendChild(createText(this.btnText));\r\n btn.appendChild(helplink);\r\n addEvt(helplink, 'click', () => this.toggle());\r\n } else {\r\n btn.innerHTML = this.btnHtml;\r\n let helpEl = btn.firstChild;\r\n addEvt(helpEl, 'click', () => this.toggle());\r\n divContainer.appendChild(cont);\r\n }\r\n\r\n if (!this.instrHtml) {\r\n cont.innerHTML = this.instrText;\r\n cont.className = this.contCssClass;\r\n } else {\r\n if (this.contTgtId) {\r\n divContainer.appendChild(cont);\r\n }\r\n cont.innerHTML = this.instrHtml;\r\n if (!this.contTgtId) {\r\n cont.className = this.contCssClass;\r\n }\r\n }\r\n cont.innerHTML += this.defaultHtml;\r\n addEvt(cont, 'click', () => this.toggle());\r\n\r\n this.cont = cont;\r\n this.btn = btn;\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Toggle help pop-up\r\n */\r\n toggle() {\r\n // check only if explicitily disabled as in this case undefined\r\n // signifies the help feature is enabled by default\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n // ensure mouseup event handler is removed\r\n removeEvt(root, 'mouseup', this.boundMouseup);\r\n\r\n let divDisplay = this.cont.style.display;\r\n if (divDisplay === '' || divDisplay === NONE) {\r\n this.cont.style.display = 'inline';\r\n addEvt(root, 'mouseup', this.boundMouseup);\r\n } else {\r\n this.cont.style.display = NONE;\r\n }\r\n }\r\n\r\n /**\r\n * Remove help UI\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n removeElm(this.btn);\r\n this.btn = null;\r\n\r\n removeElm(this.cont);\r\n this.cont = null;\r\n\r\n this.boundMouseup = null;\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {Date as SugarDate} from 'sugar-date';\r\nimport 'sugar-date/locales';\r\nimport {Feature} from '../feature';\r\nimport {isObj, isArray} from '../types';\r\nimport {DATE} from '../const';\r\nimport {root} from '../root';\r\n\r\n/**\r\n * Wrapper for Sugar Date module providing datetime helpers and locales\r\n * @export\r\n * @class DateType\r\n */\r\nexport class DateType extends Feature {\r\n\r\n /**\r\n * Creates an instance of DateType\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'dateType');\r\n\r\n /**\r\n * Global locale\r\n * @type {String}\r\n */\r\n this.locale = tf.locale;\r\n\r\n /**\r\n * Sugar Date instance\r\n * @type {Object}\r\n */\r\n this.datetime = SugarDate;\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initialize DateType instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n // Set global locale\r\n this.datetime.setLocale(this.locale);\r\n\r\n // Add formats from column types configuration if any\r\n this.addConfigFormats(this.tf.colTypes);\r\n\r\n this.emitter.on(\r\n ['add-date-type-formats'],\r\n (tf, types) => this.addConfigFormats(types)\r\n );\r\n\r\n // Broadcast date-type initialization\r\n this.emitter.emit('date-type-initialized', this.tf, this);\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Parse a string representation of a date for a specified locale and return\r\n * a date object\r\n * @param {String} dateStr String representation of a date\r\n * @param {String} localeCode Locale code (ie 'en-us')\r\n * @returns {Date}\r\n */\r\n parse(dateStr, localeCode) {\r\n return this.datetime.create(dateStr, localeCode);\r\n }\r\n\r\n /**\r\n * Check string representation of a date for a specified locale is valid\r\n * @param {any} dateStr String representation of a date\r\n * @param {any} localeCode Locale code (ie 'en-us')\r\n * @returns {Boolean}\r\n */\r\n isValid(dateStr, localeCode) {\r\n return this.datetime.isValid(this.parse(dateStr, localeCode));\r\n }\r\n\r\n /**\r\n * Return the type object of a specified column as per configuration or\r\n * passed collection\r\n * @param {Number} colIndex Column index\r\n * @param {Array} types Collection of column types, optional\r\n * @returns {Object}\r\n */\r\n getOptions(colIndex, types) {\r\n types = types || this.tf.colTypes;\r\n let colType = types[colIndex];\r\n return isObj(colType) ? colType : {};\r\n }\r\n\r\n /**\r\n * Return the locale code for supplied column index as per configuration\r\n * or global setting\r\n * @param {Number} colIndex Column index\r\n * @returns {String} Locale code (ie: 'en-us')\r\n */\r\n getLocale(colIndex) {\r\n return this.getOptions(colIndex).locale || this.locale;\r\n }\r\n\r\n /**\r\n * Add date time format(s) to a locale as specified by the passed\r\n * collection of column types, ie:\r\n * [\r\n * 'string',\r\n * 'number',\r\n * { type: 'date', locale: 'en', format: ['{dd}/{MM}/{yyyy}']}\r\n * ]\r\n *\r\n * @param {Array} [types=[]] Collection of column types\r\n */\r\n addConfigFormats(types=[]) {\r\n types.forEach((type, idx) => {\r\n let options = this.getOptions(idx, types);\r\n if (options.type === DATE && options.hasOwnProperty('format')) {\r\n let locale = this.datetime.getLocale(\r\n options.locale || this.locale\r\n );\r\n let formats = isArray(options.format) ?\r\n options.format : [options.format];\r\n\r\n // Sugar date module throws exceptions with locale.addFormat\r\n try {\r\n formats.forEach((format) => {\r\n locale.addFormat(format);\r\n });\r\n } catch (ex) {\r\n root.console.error(ex);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Remove DateType instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n // TODO: remove added formats\r\n\r\n this.emitter.off(\r\n ['add-date-type-formats'],\r\n (tf, types) => this.addConfigFormats(types)\r\n );\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {BaseDropdown} from './baseDropdown';\r\nimport {createElm, createOpt, elm} from '../dom';\r\nimport {has} from '../array';\r\nimport {matchCase} from '../string';\r\nimport {addEvt, targetEvt} from '../event';\r\nimport {SELECT, MULTIPLE, NONE} from '../const';\r\nimport {defaultsStr, defaultsBool} from '../settings';\r\n\r\n/**\r\n * Dropdown filter UI component\r\n * @export\r\n * @class Dropdown\r\n * @extends {BaseDropdown}\r\n */\r\nexport class Dropdown extends BaseDropdown {\r\n\r\n /**\r\n * Creates an instance of Dropdown\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'dropdown');\r\n\r\n // Configuration object\r\n let f = this.config;\r\n\r\n /**\r\n * Enable the reset filter option as first item\r\n * @type {Boolean}\r\n */\r\n this.enableSlcResetFilter =\r\n defaultsBool(f.enable_slc_reset_filter, true);\r\n\r\n /**\r\n * Non empty option text\r\n * @type {String}\r\n */\r\n this.nonEmptyText = defaultsStr(f.non_empty_text, '(Non empty)');\r\n\r\n /**\r\n * Tooltip text appearing on multiple select\r\n * @type {String}\r\n */\r\n this.multipleSlcTooltip = defaultsStr(f.multiple_slc_tooltip,\r\n 'Use Ctrl/Cmd key for multiple selections');\r\n }\r\n\r\n\r\n /**\r\n * Drop-down filter focus event handler\r\n * @param {Event} e DOM Event\r\n * @private\r\n */\r\n onSlcFocus(e) {\r\n let elm = targetEvt(e);\r\n let tf = this.tf;\r\n // select is populated when element has focus\r\n if (tf.loadFltOnDemand && elm.getAttribute('filled') === '0') {\r\n let ct = elm.getAttribute('ct');\r\n this.build(ct);\r\n }\r\n this.emitter.emit('filter-focus', tf, elm);\r\n }\r\n\r\n /**\r\n * Drop-down filter change event handler\r\n * @private\r\n */\r\n onSlcChange() {\r\n if (this.tf.onSlcChange) {\r\n this.tf.filter();\r\n }\r\n }\r\n\r\n /**\r\n * Refresh all drop-down filters\r\n */\r\n refreshAll() {\r\n let selectFlts = this.tf.getFiltersByType(SELECT, true);\r\n let multipleFlts = this.tf.getFiltersByType(MULTIPLE, true);\r\n let colIdxs = selectFlts.concat(multipleFlts);\r\n this.refreshFilters(colIdxs);\r\n }\r\n\r\n /**\r\n * Initialize drop-down filter\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isExternal External filter flag\r\n * @param {DOMElement} container Dom element containing the filter\r\n */\r\n init(colIndex, isExternal, container) {\r\n let tf = this.tf;\r\n let col = tf.getFilterType(colIndex);\r\n let externalFltTgtId = isExternal ?\r\n tf.externalFltIds[colIndex] : null;\r\n\r\n let slc = createElm(SELECT,\r\n ['id', tf.buildFilterId(colIndex)],\r\n ['ct', colIndex], ['filled', '0']\r\n );\r\n\r\n if (col === MULTIPLE) {\r\n slc.multiple = MULTIPLE;\r\n slc.title = this.multipleSlcTooltip;\r\n }\r\n slc.className = col.toLowerCase() === SELECT ?\r\n tf.fltCssClass : tf.fltMultiCssClass;\r\n\r\n //filter is appended in container element\r\n if (externalFltTgtId) {\r\n elm(externalFltTgtId).appendChild(slc);\r\n } else {\r\n container.appendChild(slc);\r\n }\r\n\r\n tf.fltIds.push(slc.id);\r\n\r\n if (!tf.loadFltOnDemand) {\r\n this.build(colIndex);\r\n } else {\r\n //1st option is created here since build isn't invoked\r\n let opt0 = createOpt(tf.getClearFilterText(colIndex), '');\r\n slc.appendChild(opt0);\r\n }\r\n\r\n addEvt(slc, 'change', () => this.onSlcChange());\r\n addEvt(slc, 'focus', (e) => this.onSlcFocus(e));\r\n\r\n this.emitter.on(\r\n ['build-select-filter'],\r\n (tf, colIndex, isLinked, isExternal) =>\r\n this.build(colIndex, isLinked, isExternal)\r\n );\r\n this.emitter.on(\r\n ['select-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n this.emitter.on(['rows-changed'], () => this.refreshAll());\r\n\r\n this.emitter.on(['after-filtering'], () => this.linkFilters());\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Build drop-down filter UI\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isLinked Enable linked filters behaviour\r\n */\r\n build(colIndex, isLinked = false) {\r\n let tf = this.tf;\r\n colIndex = Number(colIndex);\r\n\r\n this.emitter.emit('before-populating-filter', tf, colIndex);\r\n\r\n /** @inherited */\r\n this.opts = [];\r\n /** @inherited */\r\n this.optsTxt = [];\r\n\r\n let slc = tf.getFilterElement(colIndex);\r\n\r\n //custom select test\r\n /** @inherited */\r\n this.isCustom = tf.isCustomOptions(colIndex);\r\n\r\n //Retrieves custom values\r\n if (this.isCustom) {\r\n let customValues = tf.getCustomOptions(colIndex);\r\n this.opts = customValues[0];\r\n this.optsTxt = customValues[1];\r\n }\r\n\r\n //custom selects text\r\n let activeIdx;\r\n let activeFilterId = tf.getActiveFilterId();\r\n if (isLinked && activeFilterId) {\r\n activeIdx = tf.getColumnIndexFromFilterId(activeFilterId);\r\n }\r\n\r\n let excludedOpts = null,\r\n filteredDataCol = null;\r\n if (isLinked && tf.disableExcludedOptions) {\r\n excludedOpts = [];\r\n filteredDataCol = [];\r\n }\r\n\r\n let eachRow = tf.eachRow();\r\n eachRow(\r\n (row) => {\r\n let cellValue = tf.getCellValue(row.cells[colIndex]);\r\n //Vary Peter's patch\r\n let cellString = matchCase(cellValue, tf.caseSensitive);\r\n\r\n // checks if celldata is already in array\r\n if (!has(this.opts, cellString, tf.caseSensitive)) {\r\n this.opts.push(cellValue);\r\n }\r\n\r\n if (isLinked && tf.disableExcludedOptions) {\r\n let filteredCol = filteredDataCol[colIndex];\r\n if (!filteredCol) {\r\n filteredCol = tf.getVisibleColumnValues(colIndex);\r\n }\r\n if (!has(filteredCol, cellString, tf.caseSensitive) &&\r\n !has(excludedOpts, cellString, tf.caseSensitive)) {\r\n excludedOpts.push(cellValue);\r\n }\r\n }\r\n },\r\n // continue conditions function\r\n (row, k) => {\r\n // excluded rows don't need to appear on selects as always valid\r\n if (tf.excludeRows.indexOf(k) !== -1) {\r\n return true;\r\n }\r\n\r\n // checks if row has expected number of cells\r\n if (row.cells.length !== tf.nbCells || this.isCustom) {\r\n return true;\r\n }\r\n\r\n if (isLinked && !this.isValidLinkedValue(k, activeIdx)) {\r\n return true;\r\n }\r\n }\r\n );\r\n\r\n //sort options\r\n this.opts = this.sortOptions(colIndex, this.opts);\r\n if (excludedOpts) {\r\n excludedOpts = this.sortOptions(colIndex, excludedOpts);\r\n }\r\n\r\n //populates drop-down\r\n this.addOptions(colIndex, slc, isLinked, excludedOpts);\r\n\r\n this.emitter.emit('after-populating-filter', tf, colIndex, slc);\r\n }\r\n\r\n /**\r\n * Add drop-down options\r\n * @param {Number} colIndex Column index\r\n * @param {Object} slc Select Dom element\r\n * @param {Boolean} isLinked Enable linked refresh behaviour\r\n * @param {Array} excludedOpts Array of excluded options\r\n */\r\n addOptions(colIndex, slc, isLinked, excludedOpts) {\r\n let tf = this.tf,\r\n slcValue = slc.value;\r\n\r\n slc.innerHTML = '';\r\n slc = this.addFirstOption(slc);\r\n\r\n for (let y = 0; y < this.opts.length; y++) {\r\n if (this.opts[y] === '') {\r\n continue;\r\n }\r\n let val = this.opts[y]; //option value\r\n let lbl = this.isCustom ? this.optsTxt[y] : val; //option text\r\n let isDisabled = false;\r\n if (isLinked && tf.disableExcludedOptions &&\r\n has(excludedOpts, matchCase(val, tf.caseSensitive),\r\n tf.caseSensitive)) {\r\n isDisabled = true;\r\n }\r\n\r\n let opt;\r\n //fill select on demand\r\n if (tf.loadFltOnDemand && slcValue === this.opts[y] &&\r\n tf.getFilterType(colIndex) === SELECT) {\r\n opt = createOpt(lbl, val, true);\r\n } else {\r\n opt = createOpt(lbl, val, false);\r\n }\r\n if (isDisabled) {\r\n opt.disabled = true;\r\n }\r\n slc.appendChild(opt);\r\n }// for y\r\n\r\n slc.setAttribute('filled', '1');\r\n }\r\n\r\n /**\r\n * Add drop-down header option\r\n * @param {Object} slc Select DOM element\r\n */\r\n addFirstOption(slc) {\r\n let tf = this.tf;\r\n let colIdx = tf.getColumnIndexFromFilterId(slc.id);\r\n let opt0 = createOpt((!this.enableSlcResetFilter ?\r\n '' : tf.getClearFilterText(colIdx)), '');\r\n if (!this.enableSlcResetFilter) {\r\n opt0.style.display = NONE;\r\n }\r\n slc.appendChild(opt0);\r\n if (tf.enableEmptyOption) {\r\n let opt1 = createOpt(tf.emptyText, tf.emOperator);\r\n slc.appendChild(opt1);\r\n }\r\n if (tf.enableNonEmptyOption) {\r\n let opt2 = createOpt(tf.nonEmptyText, tf.nmOperator);\r\n slc.appendChild(opt2);\r\n }\r\n return slc;\r\n }\r\n\r\n /**\r\n * Select filter options programmatically\r\n * @param {Number} colIndex Column index\r\n * @param {Array} values Array of option values to select\r\n */\r\n selectOptions(colIndex, values = []) {\r\n let tf = this.tf;\r\n if (values.length === 0) {\r\n return;\r\n }\r\n let slc = tf.getFilterElement(colIndex);\r\n [].forEach.call(slc.options, (option) => {\r\n // Empty value means clear all selections and first option is the\r\n // clear all option\r\n if (values[0] === '' || option.value === '') {\r\n option.selected = false;\r\n }\r\n\r\n if (option.value !== '' && has(values, option.value, true)) {\r\n option.selected = true;\r\n }//if\r\n });\r\n }\r\n\r\n /**\r\n * Get filter values for a given column index\r\n * @param {Number} colIndex Column index\r\n * @returns {Array} values Array of selected values\r\n */\r\n getValues(colIndex) {\r\n let tf = this.tf;\r\n let slc = tf.getFilterElement(colIndex);\r\n let values = [];\r\n\r\n // IE >= 9 does not support the selectedOptions property :(\r\n if (slc.selectedOptions) {\r\n [].forEach.call(slc.selectedOptions,\r\n option => values.push(option.value));\r\n } else {\r\n [].forEach.call(slc.options, (option) => {\r\n if (option.selected) {\r\n values.push(option.value);\r\n }\r\n });\r\n }\r\n\r\n return values;\r\n }\r\n\r\n /**\r\n * Destroy Dropdown instance\r\n */\r\n destroy() {\r\n this.emitter.off(\r\n ['build-select-filter'],\r\n (colIndex, isLinked, isExternal) =>\r\n this.build(colIndex, isLinked, isExternal)\r\n );\r\n this.emitter.off(\r\n ['select-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n this.emitter.off(['rows-changed'], () => this.refreshAll());\r\n this.emitter.off(['after-filtering'], () => this.linkFilters());\r\n this.initialized = false;\r\n }\r\n}\r\n","/**\r\n * Event emitter class\r\n */\r\nexport class Emitter {\r\n /**\r\n * Creates an instance of Emitter.\r\n */\r\n constructor() {\r\n /**\r\n * Events object\r\n * @type {Object}\r\n */\r\n this.events = {};\r\n }\r\n\r\n /**\r\n * Subscribe to an event\r\n * @param {Array} evts Collection of event names\r\n * @param {Function} fn Function invoked when event is emitted\r\n */\r\n on(evts, fn) {\r\n evts.forEach((evt) => {\r\n this.events[evt] = this.events[evt] || [];\r\n this.events[evt].push(fn);\r\n });\r\n }\r\n\r\n /**\r\n * Unsubscribe to an event\r\n * @param {Array} evts Collection of event names\r\n * @param {Function} fn Function invoked when event is emitted\r\n */\r\n off(evts, fn) {\r\n evts.forEach((evt) => {\r\n if (evt in this.events) {\r\n this.events[evt].splice(this.events[evt].indexOf(fn), 1);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Emit an event\r\n * @param {String} evt Event name followed by any other argument passed to\r\n * the invoked function\r\n */\r\n emit(evt /*, args...*/) {\r\n if (evt in this.events) {\r\n for (let i = 0; i < this.events[evt].length; i++) {\r\n this.events[evt][i].apply(this, [].slice.call(arguments, 1));\r\n }\r\n }\r\n }\r\n}\r\n","'use strict';\n\nvar DURATION_REG = require('../var/DURATION_REG'),\n classChecks = require('../../common/var/classChecks'),\n simpleCapitalize = require('../../common/internal/simpleCapitalize');\n\nvar isNumber = classChecks.isNumber;\n\nfunction getDateIncrementObject(amt) {\n var match, val, unit;\n if (isNumber(amt)) {\n return [amt, 'Milliseconds'];\n }\n match = amt.match(DURATION_REG);\n val = +match[1] || 1;\n unit = simpleCapitalize(match[2].toLowerCase());\n if (unit.match(/hour|minute|second/i)) {\n unit += 's';\n } else if (unit === 'Year') {\n unit = 'FullYear';\n } else if (unit === 'Week') {\n unit = 'Date';\n val *= 7;\n } else if (unit === 'Day') {\n unit = 'Date';\n }\n return [val, unit];\n}\n\nmodule.exports = getDateIncrementObject;","'use strict';\n\nvar MULTIPLIERS = {\n 'Hours': 60 * 60 * 1000,\n 'Minutes': 60 * 1000,\n 'Seconds': 1000,\n 'Milliseconds': 1\n};\n\nmodule.exports = MULTIPLIERS;","'use strict';\n\nvar MULTIPLIERS = require('../var/MULTIPLIERS'),\n callDateSet = require('../../common/internal/callDateSet'),\n callDateGet = require('../../common/internal/callDateGet');\n\nfunction incrementDate(src, amount, unit) {\n var mult = MULTIPLIERS[unit], d;\n if (mult) {\n d = new Date(src.getTime() + (amount * mult));\n } else {\n d = new Date(src);\n callDateSet(d, unit, callDateGet(src, unit) + amount);\n }\n return d;\n}\n\nmodule.exports = incrementDate;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n namespaceAliases = require('../../common/var/namespaceAliases');\n\nvar isDate = classChecks.isDate,\n sugarDate = namespaceAliases.sugarDate;\n\nfunction getDateForRange(d) {\n if (isDate(d)) {\n return d;\n } else if (d == null) {\n return new Date();\n } else if (sugarDate.create) {\n return sugarDate.create(d);\n }\n return new Date(d);\n}\n\nmodule.exports = getDateForRange;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks');\n\nvar isDate = classChecks.isDate;\n\nfunction getRangeMemberPrimitiveValue(m) {\n if (m == null) return m;\n return isDate(m) ? m.getTime() : m.valueOf();\n}\n\nmodule.exports = getRangeMemberPrimitiveValue;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n getRangeMemberPrimitiveValue = require('./getRangeMemberPrimitiveValue');\n\nvar isDate = classChecks.isDate;\n\nfunction cloneRangeMember(m) {\n if (isDate(m)) {\n return new Date(m.getTime());\n } else {\n return getRangeMemberPrimitiveValue(m);\n }\n}\n\nmodule.exports = cloneRangeMember;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n dateFormat = require('./dateFormat'),\n classChecks = require('../../common/var/classChecks'),\n assertDateIsValid = require('./assertDateIsValid'),\n getAdjustedUnitForDate = require('./getAdjustedUnitForDate');\n\nvar isFunction = classChecks.isFunction,\n localeManager = LocaleHelpers.localeManager;\n\nfunction dateRelative(d, dRelative, arg1, arg2) {\n var adu, format, type, localeCode, fn;\n assertDateIsValid(d);\n if (isFunction(arg1)) {\n fn = arg1;\n } else {\n localeCode = arg1;\n fn = arg2;\n }\n adu = getAdjustedUnitForDate(d, dRelative);\n if (fn) {\n format = fn.apply(d, adu.concat(localeManager.get(localeCode)));\n if (format) {\n return dateFormat(d, format, localeCode);\n }\n }\n // Adjust up if time is in ms, as this doesn't\n // look very good for a standard relative date.\n if (adu[1] === 0) {\n adu[1] = 1;\n adu[0] = 1;\n }\n if (dRelative) {\n type = 'duration';\n } else if (adu[2] > 0) {\n type = 'future';\n } else {\n type = 'past';\n }\n return localeManager.get(localeCode).getRelativeFormat(adu, type);\n}\n\nmodule.exports = dateRelative;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n trim = require('../../common/internal/trim'),\n getMonth = require('./getMonth'),\n isDefined = require('../../common/internal/isDefined'),\n getNewDate = require('./getNewDate'),\n compareDay = require('./compareDay'),\n getWeekday = require('./getWeekday'),\n dateIsValid = require('./dateIsValid'),\n classChecks = require('../../common/var/classChecks'),\n compareDate = require('./compareDate');\n\nvar isString = classChecks.isString,\n English = LocaleHelpers.English;\n\nfunction fullCompareDate(date, d, margin) {\n var tmp;\n if (!dateIsValid(date)) return;\n if (isString(d)) {\n d = trim(d).toLowerCase();\n switch(true) {\n case d === 'future': return date.getTime() > getNewDate().getTime();\n case d === 'past': return date.getTime() < getNewDate().getTime();\n case d === 'today': return compareDay(date);\n case d === 'tomorrow': return compareDay(date, 1);\n case d === 'yesterday': return compareDay(date, -1);\n case d === 'weekday': return getWeekday(date) > 0 && getWeekday(date) < 6;\n case d === 'weekend': return getWeekday(date) === 0 || getWeekday(date) === 6;\n\n case (isDefined(tmp = English.weekdayMap[d])):\n return getWeekday(date) === tmp;\n case (isDefined(tmp = English.monthMap[d])):\n return getMonth(date) === tmp;\n }\n }\n return compareDate(date, d, margin);\n}\n\nmodule.exports = fullCompareDate;","'use strict';\n\nvar dateIsValid = require('./dateIsValid');\n\nfunction assertDateIsValid(d) {\n if (!dateIsValid(d)) {\n throw new TypeError('Date is not valid');\n }\n}\n\nmodule.exports = assertDateIsValid;","'use strict';\n\nvar _utc = require('../../common/var/_utc'),\n trunc = require('../../common/var/trunc'),\n tzOffset = require('./tzOffset'),\n padNumber = require('../../common/internal/padNumber'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar abs = mathAliases.abs;\n\nfunction getUTCOffset(d, iso) {\n var offset = _utc(d) ? 0 : tzOffset(d), hours, mins, colon;\n colon = iso === true ? ':' : '';\n if (!offset && iso) return 'Z';\n hours = padNumber(trunc(-offset / 60), 2, true);\n mins = padNumber(abs(offset % 60), 2);\n return hours + colon + mins;\n}\n\nmodule.exports = getUTCOffset;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getHours(d) {\n return callDateGet(d, 'Hours');\n}\n\nmodule.exports = getHours;","'use strict';\n\nvar CoreOutputFormats = {\n 'ISO8601': '{yyyy}-{MM}-{dd}T{HH}:{mm}:{ss}.{SSS}{Z}',\n 'RFC1123': '{Dow}, {dd} {Mon} {yyyy} {HH}:{mm}:{ss} {ZZ}',\n 'RFC1036': '{Weekday}, {dd}-{Mon}-{yy} {HH}:{mm}:{ss} {ZZ}'\n};\n\nmodule.exports = CoreOutputFormats;","'use strict';\n\nvar CoreOutputFormats = require('../var/CoreOutputFormats'),\n formattingTokens = require('../var/formattingTokens'),\n assertDateIsValid = require('./assertDateIsValid');\n\nvar dateFormatMatcher = formattingTokens.dateFormatMatcher;\n\nfunction dateFormat(d, format, localeCode) {\n assertDateIsValid(d);\n format = CoreOutputFormats[format] || format || '{long}';\n return dateFormatMatcher(format, d, localeCode);\n}\n\nmodule.exports = dateFormat;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n simpleClone = require('../../common/internal/simpleClone'),\n isObjectType = require('../../common/internal/isObjectType'),\n getDateParamsFromString = require('./getDateParamsFromString'),\n collectDateParamsFromArguments = require('./collectDateParamsFromArguments');\n\nvar isNumber = classChecks.isNumber,\n isString = classChecks.isString;\n\nfunction collectUpdateDateArguments(args, allowDuration) {\n var arg1 = args[0], arg2 = args[1], params, reset;\n if (allowDuration && isString(arg1)) {\n params = getDateParamsFromString(arg1);\n reset = arg2;\n } else if (isNumber(arg1) && isNumber(arg2)) {\n params = collectDateParamsFromArguments(args);\n } else {\n params = isObjectType(arg1) ? simpleClone(arg1) : arg1;\n reset = arg2;\n }\n return [params, reset];\n}\n\nmodule.exports = collectUpdateDateArguments;","'use strict';\n\nvar updateDate = require('./updateDate'),\n collectUpdateDateArguments = require('./collectUpdateDateArguments');\n\nfunction advanceDateWithArgs(d, args, dir) {\n args = collectUpdateDateArguments(args, true);\n return updateDate(d, args[0], args[1], dir);\n}\n\nmodule.exports = advanceDateWithArgs;","'use strict';\n\nvar MINUTES = require('../var/MINUTES'),\n DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n _utc = require('../../common/var/_utc'),\n tzOffset = require('./tzOffset'),\n cloneDate = require('./cloneDate'),\n isDefined = require('../../common/internal/isDefined'),\n advanceDate = require('./advanceDate'),\n dateIsValid = require('./dateIsValid'),\n moveToEndOfUnit = require('./moveToEndOfUnit'),\n getExtendedDate = require('./getExtendedDate'),\n moveToBeginningOfUnit = require('./moveToBeginningOfUnit');\n\nvar MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction compareDate(date, d, margin, localeCode, options) {\n var loMargin = 0, hiMargin = 0, timezoneShift, compareEdges, override, min, max, p, t;\n\n function getTimezoneShift() {\n // If there is any specificity in the date then we're implicitly not\n // checking absolute time, so ignore timezone shifts.\n if (p.set && p.set.specificity) {\n return 0;\n }\n return (tzOffset(p.date) - tzOffset(date)) * MINUTES;\n }\n\n function addSpecificUnit() {\n var unit = DateUnits[p.set.specificity];\n return advanceDate(cloneDate(p.date), unit.name, 1).getTime() - 1;\n }\n\n if (_utc(date)) {\n options = options || {};\n options.fromUTC = true;\n options.setUTC = true;\n }\n\n p = getExtendedDate(null, d, options, true);\n\n if (margin > 0) {\n loMargin = hiMargin = margin;\n override = true;\n }\n if (!dateIsValid(p.date)) return false;\n if (p.set && p.set.specificity) {\n if (isDefined(p.set.edge) || isDefined(p.set.shift)) {\n compareEdges = true;\n moveToBeginningOfUnit(p.date, p.set.specificity, localeCode);\n }\n if (compareEdges || p.set.specificity === MONTH_INDEX) {\n max = moveToEndOfUnit(cloneDate(p.date), p.set.specificity, localeCode).getTime();\n } else {\n max = addSpecificUnit();\n }\n if (!override && isDefined(p.set.sign) && p.set.specificity) {\n // If the time is relative, there can occasionally be an disparity between\n // the relative date and \"now\", which it is being compared to, so set an\n // extra margin to account for this.\n loMargin = 50;\n hiMargin = -50;\n }\n }\n t = date.getTime();\n min = p.date.getTime();\n max = max || min;\n timezoneShift = getTimezoneShift();\n // istanbul ignore if\n if (timezoneShift) {\n min -= timezoneShift;\n max -= timezoneShift;\n }\n return t >= (min - loMargin) && t <= (max + hiMargin);\n}\n\nmodule.exports = compareDate;","'use strict';\n\nvar setWeekday = require('./setWeekday'),\n getWeekday = require('./getWeekday'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar ceil = mathAliases.ceil;\n\nfunction moveToEndOfWeek(d, firstDayOfWeek) {\n var target = firstDayOfWeek - 1;\n setWeekday(d, ceil((getWeekday(d) - target) / 7) * 7 + target);\n return d;\n}\n\nmodule.exports = moveToEndOfWeek;","'use strict';\n\nvar getOwnKey = require('../../common/internal/getOwnKey');\n\nfunction getDateParamKey(params, key) {\n return getOwnKey(params, key) ||\n getOwnKey(params, key + 's') ||\n (key === 'day' && getOwnKey(params, 'date'));\n}\n\nmodule.exports = getDateParamKey;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n setDate = require('./setDate'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge'),\n moveToBeginningOfWeek = require('./moveToBeginningOfWeek');\n\nvar MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction moveToFirstDayOfWeekYear(d, firstDayOfWeek, firstDayOfWeekYear) {\n setUnitAndLowerToEdge(d, MONTH_INDEX);\n setDate(d, firstDayOfWeekYear);\n moveToBeginningOfWeek(d, firstDayOfWeek);\n}\n\nmodule.exports = moveToFirstDayOfWeekYear;","'use strict';\n\nvar ISODefaults = require('../var/ISODefaults'),\n getDate = require('./getDate'),\n setDate = require('./setDate'),\n setYear = require('./setYear'),\n getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n setMonth = require('./setMonth'),\n cloneDate = require('./cloneDate'),\n getWeekday = require('./getWeekday'),\n setWeekday = require('./setWeekday'),\n classChecks = require('../../common/var/classChecks'),\n moveToFirstDayOfWeekYear = require('./moveToFirstDayOfWeekYear');\n\nvar isNumber = classChecks.isNumber,\n ISO_FIRST_DAY_OF_WEEK = ISODefaults.ISO_FIRST_DAY_OF_WEEK,\n ISO_FIRST_DAY_OF_WEEK_YEAR = ISODefaults.ISO_FIRST_DAY_OF_WEEK_YEAR;\n\nfunction setISOWeekNumber(d, num) {\n if (isNumber(num)) {\n // Intentionally avoiding updateDate here to prevent circular dependencies.\n var isoWeek = cloneDate(d), dow = getWeekday(d);\n moveToFirstDayOfWeekYear(isoWeek, ISO_FIRST_DAY_OF_WEEK, ISO_FIRST_DAY_OF_WEEK_YEAR);\n setDate(isoWeek, getDate(isoWeek) + 7 * (num - 1));\n setYear(d, getYear(isoWeek));\n setMonth(d, getMonth(isoWeek));\n setDate(d, getDate(isoWeek));\n setWeekday(d, dow || 7);\n }\n return d.getTime();\n}\n\nmodule.exports = setISOWeekNumber;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n getLowerUnitIndex = require('./getLowerUnitIndex');\n\nfunction walkUnitDown(unitIndex, fn) {\n while (unitIndex >= 0) {\n if (fn(DateUnits[unitIndex], unitIndex) === false) {\n break;\n }\n unitIndex = getLowerUnitIndex(unitIndex);\n }\n}\n\nmodule.exports = walkUnitDown;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nvar HOURS_INDEX = DateUnitIndexes.HOURS_INDEX;\n\nfunction resetTime(d) {\n return setUnitAndLowerToEdge(d, HOURS_INDEX);\n}\n\nmodule.exports = resetTime;","'use strict';\n\nmodule.exports = 60 * 1000;","'use strict';\n\nvar mathAliases = require('../../common/var/mathAliases'),\n iterateOverDateUnits = require('./iterateOverDateUnits');\n\nvar abs = mathAliases.abs;\n\nfunction getAdjustedUnit(ms, fn) {\n var unitIndex = 0, value = 0;\n iterateOverDateUnits(function(unit, i) {\n value = abs(fn(unit));\n if (value >= 1) {\n unitIndex = i;\n return false;\n }\n });\n return [value, unitIndex, ms];\n}\n\nmodule.exports = getAdjustedUnit;","'use strict';\n\nvar mathAliases = require('../var/mathAliases');\n\nvar abs = mathAliases.abs,\n pow = mathAliases.pow,\n round = mathAliases.round;\n\nfunction withPrecision(val, precision, fn) {\n var multiplier = pow(10, abs(precision || 0));\n fn = fn || round;\n if (precision < 0) multiplier = 1 / multiplier;\n return fn(val * multiplier) / multiplier;\n}\n\nmodule.exports = withPrecision;","'use strict';\n\nmodule.exports = String.fromCharCode;","'use strict';\n\nvar getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n callDateGet = require('../../common/internal/callDateGet');\n\nfunction getDaysInMonth(d) {\n return 32 - callDateGet(new Date(getYear(d), getMonth(d), 32), 'Date');\n}\n\nmodule.exports = getDaysInMonth;","'use strict';\n\nfunction getRegNonCapturing(src, opt) {\n if (src.length > 1) {\n src = '(?:' + src + ')';\n }\n if (opt) {\n src += '?';\n }\n return src;\n}\n\nmodule.exports = getRegNonCapturing;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar classToString = coreUtilityAliases.classToString;\n\nfunction isClass(obj, className, str) {\n if (!str) {\n str = classToString(obj);\n }\n return str === '[object '+ className +']';\n}\n\nmodule.exports = isClass;","'use strict';\n\nfunction map(arr, fn) {\n // perf: Not using fixed array len here as it may be sparse.\n var result = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n if (i in arr) {\n result.push(fn(arr[i], i));\n }\n }\n return result;\n}\n\nmodule.exports = map;","'use strict';\n\nvar LocalizedParsingTokens = {\n 'year': {\n base: 'yyyy|ayy',\n requiresSuffix: true\n },\n 'month': {\n base: 'MM',\n requiresSuffix: true\n },\n 'date': {\n base: 'dd',\n requiresSuffix: true\n },\n 'hour': {\n base: 'hh',\n requiresSuffixOr: ':'\n },\n 'minute': {\n base: 'mm'\n },\n 'second': {\n base: 'ss'\n },\n 'num': {\n src: '\\\\d+',\n requiresNumerals: true\n }\n};\n\nmodule.exports = LocalizedParsingTokens;","'use strict';\n\nvar getEnglishVariant = require('../internal/getEnglishVariant');\n\nvar AmericanEnglishDefinition = getEnglishVariant({\n 'mdy': true,\n 'firstDayOfWeek': 0,\n 'firstDayOfWeekYear': 1,\n 'short': '{MM}/{dd}/{yyyy}',\n 'medium': '{Month} {d}, {yyyy}',\n 'long': '{Month} {d}, {yyyy} {time}',\n 'full': '{Weekday}, {Month} {d}, {yyyy} {time}',\n 'stamp': '{Dow} {Mon} {d} {yyyy} {time}',\n 'time': '{h}:{mm} {TT}'\n});\n\nmodule.exports = AmericanEnglishDefinition;","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n","import {addEvt, cancelEvt, stopEvt, targetEvt, isKeyPressed} from './event';\r\nimport {\r\n addClass, createElm, elm, getText, getFirstTextNode, removeClass, tag\r\n} from './dom';\r\nimport {contains, matchCase, rgxEsc, trim} from './string';\r\nimport {\r\n isArray, isEmpty, isFn, isNumber, isObj, isString, isUndef, EMPTY_FN,\r\n isBoolean\r\n} from './types';\r\nimport {parse as parseNb} from './number';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsFn,\r\n defaultsNb, defaultsArr\r\n} from './settings';\r\n\r\nimport {root} from './root';\r\nimport {Emitter} from './emitter';\r\nimport {Dropdown} from './modules/dropdown';\r\nimport {CheckList} from './modules/checkList';\r\n\r\nimport {\r\n INPUT, SELECT, MULTIPLE, CHECKLIST, NONE,\r\n ENTER_KEY, TAB_KEY, ESC_KEY, UP_ARROW_KEY, DOWN_ARROW_KEY,\r\n CELL_TAG, AUTO_FILTER_DELAY, NUMBER, DATE, FORMATTED_NUMBER,\r\n FEATURES\r\n} from './const';\r\n\r\nlet doc = root.document;\r\n\r\n/**\r\n * Makes HTML tables filterable and a bit more :)\r\n *\r\n * @export\r\n * @class TableFilter\r\n */\r\nexport class TableFilter {\r\n\r\n /**\r\n * Creates an instance of TableFilter\r\n * requires `table` or `id` arguments, `row` and `configuration` optional\r\n * @param {HTMLTableElement} table Table DOM element\r\n * @param {String} id Table id\r\n * @param {Number} row index indicating the 1st row\r\n * @param {Object} configuration object\r\n */\r\n constructor(...args) {\r\n /**\r\n * ID of current instance\r\n * @type {String}\r\n * @private\r\n */\r\n this.id = null;\r\n\r\n /**\r\n * Current version\r\n * @type {String}\r\n */\r\n this.version = '0.6.76';\r\n\r\n /**\r\n * Current year\r\n * @type {Number}\r\n * @private\r\n */\r\n this.year = new Date().getFullYear();\r\n\r\n /**\r\n * HTML Table DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.tbl = null;\r\n\r\n /**\r\n * Calculated row's index from which starts filtering once filters\r\n * are generated\r\n * @type {Number}\r\n */\r\n this.refRow = null;\r\n\r\n /**\r\n * Index of the headers row\r\n * @type {Number}\r\n * @private\r\n */\r\n this.headersRow = null;\r\n\r\n /**\r\n * Configuration object\r\n * @type {Object}\r\n * @private\r\n */\r\n this.cfg = {};\r\n\r\n /**\r\n * Number of rows that can be filtered\r\n * @type {Number}\r\n * @private\r\n */\r\n this.nbFilterableRows = 0;\r\n\r\n /**\r\n * Number of cells in the reference row\r\n * @type {Number}\r\n * @private\r\n */\r\n this.nbCells = null;\r\n\r\n /**\r\n * Has a configuration object\r\n * @type {Object}\r\n * @private\r\n */\r\n this.hasConfig = false;\r\n\r\n /** @private */\r\n this.initialized = false;\r\n\r\n let startRow;\r\n\r\n // TODO: use for-of\r\n args.forEach((arg) => {\r\n if (typeof arg === 'object' && arg.nodeName === 'TABLE') {\r\n this.tbl = arg;\r\n this.id = arg.id || `tf_${new Date().getTime()}_`;\r\n this.tbl.id = this.id;\r\n } else if (isString(arg)) {\r\n this.id = arg;\r\n this.tbl = elm(arg);\r\n } else if (isNumber(arg)) {\r\n startRow = arg;\r\n } else if (isObj(arg)) {\r\n this.cfg = arg;\r\n this.hasConfig = true;\r\n }\r\n });\r\n\r\n if (!this.tbl || this.tbl.nodeName !== 'TABLE') {\r\n throw new Error(`Could not instantiate TableFilter: HTML table\r\n DOM element not found.`);\r\n }\r\n\r\n if (this.getRowsNb(true) === 0) {\r\n throw new Error(`Could not instantiate TableFilter: HTML table\r\n requires at least 1 row.`);\r\n }\r\n\r\n // configuration object\r\n let f = this.cfg;\r\n\r\n /**\r\n * Event emitter instance\r\n * @type {Emitter}\r\n */\r\n this.emitter = new Emitter();\r\n\r\n // start row\r\n this.refRow = isUndef(startRow) ? 2 : (startRow + 1);\r\n\r\n /**\r\n * Collection of filter type by column\r\n * @type {Array}\r\n * @private\r\n */\r\n this.filterTypes = [].map.call(\r\n (this.dom().rows[this.refRow] || this.dom().rows[0]).cells,\r\n (cell, idx) => {\r\n let colType = this.cfg[`col_${idx}`];\r\n return !colType ? INPUT : colType.toLowerCase();\r\n });\r\n\r\n /**\r\n * Base path for static assets\r\n * @type {String}\r\n */\r\n this.basePath = defaultsStr(f.base_path, 'tablefilter/');\r\n\r\n /*** filters' grid properties ***/\r\n\r\n /**\r\n * Enable/disable filters\r\n * @type {Boolean}\r\n */\r\n this.fltGrid = defaultsBool(f.grid, true);\r\n\r\n /**\r\n * Enable/disable grid layout (fixed headers)\r\n * @type {Object|Boolean}\r\n */\r\n this.gridLayout = isObj(f.grid_layout) || Boolean(f.grid_layout);\r\n\r\n /**\r\n * Filters row index\r\n * @type {Number}\r\n */\r\n this.filtersRowIndex = defaultsNb(f.filters_row_index, 0);\r\n\r\n /**\r\n * Headers row index\r\n * @type {Number}\r\n */\r\n this.headersRow = defaultsNb(f.headers_row_index,\r\n (this.filtersRowIndex === 0 ? 1 : 0));\r\n\r\n /**\r\n * Define the type of cell containing a filter (td/th)\r\n * @type {String}\r\n */\r\n this.fltCellTag = defaultsStr(f.filters_cell_tag, CELL_TAG);\r\n\r\n /**\r\n * List of filters IDs\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltIds = [];\r\n\r\n /**\r\n * List of valid rows indexes (rows visible upon filtering)\r\n * @type {Array}\r\n * @private\r\n */\r\n this.validRowsIndex = [];\r\n\r\n /*** filters' grid appearance ***/\r\n /**\r\n * Path for stylesheets\r\n * @type {String}\r\n */\r\n this.stylePath = this.getStylePath();\r\n\r\n /**\r\n * Main stylesheet path\r\n * @type {String}\r\n */\r\n this.stylesheet = this.getStylesheetPath();\r\n\r\n /**\r\n * Main stylesheet ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.stylesheetId = this.id + '_style';\r\n\r\n /**\r\n * Css class for the filters row\r\n * @type {String}\r\n */\r\n this.fltsRowCssClass = defaultsStr(f.flts_row_css_class, 'fltrow');\r\n\r\n /**\r\n * Enable/disable icons (paging, reset button)\r\n * @type {Boolean}\r\n */\r\n this.enableIcons = defaultsBool(f.enable_icons, true);\r\n\r\n /**\r\n * Enable/disable alternating rows\r\n * @type {Boolean}\r\n */\r\n this.alternateRows = Boolean(f.alternate_rows);\r\n\r\n /**\r\n * Columns widths array\r\n * @type {Array}\r\n */\r\n this.colWidths = defaultsArr(f.col_widths, []);\r\n\r\n /**\r\n * Default column width when column widths are defined\r\n */\r\n this.defaultColWidth = defaultsNb(f.default_col_width, 100);\r\n\r\n /**\r\n * Css class for a filter element\r\n * @type {String}\r\n */\r\n this.fltCssClass = defaultsStr(f.flt_css_class, 'flt');\r\n\r\n /**\r\n * Css class for multiple select filters\r\n * @type {String}\r\n */\r\n this.fltMultiCssClass = defaultsStr(f.flt_multi_css_class, 'flt_multi');\r\n\r\n /**\r\n * Css class for small filter (when submit button is active)\r\n * @type {String}\r\n */\r\n this.fltSmallCssClass = defaultsStr(f.flt_small_css_class, 'flt_s');\r\n\r\n /**\r\n * Css class for single filter type\r\n * @type {String}\r\n */\r\n this.singleFltCssClass = defaultsStr((f.single_filter || {}).css_class,\r\n 'single_flt');\r\n\r\n /*** filters' grid behaviours ***/\r\n\r\n /**\r\n * Enable/disable enter key for input type filters\r\n * @type {Boolean}\r\n */\r\n this.enterKey = defaultsBool(f.enter_key, true);\r\n\r\n /**\r\n * Callback fired before filtering process starts\r\n * @type {Function}\r\n */\r\n this.onBeforeFilter = defaultsFn(f.on_before_filter, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filtering process is completed\r\n * @type {Function}\r\n */\r\n this.onAfterFilter = defaultsFn(f.on_after_filter, EMPTY_FN);\r\n\r\n /**\r\n * Enable/disable case sensitivity filtering\r\n * @type {Boolean}\r\n */\r\n this.caseSensitive = Boolean(f.case_sensitive);\r\n\r\n /**\r\n * Indicate whether exact match filtering is enabled on a per column\r\n * basis\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.hasExactMatchByCol = isArray(f.columns_exact_match);\r\n\r\n /**\r\n * Exact match filtering per column array\r\n * @type {Array}\r\n */\r\n this.exactMatchByCol = this.hasExactMatchByCol ?\r\n f.columns_exact_match : [];\r\n\r\n /**\r\n * Globally enable/disable exact match filtering\r\n * @type {Boolean}\r\n */\r\n this.exactMatch = Boolean(f.exact_match);\r\n\r\n /**\r\n * Ignore diacritics globally or on a column basis\r\n * @type {Boolean|Array}\r\n */\r\n this.ignoreDiacritics = f.ignore_diacritics;\r\n\r\n /**\r\n * Enable/disable linked filters filtering mode\r\n * @type {Boolean}\r\n */\r\n this.linkedFilters = Boolean(f.linked_filters);\r\n\r\n /**\r\n * Enable/disable readonly state for excluded options when\r\n * linked filters filtering mode is on\r\n * @type {Boolean}\r\n */\r\n this.disableExcludedOptions = Boolean(f.disable_excluded_options);\r\n\r\n /**\r\n * Active filter ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.activeFilterId = null;\r\n\r\n /**\r\n * Determine if there are excluded rows from filtering\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.hasExcludedRows = Boolean(isArray(f.exclude_rows) &&\r\n f.exclude_rows.length > 0);\r\n\r\n /**\r\n * List of row indexes to be excluded from filtering\r\n * @type {Array}\r\n */\r\n this.excludeRows = defaultsArr(f.exclude_rows, []);\r\n\r\n /**\r\n * List of containers IDs where external filters will be generated\r\n * @type {Array}\r\n */\r\n this.externalFltIds = defaultsArr(f.external_flt_ids, []);\r\n\r\n /**\r\n * Callback fired after filters are generated\r\n * @type {Function}\r\n */\r\n this.onFiltersLoaded = defaultsFn(f.on_filters_loaded, EMPTY_FN);\r\n\r\n /**\r\n * Enable/disable single filter mode\r\n * @type {Boolean|Object}\r\n */\r\n this.singleFlt = isObj(f.single_filter) ||\r\n Boolean(f.single_filter);\r\n\r\n /**\r\n * Specify columns to be excluded from single filter search, by default\r\n * searching in all columns:\r\n * single_filter: {\r\n * exclude_cols: [2, 7]\r\n * }\r\n */\r\n this.singleFltExcludeCols = isObj(f.single_filter) &&\r\n isArray(f.single_filter.exclude_cols) ?\r\n f.single_filter.exclude_cols : [];\r\n\r\n /**\r\n * Callback fired after a row is validated during filtering\r\n * @type {Function}\r\n */\r\n this.onRowValidated = defaultsFn(f.on_row_validated, EMPTY_FN);\r\n\r\n /**\r\n * Specify which column implements a custom cell parser to retrieve the\r\n * cell value:\r\n * cell_parser: {\r\n * cols: [0, 2],\r\n * parse: function(tf, cell, colIndex) {\r\n * // custom cell parser logic here\r\n * return cellValue;\r\n * }\r\n * }\r\n * @type {Object}\r\n */\r\n this.cellParser = isObj(f.cell_parser) && isFn(f.cell_parser.parse) &&\r\n isArray(f.cell_parser.cols) ?\r\n f.cell_parser : { cols: [], parse: EMPTY_FN };\r\n\r\n /**\r\n * Global watermark text for input filter type or watermark for each\r\n * filter if an array is supplied\r\n * @type {String|Array}\r\n */\r\n this.watermark = f.watermark || '';\r\n\r\n /**\r\n * Indicate whether watermark is on a per column basis\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isWatermarkArray = isArray(this.watermark);\r\n\r\n /**\r\n * Indicate whether help UI component is disabled\r\n * @type {Boolean}\r\n */\r\n this.help = isUndef(f.help_instructions) ? undefined :\r\n (isObj(f.help_instructions) || Boolean(f.help_instructions));\r\n\r\n /**\r\n * Indicate whether pop-up filters UI is enabled\r\n * @type {Boolean|Object}\r\n */\r\n this.popupFilters = isObj(f.popup_filters) || Boolean(f.popup_filters);\r\n\r\n /**\r\n * Indicate whether filtered (active) columns indicator is enabled\r\n * @type {Boolean}\r\n */\r\n this.markActiveColumns = isObj(f.mark_active_columns) ||\r\n Boolean(f.mark_active_columns);\r\n\r\n /*** select filter's customisation and behaviours ***/\r\n /**\r\n * Text for clear option in drop-down filter types (1st option)\r\n * @type {String|Array}\r\n */\r\n this.clearFilterText = defaultsStr(f.clear_filter_text, 'Clear');\r\n\r\n /**\r\n * Indicate whether empty option is enabled in drop-down filter types\r\n * @type {Boolean}\r\n */\r\n this.enableEmptyOption = Boolean(f.enable_empty_option);\r\n\r\n /**\r\n * Text for empty option in drop-down filter types\r\n * @type {String}\r\n */\r\n this.emptyText = defaultsStr(f.empty_text, '(Empty)');\r\n\r\n /**\r\n * Indicate whether non-empty option is enabled in drop-down filter\r\n * types\r\n * @type {Boolean}\r\n */\r\n this.enableNonEmptyOption = Boolean(f.enable_non_empty_option);\r\n\r\n /**\r\n * Text for non-empty option in drop-down filter types\r\n * @type {String}\r\n */\r\n this.nonEmptyText = defaultsStr(f.non_empty_text, '(Non empty)');\r\n\r\n /**\r\n * Indicate whether drop-down filter types filter the table by default\r\n * on change event\r\n * @type {Boolean}\r\n */\r\n this.onSlcChange = defaultsBool(f.on_change, true);\r\n\r\n /**\r\n * Make drop-down filter types options sorted in alpha-numeric manner\r\n * by default globally or on a column basis\r\n * @type {Boolean|Array}\r\n */\r\n this.sortSlc = isUndef(f.sort_select) ? true :\r\n isArray(f.sort_select) ? f.sort_select : Boolean(f.sort_select);\r\n\r\n /**\r\n * Indicate whether options in drop-down filter types are sorted in a\r\n * ascending numeric manner\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isSortNumAsc = Boolean(f.sort_num_asc);\r\n\r\n /**\r\n * List of columns implementing options sorting in a ascending numeric\r\n * manner\r\n * @type {Array}\r\n */\r\n this.sortNumAsc = this.isSortNumAsc ? f.sort_num_asc : [];\r\n\r\n /**\r\n * Indicate whether options in drop-down filter types are sorted in a\r\n * descending numeric manner\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isSortNumDesc = Boolean(f.sort_num_desc);\r\n\r\n /**\r\n * List of columns implementing options sorting in a descending numeric\r\n * manner\r\n * @type {Array}\r\n */\r\n this.sortNumDesc = this.isSortNumDesc ? f.sort_num_desc : [];\r\n\r\n /**\r\n * Indicate whether drop-down filter types are populated on demand at\r\n * first usage\r\n * @type {Boolean}\r\n */\r\n this.loadFltOnDemand = Boolean(f.load_filters_on_demand);\r\n\r\n /**\r\n * Indicate whether custom drop-down filter options are implemented\r\n * @type {Boolean}\r\n */\r\n this.hasCustomOptions = isObj(f.custom_options);\r\n\r\n /**\r\n * Custom options definition of a per column basis, ie:\r\n *\tcustom_options: {\r\n * cols:[0, 1],\r\n * texts: [\r\n * ['a0', 'b0', 'c0'],\r\n * ['a1', 'b1', 'c1']\r\n * ],\r\n * values: [\r\n * ['a0', 'b0', 'c0'],\r\n * ['a1', 'b1', 'c1']\r\n * ],\r\n * sorts: [false, true]\r\n * }\r\n *\r\n * @type {Object}\r\n */\r\n this.customOptions = f.custom_options;\r\n\r\n /*** Filter operators ***/\r\n /**\r\n * Regular expression operator for input filter. Defaults to 'rgx:'\r\n * @type {String}\r\n */\r\n this.rgxOperator = defaultsStr(f.regexp_operator, 'rgx:');\r\n\r\n /**\r\n * Empty cells operator for input filter. Defaults to '[empty]'\r\n * @type {String}\r\n */\r\n this.emOperator = defaultsStr(f.empty_operator, '[empty]');\r\n\r\n /**\r\n * Non-empty cells operator for input filter. Defaults to '[nonempty]'\r\n * @type {String}\r\n */\r\n this.nmOperator = defaultsStr(f.nonempty_operator, '[nonempty]');\r\n\r\n /**\r\n * Logical OR operator for input filter. Defaults to '||'\r\n * @type {String}\r\n */\r\n this.orOperator = defaultsStr(f.or_operator, '||');\r\n\r\n /**\r\n * Logical AND operator for input filter. Defaults to '&&'\r\n * @type {String}\r\n */\r\n this.anOperator = defaultsStr(f.and_operator, '&&');\r\n\r\n /**\r\n * Greater than operator for input filter. Defaults to '>'\r\n * @type {String}\r\n */\r\n this.grOperator = defaultsStr(f.greater_operator, '>');\r\n\r\n /**\r\n * Lower than operator for input filter. Defaults to '<'\r\n * @type {String}\r\n */\r\n this.lwOperator = defaultsStr(f.lower_operator, '<');\r\n\r\n /**\r\n * Lower than or equal operator for input filter. Defaults to '<='\r\n * @type {String}\r\n */\r\n this.leOperator = defaultsStr(f.lower_equal_operator, '<=');\r\n\r\n /**\r\n * Greater than or equal operator for input filter. Defaults to '>='\r\n * @type {String}\r\n */\r\n this.geOperator = defaultsStr(f.greater_equal_operator, '>=');\r\n\r\n /**\r\n * Inequality operator for input filter. Defaults to '!'\r\n * @type {String}\r\n */\r\n this.dfOperator = defaultsStr(f.different_operator, '!');\r\n\r\n /**\r\n * Like operator for input filter. Defaults to '*'\r\n * @type {String}\r\n */\r\n this.lkOperator = defaultsStr(f.like_operator, '*');\r\n\r\n /**\r\n * Strict equality operator for input filter. Defaults to '='\r\n * @type {String}\r\n */\r\n this.eqOperator = defaultsStr(f.equal_operator, '=');\r\n\r\n /**\r\n * Starts with operator for input filter. Defaults to '='\r\n * @type {String}\r\n */\r\n this.stOperator = defaultsStr(f.start_with_operator, '{');\r\n\r\n /**\r\n * Ends with operator for input filter. Defaults to '='\r\n * @type {String}\r\n */\r\n this.enOperator = defaultsStr(f.end_with_operator, '}');\r\n\r\n // this.curExp = f.cur_exp || '^[¥£€$]';\r\n\r\n /**\r\n * Stored values separator\r\n * @type {String}\r\n */\r\n this.separator = defaultsStr(f.separator, ',');\r\n\r\n /**\r\n * Enable rows counter UI component\r\n * @type {Boolean|Object}\r\n */\r\n this.rowsCounter = isObj(f.rows_counter) || Boolean(f.rows_counter);\r\n\r\n /**\r\n * Enable status bar UI component\r\n * @type {Boolean|Object}\r\n */\r\n this.statusBar = isObj(f.status_bar) || Boolean(f.status_bar);\r\n\r\n /**\r\n * Enable activity/spinner indicator UI component\r\n * @type {Boolean|Object}\r\n */\r\n this.loader = isObj(f.loader) || Boolean(f.loader);\r\n\r\n /*** validation - reset buttons/links ***/\r\n /**\r\n * Enable filters submission button\r\n * @type {Boolean}\r\n */\r\n this.displayBtn = Boolean(f.btn);\r\n\r\n /**\r\n * Define filters submission button text\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, (!this.enableIcons ? 'Go' : ''));\r\n\r\n /**\r\n * Css class for filters submission button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class,\r\n (!this.enableIcons ? 'btnflt' : 'btnflt_icon'));\r\n\r\n /**\r\n * Enable clear button\r\n * @type {Object|Boolean}\r\n */\r\n this.btnReset = isObj(f.btn_reset) || Boolean(f.btn_reset);\r\n\r\n /**\r\n * Callback fired before filters are cleared\r\n * @type {Function}\r\n */\r\n this.onBeforeReset = defaultsFn(f.on_before_reset, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filters are cleared\r\n * @type {Function}\r\n */\r\n this.onAfterReset = defaultsFn(f.on_after_reset, EMPTY_FN);\r\n\r\n /**\r\n * Enable paging component\r\n * @type {Object|Boolean}\r\n */\r\n this.paging = isObj(f.paging) || Boolean(f.paging);\r\n\r\n /**\r\n * Number of hidden rows\r\n * @type {Number}\r\n * @private\r\n */\r\n this.nbHiddenRows = 0;\r\n\r\n /**\r\n * Enable auto-filter behaviour, table is filtered when a user\r\n * stops typing\r\n * @type {Object|Boolean}\r\n */\r\n this.autoFilter = isObj(f.auto_filter) || Boolean(f.auto_filter);\r\n\r\n /**\r\n * Auto-filter delay in milliseconds\r\n * @type {Number}\r\n */\r\n this.autoFilterDelay = isObj(f.auto_filter) &&\r\n isNumber(f.auto_filter.delay) ?\r\n f.auto_filter.delay : AUTO_FILTER_DELAY;\r\n\r\n /**\r\n * Indicate whether user is typing\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isUserTyping = null;\r\n\r\n /**\r\n * Auto-filter interval ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.autoFilterTimer = null;\r\n\r\n /**\r\n * Enable keyword highlighting behaviour\r\n * @type {Boolean}\r\n */\r\n this.highlightKeywords = Boolean(f.highlight_keywords);\r\n\r\n /**\r\n * Enable no results message UI component\r\n * @type {Object|Boolean}\r\n */\r\n this.noResults = isObj(f.no_results_message) ||\r\n Boolean(f.no_results_message);\r\n\r\n /**\r\n * Enable state persistence\r\n * @type {Object|Boolean}\r\n */\r\n this.state = isObj(f.state) || Boolean(f.state);\r\n\r\n /*** data types ***/\r\n\r\n /**\r\n * Enable date type module\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.dateType = true;\r\n\r\n /**\r\n * Define default locale, default to 'en' as per Sugar Date module:\r\n * https://sugarjs.com/docs/#/DateLocales\r\n * @type {String}\r\n */\r\n this.locale = defaultsStr(f.locale, 'en');\r\n\r\n /**\r\n * Define thousands separator ',' or '.', defaults to ','\r\n * @type {String}\r\n */\r\n this.thousandsSeparator = defaultsStr(f.thousands_separator, ',');\r\n\r\n /**\r\n * Define decimal separator ',' or '.', defaults to '.'\r\n * @type {String}\r\n */\r\n this.decimalSeparator = defaultsStr(f.decimal_separator, '.');\r\n\r\n /**\r\n * Define data types on a column basis, possible values 'string',\r\n * 'number', 'formatted-number', 'date', 'ipaddress' ie:\r\n * col_types : [\r\n * 'string', 'date', 'number',\r\n * { type: 'formatted-number', decimal: ',', thousands: '.' },\r\n * { type: 'date', locale: 'en-gb' },\r\n * { type: 'date', format: ['{dd}-{months}-{yyyy|yy}'] }\r\n * ]\r\n *\r\n * Refer to https://sugarjs.com/docs/#/DateParsing for exhaustive\r\n * information on date parsing formats supported by Sugar Date\r\n * @type {Array}\r\n */\r\n this.colTypes = isArray(f.col_types) ? f.col_types : [];\r\n\r\n /*** ids prefixes ***/\r\n /**\r\n * Main prefix\r\n * @private\r\n */\r\n this.prfxTf = 'TF';\r\n\r\n /**\r\n * Filter's ID prefix (inputs - selects)\r\n * @private\r\n */\r\n this.prfxFlt = 'flt';\r\n\r\n /**\r\n * Button's ID prefix\r\n * @private\r\n */\r\n this.prfxValButton = 'btn';\r\n\r\n /**\r\n * Responsive Css class\r\n * @private\r\n */\r\n this.prfxResponsive = 'resp';\r\n\r\n /** @private */\r\n this.stickyCssClass = 'sticky';\r\n\r\n /*** extensions ***/\r\n /**\r\n * List of loaded extensions\r\n * @type {Array}\r\n */\r\n this.extensions = defaultsArr(f.extensions, []);\r\n\r\n /*** themes ***/\r\n /**\r\n * Enable default theme\r\n * @type {Boolean}\r\n */\r\n this.enableDefaultTheme = Boolean(f.enable_default_theme);\r\n\r\n /**\r\n * Determine whether themes are enables\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.hasThemes = (this.enableDefaultTheme || isArray(f.themes));\r\n\r\n /**\r\n * List of themes, ie:\r\n * themes: [{ name: 'skyblue' }]\r\n * @type {Array}\r\n */\r\n this.themes = defaultsArr(f.themes, []);\r\n\r\n /**\r\n * Define path to themes assets, defaults to\r\n * 'tablefilter/style/themes/'. Usage:\r\n * themes: [{ name: 'skyblue' }]\r\n * @type {Array}\r\n */\r\n this.themesPath = this.getThemesPath();\r\n\r\n /**\r\n * Enable responsive layout\r\n * @type {Boolean}\r\n */\r\n this.responsive = Boolean(f.responsive);\r\n\r\n /**\r\n * Enable toolbar component\r\n * @type {Object|Boolean}\r\n */\r\n this.toolbar = isObj(f.toolbar) || Boolean(f.toolbar);\r\n\r\n /**\r\n * Enable sticky headers\r\n * @type {Boolean}\r\n */\r\n this.stickyHeaders = Boolean(f.sticky_headers);\r\n\r\n /**\r\n * Features registry\r\n * @private\r\n */\r\n this.Mod = {};\r\n\r\n /**\r\n * Extensions registry\r\n * @private\r\n */\r\n this.ExtRegistry = {};\r\n\r\n // conditionally instantiate required features\r\n this.instantiateFeatures(\r\n Object.keys(FEATURES).map((item) => FEATURES[item])\r\n );\r\n }\r\n\r\n /**\r\n * Initialise features and layout\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n // import main stylesheet\r\n this.import(this.stylesheetId, this.getStylesheetPath(), null, 'link');\r\n\r\n let Mod = this.Mod;\r\n let inpclass;\r\n\r\n //loads theme\r\n this.loadThemes();\r\n\r\n const { dateType, help, state, markActiveColumns, gridLayout, loader,\r\n highlightKeyword, popupFilter, rowsCounter, statusBar, clearButton,\r\n alternateRows, noResults, paging, toolbar } = FEATURES;\r\n\r\n //explicitly initialise features in given order\r\n this.initFeatures([\r\n dateType,\r\n help,\r\n state,\r\n markActiveColumns,\r\n gridLayout,\r\n loader,\r\n highlightKeyword,\r\n popupFilter\r\n ]);\r\n\r\n //filters grid is not generated\r\n if (!this.fltGrid) {\r\n this._initNoFilters();\r\n } else {\r\n let fltrow = this._insertFiltersRow();\r\n\r\n this.nbCells = this.getCellsNb(this.refRow);\r\n this.nbFilterableRows = this.getRowsNb();\r\n\r\n let n = this.singleFlt ? 1 : this.nbCells;\r\n\r\n //build filters\r\n for (let i = 0; i < n; i++) {\r\n this.emitter.emit('before-filter-init', this, i);\r\n\r\n let fltCell = createElm(this.fltCellTag),\r\n col = this.getFilterType(i);\r\n\r\n if (this.singleFlt) {\r\n fltCell.colSpan = this.nbCells;\r\n }\r\n if (!this.gridLayout) {\r\n fltrow.appendChild(fltCell);\r\n }\r\n inpclass = (i === n - 1 && this.displayBtn) ?\r\n this.fltSmallCssClass : this.fltCssClass;\r\n\r\n //only 1 input for single search\r\n if (this.singleFlt) {\r\n col = INPUT;\r\n inpclass = this.singleFltCssClass;\r\n }\r\n\r\n //drop-down filters\r\n if (col === SELECT || col === MULTIPLE) {\r\n Mod.dropdown = Mod.dropdown || new Dropdown(this);\r\n Mod.dropdown.init(i, this.isExternalFlt(), fltCell);\r\n }\r\n // checklist\r\n else if (col === CHECKLIST) {\r\n Mod.checkList = Mod.checkList || new CheckList(this);\r\n Mod.checkList.init(i, this.isExternalFlt(), fltCell);\r\n } else {\r\n this._buildInputFilter(i, inpclass, fltCell);\r\n }\r\n\r\n // this adds submit button\r\n if (i === n - 1 && this.displayBtn) {\r\n this._buildSubmitButton(\r\n this.isExternalFlt() ?\r\n elm(this.externalFltIds[i]) :\r\n fltCell\r\n );\r\n }\r\n\r\n this.emitter.emit('after-filter-init', this, i);\r\n }\r\n\r\n this.emitter.on(['filter-focus'],\r\n (tf, filter) => this.setActiveFilterId(filter.id));\r\n\r\n }//if this.fltGrid\r\n\r\n /* Features */\r\n if (this.hasExcludedRows) {\r\n this.emitter.on(['after-filtering'], () => this.setExcludeRows());\r\n this.setExcludeRows();\r\n }\r\n\r\n this.initFeatures([\r\n rowsCounter,\r\n statusBar,\r\n clearButton,\r\n alternateRows,\r\n noResults,\r\n paging,\r\n toolbar\r\n ]);\r\n\r\n this.setColWidths();\r\n\r\n //TF css class is added to table\r\n if (!this.gridLayout) {\r\n addClass(this.dom(), this.prfxTf);\r\n if (this.responsive) {\r\n addClass(this.dom(), this.prfxResponsive);\r\n }\r\n if (this.colWidths.length > 0) {\r\n this.setFixedLayout();\r\n }\r\n if (this.stickyHeaders && this.dom().tHead) {\r\n addClass(this.dom(), this.stickyCssClass);\r\n }\r\n }\r\n\r\n /* Load extensions */\r\n this.initExtensions();\r\n\r\n this.initialized = true;\r\n\r\n this.onFiltersLoaded(this);\r\n\r\n this.emitter.emit('initialized', this);\r\n }\r\n\r\n /**\r\n * Detect key\r\n * @param {Event} evt\r\n */\r\n detectKey(evt) {\r\n if (!this.enterKey) {\r\n return;\r\n }\r\n\r\n if (isKeyPressed(evt, [ENTER_KEY])) {\r\n this.filter();\r\n cancelEvt(evt);\r\n stopEvt(evt);\r\n } else {\r\n this.isUserTyping = true;\r\n root.clearInterval(this.autoFilterTimer);\r\n this.autoFilterTimer = null;\r\n }\r\n }\r\n\r\n /**\r\n * Filter's keyup event: if auto-filter on, detect user is typing and filter\r\n * columns\r\n * @param {Event} evt\r\n */\r\n onKeyUp(evt) {\r\n if (!this.autoFilter) {\r\n return;\r\n }\r\n this.isUserTyping = false;\r\n\r\n function filter() {\r\n root.clearInterval(this.autoFilterTimer);\r\n this.autoFilterTimer = null;\r\n if (!this.isUserTyping) {\r\n this.filter();\r\n this.isUserTyping = null;\r\n }\r\n }\r\n\r\n if (isKeyPressed(evt,\r\n [ENTER_KEY, TAB_KEY, ESC_KEY, UP_ARROW_KEY, DOWN_ARROW_KEY])) {\r\n root.clearInterval(this.autoFilterTimer);\r\n this.autoFilterTimer = null;\r\n } else {\r\n if (this.autoFilterTimer !== null) {\r\n return;\r\n }\r\n this.autoFilterTimer = root.setInterval(\r\n filter.bind(this),\r\n this.autoFilterDelay);\r\n }\r\n }\r\n\r\n /**\r\n * Filter's keydown event: if auto-filter on, detect user is typing\r\n */\r\n onKeyDown() {\r\n if (this.autoFilter) {\r\n this.isUserTyping = true;\r\n }\r\n }\r\n\r\n /**\r\n * Filter's focus event\r\n * @param {Event} evt\r\n */\r\n onInpFocus(evt) {\r\n let elm = targetEvt(evt);\r\n this.emitter.emit('filter-focus', this, elm);\r\n }\r\n\r\n /**\r\n * Filter's blur event: if auto-filter on, clear interval on filter blur\r\n */\r\n onInpBlur() {\r\n if (this.autoFilter) {\r\n this.isUserTyping = false;\r\n root.clearInterval(this.autoFilterTimer);\r\n }\r\n this.emitter.emit('filter-blur', this);\r\n }\r\n\r\n /**\r\n * Insert filters row at initialization\r\n */\r\n _insertFiltersRow() {\r\n // TODO: prevent filters row generation for popup filters too,\r\n // to reduce and simplify headers row index adjusting across lib modules\r\n // (GridLayout, PopupFilter etc)\r\n if (this.gridLayout) {\r\n return;\r\n }\r\n let fltrow;\r\n\r\n let thead = tag(this.dom(), 'thead');\r\n if (thead.length > 0) {\r\n fltrow = thead[0].insertRow(this.filtersRowIndex);\r\n } else {\r\n fltrow = this.dom().insertRow(this.filtersRowIndex);\r\n }\r\n\r\n fltrow.className = this.fltsRowCssClass;\r\n\r\n if (this.isExternalFlt()) {\r\n fltrow.style.display = NONE;\r\n }\r\n\r\n this.emitter.emit('filters-row-inserted', this, fltrow);\r\n return fltrow;\r\n }\r\n\r\n /**\r\n * Initialize filtersless table\r\n */\r\n _initNoFilters() {\r\n if (this.fltGrid) {\r\n return;\r\n }\r\n this.refRow = this.refRow > 0 ? this.refRow - 1 : 0;\r\n this.nbFilterableRows = this.getRowsNb();\r\n }\r\n\r\n /**\r\n * Build input filter type\r\n * @param {Number} colIndex Column index\r\n * @param {String} cssClass Css class applied to filter\r\n * @param {DOMElement} container Container DOM element\r\n */\r\n _buildInputFilter(colIndex, cssClass, container) {\r\n let col = this.getFilterType(colIndex);\r\n let externalFltTgtId = this.isExternalFlt() ?\r\n this.externalFltIds[colIndex] : null;\r\n let inpType = col === INPUT ? 'text' : 'hidden';\r\n let inp = createElm(INPUT,\r\n ['id', this.buildFilterId(colIndex)],\r\n ['type', inpType], ['ct', colIndex]);\r\n\r\n if (inpType !== 'hidden' && this.watermark) {\r\n inp.setAttribute('placeholder',\r\n this.isWatermarkArray ? (this.watermark[colIndex] || '') :\r\n this.watermark\r\n );\r\n }\r\n inp.className = cssClass || this.fltCssClass;\r\n addEvt(inp, 'focus', (evt) => this.onInpFocus(evt));\r\n\r\n //filter is appended in custom element\r\n if (externalFltTgtId) {\r\n elm(externalFltTgtId).appendChild(inp);\r\n } else {\r\n container.appendChild(inp);\r\n }\r\n\r\n this.fltIds.push(inp.id);\r\n\r\n addEvt(inp, 'keypress', (evt) => this.detectKey(evt));\r\n addEvt(inp, 'keydown', () => this.onKeyDown());\r\n addEvt(inp, 'keyup', (evt) => this.onKeyUp(evt));\r\n addEvt(inp, 'blur', () => this.onInpBlur());\r\n }\r\n\r\n /**\r\n * Build submit button\r\n * @param {DOMElement} container Container DOM element\r\n */\r\n _buildSubmitButton(container) {\r\n let btn = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnText]\r\n );\r\n btn.className = this.btnCssClass;\r\n\r\n //filter is appended in container element\r\n container.appendChild(btn);\r\n\r\n addEvt(btn, 'click', () => this.filter());\r\n }\r\n\r\n /**\r\n * Istantiate the collection of features required by the\r\n * configuration and add them to the features registry. A feature is\r\n * described by a `class` and `name` fields and and optional `property`\r\n * field:\r\n * {\r\n * class: AClass,\r\n * name: 'aClass'\r\n * }\r\n * @param {Array} [features=[]]\r\n * @private\r\n */\r\n instantiateFeatures(features = []) {\r\n features.forEach((feature) => {\r\n // TODO: remove the property field.\r\n // Due to naming convention inconsistencies, a `property`\r\n // field is added to allow a conditional instanciation based\r\n // on that property on TableFilter, if supplied.\r\n feature.property = feature.property || feature.name;\r\n if (!this.hasConfig || this[feature.property] === true ||\r\n feature.enforce === true) {\r\n let {class: Cls, name} = feature;\r\n\r\n this.Mod[name] = this.Mod[name] || new Cls(this);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Initialise the passed features collection. A feature is described by a\r\n * `class` and `name` fields and and optional `property` field:\r\n * {\r\n * class: AClass,\r\n * name: 'aClass'\r\n * }\r\n * @param {Array} [features=[]]\r\n * @private\r\n */\r\n initFeatures(features = []) {\r\n features.forEach((feature) => {\r\n let {property, name} = feature;\r\n if (this[property] === true && this.Mod[name]) {\r\n this.Mod[name].init();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Return a feature instance for a given name\r\n * @param {String} name Name of the feature\r\n * @return {Object}\r\n */\r\n feature(name) {\r\n return this.Mod[name];\r\n }\r\n\r\n /**\r\n * Initialise all the extensions defined in the configuration object\r\n */\r\n initExtensions() {\r\n let exts = this.extensions;\r\n if (exts.length === 0) {\r\n return;\r\n }\r\n\r\n // Set config's publicPath dynamically for Webpack...\r\n __webpack_public_path__ = this.basePath;\r\n\r\n this.emitter.emit('before-loading-extensions', this);\r\n\r\n exts.forEach((ext) => {\r\n this.loadExtension(ext);\r\n });\r\n this.emitter.emit('after-loading-extensions', this);\r\n }\r\n\r\n /**\r\n * Load an extension module\r\n * @param {Object} ext Extension config object\r\n */\r\n loadExtension(ext) {\r\n if (!ext || !ext.name || this.hasExtension(ext.name)) {\r\n return;\r\n }\r\n\r\n let {name, path} = ext;\r\n let modulePath;\r\n\r\n if (name && path) {\r\n modulePath = ext.path + name;\r\n } else {\r\n name = name.replace('.js', '');\r\n modulePath = 'extensions/{}/{}'.replace(/{}/g, name);\r\n }\r\n\r\n // Require pattern for Webpack\r\n require(['./' + modulePath], (mod) => {\r\n /* eslint-disable */\r\n let inst = new mod.default(this, ext);\r\n /* eslint-enable */\r\n inst.init();\r\n this.ExtRegistry[name] = inst;\r\n });\r\n }\r\n\r\n /**\r\n * Get an extension instance\r\n * @param {String} name Name of the extension\r\n * @return {Object} Extension instance\r\n */\r\n extension(name) {\r\n return this.ExtRegistry[name];\r\n }\r\n\r\n /**\r\n * Check passed extension name exists\r\n * @param {String} name Name of the extension\r\n * @return {Boolean}\r\n */\r\n hasExtension(name) {\r\n return !isEmpty(this.ExtRegistry[name]);\r\n }\r\n\r\n /**\r\n * Register the passed extension instance with associated name\r\n * @param {Object} inst Extension instance\r\n * @param {String} name Name of the extension\r\n */\r\n registerExtension(inst, name) {\r\n this.ExtRegistry[name] = inst;\r\n }\r\n\r\n /**\r\n * Destroy all the extensions store in extensions registry\r\n */\r\n destroyExtensions() {\r\n let reg = this.ExtRegistry;\r\n\r\n Object.keys(reg).forEach((key) => {\r\n reg[key].destroy();\r\n reg[key] = undefined;\r\n });\r\n }\r\n\r\n /**\r\n * Load themes defined in the configuration object\r\n */\r\n loadThemes() {\r\n if (!this.hasThemes) {\r\n return;\r\n }\r\n\r\n let themes = this.themes;\r\n this.emitter.emit('before-loading-themes', this);\r\n\r\n //Default theme config\r\n if (this.enableDefaultTheme) {\r\n let defaultTheme = { name: 'default' };\r\n this.themes.push(defaultTheme);\r\n }\r\n\r\n themes.forEach((theme, i) => {\r\n let {name, path} = theme;\r\n let styleId = this.prfxTf + name;\r\n if (name && !path) {\r\n path = this.themesPath + name + '/' + name + '.css';\r\n }\r\n else if (!name && theme.path) {\r\n name = 'theme{0}'.replace('{0}', i);\r\n }\r\n\r\n if (!this.isImported(path, 'link')) {\r\n this.import(styleId, path, null, 'link');\r\n }\r\n });\r\n\r\n // Enable loader indicator\r\n this.loader = true;\r\n\r\n this.emitter.emit('after-loading-themes', this);\r\n }\r\n\r\n /**\r\n * Return stylesheet DOM element for a given theme name\r\n * @return {DOMElement} stylesheet element\r\n */\r\n getStylesheet(name = 'default') {\r\n return elm(this.prfxTf + name);\r\n }\r\n\r\n /**\r\n * Destroy filter grid\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let emitter = this.emitter;\r\n\r\n if (this.isExternalFlt() && !this.popupFilters) {\r\n this.removeExternalFlts();\r\n }\r\n\r\n this.destroyExtensions();\r\n\r\n this.validateAllRows();\r\n\r\n // broadcast destroy event modules and extensions are subscribed to\r\n emitter.emit('destroy', this);\r\n\r\n if (this.fltGrid && !this.gridLayout) {\r\n this.dom().deleteRow(this.filtersRowIndex);\r\n }\r\n\r\n // unsubscribe to events\r\n if (this.hasExcludedRows) {\r\n emitter.off(['after-filtering'], () => this.setExcludeRows());\r\n }\r\n\r\n this.emitter.off(['filter-focus'],\r\n (tf, filter) => this.setActiveFilterId(filter.id));\r\n\r\n removeClass(this.dom(), this.prfxTf);\r\n removeClass(this.dom(), this.prfxResponsive);\r\n if (this.dom().tHead) {\r\n removeClass(this.dom().tHead, this.stickyCssClass);\r\n }\r\n\r\n this.nbHiddenRows = 0;\r\n this.validRowsIndex = [];\r\n this.fltIds = [];\r\n this.initialized = false;\r\n }\r\n\r\n /**\r\n * Remove all the external column filters\r\n */\r\n removeExternalFlts() {\r\n if (!this.isExternalFlt()) {\r\n return;\r\n }\r\n let ids = this.externalFltIds;\r\n ids.forEach((id) => {\r\n let externalFlt = elm(id);\r\n if (externalFlt) {\r\n externalFlt.innerHTML = '';\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Check if given column implements a filter with custom options\r\n * @param {Number} colIndex Column's index\r\n * @return {Boolean}\r\n */\r\n isCustomOptions(colIndex) {\r\n return this.hasCustomOptions &&\r\n this.customOptions.cols.indexOf(colIndex) !== -1;\r\n }\r\n\r\n /**\r\n * Returns an array [[value0, value1 ...],[text0, text1 ...]] with the\r\n * custom options values and texts\r\n * @param {Number} colIndex Column's index\r\n * @return {Array}\r\n */\r\n getCustomOptions(colIndex) {\r\n if (isEmpty(colIndex) || !this.isCustomOptions(colIndex)) {\r\n return;\r\n }\r\n\r\n let customOptions = this.customOptions;\r\n let cols = customOptions.cols;\r\n let optTxt = [], optArray = [];\r\n let index = cols.indexOf(colIndex);\r\n let slcValues = customOptions.values[index];\r\n let slcTexts = customOptions.texts[index];\r\n let slcSort = customOptions.sorts[index];\r\n\r\n for (let r = 0, len = slcValues.length; r < len; r++) {\r\n optArray.push(slcValues[r]);\r\n if (slcTexts[r]) {\r\n optTxt.push(slcTexts[r]);\r\n } else {\r\n optTxt.push(slcValues[r]);\r\n }\r\n }\r\n if (slcSort) {\r\n optArray.sort();\r\n optTxt.sort();\r\n }\r\n return [optArray, optTxt];\r\n }\r\n\r\n /**\r\n * Filter the table by retrieving the data from each cell in every single\r\n * row and comparing it to the search term for current column. A row is\r\n * hidden when all the search terms are not found in inspected row.\r\n */\r\n filter() {\r\n if (!this.fltGrid || !this.initialized) {\r\n return;\r\n }\r\n\r\n let emitter = this.emitter;\r\n\r\n //fire onbefore callback\r\n this.onBeforeFilter(this);\r\n emitter.emit('before-filtering', this);\r\n\r\n let hiddenRows = 0;\r\n\r\n this.validRowsIndex = [];\r\n // search args\r\n let searchArgs = this.getFiltersValue();\r\n\r\n let eachRow = this.eachRow();\r\n eachRow(\r\n (row, k) => {\r\n // already filtered rows display re-init\r\n row.style.display = '';\r\n\r\n let cells = row.cells;\r\n let nbCells = cells.length;\r\n\r\n let occurence = [],\r\n isMatch = true,\r\n //only for single filter search\r\n isSingleFltMatch = false;\r\n\r\n // this loop retrieves cell data\r\n for (let j = 0; j < nbCells; j++) {\r\n //searched keyword\r\n let sA = searchArgs[this.singleFlt ? 0 : j];\r\n\r\n if (sA === '') {\r\n continue;\r\n }\r\n\r\n let cellValue = matchCase(this.getCellValue(cells[j]),\r\n this.caseSensitive);\r\n\r\n //multiple search parameter operator ||\r\n let sAOrSplit = sA.toString().split(this.orOperator),\r\n //multiple search || parameter boolean\r\n hasMultiOrSA = sAOrSplit.length > 1,\r\n //multiple search parameter operator &&\r\n sAAndSplit = sA.toString().split(this.anOperator),\r\n //multiple search && parameter boolean\r\n hasMultiAndSA = sAAndSplit.length > 1;\r\n\r\n //detect operators or array query\r\n if (isArray(sA) || hasMultiOrSA || hasMultiAndSA) {\r\n let cS, s;\r\n let found = false;\r\n\r\n if (isArray(sA)) {\r\n s = sA;\r\n } else {\r\n s = hasMultiOrSA ? sAOrSplit : sAAndSplit;\r\n }\r\n // isolate search term and check occurence in cell data\r\n for (let w = 0, len = s.length; w < len; w++) {\r\n cS = trim(s[w]);\r\n found = this._match(cS, cellValue, cells[j]);\r\n\r\n if (found) {\r\n emitter.emit('highlight-keyword', this,\r\n cells[j], cS);\r\n }\r\n if ((hasMultiOrSA && found) ||\r\n (hasMultiAndSA && !found)) {\r\n break;\r\n }\r\n if (isArray(sA) && found) {\r\n break;\r\n }\r\n }\r\n occurence[j] = found;\r\n\r\n }\r\n //single search parameter\r\n else {\r\n occurence[j] =\r\n this._match(trim(sA), cellValue, cells[j]);\r\n if (occurence[j]) {\r\n emitter.emit('highlight-keyword', this, cells[j],\r\n sA);\r\n }\r\n }\r\n\r\n if (!occurence[j]) {\r\n isMatch = false;\r\n }\r\n\r\n if (this.singleFlt &&\r\n this.singleFltExcludeCols.indexOf(j) === -1 &&\r\n occurence[j]) {\r\n isSingleFltMatch = true;\r\n }\r\n\r\n emitter.emit('cell-processed', this, j, cells[j]);\r\n }//for j\r\n\r\n if (isSingleFltMatch) {\r\n isMatch = true;\r\n }\r\n\r\n this.validateRow(k, isMatch);\r\n if (!isMatch) {\r\n hiddenRows++;\r\n }\r\n\r\n emitter.emit('row-processed', this, k,\r\n this.validRowsIndex.length - 1, isMatch);\r\n },\r\n // continue condition\r\n (row) => row.cells.length !== this.nbCells\r\n );\r\n\r\n this.nbHiddenRows = hiddenRows;\r\n\r\n //fire onafterfilter callback\r\n this.onAfterFilter(this);\r\n\r\n emitter.emit('after-filtering', this, searchArgs);\r\n }\r\n\r\n /**\r\n * Match search term in cell data\r\n * @param {String} term Search term\r\n * @param {String} cellValue Cell data\r\n * @param {DOMElement} cell Current cell\r\n * @return {Boolean}\r\n * @private\r\n */\r\n _match(term, cellValue, cell) {\r\n let numData;\r\n let colIdx = cell.cellIndex;\r\n let decimal = this.getDecimal(colIdx);\r\n let reLe = new RegExp(this.leOperator),\r\n reGe = new RegExp(this.geOperator),\r\n reL = new RegExp(this.lwOperator),\r\n reG = new RegExp(this.grOperator),\r\n reD = new RegExp(this.dfOperator),\r\n reLk = new RegExp(rgxEsc(this.lkOperator)),\r\n reEq = new RegExp(this.eqOperator),\r\n reSt = new RegExp(this.stOperator),\r\n reEn = new RegExp(this.enOperator),\r\n // re_an = new RegExp(this.anOperator),\r\n // re_cr = new RegExp(this.curExp),\r\n reEm = this.emOperator,\r\n reNm = this.nmOperator,\r\n reRe = new RegExp(rgxEsc(this.rgxOperator));\r\n\r\n term = matchCase(term, this.caseSensitive);\r\n\r\n let occurence = false;\r\n\r\n //Search arg operator tests\r\n let hasLO = reL.test(term),\r\n hasLE = reLe.test(term),\r\n hasGR = reG.test(term),\r\n hasGE = reGe.test(term),\r\n hasDF = reD.test(term),\r\n hasEQ = reEq.test(term),\r\n hasLK = reLk.test(term),\r\n // hatermN = re_an.test(term),\r\n hasST = reSt.test(term),\r\n hasEN = reEn.test(term),\r\n hasEM = (reEm === term),\r\n hasNM = (reNm === term),\r\n hasRE = reRe.test(term);\r\n\r\n // Check for dates or resolve date type\r\n if (this.hasType(colIdx, [DATE])) {\r\n let dte1, dte2;\r\n\r\n let dateType = this.Mod.dateType;\r\n let isValidDate = dateType.isValid.bind(dateType);\r\n let parseDate = dateType.parse.bind(dateType);\r\n let locale = dateType.getLocale(colIdx);\r\n\r\n // Search arg dates tests\r\n let isLDate = hasLO &&\r\n isValidDate(term.replace(reL, ''), locale);\r\n let isLEDate = hasLE &&\r\n isValidDate(term.replace(reLe, ''), locale);\r\n let isGDate = hasGR &&\r\n isValidDate(term.replace(reG, ''), locale);\r\n let isGEDate = hasGE &&\r\n isValidDate(term.replace(reGe, ''), locale);\r\n let isDFDate = hasDF &&\r\n isValidDate(term.replace(reD, ''), locale);\r\n let isEQDate = hasEQ &&\r\n isValidDate(term.replace(reEq, ''), locale);\r\n\r\n dte1 = parseDate(cellValue, locale);\r\n\r\n // lower equal date\r\n if (isLEDate) {\r\n dte2 = parseDate(term.replace(reLe, ''), locale);\r\n occurence = dte1 <= dte2;\r\n }\r\n // lower date\r\n else if (isLDate) {\r\n dte2 = parseDate(term.replace(reL, ''), locale);\r\n occurence = dte1 < dte2;\r\n }\r\n // greater equal date\r\n else if (isGEDate) {\r\n dte2 = parseDate(term.replace(reGe, ''), locale);\r\n occurence = dte1 >= dte2;\r\n }\r\n // greater date\r\n else if (isGDate) {\r\n dte2 = parseDate(term.replace(reG, ''), locale);\r\n occurence = dte1 > dte2;\r\n }\r\n // different date\r\n else if (isDFDate) {\r\n dte2 = parseDate(term.replace(reD, ''), locale);\r\n occurence = dte1.toString() !== dte2.toString();\r\n }\r\n // equal date\r\n else if (isEQDate) {\r\n dte2 = parseDate(term.replace(reEq, ''), locale);\r\n occurence = dte1.toString() === dte2.toString();\r\n }\r\n // searched keyword with * operator doesn't have to be a date\r\n else if (reLk.test(term)) {// like date\r\n occurence = contains(term.replace(reLk, ''), cellValue,\r\n false, this.caseSensitive);\r\n }\r\n else if (isValidDate(term)) {\r\n dte2 = parseDate(term, locale);\r\n occurence = dte1.toString() === dte2.toString();\r\n }\r\n //empty\r\n else if (hasEM) {\r\n occurence = !cell.hasChildNodes();\r\n }\r\n //non-empty\r\n else if (hasNM) {\r\n occurence = cell.hasChildNodes();\r\n } else {\r\n occurence = contains(term, cellValue,\r\n this.isExactMatch(colIdx), this.caseSensitive);\r\n }\r\n } else {\r\n // Convert to number anyways to auto-resolve type in case not\r\n // defined by configuration. Order is important first try to\r\n // parse formatted number then fallback to Number coercion\r\n // to avoid false positives with Number\r\n numData = parseNb(cellValue, decimal) || Number(cellValue);\r\n\r\n // first checks if there is any operator (<,>,<=,>=,!,*,=,{,},\r\n // rgx:)\r\n\r\n //regexp\r\n if (hasRE) {\r\n //in case regexp throws\r\n try {\r\n //operator is removed\r\n let srchArg = term.replace(reRe, '');\r\n let rgx = new RegExp(srchArg);\r\n occurence = rgx.test(cellValue);\r\n } catch (ex) {\r\n occurence = false;\r\n }\r\n }\r\n // lower equal\r\n else if (hasLE) {\r\n occurence = numData <= parseNb(\r\n term.replace(reLe, ''),\r\n decimal\r\n );\r\n }\r\n //greater equal\r\n else if (hasGE) {\r\n occurence = numData >= parseNb(\r\n term.replace(reGe, ''),\r\n decimal\r\n );\r\n }\r\n //lower\r\n else if (hasLO) {\r\n occurence = numData < parseNb(\r\n term.replace(reL, ''),\r\n decimal\r\n );\r\n }\r\n //greater\r\n else if (hasGR) {\r\n occurence = numData > parseNb(\r\n term.replace(reG, ''),\r\n decimal\r\n );\r\n }\r\n //different\r\n else if (hasDF) {\r\n occurence = contains(term.replace(reD, ''), cellValue,\r\n false, this.caseSensitive) ? false : true;\r\n }\r\n //like\r\n else if (hasLK) {\r\n occurence = contains(term.replace(reLk, ''), cellValue,\r\n false, this.caseSensitive);\r\n }\r\n //equal\r\n else if (hasEQ) {\r\n occurence = contains(term.replace(reEq, ''), cellValue,\r\n true, this.caseSensitive);\r\n }\r\n //starts with\r\n else if (hasST) {\r\n occurence = cellValue.indexOf(term.replace(reSt, '')) === 0 ?\r\n true : false;\r\n }\r\n //ends with\r\n else if (hasEN) {\r\n let searchArg = term.replace(reEn, '');\r\n occurence =\r\n cellValue.lastIndexOf(searchArg, cellValue.length - 1) ===\r\n (cellValue.length - 1) - (searchArg.length - 1) &&\r\n cellValue.lastIndexOf(searchArg, cellValue.length - 1)\r\n > -1 ? true : false;\r\n }\r\n //empty\r\n else if (hasEM) {\r\n occurence = !cell.hasChildNodes();\r\n }\r\n //non-empty\r\n else if (hasNM) {\r\n occurence = cell.hasChildNodes();\r\n } else {\r\n // If numeric type data, perform a strict equality test and\r\n // fallback to unformatted number string comparison\r\n if (numData &&\r\n this.hasType(colIdx, [NUMBER, FORMATTED_NUMBER]) &&\r\n !this.singleFlt) {\r\n // parseNb can return 0 for strings which are not\r\n // formatted numbers, in that case return the original\r\n // string. TODO: handle this in parseNb\r\n term = parseNb(term, decimal) || term;\r\n occurence = numData === term ||\r\n contains(term.toString(), numData.toString(),\r\n this.isExactMatch(colIdx), this.caseSensitive);\r\n } else {\r\n // Finally test search term is contained in cell data\r\n occurence = contains(\r\n term,\r\n cellValue,\r\n this.isExactMatch(colIdx),\r\n this.caseSensitive,\r\n this.ignoresDiacritics(colIdx)\r\n );\r\n }\r\n }\r\n\r\n }//else\r\n\r\n return occurence;\r\n }\r\n\r\n /**\r\n * Return the data of a specified column\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Array} [exclude=[]] List of row indexes to be excluded\r\n * @return Flat list of data for a column\r\n */\r\n getColumnData(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getColValues(colIndex, includeHeaders, true, exclude);\r\n }\r\n\r\n /**\r\n * Return the values of a specified column\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Array} [exclude=[]] List of row indexes to be excluded\r\n * @return Flat list of values for a column\r\n */\r\n getColumnValues(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getColValues(colIndex, includeHeaders, false, exclude);\r\n }\r\n\r\n /**\r\n * Return the data of a specified column\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [typed=false] Return a typed value\r\n * @param {Array} [exclude=[]] List of row indexes to be excluded\r\n * @return {Array} Flat list of data for a column\r\n * @private\r\n */\r\n getColValues(\r\n colIndex,\r\n includeHeaders = false,\r\n typed = false,\r\n exclude = []\r\n ) {\r\n let colValues = [];\r\n let getContent = typed ? this.getCellData.bind(this) :\r\n this.getCellValue.bind(this);\r\n\r\n if (includeHeaders) {\r\n colValues.push(this.getHeadersText()[colIndex]);\r\n }\r\n\r\n let eachRow = this.eachRow();\r\n eachRow((row, i) => {\r\n // checks if current row index appears in exclude array\r\n let isExludedRow = exclude.indexOf(i) !== -1;\r\n let cells = row.cells;\r\n\r\n // checks if row has exact cell # and is not excluded\r\n if (cells.length === this.nbCells && !isExludedRow) {\r\n let data = getContent(cells[colIndex]);\r\n colValues.push(data);\r\n }\r\n });\r\n return colValues;\r\n }\r\n\r\n /**\r\n * Return the filter's value of a specified column\r\n * @param {Number} index Column index\r\n * @return {String} Filter value\r\n */\r\n getFilterValue(index) {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n let fltValue = '';\r\n let flt = this.getFilterElement(index);\r\n if (!flt) {\r\n return fltValue;\r\n }\r\n\r\n let fltColType = this.getFilterType(index);\r\n if (fltColType !== MULTIPLE && fltColType !== CHECKLIST) {\r\n fltValue = flt.value;\r\n }\r\n //mutiple select\r\n else if (fltColType === MULTIPLE) {\r\n fltValue = this.feature('dropdown').getValues(index);\r\n }\r\n //checklist\r\n else if (fltColType === CHECKLIST) {\r\n fltValue = this.feature('checkList').getValues(index);\r\n }\r\n //return an empty string if collection is empty or contains a single\r\n //empty string\r\n if (isArray(fltValue) && fltValue.length === 0 ||\r\n (fltValue.length === 1 && fltValue[0] === '')) {\r\n fltValue = '';\r\n }\r\n\r\n return fltValue;\r\n }\r\n\r\n /**\r\n * Return the filters' values\r\n * @return {Array} List of filters' values\r\n */\r\n getFiltersValue() {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n let searchArgs = [];\r\n\r\n this.fltIds.forEach((id, i) => {\r\n let fltValue = this.getFilterValue(i);\r\n if (isArray(fltValue)) {\r\n searchArgs.push(fltValue);\r\n } else {\r\n searchArgs.push(trim(fltValue));\r\n }\r\n });\r\n return searchArgs;\r\n }\r\n\r\n /**\r\n * Return the ID of a specified column's filter\r\n * @param {Number} index Column's index\r\n * @return {String} ID of the filter element\r\n */\r\n getFilterId(index) {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n return this.fltIds[index];\r\n }\r\n\r\n /**\r\n * Return the list of ids of filters matching a specified type.\r\n * Note: hidden filters are also returned\r\n *\r\n * @param {String} type Filter type string ('input', 'select', 'multiple',\r\n * 'checklist')\r\n * @param {Boolean} bool If true returns columns indexes instead of IDs\r\n * @return {[type]} List of element IDs or column indexes\r\n */\r\n getFiltersByType(type, bool) {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n let arr = [];\r\n for (let i = 0, len = this.fltIds.length; i < len; i++) {\r\n let fltType = this.getFilterType(i);\r\n if (fltType === type.toLowerCase()) {\r\n let a = bool ? i : this.fltIds[i];\r\n arr.push(a);\r\n }\r\n }\r\n return arr;\r\n }\r\n\r\n /**\r\n * Return the filter's DOM element for a given column\r\n * @param {Number} index Column's index\r\n * @return {DOMElement}\r\n */\r\n getFilterElement(index) {\r\n return elm(this.fltIds[index]);\r\n }\r\n\r\n /**\r\n * Return the number of cells for a given row index\r\n * @param {Number} rowIndex Index of the row\r\n * @return {Number} Number of cells\r\n */\r\n getCellsNb(rowIndex = 0) {\r\n let tr = this.dom().rows[rowIndex >= 0 ? rowIndex : 0];\r\n return tr ? tr.cells.length : 0;\r\n }\r\n\r\n /**\r\n * Return the number of working rows starting from reference row if\r\n * defined\r\n * @param {Boolean} includeHeaders Include the headers row(s)\r\n * @return {Number} Number of working rows\r\n */\r\n getRowsNb(includeHeaders) {\r\n let nbRows = this.getWorkingRows().length;\r\n if (this.dom().tHead) {\r\n return includeHeaders ?\r\n nbRows + this.dom().querySelectorAll('thead > tr').length :\r\n nbRows;\r\n }\r\n return includeHeaders ? nbRows : nbRows - this.refRow;\r\n }\r\n\r\n /**\r\n * Return the collection of the working rows, that is, the rows belonging\r\n * to the tbody section(s)\r\n * @returns {Array}\r\n */\r\n getWorkingRows() {\r\n return doc.querySelectorAll(`table#${this.id} > tbody > tr`);\r\n }\r\n\r\n /**\r\n * Return the text content of a given cell\r\n * @param {DOMElement} Cell's DOM element\r\n * @return {String}\r\n */\r\n getCellValue(cell) {\r\n let idx = cell.cellIndex;\r\n let cellParser = this.cellParser;\r\n // Invoke cellParser for this column if any\r\n if (cellParser.cols.indexOf(idx) !== -1) {\r\n return cellParser.parse(this, cell, idx);\r\n } else {\r\n return getText(cell);\r\n }\r\n }\r\n\r\n /**\r\n * Return the typed data of a given cell based on the column type definition\r\n * @param {DOMElement} cell Cell's DOM element\r\n * @return {String|Number|Date}\r\n */\r\n getCellData(cell) {\r\n let colIndex = cell.cellIndex;\r\n let value = this.getCellValue(cell);\r\n\r\n if (this.hasType(colIndex, [FORMATTED_NUMBER])) {\r\n return parseNb(value, this.getDecimal(colIndex));\r\n }\r\n else if (this.hasType(colIndex, [NUMBER])) {\r\n return Number(value);\r\n }\r\n else if (this.hasType(colIndex, [DATE])){\r\n let dateType = this.Mod.dateType;\r\n return dateType.parse(value, dateType.getLocale(colIndex));\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Return the table data based on its columns data type definitions\r\n * with following structure:\r\n * [\r\n * [rowIndex, [data0, data1...]],\r\n * [rowIndex, [data0, data1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @return {Array}\r\n */\r\n getData(includeHeaders = false, excludeHiddenCols = false) {\r\n return this.getTableData(includeHeaders, excludeHiddenCols, true);\r\n }\r\n\r\n /**\r\n * Return the table values with following structure:\r\n * [\r\n * [rowIndex, [value0, value1...]],\r\n * [rowIndex, [value0, value1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @return {Array}\r\n */\r\n getValues(includeHeaders = false, excludeHiddenCols = false) {\r\n return this.getTableData(includeHeaders, excludeHiddenCols, false);\r\n }\r\n\r\n /**\r\n * Return the table data with following structure:\r\n * [\r\n * [rowIndex, [value0, value1...]],\r\n * [rowIndex, [value0, value1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @param {Boolean} [typed=false] Return typed value\r\n * @return {Array}\r\n * @private\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getTableData(\r\n includeHeaders = false,\r\n excludeHiddenCols = false,\r\n typed = false\r\n ) {\r\n let tblData = [];\r\n let getContent = typed ? this.getCellData.bind(this) :\r\n this.getCellValue.bind(this);\r\n\r\n if (includeHeaders) {\r\n let headers = this.getHeadersText(excludeHiddenCols);\r\n tblData.push([this.getHeadersRowIndex(), headers]);\r\n }\r\n\r\n let eachRow = this.eachRow();\r\n eachRow((row, k) => {\r\n let rowData = [k, []];\r\n let cells = row.cells;\r\n for (let j = 0, len = cells.length; j < len; j++) {\r\n if (excludeHiddenCols && this.hasExtension('colsVisibility')) {\r\n if (this.extension('colsVisibility').isColHidden(j)) {\r\n continue;\r\n }\r\n }\r\n let cellContent = getContent(cells[j]);\r\n rowData[1].push(cellContent);\r\n }\r\n tblData.push(rowData);\r\n });\r\n return tblData;\r\n }\r\n\r\n /**\r\n * Return the filtered table data based on its columns data type definitions\r\n * with following structure:\r\n * [\r\n * [rowIndex, [data0, data1...]],\r\n * [rowIndex, [data0, data1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @return {Array}\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredData(includeHeaders = false, excludeHiddenCols = false) {\r\n return this.filteredData(includeHeaders, excludeHiddenCols, true);\r\n }\r\n\r\n /**\r\n * Return the filtered table values with following structure:\r\n * [\r\n * [rowIndex, [value0, value1...]],\r\n * [rowIndex, [value0, value1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @return {Array}\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredValues(includeHeaders = false, excludeHiddenCols = false) {\r\n return this.filteredData(includeHeaders, excludeHiddenCols, false);\r\n }\r\n\r\n /**\r\n * Return the filtered data with following structure:\r\n * [\r\n * [rowIndex, [value0, value1...]],\r\n * [rowIndex, [value0, value1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @param {Boolean} [typed=false] Return typed value\r\n * @return {Array}\r\n * @private\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n filteredData(\r\n includeHeaders = false,\r\n excludeHiddenCols = false,\r\n typed = false\r\n ) {\r\n if (this.validRowsIndex.length === 0) {\r\n return [];\r\n }\r\n let rows = this.dom().rows,\r\n filteredData = [];\r\n let getContent = typed ? this.getCellData.bind(this) :\r\n this.getCellValue.bind(this);\r\n\r\n if (includeHeaders) {\r\n let headers = this.getHeadersText(excludeHiddenCols);\r\n filteredData.push([this.getHeadersRowIndex(), headers]);\r\n }\r\n\r\n let validRows = this.getValidRows(true);\r\n for (let i = 0; i < validRows.length; i++) {\r\n let rData = [this.validRowsIndex[i], []],\r\n cells = rows[this.validRowsIndex[i]].cells;\r\n for (let k = 0; k < cells.length; k++) {\r\n if (excludeHiddenCols && this.hasExtension('colsVisibility')) {\r\n if (this.extension('colsVisibility').isColHidden(k)) {\r\n continue;\r\n }\r\n }\r\n let cellValue = getContent(cells[k]);\r\n rData[1].push(cellValue);\r\n }\r\n filteredData.push(rData);\r\n }\r\n return filteredData;\r\n }\r\n\r\n /**\r\n * Return the filtered data for a given column index\r\n * @param {any} colIndex Colmun's index\r\n * @param {boolean} [includeHeaders=false] Optional Include headers row\r\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\r\n * @return {Array} Flat list of typed values [data0, data1, data2...]\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredColumnData(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getFilteredDataCol(\r\n colIndex, includeHeaders, true, exclude, false);\r\n }\r\n\r\n /**\r\n * Return the filtered and visible data for a given column index\r\n * @param {any} colIndex Colmun's index\r\n * @param {boolean} [includeHeaders=false] Optional Include headers row\r\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\r\n * @return {Array} Flat list of typed values [data0, data1, data2...]\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getVisibleColumnData(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getFilteredDataCol(\r\n colIndex, includeHeaders, true, exclude, true);\r\n }\r\n\r\n /**\r\n * Return the filtered values for a given column index\r\n * @param {any} colIndex Colmun's index\r\n * @param {boolean} [includeHeaders=false] Optional Include headers row\r\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\r\n * @return {Array} Flat list of values ['value0', 'value1', 'value2'...]\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredColumnValues(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getFilteredDataCol(\r\n colIndex, includeHeaders, false, exclude, false);\r\n }\r\n\r\n /**\r\n * Return the filtered and visible values for a given column index\r\n * @param {any} colIndex Colmun's index\r\n * @param {boolean} [includeHeaders=false] Optional Include headers row\r\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\r\n * @return {Array} Flat list of values ['value0', 'value1', 'value2'...]\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getVisibleColumnValues(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getFilteredDataCol(\r\n colIndex, includeHeaders, false, exclude, true);\r\n }\r\n\r\n /**\r\n * Return the filtered data for a given column index\r\n * @param {Number} colIndex Colmun's index\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [typed=false] Return typed value\r\n * @param {Array} [exclude=[]] List of row indexes to be excluded\r\n * @param {Boolean} [visible=true] Return only filtered and visible data\r\n * (relevant for paging)\r\n * @return {Array} Flat list of values ['val0','val1','val2'...]\r\n * @private\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredDataCol(\r\n colIndex,\r\n includeHeaders = false,\r\n typed = false,\r\n exclude = [],\r\n visible = true\r\n ) {\r\n if (isUndef(colIndex)) {\r\n return [];\r\n }\r\n\r\n let rows = this.dom().rows;\r\n let getContent = typed ? this.getCellData.bind(this) :\r\n this.getCellValue.bind(this);\r\n\r\n // ensure valid rows index do not contain excluded rows and row is\r\n // displayed\r\n let validRows = this.getValidRows(true).filter((rowIdx) => {\r\n return exclude.indexOf(rowIdx) === -1 &&\r\n (visible ?\r\n this.getRowDisplay(rows[rowIdx]) !== 'none' :\r\n true);\r\n });\r\n\r\n // convert column value to expected type if necessary\r\n let validColValues = validRows.map((rowIdx) => {\r\n return getContent(rows[rowIdx].cells[colIndex]);\r\n });\r\n\r\n if (includeHeaders) {\r\n validColValues.unshift(this.getHeadersText()[colIndex]);\r\n }\r\n\r\n return validColValues;\r\n }\r\n\r\n /**\r\n * Get the display value of a row\r\n * @param {HTMLTableRowElement} row DOM element of the row\r\n * @return {String} Usually 'none' or ''\r\n */\r\n getRowDisplay(row) {\r\n return row.style.display;\r\n }\r\n\r\n /**\r\n * Validate/invalidate row by setting the 'validRow' attribute on the row\r\n * @param {Number} rowIndex Index of the row\r\n * @param {Boolean} isValid\r\n */\r\n validateRow(rowIndex, isValid) {\r\n let row = this.dom().rows[rowIndex];\r\n if (!row || !isBoolean(isValid)) {\r\n return;\r\n }\r\n\r\n // always visible rows are valid\r\n if (this.excludeRows.indexOf(rowIndex) !== -1) {\r\n isValid = true;\r\n }\r\n\r\n let displayFlag = isValid ? '' : NONE,\r\n validFlag = isValid ? 'true' : 'false';\r\n row.style.display = displayFlag;\r\n\r\n if (this.paging) {\r\n row.setAttribute('validRow', validFlag);\r\n }\r\n\r\n if (isValid) {\r\n if (this.validRowsIndex.indexOf(rowIndex) === -1) {\r\n this.validRowsIndex.push(rowIndex);\r\n }\r\n\r\n this.onRowValidated(this, rowIndex);\r\n this.emitter.emit('row-validated', this, rowIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Validate all filterable rows\r\n */\r\n validateAllRows() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n this.validRowsIndex = [];\r\n for (let k = this.refRow; k < this.nbFilterableRows; k++) {\r\n this.validateRow(k, true);\r\n }\r\n }\r\n\r\n /**\r\n * Set search value to a given filter\r\n * @param {Number} index Column's index\r\n * @param {String or Array} query searcharg Search term\r\n */\r\n setFilterValue(index, query = '') {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n let slc = this.getFilterElement(index),\r\n fltColType = this.getFilterType(index);\r\n\r\n if (!slc) {\r\n return;\r\n }\r\n\r\n //multiple selects\r\n if (fltColType === MULTIPLE) {\r\n let values = isArray(query) ? query :\r\n query.split(' ' + this.orOperator + ' ');\r\n\r\n if (this.loadFltOnDemand && !this.initialized) {\r\n this.emitter.emit('build-select-filter', this, index,\r\n this.linkedFilters, this.isExternalFlt());\r\n }\r\n\r\n this.emitter.emit('select-options', this, index, values);\r\n }\r\n //checklist\r\n else if (fltColType === CHECKLIST) {\r\n let values = [];\r\n if (this.loadFltOnDemand && !this.initialized) {\r\n this.emitter.emit('build-checklist-filter', this, index,\r\n this.linkedFilters);\r\n }\r\n if (isArray(query)) {\r\n values = query;\r\n } else {\r\n query = matchCase(query, this.caseSensitive);\r\n values = query.split(' ' + this.orOperator + ' ');\r\n }\r\n\r\n this.emitter.emit('select-checklist-options', this, index, values);\r\n }\r\n else {\r\n if (this.loadFltOnDemand && !this.initialized) {\r\n this.emitter.emit('build-select-filter', this, index,\r\n this.linkedFilters, this.isExternalFlt());\r\n }\r\n slc.value = query;\r\n }\r\n }\r\n\r\n /**\r\n * Make passed or default working table element width fixed\r\n * @param {TableElement} tbl optional table DOM element\r\n */\r\n setFixedLayout(tbl = this.dom()) {\r\n let colWidths = this.colWidths;\r\n let tableWidth = tbl.clientWidth;\r\n\r\n if (colWidths.length > 0) {\r\n let defaultWidth = this.defaultColWidth;\r\n tableWidth = colWidths\r\n .reduce((x, y) =>\r\n parseInt((x || defaultWidth), 10) +\r\n parseInt((y || defaultWidth), 10)\r\n );\r\n }\r\n\r\n tbl.style.width = `${tableWidth}px`;\r\n tbl.style.tableLayout = 'fixed';\r\n }\r\n\r\n /**\r\n * Set passed or default working table columns' widths with configuration\r\n * values\r\n * @param {TableElement} tbl optional table DOM element\r\n */\r\n setColWidths(tbl = this.dom()) {\r\n let colWidths = this.colWidths;\r\n if (colWidths.length === 0) {\r\n return;\r\n }\r\n\r\n let colTags = tag(tbl, 'col');\r\n let tblHasColTag = colTags.length > 0;\r\n let frag = !tblHasColTag ? doc.createDocumentFragment() : null;\r\n\r\n this.eachCol((k) => {\r\n let col;\r\n if (tblHasColTag) {\r\n col = colTags[k];\r\n } else {\r\n col = createElm('col');\r\n frag.appendChild(col);\r\n }\r\n col.style.width = colWidths[k];\r\n });\r\n\r\n if (!tblHasColTag) {\r\n tbl.insertBefore(frag, tbl.firstChild);\r\n }\r\n }\r\n\r\n /**\r\n * Exclude rows from actions\r\n */\r\n setExcludeRows() {\r\n if (!this.hasExcludedRows) {\r\n return;\r\n }\r\n this.excludeRows.forEach((rowIdx) => this.validateRow(rowIdx, true));\r\n }\r\n\r\n /**\r\n * Clear all the filters' values\r\n */\r\n clearFilters() {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('before-clearing-filters', this);\r\n this.onBeforeReset(this, this.getFiltersValue());\r\n\r\n for (let i = 0, len = this.fltIds.length; i < len; i++) {\r\n this.setFilterValue(i, '');\r\n }\r\n\r\n this.filter();\r\n\r\n this.onAfterReset(this);\r\n this.emitter.emit('after-clearing-filters', this);\r\n }\r\n\r\n /**\r\n * Return the ID of the current active filter\r\n * @return {String}\r\n */\r\n getActiveFilterId() {\r\n return this.activeFilterId;\r\n }\r\n\r\n /**\r\n * Set the ID of the current active filter\r\n * @param {String} filterId Element ID\r\n */\r\n setActiveFilterId(filterId) {\r\n this.activeFilterId = filterId;\r\n }\r\n\r\n /**\r\n * Return the column index for a given filter ID\r\n * @param {string} [filterId=''] Filter ID\r\n * @return {Number} Column index\r\n */\r\n getColumnIndexFromFilterId(filterId = '') {\r\n let idx = filterId.split('_')[0];\r\n idx = idx.split(this.prfxFlt)[1];\r\n return parseInt(idx, 10);\r\n }\r\n\r\n /**\r\n * Build filter element ID for a given column index\r\n * @param {any} colIndex\r\n * @return {String} Filter element ID string\r\n * @private\r\n */\r\n buildFilterId(colIndex) {\r\n return `${this.prfxFlt}${colIndex}_${this.id}`;\r\n }\r\n\r\n /**\r\n * Check if has external filters\r\n * @returns {Boolean}\r\n * @private\r\n */\r\n isExternalFlt() {\r\n return this.externalFltIds.length > 0;\r\n }\r\n\r\n /**\r\n * Returns styles path\r\n * @returns {String}\r\n * @private\r\n */\r\n getStylePath() {\r\n return defaultsStr(this.config.style_path, this.basePath + 'style/');\r\n }\r\n\r\n /**\r\n * Returns main stylesheet path\r\n * @returns {String}\r\n * @private\r\n */\r\n getStylesheetPath() {\r\n return defaultsStr(this.config.stylesheet,\r\n this.getStylePath() + 'tablefilter.css');\r\n }\r\n\r\n /**\r\n * Returns themes path\r\n * @returns {String}\r\n * @private\r\n */\r\n getThemesPath() {\r\n return defaultsStr(this.config.themes_path,\r\n this.getStylePath() + 'themes/');\r\n }\r\n\r\n /**\r\n * Make specified column's filter active\r\n * @param colIndex Index of a column\r\n */\r\n activateFilter(colIndex) {\r\n if (isUndef(colIndex)) {\r\n return;\r\n }\r\n this.setActiveFilterId(this.getFilterId(colIndex));\r\n }\r\n\r\n /**\r\n * Determine if passed filter column implements exact query match\r\n * @param {Number} colIndex Column index\r\n * @return {Boolean}\r\n */\r\n isExactMatch(colIndex) {\r\n let fltType = this.getFilterType(colIndex);\r\n return this.exactMatchByCol[colIndex] || this.exactMatch ||\r\n fltType !== INPUT;\r\n }\r\n\r\n /**\r\n * Check if passed row is valid\r\n * @param {Number} rowIndex Row index\r\n * @return {Boolean}\r\n */\r\n isRowValid(rowIndex) {\r\n return this.getValidRows().indexOf(rowIndex) !== -1;\r\n }\r\n\r\n /**\r\n * Check if passed row is visible\r\n * @param {Number} rowIndex Row index\r\n * @return {Boolean}\r\n */\r\n isRowDisplayed(rowIndex) {\r\n let row = this.dom().rows[rowIndex];\r\n return this.getRowDisplay(row) === '';\r\n }\r\n\r\n /**\r\n * Check if specified column filter ignores diacritics.\r\n * Note this is only applicable to input filter types.\r\n * @param {Number} colIndex Column index\r\n * @return {Boolean}\r\n */\r\n ignoresDiacritics(colIndex) {\r\n let ignoreDiac = this.ignoreDiacritics;\r\n if (isArray(ignoreDiac)) {\r\n return ignoreDiac[colIndex];\r\n }\r\n return Boolean(ignoreDiac);\r\n }\r\n\r\n /**\r\n * Return clear all text for specified filter column\r\n * @param {Number} colIndex Column index\r\n * @return {String}\r\n */\r\n getClearFilterText(colIndex) {\r\n let clearText = this.clearFilterText;\r\n if (isArray(clearText)) {\r\n return clearText[colIndex];\r\n }\r\n return clearText;\r\n }\r\n\r\n /**\r\n * Column iterator invoking continue and break condition callbacks if any\r\n * then calling supplied callback for each item\r\n * @param {Function} [fn=EMPTY_FN] callback\r\n * @param {Function} [continueFn=EMPTY_FN] continue condition callback\r\n * @param {Function} [breakFn=EMPTY_FN] break condition callback\r\n */\r\n eachCol(fn = EMPTY_FN, continueFn = EMPTY_FN, breakFn = EMPTY_FN) {\r\n let len = this.getCellsNb(this.refRow);\r\n for (let i = 0; i < len; i++) {\r\n if (continueFn(i) === true) {\r\n continue;\r\n }\r\n if (breakFn(i) === true) {\r\n break;\r\n }\r\n fn(i);\r\n }\r\n }\r\n\r\n /**\r\n * Rows iterator starting from supplied row index or defaulting to reference\r\n * row index. Closure function accepts a callback function and optional\r\n * continue and break callbacks.\r\n * @param {Number} startIdx Row index from which filtering starts\r\n */\r\n eachRow(startIdx = this.refRow) {\r\n return (fn = EMPTY_FN, continueFn = EMPTY_FN, breakFn = EMPTY_FN) => {\r\n let rows = this.dom().rows;\r\n let len = this.getRowsNb(true);\r\n for (let i = startIdx; i < len; i++) {\r\n if (continueFn(rows[i], i) === true) {\r\n continue;\r\n }\r\n if (breakFn(rows[i], i) === true) {\r\n break;\r\n }\r\n fn(rows[i], i);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Check if passed script or stylesheet is already imported\r\n * @param {String} filePath Ressource path\r\n * @param {String} type Possible values: 'script' or 'link'\r\n * @return {Boolean}\r\n */\r\n isImported(filePath, type = 'script') {\r\n let imported = false,\r\n attr = type === 'script' ? 'src' : 'href',\r\n files = tag(doc, type);\r\n for (let i = 0, len = files.length; i < len; i++) {\r\n if (isUndef(files[i][attr])) {\r\n continue;\r\n }\r\n if (files[i][attr].match(filePath)) {\r\n imported = true;\r\n break;\r\n }\r\n }\r\n return imported;\r\n }\r\n\r\n /**\r\n * Import script or stylesheet\r\n * @param {String} fileId Ressource ID\r\n * @param {String} filePath Ressource path\r\n * @param {Function} callback Callback\r\n * @param {String} type Possible values: 'script' or 'link'\r\n */\r\n import(fileId, filePath, callback, type = 'script') {\r\n if (this.isImported(filePath, type)) {\r\n return;\r\n }\r\n let o = this,\r\n isLoaded = false,\r\n file,\r\n head = tag(doc, 'head')[0];\r\n\r\n if (type.toLowerCase() === 'link') {\r\n file = createElm('link',\r\n ['id', fileId], ['type', 'text/css'],\r\n ['rel', 'stylesheet'], ['href', filePath]\r\n );\r\n } else {\r\n file = createElm('script',\r\n ['id', fileId],\r\n ['type', 'text/javascript'], ['src', filePath]\r\n );\r\n }\r\n\r\n //Browser <> IE onload event works only for scripts, not for stylesheets\r\n file.onload = file.onreadystatechange = () => {\r\n if (!isLoaded &&\r\n (!this.readyState || this.readyState === 'loaded' ||\r\n this.readyState === 'complete')) {\r\n isLoaded = true;\r\n if (typeof callback === 'function') {\r\n callback.call(null, o);\r\n }\r\n }\r\n };\r\n file.onerror = () => {\r\n throw new Error(`TableFilter could not load: ${filePath}`);\r\n };\r\n head.appendChild(file);\r\n }\r\n\r\n /**\r\n * Check if table has filters grid\r\n * @return {Boolean}\r\n */\r\n isInitialized() {\r\n return this.initialized;\r\n }\r\n\r\n /**\r\n * Get list of filter IDs\r\n * @return {Array} List of filters ids\r\n */\r\n getFiltersId() {\r\n return this.fltIds || [];\r\n }\r\n\r\n /**\r\n * Get filtered (valid) rows indexes\r\n * @param {Boolean} reCalc Force calculation of filtered rows list\r\n * @return {Array} List of row indexes\r\n */\r\n getValidRows(reCalc) {\r\n if (!reCalc) {\r\n return this.validRowsIndex;\r\n }\r\n\r\n this.validRowsIndex = [];\r\n\r\n let eachRow = this.eachRow();\r\n eachRow((row) => {\r\n if (!this.paging) {\r\n if (this.getRowDisplay(row) !== NONE) {\r\n this.validRowsIndex.push(row.rowIndex);\r\n }\r\n } else {\r\n if (row.getAttribute('validRow') === 'true' ||\r\n row.getAttribute('validRow') === null) {\r\n this.validRowsIndex.push(row.rowIndex);\r\n }\r\n }\r\n });\r\n return this.validRowsIndex;\r\n }\r\n\r\n /**\r\n * Get the index of the row containing the filters\r\n * @return {Number}\r\n */\r\n getFiltersRowIndex() {\r\n return this.filtersRowIndex;\r\n }\r\n\r\n /**\r\n * Get the index of the headers row\r\n * @return {Number}\r\n */\r\n getHeadersRowIndex() {\r\n return this.headersRow;\r\n }\r\n\r\n /**\r\n * Get the row index from where the filtering process start (1st filterable\r\n * row)\r\n * @return {Number}\r\n */\r\n getStartRowIndex() {\r\n return this.refRow;\r\n }\r\n\r\n /**\r\n * Get the index of the last row\r\n * @return {Number}\r\n */\r\n getLastRowIndex() {\r\n let nbRows = this.getRowsNb(true);\r\n return (nbRows - 1);\r\n }\r\n\r\n /**\r\n * Determine whether the specified column has one of the passed types\r\n * @param {Number} colIndex Column index\r\n * @param {Array} [types=[]] List of column types\r\n * @return {Boolean}\r\n */\r\n hasType(colIndex, types = []) {\r\n if (this.colTypes.length === 0) {\r\n return false;\r\n }\r\n let colType = this.colTypes[colIndex];\r\n if (isObj(colType)) {\r\n colType = colType.type;\r\n }\r\n return types.indexOf(colType) !== -1;\r\n }\r\n\r\n /**\r\n * Get the header DOM element for a given column index\r\n * @param {Number} colIndex Column index\r\n * @return {Element}\r\n */\r\n getHeaderElement(colIndex) {\r\n let table = this.gridLayout ? this.Mod.gridLayout.headTbl : this.dom();\r\n let tHead = tag(table, 'thead');\r\n let rowIdx = this.getHeadersRowIndex();\r\n let header;\r\n if (tHead.length === 0) {\r\n header = table.rows[rowIdx].cells[colIndex];\r\n }\r\n if (tHead.length === 1) {\r\n header = tHead[0].rows[rowIdx].cells[colIndex];\r\n }\r\n return header;\r\n }\r\n\r\n /**\r\n * Return the list of headers' text\r\n * @param {Boolean} excludeHiddenCols Optional: exclude hidden columns\r\n * @return {Array} list of headers' text\r\n */\r\n getHeadersText(excludeHiddenCols = false) {\r\n let headers = [];\r\n this.eachCol(\r\n (j) => {\r\n let header = this.getHeaderElement(j);\r\n let headerText = getFirstTextNode(header);\r\n headers.push(headerText);\r\n },\r\n // continue condition function\r\n (j) => {\r\n if (excludeHiddenCols && this.hasExtension('colsVisibility')) {\r\n return this.extension('colsVisibility').isColHidden(j);\r\n }\r\n return false;\r\n }\r\n );\r\n return headers;\r\n }\r\n\r\n /**\r\n * Return the filter type for a specified column\r\n * @param {Number} colIndex Column's index\r\n * @return {String}\r\n */\r\n getFilterType(colIndex) {\r\n return this.filterTypes[colIndex];\r\n }\r\n\r\n /**\r\n * Get the total number of filterable rows\r\n * @return {Number}\r\n */\r\n getFilterableRowsNb() {\r\n return this.getRowsNb(false);\r\n }\r\n\r\n /**\r\n * Return the total number of valid rows\r\n * @param {Boolean} [reCalc=false] Forces calculation of filtered rows\r\n * @return {Number}\r\n */\r\n getValidRowsNb(reCalc = false) {\r\n return this.getValidRows(reCalc).length;\r\n }\r\n\r\n /**\r\n * Return the working DOM element\r\n * @return {HTMLTableElement}\r\n */\r\n dom() {\r\n return this.tbl;\r\n }\r\n\r\n /**\r\n * Return the decimal separator for supplied column as per column type\r\n * configuration or global setting\r\n * @param {Number} colIndex Column index\r\n * @returns {String} '.' or ','\r\n */\r\n getDecimal(colIndex) {\r\n let decimal = this.decimalSeparator;\r\n if (this.hasType(colIndex, [FORMATTED_NUMBER])) {\r\n let colType = this.colTypes[colIndex];\r\n if (colType.hasOwnProperty('decimal')) {\r\n decimal = colType.decimal;\r\n }\r\n }\r\n return decimal;\r\n }\r\n\r\n /**\r\n * Get the configuration object (literal object)\r\n * @return {Object}\r\n */\r\n config() {\r\n return this.cfg;\r\n }\r\n}\r\n","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Traditional Chinese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('zh-TW')\n *\n */\naddLocale('zh-TW', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'allowsFullWidth': true,\n 'timeMarkerOptional': true,\n 'units': '毫秒,秒鐘,分鐘,小時,天,個星期|週,個月,年',\n 'weekdays': '星期日|日|週日|星期天,星期一|一|週一,星期二|二|週二,星期三|三|週三,星期四|四|週四,星期五|五|週五,星期六|六|週六',\n 'numerals': '〇,一,二,三,四,五,六,七,八,九',\n 'placeholders': '十,百,千,万',\n 'short': '{yyyy}/{MM}/{dd}',\n 'medium': '{yyyy}年{M}月{d}日',\n 'long': '{yyyy}年{M}月{d}日{time}',\n 'full': '{yyyy}年{M}月{d}日{weekday}{time}',\n 'stamp': '{yyyy}年{M}月{d}日{H}:{mm}{dow}',\n 'time': '{tt}{h}點{mm}分',\n 'past': '{num}{unit}{sign}',\n 'future': '{num}{unit}{sign}',\n 'duration': '{num}{unit}',\n 'timeSuffixes': ',秒,分鐘?,點|時,日|號,,月,年',\n 'ampm': '上午,下午',\n 'modifiers': [\n { 'name': 'day', 'src': '大前天', 'value': -3 },\n { 'name': 'day', 'src': '前天', 'value': -2 },\n { 'name': 'day', 'src': '昨天', 'value': -1 },\n { 'name': 'day', 'src': '今天', 'value': 0 },\n { 'name': 'day', 'src': '明天', 'value': 1 },\n { 'name': 'day', 'src': '後天', 'value': 2 },\n { 'name': 'day', 'src': '大後天', 'value': 3 },\n { 'name': 'sign', 'src': '前', 'value': -1 },\n { 'name': 'sign', 'src': '後', 'value': 1 },\n { 'name': 'shift', 'src': '上|去', 'value': -1 },\n { 'name': 'shift', 'src': '這', 'value': 0 },\n { 'name': 'shift', 'src': '下|明', 'value': 1 }\n ],\n 'parse': [\n '{num}{unit}{sign}',\n '{shift}{unit:5-7}',\n '{year?}{month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift}{weekday}',\n '{year?}{month?}{date}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"zh-TW\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Simplified Chinese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('zh-CN')\n *\n */\naddLocale('zh-CN', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'allowsFullWidth': true,\n 'timeMarkerOptional': true,\n 'units': '毫秒,秒钟,分钟,小时,天,个星期|周,个月,年',\n 'weekdays': '星期日|日|周日|星期天,星期一|一|周一,星期二|二|周二,星期三|三|周三,星期四|四|周四,星期五|五|周五,星期六|六|周六',\n 'numerals': '〇,一,二,三,四,五,六,七,八,九',\n 'placeholders': '十,百,千,万',\n 'short': '{yyyy}-{MM}-{dd}',\n 'medium': '{yyyy}年{M}月{d}日',\n 'long': '{yyyy}年{M}月{d}日{time}',\n 'full': '{yyyy}年{M}月{d}日{weekday}{time}',\n 'stamp': '{yyyy}年{M}月{d}日{H}:{mm}{dow}',\n 'time': '{tt}{h}点{mm}分',\n 'past': '{num}{unit}{sign}',\n 'future': '{num}{unit}{sign}',\n 'duration': '{num}{unit}',\n 'timeSuffixes': ',秒,分钟?,点|时,日|号,,月,年',\n 'ampm': '上午,下午',\n 'modifiers': [\n { 'name': 'day', 'src': '大前天', 'value': -3 },\n { 'name': 'day', 'src': '前天', 'value': -2 },\n { 'name': 'day', 'src': '昨天', 'value': -1 },\n { 'name': 'day', 'src': '今天', 'value': 0 },\n { 'name': 'day', 'src': '明天', 'value': 1 },\n { 'name': 'day', 'src': '后天', 'value': 2 },\n { 'name': 'day', 'src': '大后天', 'value': 3 },\n { 'name': 'sign', 'src': '前', 'value': -1 },\n { 'name': 'sign', 'src': '后', 'value': 1 },\n { 'name': 'shift', 'src': '上|去', 'value': -1 },\n { 'name': 'shift', 'src': '这', 'value': 0 },\n { 'name': 'shift', 'src': '下|明', 'value': 1 }\n ],\n 'parse': [\n '{num}{unit}{sign}',\n '{shift}{unit:5-7}',\n '{year?}{month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift}{weekday}',\n '{year?}{month?}{date}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"zh-CN\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Swedish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('sv')\n *\n */\naddLocale('sv', {\n 'plural': true,\n 'units': 'millisekund:|er,sekund:|er,minut:|er,timm:e|ar,dag:|ar,veck:a|or|an,månad:|er|en+manad:|er|en,år:||et+ar:||et',\n 'months': 'jan:uari|,feb:ruari|,mar:s|,apr:il|,maj,jun:i|,jul:i|,aug:usti|,sep:tember|,okt:ober|,nov:ember|,dec:ember|',\n 'weekdays': 'sön:dag|+son:dag|,mån:dag||dagen+man:dag||dagen,tis:dag|,ons:dag|,tor:sdag|,fre:dag|,lör:dag||dag',\n 'numerals': 'noll,en|ett,två|tva,tre,fyra,fem,sex,sju,åtta|atta,nio,tio',\n 'tokens': 'den,för|for',\n 'articles': 'den',\n 'short': '{yyyy}-{MM}-{dd}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday} {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'förrgår|i förrgår|iförrgår|forrgar|i forrgar|iforrgar', 'value': -2 },\n { 'name': 'day', 'src': 'går|i går|igår|gar|i gar|igar', 'value': -1 },\n { 'name': 'day', 'src': 'dag|i dag|idag', 'value': 0 },\n { 'name': 'day', 'src': 'morgon|i morgon|imorgon', 'value': 1 },\n { 'name': 'day', 'src': 'över morgon|övermorgon|i över morgon|i övermorgon|iövermorgon|over morgon|overmorgon|i over morgon|i overmorgon|iovermorgon', 'value': 2 },\n { 'name': 'sign', 'src': 'sedan|sen', 'value': -1 },\n { 'name': 'sign', 'src': 'om', 'value': 1 },\n { 'name': 'shift', 'src': 'i förra|förra|i forra|forra', 'value': -1 },\n { 'name': 'shift', 'src': 'denna', 'value': 0 },\n { 'name': 'shift', 'src': 'nästa|nasta', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{1?} {num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift} {weekday}',\n '{0?} {weekday?},? {date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{day|weekday}',\n '{shift} {weekday}',\n '{0?} {weekday?},? {date} {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"sv\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Russian locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ru')\n *\n */\naddLocale('ru', {\n 'firstDayOfWeekYear': 1,\n 'units': 'миллисекунд:а|у|ы|,секунд:а|у|ы|,минут:а|у|ы|,час:||а|ов,день|день|дня|дней,недел:я|ю|и|ь|е,месяц:||а|ев|е,год|год|года|лет|году',\n 'months': 'янв:аря||.|арь,фев:раля||р.|раль,мар:та||т,апр:еля||.|ель,мая|май,июн:я||ь,июл:я||ь,авг:уста||.|уст,сен:тября||т.|тябрь,окт:ября||.|ябрь,ноя:бря||брь,дек:абря||.|абрь',\n 'weekdays': 'воскресенье|вс,понедельник|пн,вторник|вт,среда|ср,четверг|чт,пятница|пт,суббота|сб',\n 'numerals': 'ноль,од:ин|ну,дв:а|е,три,четыре,пять,шесть,семь,восемь,девять,десять',\n 'tokens': 'в|на,г\\\\.?(?:ода)?',\n 'short': '{dd}.{MM}.{yyyy}',\n 'medium': '{d} {month} {yyyy} г.',\n 'long': '{d} {month} {yyyy} г., {time}',\n 'full': '{weekday}, {d} {month} {yyyy} г., {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'timeMarkers': 'в',\n 'ampm': ' утра, вечера',\n 'modifiers': [\n { 'name': 'day', 'src': 'позавчера', 'value': -2 },\n { 'name': 'day', 'src': 'вчера', 'value': -1 },\n { 'name': 'day', 'src': 'сегодня', 'value': 0 },\n { 'name': 'day', 'src': 'завтра', 'value': 1 },\n { 'name': 'day', 'src': 'послезавтра', 'value': 2 },\n { 'name': 'sign', 'src': 'назад', 'value': -1 },\n { 'name': 'sign', 'src': 'через', 'value': 1 },\n { 'name': 'shift', 'src': 'прошл:ый|ой|ом', 'value': -1 },\n { 'name': 'shift', 'src': 'следующ:ий|ей|ем', 'value': 1 }\n ],\n 'relative': function(num, unit, ms, format) {\n var numberWithUnit, last = num.toString().slice(-1), mult;\n switch(true) {\n case num >= 11 && num <= 15: mult = 3; break;\n case last == 1: mult = 1; break;\n case last >= 2 && last <= 4: mult = 2; break;\n default: mult = 3;\n }\n numberWithUnit = num + ' ' + this['units'][(mult * 8) + unit];\n switch(format) {\n case 'duration': return numberWithUnit;\n case 'past': return numberWithUnit + ' назад';\n case 'future': return 'через ' + numberWithUnit;\n }\n },\n 'parse': [\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{months} {year?}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{0?} {shift} {weekday}',\n '{date} {months?} {year?} {1?}'\n ],\n 'timeFrontParse': [\n '{0?} {shift} {weekday}',\n '{date} {months?} {year?} {1?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ru\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Portuguese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('pt')\n *\n */\naddLocale('pt', {\n 'plural': true,\n 'units': 'milisegundo:|s,segundo:|s,minuto:|s,hora:|s,dia:|s,semana:|s,mês|mêses|mes|meses,ano:|s',\n 'months': 'jan:eiro|,fev:ereiro|,mar:ço|,abr:il|,mai:o|,jun:ho|,jul:ho|,ago:sto|,set:embro|,out:ubro|,nov:embro|,dez:embro|',\n 'weekdays': 'dom:ingo|,seg:unda-feira|,ter:ça-feira|,qua:rta-feira|,qui:nta-feira|,sex:ta-feira|,sáb:ado||ado',\n 'numerals': 'zero,um:|a,dois|duas,três|tres,quatro,cinco,seis,sete,oito,nove,dez',\n 'tokens': 'a,de',\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} de {Month} de {yyyy}',\n 'long': '{d} de {Month} de {yyyy} {time}',\n 'full': '{Weekday}, {d} de {Month} de {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'às',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'anteontem', 'value': -2 },\n { 'name': 'day', 'src': 'ontem', 'value': -1 },\n { 'name': 'day', 'src': 'hoje', 'value': 0 },\n { 'name': 'day', 'src': 'amanh:ã|a', 'value': 1 },\n { 'name': 'sign', 'src': 'atrás|atras|há|ha', 'value': -1 },\n { 'name': 'sign', 'src': 'daqui a', 'value': 1 },\n { 'name': 'shift', 'src': 'passad:o|a', 'value': -1 },\n { 'name': 'shift', 'src': 'próximo|próxima|proximo|proxima', 'value': 1 }\n ],\n 'parse': [\n '{months} {1?} {year?}',\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{0?} {unit:5-7} {shift}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{0?} {shift} {weekday}',\n '{date} {1?} {months?} {1?} {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {day|weekday}',\n '{date} {1?} {months?} {1?} {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"pt\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Polish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('pl')\n *\n */\naddLocale('pl', {\n 'plural': true,\n 'units': 'milisekund:a|y|,sekund:a|y|,minut:a|y|,godzin:a|y|,dzień|dni|dni,tydzień|tygodnie|tygodni,miesiąc|miesiące|miesięcy,rok|lata|lat',\n 'months': 'sty:cznia||czeń,lut:ego||y,mar:ca||zec,kwi:etnia||ecień,maj:a|,cze:rwca||rwiec,lip:ca||iec,sie:rpnia||rpień,wrz:eśnia||esień,paź:dziernika||dziernik,lis:topada||topad,gru:dnia||dzień',\n 'weekdays': 'nie:dziela||dzielę,pon:iedziałek|,wt:orek|,śr:oda||odę,czw:artek|,piątek|pt,sobota|sb|sobotę',\n 'numerals': 'zero,jeden|jedną,dwa|dwie,trzy,cztery,pięć,sześć,siedem,osiem,dziewięć,dziesięć',\n 'tokens': 'w|we,roku',\n 'short': '{dd}.{MM}.{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full' : '{weekday}, {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'timeMarkers': 'o',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'przedwczoraj', 'value': -2 },\n { 'name': 'day', 'src': 'wczoraj', 'value': -1 },\n { 'name': 'day', 'src': 'dzisiaj|dziś', 'value': 0 },\n { 'name': 'day', 'src': 'jutro', 'value': 1 },\n { 'name': 'day', 'src': 'pojutrze', 'value': 2 },\n { 'name': 'sign', 'src': 'temu|przed', 'value': -1 },\n { 'name': 'sign', 'src': 'za', 'value': 1 },\n { 'name': 'shift', 'src': 'zeszły|zeszła|ostatni|ostatnia', 'value': -1 },\n { 'name': 'shift', 'src': 'następny|następna|następnego|przyszły|przyszła|przyszłego', 'value': 1 }\n ],\n 'relative': function (num, unit, ms, format) {\n // special cases for relative days\n var DAY = 4;\n if (unit === DAY) {\n if (num === 1 && format === 'past') return 'wczoraj';\n if (num === 1 && format === 'future') return 'jutro';\n if (num === 2 && format === 'past') return 'przedwczoraj';\n if (num === 2 && format === 'future') return 'pojutrze';\n }\n\n var mult;\n var last = +num.toFixed(0).slice(-1);\n var last2 = +num.toFixed(0).slice(-2);\n switch (true) {\n case num === 1: mult = 0; break;\n case last2 >= 12 && last2 <= 14: mult = 2; break;\n case last >= 2 && last <= 4: mult = 1; break;\n default: mult = 2;\n }\n var text = this['units'][(mult * 8) + unit];\n var prefix = num + ' ';\n\n // changing to accusative case for 'past' and 'future' formats\n // (only singular feminine unit words are different in accusative, each of which ends with 'a')\n if ((format === 'past' || format === 'future') && num === 1) {\n text = text.replace(/a$/, 'ę');\n }\n\n text = prefix + text;\n switch (format) {\n case 'duration': return text;\n case 'past': return text + ' temu';\n case 'future': return 'za ' + text;\n }\n },\n 'parse': [\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{months} {year?}',\n '{shift} {unit:5-7}',\n '{0} {shift?} {weekday}'\n ],\n 'timeFrontParse': [\n '{day|weekday}',\n '{date} {months} {year?} {1?}',\n '{0?} {shift?} {weekday}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"pl\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Norwegian locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('no')\n *\n */\naddLocale('no', {\n 'plural': true,\n 'units': 'millisekund:|er,sekund:|er,minutt:|er,tim:e|er,dag:|er,uk:e|er|en,måned:|er|en+maaned:|er|en,år:||et+aar:||et',\n 'months': 'januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember',\n 'weekdays': 'søndag|sondag,mandag,tirsdag,onsdag,torsdag,fredag,lørdag|lordag',\n 'numerals': 'en|et,to,tre,fire,fem,seks,sju|syv,åtte,ni,ti',\n 'tokens': 'den,for',\n 'articles': 'den',\n 'short':'d. {d}. {month} {yyyy}',\n 'long': 'den {d}. {month} {yyyy} {H}:{mm}',\n 'full': '{Weekday} den {d}. {month} {yyyy} {H}:{mm}:{ss}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'forgårs|i forgårs|forgaars|i forgaars', 'value': -2 },\n { 'name': 'day', 'src': 'i går|igår|i gaar|igaar', 'value': -1 },\n { 'name': 'day', 'src': 'i dag|idag', 'value': 0 },\n { 'name': 'day', 'src': 'i morgen|imorgen', 'value': 1 },\n { 'name': 'day', 'src': 'overimorgen|overmorgen|over i morgen', 'value': 2 },\n { 'name': 'sign', 'src': 'siden', 'value': -1 },\n { 'name': 'sign', 'src': 'om', 'value': 1 },\n { 'name': 'shift', 'src': 'i siste|siste', 'value': -1 },\n { 'name': 'shift', 'src': 'denne', 'value': 0 },\n { 'name': 'shift', 'src': 'neste', 'value': 1 }\n ],\n 'parse': [\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{1?} {num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{date} {month}',\n '{shift} {weekday}',\n '{0?} {weekday?},? {date?} {month}\\\\.? {year}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"no\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Dutch locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('nl')\n *\n */\naddLocale('nl', {\n 'plural': true,\n 'units': 'milliseconde:|n,seconde:|n,minu:ut|ten,uur,dag:|en,we:ek|ken,maand:|en,jaar',\n 'months': 'jan:uari|,feb:ruari|,maart|mrt,apr:il|,mei,jun:i|,jul:i|,aug:ustus|,sep:tember|,okt:ober|,nov:ember|,dec:ember|',\n 'weekdays': 'zondag|zo,maandag|ma,dinsdag|di,woensdag|wo|woe,donderdag|do,vrijdag|vr|vrij,zaterdag|za',\n 'numerals': 'nul,een,twee,drie,vier,vijf,zes,zeven,acht,negen,tien',\n 'short': '{dd}-{MM}-{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {Month} {yyyy} {time}',\n 'full': '{weekday} {d} {Month} {yyyy} {time}',\n 'stamp': '{dow} {d} {Mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{num} {unit} {sign}',\n 'duration': '{num} {unit}',\n 'timeMarkers': \"'s,om\",\n 'modifiers': [\n { 'name': 'day', 'src': 'gisteren', 'value': -1 },\n { 'name': 'day', 'src': 'vandaag', 'value': 0 },\n { 'name': 'day', 'src': 'morgen', 'value': 1 },\n { 'name': 'day', 'src': 'overmorgen', 'value': 2 },\n { 'name': 'sign', 'src': 'geleden', 'value': -1 },\n { 'name': 'sign', 'src': 'vanaf nu', 'value': 1 },\n { 'name': 'shift', 'src': 'laatste|vorige|afgelopen', 'value': -1 },\n { 'name': 'shift', 'src': 'volgend:|e', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{0?} {unit:5-7} {shift}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"nl\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Korean locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ko')\n *\n */\naddLocale('ko', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'units': '밀리초,초,분,시간,일,주,개월|달,년|해',\n 'weekdays': '일:요일|,월:요일|,화:요일|,수:요일|,목:요일|,금:요일|,토:요일|',\n 'numerals': '영|제로,일|한,이,삼,사,오,육,칠,팔,구,십',\n 'short': '{yyyy}.{MM}.{dd}',\n 'medium': '{yyyy}년 {M}월 {d}일',\n 'long': '{yyyy}년 {M}월 {d}일 {time}',\n 'full': '{yyyy}년 {M}월 {d}일 {weekday} {time}',\n 'stamp': '{yyyy}년 {M}월 {d}일 {H}:{mm} {dow}',\n 'time': '{tt} {h}시 {mm}분',\n 'past': '{num}{unit} {sign}',\n 'future': '{num}{unit} {sign}',\n 'duration': '{num}{unit}',\n 'timeSuffixes': ',초,분,시,일,,월,년',\n 'ampm': '오전,오후',\n 'modifiers': [\n { 'name': 'day', 'src': '그저께', 'value': -2 },\n { 'name': 'day', 'src': '어제', 'value': -1 },\n { 'name': 'day', 'src': '오늘', 'value': 0 },\n { 'name': 'day', 'src': '내일', 'value': 1 },\n { 'name': 'day', 'src': '모레', 'value': 2 },\n { 'name': 'sign', 'src': '전', 'value': -1 },\n { 'name': 'sign', 'src': '후', 'value': 1 },\n { 'name': 'shift', 'src': '지난|작', 'value': -1 },\n { 'name': 'shift', 'src': '이번|올', 'value': 0 },\n { 'name': 'shift', 'src': '다음|내', 'value': 1 }\n ],\n 'parse': [\n '{num}{unit} {sign}',\n '{shift?} {unit:5-7}',\n '{year?} {month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift} {unit:5?} {weekday}',\n '{year?} {month?} {date} {weekday?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ko\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Japanese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ja')\n *\n */\naddLocale('ja', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'allowsFullWidth': true,\n 'timeMarkerOptional': true,\n 'firstDayOfWeek': 0,\n 'firstDayOfWeekYear': 1,\n 'units': 'ミリ秒,秒,分,時間,日,週間|週,ヶ月|ヵ月|月,年|年度',\n 'weekdays': '日:曜日||曜,月:曜日||曜,火:曜日||曜,水:曜日||曜,木:曜日||曜,金:曜日||曜,土:曜日||曜',\n 'numerals': '〇,一,二,三,四,五,六,七,八,九',\n 'placeholders': '十,百,千,万',\n 'timeSuffixes': ',秒,分,時,日,,月,年度?',\n 'short': '{yyyy}/{MM}/{dd}',\n 'medium': '{yyyy}年{M}月{d}日',\n 'long': '{yyyy}年{M}月{d}日{time}',\n 'full': '{yyyy}年{M}月{d}日{time} {weekday}',\n 'stamp': '{yyyy}年{M}月{d}日 {H}:{mm} {dow}',\n 'time': '{tt}{h}時{mm}分',\n 'past': '{num}{unit}{sign}',\n 'future': '{num}{unit}{sign}',\n 'duration': '{num}{unit}',\n 'ampm': '午前,午後',\n 'modifiers': [\n { 'name': 'day', 'src': '一昨々日|前々々日', 'value': -3 },\n { 'name': 'day', 'src': '一昨日|おととい|前々日', 'value': -2 },\n { 'name': 'day', 'src': '昨日|前日', 'value': -1 },\n { 'name': 'day', 'src': '今日|当日|本日', 'value': 0 },\n { 'name': 'day', 'src': '明日|翌日|次日', 'value': 1 },\n { 'name': 'day', 'src': '明後日|翌々日', 'value': 2 },\n { 'name': 'day', 'src': '明々後日|翌々々日', 'value': 3 },\n { 'name': 'sign', 'src': '前', 'value': -1 },\n { 'name': 'sign', 'src': '後', 'value': 1 },\n { 'name': 'edge', 'src': '始|初日|頭', 'value': -2 },\n { 'name': 'edge', 'src': '末|尻', 'value': 2 },\n { 'name': 'edge', 'src': '末日', 'value': 1 },\n { 'name': 'shift', 'src': '一昨々|前々々', 'value': -3 },\n { 'name': 'shift', 'src': '一昨|前々|先々', 'value': -2 },\n { 'name': 'shift', 'src': '先|昨|去|前', 'value': -1 },\n { 'name': 'shift', 'src': '今|本|当', 'value': 0 },\n { 'name': 'shift', 'src': '来|明|翌|次', 'value': 1 },\n { 'name': 'shift', 'src': '明後|翌々|次々|再来|さ来', 'value': 2 },\n { 'name': 'shift', 'src': '明々後|翌々々', 'value': 3 }\n ],\n 'parse': [\n '{month}{edge}',\n '{num}{unit}{sign}',\n '{year?}{month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift}{unit:5}{weekday?}',\n '{shift}{unit:7}{month}{edge}',\n '{shift}{unit:7}{month?}{date?}',\n '{shift}{unit:6}{edge?}{date?}',\n '{year?}{month?}{date}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ja\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Italian locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('it')\n *\n */\naddLocale('it', {\n 'plural': true,\n 'units': 'millisecond:o|i,second:o|i,minut:o|i,or:a|e,giorn:o|i,settiman:a|e,mes:e|i,ann:o|i',\n 'months': 'gen:naio|,feb:braio|,mar:zo|,apr:ile|,mag:gio|,giu:gno|,lug:lio|,ago:sto|,set:tembre|,ott:obre|,nov:embre|,dic:embre|',\n 'weekdays': 'dom:enica|,lun:edì||edi,mar:tedì||tedi,mer:coledì||coledi,gio:vedì||vedi,ven:erdì||erdi,sab:ato|',\n 'numerals': \"zero,un:|a|o|',due,tre,quattro,cinque,sei,sette,otto,nove,dieci\",\n 'tokens': \"l'|la|il\",\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday}, {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{num} {unit} {sign}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'alle',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'ieri', 'value': -1 },\n { 'name': 'day', 'src': 'oggi', 'value': 0 },\n { 'name': 'day', 'src': 'domani', 'value': 1 },\n { 'name': 'day', 'src': 'dopodomani', 'value': 2 },\n { 'name': 'sign', 'src': 'fa', 'value': -1 },\n { 'name': 'sign', 'src': 'da adesso', 'value': 1 },\n { 'name': 'shift', 'src': 'scors:o|a', 'value': -1 },\n { 'name': 'shift', 'src': 'prossim:o|a', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{0?} {unit:5-7} {shift}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{day|weekday} {shift?}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{day|weekday} {shift?}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"it\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * French locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('fr')\n *\n */\naddLocale('fr', {\n 'plural': true,\n 'units': 'milliseconde:|s,seconde:|s,minute:|s,heure:|s,jour:|s,semaine:|s,mois,an:|s|née|nee',\n 'months': 'janv:ier|,févr:ier|+fevr:ier|,mars,avr:il|,mai,juin,juil:let|,août,sept:embre|,oct:obre|,nov:embre|,déc:embre|+dec:embre|',\n 'weekdays': 'dim:anche|,lun:di|,mar:di|,mer:credi|,jeu:di|,ven:dredi|,sam:edi|',\n 'numerals': 'zéro,un:|e,deux,trois,quatre,cinq,six,sept,huit,neuf,dix',\n 'tokens': \"l'|la|le,er\",\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday} {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'à',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'hier', 'value': -1 },\n { 'name': 'day', 'src': \"aujourd'hui\", 'value': 0 },\n { 'name': 'day', 'src': 'demain', 'value': 1 },\n { 'name': 'sign', 'src': 'il y a', 'value': -1 },\n { 'name': 'sign', 'src': \"dans|d'ici\", 'value': 1 },\n { 'name': 'shift', 'src': 'derni:èr|er|ère|ere', 'value': -1 },\n { 'name': 'shift', 'src': 'prochain:|e', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{sign} {num} {unit}',\n '{0?} {unit:5-7} {shift}'\n ],\n 'timeParse': [\n '{day|weekday} {shift?}',\n '{weekday?},? {0?} {date}{1?} {months}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{0?} {weekday} {shift}',\n '{weekday?},? {0?} {date}{1?} {months}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"fr\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Finnish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('fi')\n *\n */\naddLocale('fi', {\n 'plural': true,\n 'units': 'millisekun:ti|tia|nin|teja|tina,sekun:ti|tia|nin|teja|tina,minuut:ti|tia|in|teja|tina,tun:ti|tia|nin|teja|tina,päiv:ä|ää|än|iä|änä,viik:ko|koa|on|olla|koja|kona,kuukau:si|tta|den+kuussa,vuo:si|tta|den|sia|tena|nna',\n 'months': 'tammi:kuuta||kuu,helmi:kuuta||kuu,maalis:kuuta||kuu,huhti:kuuta||kuu,touko:kuuta||kuu,kesä:kuuta||kuu,heinä:kuuta||kuu,elo:kuuta||kuu,syys:kuuta||kuu,loka:kuuta||kuu,marras:kuuta||kuu,joulu:kuuta||kuu',\n 'weekdays': 'su:nnuntai||nnuntaina,ma:anantai||anantaina,ti:istai||istaina,ke:skiviikko||skiviikkona,to:rstai||rstaina,pe:rjantai||rjantaina,la:uantai||uantaina',\n 'numerals': 'nolla,yksi|ensimmäinen,kaksi|toinen,kolm:e|as,neljä:|s,vii:si|des,kuu:si|des,seitsemä:n|s,kahdeksa:n|s,yhdeksä:n|s,kymmene:n|s',\n 'short': '{d}.{M}.{yyyy}',\n 'medium': '{d}. {month} {yyyy}',\n 'long': '{d}. {month} {yyyy} klo {time}',\n 'full': '{weekday} {d}. {month} {yyyy} klo {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}.{mm}',\n 'timeMarkers': 'klo,kello',\n 'timeSeparator': '.',\n 'ordinalSuffix': '.',\n 'relative': function(num, unit, ms, format) {\n var units = this['units'];\n function numberWithUnit(mult) {\n return num + ' ' + units[(8 * mult) + unit];\n }\n function baseUnit() {\n return numberWithUnit(num === 1 ? 0 : 1);\n }\n switch(format) {\n case 'duration': return baseUnit();\n case 'past': return baseUnit() + ' sitten';\n case 'future': return numberWithUnit(2) + ' kuluttua';\n }\n },\n 'modifiers': [\n { 'name': 'day', 'src': 'toissa päivänä', 'value': -2 },\n { 'name': 'day', 'src': 'eilen|eilistä', 'value': -1 },\n { 'name': 'day', 'src': 'tänään', 'value': 0 },\n { 'name': 'day', 'src': 'huomenna|huomista', 'value': 1 },\n { 'name': 'day', 'src': 'ylihuomenna|ylihuomista', 'value': 2 },\n { 'name': 'sign', 'src': 'sitten|aiemmin', 'value': -1 },\n { 'name': 'sign', 'src': 'päästä|kuluttua|myöhemmin', 'value': 1 },\n { 'name': 'edge', 'src': 'lopussa', 'value': 2 },\n { 'name': 'edge', 'src': 'ensimmäinen|ensimmäisenä', 'value': -2 },\n { 'name': 'shift', 'src': 'edel:linen|lisenä', 'value': -1 },\n { 'name': 'shift', 'src': 'viime', 'value': -1 },\n { 'name': 'shift', 'src': 'tä:llä|ssä|nä|mä', 'value': 0 },\n { 'name': 'shift', 'src': 'seuraava|seuraavana|tuleva|tulevana|ensi', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {day|weekday}',\n '{num?} {unit} {sign}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"fi\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Spanish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('es')\n *\n */\naddLocale('es', {\n 'plural': true,\n 'units': 'milisegundo:|s,segundo:|s,minuto:|s,hora:|s,día|días|dia|dias,semana:|s,mes:|es,año|años|ano|anos',\n 'months': 'ene:ro|,feb:rero|,mar:zo|,abr:il|,may:o|,jun:io|,jul:io|,ago:sto|,sep:tiembre|,oct:ubre|,nov:iembre|,dic:iembre|',\n 'weekdays': 'dom:ingo|,lun:es|,mar:tes|,mié:rcoles|+mie:rcoles|,jue:ves|,vie:rnes|,sáb:ado|+sab:ado|',\n 'numerals': 'cero,uno,dos,tres,cuatro,cinco,seis,siete,ocho,nueve,diez',\n 'tokens': 'el,la,de',\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} de {Month} de {yyyy}',\n 'long': '{d} de {Month} de {yyyy} {time}',\n 'full': '{weekday}, {d} de {month} de {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'a las',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'anteayer', 'value': -2 },\n { 'name': 'day', 'src': 'ayer', 'value': -1 },\n { 'name': 'day', 'src': 'hoy', 'value': 0 },\n { 'name': 'day', 'src': 'mañana|manana', 'value': 1 },\n { 'name': 'sign', 'src': 'hace', 'value': -1 },\n { 'name': 'sign', 'src': 'dentro de', 'value': 1 },\n { 'name': 'shift', 'src': 'pasad:o|a', 'value': -1 },\n { 'name': 'shift', 'src': 'próximo|próxima|proximo|proxima', 'value': 1 }\n ],\n 'parse': [\n '{months} {2?} {year?}',\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{0?}{1?} {unit:5-7} {shift}',\n '{0?}{1?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday} {shift?}',\n '{date} {2?} {months?}\\\\.? {2?} {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {weekday} {shift?}',\n '{date} {2?} {months?}\\\\.? {2?} {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"es\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * German locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('de')\n *\n */\naddLocale('de', {\n 'plural': true,\n 'units': 'Millisekunde:|n,Sekunde:|n,Minute:|n,Stunde:|n,Tag:|en,Woche:|n,Monat:|en,Jahr:|en|e',\n 'months': 'Jan:uar|,Feb:ruar|,M:är|ärz|ar|arz,Apr:il|,Mai,Juni,Juli,Aug:ust|,Sept:ember|,Okt:ober|,Nov:ember|,Dez:ember|',\n 'weekdays': 'So:nntag|,Mo:ntag|,Di:enstag|,Mi:ttwoch|,Do:nnerstag|,Fr:eitag|,Sa:mstag|',\n 'numerals': 'null,ein:|e|er|en|em,zwei,drei,vier,fuenf,sechs,sieben,acht,neun,zehn',\n 'tokens': 'der',\n 'short': '{dd}.{MM}.{yyyy}',\n 'medium': '{d}. {Month} {yyyy}',\n 'long': '{d}. {Month} {yyyy} {time}',\n 'full': '{Weekday}, {d}. {Month} {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'um',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'vorgestern', 'value': -2 },\n { 'name': 'day', 'src': 'gestern', 'value': -1 },\n { 'name': 'day', 'src': 'heute', 'value': 0 },\n { 'name': 'day', 'src': 'morgen', 'value': 1 },\n { 'name': 'day', 'src': 'übermorgen|ubermorgen|uebermorgen', 'value': 2 },\n { 'name': 'sign', 'src': 'vor:|her', 'value': -1 },\n { 'name': 'sign', 'src': 'in', 'value': 1 },\n { 'name': 'shift', 'src': 'letzte:|r|n|s', 'value': -1 },\n { 'name': 'shift', 'src': 'nächste:|r|n|s+nachste:|r|n|s+naechste:|r|n|s+kommende:n|r', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift} {weekday}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"de\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Danish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('da')\n *\n */\naddLocale('da', {\n 'plural': true,\n 'units': 'millisekund:|er,sekund:|er,minut:|ter,tim:e|er,dag:|e,ug:e|er|en,måned:|er|en+maaned:|er|en,år:||et+aar:||et',\n 'months': 'jan:uar|,feb:ruar|,mar:ts|,apr:il|,maj,jun:i|,jul:i|,aug:ust|,sep:tember|,okt:ober|,nov:ember|,dec:ember|',\n 'weekdays': 'søn:dag|+son:dag|,man:dag|,tir:sdag|,ons:dag|,tor:sdag|,fre:dag|,lør:dag|+lor:dag|',\n 'numerals': 'nul,en|et,to,tre,fire,fem,seks,syv,otte,ni,ti',\n 'tokens': 'den,for',\n 'articles': 'den',\n 'short': '{dd}-{MM}-{yyyy}',\n 'medium': '{d}. {month} {yyyy}',\n 'long': '{d}. {month} {yyyy} {time}',\n 'full': '{weekday} d. {d}. {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'forgårs|i forgårs|forgaars|i forgaars', 'value': -2 },\n { 'name': 'day', 'src': 'i går|igår|i gaar|igaar', 'value': -1 },\n { 'name': 'day', 'src': 'i dag|idag', 'value': 0 },\n { 'name': 'day', 'src': 'i morgen|imorgen', 'value': 1 },\n { 'name': 'day', 'src': 'over morgon|overmorgen|i over morgen|i overmorgen|iovermorgen', 'value': 2 },\n { 'name': 'sign', 'src': 'siden', 'value': -1 },\n { 'name': 'sign', 'src': 'om', 'value': 1 },\n { 'name': 'shift', 'src': 'i sidste|sidste', 'value': -1 },\n { 'name': 'shift', 'src': 'denne', 'value': 0 },\n { 'name': 'shift', 'src': 'næste|naeste', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{1?} {num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift} {weekday}',\n '{0?} {weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"da\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Catalan locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ca')\n *\n */\naddLocale('ca', {\n 'plural': true,\n 'units': 'milisegon:|s,segon:|s,minut:|s,hor:a|es,di:a|es,setman:a|es,mes:|os,any:|s',\n 'months': 'gen:er|,febr:er|,mar:ç|,abr:il|,mai:g|,jun:y|,jul:iol|,ag:ost|,set:embre|,oct:ubre|,nov:embre|,des:embre|',\n 'weekdays': 'diumenge|dg,dilluns|dl,dimarts|dt,dimecres|dc,dijous|dj,divendres|dv,dissabte|ds',\n 'numerals': 'zero,un,dos,tres,quatre,cinc,sis,set,vuit,nou,deu',\n 'tokens': 'el,la,de',\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday} {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'a las',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': \"abans d'ahir\", 'value': -2 },\n { 'name': 'day', 'src': 'ahir', 'value': -1 },\n { 'name': 'day', 'src': 'avui', 'value': 0 },\n { 'name': 'day', 'src': 'demà|dema', 'value': 1 },\n { 'name': 'sign', 'src': 'fa', 'value': -1 },\n { 'name': 'sign', 'src': 'en', 'value': 1 },\n { 'name': 'shift', 'src': 'passat', 'value': -1 },\n { 'name': 'shift', 'src': 'el proper|la propera', 'value': 1 }\n ],\n 'parse': [\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{0?}{1?} {unit:5-7} {shift}',\n '{0?}{1?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift} {weekday}',\n '{weekday} {shift}',\n '{date?} {2?} {months}\\\\.? {2?} {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ca\" locale.","'use strict';\n\nrequire('./ca');\nrequire('./da');\nrequire('./de');\nrequire('./es');\nrequire('./fi');\nrequire('./fr');\nrequire('./it');\nrequire('./ja');\nrequire('./ko');\nrequire('./nl');\nrequire('./no');\nrequire('./pl');\nrequire('./pt');\nrequire('./ru');\nrequire('./sv');\nrequire('./zh-CN');\nrequire('./zh-TW');\n\nmodule.exports = require('sugar-core');","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"years\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"weeks\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'union': function(range) {\n return new Range(\n this.start < range.start ? this.start : range.start,\n this.end > range.end ? this.end : range.end\n );\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"union\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeIsValid = require('./internal/rangeIsValid'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'toString': function() {\n return rangeIsValid(this) ? this.start + '..' + this.end : 'Invalid Range';\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"toString\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeEvery = require('./internal/rangeEvery'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'toArray': function() {\n return rangeEvery(this);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"toArray\" on Range.prototype.","'use strict';\n\nvar classChecks = require('../../common/var/classChecks');\n\nvar isString = classChecks.isString;\n\nfunction getRangeMemberNumericValue(m) {\n return isString(m) ? m.charCodeAt(0) : m;\n}\n\nmodule.exports = getRangeMemberNumericValue;","'use strict';\n\nvar Range = require('./internal/Range'),\n mathAliases = require('../common/var/mathAliases'),\n rangeIsValid = require('./internal/rangeIsValid'),\n defineOnPrototype = require('../common/internal/defineOnPrototype'),\n getRangeMemberNumericValue = require('./internal/getRangeMemberNumericValue');\n\nvar abs = mathAliases.abs;\n\ndefineOnPrototype(Range, {\n\n 'span': function() {\n var n = getRangeMemberNumericValue(this.end) - getRangeMemberNumericValue(this.start);\n return rangeIsValid(this) ? abs(n) + 1 : NaN;\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"span\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"seconds\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"months\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"minutes\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"milliseconds\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeIsValid = require('./internal/rangeIsValid'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'isValid': function() {\n return rangeIsValid(this);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"isValid\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'intersect': function(range) {\n if (range.start > this.end || range.end < this.start) {\n return new Range(NaN, NaN);\n }\n return new Range(\n this.start > range.start ? this.start : range.start,\n this.end < range.end ? this.end : range.end\n );\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"intersect\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"hours\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeEvery = require('./internal/rangeEvery'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'every': function(amount, everyFn) {\n return rangeEvery(this, amount, false, everyFn);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"every\" on Range.prototype.","'use strict';\n\nvar CommonChars = require('../var/CommonChars');\n\nvar HALF_WIDTH_PERIOD = CommonChars.HALF_WIDTH_PERIOD;\n\nfunction periodSplit(str) {\n return str.split(HALF_WIDTH_PERIOD);\n}\n\nmodule.exports = periodSplit;","'use strict';\n\nvar periodSplit = require('../../common/internal/periodSplit');\n\nfunction getPrecision(n) {\n var split = periodSplit(n.toString());\n return split[1] ? split[1].length : 0;\n}\n\nmodule.exports = getPrecision;","'use strict';\n\nvar mathAliases = require('../../common/var/mathAliases'),\n getPrecision = require('./getPrecision');\n\nvar max = mathAliases.max;\n\nfunction getGreaterPrecision(n1, n2) {\n return max(getPrecision(n1), getPrecision(n2));\n}\n\nmodule.exports = getGreaterPrecision;","'use strict';\n\nvar chr = require('../../common/var/chr');\n\nfunction incrementString(current, amount) {\n return chr(current.charCodeAt(0) + amount);\n}\n\nmodule.exports = incrementString;","'use strict';\n\nvar withPrecision = require('../../common/internal/withPrecision');\n\nfunction incrementNumber(current, amount, precision) {\n return withPrecision(current + amount, precision);\n}\n\nmodule.exports = incrementNumber;","'use strict';\n\nfunction valueIsNotInfinite(m) {\n return m !== -Infinity && m !== Infinity;\n}\n\nmodule.exports = valueIsNotInfinite;","'use strict';\n\nvar valueIsNotInfinite = require('./valueIsNotInfinite'),\n getRangeMemberPrimitiveValue = require('./getRangeMemberPrimitiveValue');\n\nfunction isValidRangeMember(m) {\n var val = getRangeMemberPrimitiveValue(m);\n return (!!val || val === 0) && valueIsNotInfinite(m);\n}\n\nmodule.exports = isValidRangeMember;","'use strict';\n\nvar MULTIPLIERS = require('../var/MULTIPLIERS'),\n DURATION_UNITS = require('../var/DURATION_UNITS'),\n Range = require('./Range'),\n trunc = require('../../common/var/trunc'),\n forEach = require('../../common/internal/forEach'),\n rangeEvery = require('./rangeEvery'),\n simpleCapitalize = require('../../common/internal/simpleCapitalize'),\n defineOnPrototype = require('../../common/internal/defineOnPrototype');\n\nfunction buildDateRangeUnits() {\n var methods = {};\n forEach(DURATION_UNITS.split('|'), function(unit, i) {\n var name = unit + 's', mult, fn;\n if (i < 4) {\n fn = function() {\n return rangeEvery(this, unit, true);\n };\n } else {\n mult = MULTIPLIERS[simpleCapitalize(name)];\n fn = function() {\n return trunc((this.end - this.start) / mult);\n };\n }\n methods[name] = fn;\n });\n defineOnPrototype(Range, methods);\n}\n\nmodule.exports = buildDateRangeUnits;","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"days\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'contains': function(el) {\n if (el == null) return false;\n if (el.start && el.end) {\n return el.start >= this.start && el.start <= this.end &&\n el.end >= this.start && el.end <= this.end;\n } else {\n return el >= this.start && el <= this.end;\n }\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"contains\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'clone': function() {\n return new Range(this.start, this.end);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"clone\" on Range.prototype.","'use strict';\n\nvar cloneRangeMember = require('./cloneRangeMember');\n\nfunction rangeClamp(range, obj) {\n var clamped,\n start = range.start,\n end = range.end,\n min = end < start ? end : start,\n max = start > end ? start : end;\n if (obj < min) {\n clamped = min;\n } else if (obj > max) {\n clamped = max;\n } else {\n clamped = obj;\n }\n return cloneRangeMember(clamped);\n}\n\nmodule.exports = rangeClamp;","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeClamp = require('./internal/rangeClamp'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'clamp': function(el) {\n return rangeClamp(this, el);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"clamp\" on Range.prototype.","'use strict';\n\nvar DURATION_UNITS = require('./DURATION_UNITS');\n\nmodule.exports = RegExp('(\\\\d+)?\\\\s*('+ DURATION_UNITS +')s?', 'i');","'use strict';\n\nvar DURATION_UNITS = require('./DURATION_UNITS');\n\nmodule.exports = '((?:\\\\d+)?\\\\s*(?:' + DURATION_UNITS + '))s?';","'use strict';\n\nvar FULL_CAPTURED_DURATION = require('./FULL_CAPTURED_DURATION');\n\nmodule.exports = {\n RANGE_REG_FROM_TO: /(?:from)?\\s*(.+)\\s+(?:to|until)\\s+(.+)$/i,\n RANGE_REG_REAR_DURATION: RegExp('(.+)\\\\s*for\\\\s*' + FULL_CAPTURED_DURATION, 'i'),\n RANGE_REG_FRONT_DURATION: RegExp('(?:for)?\\\\s*'+ FULL_CAPTURED_DURATION +'\\\\s*(?:starting)?\\\\s(?:at\\\\s)?(.+)', 'i')\n};","'use strict';\n\nvar Range = require('./Range'),\n DurationTextFormats = require('../var/DurationTextFormats'),\n incrementDate = require('./incrementDate'),\n getDateForRange = require('./getDateForRange'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n getDateIncrementObject = require('./getDateIncrementObject');\n\nvar sugarDate = namespaceAliases.sugarDate,\n RANGE_REG_FROM_TO = DurationTextFormats.RANGE_REG_FROM_TO,\n RANGE_REG_REAR_DURATION = DurationTextFormats.RANGE_REG_REAR_DURATION,\n RANGE_REG_FRONT_DURATION = DurationTextFormats.RANGE_REG_FRONT_DURATION;\n\nfunction createDateRangeFromString(str) {\n var match, datetime, duration, dio, start, end;\n if (sugarDate.get && (match = str.match(RANGE_REG_FROM_TO))) {\n start = getDateForRange(match[1].replace('from', 'at'));\n end = sugarDate.get(start, match[2]);\n return new Range(start, end);\n }\n if (match = str.match(RANGE_REG_FRONT_DURATION)) {\n duration = match[1];\n datetime = match[2];\n }\n if (match = str.match(RANGE_REG_REAR_DURATION)) {\n datetime = match[1];\n duration = match[2];\n }\n if (datetime && duration) {\n start = getDateForRange(datetime);\n dio = getDateIncrementObject(duration);\n end = incrementDate(start, dio[0], dio[1]);\n } else {\n start = str;\n }\n return new Range(getDateForRange(start), getDateForRange(end));\n}\n\nmodule.exports = createDateRangeFromString;","'use strict';\n\nvar Range = require('../internal/Range'),\n classChecks = require('../../common/var/classChecks'),\n getDateForRange = require('../internal/getDateForRange'),\n createDateRangeFromString = require('../internal/createDateRangeFromString');\n\nvar isString = classChecks.isString;\n\nvar DateRangeConstructor = function(start, end) {\n if (arguments.length === 1 && isString(start)) {\n return createDateRangeFromString(start);\n }\n return new Range(getDateForRange(start), getDateForRange(end));\n};\n\nmodule.exports = DateRangeConstructor;","'use strict';\n\nvar Sugar = require('sugar-core'),\n DateRangeConstructor = require('../range/var/DateRangeConstructor');\n\nSugar.Date.defineStatic({\n\n 'range': DateRangeConstructor\n\n});\n\nmodule.exports = Sugar.Date.range;","'use strict';\n\n// Static Methods\nrequire('../date/range');\n\n// Prototype Methods\nrequire('./clamp');\nrequire('./clone');\nrequire('./contains');\nrequire('./days');\nrequire('./every');\nrequire('./hours');\nrequire('./intersect');\nrequire('./isValid');\nrequire('./milliseconds');\nrequire('./minutes');\nrequire('./months');\nrequire('./seconds');\nrequire('./span');\nrequire('./toArray');\nrequire('./toString');\nrequire('./union');\nrequire('./weeks');\nrequire('./years');\n\nmodule.exports = require('sugar-core');","'use strict';\n\nvar Sugar = require('sugar-core'),\n _dateOptions = require('./var/_dateOptions');\n\nmodule.exports = Sugar.Date.setOption;","'use strict';\n\nvar Sugar = require('sugar-core'),\n _dateOptions = require('./var/_dateOptions');\n\nmodule.exports = Sugar.Date.getOption;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksAgo;","'use strict';\n\nvar Sugar = require('sugar-core'),\n setWeekday = require('./internal/setWeekday');\n\nSugar.Date.defineInstance({\n\n 'setWeekday': function(date, dow) {\n return setWeekday(date, dow);\n }\n\n});\n\nmodule.exports = Sugar.Date.setWeekday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n _utc = require('../common/var/_utc');\n\nSugar.Date.defineInstance({\n\n 'setUTC': function(date, on) {\n return _utc(date, on);\n }\n\n});\n\nmodule.exports = Sugar.Date.setUTC;","'use strict';\n\nvar Sugar = require('sugar-core'),\n setISOWeekNumber = require('./internal/setISOWeekNumber');\n\nSugar.Date.defineInstance({\n\n 'setISOWeek': function(date, num) {\n return setISOWeekNumber(date, num);\n }\n\n});\n\nmodule.exports = Sugar.Date.setISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core'),\n updateDate = require('./internal/updateDate'),\n collectUpdateDateArguments = require('./internal/collectUpdateDateArguments');\n\nSugar.Date.defineInstanceWithArguments({\n\n 'set': function(d, args) {\n args = collectUpdateDateArguments(args);\n return updateDate(d, args[0], args[1]);\n }\n\n});\n\nmodule.exports = Sugar.Date.set;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core'),\n advanceDateWithArgs = require('./internal/advanceDateWithArgs');\n\nSugar.Date.defineInstanceWithArguments({\n\n 'rewind': function(d, args) {\n return advanceDateWithArgs(d, args, -1);\n }\n\n});\n\nmodule.exports = Sugar.Date.rewind;","'use strict';\n\nvar iterateOverDateParams = require('./iterateOverDateParams');\n\nfunction getUnitIndexForParamName(name) {\n var params = {}, unitIndex;\n params[name] = 1;\n iterateOverDateParams(params, function(name, val, unit, i) {\n unitIndex = i;\n return false;\n });\n return unitIndex;\n}\n\nmodule.exports = getUnitIndexForParamName;","'use strict';\n\nvar Sugar = require('sugar-core'),\n DateUnitIndexes = require('./var/DateUnitIndexes'),\n moveToBeginningOfUnit = require('./internal/moveToBeginningOfUnit'),\n getUnitIndexForParamName = require('./internal/getUnitIndexForParamName');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nSugar.Date.defineInstance({\n\n 'reset': function(date, unit, localeCode) {\n var unitIndex = unit ? getUnitIndexForParamName(unit) : DAY_INDEX;\n moveToBeginningOfUnit(date, unitIndex, localeCode);\n return date;\n }\n\n});\n\nmodule.exports = Sugar.Date.reset;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate'),\n dateRelative = require('./internal/dateRelative');\n\nSugar.Date.defineInstance({\n\n 'relativeTo': function(date, d, localeCode) {\n return dateRelative(date, createDate(d), localeCode);\n }\n\n});\n\nmodule.exports = Sugar.Date.relativeTo;","'use strict';\n\nvar getNewDate = require('./getNewDate'),\n mathAliases = require('../../common/var/mathAliases'),\n getAdjustedUnit = require('./getAdjustedUnit'),\n getTimeDistanceForUnit = require('./getTimeDistanceForUnit');\n\nvar abs = mathAliases.abs;\n\nfunction getAdjustedUnitForDate(d, dRelative) {\n var ms;\n if (!dRelative) {\n dRelative = getNewDate();\n if (d > dRelative) {\n // If our date is greater than the one that we got from getNewDate, it\n // means that we are finding the unit for a date that is in the future\n // relative to now. However, often the incoming date was created in\n // the same cycle as our comparison, but our \"now\" date will have been\n // created an instant after it, creating situations where \"5 minutes from\n // now\" becomes \"4 minutes from now\" in the same tick. To prevent this,\n // subtract a buffer of 10ms to compensate.\n dRelative = new Date(dRelative.getTime() - 10);\n }\n }\n ms = d - dRelative;\n return getAdjustedUnit(ms, function(u) {\n return abs(getTimeDistanceForUnit(d, dRelative, u));\n });\n}\n\nmodule.exports = getAdjustedUnitForDate;","'use strict';\n\nvar Sugar = require('sugar-core'),\n dateRelative = require('./internal/dateRelative');\n\nSugar.Date.defineInstance({\n\n 'relative': function(date, localeCode, relativeFn) {\n return dateRelative(date, null, localeCode, relativeFn);\n }\n\n});\n\nmodule.exports = Sugar.Date.relative;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nSugar.Date.defineInstance({\n\n 'iso': function(date) {\n return date.toISOString();\n }\n\n});\n\nmodule.exports = Sugar.Date.iso;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isYesterday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isWeekend;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isWeekday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isWednesday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n dateIsValid = require('./internal/dateIsValid');\n\nSugar.Date.defineInstance({\n\n 'isValid': function(date) {\n return dateIsValid(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.isValid;","'use strict';\n\nvar _utc = require('../../common/var/_utc'),\n tzOffset = require('./tzOffset');\n\nfunction isUTC(d) {\n return !!_utc(d) || tzOffset(d) === 0;\n}\n\nmodule.exports = isUTC;","'use strict';\n\nvar Sugar = require('sugar-core'),\n isUTC = require('./internal/isUTC');\n\nSugar.Date.defineInstance({\n\n 'isUTC': function(date) {\n return isUTC(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.isUTC;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isTuesday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isTomorrow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isToday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isThursday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isThisYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isThisWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isThisMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isSunday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isSaturday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isPast;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isNextYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isNextWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isNextMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isMonday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getYear = require('./internal/getYear');\n\nSugar.Date.defineInstance({\n\n 'isLeapYear': function(date) {\n var year = getYear(date);\n return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);\n }\n\n});\n\nmodule.exports = Sugar.Date.isLeapYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isLastYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isLastWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isLastMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isFuture;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n spaceSplit = require('../../common/internal/spaceSplit'),\n fullCompareDate = require('./fullCompareDate'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar');\n\nvar English = LocaleHelpers.English,\n sugarDate = namespaceAliases.sugarDate;\n\nfunction buildRelativeAliases() {\n var special = spaceSplit('Today Yesterday Tomorrow Weekday Weekend Future Past');\n var weekdays = English.weekdays.slice(0, 7);\n var months = English.months.slice(0, 12);\n var together = special.concat(weekdays).concat(months);\n defineInstanceSimilar(sugarDate, together, function(methods, name) {\n methods['is'+ name] = function(d) {\n return fullCompareDate(d, name);\n };\n });\n}\n\nmodule.exports = buildRelativeAliases;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isFriday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate'),\n mathAliases = require('../common/var/mathAliases');\n\nvar min = mathAliases.min,\n max = mathAliases.max;\n\nSugar.Date.defineInstance({\n\n 'isBetween': function(date, d1, d2, margin) {\n var t = date.getTime();\n var t1 = createDate(d1).getTime();\n var t2 = createDate(d2).getTime();\n var lo = min(t1, t2);\n var hi = max(t1, t2);\n margin = margin || 0;\n return (lo - margin <= t) && (hi + margin >= t);\n }\n\n});\n\nmodule.exports = Sugar.Date.isBetween;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate');\n\nSugar.Date.defineInstance({\n\n 'isBefore': function(date, d, margin) {\n return date.getTime() < createDate(d).getTime() + (margin || 0);\n }\n\n});\n\nmodule.exports = Sugar.Date.isBefore;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate');\n\nSugar.Date.defineInstance({\n\n 'isAfter': function(date, d, margin) {\n return date.getTime() > createDate(d).getTime() - (margin || 0);\n }\n\n});\n\nmodule.exports = Sugar.Date.isAfter;","'use strict';\n\nvar setDate = require('./setDate'),\n getDate = require('./getDate'),\n getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n getNewDate = require('./getNewDate');\n\nfunction compareDay(d, shift) {\n var comp = getNewDate();\n if (shift) {\n setDate(comp, getDate(comp) + shift);\n }\n return getYear(d) === getYear(comp) &&\n getMonth(d) === getMonth(comp) &&\n getDate(d) === getDate(comp);\n}\n\nmodule.exports = compareDay;","'use strict';\n\nfunction trim(str) {\n return str.trim();\n}\n\nmodule.exports = trim;","'use strict';\n\nvar Sugar = require('sugar-core'),\n fullCompareDate = require('./internal/fullCompareDate');\n\nSugar.Date.defineInstance({\n\n 'is': function(date, d, margin) {\n return fullCompareDate(date, d, margin);\n }\n\n});\n\nmodule.exports = Sugar.Date.is;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursAgo;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getWeekday = require('./internal/getWeekday');\n\nSugar.Date.defineInstance({\n\n 'getWeekday': function(date) {\n return getWeekday(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.getWeekday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nSugar.Date.defineInstance({\n\n 'getUTCWeekday': function(date) {\n return date.getUTCDay();\n }\n\n});\n\nmodule.exports = Sugar.Date.getUTCWeekday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getUTCOffset = require('./internal/getUTCOffset');\n\nSugar.Date.defineInstance({\n\n 'getUTCOffset': function(date, iso) {\n return getUTCOffset(date, iso);\n }\n\n});\n\nmodule.exports = Sugar.Date.getUTCOffset;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getWeekNumber = require('./internal/getWeekNumber');\n\nSugar.Date.defineInstance({\n\n 'getISOWeek': function(date) {\n return getWeekNumber(date, true);\n }\n\n});\n\nmodule.exports = Sugar.Date.getISOWeek;","'use strict';\n\nvar getExtendedDate = require('./getExtendedDate');\n\nfunction createDateWithContext(contextDate, d, options, forceClone) {\n return getExtendedDate(contextDate, d, options, forceClone).date;\n}\n\nmodule.exports = createDateWithContext;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDateWithContext = require('./internal/createDateWithContext');\n\nSugar.Date.defineInstance({\n\n 'get': function(date, d, options) {\n return createDateWithContext(date, d, options);\n }\n\n});\n\nmodule.exports = Sugar.Date.get;","'use strict';\n\nmodule.exports = 1000;","'use strict';\n\nvar INTERNAL_MEMOIZE_LIMIT = require('../var/INTERNAL_MEMOIZE_LIMIT'),\n coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction memoizeFunction(fn) {\n var memo = {}, counter = 0;\n\n return function(key) {\n if (hasOwn(memo, key)) {\n return memo[key];\n }\n // istanbul ignore if\n if (counter === INTERNAL_MEMOIZE_LIMIT) {\n memo = {};\n counter = 0;\n }\n counter++;\n return memo[key] = fn(key);\n };\n}\n\nmodule.exports = memoizeFunction;","'use strict';\n\nmodule.exports = /([{}])\\1|{([^}]*)}|(%)%|(%(\\w*))/g;","'use strict';\n\nvar STRING_FORMAT_REG = require('../var/STRING_FORMAT_REG'),\n CommonChars = require('../var/CommonChars'),\n memoizeFunction = require('./memoizeFunction');\n\nvar OPEN_BRACE = CommonChars.OPEN_BRACE,\n CLOSE_BRACE = CommonChars.CLOSE_BRACE;\n\nfunction createFormatMatcher(bracketMatcher, percentMatcher, precheck) {\n\n var reg = STRING_FORMAT_REG;\n var compileMemoized = memoizeFunction(compile);\n\n function getToken(format, match) {\n var get, token, literal, fn;\n var bKey = match[2];\n var pLit = match[3];\n var pKey = match[5];\n if (match[4] && percentMatcher) {\n token = pKey;\n get = percentMatcher;\n } else if (bKey) {\n token = bKey;\n get = bracketMatcher;\n } else if (pLit && percentMatcher) {\n literal = pLit;\n } else {\n literal = match[1] || match[0];\n }\n if (get) {\n assertPassesPrecheck(precheck, bKey, pKey);\n fn = function(obj, opt) {\n return get(obj, token, opt);\n };\n }\n format.push(fn || getLiteral(literal));\n }\n\n function getSubstring(format, str, start, end) {\n if (end > start) {\n var sub = str.slice(start, end);\n assertNoUnmatched(sub, OPEN_BRACE);\n assertNoUnmatched(sub, CLOSE_BRACE);\n format.push(function() {\n return sub;\n });\n }\n }\n\n function getLiteral(str) {\n return function() {\n return str;\n };\n }\n\n function assertPassesPrecheck(precheck, bt, pt) {\n if (precheck && !precheck(bt, pt)) {\n throw new TypeError('Invalid token '+ (bt || pt) +' in format string');\n }\n }\n\n function assertNoUnmatched(str, chr) {\n if (str.indexOf(chr) !== -1) {\n throw new TypeError('Unmatched '+ chr +' in format string');\n }\n }\n\n function compile(str) {\n var format = [], lastIndex = 0, match;\n reg.lastIndex = 0;\n while(match = reg.exec(str)) {\n getSubstring(format, str, lastIndex, match.index);\n getToken(format, match);\n lastIndex = reg.lastIndex;\n }\n getSubstring(format, str, lastIndex, str.length);\n return format;\n }\n\n return function(str, obj, opt) {\n var format = compileMemoized(str), result = '';\n for (var i = 0; i < format.length; i++) {\n result += format[i](obj, opt);\n }\n return result;\n };\n}\n\nmodule.exports = createFormatMatcher;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n trunc = require('../../common/var/trunc'),\n getHours = require('./getHours');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nfunction getMeridiemToken(d, localeCode) {\n var hours = getHours(d);\n return localeManager.get(localeCode).ampm[trunc(hours / 12)] || '';\n}\n\nmodule.exports = getMeridiemToken;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n getTimeDistanceForUnit = require('./getTimeDistanceForUnit');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nfunction getDaysSince(d1, d2) {\n return getTimeDistanceForUnit(d1, d2, DateUnits[DAY_INDEX]);\n}\n\nmodule.exports = getDaysSince;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n getWeekNumber = require('./getWeekNumber');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nfunction getWeekYear(d, localeCode, iso) {\n var year, month, firstDayOfWeek, firstDayOfWeekYear, week, loc;\n year = getYear(d);\n month = getMonth(d);\n if (month === 0 || month === 11) {\n if (!iso) {\n loc = localeManager.get(localeCode);\n firstDayOfWeek = loc.getFirstDayOfWeek(localeCode);\n firstDayOfWeekYear = loc.getFirstDayOfWeekYear(localeCode);\n }\n week = getWeekNumber(d, false, firstDayOfWeek, firstDayOfWeekYear);\n if (month === 0 && week === 0) {\n year -= 1;\n } else if (month === 11 && week === 1) {\n year += 1;\n }\n }\n return year;\n}\n\nmodule.exports = getWeekYear;","'use strict';\n\nfunction repeatString(str, num) {\n var result = '';\n str = str.toString();\n while (num > 0) {\n if (num & 1) {\n result += str;\n }\n if (num >>= 1) {\n str += str;\n }\n }\n return result;\n}\n\nmodule.exports = repeatString;","'use strict';\n\nmodule.exports = /\\(([-+]\\d{2,4}|\\w{3,5})\\)$/;","'use strict';\n\nvar TIMEZONE_ABBREVIATION_REG = require('./TIMEZONE_ABBREVIATION_REG'),\n LocaleHelpers = require('./LocaleHelpers'),\n DateUnitIndexes = require('./DateUnitIndexes'),\n trunc = require('../../common/var/trunc'),\n getDate = require('../internal/getDate'),\n getYear = require('../internal/getYear'),\n getHours = require('../internal/getHours'),\n getMonth = require('../internal/getMonth'),\n cloneDate = require('../internal/cloneDate'),\n padNumber = require('../../common/internal/padNumber'),\n getWeekday = require('../internal/getWeekday'),\n callDateGet = require('../../common/internal/callDateGet'),\n mathAliases = require('../../common/var/mathAliases'),\n getWeekYear = require('../internal/getWeekYear'),\n getUTCOffset = require('../internal/getUTCOffset'),\n getDaysSince = require('../internal/getDaysSince'),\n getWeekNumber = require('../internal/getWeekNumber'),\n getMeridiemToken = require('../internal/getMeridiemToken'),\n setUnitAndLowerToEdge = require('../internal/setUnitAndLowerToEdge');\n\nvar localeManager = LocaleHelpers.localeManager,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX,\n ceil = mathAliases.ceil;\n\nvar FormatTokensBase = [\n {\n ldml: 'Dow',\n strf: 'a',\n lowerToken: 'dow',\n get: function(d, localeCode) {\n return localeManager.get(localeCode).getWeekdayName(getWeekday(d), 2);\n }\n },\n {\n ldml: 'Weekday',\n strf: 'A',\n lowerToken: 'weekday',\n allowAlternates: true,\n get: function(d, localeCode, alternate) {\n return localeManager.get(localeCode).getWeekdayName(getWeekday(d), alternate);\n }\n },\n {\n ldml: 'Mon',\n strf: 'b h',\n lowerToken: 'mon',\n get: function(d, localeCode) {\n return localeManager.get(localeCode).getMonthName(getMonth(d), 2);\n }\n },\n {\n ldml: 'Month',\n strf: 'B',\n lowerToken: 'month',\n allowAlternates: true,\n get: function(d, localeCode, alternate) {\n return localeManager.get(localeCode).getMonthName(getMonth(d), alternate);\n }\n },\n {\n strf: 'C',\n get: function(d) {\n return getYear(d).toString().slice(0, 2);\n }\n },\n {\n ldml: 'd date day',\n strf: 'd',\n strfPadding: 2,\n ldmlPaddedToken: 'dd',\n ordinalToken: 'do',\n get: function(d) {\n return getDate(d);\n }\n },\n {\n strf: 'e',\n get: function(d) {\n return padNumber(getDate(d), 2, false, 10, ' ');\n }\n },\n {\n ldml: 'H 24hr',\n strf: 'H',\n strfPadding: 2,\n ldmlPaddedToken: 'HH',\n get: function(d) {\n return getHours(d);\n }\n },\n {\n ldml: 'h hours 12hr',\n strf: 'I',\n strfPadding: 2,\n ldmlPaddedToken: 'hh',\n get: function(d) {\n return getHours(d) % 12 || 12;\n }\n },\n {\n ldml: 'D',\n strf: 'j',\n strfPadding: 3,\n ldmlPaddedToken: 'DDD',\n get: function(d) {\n var s = setUnitAndLowerToEdge(cloneDate(d), MONTH_INDEX);\n return getDaysSince(d, s) + 1;\n }\n },\n {\n ldml: 'M',\n strf: 'm',\n strfPadding: 2,\n ordinalToken: 'Mo',\n ldmlPaddedToken: 'MM',\n get: function(d) {\n return getMonth(d) + 1;\n }\n },\n {\n ldml: 'm minutes',\n strf: 'M',\n strfPadding: 2,\n ldmlPaddedToken: 'mm',\n get: function(d) {\n return callDateGet(d, 'Minutes');\n }\n },\n {\n ldml: 'Q',\n get: function(d) {\n return ceil((getMonth(d) + 1) / 3);\n }\n },\n {\n ldml: 'TT',\n strf: 'p',\n get: function(d, localeCode) {\n return getMeridiemToken(d, localeCode);\n }\n },\n {\n ldml: 'tt',\n strf: 'P',\n get: function(d, localeCode) {\n return getMeridiemToken(d, localeCode).toLowerCase();\n }\n },\n {\n ldml: 'T',\n lowerToken: 't',\n get: function(d, localeCode) {\n return getMeridiemToken(d, localeCode).charAt(0);\n }\n },\n {\n ldml: 's seconds',\n strf: 'S',\n strfPadding: 2,\n ldmlPaddedToken: 'ss',\n get: function(d) {\n return callDateGet(d, 'Seconds');\n }\n },\n {\n ldml: 'S ms',\n strfPadding: 3,\n ldmlPaddedToken: 'SSS',\n get: function(d) {\n return callDateGet(d, 'Milliseconds');\n }\n },\n {\n ldml: 'e',\n strf: 'u',\n ordinalToken: 'eo',\n get: function(d) {\n return getWeekday(d) || 7;\n }\n },\n {\n strf: 'U',\n strfPadding: 2,\n get: function(d) {\n // Sunday first, 0-53\n return getWeekNumber(d, false, 0);\n }\n },\n {\n ldml: 'W',\n strf: 'V',\n strfPadding: 2,\n ordinalToken: 'Wo',\n ldmlPaddedToken: 'WW',\n get: function(d) {\n // Monday first, 1-53 (ISO8601)\n return getWeekNumber(d, true);\n }\n },\n {\n strf: 'w',\n get: function(d) {\n return getWeekday(d);\n }\n },\n {\n ldml: 'w',\n ordinalToken: 'wo',\n ldmlPaddedToken: 'ww',\n get: function(d, localeCode) {\n // Locale dependent, 1-53\n var loc = localeManager.get(localeCode),\n dow = loc.getFirstDayOfWeek(localeCode),\n doy = loc.getFirstDayOfWeekYear(localeCode);\n return getWeekNumber(d, true, dow, doy);\n }\n },\n {\n strf: 'W',\n strfPadding: 2,\n get: function(d) {\n // Monday first, 0-53\n return getWeekNumber(d, false);\n }\n },\n {\n ldmlPaddedToken: 'gggg',\n ldmlTwoDigitToken: 'gg',\n get: function(d, localeCode) {\n return getWeekYear(d, localeCode);\n }\n },\n {\n strf: 'G',\n strfPadding: 4,\n strfTwoDigitToken: 'g',\n ldmlPaddedToken: 'GGGG',\n ldmlTwoDigitToken: 'GG',\n get: function(d, localeCode) {\n return getWeekYear(d, localeCode, true);\n }\n },\n {\n ldml: 'year',\n ldmlPaddedToken: 'yyyy',\n ldmlTwoDigitToken: 'yy',\n strf: 'Y',\n strfPadding: 4,\n strfTwoDigitToken: 'y',\n get: function(d) {\n return getYear(d);\n }\n },\n {\n ldml: 'ZZ',\n strf: 'z',\n get: function(d) {\n return getUTCOffset(d);\n }\n },\n {\n ldml: 'X',\n get: function(d) {\n return trunc(d.getTime() / 1000);\n }\n },\n {\n ldml: 'x',\n get: function(d) {\n return d.getTime();\n }\n },\n {\n ldml: 'Z',\n get: function(d) {\n return getUTCOffset(d, true);\n }\n },\n {\n ldml: 'z',\n strf: 'Z',\n get: function(d) {\n // Note that this is not accurate in all browsing environments!\n // https://github.com/moment/moment/issues/162\n // It will continue to be supported for Node and usage with the\n // understanding that it may be blank.\n var match = d.toString().match(TIMEZONE_ABBREVIATION_REG);\n // istanbul ignore next\n return match ? match[1] : '';\n }\n },\n {\n strf: 'D',\n alias: '%m/%d/%y'\n },\n {\n strf: 'F',\n alias: '%Y-%m-%d'\n },\n {\n strf: 'r',\n alias: '%I:%M:%S %p'\n },\n {\n strf: 'R',\n alias: '%H:%M'\n },\n {\n strf: 'T',\n alias: '%H:%M:%S'\n },\n {\n strf: 'x',\n alias: '{short}'\n },\n {\n strf: 'X',\n alias: '{time}'\n },\n {\n strf: 'c',\n alias: '{stamp}'\n }\n];\n\nmodule.exports = FormatTokensBase;","'use strict';\n\nvar LocaleHelpers = require('./LocaleHelpers'),\n FormatTokensBase = require('./FormatTokensBase'),\n CoreOutputFormats = require('./CoreOutputFormats'),\n forEach = require('../../common/internal/forEach'),\n padNumber = require('../../common/internal/padNumber'),\n spaceSplit = require('../../common/internal/spaceSplit'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases'),\n createFormatMatcher = require('../../common/internal/createFormatMatcher'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar');\n\nvar localeManager = LocaleHelpers.localeManager,\n hasOwn = coreUtilityAliases.hasOwn,\n getOwn = coreUtilityAliases.getOwn,\n forEachProperty = coreUtilityAliases.forEachProperty,\n sugarDate = namespaceAliases.sugarDate;\n\nvar ldmlTokens, strfTokens;\n\nfunction buildDateFormatTokens() {\n\n function addFormats(target, tokens, fn) {\n if (tokens) {\n forEach(spaceSplit(tokens), function(token) {\n target[token] = fn;\n });\n }\n }\n\n function buildLowercase(get) {\n return function(d, localeCode) {\n return get(d, localeCode).toLowerCase();\n };\n }\n\n function buildOrdinal(get) {\n return function(d, localeCode) {\n var n = get(d, localeCode);\n return n + localeManager.get(localeCode).getOrdinal(n);\n };\n }\n\n function buildPadded(get, padding) {\n return function(d, localeCode) {\n return padNumber(get(d, localeCode), padding);\n };\n }\n\n function buildTwoDigits(get) {\n return function(d, localeCode) {\n return get(d, localeCode) % 100;\n };\n }\n\n function buildAlias(alias) {\n return function(d, localeCode) {\n return dateFormatMatcher(alias, d, localeCode);\n };\n }\n\n function buildAlternates(f) {\n for (var n = 1; n <= 5; n++) {\n buildAlternate(f, n);\n }\n }\n\n function buildAlternate(f, n) {\n var alternate = function(d, localeCode) {\n return f.get(d, localeCode, n);\n };\n addFormats(ldmlTokens, f.ldml + n, alternate);\n if (f.lowerToken) {\n ldmlTokens[f.lowerToken + n] = buildLowercase(alternate);\n }\n }\n\n function getIdentityFormat(name) {\n return function(d, localeCode) {\n var loc = localeManager.get(localeCode);\n return dateFormatMatcher(loc[name], d, localeCode);\n };\n }\n\n ldmlTokens = {};\n strfTokens = {};\n\n forEach(FormatTokensBase, function(f) {\n var get = f.get, getPadded;\n if (f.lowerToken) {\n ldmlTokens[f.lowerToken] = buildLowercase(get);\n }\n if (f.ordinalToken) {\n ldmlTokens[f.ordinalToken] = buildOrdinal(get, f);\n }\n if (f.ldmlPaddedToken) {\n ldmlTokens[f.ldmlPaddedToken] = buildPadded(get, f.ldmlPaddedToken.length);\n }\n if (f.ldmlTwoDigitToken) {\n ldmlTokens[f.ldmlTwoDigitToken] = buildPadded(buildTwoDigits(get), 2);\n }\n if (f.strfTwoDigitToken) {\n strfTokens[f.strfTwoDigitToken] = buildPadded(buildTwoDigits(get), 2);\n }\n if (f.strfPadding) {\n getPadded = buildPadded(get, f.strfPadding);\n }\n if (f.alias) {\n get = buildAlias(f.alias);\n }\n if (f.allowAlternates) {\n buildAlternates(f);\n }\n addFormats(ldmlTokens, f.ldml, get);\n addFormats(strfTokens, f.strf, getPadded || get);\n });\n\n forEachProperty(CoreOutputFormats, function(src, name) {\n addFormats(ldmlTokens, name, buildAlias(src));\n });\n\n defineInstanceSimilar(sugarDate, 'short medium long full', function(methods, name) {\n var fn = getIdentityFormat(name);\n addFormats(ldmlTokens, name, fn);\n methods[name] = fn;\n });\n\n addFormats(ldmlTokens, 'time', getIdentityFormat('time'));\n addFormats(ldmlTokens, 'stamp', getIdentityFormat('stamp'));\n}\n\nvar dateFormatMatcher;\n\nfunction buildDateFormatMatcher() {\n\n function getLdml(d, token, localeCode) {\n return getOwn(ldmlTokens, token)(d, localeCode);\n }\n\n function getStrf(d, token, localeCode) {\n return getOwn(strfTokens, token)(d, localeCode);\n }\n\n function checkDateToken(ldml, strf) {\n return hasOwn(ldmlTokens, ldml) || hasOwn(strfTokens, strf);\n }\n\n // Format matcher for LDML or STRF tokens.\n dateFormatMatcher = createFormatMatcher(getLdml, getStrf, checkDateToken);\n}\n\nbuildDateFormatTokens();\n\nbuildDateFormatMatcher();\n\nmodule.exports = {\n ldmlTokens: ldmlTokens,\n strfTokens: strfTokens,\n dateFormatMatcher: dateFormatMatcher\n};","'use strict';\n\nvar Sugar = require('sugar-core'),\n dateFormat = require('./internal/dateFormat');\n\nSugar.Date.defineInstance({\n\n 'format': function(date, f, localeCode) {\n return dateFormat(date, f, localeCode);\n }\n\n});\n\nmodule.exports = Sugar.Date.format;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfMonth;","'use strict';\n\nvar Sugar = require('sugar-core'),\n DateUnitIndexes = require('./var/DateUnitIndexes'),\n getWeekday = require('./internal/getWeekday'),\n setWeekday = require('./internal/setWeekday'),\n moveToEndOfUnit = require('./internal/moveToEndOfUnit');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nSugar.Date.defineInstance({\n\n 'endOfISOWeek': function(date) {\n if (getWeekday(date) !== 0) {\n setWeekday(date, 7);\n }\n return moveToEndOfUnit(date, DAY_INDEX);\n }\n\n});\n\nmodule.exports = Sugar.Date.endOfISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfDay;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysSince;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getDaysInMonth = require('./internal/getDaysInMonth');\n\nSugar.Date.defineInstance({\n\n 'daysInMonth': function(date) {\n return getDaysInMonth(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.daysInMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysAgo;","'use strict';\n\nvar Sugar = require('sugar-core'),\n cloneDate = require('./internal/cloneDate');\n\nSugar.Date.defineInstance({\n\n 'clone': function(date) {\n return cloneDate(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.clone;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfMonth;","'use strict';\n\nvar Sugar = require('sugar-core'),\n resetTime = require('./internal/resetTime'),\n getWeekday = require('./internal/getWeekday'),\n setWeekday = require('./internal/setWeekday');\n\nSugar.Date.defineInstance({\n\n 'beginningOfISOWeek': function(date) {\n var day = getWeekday(date);\n if (day === 0) {\n day = -6;\n } else if (day !== 1) {\n day = 1;\n }\n setWeekday(date, day);\n return resetTime(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.beginningOfISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfDay;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n isDefined = require('../../common/internal/isDefined'),\n walkUnitDown = require('./walkUnitDown');\n\nvar YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction collectDateParamsFromArguments(args) {\n var params = {}, index = 0;\n walkUnitDown(YEAR_INDEX, function(unit) {\n var arg = args[index++];\n if (isDefined(arg)) {\n params[unit.name] = arg;\n }\n });\n return params;\n}\n\nmodule.exports = collectDateParamsFromArguments;","'use strict';\n\nvar isUndefined = require('../../common/internal/isUndefined');\n\nfunction getDateParamsFromString(str) {\n var match, num, params = {};\n match = str.match(/^(-?\\d*[\\d.]\\d*)?\\s?(\\w+?)s?$/i);\n if (match) {\n if (isUndefined(num)) {\n num = match[1] ? +match[1] : 1;\n }\n params[match[2].toLowerCase()] = num;\n }\n return params;\n}\n\nmodule.exports = getDateParamsFromString;","'use strict';\n\nvar Sugar = require('sugar-core'),\n advanceDateWithArgs = require('./internal/advanceDateWithArgs');\n\nSugar.Date.defineInstanceWithArguments({\n\n 'advance': function(d, args) {\n return advanceDateWithArgs(d, args, 1);\n }\n\n});\n\nmodule.exports = Sugar.Date.advance;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addYears;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addWeeks;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addSeconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addMonths;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addMinutes;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addMilliseconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addHours;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n forEach = require('../../common/internal/forEach'),\n createDate = require('./createDate'),\n compareDate = require('./compareDate'),\n advanceDate = require('./advanceDate'),\n moveToEndOfUnit = require('./moveToEndOfUnit'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n simpleCapitalize = require('../../common/internal/simpleCapitalize'),\n moveToBeginningOfUnit = require('./moveToBeginningOfUnit'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar'),\n getTimeDistanceForUnit = require('./getTimeDistanceForUnit');\n\nvar sugarDate = namespaceAliases.sugarDate,\n HOURS_INDEX = DateUnitIndexes.HOURS_INDEX,\n DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nfunction buildDateUnitMethods() {\n\n defineInstanceSimilar(sugarDate, DateUnits, function(methods, unit, index) {\n var name = unit.name, caps = simpleCapitalize(name);\n\n if (index > DAY_INDEX) {\n forEach(['Last','This','Next'], function(shift) {\n methods['is' + shift + caps] = function(d, localeCode) {\n return compareDate(d, shift + ' ' + name, 0, localeCode, { locale: 'en' });\n };\n });\n }\n if (index > HOURS_INDEX) {\n methods['beginningOf' + caps] = function(d, localeCode) {\n return moveToBeginningOfUnit(d, index, localeCode);\n };\n methods['endOf' + caps] = function(d, localeCode) {\n return moveToEndOfUnit(d, index, localeCode);\n };\n }\n\n methods['add' + caps + 's'] = function(d, num, reset) {\n return advanceDate(d, name, num, reset);\n };\n\n var since = function(date, d, options) {\n return getTimeDistanceForUnit(date, createDate(d, options, true), unit);\n };\n var until = function(date, d, options) {\n return getTimeDistanceForUnit(createDate(d, options, true), date, unit);\n };\n\n methods[name + 'sAgo'] = methods[name + 'sUntil'] = until;\n methods[name + 'sSince'] = methods[name + 'sFromNow'] = since;\n\n });\n\n}\n\nmodule.exports = buildDateUnitMethods;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addDays;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.years;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.year;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeks;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.week;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.seconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.second;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.months;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.month;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutes;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minute;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.milliseconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecond;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hours;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hour;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('../date/var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Number.defineInstance({\n\n 'duration': function(n, localeCode) {\n return localeManager.get(localeCode).getDuration(n);\n }\n\n});\n\nmodule.exports = Sugar.Number.duration;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.days;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayAfter;","'use strict';\n\nvar forEach = require('./forEach'),\n spaceSplit = require('./spaceSplit'),\n classChecks = require('../var/classChecks');\n\nvar isString = classChecks.isString;\n\nfunction collectSimilarMethods(set, fn) {\n var methods = {};\n if (isString(set)) {\n set = spaceSplit(set);\n }\n forEach(set, function(el, i) {\n fn(methods, el, i);\n });\n return methods;\n}\n\nmodule.exports = collectSimilarMethods;","'use strict';\n\nfunction wrapNamespace(method) {\n return function(sugarNamespace, arg1, arg2) {\n sugarNamespace[method](arg1, arg2);\n };\n}\n\nmodule.exports = wrapNamespace;","'use strict';\n\nvar wrapNamespace = require('../internal/wrapNamespace');\n\nmodule.exports = {\n alias: wrapNamespace('alias'),\n defineStatic: wrapNamespace('defineStatic'),\n defineInstance: wrapNamespace('defineInstance'),\n defineStaticPolyfill: wrapNamespace('defineStaticPolyfill'),\n defineInstancePolyfill: wrapNamespace('defineInstancePolyfill'),\n defineInstanceAndStatic: wrapNamespace('defineInstanceAndStatic'),\n defineInstanceWithArguments: wrapNamespace('defineInstanceWithArguments')\n};","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n createDate = require('./createDate'),\n mathAliases = require('../../common/var/mathAliases'),\n advanceDate = require('./advanceDate'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar');\n\nvar sugarNumber = namespaceAliases.sugarNumber,\n round = mathAliases.round;\n\nfunction buildNumberUnitMethods() {\n defineInstanceSimilar(sugarNumber, DateUnits, function(methods, unit) {\n var name = unit.name, base, after, before;\n base = function(n) {\n return round(n * unit.multiplier);\n };\n after = function(n, d, options) {\n return advanceDate(createDate(d, options, true), name, n);\n };\n before = function(n, d, options) {\n return advanceDate(createDate(d, options, true), name, -n);\n };\n methods[name] = base;\n methods[name + 's'] = base;\n methods[name + 'Before'] = before;\n methods[name + 'sBefore'] = before;\n methods[name + 'Ago'] = before;\n methods[name + 'sAgo'] = before;\n methods[name + 'After'] = after;\n methods[name + 'sAfter'] = after;\n methods[name + 'FromNow'] = after;\n methods[name + 'sFromNow'] = after;\n });\n}\n\nmodule.exports = buildNumberUnitMethods;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.day;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'setLocale': function(code) {\n return localeManager.set(code);\n }\n\n});\n\nmodule.exports = Sugar.Date.setLocale;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'removeLocale': function(code) {\n return localeManager.remove(code);\n }\n\n});\n\nmodule.exports = Sugar.Date.removeLocale;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'getLocale': function(code) {\n return localeManager.get(code, !code);\n }\n\n});\n\nmodule.exports = Sugar.Date.getLocale;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'getAllLocales': function() {\n return localeManager.getAll();\n }\n\n});\n\nmodule.exports = Sugar.Date.getAllLocales;","'use strict';\n\nfunction getKeys(obj) {\n return Object.keys(obj);\n}\n\nmodule.exports = getKeys;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers'),\n getKeys = require('../common/internal/getKeys');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'getAllLocaleCodes': function() {\n return getKeys(localeManager.getAll());\n }\n\n});\n\nmodule.exports = Sugar.Date.getAllLocaleCodes;","'use strict';\n\nfunction setChainableConstructor(sugarNamespace, createFn) {\n sugarNamespace.prototype.constructor = function() {\n return createFn.apply(this, arguments);\n };\n}\n\nmodule.exports = setChainableConstructor;","'use strict';\n\nvar createDate = require('./createDate'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n setChainableConstructor = require('../../common/internal/setChainableConstructor');\n\nvar sugarDate = namespaceAliases.sugarDate;\n\nfunction setDateChainableConstructor() {\n setChainableConstructor(sugarDate, createDate);\n}\n\nmodule.exports = setDateChainableConstructor;","'use strict';\n\nvar setDateChainableConstructor = require('../internal/setDateChainableConstructor');\n\nsetDateChainableConstructor();","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n iterateOverDateParams = require('./iterateOverDateParams');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction iterateOverHigherDateParams(params, fn) {\n iterateOverDateParams(params, fn, YEAR_INDEX, DAY_INDEX);\n}\n\nmodule.exports = iterateOverHigherDateParams;","'use strict';\n\nvar getYear = require('./getYear'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar abs = mathAliases.abs;\n\nfunction getYearFromAbbreviation(str, d, prefer) {\n // Following IETF here, adding 1900 or 2000 depending on the last two digits.\n // Note that this makes no accordance for what should happen after 2050, but\n // intentionally ignoring this for now. https://www.ietf.org/rfc/rfc2822.txt\n var val = +str, delta;\n val += val < 50 ? 2000 : 1900;\n if (prefer) {\n delta = val - getYear(d);\n if (delta / abs(delta) !== prefer) {\n val += prefer * 100;\n }\n }\n return val;\n}\n\nmodule.exports = getYearFromAbbreviation;","'use strict';\n\nvar getDateParamKey = require('./getDateParamKey');\n\nfunction deleteDateParam(params, key) {\n delete params[getDateParamKey(params, key)];\n}\n\nmodule.exports = deleteDateParam;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction getOwnKey(obj, key) {\n if (hasOwn(obj, key)) {\n return key;\n }\n}\n\nmodule.exports = getOwnKey;","'use strict';\n\nvar getDateParamKey = require('./getDateParamKey'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases');\n\nvar getOwn = coreUtilityAliases.getOwn;\n\nfunction getDateParam(params, key) {\n return getOwn(params, getDateParamKey(params, key));\n}\n\nmodule.exports = getDateParam;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet');\n\nfunction setMonth(d, val) {\n callDateSet(d, 'Month', val);\n}\n\nmodule.exports = setMonth;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet');\n\nfunction setYear(d, val) {\n callDateSet(d, 'FullYear', val);\n}\n\nmodule.exports = setYear;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet'),\n setISOWeekNumber = require('./setISOWeekNumber');\n\nfunction callDateSetWithWeek(d, method, value, safe) {\n if (method === 'ISOWeek') {\n setISOWeekNumber(d, value);\n } else {\n callDateSet(d, method, value, safe);\n }\n}\n\nmodule.exports = callDateSetWithWeek;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction getHigherUnitIndex(index) {\n return index === DAY_INDEX ? MONTH_INDEX : index + 1;\n}\n\nmodule.exports = getHigherUnitIndex;","'use strict';\n\nvar getLowerUnitIndex = require('./getLowerUnitIndex'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nfunction resetLowerUnits(d, unitIndex) {\n return setUnitAndLowerToEdge(d, getLowerUnitIndex(unitIndex));\n}\n\nmodule.exports = resetLowerUnits;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar setProperty = coreUtilityAliases.setProperty;\n\nfunction defineAccessor(namespace, name, fn) {\n setProperty(namespace, name, fn);\n}\n\nmodule.exports = defineAccessor;","'use strict';\n\nvar simpleClone = require('./simpleClone'),\n defineAccessor = require('./defineAccessor'),\n coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar forEachProperty = coreUtilityAliases.forEachProperty;\n\nfunction defineOptionsAccessor(namespace, defaults) {\n var obj = simpleClone(defaults);\n\n function getOption(name) {\n return obj[name];\n }\n\n function setOption(arg1, arg2) {\n var options;\n if (arguments.length === 1) {\n options = arg1;\n } else {\n options = {};\n options[arg1] = arg2;\n }\n forEachProperty(options, function(val, name) {\n if (val === null) {\n val = defaults[name];\n }\n obj[name] = val;\n });\n }\n\n defineAccessor(namespace, 'getOption', getOption);\n defineAccessor(namespace, 'setOption', setOption);\n return getOption;\n}\n\nmodule.exports = defineOptionsAccessor;","'use strict';\n\nfunction defaultNewDate() {\n return new Date;\n}\n\nmodule.exports = defaultNewDate;","'use strict';\n\nvar defaultNewDate = require('../internal/defaultNewDate');\n\nvar DATE_OPTIONS = {\n 'newDateInternal': defaultNewDate\n};\n\nmodule.exports = DATE_OPTIONS;","'use strict';\n\nmodule.exports = /^'?(\\d{1,2})$/;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate');\n\nrequire('./build/setDateChainableConstructorCall');\n\nSugar.Date.defineStatic({\n\n 'create': function(d, options) {\n return createDate(d, options);\n }\n\n});\n\nmodule.exports = Sugar.Date.create;","'use strict';\n\nvar LocalizedParsingTokens = require('../var/LocalizedParsingTokens'),\n getRegNonCapturing = require('./getRegNonCapturing');\n\nfunction getParsingTokenWithSuffix(field, src, suffix) {\n var token = LocalizedParsingTokens[field];\n if (token.requiresSuffix) {\n src = getRegNonCapturing(src + getRegNonCapturing(suffix));\n } else if (token.requiresSuffixOr) {\n src += getRegNonCapturing(token.requiresSuffixOr + '|' + suffix);\n } else {\n src += getRegNonCapturing(suffix, true);\n }\n return src;\n}\n\nmodule.exports = getParsingTokenWithSuffix;","'use strict';\n\nvar trunc = require('../../common/var/trunc'),\n withPrecision = require('../../common/internal/withPrecision'),\n getAdjustedUnit = require('./getAdjustedUnit');\n\nfunction getAdjustedUnitForNumber(ms) {\n return getAdjustedUnit(ms, function(unit) {\n return trunc(withPrecision(ms / unit.multiplier, 1));\n });\n}\n\nmodule.exports = getAdjustedUnitForNumber;","'use strict';\n\nfunction allCharsReg(src) {\n return RegExp('[' + src + ']', 'g');\n}\n\nmodule.exports = allCharsReg;","'use strict';\n\nvar CommonChars = require('./CommonChars'),\n chr = require('./chr'),\n allCharsReg = require('../internal/allCharsReg');\n\nvar HALF_WIDTH_ZERO = CommonChars.HALF_WIDTH_ZERO,\n FULL_WIDTH_ZERO = CommonChars.FULL_WIDTH_ZERO,\n HALF_WIDTH_PERIOD = CommonChars.HALF_WIDTH_PERIOD,\n FULL_WIDTH_PERIOD = CommonChars.FULL_WIDTH_PERIOD,\n HALF_WIDTH_COMMA = CommonChars.HALF_WIDTH_COMMA;\n\nvar fullWidthNumberReg, fullWidthNumberMap, fullWidthNumbers;\n\nfunction buildFullWidthNumber() {\n var fwp = FULL_WIDTH_PERIOD, hwp = HALF_WIDTH_PERIOD, hwc = HALF_WIDTH_COMMA, fwn = '';\n fullWidthNumberMap = {};\n for (var i = 0, digit; i <= 9; i++) {\n digit = chr(i + FULL_WIDTH_ZERO);\n fwn += digit;\n fullWidthNumberMap[digit] = chr(i + HALF_WIDTH_ZERO);\n }\n fullWidthNumberMap[hwc] = '';\n fullWidthNumberMap[fwp] = hwp;\n // Mapping this to itself to capture it easily\n // in stringToNumber to detect decimals later.\n fullWidthNumberMap[hwp] = hwp;\n fullWidthNumberReg = allCharsReg(fwn + fwp + hwc + hwp);\n fullWidthNumbers = fwn;\n}\n\nbuildFullWidthNumber();\n\nmodule.exports = {\n fullWidthNumberReg: fullWidthNumberReg,\n fullWidthNumberMap: fullWidthNumberMap,\n fullWidthNumbers: fullWidthNumbers\n};","'use strict';\n\nvar classChecks = require('../var/classChecks');\n\nvar isString = classChecks.isString;\n\nfunction escapeRegExp(str) {\n if (!isString(str)) str = String(str);\n return str.replace(/([\\\\/'*+?|()[\\]{}.^$-])/g,'\\\\$1');\n}\n\nmodule.exports = escapeRegExp;","'use strict';\n\nvar map = require('../../common/internal/map'),\n escapeRegExp = require('../../common/internal/escapeRegExp');\n\nfunction arrayToRegAlternates(arr) {\n var joined = arr.join('');\n if (!arr || !arr.length) {\n return '';\n }\n if (joined.length === arr.length) {\n return '[' + joined + ']';\n }\n // map handles sparse arrays so no need to compact the array here.\n return map(arr, escapeRegExp).join('|');\n}\n\nmodule.exports = arrayToRegAlternates;","'use strict';\n\nmodule.exports = '_sugar_';","'use strict';\n\nvar PRIVATE_PROP_PREFIX = require('../var/PRIVATE_PROP_PREFIX'),\n coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar setProperty = coreUtilityAliases.setProperty;\n\nfunction privatePropertyAccessor(key) {\n var privateKey = PRIVATE_PROP_PREFIX + key;\n return function(obj, val) {\n if (arguments.length > 1) {\n setProperty(obj, privateKey, val);\n return obj;\n }\n return obj[privateKey];\n };\n}\n\nmodule.exports = privatePropertyAccessor;","'use strict';\n\nfunction getArrayWithOffset(arr, n, alternate, offset) {\n var val;\n if (alternate > 1) {\n val = arr[n + (alternate - 1) * offset];\n }\n return val || arr[n];\n}\n\nmodule.exports = getArrayWithOffset;","'use strict';\n\nfunction getOrdinalSuffix(num) {\n if (num >= 11 && num <= 13) {\n return 'th';\n } else {\n switch(num % 10) {\n case 1: return 'st';\n case 2: return 'nd';\n case 3: return 'rd';\n default: return 'th';\n }\n }\n}\n\nmodule.exports = getOrdinalSuffix;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction hasValidPlainObjectPrototype(obj) {\n var hasToString = 'toString' in obj;\n var hasConstructor = 'constructor' in obj;\n // An object created with Object.create(null) has no methods in the\n // prototype chain, so check if any are missing. The additional hasToString\n // check is for false positives on some host objects in old IE which have\n // toString but no constructor. If the object has an inherited constructor,\n // then check if it is Object (the \"isPrototypeOf\" tapdance here is a more\n // robust way of ensuring this if the global has been hijacked). Note that\n // accessing the constructor directly (without \"in\" or \"hasOwnProperty\")\n // will throw a permissions error in IE8 on cross-domain windows.\n return (!hasConstructor && !hasToString) ||\n (hasConstructor && !hasOwn(obj, 'constructor') &&\n hasOwn(obj.constructor.prototype, 'isPrototypeOf'));\n}\n\nmodule.exports = hasValidPlainObjectPrototype;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction hasOwnEnumeratedProperties(obj) {\n // Plain objects are generally defined as having enumerated properties\n // all their own, however in early IE environments without defineProperty,\n // there may also be enumerated methods in the prototype chain, so check\n // for both of these cases.\n var objectProto = Object.prototype;\n for (var key in obj) {\n var val = obj[key];\n if (!hasOwn(obj, key) && val !== objectProto[key]) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = hasOwnEnumeratedProperties;","'use strict';\n\nvar isClass = require('./isClass'),\n isObjectType = require('./isObjectType'),\n hasOwnEnumeratedProperties = require('./hasOwnEnumeratedProperties'),\n hasValidPlainObjectPrototype = require('./hasValidPlainObjectPrototype');\n\nfunction isPlainObject(obj, className) {\n return isObjectType(obj) &&\n isClass(obj, 'Object', className) &&\n hasValidPlainObjectPrototype(obj) &&\n hasOwnEnumeratedProperties(obj);\n}\n\nmodule.exports = isPlainObject;","'use strict';\n\nmodule.exports = 'Boolean Number String Date RegExp Function Array Error Set Map';","'use strict';\n\nvar CommonChars = require('../var/CommonChars');\n\nvar HALF_WIDTH_COMMA = CommonChars.HALF_WIDTH_COMMA;\n\nfunction commaSplit(str) {\n return str.split(HALF_WIDTH_COMMA);\n}\n\nmodule.exports = commaSplit;","'use strict';\n\nfunction isArrayIndex(n) {\n return n >>> 0 == n && n != 0xFFFFFFFF;\n}\n\nmodule.exports = isArrayIndex;","'use strict';\n\nvar isArrayIndex = require('./isArrayIndex');\n\nfunction getSparseArrayIndexes(arr, fromIndex, loop, fromRight) {\n var indexes = [], i;\n for (i in arr) {\n // istanbul ignore next\n if (isArrayIndex(i) && (loop || (fromRight ? i <= fromIndex : i >= fromIndex))) {\n indexes.push(+i);\n }\n }\n indexes.sort(function(a, b) {\n var aLoop = a > fromIndex;\n var bLoop = b > fromIndex;\n // This block cannot be reached unless ES5 methods are being shimmed.\n // istanbul ignore if\n if (aLoop !== bLoop) {\n return aLoop ? -1 : 1;\n }\n return a - b;\n });\n return indexes;\n}\n\nmodule.exports = getSparseArrayIndexes;","'use strict';\n\nvar getSparseArrayIndexes = require('./getSparseArrayIndexes');\n\nfunction iterateOverSparseArray(arr, fn, fromIndex, loop) {\n var indexes = getSparseArrayIndexes(arr, fromIndex, loop), index;\n for (var i = 0, len = indexes.length; i < len; i++) {\n index = indexes[i];\n fn.call(arr, arr[index], index, arr);\n }\n return arr;\n}\n\nmodule.exports = iterateOverSparseArray;","'use strict';\n\nfunction filter(arr, fn) {\n var result = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n var el = arr[i];\n if (i in arr && fn(el, i)) {\n result.push(el);\n }\n }\n return result;\n}\n\nmodule.exports = filter;","'use strict';\n\nvar CoreParsingFormats = [\n {\n // 12-1978\n // 08-1978 (MDY)\n src: '{MM}[-.\\\\/]{yyyy}'\n },\n {\n // 12/08/1978\n // 08/12/1978 (MDY)\n time: true,\n src: '{dd}[-\\\\/]{MM}(?:[-\\\\/]{yyyy|yy|y})?',\n mdy: '{MM}[-\\\\/]{dd}(?:[-\\\\/]{yyyy|yy|y})?'\n },\n {\n // 12.08.1978\n // 08.12.1978 (MDY)\n time: true,\n src: '{dd}\\\\.{MM}(?:\\\\.{yyyy|yy|y})?',\n mdy: '{MM}\\\\.{dd}(?:\\\\.{yyyy|yy|y})?',\n localeCheck: function(loc) {\n // Do not allow this format if the locale\n // uses a period as a time separator.\n return loc.timeSeparator !== '.';\n }\n },\n {\n // 1975-08-25\n time: true,\n src: '{yyyy}[-.\\\\/]{MM}(?:[-.\\\\/]{dd})?'\n },\n {\n // .NET JSON\n src: '\\\\\\\\/Date\\\\({timestamp}(?:[-+]\\\\d{4,4})?\\\\)\\\\\\\\/'\n },\n {\n // ISO-8601\n src: '{iyyyy}(?:-?{MM}(?:-?{dd}(?:T{ihh}(?::?{imm}(?::?{ss})?)?)?)?)?{tzOffset?}'\n }\n];\n\nmodule.exports = CoreParsingFormats;","'use strict';\n\nvar CoreParsingTokens = {\n 'yyyy': {\n param: 'year',\n src: '[-−+]?\\\\d{4,6}'\n },\n 'yy': {\n param: 'year',\n src: '\\\\d{2}'\n },\n 'y': {\n param: 'year',\n src: '\\\\d'\n },\n 'ayy': {\n param: 'year',\n src: '\\'\\\\d{2}'\n },\n 'MM': {\n param: 'month',\n src: '(?:1[012]|0?[1-9])'\n },\n 'dd': {\n param: 'date',\n src: '(?:3[01]|[12][0-9]|0?[1-9])'\n },\n 'hh': {\n param: 'hour',\n src: '(?:2[0-4]|[01]?[0-9])'\n },\n 'mm': {\n param: 'minute',\n src: '[0-5]\\\\d'\n },\n 'ss': {\n param: 'second',\n src: '[0-5]\\\\d(?:[,.]\\\\d+)?'\n },\n 'tzHour': {\n src: '[-−+](?:2[0-4]|[01]?[0-9])'\n },\n 'tzMinute': {\n src: '[0-5]\\\\d'\n },\n 'iyyyy': {\n param: 'year',\n src: '(?:[-−+]?\\\\d{4}|[-−+]\\\\d{5,6})'\n },\n 'ihh': {\n param: 'hour',\n src: '(?:2[0-4]|[01][0-9])(?:[,.]\\\\d+)?'\n },\n 'imm': {\n param: 'minute',\n src: '[0-5]\\\\d(?:[,.]\\\\d+)?'\n },\n 'GMT': {\n param: 'utc',\n src: 'GMT'\n },\n 'Z': {\n param: 'utc',\n src: 'Z'\n },\n 'timestamp': {\n src: '\\\\d+'\n }\n};\n\nmodule.exports = CoreParsingTokens;","'use strict';\n\nvar LOCALE_ARRAY_FIELDS = [\n 'months', 'weekdays', 'units', 'numerals', 'placeholders',\n 'articles', 'tokens', 'timeMarkers', 'ampm', 'timeSuffixes',\n 'parse', 'timeParse', 'timeFrontParse', 'modifiers'\n];\n\nmodule.exports = LOCALE_ARRAY_FIELDS;","'use strict';\n\nvar LOCALE_ARRAY_FIELDS = require('../var/LOCALE_ARRAY_FIELDS'),\n ISODefaults = require('../var/ISODefaults'),\n CoreParsingTokens = require('../var/CoreParsingTokens'),\n CoreParsingFormats = require('../var/CoreParsingFormats'),\n LocalizedParsingTokens = require('../var/LocalizedParsingTokens'),\n map = require('../../common/internal/map'),\n filter = require('../../common/internal/filter'),\n forEach = require('../../common/internal/forEach'),\n isDefined = require('../../common/internal/isDefined'),\n commaSplit = require('../../common/internal/commaSplit'),\n classChecks = require('../../common/var/classChecks'),\n mathAliases = require('../../common/var/mathAliases'),\n isUndefined = require('../../common/internal/isUndefined'),\n simpleMerge = require('../../common/internal/simpleMerge'),\n getOrdinalSuffix = require('../../common/internal/getOrdinalSuffix'),\n getArrayWithOffset = require('./getArrayWithOffset'),\n getRegNonCapturing = require('./getRegNonCapturing'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases'),\n iterateOverDateUnits = require('./iterateOverDateUnits'),\n arrayToRegAlternates = require('./arrayToRegAlternates'),\n fullwidthNumberHelpers = require('../../common/var/fullwidthNumberHelpers'),\n getAdjustedUnitForNumber = require('./getAdjustedUnitForNumber'),\n getParsingTokenWithSuffix = require('./getParsingTokenWithSuffix');\n\nvar hasOwn = coreUtilityAliases.hasOwn,\n getOwn = coreUtilityAliases.getOwn,\n forEachProperty = coreUtilityAliases.forEachProperty,\n fullWidthNumberMap = fullwidthNumberHelpers.fullWidthNumberMap,\n fullWidthNumbers = fullwidthNumberHelpers.fullWidthNumbers,\n pow = mathAliases.pow,\n max = mathAliases.max,\n ISO_FIRST_DAY_OF_WEEK = ISODefaults.ISO_FIRST_DAY_OF_WEEK,\n ISO_FIRST_DAY_OF_WEEK_YEAR = ISODefaults.ISO_FIRST_DAY_OF_WEEK_YEAR,\n isString = classChecks.isString,\n isFunction = classChecks.isFunction;\n\nfunction getNewLocale(def) {\n\n function Locale(def) {\n this.init(def);\n }\n\n Locale.prototype = {\n\n getMonthName: function(n, alternate) {\n if (this.monthSuffix) {\n return (n + 1) + this.monthSuffix;\n }\n return getArrayWithOffset(this.months, n, alternate, 12);\n },\n\n getWeekdayName: function(n, alternate) {\n return getArrayWithOffset(this.weekdays, n, alternate, 7);\n },\n\n // TODO: rename to parse in next major version\n parseValue: function(str, param) {\n var map = this[param + 'Map'];\n if (hasOwn(map, str)) {\n return map[str];\n }\n return this.parseNumber(str, param);\n },\n\n // TODO: analyze performance of parsing first vs checking\n // numeralMap first.\n parseNumber: function(str, param) {\n var val;\n\n // Simple numerals such as \"one\" are mapped directly in\n // the numeral map so catch up front if there is a match.\n if (hasOwn(this.numeralMap, str)) {\n val = this.numeralMap[str];\n }\n\n // TODO: perf test isNaN vs other methods\n if (isNaN(val)) {\n val = this.parseRegularNumerals(str);\n }\n\n if (isNaN(val)) {\n val = this.parseIrregularNumerals(str);\n }\n\n if (param === 'month') {\n // Months are the only numeric date field\n // whose value is not the same as its number.\n val -= 1;\n }\n\n return val;\n },\n\n // TODO: perf test returning up front if no regular decimals exist\n parseRegularNumerals: function(str) {\n // Allow decimals as commas and the minus-sign as per ISO-8601.\n str = str.replace(/^−/, '-').replace(/,/, '.');\n\n // The unary plus operator here shows better performance and handles\n // every format that parseFloat does with the exception of trailing\n // characters, which are guaranteed not to be in our string at this point.\n return +str;\n },\n\n parseIrregularNumerals: function(str) {\n var place = 1, num = 0, lastWasPlace, isPlace, numeral, digit, arr;\n\n // Note that \"numerals\" that need to be converted through this method are\n // all considered to be single characters in order to handle CJK. This\n // method is by no means unique to CJK, but the complexity of handling\n // inflections in non-CJK languages adds too much overhead for not enough\n // value, so avoiding for now.\n arr = str.split('');\n for (var i = arr.length - 1; numeral = arr[i]; i--) {\n digit = getOwn(this.numeralMap, numeral);\n if (isUndefined(digit)) {\n digit = getOwn(fullWidthNumberMap, numeral) || 0;\n }\n isPlace = digit > 0 && digit % 10 === 0;\n if (isPlace) {\n if (lastWasPlace) {\n num += place;\n }\n if (i) {\n place = digit;\n } else {\n num += digit;\n }\n } else {\n num += digit * place;\n place *= 10;\n }\n lastWasPlace = isPlace;\n }\n return num;\n },\n\n getOrdinal: function(n) {\n var suffix = this.ordinalSuffix;\n return suffix || getOrdinalSuffix(n);\n },\n\n getRelativeFormat: function(adu, type) {\n return this.convertAdjustedToFormat(adu, type);\n },\n\n getDuration: function(ms) {\n return this.convertAdjustedToFormat(getAdjustedUnitForNumber(max(0, ms)), 'duration');\n },\n\n getFirstDayOfWeek: function() {\n var val = this.firstDayOfWeek;\n return isDefined(val) ? val : ISO_FIRST_DAY_OF_WEEK;\n },\n\n getFirstDayOfWeekYear: function() {\n return this.firstDayOfWeekYear || ISO_FIRST_DAY_OF_WEEK_YEAR;\n },\n\n convertAdjustedToFormat: function(adu, type) {\n var sign, unit, mult,\n num = adu[0],\n u = adu[1],\n ms = adu[2],\n format = this[type] || this.relative;\n if (isFunction(format)) {\n return format.call(this, num, u, ms, type);\n }\n mult = !this.plural || num === 1 ? 0 : 1;\n unit = this.units[mult * 8 + u] || this.units[u];\n sign = this[ms > 0 ? 'fromNow' : 'ago'];\n return format.replace(/\\{(.*?)\\}/g, function(full, match) {\n switch(match) {\n case 'num': return num;\n case 'unit': return unit;\n case 'sign': return sign;\n }\n });\n },\n\n cacheFormat: function(dif, i) {\n this.compiledFormats.splice(i, 1);\n this.compiledFormats.unshift(dif);\n },\n\n addFormat: function(format) {\n var loc = this, src, to;\n\n function getTokenSrc(token) {\n var suffix, src, tmp,\n opt = token.match(/\\?$/),\n nc = token.match(/^(\\d+)\\??$/),\n slice = token.match(/(\\d)(?:-(\\d))?/),\n param = token.replace(/[^a-z]+$/i, '');\n\n // Allowing alias tokens such as {time}\n if (tmp = getOwn(loc.parsingAliases, param)) {\n src = formatToSrc(tmp);\n if (opt) {\n src = getRegNonCapturing(src, true);\n }\n return src;\n }\n\n if (nc) {\n src = loc.tokens[nc[1]];\n } else if (tmp = getOwn(CoreParsingTokens, param)) {\n src = tmp.src;\n param = tmp.param || param;\n } else {\n tmp = getOwn(loc.parsingTokens, param) || getOwn(loc, param);\n\n // Both the \"months\" array and the \"month\" parsing token can be accessed\n // by either {month} or {months}, falling back as necessary, however\n // regardless of whether or not a fallback occurs, the final field to\n // be passed to addRawFormat must be normalized as singular.\n param = param.replace(/s$/, '');\n\n if (!tmp) {\n tmp = getOwn(loc.parsingTokens, param) || getOwn(loc, param + 's');\n }\n\n if (isString(tmp)) {\n src = tmp;\n suffix = loc[param + 'Suffix'];\n } else {\n\n // This is a hack to temporarily disallow parsing of single character\n // weekdays until the format can be changed to allow for this.\n if (param === 'weekday' && loc.code === 'ko') {\n tmp = filter(tmp, function(str) {\n return str.length > 1;\n });\n }\n\n if (slice) {\n tmp = filter(tmp, function(m, i) {\n var mod = i % (loc.units ? 8 : tmp.length);\n return mod >= slice[1] && mod <= (slice[2] || slice[1]);\n });\n }\n src = arrayToRegAlternates(tmp);\n }\n }\n if (!src) {\n return '';\n }\n if (nc) {\n // Non-capturing tokens like {0}\n src = getRegNonCapturing(src);\n } else {\n // Capturing group and add to parsed tokens\n to.push(param);\n src = '(' + src + ')';\n }\n if (suffix) {\n // Date/time suffixes such as those in CJK\n src = getParsingTokenWithSuffix(param, src, suffix);\n }\n if (opt) {\n src += '?';\n }\n return src;\n }\n\n function formatToSrc(str) {\n\n // Make spaces optional\n str = str.replace(/ /g, ' ?');\n\n str = str.replace(/\\{([^,]+?)\\}/g, function(match, token) {\n var tokens = token.split('|');\n if (tokens.length > 1) {\n return getRegNonCapturing(map(tokens, getTokenSrc).join('|'));\n } else {\n return getTokenSrc(token);\n }\n });\n\n return str;\n }\n\n function parseInputFormat() {\n to = [];\n src = formatToSrc(format);\n }\n\n parseInputFormat();\n loc.addRawFormat(src, to);\n },\n\n addRawFormat: function(format, to) {\n this.compiledFormats.unshift({\n reg: RegExp('^ *' + format + ' *$', 'i'),\n to: to\n });\n },\n\n init: function(def) {\n var loc = this;\n\n // -- Initialization helpers\n\n function initFormats() {\n loc.compiledFormats = [];\n loc.parsingAliases = {};\n loc.parsingTokens = {};\n }\n\n function initDefinition() {\n simpleMerge(loc, def);\n }\n\n function initArrayFields() {\n forEach(LOCALE_ARRAY_FIELDS, function(name) {\n var val = loc[name];\n if (isString(val)) {\n loc[name] = commaSplit(val);\n } else if (!val) {\n loc[name] = [];\n }\n });\n }\n\n // -- Value array build helpers\n\n function buildValueArray(name, mod, map, fn) {\n var field = name, all = [], setMap;\n if (!loc[field]) {\n field += 's';\n }\n if (!map) {\n map = {};\n setMap = true;\n }\n forAllAlternates(field, function(alt, j, i) {\n var idx = j * mod + i, val;\n val = fn ? fn(i) : i;\n map[alt] = val;\n map[alt.toLowerCase()] = val;\n all[idx] = alt;\n });\n loc[field] = all;\n if (setMap) {\n loc[name + 'Map'] = map;\n }\n }\n\n function forAllAlternates(field, fn) {\n forEach(loc[field], function(str, i) {\n forEachAlternate(str, function(alt, j) {\n fn(alt, j, i);\n });\n });\n }\n\n function forEachAlternate(str, fn) {\n var arr = map(str.split('+'), function(split) {\n return split.replace(/(.+):(.+)$/, function(full, base, suffixes) {\n return map(suffixes.split('|'), function(suffix) {\n return base + suffix;\n }).join('|');\n });\n }).join('|');\n forEach(arr.split('|'), fn);\n }\n\n function buildNumerals() {\n var map = {};\n buildValueArray('numeral', 10, map);\n buildValueArray('article', 1, map, function() {\n return 1;\n });\n buildValueArray('placeholder', 4, map, function(n) {\n return pow(10, n + 1);\n });\n loc.numeralMap = map;\n }\n\n function buildTimeFormats() {\n loc.parsingAliases['time'] = getTimeFormat();\n loc.parsingAliases['tzOffset'] = getTZOffsetFormat();\n }\n\n function getTimeFormat(standalone) {\n var src, sep;\n sep = getTimeSeparatorSrc(standalone);\n if (loc.ampmFront) {\n // \"ampmFront\" exists mostly for CJK locales, which also presume that\n // time suffixes exist, allowing this to be a simpler regex.\n src = '{ampm?} {hour} (?:{minute} (?::?{second})?)?';\n } else if(loc.ampm.length) {\n src = '{hour}(?:'+sep+'{minute?}(?:'+sep+'{second?})? {ampm?}| {ampm})';\n } else {\n src = '{hour}(?:'+sep+'{minute?}(?:'+sep+'{second?})?)';\n }\n return src;\n }\n\n function getTimeSeparatorSrc() {\n if (loc.timeSeparator) {\n return '[:' + loc.timeSeparator + ']';\n } else {\n return ':';\n }\n }\n\n function getTZOffsetFormat() {\n return '(?:{Z}|{GMT?}(?:{tzHour}(?::?{tzMinute}(?: \\\\([\\\\w\\\\s]+\\\\))?)?)?)?';\n }\n\n function buildParsingTokens() {\n forEachProperty(LocalizedParsingTokens, function(token, name) {\n var src = token.base ? getCoreTokensForBase(token.base) : token.src, arr;\n if (token.requiresNumerals || loc.numeralUnits) {\n src += getNumeralSrc();\n }\n arr = loc[name + 's'];\n if (arr && arr.length) {\n src += '|' + arrayToRegAlternates(arr);\n }\n loc.parsingTokens[name] = src;\n });\n }\n\n function getCoreTokensForBase(base) {\n return map(base.split('|'), function(key) {\n return CoreParsingTokens[key].src;\n }).join('|');\n }\n\n function getNumeralSrc() {\n var all, src = '';\n all = loc.numerals.concat(loc.placeholders).concat(loc.articles);\n if (loc.allowsFullWidth) {\n all = all.concat(fullWidthNumbers.split(''));\n }\n if (all.length) {\n src = '|(?:' + arrayToRegAlternates(all) + ')+';\n }\n return src;\n }\n\n function buildTimeSuffixes() {\n iterateOverDateUnits(function(unit, i) {\n var token = loc.timeSuffixes[i];\n if (token) {\n loc[(unit.alias || unit.name) + 'Suffix'] = token;\n }\n });\n }\n\n function buildModifiers() {\n forEach(loc.modifiers, function(modifier) {\n var name = modifier.name, mapKey = name + 'Map', map;\n map = loc[mapKey] || {};\n forEachAlternate(modifier.src, function(alt, j) {\n var token = getOwn(loc.parsingTokens, name), val = modifier.value;\n map[alt] = val;\n loc.parsingTokens[name] = token ? token + '|' + alt : alt;\n if (modifier.name === 'sign' && j === 0) {\n // Hooking in here to set the first \"fromNow\" or \"ago\" modifier\n // directly on the locale, so that it can be reused in the\n // relative format.\n loc[val === 1 ? 'fromNow' : 'ago'] = alt;\n }\n });\n loc[mapKey] = map;\n });\n }\n\n // -- Format adding helpers\n\n function addCoreFormats() {\n forEach(CoreParsingFormats, function(df) {\n var src = df.src;\n if (df.localeCheck && !df.localeCheck(loc)) {\n return;\n }\n if (df.mdy && loc.mdy) {\n // Use the mm/dd/yyyy variant if it\n // exists and the locale requires it\n src = df.mdy;\n }\n if (df.time) {\n // Core formats that allow time require the time\n // reg on both sides, so add both versions here.\n loc.addFormat(getFormatWithTime(src, true));\n loc.addFormat(getFormatWithTime(src));\n } else {\n loc.addFormat(src);\n }\n });\n loc.addFormat('{time}');\n }\n\n function addLocaleFormats() {\n addFormatSet('parse');\n addFormatSet('timeParse', true);\n addFormatSet('timeFrontParse', true, true);\n }\n\n function addFormatSet(field, allowTime, timeFront) {\n forEach(loc[field], function(format) {\n if (allowTime) {\n format = getFormatWithTime(format, timeFront);\n }\n loc.addFormat(format);\n });\n }\n\n function getFormatWithTime(baseFormat, timeBefore) {\n if (timeBefore) {\n return getTimeBefore() + baseFormat;\n }\n return baseFormat + getTimeAfter();\n }\n\n function getTimeBefore() {\n return getRegNonCapturing('{time}[,\\\\s\\\\u3000]', true);\n }\n\n function getTimeAfter() {\n var markers = ',?[\\\\s\\\\u3000]', localized;\n localized = arrayToRegAlternates(loc.timeMarkers);\n if (localized) {\n markers += '| (?:' + localized + ') ';\n }\n markers = getRegNonCapturing(markers, loc.timeMarkerOptional);\n return getRegNonCapturing(markers + '{time}{tzOffset}', true);\n }\n\n initFormats();\n initDefinition();\n initArrayFields();\n\n buildValueArray('month', 12);\n buildValueArray('weekday', 7);\n buildValueArray('unit', 8);\n buildValueArray('ampm', 2);\n\n buildNumerals();\n buildTimeFormats();\n buildParsingTokens();\n buildTimeSuffixes();\n buildModifiers();\n\n // The order of these formats is important. Order is reversed so formats\n // that are initialized later will take precedence. Generally, this means\n // that more specific formats should come later.\n addCoreFormats();\n addLocaleFormats();\n\n }\n\n };\n\n return new Locale(def);\n}\n\nmodule.exports = getNewLocale;","'use strict';\n\nvar getEnglishVariant = require('../internal/getEnglishVariant');\n\nvar CanadianEnglishDefinition = getEnglishVariant({\n 'short': '{yyyy}-{MM}-{dd}',\n 'medium': '{d} {Month}, {yyyy}',\n 'long': '{d} {Month}, {yyyy} {H}:{mm}',\n 'full': '{Weekday}, {d} {Month}, {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}'\n});\n\nmodule.exports = CanadianEnglishDefinition;","'use strict';\n\nvar EnglishLocaleBaseDefinition = {\n 'code': 'en',\n 'plural': true,\n 'timeMarkers': 'at',\n 'ampm': 'AM|A.M.|a,PM|P.M.|p',\n 'units': 'millisecond:|s,second:|s,minute:|s,hour:|s,day:|s,week:|s,month:|s,year:|s',\n 'months': 'Jan:uary|,Feb:ruary|,Mar:ch|,Apr:il|,May,Jun:e|,Jul:y|,Aug:ust|,Sep:tember|t|,Oct:ober|,Nov:ember|,Dec:ember|',\n 'weekdays': 'Sun:day|,Mon:day|,Tue:sday|,Wed:nesday|,Thu:rsday|,Fri:day|,Sat:urday|+weekend',\n 'numerals': 'zero,one|first,two|second,three|third,four:|th,five|fifth,six:|th,seven:|th,eight:|h,nin:e|th,ten:|th',\n 'articles': 'a,an,the',\n 'tokens': 'the,st|nd|rd|th,of|in,a|an,on',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{num} {unit} {sign}',\n 'duration': '{num} {unit}',\n 'modifiers': [\n { 'name': 'half', 'src': 'half', 'value': .5 },\n { 'name': 'midday', 'src': 'noon', 'value': 12 },\n { 'name': 'midday', 'src': 'midnight', 'value': 24 },\n { 'name': 'day', 'src': 'yesterday', 'value': -1 },\n { 'name': 'day', 'src': 'today|tonight', 'value': 0 },\n { 'name': 'day', 'src': 'tomorrow', 'value': 1 },\n { 'name': 'sign', 'src': 'ago|before', 'value': -1 },\n { 'name': 'sign', 'src': 'from now|after|from|in|later', 'value': 1 },\n { 'name': 'edge', 'src': 'first day|first|beginning', 'value': -2 },\n { 'name': 'edge', 'src': 'last day', 'value': 1 },\n { 'name': 'edge', 'src': 'end|last', 'value': 2 },\n { 'name': 'shift', 'src': 'last', 'value': -1 },\n { 'name': 'shift', 'src': 'the|this', 'value': 0 },\n { 'name': 'shift', 'src': 'next', 'value': 1 }\n ],\n 'parse': [\n '(?:just)? now',\n '{shift} {unit:5-7}',\n '{months?} {year}',\n '{midday} {4?} {day|weekday}',\n '{months},?[-.\\\\/\\\\s]?{year?}',\n '{edge} of (?:day)? {day|weekday}',\n '{0} {num}{1?} {weekday} {2} {months},? {year?}',\n '{shift?} {day?} {weekday?} (?:at)? {midday}',\n '{sign?} {3?} {half} {3?} {unit:3-4|unit:7} {sign?}',\n '{0?} {edge} {weekday?} {2} {shift?} {unit:4-7?} {months?},? {year?}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift} {unit:5?} {weekday}',\n '{0?} {date}{1?} {2?} {months?}',\n '{weekday} {2?} {shift} {unit:5}',\n '{0?} {num} {2?} {months}\\\\.?,? {year?}',\n '{num?} {unit:4-5} {sign} {day|weekday}',\n '{0|months} {date?}{1?} of {shift} {unit:6-7}',\n '{0?} {num}{1?} {weekday} of {shift} {unit:6}',\n '{year?}[-.\\\\/\\\\s]?{months}[-.\\\\/\\\\s]{date}',\n '{date}[-.\\\\/\\\\s]{months}(?:[-.\\\\/\\\\s]{year|yy})?',\n '{weekday?}\\\\.?,? {months}\\\\.?,? {date}{1?},? {year?}',\n '{weekday?}\\\\.?,? {date} {months} {year}'\n ],\n 'timeFrontParse': [\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{4?} {day|weekday}'\n ]\n};\n\nmodule.exports = EnglishLocaleBaseDefinition;","'use strict';\n\nvar getEnglishVariant = require('../internal/getEnglishVariant');\n\nvar BritishEnglishDefinition = getEnglishVariant({\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {Month} {yyyy}',\n 'long': '{d} {Month} {yyyy} {H}:{mm}',\n 'full': '{Weekday}, {d} {Month}, {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}'\n});\n\nmodule.exports = BritishEnglishDefinition;","'use strict';\n\nvar BritishEnglishDefinition = require('./BritishEnglishDefinition'),\n AmericanEnglishDefinition = require('./AmericanEnglishDefinition'),\n CanadianEnglishDefinition = require('./CanadianEnglishDefinition');\n\nvar LazyLoadedLocales = {\n 'en-US': AmericanEnglishDefinition,\n 'en-GB': BritishEnglishDefinition,\n 'en-AU': BritishEnglishDefinition,\n 'en-CA': CanadianEnglishDefinition\n};\n\nmodule.exports = LazyLoadedLocales;","'use strict';\n\n// Static Methods\nrequire('./addLocale');\nrequire('./create');\nrequire('./getAllLocaleCodes');\nrequire('./getAllLocales');\nrequire('./getLocale');\nrequire('./removeLocale');\nrequire('./setLocale');\n\n// Instance Methods\nrequire('../number/day');\nrequire('../number/dayAfter');\nrequire('../number/dayAgo');\nrequire('../number/dayBefore');\nrequire('../number/dayFromNow');\nrequire('../number/days');\nrequire('../number/daysAfter');\nrequire('../number/daysAgo');\nrequire('../number/daysBefore');\nrequire('../number/daysFromNow');\nrequire('../number/duration');\nrequire('../number/hour');\nrequire('../number/hourAfter');\nrequire('../number/hourAgo');\nrequire('../number/hourBefore');\nrequire('../number/hourFromNow');\nrequire('../number/hours');\nrequire('../number/hoursAfter');\nrequire('../number/hoursAgo');\nrequire('../number/hoursBefore');\nrequire('../number/hoursFromNow');\nrequire('../number/millisecond');\nrequire('../number/millisecondAfter');\nrequire('../number/millisecondAgo');\nrequire('../number/millisecondBefore');\nrequire('../number/millisecondFromNow');\nrequire('../number/milliseconds');\nrequire('../number/millisecondsAfter');\nrequire('../number/millisecondsAgo');\nrequire('../number/millisecondsBefore');\nrequire('../number/millisecondsFromNow');\nrequire('../number/minute');\nrequire('../number/minuteAfter');\nrequire('../number/minuteAgo');\nrequire('../number/minuteBefore');\nrequire('../number/minuteFromNow');\nrequire('../number/minutes');\nrequire('../number/minutesAfter');\nrequire('../number/minutesAgo');\nrequire('../number/minutesBefore');\nrequire('../number/minutesFromNow');\nrequire('../number/month');\nrequire('../number/monthAfter');\nrequire('../number/monthAgo');\nrequire('../number/monthBefore');\nrequire('../number/monthFromNow');\nrequire('../number/months');\nrequire('../number/monthsAfter');\nrequire('../number/monthsAgo');\nrequire('../number/monthsBefore');\nrequire('../number/monthsFromNow');\nrequire('../number/second');\nrequire('../number/secondAfter');\nrequire('../number/secondAgo');\nrequire('../number/secondBefore');\nrequire('../number/secondFromNow');\nrequire('../number/seconds');\nrequire('../number/secondsAfter');\nrequire('../number/secondsAgo');\nrequire('../number/secondsBefore');\nrequire('../number/secondsFromNow');\nrequire('../number/week');\nrequire('../number/weekAfter');\nrequire('../number/weekAgo');\nrequire('../number/weekBefore');\nrequire('../number/weekFromNow');\nrequire('../number/weeks');\nrequire('../number/weeksAfter');\nrequire('../number/weeksAgo');\nrequire('../number/weeksBefore');\nrequire('../number/weeksFromNow');\nrequire('../number/year');\nrequire('../number/yearAfter');\nrequire('../number/yearAgo');\nrequire('../number/yearBefore');\nrequire('../number/yearFromNow');\nrequire('../number/years');\nrequire('../number/yearsAfter');\nrequire('../number/yearsAgo');\nrequire('../number/yearsBefore');\nrequire('../number/yearsFromNow');\nrequire('./addDays');\nrequire('./addHours');\nrequire('./addMilliseconds');\nrequire('./addMinutes');\nrequire('./addMonths');\nrequire('./addSeconds');\nrequire('./addWeeks');\nrequire('./addYears');\nrequire('./advance');\nrequire('./beginningOfDay');\nrequire('./beginningOfISOWeek');\nrequire('./beginningOfMonth');\nrequire('./beginningOfWeek');\nrequire('./beginningOfYear');\nrequire('./clone');\nrequire('./daysAgo');\nrequire('./daysFromNow');\nrequire('./daysInMonth');\nrequire('./daysSince');\nrequire('./daysUntil');\nrequire('./endOfDay');\nrequire('./endOfISOWeek');\nrequire('./endOfMonth');\nrequire('./endOfWeek');\nrequire('./endOfYear');\nrequire('./format');\nrequire('./get');\nrequire('./getISOWeek');\nrequire('./getUTCOffset');\nrequire('./getUTCWeekday');\nrequire('./getWeekday');\nrequire('./hoursAgo');\nrequire('./hoursFromNow');\nrequire('./hoursSince');\nrequire('./hoursUntil');\nrequire('./is');\nrequire('./isAfter');\nrequire('./isBefore');\nrequire('./isBetween');\nrequire('./isFriday');\nrequire('./isFuture');\nrequire('./isLastMonth');\nrequire('./isLastWeek');\nrequire('./isLastYear');\nrequire('./isLeapYear');\nrequire('./isMonday');\nrequire('./isNextMonth');\nrequire('./isNextWeek');\nrequire('./isNextYear');\nrequire('./isPast');\nrequire('./isSaturday');\nrequire('./isSunday');\nrequire('./isThisMonth');\nrequire('./isThisWeek');\nrequire('./isThisYear');\nrequire('./isThursday');\nrequire('./isToday');\nrequire('./isTomorrow');\nrequire('./isTuesday');\nrequire('./isUTC');\nrequire('./isValid');\nrequire('./isWednesday');\nrequire('./isWeekday');\nrequire('./isWeekend');\nrequire('./isYesterday');\nrequire('./iso');\nrequire('./millisecondsAgo');\nrequire('./millisecondsFromNow');\nrequire('./millisecondsSince');\nrequire('./millisecondsUntil');\nrequire('./minutesAgo');\nrequire('./minutesFromNow');\nrequire('./minutesSince');\nrequire('./minutesUntil');\nrequire('./monthsAgo');\nrequire('./monthsFromNow');\nrequire('./monthsSince');\nrequire('./monthsUntil');\nrequire('./relative');\nrequire('./relativeTo');\nrequire('./reset');\nrequire('./rewind');\nrequire('./secondsAgo');\nrequire('./secondsFromNow');\nrequire('./secondsSince');\nrequire('./secondsUntil');\nrequire('./set');\nrequire('./setISOWeek');\nrequire('./setUTC');\nrequire('./setWeekday');\nrequire('./weeksAgo');\nrequire('./weeksFromNow');\nrequire('./weeksSince');\nrequire('./weeksUntil');\nrequire('./yearsAgo');\nrequire('./yearsFromNow');\nrequire('./yearsSince');\nrequire('./yearsUntil');\n\n// Accessors\nrequire('./getOption');\nrequire('./setOption');\n\nmodule.exports = require('sugar-core');"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:///./node_modules/diacritics/index.js","webpack:///./node_modules/sugar-core/sugar-core.js","webpack:///./node_modules/sugar-date/common/internal/allCharsReg.js","webpack:///./node_modules/sugar-date/common/internal/callDateGet.js","webpack:///./node_modules/sugar-date/common/internal/callDateSet.js","webpack:///./node_modules/sugar-date/common/internal/collectSimilarMethods.js","webpack:///./node_modules/sugar-date/common/internal/commaSplit.js","webpack:///./node_modules/sugar-date/common/internal/createFormatMatcher.js","webpack:///./node_modules/sugar-date/common/internal/defineAccessor.js","webpack:///./node_modules/sugar-date/common/internal/defineInstanceSimilar.js","webpack:///./node_modules/sugar-date/common/internal/defineOnPrototype.js","webpack:///./node_modules/sugar-date/common/internal/defineOptionsAccessor.js","webpack:///./node_modules/sugar-date/common/internal/escapeRegExp.js","webpack:///./node_modules/sugar-date/common/internal/filter.js","webpack:///./node_modules/sugar-date/common/internal/forEach.js","webpack:///./node_modules/sugar-date/common/internal/getKeys.js","webpack:///./node_modules/sugar-date/common/internal/getOrdinalSuffix.js","webpack:///./node_modules/sugar-date/common/internal/getOwnKey.js","webpack:///./node_modules/sugar-date/common/internal/getSparseArrayIndexes.js","webpack:///./node_modules/sugar-date/common/internal/hasOwnEnumeratedProperties.js","webpack:///./node_modules/sugar-date/common/internal/hasValidPlainObjectPrototype.js","webpack:///./node_modules/sugar-date/common/internal/isArrayIndex.js","webpack:///./node_modules/sugar-date/common/internal/isClass.js","webpack:///./node_modules/sugar-date/common/internal/isDefined.js","webpack:///./node_modules/sugar-date/common/internal/isObjectType.js","webpack:///./node_modules/sugar-date/common/internal/isPlainObject.js","webpack:///./node_modules/sugar-date/common/internal/isUndefined.js","webpack:///./node_modules/sugar-date/common/internal/iterateOverSparseArray.js","webpack:///./node_modules/sugar-date/common/internal/map.js","webpack:///./node_modules/sugar-date/common/internal/memoizeFunction.js","webpack:///./node_modules/sugar-date/common/internal/padNumber.js","webpack:///./node_modules/sugar-date/common/internal/periodSplit.js","webpack:///./node_modules/sugar-date/common/internal/privatePropertyAccessor.js","webpack:///./node_modules/sugar-date/common/internal/repeatString.js","webpack:///./node_modules/sugar-date/common/internal/setChainableConstructor.js","webpack:///./node_modules/sugar-date/common/internal/simpleCapitalize.js","webpack:///./node_modules/sugar-date/common/internal/simpleClone.js","webpack:///./node_modules/sugar-date/common/internal/simpleMerge.js","webpack:///./node_modules/sugar-date/common/internal/spaceSplit.js","webpack:///./node_modules/sugar-date/common/internal/trim.js","webpack:///./node_modules/sugar-date/common/internal/withPrecision.js","webpack:///./node_modules/sugar-date/common/internal/wrapNamespace.js","webpack:///./node_modules/sugar-date/common/var/CommonChars.js","webpack:///./node_modules/sugar-date/common/var/INTERNAL_MEMOIZE_LIMIT.js","webpack:///./node_modules/sugar-date/common/var/NATIVE_TYPES.js","webpack:///./node_modules/sugar-date/common/var/PRIVATE_PROP_PREFIX.js","webpack:///./node_modules/sugar-date/common/var/STRING_FORMAT_REG.js","webpack:///./node_modules/sugar-date/common/var/_utc.js","webpack:///./node_modules/sugar-date/common/var/chr.js","webpack:///./node_modules/sugar-date/common/var/classChecks.js","webpack:///./node_modules/sugar-date/common/var/coreUtilityAliases.js","webpack:///./node_modules/sugar-date/common/var/fullwidthNumberHelpers.js","webpack:///./node_modules/sugar-date/common/var/mathAliases.js","webpack:///./node_modules/sugar-date/common/var/methodDefineAliases.js","webpack:///./node_modules/sugar-date/common/var/namespaceAliases.js","webpack:///./node_modules/sugar-date/common/var/trunc.js","webpack:///./node_modules/sugar-date/date/addDays.js","webpack:///./node_modules/sugar-date/date/addHours.js","webpack:///./node_modules/sugar-date/date/addLocale.js","webpack:///./node_modules/sugar-date/date/addMilliseconds.js","webpack:///./node_modules/sugar-date/date/addMinutes.js","webpack:///./node_modules/sugar-date/date/addMonths.js","webpack:///./node_modules/sugar-date/date/addSeconds.js","webpack:///./node_modules/sugar-date/date/addWeeks.js","webpack:///./node_modules/sugar-date/date/addYears.js","webpack:///./node_modules/sugar-date/date/advance.js","webpack:///./node_modules/sugar-date/date/beginningOfDay.js","webpack:///./node_modules/sugar-date/date/beginningOfISOWeek.js","webpack:///./node_modules/sugar-date/date/beginningOfMonth.js","webpack:///./node_modules/sugar-date/date/beginningOfWeek.js","webpack:///./node_modules/sugar-date/date/beginningOfYear.js","webpack:///./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js","webpack:///./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js","webpack:///./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js","webpack:///./node_modules/sugar-date/date/build/setDateChainableConstructorCall.js","webpack:///./node_modules/sugar-date/date/clone.js","webpack:///./node_modules/sugar-date/date/create.js","webpack:///./node_modules/sugar-date/date/daysAgo.js","webpack:///./node_modules/sugar-date/date/daysFromNow.js","webpack:///./node_modules/sugar-date/date/daysInMonth.js","webpack:///./node_modules/sugar-date/date/daysSince.js","webpack:///./node_modules/sugar-date/date/daysUntil.js","webpack:///./node_modules/sugar-date/date/endOfDay.js","webpack:///./node_modules/sugar-date/date/endOfISOWeek.js","webpack:///./node_modules/sugar-date/date/endOfMonth.js","webpack:///./node_modules/sugar-date/date/endOfWeek.js","webpack:///./node_modules/sugar-date/date/endOfYear.js","webpack:///./node_modules/sugar-date/date/format.js","webpack:///./node_modules/sugar-date/date/get.js","webpack:///./node_modules/sugar-date/date/getAllLocaleCodes.js","webpack:///./node_modules/sugar-date/date/getAllLocales.js","webpack:///./node_modules/sugar-date/date/getISOWeek.js","webpack:///./node_modules/sugar-date/date/getLocale.js","webpack:///./node_modules/sugar-date/date/getOption.js","webpack:///./node_modules/sugar-date/date/getUTCOffset.js","webpack:///./node_modules/sugar-date/date/getUTCWeekday.js","webpack:///./node_modules/sugar-date/date/getWeekday.js","webpack:///./node_modules/sugar-date/date/hoursAgo.js","webpack:///./node_modules/sugar-date/date/hoursFromNow.js","webpack:///./node_modules/sugar-date/date/hoursSince.js","webpack:///./node_modules/sugar-date/date/hoursUntil.js","webpack:///./node_modules/sugar-date/date/index.js","webpack:///./node_modules/sugar-date/date/internal/advanceDate.js","webpack:///./node_modules/sugar-date/date/internal/advanceDateWithArgs.js","webpack:///./node_modules/sugar-date/date/internal/arrayToRegAlternates.js","webpack:///./node_modules/sugar-date/date/internal/assertDateIsValid.js","webpack:///./node_modules/sugar-date/date/internal/buildDateUnitMethods.js","webpack:///./node_modules/sugar-date/date/internal/buildNumberUnitMethods.js","webpack:///./node_modules/sugar-date/date/internal/buildRelativeAliases.js","webpack:///./node_modules/sugar-date/date/internal/callDateSetWithWeek.js","webpack:///./node_modules/sugar-date/date/internal/cloneDate.js","webpack:///./node_modules/sugar-date/date/internal/collectDateParamsFromArguments.js","webpack:///./node_modules/sugar-date/date/internal/collectUpdateDateArguments.js","webpack:///./node_modules/sugar-date/date/internal/compareDate.js","webpack:///./node_modules/sugar-date/date/internal/compareDay.js","webpack:///./node_modules/sugar-date/date/internal/createDate.js","webpack:///./node_modules/sugar-date/date/internal/createDateWithContext.js","webpack:///./node_modules/sugar-date/date/internal/dateFormat.js","webpack:///./node_modules/sugar-date/date/internal/dateIsValid.js","webpack:///./node_modules/sugar-date/date/internal/dateRelative.js","webpack:///./node_modules/sugar-date/date/internal/defaultNewDate.js","webpack:///./node_modules/sugar-date/date/internal/deleteDateParam.js","webpack:///./node_modules/sugar-date/date/internal/fullCompareDate.js","webpack:///./node_modules/sugar-date/date/internal/getAdjustedUnit.js","webpack:///./node_modules/sugar-date/date/internal/getAdjustedUnitForDate.js","webpack:///./node_modules/sugar-date/date/internal/getAdjustedUnitForNumber.js","webpack:///./node_modules/sugar-date/date/internal/getArrayWithOffset.js","webpack:///./node_modules/sugar-date/date/internal/getDate.js","webpack:///./node_modules/sugar-date/date/internal/getDateParam.js","webpack:///./node_modules/sugar-date/date/internal/getDateParamKey.js","webpack:///./node_modules/sugar-date/date/internal/getDateParamsFromString.js","webpack:///./node_modules/sugar-date/date/internal/getDaysInMonth.js","webpack:///./node_modules/sugar-date/date/internal/getDaysSince.js","webpack:///./node_modules/sugar-date/date/internal/getEnglishVariant.js","webpack:///./node_modules/sugar-date/date/internal/getExtendedDate.js","webpack:///./node_modules/sugar-date/date/internal/getHigherUnitIndex.js","webpack:///./node_modules/sugar-date/date/internal/getHours.js","webpack:///./node_modules/sugar-date/date/internal/getLowerUnitIndex.js","webpack:///./node_modules/sugar-date/date/internal/getMeridiemToken.js","webpack:///./node_modules/sugar-date/date/internal/getMonth.js","webpack:///./node_modules/sugar-date/date/internal/getNewDate.js","webpack:///./node_modules/sugar-date/date/internal/getNewLocale.js","webpack:///./node_modules/sugar-date/date/internal/getParsingTokenWithSuffix.js","webpack:///./node_modules/sugar-date/date/internal/getRegNonCapturing.js","webpack:///./node_modules/sugar-date/date/internal/getTimeDistanceForUnit.js","webpack:///./node_modules/sugar-date/date/internal/getUTCOffset.js","webpack:///./node_modules/sugar-date/date/internal/getUnitIndexForParamName.js","webpack:///./node_modules/sugar-date/date/internal/getWeekNumber.js","webpack:///./node_modules/sugar-date/date/internal/getWeekYear.js","webpack:///./node_modules/sugar-date/date/internal/getWeekday.js","webpack:///./node_modules/sugar-date/date/internal/getYear.js","webpack:///./node_modules/sugar-date/date/internal/getYearFromAbbreviation.js","webpack:///./node_modules/sugar-date/date/internal/isUTC.js","webpack:///./node_modules/sugar-date/date/internal/iterateOverDateParams.js","webpack:///./node_modules/sugar-date/date/internal/iterateOverDateUnits.js","webpack:///./node_modules/sugar-date/date/internal/iterateOverHigherDateParams.js","webpack:///./node_modules/sugar-date/date/internal/moveToBeginningOfUnit.js","webpack:///./node_modules/sugar-date/date/internal/moveToBeginningOfWeek.js","webpack:///./node_modules/sugar-date/date/internal/moveToEndOfUnit.js","webpack:///./node_modules/sugar-date/date/internal/moveToEndOfWeek.js","webpack:///./node_modules/sugar-date/date/internal/moveToFirstDayOfWeekYear.js","webpack:///./node_modules/sugar-date/date/internal/resetLowerUnits.js","webpack:///./node_modules/sugar-date/date/internal/resetTime.js","webpack:///./node_modules/sugar-date/date/internal/setDate.js","webpack:///./node_modules/sugar-date/date/internal/setDateChainableConstructor.js","webpack:///./node_modules/sugar-date/date/internal/setISOWeekNumber.js","webpack:///./node_modules/sugar-date/date/internal/setMonth.js","webpack:///./node_modules/sugar-date/date/internal/setUnitAndLowerToEdge.js","webpack:///./node_modules/sugar-date/date/internal/setWeekday.js","webpack:///./node_modules/sugar-date/date/internal/setYear.js","webpack:///./node_modules/sugar-date/date/internal/tzOffset.js","webpack:///./node_modules/sugar-date/date/internal/updateDate.js","webpack:///./node_modules/sugar-date/date/internal/walkUnitDown.js","webpack:///./node_modules/sugar-date/date/is.js","webpack:///./node_modules/sugar-date/date/isAfter.js","webpack:///./node_modules/sugar-date/date/isBefore.js","webpack:///./node_modules/sugar-date/date/isBetween.js","webpack:///./node_modules/sugar-date/date/isFriday.js","webpack:///./node_modules/sugar-date/date/isFuture.js","webpack:///./node_modules/sugar-date/date/isLastMonth.js","webpack:///./node_modules/sugar-date/date/isLastWeek.js","webpack:///./node_modules/sugar-date/date/isLastYear.js","webpack:///./node_modules/sugar-date/date/isLeapYear.js","webpack:///./node_modules/sugar-date/date/isMonday.js","webpack:///./node_modules/sugar-date/date/isNextMonth.js","webpack:///./node_modules/sugar-date/date/isNextWeek.js","webpack:///./node_modules/sugar-date/date/isNextYear.js","webpack:///./node_modules/sugar-date/date/isPast.js","webpack:///./node_modules/sugar-date/date/isSaturday.js","webpack:///./node_modules/sugar-date/date/isSunday.js","webpack:///./node_modules/sugar-date/date/isThisMonth.js","webpack:///./node_modules/sugar-date/date/isThisWeek.js","webpack:///./node_modules/sugar-date/date/isThisYear.js","webpack:///./node_modules/sugar-date/date/isThursday.js","webpack:///./node_modules/sugar-date/date/isToday.js","webpack:///./node_modules/sugar-date/date/isTomorrow.js","webpack:///./node_modules/sugar-date/date/isTuesday.js","webpack:///./node_modules/sugar-date/date/isUTC.js","webpack:///./node_modules/sugar-date/date/isValid.js","webpack:///./node_modules/sugar-date/date/isWednesday.js","webpack:///./node_modules/sugar-date/date/isWeekday.js","webpack:///./node_modules/sugar-date/date/isWeekend.js","webpack:///./node_modules/sugar-date/date/isYesterday.js","webpack:///./node_modules/sugar-date/date/iso.js","webpack:///./node_modules/sugar-date/date/millisecondsAgo.js","webpack:///./node_modules/sugar-date/date/millisecondsFromNow.js","webpack:///./node_modules/sugar-date/date/millisecondsSince.js","webpack:///./node_modules/sugar-date/date/millisecondsUntil.js","webpack:///./node_modules/sugar-date/date/minutesAgo.js","webpack:///./node_modules/sugar-date/date/minutesFromNow.js","webpack:///./node_modules/sugar-date/date/minutesSince.js","webpack:///./node_modules/sugar-date/date/minutesUntil.js","webpack:///./node_modules/sugar-date/date/monthsAgo.js","webpack:///./node_modules/sugar-date/date/monthsFromNow.js","webpack:///./node_modules/sugar-date/date/monthsSince.js","webpack:///./node_modules/sugar-date/date/monthsUntil.js","webpack:///./node_modules/sugar-date/date/range.js","webpack:///./node_modules/sugar-date/date/relative.js","webpack:///./node_modules/sugar-date/date/relativeTo.js","webpack:///./node_modules/sugar-date/date/removeLocale.js","webpack:///./node_modules/sugar-date/date/reset.js","webpack:///./node_modules/sugar-date/date/rewind.js","webpack:///./node_modules/sugar-date/date/secondsAgo.js","webpack:///./node_modules/sugar-date/date/secondsFromNow.js","webpack:///./node_modules/sugar-date/date/secondsSince.js","webpack:///./node_modules/sugar-date/date/secondsUntil.js","webpack:///./node_modules/sugar-date/date/set.js","webpack:///./node_modules/sugar-date/date/setISOWeek.js","webpack:///./node_modules/sugar-date/date/setLocale.js","webpack:///./node_modules/sugar-date/date/setOption.js","webpack:///./node_modules/sugar-date/date/setUTC.js","webpack:///./node_modules/sugar-date/date/setWeekday.js","webpack:///./node_modules/sugar-date/date/var/ABBREVIATED_YEAR_REG.js","webpack:///./node_modules/sugar-date/date/var/AmericanEnglishDefinition.js","webpack:///./node_modules/sugar-date/date/var/BritishEnglishDefinition.js","webpack:///./node_modules/sugar-date/date/var/CanadianEnglishDefinition.js","webpack:///./node_modules/sugar-date/date/var/CoreOutputFormats.js","webpack:///./node_modules/sugar-date/date/var/CoreParsingFormats.js","webpack:///./node_modules/sugar-date/date/var/CoreParsingTokens.js","webpack:///./node_modules/sugar-date/date/var/DATE_OPTIONS.js","webpack:///./node_modules/sugar-date/date/var/DateUnitIndexes.js","webpack:///./node_modules/sugar-date/date/var/DateUnits.js","webpack:///./node_modules/sugar-date/date/var/EnglishLocaleBaseDefinition.js","webpack:///./node_modules/sugar-date/date/var/FormatTokensBase.js","webpack:///./node_modules/sugar-date/date/var/ISODefaults.js","webpack:///./node_modules/sugar-date/date/var/LOCALE_ARRAY_FIELDS.js","webpack:///./node_modules/sugar-date/date/var/LazyLoadedLocales.js","webpack:///./node_modules/sugar-date/date/var/LocaleHelpers.js","webpack:///./node_modules/sugar-date/date/var/LocalizedParsingTokens.js","webpack:///./node_modules/sugar-date/date/var/MINUTES.js","webpack:///./node_modules/sugar-date/date/var/TIMEZONE_ABBREVIATION_REG.js","webpack:///./node_modules/sugar-date/date/var/_dateOptions.js","webpack:///./node_modules/sugar-date/date/var/formattingTokens.js","webpack:///./node_modules/sugar-date/date/weeksAgo.js","webpack:///./node_modules/sugar-date/date/weeksFromNow.js","webpack:///./node_modules/sugar-date/date/weeksSince.js","webpack:///./node_modules/sugar-date/date/weeksUntil.js","webpack:///./node_modules/sugar-date/date/yearsAgo.js","webpack:///./node_modules/sugar-date/date/yearsFromNow.js","webpack:///./node_modules/sugar-date/date/yearsSince.js","webpack:///./node_modules/sugar-date/date/yearsUntil.js","webpack:///./node_modules/sugar-date/index.js","webpack:///./node_modules/sugar-date/locales/ca.js","webpack:///./node_modules/sugar-date/locales/da.js","webpack:///./node_modules/sugar-date/locales/de.js","webpack:///./node_modules/sugar-date/locales/es.js","webpack:///./node_modules/sugar-date/locales/fi.js","webpack:///./node_modules/sugar-date/locales/fr.js","webpack:///./node_modules/sugar-date/locales/index.js","webpack:///./node_modules/sugar-date/locales/it.js","webpack:///./node_modules/sugar-date/locales/ja.js","webpack:///./node_modules/sugar-date/locales/ko.js","webpack:///./node_modules/sugar-date/locales/nl.js","webpack:///./node_modules/sugar-date/locales/no.js","webpack:///./node_modules/sugar-date/locales/pl.js","webpack:///./node_modules/sugar-date/locales/pt.js","webpack:///./node_modules/sugar-date/locales/ru.js","webpack:///./node_modules/sugar-date/locales/sv.js","webpack:///./node_modules/sugar-date/locales/zh-CN.js","webpack:///./node_modules/sugar-date/locales/zh-TW.js","webpack:///./node_modules/sugar-date/number/day.js","webpack:///./node_modules/sugar-date/number/dayAfter.js","webpack:///./node_modules/sugar-date/number/dayAgo.js","webpack:///./node_modules/sugar-date/number/dayBefore.js","webpack:///./node_modules/sugar-date/number/dayFromNow.js","webpack:///./node_modules/sugar-date/number/days.js","webpack:///./node_modules/sugar-date/number/daysAfter.js","webpack:///./node_modules/sugar-date/number/daysAgo.js","webpack:///./node_modules/sugar-date/number/daysBefore.js","webpack:///./node_modules/sugar-date/number/daysFromNow.js","webpack:///./node_modules/sugar-date/number/duration.js","webpack:///./node_modules/sugar-date/number/hour.js","webpack:///./node_modules/sugar-date/number/hourAfter.js","webpack:///./node_modules/sugar-date/number/hourAgo.js","webpack:///./node_modules/sugar-date/number/hourBefore.js","webpack:///./node_modules/sugar-date/number/hourFromNow.js","webpack:///./node_modules/sugar-date/number/hours.js","webpack:///./node_modules/sugar-date/number/hoursAfter.js","webpack:///./node_modules/sugar-date/number/hoursAgo.js","webpack:///./node_modules/sugar-date/number/hoursBefore.js","webpack:///./node_modules/sugar-date/number/hoursFromNow.js","webpack:///./node_modules/sugar-date/number/millisecond.js","webpack:///./node_modules/sugar-date/number/millisecondAfter.js","webpack:///./node_modules/sugar-date/number/millisecondAgo.js","webpack:///./node_modules/sugar-date/number/millisecondBefore.js","webpack:///./node_modules/sugar-date/number/millisecondFromNow.js","webpack:///./node_modules/sugar-date/number/milliseconds.js","webpack:///./node_modules/sugar-date/number/millisecondsAfter.js","webpack:///./node_modules/sugar-date/number/millisecondsAgo.js","webpack:///./node_modules/sugar-date/number/millisecondsBefore.js","webpack:///./node_modules/sugar-date/number/millisecondsFromNow.js","webpack:///./node_modules/sugar-date/number/minute.js","webpack:///./node_modules/sugar-date/number/minuteAfter.js","webpack:///./node_modules/sugar-date/number/minuteAgo.js","webpack:///./node_modules/sugar-date/number/minuteBefore.js","webpack:///./node_modules/sugar-date/number/minuteFromNow.js","webpack:///./node_modules/sugar-date/number/minutes.js","webpack:///./node_modules/sugar-date/number/minutesAfter.js","webpack:///./node_modules/sugar-date/number/minutesAgo.js","webpack:///./node_modules/sugar-date/number/minutesBefore.js","webpack:///./node_modules/sugar-date/number/minutesFromNow.js","webpack:///./node_modules/sugar-date/number/month.js","webpack:///./node_modules/sugar-date/number/monthAfter.js","webpack:///./node_modules/sugar-date/number/monthAgo.js","webpack:///./node_modules/sugar-date/number/monthBefore.js","webpack:///./node_modules/sugar-date/number/monthFromNow.js","webpack:///./node_modules/sugar-date/number/months.js","webpack:///./node_modules/sugar-date/number/monthsAfter.js","webpack:///./node_modules/sugar-date/number/monthsAgo.js","webpack:///./node_modules/sugar-date/number/monthsBefore.js","webpack:///./node_modules/sugar-date/number/monthsFromNow.js","webpack:///./node_modules/sugar-date/number/second.js","webpack:///./node_modules/sugar-date/number/secondAfter.js","webpack:///./node_modules/sugar-date/number/secondAgo.js","webpack:///./node_modules/sugar-date/number/secondBefore.js","webpack:///./node_modules/sugar-date/number/secondFromNow.js","webpack:///./node_modules/sugar-date/number/seconds.js","webpack:///./node_modules/sugar-date/number/secondsAfter.js","webpack:///./node_modules/sugar-date/number/secondsAgo.js","webpack:///./node_modules/sugar-date/number/secondsBefore.js","webpack:///./node_modules/sugar-date/number/secondsFromNow.js","webpack:///./node_modules/sugar-date/number/week.js","webpack:///./node_modules/sugar-date/number/weekAfter.js","webpack:///./node_modules/sugar-date/number/weekAgo.js","webpack:///./node_modules/sugar-date/number/weekBefore.js","webpack:///./node_modules/sugar-date/number/weekFromNow.js","webpack:///./node_modules/sugar-date/number/weeks.js","webpack:///./node_modules/sugar-date/number/weeksAfter.js","webpack:///./node_modules/sugar-date/number/weeksAgo.js","webpack:///./node_modules/sugar-date/number/weeksBefore.js","webpack:///./node_modules/sugar-date/number/weeksFromNow.js","webpack:///./node_modules/sugar-date/number/year.js","webpack:///./node_modules/sugar-date/number/yearAfter.js","webpack:///./node_modules/sugar-date/number/yearAgo.js","webpack:///./node_modules/sugar-date/number/yearBefore.js","webpack:///./node_modules/sugar-date/number/yearFromNow.js","webpack:///./node_modules/sugar-date/number/years.js","webpack:///./node_modules/sugar-date/number/yearsAfter.js","webpack:///./node_modules/sugar-date/number/yearsAgo.js","webpack:///./node_modules/sugar-date/number/yearsBefore.js","webpack:///./node_modules/sugar-date/number/yearsFromNow.js","webpack:///./node_modules/sugar-date/range/build/buildDateRangeUnitsCall.js","webpack:///./node_modules/sugar-date/range/clamp.js","webpack:///./node_modules/sugar-date/range/clone.js","webpack:///./node_modules/sugar-date/range/contains.js","webpack:///./node_modules/sugar-date/range/days.js","webpack:///./node_modules/sugar-date/range/every.js","webpack:///./node_modules/sugar-date/range/hours.js","webpack:///./node_modules/sugar-date/range/index.js","webpack:///./node_modules/sugar-date/range/internal/Range.js","webpack:///./node_modules/sugar-date/range/internal/buildDateRangeUnits.js","webpack:///./node_modules/sugar-date/range/internal/cloneRangeMember.js","webpack:///./node_modules/sugar-date/range/internal/createDateRangeFromString.js","webpack:///./node_modules/sugar-date/range/internal/getDateForRange.js","webpack:///./node_modules/sugar-date/range/internal/getDateIncrementObject.js","webpack:///./node_modules/sugar-date/range/internal/getGreaterPrecision.js","webpack:///./node_modules/sugar-date/range/internal/getPrecision.js","webpack:///./node_modules/sugar-date/range/internal/getRangeMemberNumericValue.js","webpack:///./node_modules/sugar-date/range/internal/getRangeMemberPrimitiveValue.js","webpack:///./node_modules/sugar-date/range/internal/incrementDate.js","webpack:///./node_modules/sugar-date/range/internal/incrementNumber.js","webpack:///./node_modules/sugar-date/range/internal/incrementString.js","webpack:///./node_modules/sugar-date/range/internal/isValidRangeMember.js","webpack:///./node_modules/sugar-date/range/internal/rangeClamp.js","webpack:///./node_modules/sugar-date/range/internal/rangeEvery.js","webpack:///./node_modules/sugar-date/range/internal/rangeIsValid.js","webpack:///./node_modules/sugar-date/range/internal/valueIsNotInfinite.js","webpack:///./node_modules/sugar-date/range/intersect.js","webpack:///./node_modules/sugar-date/range/isValid.js","webpack:///./node_modules/sugar-date/range/milliseconds.js","webpack:///./node_modules/sugar-date/range/minutes.js","webpack:///./node_modules/sugar-date/range/months.js","webpack:///./node_modules/sugar-date/range/seconds.js","webpack:///./node_modules/sugar-date/range/span.js","webpack:///./node_modules/sugar-date/range/toArray.js","webpack:///./node_modules/sugar-date/range/toString.js","webpack:///./node_modules/sugar-date/range/union.js","webpack:///./node_modules/sugar-date/range/var/DURATION_REG.js","webpack:///./node_modules/sugar-date/range/var/DURATION_UNITS.js","webpack:///./node_modules/sugar-date/range/var/DateRangeConstructor.js","webpack:///./node_modules/sugar-date/range/var/DurationTextFormats.js","webpack:///./node_modules/sugar-date/range/var/FULL_CAPTURED_DURATION.js","webpack:///./node_modules/sugar-date/range/var/MULTIPLIERS.js","webpack:///./node_modules/sugar-date/range/weeks.js","webpack:///./node_modules/sugar-date/range/years.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/array.js","webpack:///./src/const.js","webpack:///./src/cookie.js","webpack:///./src/dom.js","webpack:///./src/emitter.js","webpack:///./src/event.js","webpack:///./src/feature.js","webpack:///./src/modules/alternateRows.js","webpack:///./src/modules/baseDropdown.js","webpack:///./src/modules/checkList.js","webpack:///./src/modules/clearButton.js","webpack:///./src/modules/dateType.js","webpack:///./src/modules/dropdown.js","webpack:///./src/modules/gridLayout.js","webpack:///./src/modules/hash.js","webpack:///./src/modules/help.js","webpack:///./src/modules/highlightKeywords.js","webpack:///./src/modules/loader.js","webpack:///./src/modules/markActiveColumns.js","webpack:///./src/modules/noResults.js","webpack:///./src/modules/paging.js","webpack:///./src/modules/popupFilter.js","webpack:///./src/modules/rowsCounter.js","webpack:///./src/modules/state.js","webpack:///./src/modules/statusBar.js","webpack:///./src/modules/storage.js","webpack:///./src/modules/toolbar.js","webpack:///./src/number.js","webpack:///./src/root.js","webpack:///./src/settings.js","webpack:///./src/sort.js","webpack:///./src/string.js","webpack:///./src/tablefilter.js","webpack:///./src/tfBase.js","webpack:///./src/types.js"],"names":["has","arr","val","caseSensitive","sCase","Boolean","i","l","length","toString","INPUT","SELECT","MULTIPLE","CHECKLIST","NONE","ENTER_KEY","TAB_KEY","ESC_KEY","UP_ARROW_KEY","DOWN_ARROW_KEY","HEADER_TAG","CELL_TAG","STRING","NUMBER","FORMATTED_NUMBER","DATE","IP_ADDRESS","AUTO_FILTER_DELAY","FEATURES","dateType","class","name","help","enforce","state","markActiveColumns","gridLayout","loader","highlightKeyword","property","popupFilter","rowsCounter","statusBar","clearButton","alternateRows","noResults","paging","toolbar","doc","document","write","value","hours","expire","Date","getTime","toGMTString","cookie","escape","read","cookieValue","search","offset","indexOf","end","unescape","substring","remove","getText","node","textContent","innerText","getFirstTextNode","childNodes","n","nodeType","data","createElm","tag","el","createElement","arg","setAttribute","removeElm","parentNode","removeChild","createText","txt","createTextNode","hasClass","ele","cls","supportsClassList","classList","contains","className","match","RegExp","addClass","add","removeClass","reg","replace","createOpt","text","isSel","isSelected","opt","appendChild","createCheckItem","id","chkValue","labelText","extraAttr","li","label","check","elm","getElementById","o","tagname","getElementsByTagName","documentElement","Emitter","events","evts","fn","forEach","evt","push","splice","apply","slice","call","arguments","addEvt","obj","type","func","capture","addEventListener","attachEvent","removeEvt","removeEventListener","detachEvent","stopEvt","event","stopPropagation","cancelBubble","cancelEvt","preventDefault","returnValue","targetEvt","target","srcElement","keyCode","charCode","which","isKeyPressed","keyCodes","bound","scope","boundFnName","bind","NOT_IMPLEMENTED","Feature","tf","feature","enabled","config","emitter","initialized","on","destroy","Error","enable","init","AlternateRows","evenCss","even_row_css_class","oddCss","odd_row_css_class","processAll","processRowHandler","isEnabled","validRowsIndex","getValidRows","indexLen","idx","j","rowIdx","setRowBg","arrIdx","isValid","removeRowBg","isNaN","rows","dom","rowIndex","arrIndex","processRow","eachRow","row","off","BaseDropdown","f","customSorter","filter_options_sorter","col","comparer","isCustom","opts","optsTxt","excludedOpts","colIndex","options","isCustomOptions","sortSlc","sortNumDesc","compareFn","hasType","decimal","getDecimal","locale","getLocale","undefined","sort","colIndexes","colIdx","values","getValues","build","linkedFilters","selectOptions","activeFilterIdx","disableExcludedOptions","isRowValid","isRowDisplayed","activeFilterId","refreshAll","CheckList","containers","containerCssClass","div_checklist_css_class","filterCssClass","checklist_css_class","itemCssClass","checklist_item_css_class","selectedItemCssClass","checklist_selected_item_css_class","activateText","activate_checklist_text","disabledItemCssClass","checklist_item_disabled_css_class","enableResetOption","enable_checklist_reset_filter","prfx","emit","setItemOption","filter","loadFltOnDemand","getAttribute","ct","div","onCheckListClick","colIdxs","getFiltersByType","refreshFilters","isExternal","container","externalFltTgtId","externalFltIds","divCont","fltIds","buildFilterId","isLinked","linkFilters","Number","flt","ul","customValues","getCustomOptions","activeIdx","getActiveFilterId","getColumnIndexFromFilterId","filteredDataCol","innerHTML","cellValue","getCellValue","cells","cellString","filteredCol","getVisibleColumnValues","k","excludeRows","nbCells","isValidLinkedValue","sortOptions","addChecks","chkCt","addTChecks","y","lbl","fltId","lblIdx","disabled","optionClick","style","display","li0","getClearFilterText","enableEmptyOption","li1","emOperator","emptyText","enableNonEmptyOption","li2","nmOperator","nonEmptyText","chkIndex","dataset","getFilterElement","parseInt","items","slcValues","slcIndexes","checked","indexes","split","separator","chx","orOperator","chx0","replaceValue","replaceIndex","lis","chk","chkVal","fltAttr","substr","ClearButton","btn_reset","targetId","target_id","cssClass","css_class","tooltip","html","enableIcons","toolbarPosition","toolbar_position","element","clearFilters","cont","targetEl","fltReset","onClick","resetEl","firstChild","altName","DateType","datetime","setLocale","addConfigFormats","colTypes","types","dateStr","localeCode","create","parse","colType","getOptions","hasOwnProperty","formats","format","addFormat","ex","root","console","error","Dropdown","enableSlcResetFilter","enable_slc_reset_filter","non_empty_text","multipleSlcTooltip","multiple_slc_tooltip","e","onSlcChange","selectFlts","multipleFlts","concat","getFilterType","slc","multiple","title","toLowerCase","fltCssClass","fltMultiCssClass","opt0","onSlcFocus","addOptions","slcValue","addFirstOption","isDisabled","opt1","opt2","option","selected","selectedOptions","GridLayout","grid_layout","width","height","mainContCssClass","cont_css_class","contCssClass","tbl_cont_css_class","headContCssClass","tbl_head_css_class","infDivCssClass","inf_grid_css_class","headRowIndex","headers_row_index","headRows","headers_rows","filters","noHeaders","no_headers","defaultColWidth","default_col_width","colElms","prfxGridFltTd","prfxGridTh","sourceTblHtml","outerHTML","tblHasColTag","tblMainCont","tblCont","headTblCont","headTbl","fltGrid","tbl","setOverrides","setDefaultColWidths","createContainer","insertBefore","setConfigWidth","t","tblW","initialTableWidth","clientWidth","d","tH","hRow","sortTriggers","getSortTriggerIds","filtersRow","createFiltersRow","setHeadersRow","filtersRowIndex","thead","tableLayout","setColWidths","scrollLeft","extension","asyncSort","triggerIds","setColumnElements","popupFilters","refRow","headersRow","colWidths","eachCol","colW","cell","getHeadersRowIndex","fltTdId","prfxFlt","cl","fltCellTag","cols","getCellsNb","tableHead","c","thId","JSON","location","decodeURIComponent","encodeURIComponent","hasHashChange","docMode","documentMode","Hash","lastHash","boundSync","hash","sync","update","stringify","overrideAndSync","WIKI_URL","WEBSITE_URL","Help","help_instructions","tgtId","contTgtId","container_target_id","instrText","instrHtml","btnText","btn_text","btnHtml","btn_html","btnCssClass","btn_css_class","container_css_class","btn","boundMouseup","defaultHtml","version","year","targetElm","toggle","onMouseup","divContainer","helplink","helpEl","divDisplay","alwaysInstantiate","HighlightKeyword","highlightCssClass","highlight_css_class","unhighlightAll","term","_processTerm","hasChildNodes","children","highlight","nodeVal","nodeValue","termIdx","pn","nv","before","after","highlightedNodes","querySelectorAll","replaceChild","normalize","highlightKeywords","unhighlight","reLk","lkOperator","reEq","eqOperator","reSt","stOperator","reEn","enOperator","reLe","leOperator","reGe","geOperator","reL","lwOperator","reG","grOperator","reD","dfOperator","test","BEFORE_ACTION_EVENTS","AFTER_ACTION_EVENTS","Loader","closeDelay","onShow","on_show_loader","onHide","on_hide_loader","containerDiv","show","p","displayLoader","setTimeout","MarkActiveColumns","mark_active_columns","headerCssClass","header_css_class","cellCssClass","cell_css_class","highlightColumn","highlight_column","onBeforeActiveColumn","on_before_active_column","onAfterActiveColumn","on_after_active_column","clearActiveColumns","markActiveColumn","getHeaderElement","eachColumnCell","header","NoResults","no_results_message","content","customContainer","custom_container","customContainerId","custom_container_id","onBeforeShow","on_before_show_msg","onAfterShow","on_after_show_msg","onBeforeHide","on_before_hide_msg","onAfterHide","on_after_hide_msg","nextSibling","getValidRowsNb","hide","setWidth","tHead","tBodies","Paging","pageSlc","pageLengthSlc","pageLength","pageLengthTgtId","results_per_page_target_id","pgSlcCssClass","slc_css_class","pgInpCssClass","inp_css_class","resultsPerPage","results_per_page","hasResultsPerPage","resultsSlcCssClass","results_slc_css_class","resultsSpanCssClass","results_span_css_class","startPagingRow","nbPages","currentPageNb","btnNextPageText","btn_next_page_text","btnPrevPageText","btn_prev_page_text","btnLastPageText","btn_last_page_text","btnFirstPageText","btn_first_page_text","btnNextPageHtml","btn_next_page_html","btnPrevPageHtml","btn_prev_page_html","btnFirstPageHtml","btn_first_page_html","btnLastPageHtml","btn_last_page_html","pageText","page_text","ofText","of_text","nbPgSpanCssClass","nb_pages_css_class","hasBtns","btns","pageSelectorType","page_selector_type","onBeforeChangePage","on_before_change_page","onAfterChangePage","on_after_change_page","slcResultsTxt","btnNextCont","btnPrevCont","btnLastCont","btnFirstCont","pgCont","pgBefore","pgAfter","startRow","nrows","getRowsNb","Math","ceil","slcIndex","selectedIndex","nbOpts","next","nextIndex","changePage","prev","prevIndex","last","first","_detectKey","sorted","blur","slcPagesChange","nextEvt","prevEvt","lastEvt","firstEvt","slcPages","setResultsPerPage","btnNextSpan","btnPrevSpan","btnLastSpan","btnFirstSpan","btnNext","btnPrev","btnLast","btnFirst","pgBeforeSpan","pgAfterSpan","pgSpan","setPagingInfo","validateAllRows","resetPagingInfo","changePageHandler","changePageResultsHandler","filterTable","validRows","visibility","z","groupByPage","endPagingRow","h","len","validRowIdx","r","rowDisplayed","cmd","isInitialized","btnEvt","cmdtype","slcResultsChange","ev","onChangeResultsPerPage","slcR","slcRText","slcROpts","slcRSpan","currOpt","Option","index","slcPagesSelIndex","nbFilterableRows","slcIdx","pgNb","getPageNb","pglenIndex","getPageLength","changeResultsPerPage","pageNumber","setPage","removeResultsPerPage","PopupFilter","popup_filters","closeOnFiltering","close_on_filtering","iconPath","image","themesPath","activeIconPath","image_active","iconHtml","image_html","placeholderCssClass","placeholder_css_class","div_css_class","adjustToContainer","adjust_to_container","onBeforeOpen","on_before_popup_filter_open","onAfterOpen","on_after_popup_filter_open","onBeforeClose","on_before_popup_filter_close","onAfterClose","on_after_popup_filter_close","fltSpans","fltIcons","filtersCache","fltElms","prfxDiv","closeAll","headerWidth","activeFlt","icon","close","buildIcons","setIconsState","cellIndex","changeState","buildAll","contId","placeholder","isOpen","open","focus","exceptIdx","fltType","isMultipleFilter","active","src","iconImg","RowsCounter","rows_counter","fromToTextSeparator","overText","over_text","onBeforeRefreshCounter","on_before_refresh_counter","onAfterRefreshCounter","on_after_refresh_counter","countDiv","countSpan","countText","refresh","totTxt","getFilterableRowsNb","nbHiddenRows","nbValidRows","pagingStartRow","pagingEndRow","State","cfg","enableHash","enableLocalStorage","enableCookie","persistFilters","persistPageNumber","page_number","persistPageLength","page_length","persistSort","persistColsVisibility","columns_visibility","persistFiltersVisibility","filters_visibility","cookieDuration","cookie_duration","enableStorage","storage","pageNb","hiddenCols","filtersVisibility","prfxCol","pageNbKey","pageLengthKey","filtersVisKey","updatePage","updatePageLength","descending","updateSort","_syncSort","_syncColsVisibility","updateColsVisibility","_syncFiltersVisibility","visible","updateFiltersVisibility","filterValues","getFiltersValue","key","Object","keys","column","hidden","_syncFilters","disable","override","setFilterValue","EVENTS","StatusBar","status_bar","msgContainer","labelContainer","delay","onBeforeShowMsg","onAfterShowMsg","msgFilter","msg_filter","msgPopulate","msg_populate","msgPopulateCheckList","msg_populate_checklist","msgChangePage","msg_change_page","msgClear","msg_clear","msgChangeResults","msg_change_results","msgResetPage","msg_reset_page","msgResetPageLength","msg_reset_page_length","msgSort","msg_sort","msgLoadExtensions","msg_load_extensions","msgLoadThemes","msg_load_themes","statusDiv","statusSpan","statusSpanText","message","localStorage","hasStorage","Storage","duration","save","getKey","Cookie","removeItem","retrieve","prfxTf","path","pathname","LEFT","RIGHT","CENTER","Toolbar","lContCssClass","left_cont_css_class","rContCssClass","right_cont_css_class","cContCssClass","center_cont_css_class","lCont","rCont","cCont","innerCont","left","center","right","Mod","position","css","captions","regex","unformatted","parseFloat","self","global","defaultsBool","defaultVal","defaultsStr","defaultsNb","defaultsArr","defaultsFn","ignoreCase","a","b","x","numSortAsc","numSortDesc","dateSortAsc","date1","date2","dateSortDesc","sortNumberStr","numStr1","numStr2","num1","num2","sortDateStr","dateStr1","dateStr2","trim","isEmpty","rgxEsc","chars","escMatch","String","matchCase","exactMatch","ignoreDiacritics","regexp","modifier","toCamelCase","log","p1","p2","toUpperCase","TableFilter","getFullYear","hasConfig","args","nodeName","filterTypes","map","basePath","base_path","grid","filters_row_index","filters_cell_tag","stylePath","getStylePath","stylesheet","getStylesheetPath","stylesheetId","fltsRowCssClass","flts_row_css_class","enable_icons","alternate_rows","col_widths","flt_css_class","flt_multi_css_class","fltSmallCssClass","flt_small_css_class","singleFltCssClass","single_filter","enterKey","enter_key","onBeforeFilter","on_before_filter","onAfterFilter","on_after_filter","case_sensitive","hasExactMatchByCol","columns_exact_match","exactMatchByCol","exact_match","ignore_diacritics","linked_filters","disable_excluded_options","hasExcludedRows","exclude_rows","external_flt_ids","onFiltersLoaded","on_filters_loaded","singleFlt","singleFltExcludeCols","exclude_cols","onRowValidated","on_row_validated","cellParser","cell_parser","EMPTY_FN","watermark","isWatermarkArray","clearFilterText","clear_filter_text","enable_empty_option","empty_text","enable_non_empty_option","on_change","sort_select","isSortNumAsc","sort_num_asc","sortNumAsc","isSortNumDesc","sort_num_desc","load_filters_on_demand","hasCustomOptions","custom_options","customOptions","rgxOperator","regexp_operator","empty_operator","nonempty_operator","or_operator","anOperator","and_operator","greater_operator","lower_operator","lower_equal_operator","greater_equal_operator","different_operator","like_operator","equal_operator","start_with_operator","end_with_operator","displayBtn","btnReset","onBeforeReset","on_before_reset","onAfterReset","on_after_reset","autoFilter","auto_filter","autoFilterDelay","isUserTyping","autoFilterTimer","highlight_keywords","thousandsSeparator","thousands_separator","decimalSeparator","decimal_separator","col_types","prfxValButton","prfxResponsive","stickyCssClass","extensions","enableDefaultTheme","enable_default_theme","hasThemes","themes","getThemesPath","responsive","stickyHeaders","sticky_headers","_mod_","ExtRegistry","instantiateFeatures","item","import","inpclass","loadThemes","initFeatures","_initNoFilters","fltrow","_insertFiltersRow","fltCell","colSpan","dropdown","isExternalFlt","checkList","_buildInputFilter","_buildSubmitButton","setActiveFilterId","setExcludeRows","setFixedLayout","initExtensions","clearInterval","setInterval","insertRow","inpType","inp","onInpFocus","detectKey","onKeyDown","onKeyUp","onInpBlur","features","Cls","exts","__webpack_public_path__","ext","loadExtension","hasExtension","modulePath","require","mod","inst","default","defaultTheme","theme","styleId","isImported","removeExternalFlts","destroyExtensions","deleteRow","ids","externalFlt","optTxt","optArray","slcTexts","texts","slcSort","sorts","hiddenRows","searchArgs","occurence","isMatch","isSingleFltMatch","sA","sAOrSplit","hasMultiOrSA","sAAndSplit","hasMultiAndSA","cS","s","found","w","_match","validateRow","numData","reEm","reNm","reRe","hasLO","hasLE","hasGR","hasGE","hasDF","hasEQ","hasLK","hasST","hasEN","hasEM","hasNM","hasRE","dte1","dte2","isValidDate","parseDate","isLDate","isLEDate","isGDate","isGEDate","isDFDate","isEQDate","isExactMatch","srchArg","rgx","searchArg","lastIndexOf","ignoresDiacritics","includeHeaders","exclude","getColValues","typed","colValues","getContent","getCellData","getHeadersText","isExludedRow","fltValue","fltColType","getFilterValue","bool","tr","nbRows","getWorkingRows","excludeHiddenCols","getTableData","tblData","headers","rowData","isColHidden","cellContent","filteredData","rData","getFilteredDataCol","getRowDisplay","validColValues","unshift","displayFlag","validFlag","query","tableWidth","defaultWidth","reduce","colTags","frag","createDocumentFragment","filterId","style_path","themes_path","getFilterId","ignoreDiac","clearText","continueFn","breakFn","startIdx","filePath","imported","attr","files","fileId","callback","isLoaded","file","head","onload","onreadystatechange","readyState","onerror","reCalc","table","headerText","TfBase","UNDEFINED","isObj","prototype","isFn","isArray","isString","isNumber","isBoolean","isUndef","isNull"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAQ,oBAAoB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA,yCAAiC;;AAEjC;AACA;AACA;AACA,aAAK;AACL;AACA;AACA;AACA,cAAM;AACN;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,6DAAqD,6BAA6B,2BAA2B;AAC7G;AACA,gCAAwB,kCAAkC;AAC1D,cAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA,kDAA0C,oBAAoB,WAAW;;AAEzE;AACA;AACA;AACA;AACA,wBAAgB,uBAAuB;AACvC;;;AAGA;AACA;;;;;;;;;;;;AC1KA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,eAAe,4BAA4B;AAC3C;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;;;;;;;;;;;AC3TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B,gBAAgB,gCAAgC;AAChD,gBAAgB,yBAAyB;AACzC,gBAAgB,QAAQ;AACxB,gBAAgB,QAAQ;AACxB,gBAAgB,QAAQ;AACxB,gBAAgB,QAAQ;AACxB,eAAe,cAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;;AAEA;AACA,4BAA4B,sBAAsB;;AAElD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,aAAa;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,+BAA+B,MAAM,IAAI,IAAI;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,qCAAqC,UAAU;AAC/C;;AAEA;AACA;AACA;;AAEA,uCAAuC,UAAU;AACjD;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,SAAS;AAClC;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,gBAAgB;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,yCAAyC,SAAS;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAqC,SAAS;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC,SAAS;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qCAAqC,SAAS;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC,SAAS;AAC9C;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B,QAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,mBAAmB;AACxC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yCAAyC;AACzC;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,WAAW;AACtB;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;;;AAGA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA,GAAG;;;AAGH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,UAAU;AACV;AACA;AACA,wBAAwB;AACxB,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,UAAU;AACV;AACA;AACA,wBAAwB;AACxB,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;;;AAGH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;;AAGH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yCAAyC,WAAW;AAC7E;AACA;AACA;AACA;AACA,sBAAsB,yCAAyC,WAAW;AAC1E;AACA;AACA;AACA;AACA;;AAEA,GAAG;;;AAGH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;;AAEH,CAAC,a;;;;;;;;;;;;;ACjnFD;;AAEA;AACA;AACA;;AAEA,6B;;;;;;;;;;;;ACNA;;AAEA;;AAEA;AACA;AACA;;AAEA,6B;;;;;;;;;;;;ACRA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6B;;;;;;;;;;;;ACnBA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,uC;;;;;;;;;;;;ACnBA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,4B;;;;;;;;;;;;ACVA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;;AAEA,qC;;;;;;;;;;;;ACzFA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,gC;;;;;;;;;;;;ACVA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,uC;;;;;;;;;;;;ACXA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA,mC;;;;;;;;;;;;ACbA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA,uC;;;;;;;;;;;;ACpCA;;AAEA;;AAEA;;AAEA;AACA;AACA,uCAAuC;AACvC;;AAEA,8B;;;;;;;;;;;;ACXA;;AAEA;AACA;AACA,mCAAmC,SAAS;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wB;;;;;;;;;;;;ACbA;;AAEA;;AAEA;AACA,mCAAmC,SAAS;AAC5C;AACA;AACA;AACA;AACA;AACA;;AAEA,yB;;;;;;;;;;;;ACbA;;AAEA;AACA;AACA;;AAEA,yB;;;;;;;;;;;;ACNA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kC;;;;;;;;;;;;ACfA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,2B;;;;;;;;;;;;ACZA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,uC;;;;;;;;;;;;ACzBA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4C;;;;;;;;;;;;ACrBA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8C;;;;;;;;;;;;ACtBA;;AAEA;AACA;AACA;;AAEA,8B;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,yB;;;;;;;;;;;;ACbA;;AAEA;AACA;AACA;;AAEA,2B;;;;;;;;;;;;ACNA;;AAEA;AACA;AACA;;AAEA,8B;;;;;;;;;;;;ACNA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,+B;;;;;;;;;;;;ACdA;;AAEA;AACA;AACA;;AAEA,6B;;;;;;;;;;;;ACNA;;AAEA;;AAEA;AACA;AACA,uCAAuC,SAAS;AAChD;AACA;AACA;AACA;AACA;;AAEA,wC;;;;;;;;;;;;ACbA;;AAEA;AACA;AACA;AACA,mCAAmC,SAAS;AAC5C;AACA;AACA;AACA;AACA;AACA;;AAEA,qB;;;;;;;;;;;;ACbA;;AAEA;AACA;;AAEA;;AAEA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;;;;;;;ACxBA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2B;;;;;;;;;;;;AChBA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,6B;;;;;;;;;;;;ACVA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yC;;;;;;;;;;;;AClBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8B;;;;;;;;;;;;AChBA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yC;;;;;;;;;;;;ACRA;;AAEA;AACA;AACA;;AAEA,kC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;AACA,uBAAuB;AACvB;;AAEA,6B;;;;;;;;;;;;ACRA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,6B;;;;;;;;;;;;ACbA;;AAEA;AACA;AACA;;AAEA,4B;;;;;;;;;;;;ACNA;;AAEA;AACA;AACA;;AAEA,sB;;;;;;;;;;;;ACNA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,+B;;;;;;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,+B;;;;;;;;;;;;ACRA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,iBAAiB;AACjB,E;;;;;;;;;;;;ACVA;;AAEA,sB;;;;;;;;;;;;ACFA;;AAEA,kF;;;;;;;;;;;;ACFA;;AAEA,2B;;;;;;;;;;;;ACFA;;AAEA,sBAAsB,MAAM,IAAI,IAAI,iB;;;;;;;;;;;;ACFpC;;AAEA;;AAEA,gD;;;;;;;;;;;;ACJA;;AAEA,qC;;;;;;;;;;;;ACFA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;;;;;;;ACzIA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;;;;;;;ACZA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,E;;;;;;;;;;;;ACrCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;;;;;;;ACVA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;;;;;;;ACZA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;;;;;;;ACZA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,uB;;;;;;;;;;;;ACZA;;AAEA;;AAEA;;AAEA,oC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,qC;;;;;;;;;;;;ACNA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,sC;;;;;;;;;;;;ACfA;;AAEA;;AAEA;;AAEA,4C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,sC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,qC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,qC;;;;;;;;;;;;ACNA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,oC;;;;;;;;;;;;ACbA;;AAEA;;AAEA;;AAEA,2C;;;;;;;;;;;;ACNA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+C;;;;;;;;;;;;ACtBA;;AAEA;;AAEA;;AAEA,6C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,4C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,4C;;;;;;;;;;;;ACNA;;AAEA;;AAEA,uB;;;;;;;;;;;;ACJA;;AAEA;;AAEA,yB;;;;;;;;;;;;ACJA;;AAEA;;AAEA,uB;;;;;;;;;;;;ACJA;;AAEA;;AAEA,8B;;;;;;;;;;;;ACJA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,kC;;;;;;;;;;;;ACbA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,mC;;;;;;;;;;;;ACfA;;AAEA;;AAEA;;AAEA,oC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,wC;;;;;;;;;;;;ACNA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,wC;;;;;;;;;;;;ACbA;;AAEA;;AAEA;;AAEA,sC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,sC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,qC;;;;;;;;;;;;ACNA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,yC;;;;;;;;;;;;ACrBA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,sC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,sC;;;;;;;;;;;;ACNA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,mC;;;;;;;;;;;;ACbA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,gC;;;;;;;;;;;;ACbA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,8C;;;;;;;;;;;;AChBA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,0C;;;;;;;;;;;;ACfA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,uC;;;;;;;;;;;;ACbA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,sC;;;;;;;;;;;;ACfA;;AAEA;AACA;;AAEA,sC;;;;;;;;;;;;ACLA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,yC;;;;;;;;;;;;ACbA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,0C;;;;;;;;;;;;ACZA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,uC;;;;;;;;;;;;ACbA;;AAEA;;AAEA;;AAEA,qC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,yC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kG;;;;;;;;;;;;ACpMA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6B;;;;;;;;;;;;ACVA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,qC;;;;;;;;;;;;ACVA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sC;;;;;;;;;;;;ACjBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mC;;;;;;;;;;;;ACVA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oEAAoE,eAAe;AACnF;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,GAAG;;AAEH;;AAEA,sC;;;;;;;;;;;;AC1DA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA,wC;;;;;;;;;;;;ACrCA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA,sC;;;;;;;;;;;;ACvBA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,qC;;;;;;;;;;;;ACbA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2B;;;;;;;;;;;;ACZA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,gD;;;;;;;;;;;;ACnBA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA,4C;;;;;;;;;;;;ACzBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6B;;;;;;;;;;;;AC7EA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4B;;;;;;;;;;;;AClBA;;AAEA;;AAEA;AACA;AACA;;AAEA,4B;;;;;;;;;;;;ACRA;;AAEA;;AAEA;AACA;AACA;;AAEA,uC;;;;;;;;;;;;ACRA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,oDAAoD,KAAK;AACzD;AACA;;AAEA,4B;;;;;;;;;;;;ACdA;;AAEA;AACA;AACA;;AAEA,6B;;;;;;;;;;;;ACNA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,8B;;;;;;;;;;;;AC3CA;;AAEA;AACA;AACA;;AAEA,gC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;AACA;AACA;;AAEA,iC;;;;;;;;;;;;ACRA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;;;;;;;ACvCA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,iC;;;;;;;;;;;;ACnBA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA,wC;;;;;;;;;;;;AC9BA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA,0C;;;;;;;;;;;;ACZA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oC;;;;;;;;;;;;ACVA;;AAEA;;AAEA;AACA;AACA;;AAEA,yB;;;;;;;;;;;;ACRA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,8B;;;;;;;;;;;;ACXA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;;;;;;;ACVA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yC;;;;;;;;;;;;AChBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gC;;;;;;;;;;;;ACVA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,8B;;;;;;;;;;;;ACZA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mC;;;;;;;;;;;;ACVA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,+BAA+B,8BAA8B;AAC7D;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,0BAA0B,uBAAuB;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;;;;;;;AC3cA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,oC;;;;;;;;;;;;ACXA;;AAEA;;AAEA;AACA;AACA;;AAEA,0B;;;;;;;;;;;;ACRA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,mC;;;;;;;;;;;;AClBA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,kC;;;;;;;;;;;;ACbA;;AAEA;;AAEA;AACA;AACA;;AAEA,0B;;;;;;;;;;;;ACRA;;AAEA;;AAEA;AACA;AACA;;AAEA,4B;;;;;;;;;;;;ACRA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,kBAAkB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,OAAO;AACtC;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;;AAEA;AACA,wBAAwB,MAAM,KAAK,OAAO;AAC1C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,6BAA6B,UAAU;AACvC;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM,EAAE,KAAK,KAAK,OAAO,OAAO,OAAO;AACzD,SAAS;AACT,kBAAkB,KAAK,WAAW,QAAQ,WAAW,QAAQ,IAAI,MAAM,GAAG,KAAK;AAC/E,SAAS;AACT,kBAAkB,KAAK,WAAW,QAAQ,WAAW,QAAQ;AAC7D;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA,oBAAoB,EAAE,EAAE,KAAK,IAAI,OAAO,MAAM,SAAS;AACvD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT,wBAAwB,KAAK;AAC7B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,KAAK;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,MAAM,SAAS;AAC7D;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA,8B;;;;;;;;;;;;ACljBA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,2C;;;;;;;;;;;;ACjBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oC;;;;;;;;;;;;ACZA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wC;;;;;;;;;;;;AC3CA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8B;;;;;;;;;;;;ACnBA;;AAEA;;AAEA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,0C;;;;;;;;;;;;ACdA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,+B;;;;;;;;;;;;ACzCA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA,6B;;;;;;;;;;;;AC7BA;;AAEA;;AAEA;AACA;AACA;;AAEA,4B;;;;;;;;;;;;ACRA;;AAEA;;AAEA;AACA;AACA;;AAEA,yB;;;;;;;;;;;;ACRA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yC;;;;;;;;;;;;ACtBA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,uB;;;;;;;;;;;;ACTA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA,uC;;;;;;;;;;;;AC/BA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,8BAA8B,mBAAmB;AACjD;AACA;AACA;AACA;AACA;;AAEA,sC;;;;;;;;;;;;ACpBA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,6C;;;;;;;;;;;;ACZA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,uC;;;;;;;;;;;;AClBA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,uC;;;;;;;;;;;;ACbA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;;;;;;;AClBA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;;;;;;;ACdA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,0C;;;;;;;;;;;;ACfA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,iC;;;;;;;;;;;;ACTA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,2B;;;;;;;;;;;;ACXA;;AAEA;;AAEA;AACA;AACA;;AAEA,yB;;;;;;;;;;;;ACRA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,6C;;;;;;;;;;;;ACZA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kC;;;;;;;;;;;;ACjCA;;AAEA;;AAEA;AACA;AACA;;AAEA,0B;;;;;;;;;;;;ACRA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,uC;;;;;;;;;;;;ACrBA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4B;;;;;;;;;;;;AC3BA;;AAEA;;AAEA;AACA;AACA;;AAEA,yB;;;;;;;;;;;;ACRA;;AAEA;AACA;AACA;;AAEA,0B;;;;;;;;;;;;ACNA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,oBAAoB;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd,GAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4B;;;;;;;;;;;;AC5KA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8B;;;;;;;;;;;;ACdA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,+B;;;;;;;;;;;;ACbA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,oC;;;;;;;;;;;;ACbA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,qC;;;;;;;;;;;;ACbA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,sC;;;;;;;;;;;;ACvBA;;AAEA;;AAEA;;AAEA,qC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,qC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,wC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uC;;;;;;;;;;;;ACdA;;AAEA;;AAEA;;AAEA,qC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,wC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,mC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,qC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,wC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,oC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,sC;;;;;;;;;;;;ACNA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,kC;;;;;;;;;;;;ACbA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,oC;;;;;;;;;;;;ACbA;;AAEA;;AAEA;;AAEA,wC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,sC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,sC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,wC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,gC;;;;;;;;;;;;ACZA;;AAEA;;AAEA;;AAEA,4C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,gD;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,8C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,8C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,2C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,yC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,yC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,sC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,0C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,wC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,wC;;;;;;;;;;;;ACNA;;AAEA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;AAED,kC;;;;;;;;;;;;ACXA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,qC;;;;;;;;;;;;ACbA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,uC;;;;;;;;;;;;ACdA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,yC;;;;;;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,kC;;;;;;;;;;;;ACnBA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,mC;;;;;;;;;;;;ACbA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,2C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,yC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,yC;;;;;;;;;;;;ACNA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,gC;;;;;;;;;;;;ACfA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,uC;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A;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,mC;;;;;;;;;;;;ACtEA;;AAEA;;AAEA;AACA;AACA;;AAEA,8B;;;;;;;;;;;;ACRA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;;;;;;;ACRA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2B;;;;;;;;;;;;ACnEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,EAAE,EAAE,GAAG;AACnB,YAAY,IAAI,EAAE,KAAK,EAAE,KAAK;AAC9B,cAAc,IAAI,EAAE,KAAK,EAAE,KAAK;AAChC,gBAAgB,IAAI,EAAE,KAAK;AAC3B;AACA,KAAK,+CAA+C;AACpD,KAAK,+CAA+C;AACpD,KAAK,mDAAmD;AACxD,KAAK,oDAAoD;AACzD,KAAK,uDAAuD;AAC5D,KAAK,kDAAkD;AACvD,KAAK,qDAAqD;AAC1D,KAAK,sEAAsE;AAC3E,KAAK,oEAAoE;AACzE,KAAK,kDAAkD;AACvD,KAAK,kDAAkD;AACvD,KAAK,+CAA+C;AACpD,KAAK,kDAAkD;AACvD,KAAK;AACL;AACA;AACA;AACA,MAAM,MAAM,EAAE,SAAS;AACvB,MAAM,QAAQ,EAAE,KAAK;AACrB,MAAM,OAAO,EAAE,GAAG,EAAE,YAAY;AAChC,MAAM,OAAO,cAAc,MAAM;AACjC,MAAM,KAAK,cAAc,YAAY;AACrC,MAAM,EAAE,EAAE,KAAK,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,IAAI,MAAM;AACnD,MAAM,OAAO,EAAE,KAAK,EAAE,SAAS,UAAU,OAAO;AAChD,MAAM,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM;AACvD,MAAM,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,IAAI,MAAM;AACxE;AACA;AACA,MAAM,YAAY;AAClB,MAAM,MAAM,EAAE,QAAQ,EAAE,QAAQ;AAChC,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE,QAAQ;AACnC,MAAM,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO;AACpC,MAAM,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,QAAQ,MAAM;AAC3C,MAAM,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY;AAC3C,MAAM,SAAS,EAAE,OAAO,GAAG,KAAK,MAAM,EAAE,SAAS;AACjD,MAAM,GAAG,EAAE,KAAK,GAAG,EAAE,QAAQ,KAAK,MAAM,EAAE,OAAO;AACjD,MAAM,MAAM,YAAY,OAAO,WAAW,KAAK;AAC/C,MAAM,KAAK,WAAW,OAAO,cAAc,QAAQ;AACnD,MAAM,SAAS,QAAQ,OAAO,QAAQ,MAAM,GAAG,IAAI,MAAM;AACzD,MAAM,SAAS,QAAQ,KAAK,EAAE,OAAO,EAAE,KAAK;AAC5C;AACA;AACA,MAAM,KAAK,EAAE,IAAI,EAAE,KAAK;AACxB,MAAM,IAAI,EAAE,KAAK,EAAE,KAAK;AACxB,MAAM,GAAG,EAAE,YAAY;AACvB;AACA;;AAEA,6C;;;;;;;;;;;;AClEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,aAAa,MAAM;AACnB,GAAG;AACH;AACA;AACA,aAAa,KAAK;AAClB,GAAG;AACH;AACA;AACA,aAAa,MAAM;AACnB;AACA;;AAEA,kC;;;;;;;;;;;;ACvUA;;AAEA;AACA;AACA;AACA,E;;;;;;;;;;;;ACLA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,qC;;;;;;;;;;;;ACRA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,mC;;;;;;;;;;;;ACbA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,E;;;;;;;;;;;;ACzEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA,wC;;;;;;;;;;;;AC/BA;;AAEA,2B;;;;;;;;;;;;ACFA;;AAEA,4BAA4B,IAAI,IAAI,IAAI,M;;;;;;;;;;;;ACFxC;;AAEA;AACA;AACA;;AAEA;;AAEA,gE;;;;;;;;;;;;ACRA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,E;;;;;;;;;;;;AChKA;;AAEA;;AAEA;;AAEA,qC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,yC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,qC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,yC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;AACA;;AAEA,kG;;;;;;;;;;;;ACLA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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ACNA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED,uC;;;;;;;;;;;;ACfA;;AAEA;;AAEA;;AAEA,mC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,wC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,sC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,yC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,0C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,oC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,yC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,0C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,2C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,0C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,+C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,6C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,gD;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,iD;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,2C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,gD;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,8C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,iD;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,kD;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,qC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,0C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,wC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,2C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,4C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,sC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,2C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,yC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,4C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,6C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,oC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,yC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,0C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,2C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,qC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,0C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,wC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,2C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,4C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,qC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,0C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,wC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,2C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,4C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,sC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,2C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,yC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,4C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,6C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,mC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,wC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,sC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,yC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,0C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,oC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,yC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,0C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,2C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,mC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,wC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,sC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,yC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,0C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,oC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,yC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,uC;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,0C;;;;;;;;;;;;ACNA;;AAEA;;AAEA;;AAEA,2C;;;;;;;;;;;;ACNA;;AAEA;;AAEA,sB;;;;;;;;;;;;ACJA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED;AACA,8C;;;;;;;;;;;;ACfA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED;AACA,8C;;;;;;;;;;;;ACdA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA,CAAC;;AAED;AACA,iD;;;;;;;;;;;;ACpBA;;AAEA;;AAEA;AACA,6C;;;;;;;;;;;;ACLA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED;AACA,8C;;;;;;;;;;;;ACfA;;AAEA;;AAEA;AACA,8C;;;;;;;;;;;;ACLA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kG;;;;;;;;;;;;ACzBA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,uB;;;;;;;;;;;;ACTA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,qC;;;;;;;;;;;;AC9BA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,kC;;;;;;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,2C;;;;;;;;;;;;ACvCA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,iC;;;;;;;;;;;;ACnBA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,wC;;;;;;;;;;;;AC7BA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,qC;;;;;;;;;;;;ACXA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,8B;;;;;;;;;;;;ACTA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,4C;;;;;;;;;;;;ACVA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,8C;;;;;;;;;;;;ACXA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA,+B;;;;;;;;;;;;ACjBA;;AAEA;;AAEA;AACA;AACA;;AAEA,iC;;;;;;;;;;;;ACRA;;AAEA;;AAEA;AACA;AACA;;AAEA,iC;;;;;;;;;;;;ACRA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oC;;;;;;;;;;;;ACVA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,4B;;;;;;;;;;;;ACpBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4B;;;;;;;;;;;;ACrEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,8B;;;;;;;;;;;;ACVA;;AAEA;AACA;AACA;;AAEA,oC;;;;;;;;;;;;ACNA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;AACA,kD;;;;;;;;;;;;ACpBA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED;AACA,gD;;;;;;;;;;;;ACfA;;AAEA;;AAEA;AACA,qD;;;;;;;;;;;;ACLA;;AAEA;;AAEA;AACA,gD;;;;;;;;;;;;ACLA;;AAEA;;AAEA;AACA,+C;;;;;;;;;;;;ACLA;;AAEA;;AAEA;AACA,gD;;;;;;;;;;;;ACLA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;AACA,6C;;;;;;;;;;;;ACpBA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED;AACA,gD;;;;;;;;;;;;ACfA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED;AACA,iD;;;;;;;;;;;;ACfA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;AACA,8C;;;;;;;;;;;;ACjBA;;AAEA;;AAEA,oE;;;;;;;;;;;;ACJA;;AAEA,sE;;;;;;;;;;;;ACFA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sC;;;;;;;;;;;;AChBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,E;;;;;;;;;;;;ACRA;;AAEA;;AAEA,+D;;;;;;;;;;;;ACJA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,6B;;;;;;;;;;;;ACTA;;AAEA;;AAEA;AACA,8C;;;;;;;;;;;;ACLA;;AAEA;;AAEA;AACA,8C;;;;;;;;;;;ACLA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;;;;;;;;ACnBA;AAAA;;;AAIA;AAEA;;;;;;;;AAOO,IAAMA,GAAG,GAAG,SAANA,GAAM,CAACC,GAAD,EAAMC,GAAN,EAAWC,aAAX,EAA6B;AAC5C,MAAIC,KAAK,GAAGC,OAAO,CAACF,aAAD,CAAnB;;AACA,OAAK,IAAIG,CAAC,GAAG,CAAR,EAAWC,CAAC,GAAGN,GAAG,CAACO,MAAxB,EAAgCF,CAAC,GAAGC,CAApC,EAAuCD,CAAC,EAAxC,EAA4C;AACxC,QAAI,yDAAS,CAACL,GAAG,CAACK,CAAD,CAAH,CAAOG,QAAP,EAAD,EAAoBL,KAApB,CAAT,KAAwCF,GAA5C,EAAiD;AAC7C,aAAO,IAAP;AACH;AACJ;;AACD,SAAO,KAAP;AACH,CARM,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAIA;;;;;AAIO,IAAMQ,KAAK,GAAG,OAAd;AACP;;;;;AAIO,IAAMC,MAAM,GAAG,QAAf;AACP;;;;;AAIO,IAAMC,QAAQ,GAAG,UAAjB;AACP;;;;;AAIO,IAAMC,SAAS,GAAG,WAAlB;AACP;;;;;AAIO,IAAMC,IAAI,GAAG,MAAb;AAEP;;;;AAIA;;;;;AAIO,IAAMC,SAAS,GAAG,EAAlB;AACP;;;;;AAIO,IAAMC,OAAO,GAAG,CAAhB;AACP;;;;;AAIO,IAAMC,OAAO,GAAG,EAAhB;AACP;;;;;AAIO,IAAMC,YAAY,GAAG,EAArB;AACP;;;;;AAIO,IAAMC,cAAc,GAAG,EAAvB;AAEP;;;;AAIA;;;;;AAIO,IAAMC,UAAU,GAAG,IAAnB;AACP;;;;;AAIO,IAAMC,QAAQ,GAAG,IAAjB;AAEP;;;;AAIA;;;;;AAIO,IAAMC,MAAM,GAAG,QAAf;AAEP;;;;;AAIO,IAAMC,MAAM,GAAG,QAAf;AAEP;;;;;AAIO,IAAMC,gBAAgB,GAAG,kBAAzB;AAEP;;;;;AAIO,IAAMC,IAAI,GAAG,MAAb;AAEP;;;;;AAIO,IAAMC,UAAU,GAAG,WAAnB;AAEP;;;;AAIA;;;;;AAIO,IAAMC,iBAAiB,GAAG,GAA1B;AAEP;;;;;AAIO,IAAMC,QAAQ,GAAG;AACpBC,UAAQ,EAAE;AACNC,SAAK,EAAE,0DADD;AAENC,QAAI,EAAE;AAFA,GADU;AAKpBC,MAAI,EAAE;AACFF,SAAK,EAAE,kDADL;AAEFC,QAAI,EAAE,MAFJ;AAGFE,WAAO,EAAE;AAHP,GALc;AAUpBC,OAAK,EAAE;AACHJ,SAAK,EAAE,oDADJ;AAEHC,QAAI,EAAE;AAFH,GAVa;AAcpBI,mBAAiB,EAAE;AACfL,SAAK,EAAE,4EADQ;AAEfC,QAAI,EAAE;AAFS,GAdC;AAkBpBK,YAAU,EAAE;AACRN,SAAK,EAAE,8DADC;AAERC,QAAI,EAAE;AAFE,GAlBQ;AAsBpBM,QAAM,EAAE;AACJP,SAAK,EAAE,sDADH;AAEJC,QAAI,EAAE;AAFF,GAtBY;AA0BpBO,kBAAgB,EAAE;AACdR,SAAK,EAAE,2EADO;AAEdC,QAAI,EAAE,kBAFQ;AAGdQ,YAAQ,EAAE;AAHI,GA1BE;AA+BpBC,aAAW,EAAE;AACTV,SAAK,EAAE,gEADE;AAETC,QAAI,EAAE,aAFG;AAGTQ,YAAQ,EAAE;AAHD,GA/BO;AAoCpBE,aAAW,EAAE;AACTX,SAAK,EAAE,gEADE;AAETC,QAAI,EAAE;AAFG,GApCO;AAwCpBW,WAAS,EAAE;AACPZ,SAAK,EAAE,4DADA;AAEPC,QAAI,EAAE;AAFC,GAxCS;AA4CpBY,aAAW,EAAE;AACTb,SAAK,EAAE,iEADE;AAETC,QAAI,EAAE,aAFG;AAGTQ,YAAQ,EAAE;AAHD,GA5CO;AAiDpBK,eAAa,EAAE;AACXd,SAAK,EAAE,qEADI;AAEXC,QAAI,EAAE;AAFK,GAjDK;AAqDpBc,WAAS,EAAE;AACPf,SAAK,EAAE,6DADA;AAEPC,QAAI,EAAE;AAFC,GArDS;AAyDpBe,QAAM,EAAE;AACJhB,SAAK,EAAE,uDADH;AAEJC,QAAI,EAAE;AAFF,GAzDY;AA6DpBgB,SAAO,EAAE;AACLjB,SAAK,EAAE,yDADF;AAELC,QAAI,EAAE,SAFD;AAGLE,WAAO,EAAE;AAHJ;AA7DW,CAAjB,C;;;;;;;;;;;;;;AC3IP;AAEA;;;;AAIA,IAAMe,GAAG,GAAG,0CAAI,CAACC,QAAjB;AAEA,+DAAe;AAEX;;;;;;AAMAC,OARW,iBAQLnB,IARK,EAQCoB,KARD,EAQQC,KARR,EAQe;AACtB,QAAIC,MAAM,GAAG,EAAb;;AACA,QAAID,KAAJ,EAAW;AACPC,YAAM,GAAG,IAAIC,IAAJ,CAAU,IAAIA,IAAJ,EAAD,CAAaC,OAAb,KAAyBH,KAAK,GAAG,OAA1C,CAAT;AACAC,YAAM,GAAG,eAAeA,MAAM,CAACG,WAAP,EAAxB;AACH;;AACDR,OAAG,CAACS,MAAJ,GAAa1B,IAAI,GAAG,GAAP,GAAa2B,MAAM,CAACP,KAAD,CAAnB,GAA6BE,MAA1C;AACH,GAfU;;AAiBX;;;;;AAKAM,MAtBW,gBAsBN5B,IAtBM,EAsBA;AACP,QAAI6B,WAAW,GAAG,EAAlB;AAAA,QACIC,MAAM,GAAG9B,IAAI,GAAG,GADpB;;AAEA,QAAIiB,GAAG,CAACS,MAAJ,CAAWjD,MAAX,GAAoB,CAAxB,EAA2B;AACvB,UAAIiD,MAAM,GAAGT,GAAG,CAACS,MAAjB;AAAA,UACIK,MAAM,GAAGL,MAAM,CAACM,OAAP,CAAeF,MAAf,CADb;;AAEA,UAAIC,MAAM,KAAK,CAAC,CAAhB,EAAmB;AACfA,cAAM,IAAID,MAAM,CAACrD,MAAjB;AACA,YAAIwD,GAAG,GAAGP,MAAM,CAACM,OAAP,CAAe,GAAf,EAAoBD,MAApB,CAAV;;AACA,YAAIE,GAAG,KAAK,CAAC,CAAb,EAAgB;AACZA,aAAG,GAAGP,MAAM,CAACjD,MAAb;AACH;;AACDoD,mBAAW,GAAGK,QAAQ,CAACR,MAAM,CAACS,SAAP,CAAiBJ,MAAjB,EAAyBE,GAAzB,CAAD,CAAtB;AACH;AACJ;;AACD,WAAOJ,WAAP;AACH,GAtCU;;AAwCX;;;;AAIAO,QA5CW,kBA4CJpC,IA5CI,EA4CE;AACT,SAAKmB,KAAL,CAAWnB,IAAX,EAAiB,EAAjB,EAAqB,CAAC,CAAtB;AACH;AA9CU,CAAf,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AAEA;;;;AAIA,IAAMiB,GAAG,GAAG,0CAAI,CAACC,QAAjB;AAEA;;;;;;AAKO,IAAMmB,OAAO,GAAG,SAAVA,OAAU,CAACC,IAAD,EAAU;AAC7B,MAAI,sDAAO,CAACA,IAAI,CAACC,WAAN,CAAX,EAA+B;AAC3B,WAAO,oDAAI,CAACD,IAAI,CAACE,SAAN,CAAX;AACH;;AACD,SAAO,oDAAI,CAACF,IAAI,CAACC,WAAN,CAAX;AACH,CALM;AAOP;;;;;;AAKO,IAAME,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACH,IAAD,EAAU;AACtC,OAAK,IAAI/D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+D,IAAI,CAACI,UAAL,CAAgBjE,MAApC,EAA4CF,CAAC,EAA7C,EAAiD;AAC7C,QAAIoE,CAAC,GAAGL,IAAI,CAACI,UAAL,CAAgBnE,CAAhB,CAAR;;AACA,QAAIoE,CAAC,CAACC,QAAF,KAAe,CAAnB,EAAsB;AAClB,aAAOD,CAAC,CAACE,IAAT;AACH;AACJ;AACJ,CAPM;AASP;;;;;;;;AAOO,IAAMC,SAAS,GAAG,SAAZA,SAAY,GAAa;AAClC,MAAIC,GAAG,mDAAP;;AACA,MAAI,CAAC,uDAAQ,CAACA,GAAD,CAAb,EAAoB;AAChB,WAAO,IAAP;AACH;;AAED,MAAIC,EAAE,GAAG/B,GAAG,CAACgC,aAAJ,CAAkBF,GAAlB,CAAT;;AACA,OAAK,IAAIxE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,UAAKE,MAAzB,EAAiCF,CAAC,EAAlC,EAAsC;AAClC,QAAI2E,GAAG,GAAQ3E,CAAR,4BAAQA,CAAR,yBAAQA,CAAR,CAAP;;AAEA,QAAI,sDAAO,CAAC2E,GAAD,CAAP,IAAgBA,GAAG,CAACzE,MAAJ,KAAe,CAAnC,EAAsC;AAClCuE,QAAE,CAACG,YAAH,CAAgBD,GAAG,CAAC,CAAD,CAAnB,EAAwBA,GAAG,CAAC,CAAD,CAA3B;AACH;AACJ;;AACD,SAAOF,EAAP;AACH,CAfM;AAiBP;;;;;;AAKO,IAAMI,SAAS,GAAG,SAAZA,SAAY,CAACd,IAAD;AAAA,SAAUA,IAAI,CAACe,UAAL,CAAgBC,WAAhB,CAA4BhB,IAA5B,CAAV;AAAA,CAAlB;AAEP;;;;;;AAKO,IAAMiB,UAAU,GAAG,SAAbA,UAAa,CAACC,GAAD;AAAA,SAASvC,GAAG,CAACwC,cAAJ,CAAmBD,GAAnB,CAAT;AAAA,CAAnB;AAEP;;;;;;;AAMO,IAAME,QAAQ,GAAG,SAAXA,QAAW,CAACC,GAAD,EAAMC,GAAN,EAAc;AAClC,MAAI,sDAAO,CAACD,GAAD,CAAX,EAAkB;AACd,WAAO,KAAP;AACH;;AAED,MAAIE,iBAAiB,EAArB,EAAyB;AACrB,WAAOF,GAAG,CAACG,SAAJ,CAAcC,QAAd,CAAuBH,GAAvB,CAAP;AACH;;AACD,SAAOD,GAAG,CAACK,SAAJ,CAAcC,KAAd,CAAoB,IAAIC,MAAJ,CAAW,YAAYN,GAAZ,GAAkB,SAA7B,CAApB,CAAP;AACH,CATM;AAWP;;;;;;AAKO,IAAMO,QAAQ,GAAG,SAAXA,QAAW,CAACR,GAAD,EAAMC,GAAN,EAAc;AAClC,MAAI,sDAAO,CAACD,GAAD,CAAX,EAAkB;AACd;AACH;;AAED,MAAIE,iBAAiB,EAArB,EAAyB;AACrBF,OAAG,CAACG,SAAJ,CAAcM,GAAd,CAAkBR,GAAlB;AACA;AACH;;AAED,MAAID,GAAG,CAACK,SAAJ,KAAkB,EAAtB,EAA0B;AACtBL,OAAG,CAACK,SAAJ,GAAgBJ,GAAhB;AACH,GAFD,MAGK,IAAI,CAACF,QAAQ,CAACC,GAAD,EAAMC,GAAN,CAAb,EAAyB;AAC1BD,OAAG,CAACK,SAAJ,IAAiB,MAAMJ,GAAvB;AACH;AACJ,CAhBM;AAkBP;;;;;;AAKO,IAAMS,WAAW,GAAG,SAAdA,WAAc,CAACV,GAAD,EAAMC,GAAN,EAAc;AACrC,MAAI,sDAAO,CAACD,GAAD,CAAX,EAAkB;AACd;AACH;;AAED,MAAIE,iBAAiB,EAArB,EAAyB;AACrBF,OAAG,CAACG,SAAJ,CAAc1B,MAAd,CAAqBwB,GAArB;AACA;AACH;;AACD,MAAIU,GAAG,GAAG,IAAIJ,MAAJ,CAAW,YAAYN,GAAZ,GAAkB,SAA7B,EAAwC,GAAxC,CAAV;AACAD,KAAG,CAACK,SAAJ,GAAgBL,GAAG,CAACK,SAAJ,CAAcO,OAAd,CAAsBD,GAAtB,EAA2B,EAA3B,CAAhB;AACH,CAXM;AAaP;;;;;;;;AAOO,IAAME,SAAS,GAAG,SAAZA,SAAY,CAACC,IAAD,EAAOrD,KAAP,EAAcsD,KAAd,EAAwB;AAC7C,MAAIC,UAAU,GAAGD,KAAK,GAAG,IAAH,GAAU,KAAhC;AACA,MAAIE,GAAG,GAAGD,UAAU,GAChB7B,SAAS,CAAC,QAAD,EAAW,CAAC,OAAD,EAAU1B,KAAV,CAAX,EAA6B,CAAC,UAAD,EAAa,MAAb,CAA7B,CADO,GAEhB0B,SAAS,CAAC,QAAD,EAAW,CAAC,OAAD,EAAU1B,KAAV,CAAX,CAFb;AAGAwD,KAAG,CAACC,WAAJ,CAAgBtB,UAAU,CAACkB,IAAD,CAA1B;AACA,SAAOG,GAAP;AACH,CAPM;AASP;;;;;;;;;AAQO,IAAME,eAAe,GAAG,SAAlBA,eAAkB,CAACC,EAAD,EAAKC,QAAL,EAAeC,SAAf,EAA6C;AAAA,MAAnBC,SAAmB,uEAAP,EAAO;AACxE,MAAIC,EAAE,GAAGrC,SAAS,CAAC,IAAD,CAAlB;AACA,MAAIsC,KAAK,GAAGtC,SAAS,CAAC,OAAD,EAAU,CAAC,KAAD,EAAQiC,EAAR,CAAV,CAArB;AACA,MAAIM,KAAK,GAAGvC,SAAS,CAAC,OAAD,EACjB,CAAC,IAAD,EAAOiC,EAAP,CADiB,EAEjB,CAAC,MAAD,EAASA,EAAT,CAFiB,EAGjB,CAAC,MAAD,EAAS,UAAT,CAHiB,EAIjB,CAAC,OAAD,EAAUC,QAAV,CAJiB,EAKjBE,SALiB,CAArB;AAOAE,OAAK,CAACP,WAAN,CAAkBQ,KAAlB;AACAD,OAAK,CAACP,WAAN,CAAkBtB,UAAU,CAAC0B,SAAD,CAA5B;AACAE,IAAE,CAACN,WAAH,CAAeO,KAAf;AACAD,IAAE,CAACC,KAAH,GAAWA,KAAX;AACAD,IAAE,CAACE,KAAH,GAAWA,KAAX;AACA,SAAOF,EAAP;AACH,CAhBM;AAkBP;;;;;;AAKO,IAAMG,GAAG,GAAG,SAANA,GAAM,CAACP,EAAD;AAAA,SAAQ9D,GAAG,CAACsE,cAAJ,CAAmBR,EAAnB,CAAR;AAAA,CAAZ;AAEP;;;;;;AAKO,IAAMhC,GAAG,GAAG,SAANA,GAAM,CAACyC,CAAD,EAAIC,OAAJ;AAAA,SAAgBD,CAAC,CAACE,oBAAF,CAAuBD,OAAvB,CAAhB;AAAA,CAAZ,C,CAEP;;AACA,SAAS5B,iBAAT,GAA6B;AACzB,SAAO5C,GAAG,CAAC0E,eAAJ,CAAoB7B,SAA3B;AACH,C;;;;;;;;;;;;;;;;;;;;AC/LD;;;AAGA,IAAa8B,OAAb;AAAA;AAAA;AACI;;;AAGA,qBAAc;AAAA;;AACV;;;;AAIA,SAAKC,MAAL,GAAc,EAAd;AACH;AAED;;;;;;;AAZJ;AAAA;AAAA,uBAiBOC,IAjBP,EAiBaC,EAjBb,EAiBiB;AAAA;;AACTD,UAAI,CAACE,OAAL,CAAa,UAACC,GAAD,EAAS;AAClB,aAAI,CAACJ,MAAL,CAAYI,GAAZ,IAAmB,KAAI,CAACJ,MAAL,CAAYI,GAAZ,KAAoB,EAAvC;;AACA,aAAI,CAACJ,MAAL,CAAYI,GAAZ,EAAiBC,IAAjB,CAAsBH,EAAtB;AACH,OAHD;AAIH;AAED;;;;;;AAxBJ;AAAA;AAAA,wBA6BQD,IA7BR,EA6BcC,EA7Bd,EA6BkB;AAAA;;AACVD,UAAI,CAACE,OAAL,CAAa,UAACC,GAAD,EAAS;AAClB,YAAIA,GAAG,IAAI,MAAI,CAACJ,MAAhB,EAAwB;AACpB,gBAAI,CAACA,MAAL,CAAYI,GAAZ,EAAiBE,MAAjB,CAAwB,MAAI,CAACN,MAAL,CAAYI,GAAZ,EAAiBjE,OAAjB,CAAyB+D,EAAzB,CAAxB,EAAsD,CAAtD;AACH;AACJ,OAJD;AAKH;AAED;;;;;;AArCJ;AAAA;AAAA,yBA0CSE;AAAI;AA1Cb,MA0C4B;AACpB,UAAIA,GAAG,IAAI,KAAKJ,MAAhB,EAAwB;AACpB,aAAK,IAAItH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKsH,MAAL,CAAYI,GAAZ,EAAiBxH,MAArC,EAA6CF,CAAC,EAA9C,EAAkD;AAC9C,eAAKsH,MAAL,CAAYI,GAAZ,EAAiB1H,CAAjB,EAAoB6H,KAApB,CAA0B,IAA1B,EAAgC,GAAGC,KAAH,CAASC,IAAT,CAAcC,SAAd,EAAyB,CAAzB,CAAhC;AACH;AACJ;AACJ;AAhDL;;AAAA;AAAA,I;;;;;;;;;;;;;;;;;;;;;;ACHA;AAEA;;;;AAIA;;;;;;;;;;AASO,IAAMC,MAAM,GAAG,SAATA,MAAS,CAACC,GAAD,EAAMC,IAAN,EAAYC,IAAZ,EAAkBC,OAAlB,EAA8B;AAChD,MAAIH,GAAG,CAACI,gBAAR,EAA0B;AACtBJ,OAAG,CAACI,gBAAJ,CAAqBH,IAArB,EAA2BC,IAA3B,EAAiCC,OAAjC;AACH,GAFD,MAGK,IAAIH,GAAG,CAACK,WAAR,EAAqB;AACtBL,OAAG,CAACK,WAAJ,CAAgB,OAAOJ,IAAvB,EAA6BC,IAA7B;AACH,GAFI,MAEE;AACHF,OAAG,CAAC,OAAOC,IAAR,CAAH,GAAmBC,IAAnB;AACH;AACJ,CATM;AAWP;;;;;;;;;;AASO,IAAMI,SAAS,GAAG,SAAZA,SAAY,CAACN,GAAD,EAAMC,IAAN,EAAYC,IAAZ,EAAkBC,OAAlB,EAA8B;AACnD,MAAIH,GAAG,CAACO,mBAAR,EAA6B;AACzBP,OAAG,CAACO,mBAAJ,CAAwBN,IAAxB,EAA8BC,IAA9B,EAAoCC,OAApC;AACH,GAFD,MAEO,IAAIH,GAAG,CAACQ,WAAR,EAAqB;AACxBR,OAAG,CAACQ,WAAJ,CAAgB,OAAOP,IAAvB,EAA6BC,IAA7B;AACH,GAFM,MAEA;AACHF,OAAG,CAAC,OAAOC,IAAR,CAAH,GAAmB,IAAnB;AACH;AACJ,CARM;AAUP;;;;;;AAKO,IAAMQ,OAAO,GAAG,SAAVA,OAAU,CAACjB,GAAD,EAAS;AAC5B,MAAI,CAACA,GAAL,EAAU;AACNA,OAAG,GAAG,0CAAI,CAACkB,KAAX;AACH;;AACD,MAAIlB,GAAG,CAACmB,eAAR,EAAyB;AACrBnB,OAAG,CAACmB,eAAJ;AACH,GAFD,MAEO;AACHnB,OAAG,CAACoB,YAAJ,GAAmB,IAAnB;AACH;AACJ,CATM;AAWP;;;;;;;AAMO,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAACrB,GAAD,EAAS;AAC9B,MAAI,CAACA,GAAL,EAAU;AACNA,OAAG,GAAG,0CAAI,CAACkB,KAAX;AACH;;AACD,MAAIlB,GAAG,CAACsB,cAAR,EAAwB;AACpBtB,OAAG,CAACsB,cAAJ;AACH,GAFD,MAEO;AACHtB,OAAG,CAACuB,WAAJ,GAAkB,KAAlB;AACH;AACJ,CATM;AAWP;;;;;;;AAMO,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAACxB,GAAD,EAAS;AAC9B,MAAI,CAACA,GAAL,EAAU;AACNA,OAAG,GAAG,0CAAI,CAACkB,KAAX;AACH;;AACD,SAAOlB,GAAG,CAACyB,MAAJ,IAAczB,GAAG,CAAC0B,UAAzB;AACH,CALM;AAOP;;;;;;;AAMO,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAAC3B,GAAD,EAAS;AAC5B,SAAOA,GAAG,CAAC4B,QAAJ,GAAe5B,GAAG,CAAC4B,QAAnB,GACF5B,GAAG,CAAC2B,OAAJ,GAAc3B,GAAG,CAAC2B,OAAlB,GAA6B3B,GAAG,CAAC6B,KAAJ,GAAY7B,GAAG,CAAC6B,KAAhB,GAAwB,CAD1D;AAEH,CAHM;AAKP;;;;;;;AAMO,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAAC9B,GAAD,EAAwB;AAAA,MAAlB+B,QAAkB,uEAAP,EAAO;AAChD,SAAOA,QAAQ,CAAChG,OAAT,CAAiB4F,OAAO,CAAC3B,GAAD,CAAxB,MAAmC,CAAC,CAA3C;AACH,CAFM;AAIP;;;;;;AAKO,SAASgC,KAAT,CAAelC,EAAf,EAAmBmC,KAAnB,EAA0B;AAC7B,MAAIC,WAAW,aAAMpC,EAAE,CAAC/F,IAAT,WAAf;;AACA,MAAI,CAACkI,KAAK,CAACC,WAAD,CAAV,EAAyB;AACrBD,SAAK,CAACC,WAAD,CAAL,GAAqBpC,EAAE,CAACqC,IAAH,CAAQF,KAAR,CAArB;AACH;;AACD,SAAOA,KAAK,CAACC,WAAD,CAAZ;AACH,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3HD;AAEA,IAAME,eAAe,GAAG,kBAAxB;AAEA;;;;AAGA,IAAaC,OAAb;AAAA;AAAA;AAAA;;AACI;;;;;AAKA,mBAAYC,EAAZ,EAAgBC,OAAhB,EAAyB5E,GAAzB,EAA8B;AAAA;;AAAA;;AAC1B,iFAAM2E,EAAN,EAAU3E,GAAV;AAEA;;;;;AAIA,UAAK2E,EAAL,GAAUA,EAAV;AAEA;;;;;AAIA,UAAKC,OAAL,GAAeA,OAAf;AAEA;;;;;AAIA,UAAKC,OAAL,GAAeF,EAAE,CAACC,OAAD,CAAjB;AAEA;;;;;AAIA,UAAKE,MAAL,GAAcH,EAAE,CAACG,MAAH,EAAd;AAEA;;;;;AAIA,UAAKC,OAAL,GAAeJ,EAAE,CAACI,OAAlB;AAEA;;;;;AAIA,UAAKC,WAAL,GAAmB,KAAnB;AAEA;;AACA,UAAKD,OAAL,CAAaE,EAAb,CAAgB,CAAC,SAAD,CAAhB,EAA6B;AAAA,aAAM,MAAKC,OAAL,EAAN;AAAA,KAA7B;;AAxC0B;AAyC7B;AAED;;;;;AAjDJ;AAAA;AAAA,2BAoDW;AACH,YAAM,IAAIC,KAAJ,CAAUV,eAAV,CAAN;AACH;AAED;;;;AAxDJ;AAAA;AAAA,4BA2DY;AACJ,WAAKW,MAAL;AACA,WAAKC,IAAL;AACH;AAED;;;;AAhEJ;AAAA;AAAA,8BAmEc;AACN,YAAM,IAAIF,KAAJ,CAAUV,eAAV,CAAN;AACH;AAED;;;;AAvEJ;AAAA;AAAA,6BA0Ea;AACL,WAAKI,OAAL,GAAe,IAAf;AACH;AAED;;;;AA9EJ;AAAA;AAAA,8BAiFc;AACN,WAAKA,OAAL,GAAe,KAAf;AACH;AAED;;;;;AArFJ;AAAA;AAAA,gCAyFgB;AACR,aAAO,KAAKA,OAAL,KAAiB,IAAxB;AACH;AA3FL;;AAAA;AAAA,EAA6B,8CAA7B,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AAEA;;;;AAGA,IAAaS,aAAb;AAAA;AAAA;AAAA;;AAEI;;;;;AAKA,yBAAYX,EAAZ,EAAgB;AAAA;;AAAA;;AACZ,uFAAMA,EAAN,EAAU,eAAV;AAEA,QAAIG,MAAM,GAAG,MAAKA,MAAlB;AACA;;;;;AAIA,UAAKS,OAAL,GAAe,6DAAW,CAACT,MAAM,CAACU,kBAAR,EAA4B,MAA5B,CAA1B;AAEA;;;;;AAIA,UAAKC,MAAL,GAAc,6DAAW,CAACX,MAAM,CAACY,iBAAR,EAA2B,KAA3B,CAAzB;AAdY;AAef;AAED;;;;;AAxBJ;AAAA;AAAA,2BA2BW;AACH,UAAI,KAAKV,WAAT,EAAsB;AAClB;AACH;;AAED,WAAKW,UAAL,GALG,CAOH;;AACA,WAAKZ,OAAL,CAAaE,EAAb,CAAgB,CAAC,eAAD,EAAkB,WAAlB,CAAhB,EACI,oDAAK,CAAC,KAAKW,iBAAN,EAAyB,IAAzB,CADT;AAEA,WAAKb,OAAL,CAAaE,EAAb,CAAgB,CAAC,eAAD,EAAkB,cAAlB,CAAhB,EACI,oDAAK,CAAC,KAAKU,UAAN,EAAkB,IAAlB,CADT;AAGA;;AACA,WAAKX,WAAL,GAAmB,IAAnB;AACH;AAED;;;;AA5CJ;AAAA;AAAA,iCA+CiB;AACT,UAAI,CAAC,KAAKa,SAAL,EAAL,EAAuB;AACnB;AACH;;AACD,UAAIlB,EAAE,GAAG,KAAKA,EAAd;AACA,UAAImB,cAAc,GAAGnB,EAAE,CAACoB,YAAH,CAAgB,IAAhB,CAArB;AACA,UAAIC,QAAQ,GAAGF,cAAc,CAACjL,MAA9B;AACA,UAAIoL,GAAG,GAAG,CAAV,CAPS,CAST;;AACA,WAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,QAApB,EAA8BE,CAAC,EAA/B,EAAmC;AAC/B,YAAIC,MAAM,GAAGL,cAAc,CAACI,CAAD,CAA3B;AACA,aAAKE,QAAL,CAAcD,MAAd,EAAsBF,GAAtB;AACAA,WAAG;AACN;AACJ;AAED;;;;;;;AAhEJ;AAAA;AAAA,+BAsEeE,MAtEf,EAsEuBE,MAtEvB,EAsE+BC,OAtE/B,EAsEwC;AAChC,UAAIA,OAAJ,EAAa;AACT,aAAKF,QAAL,CAAcD,MAAd,EAAsBE,MAAtB;AACH,OAFD,MAEO;AACH,aAAKE,WAAL,CAAiBJ,MAAjB;AACH;AACJ;AAED;;;;;;;;AA9EJ;AAAA;AAAA,6BAqFaA,MArFb,EAqFqBF,GArFrB,EAqF0B;AAClB,UAAI,CAAC,KAAKJ,SAAL,EAAD,IAAqBW,KAAK,CAACL,MAAD,CAA9B,EAAwC;AACpC;AACH;;AACD,UAAIM,IAAI,GAAG,KAAK9B,EAAL,CAAQ+B,GAAR,GAAcD,IAAzB;AACA,UAAI9L,CAAC,GAAG6L,KAAK,CAACP,GAAD,CAAL,GAAaE,MAAb,GAAsBF,GAA9B;AACA,WAAKM,WAAL,CAAiBJ,MAAjB;AAEA5F,MAAA,qDAAQ,CAACkG,IAAI,CAACN,MAAD,CAAL,EAAgBxL,CAAC,GAAG,CAAL,GAAU,KAAK4K,OAAf,GAAyB,KAAKE,MAA7C,CAAR;AACH;AAED;;;;;;AAhGJ;AAAA;AAAA,gCAqGgBQ,GArGhB,EAqGqB;AACb,UAAIO,KAAK,CAACP,GAAD,CAAT,EAAgB;AACZ;AACH;;AACD,UAAIQ,IAAI,GAAG,KAAK9B,EAAL,CAAQ+B,GAAR,GAAcD,IAAzB;AACAhG,MAAA,wDAAW,CAACgG,IAAI,CAACR,GAAD,CAAL,EAAY,KAAKR,MAAjB,CAAX;AACAhF,MAAA,wDAAW,CAACgG,IAAI,CAACR,GAAD,CAAL,EAAY,KAAKV,OAAjB,CAAX;AACH;AAED;;AA9GJ;AAAA;AAAA,sCA+GsBZ,EA/GtB,EA+G0BgC,QA/G1B,EA+GoCC,QA/GpC,EA+G8CN,OA/G9C,EA+GuD;AAC/C,WAAKO,UAAL,CAAgBF,QAAhB,EAA0BC,QAA1B,EAAoCN,OAApC;AACH;AAED;;;;AAnHJ;AAAA;AAAA,8BAsHc;AAAA;;AACN,UAAI,CAAC,KAAKtB,WAAV,EAAuB;AACnB;AACH;;AAED,UAAI8B,OAAO,GAAG,KAAKnC,EAAL,CAAQmC,OAAR,CAAgB,CAAhB,CAAd;AACAA,aAAO,CAAC,UAACC,GAAD,EAAMpM,CAAN;AAAA,eAAY,MAAI,CAAC4L,WAAL,CAAiB5L,CAAjB,CAAZ;AAAA,OAAD,CAAP,CANM,CAQN;;AACA,WAAKoK,OAAL,CAAaiC,GAAb,CAAiB,CAAC,eAAD,EAAkB,WAAlB,CAAjB,EACI,oDAAK,CAAC,KAAKpB,iBAAN,EAAyB,IAAzB,CADT;AAEA,WAAKb,OAAL,CAAaiC,GAAb,CAAiB,CAAC,eAAD,EAAkB,cAAlB,CAAjB,EACI,oDAAK,CAAC,KAAKrB,UAAN,EAAkB,IAAlB,CADT;AAGA,WAAKX,WAAL,GAAmB,KAAnB;AACH;AArIL;;AAAA;AAAA,EAAmC,gDAAnC,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRA;AACA;AAIA;AACA;AAEA;;;;;;;AAMA,IAAaiC,YAAb;AAAA;AAAA;AAAA;;AAEI;;;;AAIA,wBAAYtC,EAAZ,EAAgB;AAAA;;AAAA;;AACZ,sFAAMA,EAAN,EAAU,cAAV;AAEA,QAAIuC,CAAC,GAAG,MAAKpC,MAAb;AAEA;;;;;AAIA,UAAKqC,YAAL,GAAoB,oDAAK,CAACD,CAAC,CAACE,qBAAH,CAAL,IAChB,sDAAO,CAACF,CAAC,CAACE,qBAAF,CAAwBC,GAAzB,CADS,IAEhB,sDAAO,CAACH,CAAC,CAACE,qBAAF,CAAwBE,QAAzB,CAFS,GAGhBJ,CAAC,CAACE,qBAHc,GAIhB,IAJJ,CATY,CAeZ;;AAEA;;;;;;AAKA,UAAKG,QAAL,GAAgB,KAAhB;AAEA;;;;;;AAKA,UAAKC,IAAL,GAAY,EAAZ;AAEA;;;;;;AAKA,UAAKC,OAAL,GAAe,EAAf;AAEA;;;;;;AAKA,UAAKC,YAAL,GAAoB,EAApB;AA3CY;AA4Cf;AAED;;;;;;;;;AApDJ;AAAA;AAAA,gCA2DgBC,QA3DhB,EA2DwC;AAAA,UAAdC,OAAc,uEAAJ,EAAI;AAChC,UAAIjD,EAAE,GAAG,KAAKA,EAAd;;AAEA,UAAIA,EAAE,CAACkD,eAAH,CAAmBF,QAAnB,KAAgC,CAAChD,EAAE,CAACmD,OAApC,IACC,sDAAO,CAACnD,EAAE,CAACmD,OAAJ,CAAP,IAAuBnD,EAAE,CAACmD,OAAH,CAAW1J,OAAX,CAAmBuJ,QAAnB,MAAiC,CAAC,CAD9D,EACkE;AAC9D,eAAOC,OAAP;AACH;;AAN+B,UAQ1BpN,aAR0B,GAQKmK,EARL,CAQ1BnK,aAR0B;AAAA,UAQXuN,WARW,GAQKpD,EARL,CAQXoD,WARW;AAShC,UAAIC,SAAJ;;AAEA,UAAI,KAAKb,YAAL,IACA,KAAKA,YAAL,CAAkBE,GAAlB,CAAsBjJ,OAAtB,CAA8BuJ,QAA9B,MAA4C,CAAC,CADjD,EACoD;AAChD,YAAI1B,GAAG,GAAG,KAAKkB,YAAL,CAAkBE,GAAlB,CAAsBjJ,OAAtB,CAA8BuJ,QAA9B,CAAV;AACAK,iBAAS,GAAG,KAAKb,YAAL,CAAkBG,QAAlB,CAA2BrB,GAA3B,CAAZ;AACH,OAJD,MAKK,IAAItB,EAAE,CAACsD,OAAH,CAAWN,QAAX,EAAqB,CAAC,6CAAD,EAAS,uDAAT,CAArB,CAAJ,EAAsD;AACvD,YAAIO,OAAO,GAAGvD,EAAE,CAACwD,UAAH,CAAcR,QAAd,CAAd;AACA,YAAIL,QAAQ,GAAG,gDAAf;;AACA,YAAIS,WAAW,KAAK,IAAhB,IAAwBA,WAAW,CAAC3J,OAAZ,CAAoBuJ,QAApB,MAAkC,CAAC,CAA/D,EAAkE;AAC9DL,kBAAQ,GAAG,iDAAX;AACH;;AACDU,iBAAS,GAAG,2DAAa,CAACV,QAAD,EAAWY,OAAX,CAAzB;AACH,OAPI,MAQA,IAAIvD,EAAE,CAACsD,OAAH,CAAWN,QAAX,EAAqB,CAAC,2CAAD,CAArB,CAAJ,EAAkC;AACnC,YAAIS,MAAM,GAAGzD,EAAE,CAACC,OAAH,CAAW,UAAX,EAAuByD,SAAvB,CAAiCV,QAAjC,CAAb;AACA,YAAIL,SAAQ,GAAG,iDAAf;AACAU,iBAAS,GAAG,yDAAW,CAACV,SAAD,EAAWc,MAAX,CAAvB;AACH,OAJI,MAIE;AAAE;AACLJ,iBAAS,GAAGxN,aAAa,GAAG8N,SAAH,GAAe,gDAAxC;AACH;;AAED,aAAOV,OAAO,CAACW,IAAR,CAAaP,SAAb,CAAP;AACH;AAED;;;;;;AA9FJ;AAAA;AAAA,mCAmGmBQ,UAnGnB,EAmG+B;AAAA;;AACvBA,gBAAU,CAACpG,OAAX,CAAmB,UAACqG,MAAD,EAAY;AAC3B,YAAIC,MAAM,GAAG,MAAI,CAACC,SAAL,CAAeF,MAAf,CAAb;;AACA,cAAI,CAACG,KAAL,CAAWH,MAAX,EAAmB,MAAI,CAAC9D,EAAL,CAAQkE,aAA3B;;AACA,cAAI,CAACC,aAAL,CAAmBL,MAAnB,EAA2BC,MAA3B;AACH,OAJD;AAKH;AAED;;;;;;;AA3GJ;AAAA;AAAA,uCAiHuBvC,MAjHvB,EAiH+B4C,eAjH/B,EAiHgD;AACxC,UAAIpE,EAAE,GAAG,KAAKA,EAAd;;AAEA,UAAIA,EAAE,CAACqE,sBAAP,EAA+B;AAC3B,eAAO,IAAP;AACH;;AAED,UAAIrE,EAAE,CAACxH,MAAP,EAAe;AACX,YAAI,CAAC,sDAAO,CAAC4L,eAAD,CAAR,IAA6BpE,EAAE,CAACsE,UAAH,CAAc9C,MAAd,CAAjC,EAAwD;AACpD,iBAAO,IAAP;AACH;AACJ,OAJD,MAIO;AACH,YAAIxB,EAAE,CAACuE,cAAH,CAAkB/C,MAAlB,CAAJ,EAA+B;AAC3B,iBAAO,IAAP;AACH;AACJ;;AAED,aAAO,KAAP;AACH;AAED;;;;AArIJ;AAAA;AAAA,kCAwIkB;AACV,UAAIxB,EAAE,GAAG,KAAKA,EAAd;;AACA,UAAI,CAACA,EAAE,CAACkE,aAAJ,IAAqB,CAAClE,EAAE,CAACwE,cAA7B,EAA6C;AACzC;AACH;;AAED,WAAKC,UAAL;AACH;AA/IL;;AAAA;AAAA,EAAkC,gDAAlC,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACdA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;AAMA,IAAaC,SAAb;AAAA;AAAA;AAAA;;AAEI;;;;AAIA,qBAAY1E,EAAZ,EAAgB;AAAA;;AAAA;;AACZ,mFAAMA,EAAN,EAAU,WAAV;AAEA,QAAIuC,CAAC,GAAG,MAAKpC,MAAb;AAEA;;;;;AAIA,UAAKwE,UAAL,GAAkB,EAAlB;AAEA;;;;;AAIA,UAAKC,iBAAL,GAAyB,6DAAW,CAACrC,CAAC,CAACsC,uBAAH,EAChC,eADgC,CAApC;AAGA;;;;;AAIA,UAAKC,cAAL,GAAsB,6DAAW,CAACvC,CAAC,CAACwC,mBAAH,EAC7B,eAD6B,CAAjC;AAGA;;;;;AAIA,UAAKC,YAAL,GAAoB,6DAAW,CAACzC,CAAC,CAAC0C,wBAAH,EAC3B,oBAD2B,CAA/B;AAGA;;;;;AAIA,UAAKC,oBAAL,GAA4B,6DAAW,CACnC3C,CAAC,CAAC4C,iCADiC,EAEnC,wBAFmC,CAAvC;AAKA;;;;;;AAKA,UAAKC,YAAL,GAAoB,6DAAW,CAC3B7C,CAAC,CAAC8C,uBADyB,EAE3B,2BAF2B,CAA/B;AAKA;;;;;AAIA,UAAKC,oBAAL,GAA4B,6DAAW,CACnC/C,CAAC,CAACgD,iCADiC,EAEnC,6BAFmC,CAAvC;AAKA;;;;;AAIA,UAAKC,iBAAL,GAAyB,8DAAY,CAACjD,CAAC,CAACkD,6BAAH,EACjC,IADiC,CAArC;AAGA;;;;;;AAKA,UAAKC,IAAL,GAAY,SAAZ;AAxEY;AAyEf;AAED;;;;;;;AAjFJ;AAAA;AAAA,gCAsFgBhI,GAtFhB,EAsFqB;AACb,UAAIX,GAAG,GAAG,wDAAS,CAACW,GAAD,CAAnB;AACA,UAAIsC,EAAE,GAAG,KAAKA,EAAd;AAEA,WAAKI,OAAL,CAAauF,IAAb,CAAkB,cAAlB,EAAkC3F,EAAlC,EAAsCjD,GAAtC;AACA,WAAK6I,aAAL,CAAmB7I,GAAnB;AACAiD,QAAE,CAAC6F,MAAH;AACH;AAED;;;;;;AA/FJ;AAAA;AAAA,qCAoGqBnI,GApGrB,EAoG0B;AAAA;;AAClB,UAAIX,GAAG,GAAG,wDAAS,CAACW,GAAD,CAAnB;;AACA,UAAI,KAAKsC,EAAL,CAAQ8F,eAAR,IAA2B/I,GAAG,CAACgJ,YAAJ,CAAiB,QAAjB,MAA+B,GAA9D,EAAmE;AAC/D,YAAIC,EAAE,GAAGjJ,GAAG,CAACgJ,YAAJ,CAAiB,IAAjB,CAAT;AACA,YAAIE,GAAG,GAAG,KAAKtB,UAAL,CAAgBqB,EAAhB,CAAV;AACA,aAAK/B,KAAL,CAAW+B,EAAX;AACAxH,QAAA,wDAAS,CAACyH,GAAD,EAAM,OAAN,EAAe,UAACvI,GAAD;AAAA,iBAAS,MAAI,CAACwI,gBAAL,CAAsBxI,GAAtB,CAAT;AAAA,SAAf,CAAT;AACH;AACJ;AAED;;;;AA9GJ;AAAA;AAAA,iCAiHiB;AACT,UAAIyI,OAAO,GAAG,KAAKnG,EAAL,CAAQoG,gBAAR,CAAyB,gDAAzB,EAAoC,IAApC,CAAd;AACA,WAAKC,cAAL,CAAoBF,OAApB;AACH;AAED;;;;;;;AAtHJ;AAAA;AAAA,yBA4HSnD,QA5HT,EA4HmBsD,UA5HnB,EA4H+BC,SA5H/B,EA4H0C;AAAA;;AAClC,UAAIvG,EAAE,GAAG,KAAKA,EAAd;AACA,UAAIwG,gBAAgB,GAAGF,UAAU,GAC7BtG,EAAE,CAACyG,cAAH,CAAkBzD,QAAlB,CAD6B,GACC,IADlC;AAGA,UAAI0D,OAAO,GAAG,sDAAS,CAAC,KAAD,EACnB,CAAC,IAAD,YAAU,KAAKhB,IAAf,SAAsB1C,QAAtB,cAAkChD,EAAE,CAACxD,EAArC,EADmB,EAEnB,CAAC,IAAD,EAAOwG,QAAP,CAFmB,EAED,CAAC,QAAD,EAAW,GAAX,CAFC,CAAvB;AAGA0D,aAAO,CAACjL,SAAR,GAAoB,KAAKmJ,iBAAzB,CARkC,CAUlC;;AACA,UAAI4B,gBAAJ,EAAsB;AAClBzJ,QAAA,gDAAG,CAACyJ,gBAAD,CAAH,CAAsBlK,WAAtB,CAAkCoK,OAAlC;AACH,OAFD,MAEO;AACHH,iBAAS,CAACjK,WAAV,CAAsBoK,OAAtB;AACH;;AAED,WAAK/B,UAAL,CAAgB3B,QAAhB,IAA4B0D,OAA5B;AACA1G,QAAE,CAAC2G,MAAH,CAAUhJ,IAAV,CAAeqC,EAAE,CAAC4G,aAAH,CAAiB5D,QAAjB,CAAf;;AAEA,UAAI,CAAChD,EAAE,CAAC8F,eAAR,EAAyB;AACrB,aAAK7B,KAAL,CAAWjB,QAAX;AACH,OAFD,MAEO;AACH/E,QAAA,qDAAM,CAACyI,OAAD,EAAU,OAAV,EAAmB,UAAChJ,GAAD;AAAA,iBAAS,MAAI,CAACwI,gBAAL,CAAsBxI,GAAtB,CAAT;AAAA,SAAnB,CAAN;AACAgJ,eAAO,CAACpK,WAAR,CAAoB,uDAAU,CAAC,KAAK8I,YAAN,CAA9B;AACH;;AAED,WAAKhF,OAAL,CAAaE,EAAb,CACI,CAAC,wBAAD,CADJ,EAEI,UAACN,EAAD,EAAKgD,QAAL,EAAe6D,QAAf;AAAA,eAA4B,MAAI,CAAC5C,KAAL,CAAWjB,QAAX,EAAqB6D,QAArB,CAA5B;AAAA,OAFJ;AAKA,WAAKzG,OAAL,CAAaE,EAAb,CACI,CAAC,0BAAD,CADJ,EAEI,UAACN,EAAD,EAAKgD,QAAL,EAAee,MAAf;AAAA,eAA0B,MAAI,CAACI,aAAL,CAAmBnB,QAAnB,EAA6Be,MAA7B,CAA1B;AAAA,OAFJ;AAKA,WAAK3D,OAAL,CAAaE,EAAb,CAAgB,CAAC,cAAD,CAAhB,EAAkC;AAAA,eAAM,MAAI,CAACmE,UAAL,EAAN;AAAA,OAAlC;AAEA,WAAKrE,OAAL,CAAaE,EAAb,CAAgB,CAAC,iBAAD,CAAhB,EAAqC;AAAA,eAAM,MAAI,CAACwG,WAAL,EAAN;AAAA,OAArC;AAEA;;AACA,WAAKzG,WAAL,GAAmB,IAAnB;AACH;AAED;;;;;;AAzKJ;AAAA;AAAA,0BA8KU2C,QA9KV,EA8KsC;AAAA;;AAAA,UAAlB6D,QAAkB,uEAAP,KAAO;AAC9B,UAAI7G,EAAE,GAAG,KAAKA,EAAd;AACAgD,cAAQ,GAAG+D,MAAM,CAAC/D,QAAD,CAAjB;AAEA,WAAK5C,OAAL,CAAauF,IAAb,CAAkB,0BAAlB,EAA8C3F,EAA9C,EAAkDgD,QAAlD;AAEA;;AACA,WAAKH,IAAL,GAAY,EAAZ;AACA;;AACA,WAAKC,OAAL,GAAe,EAAf;AAEA,UAAIkE,GAAG,GAAG,KAAKrC,UAAL,CAAgB3B,QAAhB,CAAV;AACA,UAAIiE,EAAE,GAAG,sDAAS,CAAC,IAAD,EACd,CAAC,IAAD,EAAOjH,EAAE,CAAC2G,MAAH,CAAU3D,QAAV,CAAP,CADc,EAEd,CAAC,UAAD,EAAaA,QAAb,CAFc,CAAlB;AAGAiE,QAAE,CAACxL,SAAH,GAAe,KAAKqJ,cAApB;AAEA,UAAIjP,aAAa,GAAGmK,EAAE,CAACnK,aAAvB;AACA;;AACA,WAAK+M,QAAL,GAAgB5C,EAAE,CAACkD,eAAH,CAAmBF,QAAnB,CAAhB,CAnB8B,CAqB9B;;AACA,UAAI,KAAKJ,QAAT,EAAmB;AACf,YAAIsE,YAAY,GAAGlH,EAAE,CAACmH,gBAAH,CAAoBnE,QAApB,CAAnB;AACA,aAAKH,IAAL,GAAYqE,YAAY,CAAC,CAAD,CAAxB;AACA,aAAKpE,OAAL,GAAeoE,YAAY,CAAC,CAAD,CAA3B;AACH;;AAED,UAAIE,SAAJ;AACA,UAAI5C,cAAc,GAAGxE,EAAE,CAACqH,iBAAH,EAArB;;AAEA,UAAIR,QAAQ,IAAIrC,cAAhB,EAAgC;AAC5B4C,iBAAS,GAAGpH,EAAE,CAACsH,0BAAH,CAA8B9C,cAA9B,CAAZ;AACH;;AAED,UAAI+C,eAAe,GAAG,EAAtB;;AACA,UAAIV,QAAQ,IAAI7G,EAAE,CAACqE,sBAAnB,EAA2C;AACvC;AACA,aAAKtB,YAAL,GAAoB,EAApB;AACH;;AAEDiE,SAAG,CAACQ,SAAJ,GAAgB,EAAhB;AAEA,UAAIrF,OAAO,GAAGnC,EAAE,CAACmC,OAAH,EAAd;AACAA,aAAO,CACH,UAACC,GAAD,EAAS;AACL,YAAIqF,SAAS,GAAGzH,EAAE,CAAC0H,YAAH,CAAgBtF,GAAG,CAACuF,KAAJ,CAAU3E,QAAV,CAAhB,CAAhB,CADK,CAEL;;AACA,YAAI4E,UAAU,GAAG,yDAAS,CAACH,SAAD,EAAY5R,aAAZ,CAA1B,CAHK,CAIL;;AACA,YAAI,CAAC,kDAAG,CAAC,MAAI,CAACgN,IAAN,EAAY+E,UAAZ,EAAwB/R,aAAxB,CAAR,EAAgD;AAC5C,gBAAI,CAACgN,IAAL,CAAUlF,IAAV,CAAe8J,SAAf;AACH;;AACD,YAAII,WAAW,GAAGN,eAAe,CAACvE,QAAD,CAAjC;;AACA,YAAI6D,QAAQ,IAAI7G,EAAE,CAACqE,sBAAnB,EAA2C;AACvC,cAAI,CAACwD,WAAL,EAAkB;AACdA,uBAAW,GAAG7H,EAAE,CAAC8H,sBAAH,CAA0B9E,QAA1B,CAAd;AACH;;AACD,cAAI,CAAC,kDAAG,CAAC6E,WAAD,EAAcD,UAAd,EAA0B/R,aAA1B,CAAJ,IACA,CAAC,kDAAG,CAAC,MAAI,CAACkN,YAAN,EAAoB6E,UAApB,EAAgC/R,aAAhC,CADR,EACwD;AACpD,kBAAI,CAACkN,YAAL,CAAkBpF,IAAlB,CAAuB8J,SAAvB;AACH;AACJ;AACJ,OAnBE,EAoBH;AACA,gBAACrF,GAAD,EAAM2F,CAAN,EAAY;AACR;AACA,YAAI/H,EAAE,CAACgI,WAAH,CAAevO,OAAf,CAAuBsO,CAAvB,MAA8B,CAAC,CAAnC,EAAsC;AAClC,iBAAO,IAAP;AACH,SAJO,CAMR;;;AACA,YAAI3F,GAAG,CAACuF,KAAJ,CAAUzR,MAAV,KAAqB8J,EAAE,CAACiI,OAAxB,IAAmC,MAAI,CAACrF,QAA5C,EAAsD;AAClD,iBAAO,IAAP;AACH;;AAED,YAAIiE,QAAQ,IAAI,CAAC,MAAI,CAACqB,kBAAL,CAAwBH,CAAxB,EAA2BX,SAA3B,CAAjB,EAAwD;AACpD,iBAAO,IAAP;AACH;AACJ,OAnCE,CAAP,CA5C8B,CAkF9B;;AACA,WAAKvE,IAAL,GAAY,KAAKsF,WAAL,CAAiBnF,QAAjB,EAA2B,KAAKH,IAAhC,CAAZ;;AACA,UAAI,KAAKE,YAAT,EAAuB;AACnB,aAAKA,YAAL,GAAoB,KAAKoF,WAAL,CAAiBnF,QAAjB,EAA2B,KAAKD,YAAhC,CAApB;AACH;;AAED,WAAKqF,SAAL,CAAepF,QAAf,EAAyBiE,EAAzB;;AAEA,UAAIjH,EAAE,CAAC8F,eAAP,EAAwB;AACpBkB,WAAG,CAACQ,SAAJ,GAAgB,EAAhB;AACH;;AACDR,SAAG,CAAC1K,WAAJ,CAAgB2K,EAAhB;AACAD,SAAG,CAACpM,YAAJ,CAAiB,QAAjB,EAA2B,GAA3B;AAEA,WAAKwF,OAAL,CAAauF,IAAb,CAAkB,yBAAlB,EAA6C3F,EAA7C,EAAiDgD,QAAjD,EAA2DgE,GAA3D;AACH;AAED;;;;;;;AAjRJ;AAAA;AAAA,8BAuRchE,QAvRd,EAuRwBiE,EAvRxB,EAuR4B;AAAA;;AACpB,UAAIjH,EAAE,GAAG,KAAKA,EAAd;AACA,UAAIqI,KAAK,GAAG,KAAKC,UAAL,CAAgBtF,QAAhB,EAA0BiE,EAA1B,CAAZ;;AAEA,WAAK,IAAIsB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK1F,IAAL,CAAU3M,MAA9B,EAAsCqS,CAAC,EAAvC,EAA2C;AACvC,YAAI3S,GAAG,GAAG,KAAKiN,IAAL,CAAU0F,CAAV,CAAV,CADuC,CACf;;AACxB,YAAIC,GAAG,GAAG,KAAK5F,QAAL,GAAgB,KAAKE,OAAL,CAAayF,CAAb,CAAhB,GAAkC3S,GAA5C,CAFuC,CAEU;;AACjD,YAAI6S,KAAK,GAAGzI,EAAE,CAAC2G,MAAH,CAAU3D,QAAV,CAAZ;AACA,YAAI0F,MAAM,GAAGH,CAAC,GAAGF,KAAjB;AACA,YAAIzL,EAAE,GAAG,4DAAe,WAAI6L,KAAJ,cAAaC,MAAb,GAAuB9S,GAAvB,EAA4B4S,GAA5B,EACpB,CAAC,UAAD,EAAaE,MAAb,CADoB,CAAxB;AAEA9L,UAAE,CAACnB,SAAH,GAAe,KAAKuJ,YAApB;;AAEA,YAAIhF,EAAE,CAACkE,aAAH,IAAoBlE,EAAE,CAACqE,sBAAvB,IACA,kDAAG,CAAC,KAAKtB,YAAN,EAAoB,yDAAS,CAACnN,GAAD,EAAMoK,EAAE,CAACnK,aAAT,CAA7B,EACCmK,EAAE,CAACnK,aADJ,CADP,EAE2B;AACvB+F,UAAA,qDAAQ,CAACgB,EAAD,EAAK,KAAK0I,oBAAV,CAAR;AACA1I,YAAE,CAACE,KAAH,CAAS6L,QAAT,GAAoB,IAApB;AACA/L,YAAE,CAAC+L,QAAH,GAAc,IAAd;AACH,SAND,MAMO;AACH1K,UAAA,qDAAM,CAACrB,EAAE,CAACE,KAAJ,EAAW,OAAX,EAAoB,UAAAY,GAAG;AAAA,mBAAI,MAAI,CAACkL,WAAL,CAAiBlL,GAAjB,CAAJ;AAAA,WAAvB,CAAN;AACH;;AACDuJ,UAAE,CAAC3K,WAAH,CAAeM,EAAf;;AAEA,YAAIhH,GAAG,KAAK,EAAZ,EAAgB;AACZ;AACAgH,YAAE,CAACiM,KAAH,CAASC,OAAT,GAAmB,2CAAnB;AACH;AACJ;AACJ;AAED;;;;;;;AAtTJ;AAAA;AAAA,+BA4Te9F,QA5Tf,EA4TyBiE,EA5TzB,EA4T6B;AAAA;;AACrB,UAAIjH,EAAE,GAAG,KAAKA,EAAd;AACA,UAAIqI,KAAK,GAAG,CAAZ;AACA,UAAII,KAAK,GAAGzI,EAAE,CAAC2G,MAAH,CAAU3D,QAAV,CAAZ;AACA,UAAI+F,GAAG,GAAG,4DAAe,WAAIN,KAAJ,SAAe,EAAf,EACrBzI,EAAE,CAACgJ,kBAAH,CAAsBhG,QAAtB,CADqB,EACY,CAAC,UAAD,EAAa,CAAb,CADZ,CAAzB;AAEA+F,SAAG,CAACtN,SAAJ,GAAgB,KAAKuJ,YAArB;AACAiC,QAAE,CAAC3K,WAAH,CAAeyM,GAAf;AAEA9K,MAAA,qDAAM,CAAC8K,GAAG,CAACjM,KAAL,EAAY,OAAZ,EAAqB,UAAAY,GAAG;AAAA,eAAI,MAAI,CAACkL,WAAL,CAAiBlL,GAAjB,CAAJ;AAAA,OAAxB,CAAN;;AAEA,UAAI,CAAC,KAAK8H,iBAAV,EAA6B;AACzBuD,WAAG,CAACF,KAAJ,CAAUC,OAAV,GAAoB,2CAApB;AACH;;AAED,UAAI9I,EAAE,CAACiJ,iBAAP,EAA0B;AACtB,YAAIC,GAAG,GAAG,4DAAe,WAAIT,KAAJ,SAAezI,EAAE,CAACmJ,UAAlB,EACrBnJ,EAAE,CAACoJ,SADkB,EACP,CAAC,UAAD,EAAa,CAAb,CADO,CAAzB;AAEAF,WAAG,CAACzN,SAAJ,GAAgB,KAAKuJ,YAArB;AACAiC,UAAE,CAAC3K,WAAH,CAAe4M,GAAf;AACAjL,QAAA,qDAAM,CAACiL,GAAG,CAACpM,KAAL,EAAY,OAAZ,EAAqB,UAAAY,GAAG;AAAA,iBAAI,MAAI,CAACkL,WAAL,CAAiBlL,GAAjB,CAAJ;AAAA,SAAxB,CAAN;AACA2K,aAAK;AACR;;AAED,UAAIrI,EAAE,CAACqJ,oBAAP,EAA6B;AACzB,YAAIC,GAAG,GAAG,4DAAe,WAAIb,KAAJ,SAAezI,EAAE,CAACuJ,UAAlB,EACrBvJ,EAAE,CAACwJ,YADkB,EACJ,CAAC,UAAD,EAAa,CAAb,CADI,CAAzB;AAEAF,WAAG,CAAC7N,SAAJ,GAAgB,KAAKuJ,YAArB;AACAiC,UAAE,CAAC3K,WAAH,CAAegN,GAAf;AACArL,QAAA,qDAAM,CAACqL,GAAG,CAACxM,KAAL,EAAY,OAAZ,EAAqB,UAAAY,GAAG;AAAA,iBAAI,MAAI,CAACkL,WAAL,CAAiBlL,GAAjB,CAAJ;AAAA,SAAxB,CAAN;AACA2K,aAAK;AACR;;AACD,aAAOA,KAAP;AACH;AAED;;;;;;AA/VJ;AAAA;AAAA,kCAoWkBpL,CApWlB,EAoWqB;AAAA;;AACb,UAAI,CAACA,CAAL,EAAQ;AACJ;AACH;;AAED,UAAI+C,EAAE,GAAG,KAAKA,EAAd;AACA,UAAIvD,QAAQ,GAAGQ,CAAC,CAACpE,KAAjB,CANa,CAMW;;AACxB,UAAI4Q,QAAQ,GAAGxM,CAAC,CAACyM,OAAF,CAAUpI,GAAzB;AACA,UAAIwC,MAAM,GAAG9D,EAAE,CAACsH,0BAAH,CAA8BrK,CAAC,CAACT,EAAhC,CAAb;AACA,UAAIpC,CAAC,GAAG4F,EAAE,CAAC2J,gBAAH,CAAoBC,QAAQ,CAAC9F,MAAD,EAAS,EAAT,CAA5B,CAAR;AACA,UAAI+F,KAAK,GAAGzP,CAAC,CAACD,UAAd;AACA,UAAIyC,EAAE,GAAGiN,KAAK,CAACJ,QAAD,CAAd,CAXa,CAYb;;AACA,UAAIK,SAAS,GAAG1P,CAAC,CAAC2L,YAAF,CAAe,OAAf,KAA2B,EAA3C,CAba,CAcb;;AACA,UAAIgE,UAAU,GAAG3P,CAAC,CAAC2L,YAAF,CAAe,SAAf,KAA6B,EAA9C;;AAEA,UAAI9I,CAAC,CAAC+M,OAAN,EAAe;AACX;AACA,YAAIvN,QAAQ,KAAK,EAAjB,EAAqB;AACjB;AACA,cAAIwN,OAAO,GAAGF,UAAU,CAACG,KAAX,CAAiBlK,EAAE,CAACmK,SAApB,CAAd;AACAF,iBAAO,CAACxM,OAAR,CAAgB,UAAA6D,GAAG,EAAI;AACnBA,eAAG,GAAGyF,MAAM,CAACzF,GAAD,CAAZ;AACA,gBAAI1E,EAAE,GAAGiN,KAAK,CAACvI,GAAD,CAAd;AACA,gBAAI8I,GAAG,GAAG,gDAAG,CAACxN,EAAD,EAAK,OAAL,CAAH,CAAiB,CAAjB,CAAV;;AACA,gBAAIwN,GAAG,IAAI9I,GAAG,GAAG,CAAjB,EAAoB;AAChB8I,iBAAG,CAACJ,OAAJ,GAAc,KAAd;AACAlO,cAAA,wDAAW,CAACc,EAAD,EAAK,MAAI,CAACsI,oBAAV,CAAX;AACH;AACJ,WARD;AAUA9K,WAAC,CAACQ,YAAF,CAAe,OAAf,EAAwB,EAAxB;AACAR,WAAC,CAACQ,YAAF,CAAe,SAAf,EAA0B,EAA1B;AAEH,SAhBD,MAgBO;AACH,cAAIqP,QAAO,GAAGF,UAAU,GAAGN,QAAb,GAAwBzJ,EAAE,CAACmK,SAAzC;;AACA,cAAIpG,MAAM,GACN,oDAAI,CAAC+F,SAAS,GAAG,GAAZ,GAAkBrN,QAAlB,GAA6B,GAA7B,GAAmCuD,EAAE,CAACqK,UAAvC,CADR;AAGAjQ,WAAC,CAACQ,YAAF,CAAe,OAAf,EAAwBmJ,MAAxB;AACA3J,WAAC,CAACQ,YAAF,CAAe,SAAf,EAA0BqP,QAA1B,EANG,CAQH;;AACA,cAAIK,IAAI,GAAG,gDAAG,CAACT,KAAK,CAAC,CAAD,CAAN,EAAW,OAAX,CAAH,CAAuB,CAAvB,CAAX;;AACA,cAAIS,IAAJ,EAAU;AACNA,gBAAI,CAACN,OAAL,GAAe,KAAf;AACH;AACJ;;AAEDlO,QAAA,wDAAW,CAAC+N,KAAK,CAAC,CAAD,CAAN,EAAW,KAAK3E,oBAAhB,CAAX;AACAtJ,QAAA,qDAAQ,CAACgB,EAAD,EAAK,KAAKsI,oBAAV,CAAR;AACH,OAnCD,MAmCO;AAAE;AACL,YAAIqF,YAAY,GACZ,IAAI5O,MAAJ,CAAW,sDAAM,CAACc,QAAQ,GAAG,GAAX,GAAiBuD,EAAE,CAACqK,UAArB,CAAjB,CADJ;;AAEA,YAAItG,OAAM,GAAG+F,SAAS,CAAC9N,OAAV,CAAkBuO,YAAlB,EAAgC,EAAhC,CAAb;;AACA,YAAIC,YAAY,GAAG,IAAI7O,MAAJ,CAAW,sDAAM,CAAC8N,QAAQ,GAAGzJ,EAAE,CAACmK,SAAf,CAAjB,CAAnB;;AACA,YAAIF,SAAO,GAAGF,UAAU,CAAC/N,OAAX,CAAmBwO,YAAnB,EAAiC,EAAjC,CAAd;;AAEApQ,SAAC,CAACQ,YAAF,CAAe,OAAf,EAAwB,oDAAI,CAACmJ,OAAD,CAA5B;AACA3J,SAAC,CAACQ,YAAF,CAAe,SAAf,EAA0BqP,SAA1B;AAEAnO,QAAA,wDAAW,CAACc,EAAD,EAAK,KAAKsI,oBAAV,CAAX;AACH;AACJ;AAED;;;;;;AAtaJ;AAAA;AAAA,kCA2akBlC,QA3alB,EA2ayC;AAAA;;AAAA,UAAbe,MAAa,uEAAJ,EAAI;AACjC,UAAI/D,EAAE,GAAG,KAAKA,EAAd;AACA,UAAIgH,GAAG,GAAGhH,EAAE,CAAC2J,gBAAH,CAAoB3G,QAApB,CAAV;;AACA,UAAI,CAACgE,GAAD,IAAQjD,MAAM,CAAC7N,MAAP,KAAkB,CAA9B,EAAiC;AAC7B;AACH;;AAED,UAAIuU,GAAG,GAAG,gDAAG,CAACzD,GAAD,EAAM,IAAN,CAAb;AAEAA,SAAG,CAACpM,YAAJ,CAAiB,OAAjB,EAA0B,EAA1B;AACAoM,SAAG,CAACpM,YAAJ,CAAiB,SAAjB,EAA4B,EAA5B;AAEA,SAAG6C,OAAH,CAAWM,IAAX,CAAgB0M,GAAhB,EAAqB,UAAC7N,EAAD,EAAQ;AACzB,YAAI8N,GAAG,GAAG,gDAAG,CAAC9N,EAAD,EAAK,OAAL,CAAH,CAAiB,CAAjB,CAAV;AACA,YAAI+N,MAAM,GAAG,yDAAS,CAACD,GAAG,CAAC7R,KAAL,EAAYmH,EAAE,CAACnK,aAAf,CAAtB;;AAEA,YAAI8U,MAAM,KAAK,EAAX,IAAiB,kDAAG,CAAC5G,MAAD,EAAS4G,MAAT,EAAiB3K,EAAE,CAACnK,aAApB,CAAxB,EAA4D;AACxD6U,aAAG,CAACV,OAAJ,GAAc,IAAd;AACH,SAFD,MAEO;AACH;AACA,cAAIjG,MAAM,CAACtK,OAAP,CAAeuG,EAAE,CAACuJ,UAAlB,MAAkC,CAAC,CAAnC,IACAoB,MAAM,KAAK,yDAAS,CAAC3K,EAAE,CAACwJ,YAAJ,EAAkBxJ,EAAE,CAACnK,aAArB,CADxB,EAC6D;AACzD6U,eAAG,CAACV,OAAJ,GAAc,IAAd;AACH,WAHD,MAIK,IAAIjG,MAAM,CAACtK,OAAP,CAAeuG,EAAE,CAACmJ,UAAlB,MAAkC,CAAC,CAAnC,IACLwB,MAAM,KAAK,yDAAS,CAAC3K,EAAE,CAACoJ,SAAJ,EAAepJ,EAAE,CAACnK,aAAlB,CADnB,EACqD;AACtD6U,eAAG,CAACV,OAAJ,GAAc,IAAd;AACH,WAHI,MAGE;AACHU,eAAG,CAACV,OAAJ,GAAc,KAAd;AACH;AACJ;;AACD,cAAI,CAACpE,aAAL,CAAmB8E,GAAnB;AACH,OApBD;AAqBH;AAED;;;;;;AA9cJ;AAAA;AAAA,8BAmdc1H,QAndd,EAmdwB;AAChB,UAAIhD,EAAE,GAAG,KAAKA,EAAd;AACA,UAAIgH,GAAG,GAAGhH,EAAE,CAAC2J,gBAAH,CAAoB3G,QAApB,CAAV;;AACA,UAAI,CAACgE,GAAL,EAAU;AACN,eAAO,EAAP;AACH;;AAED,UAAI4D,OAAO,GAAG5D,GAAG,CAACjB,YAAJ,CAAiB,OAAjB,CAAd;AACA,UAAIhC,MAAM,GAAG,sDAAO,CAAC6G,OAAD,CAAP,GAAmB,EAAnB,GAAwBA,OAArC,CARgB,CAShB;;AACA7G,YAAM,GAAGA,MAAM,CAAC8G,MAAP,CAAc,CAAd,EAAiB9G,MAAM,CAAC7N,MAAP,GAAgB,CAAjC,CAAT,CAVgB,CAWhB;;AACA6N,YAAM,GAAGA,MAAM,CAACmG,KAAP,CAAa,MAAMlK,EAAE,CAACqK,UAAT,GAAsB,GAAnC,CAAT;AAEA,aAAOtG,MAAP;AACH;AAED;;;;AApeJ;AAAA;AAAA,8BAuec;AAAA;;AACN,WAAK3D,OAAL,CAAaiC,GAAb,CACI,CAAC,wBAAD,CADJ,EAEI,UAACrC,EAAD,EAAKgD,QAAL,EAAe6D,QAAf;AAAA,eAA4B,MAAI,CAAC5C,KAAL,CAAWjB,QAAX,EAAqB6D,QAArB,CAA5B;AAAA,OAFJ;AAIA,WAAKzG,OAAL,CAAaiC,GAAb,CACI,CAAC,0BAAD,CADJ,EAEI,UAACrC,EAAD,EAAKgD,QAAL,EAAee,MAAf;AAAA,eAA0B,MAAI,CAACI,aAAL,CAAmBnB,QAAnB,EAA6Be,MAA7B,CAA1B;AAAA,OAFJ;AAIA,WAAK3D,OAAL,CAAaiC,GAAb,CAAiB,CAAC,cAAD,CAAjB,EAAmC;AAAA,eAAM,MAAI,CAACoC,UAAL,EAAN;AAAA,OAAnC;AACA,WAAKrE,OAAL,CAAaiC,GAAb,CAAiB,CAAC,iBAAD,CAAjB,EAAsC;AAAA,eAAM,MAAI,CAACyE,WAAL,EAAN;AAAA,OAAtC;AAEA,WAAKzG,WAAL,GAAmB,KAAnB;AACH;AApfL;;AAAA;AAAA,EAA+B,0DAA/B,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAGA,IAAayK,WAAb;AAAA;AAAA;AAAA;;AAEI;;;;AAIA,uBAAY9K,EAAZ,EAAgB;AAAA;;AAAA;;AACZ,qFAAMA,EAAN,EAAU,UAAV;AAEA,QAAIuC,CAAC,GAAG,MAAKpC,MAAL,CAAY4K,SAAZ,IAAyB,EAAjC;AAEA;;;;;AAIA,UAAKC,QAAL,GAAgB,6DAAW,CAACzI,CAAC,CAAC0I,SAAH,EAAc,IAAd,CAA3B;AAEA;;;;;AAIA,UAAK/O,IAAL,GAAY,6DAAW,CAACqG,CAAC,CAACrG,IAAH,EAAS,IAAT,CAAvB;AAEA;;;;;AAIA,UAAKgP,QAAL,GAAgB,6DAAW,CAAC3I,CAAC,CAAC4I,SAAH,EAAc,OAAd,CAA3B;AAEA;;;;;AAIA,UAAKC,OAAL,GAAe7I,CAAC,CAAC6I,OAAF,IAAa,eAA5B;AAEA;;;;;AAIA,UAAKC,IAAL,GAAY,6DAAW,CAAC9I,CAAC,CAAC8I,IAAH,EAClB,CAACrL,EAAE,CAACsL,WAAJ,IAAmB,MAAKpP,IAAxB,GAA+B,IAA/B,GACG,0CAA0C,MAAKgP,QAA/C,GACA,IADA,GACO,SADP,GACmB,MAAKE,OADxB,GACkC,MAHnB,CAAvB;AAKA;;;;;AAIA,UAAKG,eAAL,GAAuB,6DAAW,CAAChJ,CAAC,CAACiJ,gBAAH,EAAqB,8CAArB,CAAlC;AAEA;;;;;;AAKA,UAAKjF,SAAL,GAAiB,IAAjB;AAEA;;;;;;AAKA,UAAKkF,OAAL,GAAe,IAAf;AAxDY;AAyDf;AAED;;;;;;AAjEJ;AAAA;AAAA,8BAqEc;AACN,UAAI,CAAC,KAAKvK,SAAL,EAAL,EAAuB;AACnB;AACH;;AACD,WAAKlB,EAAL,CAAQ0L,YAAR;AACH;AAED;;;;AA5EJ;AAAA;AAAA,2BA+EW;AAAA;;AACH,UAAI1L,EAAE,GAAG,KAAKA,EAAd;;AAEA,UAAI,KAAKK,WAAT,EAAsB;AAClB;AACH;;AAED,WAAKD,OAAL,CAAauF,IAAb,CAAkB,sBAAlB,EAA0C,IAA1C,EAAgD,CAAC,qDAAM,CAAC,KAAKqF,QAAN,CAAvD;AAEA,UAAIW,IAAI,GAAG,sDAAS,CAAC,MAAD,CAApB;AAEA,UAAIC,QAAQ,GAAG,CAAC,KAAKZ,QAAN,GACXhL,EAAE,CAACC,OAAH,CAAW,SAAX,EAAsBsG,SAAtB,CAAgC,KAAKgF,eAArC,CADW,GAEX,gDAAG,CAAC,KAAKP,QAAN,CAFP;AAGAY,cAAQ,CAACtP,WAAT,CAAqBqP,IAArB;;AAEA,UAAI,CAAC,KAAKN,IAAV,EAAgB;AACZ,YAAIQ,QAAQ,GAAG,sDAAS,CAAC,GAAD,EAAM,CAAC,MAAD,EAAS,qBAAT,CAAN,CAAxB;AACAA,gBAAQ,CAACpQ,SAAT,GAAqB,KAAKyP,QAA1B;AACAW,gBAAQ,CAACvP,WAAT,CAAqB,uDAAU,CAAC,KAAKJ,IAAN,CAA/B;AACAyP,YAAI,CAACrP,WAAL,CAAiBuP,QAAjB;AACA5N,QAAA,qDAAM,CAAC4N,QAAD,EAAW,OAAX,EAAoB;AAAA,iBAAM,MAAI,CAACC,OAAL,EAAN;AAAA,SAApB,CAAN;AACH,OAND,MAMO;AACHH,YAAI,CAACnE,SAAL,GAAiB,KAAK6D,IAAtB;AACA,YAAIU,OAAO,GAAGJ,IAAI,CAACK,UAAnB;AACA/N,QAAA,qDAAM,CAAC8N,OAAD,EAAU,OAAV,EAAmB;AAAA,iBAAM,MAAI,CAACD,OAAL,EAAN;AAAA,SAAnB,CAAN;AACH;;AACD,WAAKL,OAAL,GAAeE,IAAI,CAACK,UAApB;AACA,WAAKzF,SAAL,GAAiBoF,IAAjB;AAEA;;AACA,WAAKtL,WAAL,GAAmB,IAAnB;AAEA,WAAKD,OAAL,CAAauF,IAAb,CAAkB,qBAAlB,EAAyC,IAAzC;AACH;AAED;;;;AAnHJ;AAAA;AAAA,8BAsHc;AACN,UAAI,CAAC,KAAKtF,WAAV,EAAuB;AACnB;AACH;;AACDxF,MAAA,sDAAS,CAAC,KAAK4Q,OAAN,CAAT;AACA5Q,MAAA,sDAAS,CAAC,KAAK0L,SAAN,CAAT;AACA,WAAKkF,OAAL,GAAe,IAAf;AACA,WAAKlF,SAAL,GAAiB,IAAjB;AACA,WAAKlG,WAAL,GAAmB,KAAnB;AACH;AA/HL;;AAAA;AAAA,EAAiC,gDAAjC,E,CAkIA;;AACAyK,WAAW,CAACmB,OAAZ,GAAsB,UAAtB,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7IA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAKA,IAAaC,QAAb;AAAA;AAAA;AAAA;;AAEI;;;;AAIA,oBAAYlM,EAAZ,EAAgB;AAAA;;AAAA;;AACZ,kFAAMA,EAAN,EAAU,UAAV;AAEA;;;;;AAIA,UAAKyD,MAAL,GAAczD,EAAE,CAACyD,MAAjB;AAEA;;;;;AAIA,UAAK0I,QAAL,GAAgB,+CAAhB;;AAEA,UAAK1L,MAAL;;AAfY;AAgBf;AAED;;;;;AAxBJ;AAAA;AAAA,2BA2BW;AAAA;;AACH,UAAI,KAAKJ,WAAT,EAAsB;AAClB;AACH,OAHE,CAKH;;;AACA,WAAK8L,QAAL,CAAcC,SAAd,CAAwB,KAAK3I,MAA7B,EANG,CAQH;;AACA,WAAK4I,gBAAL,CAAsB,KAAKrM,EAAL,CAAQsM,QAA9B;AAEA,WAAKlM,OAAL,CAAaE,EAAb,CACI,CAAC,uBAAD,CADJ,EAEI,UAACN,EAAD,EAAKuM,KAAL;AAAA,eAAe,MAAI,CAACF,gBAAL,CAAsBE,KAAtB,CAAf;AAAA,OAFJ,EAXG,CAgBH;;AACA,WAAKnM,OAAL,CAAauF,IAAb,CAAkB,uBAAlB,EAA2C,KAAK3F,EAAhD,EAAoD,IAApD;AAEA;;AACA,WAAKK,WAAL,GAAmB,IAAnB;AACH;AAED;;;;;;;;AAlDJ;AAAA;AAAA,0BAyDUmM,OAzDV,EAyDmBC,UAzDnB,EAyD+B;AACvB,aAAO,KAAKN,QAAL,CAAcO,MAAd,CAAqBF,OAArB,EAA8BC,UAA9B,CAAP;AACH;AAED;;;;;;;AA7DJ;AAAA;AAAA,4BAmEYD,OAnEZ,EAmEqBC,UAnErB,EAmEiC;AACzB,aAAO,KAAKN,QAAL,CAAcxK,OAAd,CAAsB,KAAKgL,KAAL,CAAWH,OAAX,EAAoBC,UAApB,CAAtB,CAAP;AACH;AAED;;;;;;;;AAvEJ;AAAA;AAAA,+BA8EezJ,QA9Ef,EA8EyBuJ,KA9EzB,EA8EgC;AACxBA,WAAK,GAAGA,KAAK,IAAI,KAAKvM,EAAL,CAAQsM,QAAzB;AACA,UAAIM,OAAO,GAAGL,KAAK,CAACvJ,QAAD,CAAnB;AACA,aAAO,oDAAK,CAAC4J,OAAD,CAAL,GAAiBA,OAAjB,GAA2B,EAAlC;AACH;AAED;;;;;;;AApFJ;AAAA;AAAA,8BA0Fc5J,QA1Fd,EA0FwB;AAChB,aAAO,KAAK6J,UAAL,CAAgB7J,QAAhB,EAA0BS,MAA1B,IAAoC,KAAKA,MAAhD;AACH;AAED;;;;;;;;;;;;AA9FJ;AAAA;AAAA,uCAyG+B;AAAA;;AAAA,UAAV8I,KAAU,uEAAJ,EAAI;AACvBA,WAAK,CAAC9O,OAAN,CAAc,UAACU,IAAD,EAAOmD,GAAP,EAAe;AACzB,YAAI2B,OAAO,GAAG,MAAI,CAAC4J,UAAL,CAAgBvL,GAAhB,EAAqBiL,KAArB,CAAd;;AACA,YAAItJ,OAAO,CAAC9E,IAAR,KAAiB,2CAAjB,IAAyB8E,OAAO,CAAC6J,cAAR,CAAuB,QAAvB,CAA7B,EAA+D;AAC3D,cAAIrJ,MAAM,GAAG,MAAI,CAAC0I,QAAL,CAAczI,SAAd,CACTT,OAAO,CAACQ,MAAR,IAAkB,MAAI,CAACA,MADd,CAAb;;AAGA,cAAIsJ,OAAO,GAAG,sDAAO,CAAC9J,OAAO,CAAC+J,MAAT,CAAP,GACV/J,OAAO,CAAC+J,MADE,GACO,CAAC/J,OAAO,CAAC+J,MAAT,CADrB,CAJ2D,CAO3D;;AACA,cAAI;AACAD,mBAAO,CAACtP,OAAR,CAAgB,UAACuP,MAAD,EAAY;AACxBvJ,oBAAM,CAACwJ,SAAP,CAAiBD,MAAjB;AACH,aAFD;AAGH,WAJD,CAIE,OAAOE,EAAP,EAAW;AACTC,YAAA,0CAAI,CAACC,OAAL,CAAaC,KAAb,CAAmBH,EAAnB;AACH;AACJ;AACJ,OAlBD;AAmBH;AAED;;;;AA/HJ;AAAA;AAAA,8BAkIc;AAAA;;AACN,UAAI,CAAC,KAAK7M,WAAV,EAAuB;AACnB;AACH,OAHK,CAKN;;;AAEA,WAAKD,OAAL,CAAaiC,GAAb,CACI,CAAC,uBAAD,CADJ,EAEI,UAACrC,EAAD,EAAKuM,KAAL;AAAA,eAAe,MAAI,CAACF,gBAAL,CAAsBE,KAAtB,CAAf;AAAA,OAFJ;AAKA,WAAKlM,WAAL,GAAmB,KAAnB;AACH;AA/IL;;AAAA;AAAA,EAA8B,gDAA9B,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;AAMA,IAAaiN,QAAb;AAAA;AAAA;AAAA;;AAEI;;;;AAIA,oBAAYtN,EAAZ,EAAgB;AAAA;;AAAA;;AACZ,kFAAMA,EAAN,EAAU,UAAV,GADY,CAGZ;;AACA,QAAIuC,CAAC,GAAG,MAAKpC,MAAb;AAEA;;;;;AAIA,UAAKoN,oBAAL,GACI,8DAAY,CAAChL,CAAC,CAACiL,uBAAH,EAA4B,IAA5B,CADhB;AAGA;;;;;AAIA,UAAKhE,YAAL,GAAoB,6DAAW,CAACjH,CAAC,CAACkL,cAAH,EAAmB,aAAnB,CAA/B;AAEA;;;;;AAIA,UAAKC,kBAAL,GAA0B,6DAAW,CAACnL,CAAC,CAACoL,oBAAH,EACjC,0CADiC,CAArC;AAvBY;AAyBf;AAGD;;;;;;;AAlCJ;AAAA;AAAA,+BAuCeC,CAvCf,EAuCkB;AACV,UAAI7Q,GAAG,GAAG,wDAAS,CAAC6Q,CAAD,CAAnB;AACA,UAAI5N,EAAE,GAAG,KAAKA,EAAd,CAFU,CAGV;;AACA,UAAIA,EAAE,CAAC8F,eAAH,IAAsB/I,GAAG,CAACgJ,YAAJ,CAAiB,QAAjB,MAA+B,GAAzD,EAA8D;AAC1D,YAAIC,EAAE,GAAGjJ,GAAG,CAACgJ,YAAJ,CAAiB,IAAjB,CAAT;AACA,aAAK9B,KAAL,CAAW+B,EAAX;AACH;;AACD,WAAK5F,OAAL,CAAauF,IAAb,CAAkB,cAAlB,EAAkC3F,EAAlC,EAAsCjD,GAAtC;AACH;AAED;;;;;AAlDJ;AAAA;AAAA,kCAsDkB;AACV,UAAI,KAAKiD,EAAL,CAAQ6N,WAAZ,EAAyB;AACrB,aAAK7N,EAAL,CAAQ6F,MAAR;AACH;AACJ;AAED;;;;AA5DJ;AAAA;AAAA,iCA+DiB;AACT,UAAIiI,UAAU,GAAG,KAAK9N,EAAL,CAAQoG,gBAAR,CAAyB,6CAAzB,EAAiC,IAAjC,CAAjB;AACA,UAAI2H,YAAY,GAAG,KAAK/N,EAAL,CAAQoG,gBAAR,CAAyB,+CAAzB,EAAmC,IAAnC,CAAnB;AACA,UAAID,OAAO,GAAG2H,UAAU,CAACE,MAAX,CAAkBD,YAAlB,CAAd;AACA,WAAK1H,cAAL,CAAoBF,OAApB;AACH;AAED;;;;;;;AAtEJ;AAAA;AAAA,yBA4ESnD,QA5ET,EA4EmBsD,UA5EnB,EA4E+BC,SA5E/B,EA4E0C;AAAA;;AAClC,UAAIvG,EAAE,GAAG,KAAKA,EAAd;AACA,UAAI0C,GAAG,GAAG1C,EAAE,CAACiO,aAAH,CAAiBjL,QAAjB,CAAV;AACA,UAAIwD,gBAAgB,GAAGF,UAAU,GAC7BtG,EAAE,CAACyG,cAAH,CAAkBzD,QAAlB,CAD6B,GACC,IADlC;AAGA,UAAIkL,GAAG,GAAG,sDAAS,CAAC,6CAAD,EACf,CAAC,IAAD,EAAOlO,EAAE,CAAC4G,aAAH,CAAiB5D,QAAjB,CAAP,CADe,EAEf,CAAC,IAAD,EAAOA,QAAP,CAFe,EAEG,CAAC,QAAD,EAAW,GAAX,CAFH,CAAnB;;AAKA,UAAIN,GAAG,KAAK,+CAAZ,EAAsB;AAClBwL,WAAG,CAACC,QAAJ,GAAe,+CAAf;AACAD,WAAG,CAACE,KAAJ,GAAY,KAAKV,kBAAjB;AACH;;AACDQ,SAAG,CAACzS,SAAJ,GAAgBiH,GAAG,CAAC2L,WAAJ,OAAsB,6CAAtB,GACZrO,EAAE,CAACsO,WADS,GACKtO,EAAE,CAACuO,gBADxB,CAfkC,CAkBlC;;AACA,UAAI/H,gBAAJ,EAAsB;AAClBzJ,QAAA,gDAAG,CAACyJ,gBAAD,CAAH,CAAsBlK,WAAtB,CAAkC4R,GAAlC;AACH,OAFD,MAEO;AACH3H,iBAAS,CAACjK,WAAV,CAAsB4R,GAAtB;AACH;;AAEDlO,QAAE,CAAC2G,MAAH,CAAUhJ,IAAV,CAAeuQ,GAAG,CAAC1R,EAAnB;;AAEA,UAAI,CAACwD,EAAE,CAAC8F,eAAR,EAAyB;AACrB,aAAK7B,KAAL,CAAWjB,QAAX;AACH,OAFD,MAEO;AACH;AACA,YAAIwL,IAAI,GAAG,sDAAS,CAACxO,EAAE,CAACgJ,kBAAH,CAAsBhG,QAAtB,CAAD,EAAkC,EAAlC,CAApB;AACAkL,WAAG,CAAC5R,WAAJ,CAAgBkS,IAAhB;AACH;;AAEDvQ,MAAA,qDAAM,CAACiQ,GAAD,EAAM,QAAN,EAAgB;AAAA,eAAM,MAAI,CAACL,WAAL,EAAN;AAAA,OAAhB,CAAN;AACA5P,MAAA,qDAAM,CAACiQ,GAAD,EAAM,OAAN,EAAe,UAACN,CAAD;AAAA,eAAO,MAAI,CAACa,UAAL,CAAgBb,CAAhB,CAAP;AAAA,OAAf,CAAN;AAEA,WAAKxN,OAAL,CAAaE,EAAb,CACI,CAAC,qBAAD,CADJ,EAEI,UAACN,EAAD,EAAKgD,QAAL,EAAe6D,QAAf,EAAyBP,UAAzB;AAAA,eACI,MAAI,CAACrC,KAAL,CAAWjB,QAAX,EAAqB6D,QAArB,EAA+BP,UAA/B,CADJ;AAAA,OAFJ;AAKA,WAAKlG,OAAL,CAAaE,EAAb,CACI,CAAC,gBAAD,CADJ,EAEI,UAACN,EAAD,EAAKgD,QAAL,EAAee,MAAf;AAAA,eAA0B,MAAI,CAACI,aAAL,CAAmBnB,QAAnB,EAA6Be,MAA7B,CAA1B;AAAA,OAFJ;AAIA,WAAK3D,OAAL,CAAaE,EAAb,CAAgB,CAAC,cAAD,CAAhB,EAAkC;AAAA,eAAM,MAAI,CAACmE,UAAL,EAAN;AAAA,OAAlC;AAEA,WAAKrE,OAAL,CAAaE,EAAb,CAAgB,CAAC,iBAAD,CAAhB,EAAqC;AAAA,eAAM,MAAI,CAACwG,WAAL,EAAN;AAAA,OAArC;AAEA;;AACA,WAAKzG,WAAL,GAAmB,IAAnB;AACH;AAED;;;;;;AAnIJ;AAAA;AAAA,0BAwIU2C,QAxIV,EAwIsC;AAAA;;AAAA,UAAlB6D,QAAkB,uEAAP,KAAO;AAC9B,UAAI7G,EAAE,GAAG,KAAKA,EAAd;AACAgD,cAAQ,GAAG+D,MAAM,CAAC/D,QAAD,CAAjB;AAEA,WAAK5C,OAAL,CAAauF,IAAb,CAAkB,0BAAlB,EAA8C3F,EAA9C,EAAkDgD,QAAlD;AAEA;;AACA,WAAKH,IAAL,GAAY,EAAZ;AACA;;AACA,WAAKC,OAAL,GAAe,EAAf;AAEA,UAAIoL,GAAG,GAAGlO,EAAE,CAAC2J,gBAAH,CAAoB3G,QAApB,CAAV,CAX8B,CAa9B;;AACA;;AACA,WAAKJ,QAAL,GAAgB5C,EAAE,CAACkD,eAAH,CAAmBF,QAAnB,CAAhB,CAf8B,CAiB9B;;AACA,UAAI,KAAKJ,QAAT,EAAmB;AACf,YAAIsE,YAAY,GAAGlH,EAAE,CAACmH,gBAAH,CAAoBnE,QAApB,CAAnB;AACA,aAAKH,IAAL,GAAYqE,YAAY,CAAC,CAAD,CAAxB;AACA,aAAKpE,OAAL,GAAeoE,YAAY,CAAC,CAAD,CAA3B;AACH,OAtB6B,CAwB9B;;;AACA,UAAIE,SAAJ;AACA,UAAI5C,cAAc,GAAGxE,EAAE,CAACqH,iBAAH,EAArB;;AACA,UAAIR,QAAQ,IAAIrC,cAAhB,EAAgC;AAC5B4C,iBAAS,GAAGpH,EAAE,CAACsH,0BAAH,CAA8B9C,cAA9B,CAAZ;AACH;;AAED,UAAIzB,YAAY,GAAG,IAAnB;AAAA,UACIwE,eAAe,GAAG,IADtB;;AAEA,UAAIV,QAAQ,IAAI7G,EAAE,CAACqE,sBAAnB,EAA2C;AACvCtB,oBAAY,GAAG,EAAf;AACAwE,uBAAe,GAAG,EAAlB;AACH;;AAED,UAAIpF,OAAO,GAAGnC,EAAE,CAACmC,OAAH,EAAd;AACAA,aAAO,CACH,UAACC,GAAD,EAAS;AACL,YAAIqF,SAAS,GAAGzH,EAAE,CAAC0H,YAAH,CAAgBtF,GAAG,CAACuF,KAAJ,CAAU3E,QAAV,CAAhB,CAAhB,CADK,CAEL;;AACA,YAAI4E,UAAU,GAAG,yDAAS,CAACH,SAAD,EAAYzH,EAAE,CAACnK,aAAf,CAA1B,CAHK,CAKL;;AACA,YAAI,CAAC,kDAAG,CAAC,MAAI,CAACgN,IAAN,EAAY+E,UAAZ,EAAwB5H,EAAE,CAACnK,aAA3B,CAAR,EAAmD;AAC/C,gBAAI,CAACgN,IAAL,CAAUlF,IAAV,CAAe8J,SAAf;AACH;;AAED,YAAIZ,QAAQ,IAAI7G,EAAE,CAACqE,sBAAnB,EAA2C;AACvC,cAAIwD,WAAW,GAAGN,eAAe,CAACvE,QAAD,CAAjC;;AACA,cAAI,CAAC6E,WAAL,EAAkB;AACdA,uBAAW,GAAG7H,EAAE,CAAC8H,sBAAH,CAA0B9E,QAA1B,CAAd;AACH;;AACD,cAAI,CAAC,kDAAG,CAAC6E,WAAD,EAAcD,UAAd,EAA0B5H,EAAE,CAACnK,aAA7B,CAAJ,IACA,CAAC,kDAAG,CAACkN,YAAD,EAAe6E,UAAf,EAA2B5H,EAAE,CAACnK,aAA9B,CADR,EACsD;AAClDkN,wBAAY,CAACpF,IAAb,CAAkB8J,SAAlB;AACH;AACJ;AACJ,OArBE,EAsBH;AACA,gBAACrF,GAAD,EAAM2F,CAAN,EAAY;AACR;AACA,YAAI/H,EAAE,CAACgI,WAAH,CAAevO,OAAf,CAAuBsO,CAAvB,MAA8B,CAAC,CAAnC,EAAsC;AAClC,iBAAO,IAAP;AACH,SAJO,CAMR;;;AACA,YAAI3F,GAAG,CAACuF,KAAJ,CAAUzR,MAAV,KAAqB8J,EAAE,CAACiI,OAAxB,IAAmC,MAAI,CAACrF,QAA5C,EAAsD;AAClD,iBAAO,IAAP;AACH;;AAED,YAAIiE,QAAQ,IAAI,CAAC,MAAI,CAACqB,kBAAL,CAAwBH,CAAxB,EAA2BX,SAA3B,CAAjB,EAAwD;AACpD,iBAAO,IAAP;AACH;AACJ,OArCE,CAAP,CAvC8B,CA+E9B;;AACA,WAAKvE,IAAL,GAAY,KAAKsF,WAAL,CAAiBnF,QAAjB,EAA2B,KAAKH,IAAhC,CAAZ;;AACA,UAAIE,YAAJ,EAAkB;AACdA,oBAAY,GAAG,KAAKoF,WAAL,CAAiBnF,QAAjB,EAA2BD,YAA3B,CAAf;AACH,OAnF6B,CAqF9B;;;AACA,WAAK2L,UAAL,CAAgB1L,QAAhB,EAA0BkL,GAA1B,EAA+BrH,QAA/B,EAAyC9D,YAAzC;AAEA,WAAK3C,OAAL,CAAauF,IAAb,CAAkB,yBAAlB,EAA6C3F,EAA7C,EAAiDgD,QAAjD,EAA2DkL,GAA3D;AACH;AAED;;;;;;;;AAnOJ;AAAA;AAAA,+BA0OelL,QA1Of,EA0OyBkL,GA1OzB,EA0O8BrH,QA1O9B,EA0OwC9D,YA1OxC,EA0OsD;AAC9C,UAAI/C,EAAE,GAAG,KAAKA,EAAd;AAAA,UACI2O,QAAQ,GAAGT,GAAG,CAACrV,KADnB;AAGAqV,SAAG,CAAC1G,SAAJ,GAAgB,EAAhB;AACA0G,SAAG,GAAG,KAAKU,cAAL,CAAoBV,GAApB,CAAN;;AAEA,WAAK,IAAI3F,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK1F,IAAL,CAAU3M,MAA9B,EAAsCqS,CAAC,EAAvC,EAA2C;AACvC,YAAI,KAAK1F,IAAL,CAAU0F,CAAV,MAAiB,EAArB,EAAyB;AACrB;AACH;;AACD,YAAI3S,GAAG,GAAG,KAAKiN,IAAL,CAAU0F,CAAV,CAAV,CAJuC,CAIf;;AACxB,YAAIC,GAAG,GAAG,KAAK5F,QAAL,GAAgB,KAAKE,OAAL,CAAayF,CAAb,CAAhB,GAAkC3S,GAA5C,CALuC,CAKU;;AACjD,YAAIiZ,UAAU,GAAG,KAAjB;;AACA,YAAIhI,QAAQ,IAAI7G,EAAE,CAACqE,sBAAf,IACA,kDAAG,CAACtB,YAAD,EAAe,yDAAS,CAACnN,GAAD,EAAMoK,EAAE,CAACnK,aAAT,CAAxB,EACCmK,EAAE,CAACnK,aADJ,CADP,EAE2B;AACvBgZ,oBAAU,GAAG,IAAb;AACH;;AAED,YAAIxS,GAAG,SAAP,CAbuC,CAcvC;;AACA,YAAI2D,EAAE,CAAC8F,eAAH,IAAsB6I,QAAQ,KAAK,KAAK9L,IAAL,CAAU0F,CAAV,CAAnC,IACAvI,EAAE,CAACiO,aAAH,CAAiBjL,QAAjB,MAA+B,6CADnC,EAC2C;AACvC3G,aAAG,GAAG,sDAAS,CAACmM,GAAD,EAAM5S,GAAN,EAAW,IAAX,CAAf;AACH,SAHD,MAGO;AACHyG,aAAG,GAAG,sDAAS,CAACmM,GAAD,EAAM5S,GAAN,EAAW,KAAX,CAAf;AACH;;AACD,YAAIiZ,UAAJ,EAAgB;AACZxS,aAAG,CAACsM,QAAJ,GAAe,IAAf;AACH;;AACDuF,WAAG,CAAC5R,WAAJ,CAAgBD,GAAhB;AACH,OAhC6C,CAgC7C;;;AAED6R,SAAG,CAACtT,YAAJ,CAAiB,QAAjB,EAA2B,GAA3B;AACH;AAED;;;;;AA/QJ;AAAA;AAAA,mCAmRmBsT,GAnRnB,EAmRwB;AAChB,UAAIlO,EAAE,GAAG,KAAKA,EAAd;AACA,UAAI8D,MAAM,GAAG9D,EAAE,CAACsH,0BAAH,CAA8B4G,GAAG,CAAC1R,EAAlC,CAAb;AACA,UAAIgS,IAAI,GAAG,sDAAS,CAAE,CAAC,KAAKjB,oBAAN,GAClB,EADkB,GACbvN,EAAE,CAACgJ,kBAAH,CAAsBlF,MAAtB,CADW,EACqB,EADrB,CAApB;;AAEA,UAAI,CAAC,KAAKyJ,oBAAV,EAAgC;AAC5BiB,YAAI,CAAC3F,KAAL,CAAWC,OAAX,GAAqB,2CAArB;AACH;;AACDoF,SAAG,CAAC5R,WAAJ,CAAgBkS,IAAhB;;AACA,UAAIxO,EAAE,CAACiJ,iBAAP,EAA0B;AACtB,YAAI6F,IAAI,GAAG,sDAAS,CAAC9O,EAAE,CAACoJ,SAAJ,EAAepJ,EAAE,CAACmJ,UAAlB,CAApB;AACA+E,WAAG,CAAC5R,WAAJ,CAAgBwS,IAAhB;AACH;;AACD,UAAI9O,EAAE,CAACqJ,oBAAP,EAA6B;AACzB,YAAI0F,IAAI,GAAG,sDAAS,CAAC/O,EAAE,CAACwJ,YAAJ,EAAkBxJ,EAAE,CAACuJ,UAArB,CAApB;AACA2E,WAAG,CAAC5R,WAAJ,CAAgByS,IAAhB;AACH;;AACD,aAAOb,GAAP;AACH;AAED;;;;;;AAvSJ;AAAA;AAAA,kCA4SkBlL,QA5SlB,EA4SyC;AAAA,UAAbe,MAAa,uEAAJ,EAAI;AACjC,UAAI/D,EAAE,GAAG,KAAKA,EAAd;;AACA,UAAI+D,MAAM,CAAC7N,MAAP,KAAkB,CAAtB,EAAyB;AACrB;AACH;;AACD,UAAIgY,GAAG,GAAGlO,EAAE,CAAC2J,gBAAH,CAAoB3G,QAApB,CAAV;AACA,SAAGvF,OAAH,CAAWM,IAAX,CAAgBmQ,GAAG,CAACjL,OAApB,EAA6B,UAAC+L,MAAD,EAAY;AACrC;AACA;AACA,YAAIjL,MAAM,CAAC,CAAD,CAAN,KAAc,EAAd,IAAoBiL,MAAM,CAACnW,KAAP,KAAiB,EAAzC,EAA6C;AACzCmW,gBAAM,CAACC,QAAP,GAAkB,KAAlB;AACH;;AAED,YAAID,MAAM,CAACnW,KAAP,KAAiB,EAAjB,IAAuB,kDAAG,CAACkL,MAAD,EAASiL,MAAM,CAACnW,KAAhB,EAAuB,IAAvB,CAA9B,EAA4D;AACxDmW,gBAAM,CAACC,QAAP,GAAkB,IAAlB;AACH,SAToC,CASpC;;AACJ,OAVD;AAWH;AAED;;;;;;AA/TJ;AAAA;AAAA,8BAoUcjM,QApUd,EAoUwB;AAChB,UAAIhD,EAAE,GAAG,KAAKA,EAAd;AACA,UAAIkO,GAAG,GAAGlO,EAAE,CAAC2J,gBAAH,CAAoB3G,QAApB,CAAV;AACA,UAAIe,MAAM,GAAG,EAAb,CAHgB,CAKhB;;AACA,UAAImK,GAAG,CAACgB,eAAR,EAAyB;AACrB,WAAGzR,OAAH,CAAWM,IAAX,CAAgBmQ,GAAG,CAACgB,eAApB,EACI,UAAAF,MAAM;AAAA,iBAAIjL,MAAM,CAACpG,IAAP,CAAYqR,MAAM,CAACnW,KAAnB,CAAJ;AAAA,SADV;AAEH,OAHD,MAGO;AACH,WAAG4E,OAAH,CAAWM,IAAX,CAAgBmQ,GAAG,CAACjL,OAApB,EAA6B,UAAC+L,MAAD,EAAY;AACrC,cAAIA,MAAM,CAACC,QAAX,EAAqB;AACjBlL,kBAAM,CAACpG,IAAP,CAAYqR,MAAM,CAACnW,KAAnB;AACH;AACJ,SAJD;AAKH;;AAED,aAAOkL,MAAP;AACH;AAED;;;;AAxVJ;AAAA;AAAA,8BA2Vc;AAAA;;AACN,WAAK3D,OAAL,CAAaiC,GAAb,CACI,CAAC,qBAAD,CADJ,EAEI,UAACW,QAAD,EAAW6D,QAAX,EAAqBP,UAArB;AAAA,eACI,MAAI,CAACrC,KAAL,CAAWjB,QAAX,EAAqB6D,QAArB,EAA+BP,UAA/B,CADJ;AAAA,OAFJ;AAKA,WAAKlG,OAAL,CAAaiC,GAAb,CACI,CAAC,gBAAD,CADJ,EAEI,UAACrC,EAAD,EAAKgD,QAAL,EAAee,MAAf;AAAA,eAA0B,MAAI,CAACI,aAAL,CAAmBnB,QAAnB,EAA6Be,MAA7B,CAA1B;AAAA,OAFJ;AAIA,WAAK3D,OAAL,CAAaiC,GAAb,CAAiB,CAAC,cAAD,CAAjB,EAAmC;AAAA,eAAM,MAAI,CAACoC,UAAL,EAAN;AAAA,OAAnC;AACA,WAAKrE,OAAL,CAAaiC,GAAb,CAAiB,CAAC,iBAAD,CAAjB,EAAsC;AAAA,eAAM,MAAI,CAACyE,WAAL,EAAN;AAAA,OAAtC;AACA,WAAKzG,WAAL,GAAmB,KAAnB;AACH;AAxWL;;AAAA;AAAA,EAA8B,0DAA9B,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;AAGA,IAAa8O,UAAb;AAAA;AAAA;AAAA;;AAEI;;;;AAIA,sBAAYnP,EAAZ,EAAgB;AAAA;;AAAA;;AACZ,oFAAMA,EAAN,EAAU,YAAV;AAEA,QAAIuC,CAAC,GAAG,MAAKpC,MAAL,CAAYiP,WAAZ,IAA2B,EAAnC;AAEA;;;;;AAIA,UAAKC,KAAL,GAAa,6DAAW,CAAC9M,CAAC,CAAC8M,KAAH,EAAU,IAAV,CAAxB;AAEA;;;;;AAIA,UAAKC,MAAL,GAAc,6DAAW,CAAC/M,CAAC,CAAC+M,MAAH,EAAW,IAAX,CAAzB;AAEA;;;;;AAIA,UAAKC,gBAAL,GAAwB,6DAAW,CAAChN,CAAC,CAACiN,cAAH,EAAmB,UAAnB,CAAnC;AAEA;;;;;AAIA,UAAKC,YAAL,GAAoB,6DAAW,CAAClN,CAAC,CAACmN,kBAAH,EAAuB,aAAvB,CAA/B;AAEA;;;;;AAIA,UAAKC,gBAAL,GAAwB,6DAAW,CAACpN,CAAC,CAACqN,kBAAH,EAC/B,iBAD+B,CAAnC;AAGA;;;;;AAIA,UAAKC,cAAL,GAAsB,6DAAW,CAACtN,CAAC,CAACuN,kBAAH,EAAuB,SAAvB,CAAjC;AAEA;;;;;AAIA,UAAKC,YAAL,GAAoB,4DAAU,CAACxN,CAAC,CAACyN,iBAAH,EAAsB,CAAtB,CAA9B;AAEA;;;;;AAIA,UAAKC,QAAL,GAAgB,6DAAW,CAAC1N,CAAC,CAAC2N,YAAH,EAAiB,CAAC,CAAD,CAAjB,CAA3B;AAEA;;;;;AAIA,UAAKC,OAAL,GAAe,8DAAY,CAAC5N,CAAC,CAAC4N,OAAH,EAAY,IAAZ,CAA3B;AAEA;;;;;AAIA,UAAKC,SAAL,GAAiBra,OAAO,CAACwM,CAAC,CAAC8N,UAAH,CAAxB;AAEA;;;;;AAIA,UAAKC,eAAL,GAAuB,6DAAW,CAAC/N,CAAC,CAACgO,iBAAH,EAAsB,OAAtB,CAAlC;AAEA;;;;;;AAKA,UAAKC,OAAL,GAAe,EAAf;AAEA;;;;;;AAKA,UAAKC,aAAL,GAAqB,MAArB;AAEA;;;;;;AAKA,UAAKC,UAAL,GAAkB,YAAlB;AAEA;;;;;;AAKA,UAAKC,aAAL,GAAqB3Q,EAAE,CAAC+B,GAAH,GAAS6O,SAA9B;AAEA;;;;;;AAKA,UAAKC,YAAL,GAAoB,gDAAG,CAAC7Q,EAAE,CAAC+B,GAAH,EAAD,EAAW,KAAX,CAAH,CAAqB7L,MAArB,GAA8B,CAA9B,GAAkC,IAAlC,GAAyC,KAA7D;AAEA;;;;;AAIA,UAAK4a,WAAL,GAAmB,IAAnB;AAEA;;;;;AAIA,UAAKC,OAAL,GAAe,IAAf;AAEA;;;;;AAIA,UAAKC,WAAL,GAAmB,IAAnB;AAEA;;;;;AAIA,UAAKC,OAAL,GAAe,IAAf,CAjIY,CAmIZ;;AACAjR,MAAE,CAACkR,OAAH,GAAa,MAAKf,OAAlB;AApIY;AAqIf;AAED;;;;;;AA7IJ;AAAA;AAAA,2BAiJW;AAAA;;AACH,UAAInQ,EAAE,GAAG,KAAKA,EAAd;AACA,UAAImR,GAAG,GAAGnR,EAAE,CAAC+B,GAAH,EAAV;;AAEA,UAAI,KAAK1B,WAAT,EAAsB;AAClB;AACH,OANE,CAQH;;;AACA,WAAK+Q,YAAL,GATG,CAWH;;AACA,WAAKC,mBAAL,GAZG,CAcH;;AACA,WAAKP,WAAL,GAAmB,KAAKQ,eAAL,CACf,KADe,EACR,KAAK/B,gBADG,CAAnB;;AAEA,UAAI,KAAKF,KAAT,EAAgB;AACZ,aAAKyB,WAAL,CAAiBjI,KAAjB,CAAuBwG,KAAvB,GAA+B,KAAKA,KAApC;AACH;;AACD8B,SAAG,CAACrW,UAAJ,CAAeyW,YAAf,CAA4B,KAAKT,WAAjC,EAA8CK,GAA9C,EApBG,CAsBH;;AACA,WAAKJ,OAAL,GAAe,KAAKO,eAAL,CAAqB,KAArB,EAA4B,KAAK7B,YAAjC,CAAf;AACA,WAAK+B,cAAL,CAAoB,KAAKT,OAAzB;;AACA,UAAI,KAAKzB,MAAT,EAAiB;AACb,aAAKyB,OAAL,CAAalI,KAAb,CAAmByG,MAAnB,GAA4B,KAAKA,MAAjC;AACH;;AACD6B,SAAG,CAACrW,UAAJ,CAAeyW,YAAf,CAA4B,KAAKR,OAAjC,EAA0CI,GAA1C;AACA,UAAIM,CAAC,GAAG,sDAAS,CAACN,GAAD,CAAjB;AACA,WAAKJ,OAAL,CAAazU,WAAb,CAAyBmV,CAAzB,EA9BG,CAgCH;;AACA,UAAIN,GAAG,CAACtI,KAAJ,CAAUwG,KAAV,KAAoB,EAAxB,EAA4B;AACxB,YAAIqC,IAAI,GAAG,KAAKC,iBAAL,EAAX;AACAR,WAAG,CAACtI,KAAJ,CAAUwG,KAAV,GAAkB,CAAC,wDAAQ,CAAC,GAAD,EAAMqC,IAAN,CAAR,GACfP,GAAG,CAACS,WADW,GACGF,IADJ,IACY,IAD9B;AAEH;;AAED,UAAIG,CAAC,GAAG,sDAAS,CAAC,KAAKd,OAAN,CAAjB;AACA,WAAKD,WAAL,CAAiBxU,WAAjB,CAA6BuV,CAA7B,EAxCG,CA0CH;;AACA,WAAKb,WAAL,GAAmB,KAAKM,eAAL,CACf,KADe,EACR,KAAK3B,gBADG,CAAnB,CA3CG,CA8CH;;AACA,WAAKsB,OAAL,GAAe,sDAAS,CAAC,OAAD,CAAxB;AACA,UAAIa,EAAE,GAAG,sDAAS,CAAC,OAAD,CAAlB,CAhDG,CAkDH;AACA;;AACA,UAAIC,IAAI,GAAGZ,GAAG,CAACrP,IAAJ,CAAS,KAAKiO,YAAd,CAAX;AACA,UAAIiC,YAAY,GAAG,KAAKC,iBAAL,CAAuBF,IAAvB,CAAnB,CArDG,CAuDH;;AACA,UAAIG,UAAU,GAAG,KAAKC,gBAAL,EAAjB,CAxDG,CA0DH;;AACA,WAAKC,aAAL,CAAmBN,EAAnB;AAEA,WAAKb,OAAL,CAAa3U,WAAb,CAAyBwV,EAAzB;;AACA,UAAI9R,EAAE,CAACqS,eAAH,KAAuB,CAA3B,EAA8B;AAC1BP,UAAE,CAACP,YAAH,CAAgBW,UAAhB,EAA4BH,IAA5B;AACH,OAFD,MAEO;AACHD,UAAE,CAACxV,WAAH,CAAe4V,UAAf;AACH;;AAED,WAAKlB,WAAL,CAAiB1U,WAAjB,CAA6B,KAAK2U,OAAlC;AACA,WAAKF,OAAL,CAAajW,UAAb,CAAwByW,YAAxB,CAAqC,KAAKP,WAA1C,EAAuD,KAAKD,OAA5D,EArEG,CAuEH;;AACA,UAAIuB,KAAK,GAAG,gDAAG,CAACnB,GAAD,EAAM,OAAN,CAAf;;AACA,UAAImB,KAAK,CAACpc,MAAN,GAAe,CAAnB,EAAsB;AAClBib,WAAG,CAACpW,WAAJ,CAAgBuX,KAAK,CAAC,CAAD,CAArB;AACH,OA3EE,CA6EH;AACA;;;AACA,WAAKrB,OAAL,CAAapI,KAAb,CAAmB0J,WAAnB,GAAiC,OAAjC;AACApB,SAAG,CAACtI,KAAJ,CAAU0J,WAAV,GAAwB,OAAxB,CAhFG,CAkFH;;AACAvS,QAAE,CAACwS,YAAH,CAAgB,KAAKvB,OAArB,EAnFG,CAqFH;;AACA,WAAKA,OAAL,CAAapI,KAAb,CAAmBwG,KAAnB,GAA2B8B,GAAG,CAACtI,KAAJ,CAAUwG,KAArC,CAtFG,CAuFH;AAEA;;AACApR,MAAA,qDAAM,CAAC,KAAK8S,OAAN,EAAe,QAAf,EAAyB,UAACrT,GAAD,EAAS;AACpC,YAAIX,GAAG,GAAG,wDAAS,CAACW,GAAD,CAAnB;AACA,YAAI+U,UAAU,GAAG1V,GAAG,CAAC0V,UAArB;AACA,cAAI,CAACzB,WAAL,CAAiByB,UAAjB,GAA8BA,UAA9B,CAHoC,CAIpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACH,OAnBK,CAAN,CA1FG,CA+GH;;AACA,UAAI7O,IAAI,GAAG5D,EAAE,CAAC0S,SAAH,CAAa,MAAb,CAAX;;AACA,UAAI9O,IAAJ,EAAU;AACNA,YAAI,CAAC+O,SAAL,GAAiB,IAAjB;AACA/O,YAAI,CAACgP,UAAL,GAAkBZ,YAAlB;AACH,OApHE,CAsHH;AACA;;;AACA,WAAKa,iBAAL;;AAEA,UAAI7S,EAAE,CAAC8S,YAAP,EAAqB;AACjBZ,kBAAU,CAACrJ,KAAX,CAAiBC,OAAjB,GAA2B,2CAA3B;AACH;AAED;;;AACA,WAAKzI,WAAL,GAAmB,IAAnB;AACH;AAED;;;;;AAnRJ;AAAA;AAAA,mCAuRmB;AACX,UAAIL,EAAE,GAAG,KAAKA,EAAd;AACAA,QAAE,CAAC+S,MAAH,GAAY,CAAZ;AACA/S,QAAE,CAACgT,UAAH,GAAgB,CAAhB;AACAhT,QAAE,CAACqS,eAAH,GAAqB,CAArB;AACH;AAED;;;;;AA9RJ;AAAA;AAAA,0CAkS0B;AAAA;;AAClB,UAAIrS,EAAE,GAAG,KAAKA,EAAd;;AACA,UAAIA,EAAE,CAACiT,SAAH,CAAa/c,MAAb,GAAsB,CAA1B,EAA6B;AACzB;AACH;;AAED8J,QAAE,CAACkT,OAAH,CAAW,UAACnL,CAAD,EAAO;AACd,YAAIoL,IAAJ;AACA,YAAIC,IAAI,GAAGpT,EAAE,CAAC+B,GAAH,GAASD,IAAT,CAAc9B,EAAE,CAACqT,kBAAH,EAAd,EAAuC1L,KAAvC,CAA6CI,CAA7C,CAAX;;AACA,YAAIqL,IAAI,CAAC/D,KAAL,KAAe,EAAnB,EAAuB;AACnB8D,cAAI,GAAGC,IAAI,CAAC/D,KAAZ;AACH,SAFD,MAEO,IAAI+D,IAAI,CAACvK,KAAL,CAAWwG,KAAX,KAAqB,EAAzB,EAA6B;AAChC8D,cAAI,GAAGvJ,QAAQ,CAACwJ,IAAI,CAACvK,KAAL,CAAWwG,KAAZ,EAAmB,EAAnB,CAAf;AACH,SAFM,MAEA;AACH8D,cAAI,GAAG,MAAI,CAAC7C,eAAZ;AACH;;AACDtQ,UAAE,CAACiT,SAAH,CAAalL,CAAb,IAAkBoL,IAAlB;AACH,OAXD;AAaAnT,QAAE,CAACwS,YAAH;AACH;AAED;;;;;;AAxTJ;AAAA;AAAA,wCA6TwB;AAChB,UAAIrB,GAAG,GAAG,KAAKnR,EAAL,CAAQ+B,GAAR,EAAV;AACA,UAAIsN,KAAJ,CAFgB,CAEL;;AAEX,UAAI8B,GAAG,CAAC9B,KAAJ,KAAc,EAAlB,EAAsB;AAClBA,aAAK,GAAG8B,GAAG,CAAC9B,KAAZ;AACH,OAFD,MAGK,IAAI8B,GAAG,CAACtI,KAAJ,CAAUwG,KAAV,KAAoB,EAAxB,EAA4B;AAC7BA,aAAK,GAAG8B,GAAG,CAACtI,KAAJ,CAAUwG,KAAlB;AACH,OAFI,MAEE;AACHA,aAAK,GAAG8B,GAAG,CAACS,WAAZ;AACH;;AACD,aAAOhI,QAAQ,CAACyF,KAAD,EAAQ,EAAR,CAAf;AACH;AAED;;;;;;;;AA5UJ;AAAA;AAAA,oCAmVoB7U,GAnVpB,EAmVyBiB,SAnVzB,EAmVoC;AAC5B,UAAIgQ,OAAO,GAAG,sDAAS,CAACjR,GAAD,CAAvB;AACAiR,aAAO,CAAChQ,SAAR,GAAoBA,SAApB;AACA,aAAOgQ,OAAP;AACH;AAED;;;;;;AAzVJ;AAAA;AAAA,uCA8VuB;AAAA;;AACf,UAAIzL,EAAE,GAAG,KAAKA,EAAd;AACA,UAAIkS,UAAU,GAAG,sDAAS,CAAC,IAAD,CAA1B;;AACA,UAAI,KAAK/B,OAAL,IAAgBnQ,EAAE,CAACkR,OAAvB,EAAgC;AAC5BlR,UAAE,CAACyG,cAAH,GAAoB,EAApB;AACAzG,UAAE,CAACkT,OAAH,CAAW,UAAC3R,CAAD,EAAO;AACd,cAAI+R,OAAO,aAAMtT,EAAE,CAACuT,OAAH,GAAahS,CAAb,GAAiB,MAAI,CAACkP,aAAtB,GAAsCzQ,EAAE,CAACxD,EAA/C,CAAX;AACA,cAAIgX,EAAE,GAAG,sDAAS,CAACxT,EAAE,CAACyT,UAAJ,EAAgB,CAAC,IAAD,EAAOH,OAAP,CAAhB,CAAlB;AACApB,oBAAU,CAAC5V,WAAX,CAAuBkX,EAAvB;AACAxT,YAAE,CAACyG,cAAH,CAAkBlF,CAAlB,IAAuB+R,OAAvB;AACH,SALD;AAMH;;AACD,aAAOpB,UAAP;AACH;AAED;;;;;AA7WJ;AAAA;AAAA,wCAiXwB;AAChB,UAAIlS,EAAE,GAAG,KAAKA,EAAd;AACA,UAAI0T,IAAI,GAAG,gDAAG,CAAC1T,EAAE,CAAC+B,GAAH,EAAD,EAAW,KAAX,CAAd;AACA,WAAK8O,YAAL,GAAoB6C,IAAI,CAACxd,MAAL,GAAc,CAAlC;;AAEA,WAAK,IAAI6R,CAAC,GAAI/H,EAAE,CAAC2T,UAAH,KAAkB,CAAhC,EAAoC5L,CAAC,IAAI,CAAzC,EAA4CA,CAAC,EAA7C,EAAiD;AAC7C,YAAIrF,GAAG,SAAP;;AAEA,YAAI,CAAC,KAAKmO,YAAV,EAAwB;AACpBnO,aAAG,GAAG,sDAAS,CAAC,KAAD,CAAf;AACA1C,YAAE,CAAC+B,GAAH,GAASwP,YAAT,CAAsB7O,GAAtB,EAA2B1C,EAAE,CAAC+B,GAAH,GAASiK,UAApC;AACH,SAHD,MAGO;AACHtJ,aAAG,GAAGgR,IAAI,CAAC3L,CAAD,CAAV;AACH;;AACDrF,WAAG,CAACmG,KAAJ,CAAUwG,KAAV,GAAkBrP,EAAE,CAACiT,SAAH,CAAalL,CAAb,CAAlB;AACA,aAAKyI,OAAL,CAAazI,CAAb,IAAkBrF,GAAlB;AACH;;AACD,WAAKmO,YAAL,GAAoB,IAApB;AACH;AAED;;;;;;AArYJ;AAAA;AAAA,kCA0YkB+C,SA1YlB,EA0Y6B;AACrB,UAAI,KAAKxD,SAAT,EAAoB;AAChB;AACA;AACAwD,iBAAS,CAACtX,WAAV,CAAsB,sDAAS,CAAC,IAAD,CAA/B;AACH,OAJD,MAIO;AACH;AACA,aAAK,IAAItG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKia,QAAL,CAAc/Z,MAAlC,EAA0CF,CAAC,EAA3C,EAA+C;AAC3C,cAAIoM,GAAG,GAAG,KAAKpC,EAAL,CAAQ+B,GAAR,GAAcD,IAAd,CAAmB,KAAKmO,QAAL,CAAcja,CAAd,CAAnB,CAAV;AACA4d,mBAAS,CAACtX,WAAV,CAAsB8F,GAAtB;AACH;AACJ;AACJ;AAED;;;;;;AAxZJ;AAAA;AAAA,mCA6ZmBqJ,OA7ZnB,EA6Z4B;AACpB,UAAI,CAAC,KAAK4D,KAAV,EAAiB;AACb;AACH;;AACD,UAAI,KAAKA,KAAL,CAAW5V,OAAX,CAAmB,GAAnB,MAA4B,CAAC,CAAjC,EAAoC;AAChCgS,eAAO,CAAC5C,KAAR,CAAcwG,KAAd,GAAsB,MAAtB;AACH,OAFD,MAEO;AACH5D,eAAO,CAAC5C,KAAR,CAAcwG,KAAd,GAAsB,KAAKA,KAA3B;AACH;AACJ;AAED;;;;;;;AAxaJ;AAAA;AAAA,sCA8asBjN,GA9atB,EA8a2B;AAAA;;AACnB,UAAIpC,EAAE,GAAG,KAAKA,EAAd;AACA,UAAIgS,YAAY,GAAG,EAAnB;AACAhS,QAAE,CAACkT,OAAH,CAAW,UAAC9Y,CAAD,EAAO;AACd,YAAIyZ,CAAC,GAAGzR,GAAG,CAACuF,KAAJ,CAAUvN,CAAV,CAAR;AACA,YAAI0Z,IAAI,GAAGD,CAAC,CAAC9N,YAAF,CAAe,IAAf,CAAX;;AACA,YAAI,CAAC+N,IAAD,IAASA,IAAI,KAAK,EAAtB,EAA0B;AACtBA,cAAI,aAAM,MAAI,CAACpD,UAAL,GAAkBtW,CAAxB,cAA6B4F,EAAE,CAACxD,EAAhC,CAAJ;AACAqX,WAAC,CAACjZ,YAAF,CAAe,IAAf,EAAqBkZ,IAArB;AACH;;AACD9B,oBAAY,CAACrU,IAAb,CAAkBmW,IAAlB;AACH,OARD;AASA,aAAO9B,YAAP;AACH;AAED;;;;AA7bJ;AAAA;AAAA,8BAgcc;AACN,UAAIhS,EAAE,GAAG,KAAKA,EAAd;AACA,UAAImR,GAAG,GAAGnR,EAAE,CAAC+B,GAAH,EAAV;;AAEA,UAAI,CAAC,KAAK1B,WAAV,EAAuB;AACnB;AACH;;AACD,UAAIoR,CAAC,GAAG,sDAAS,CAACN,GAAD,CAAjB;AACA,WAAKL,WAAL,CAAiBhW,UAAjB,CAA4ByW,YAA5B,CAAyCE,CAAzC,EAA4C,KAAKX,WAAjD;AACAjW,MAAA,sDAAS,CAAC,KAAKiW,WAAN,CAAT;AAEA,WAAKA,WAAL,GAAmB,IAAnB;AACA,WAAKE,WAAL,GAAmB,IAAnB;AACA,WAAKC,OAAL,GAAe,IAAf;AACA,WAAKF,OAAL,GAAe,IAAf;AAEAI,SAAG,CAACP,SAAJ,GAAgB,KAAKD,aAArB,CAhBM,CAiBN;;AACA,WAAK3Q,EAAL,CAAQmR,GAAR,GAAc,gDAAG,CAACnR,EAAE,CAACxD,EAAJ,CAAjB;AAEA,WAAK6D,WAAL,GAAmB,KAAnB;AACH;AArdL;;AAAA;AAAA,EAAgC,gDAAhC,E;;;;;;;;;;;;;;;;;;;;;;;ACZA;AACA;AAEA,IAAM0T,IAAI,GAAG,0CAAI,CAACA,IAAlB;AACA,IAAMC,QAAQ,GAAG,0CAAI,CAACA,QAAtB;AACA,IAAMC,kBAAkB,GAAG,0CAAI,CAACA,kBAAhC;AACA,IAAMC,kBAAkB,GAAG,0CAAI,CAACA,kBAAhC;AAEA;;;;AAGO,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,GAAM;AAC/B,MAAIC,OAAO,GAAG,0CAAI,CAACC,YAAnB;AACA,SAAQ,kBAAkB,0CAAnB,KAA6BD,OAAO,KAAKzQ,SAAZ,IAAyByQ,OAAO,GAAG,CAAhE,CAAP;AACH,CAHM;AAKP;;;;;;;AAMA,IAAaE,IAAb;AAAA;AAAA;AAEI;;;;;AAKA,gBAAY1c,KAAZ,EAAmB;AAAA;;AACf;;;;AAIA,SAAKA,KAAL,GAAaA,KAAb;AAEA;;;;;;AAKA,SAAK2c,QAAL,GAAgB,IAAhB;AAEA;;;;;AAIA,SAAKnU,OAAL,GAAexI,KAAK,CAACwI,OAArB;AAEA;;;;;AAIA,SAAKoU,SAAL,GAAiB,IAAjB;AACH;AAED;;;;;AAlCJ;AAAA;AAAA,2BAqCW;AAAA;;AACH,UAAI,CAACL,aAAa,EAAlB,EAAsB;AAClB;AACH;;AAED,WAAKI,QAAL,GAAgBP,QAAQ,CAACS,IAAzB,CALG,CAMH;;AACA,WAAKD,SAAL,GAAiB,KAAKE,IAAL,CAAU7U,IAAV,CAAe,IAAf,CAAjB;AACA,WAAKO,OAAL,CAAaE,EAAb,CAAgB,CAAC,eAAD,CAAhB,EAAmC,UAACN,EAAD,EAAKpI,KAAL;AAAA,eAAe,KAAI,CAAC+c,MAAL,CAAY/c,KAAZ,CAAf;AAAA,OAAnC;AACA,WAAKwI,OAAL,CAAaE,EAAb,CAAgB,CAAC,aAAD,CAAhB,EAAiC,KAAKkU,SAAtC;AACAvW,MAAA,qDAAM,CAAC,0CAAD,EAAO,YAAP,EAAqB,KAAKuW,SAA1B,CAAN;AACH;AAED;;;;;;AAlDJ;AAAA;AAAA,2BAuDW5c,KAvDX,EAuDkB;AACV,UAAI6c,IAAI,cAAOP,kBAAkB,CAACH,IAAI,CAACa,SAAL,CAAehd,KAAf,CAAD,CAAzB,CAAR;;AACA,UAAI,KAAK2c,QAAL,KAAkBE,IAAtB,EAA4B;AACxB;AACH;;AAEDT,cAAQ,CAACS,IAAT,GAAgBA,IAAhB;AACA,WAAKF,QAAL,GAAgBE,IAAhB;AACH;AAED;;;;;;;AAjEJ;AAAA;AAAA,0BAuEUA,IAvEV,EAuEgB;AACR,UAAIA,IAAI,CAAChb,OAAL,CAAa,GAAb,MAAsB,CAAC,CAA3B,EAA8B;AAC1B,eAAO,IAAP;AACH;;AACDgb,UAAI,GAAGA,IAAI,CAAC5J,MAAL,CAAY,CAAZ,CAAP;AACA,aAAOkJ,IAAI,CAACpH,KAAL,CAAWsH,kBAAkB,CAACQ,IAAD,CAA7B,CAAP;AACH;AAED;;;;AA/EJ;AAAA;AAAA,2BAkFW;AACH,UAAI7c,KAAK,GAAG,KAAK+U,KAAL,CAAWqH,QAAQ,CAACS,IAApB,CAAZ;;AACA,UAAI,CAAC7c,KAAL,EAAY;AACR;AACH,OAJE,CAKH;;;AACA,WAAKA,KAAL,CAAWid,eAAX,CAA2Bjd,KAA3B;AACH;AAED;;;;AA3FJ;AAAA;AAAA,8BA8Fc;AAAA;;AACN,WAAKwI,OAAL,CAAaiC,GAAb,CAAiB,CAAC,eAAD,CAAjB,EAAoC,UAACrC,EAAD,EAAKpI,KAAL;AAAA,eAAe,MAAI,CAAC+c,MAAL,CAAY/c,KAAZ,CAAf;AAAA,OAApC;AACA,WAAKwI,OAAL,CAAaiC,GAAb,CAAiB,CAAC,aAAD,CAAjB,EAAkC,KAAKmS,SAAvC;AACAhW,MAAA,wDAAS,CAAC,0CAAD,EAAO,YAAP,EAAqB,KAAKgW,SAA1B,CAAT;AAEA,WAAK5c,KAAL,GAAa,IAAb;AACA,WAAK2c,QAAL,GAAgB,IAAhB;AACA,WAAKnU,OAAL,GAAe,IAAf;AACH;AAtGL;;AAAA;AAAA,I;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAM0U,QAAQ,GAAG,mDACb,qBADJ;AAEA,IAAMC,WAAW,GAAG,8BAApB;AAEA;;;;AAGA,IAAaC,IAAb;AAAA;AAAA;AAAA;;AAEI;;;;AAIA,gBAAYhV,EAAZ,EAAgB;AAAA;;AAAA;;AACZ,8EAAMA,EAAN,EAAU,MAAV;AAEA,QAAIuC,CAAC,GAAG,MAAKpC,MAAL,CAAY8U,iBAAZ,IAAiC,EAAzC;AAEA;;;;;AAIA,UAAKC,KAAL,GAAa,6DAAW,CAAC3S,CAAC,CAAC0I,SAAH,EAAc,IAAd,CAAxB;AAEA;;;;;AAIA,UAAKkK,SAAL,GAAiB,6DAAW,CAAC5S,CAAC,CAAC6S,mBAAH,EAAwB,IAAxB,CAA5B;AAEA;;;;;AAIA,UAAKC,SAAL,GAAiB,CAAC,sDAAO,CAAC9S,CAAC,CAACrG,IAAH,CAAR,GAAmBqG,CAAC,CAACrG,IAArB,GACb,iEACA,kEADA,GAEA,2DAFA,GAGA,kEAHA,GAIA,kEAJA,GAKA,2BALA,GAK8B4Y,QAL9B,GAKyC,oBALzC,GAMA,qBAPJ;AASA;;;;;AAIA,UAAKQ,SAAL,GAAiB,6DAAW,CAAC/S,CAAC,CAAC8I,IAAH,EAAS,IAAT,CAA5B;AAEA;;;;;AAIA,UAAKkK,OAAL,GAAe,6DAAW,CAAChT,CAAC,CAACiT,QAAH,EAAa,GAAb,CAA1B;AAEA;;;;;AAIA,UAAKC,OAAL,GAAe,6DAAW,CAAClT,CAAC,CAACmT,QAAH,EAAa,IAAb,CAA1B;AAEA;;;;;AAIA,UAAKC,WAAL,GAAmB,6DAAW,CAACpT,CAAC,CAACqT,aAAH,EAAkB,SAAlB,CAA9B;AAEA;;;;;AAIA,UAAKnG,YAAL,GAAoB,6DAAW,CAAClN,CAAC,CAACsT,mBAAH,EAAwB,UAAxB,CAA/B;AAEA;;;;;AAIA,UAAKC,GAAL,GAAW,IAAX;AAEA;;;;;AAIA,UAAKnK,IAAL,GAAY,IAAZ;AAEA;;;;;AAIA,UAAKoK,YAAL,GAAoB,IAApB;AAEA;;;;;AAIA,UAAKC,WAAL,GAAmB,6CACf,GADe,GACThW,EAAE,CAACiW,OADM,GACI,OADJ,GACc,WADd,GAC4BlB,WAD5B,GAEf,oBAFe,GAEQA,WAFR,GAEsB,MAFtB,GAGf,wBAHe,GAGY/U,EAAE,CAACkW,IAHf,GAGsB,uBAHtB,GAIf,8CAJe,GAKf,mEALJ;AAOA;;;;;AAIA,UAAK3K,eAAL,GAAuB,6DAAW,CAAChJ,CAAC,CAACiJ,gBAAH,EAAqB,8CAArB,CAAlC;;AAEA,UAAKpL,OAAL,CAAaE,EAAb,CAAgB,CAAC,WAAD,CAAhB,EAA+B;AAAA,aAAM,MAAKI,IAAL,EAAN;AAAA,KAA/B;;AA/FY;AAgGf;AAED;;;;;;AAxGJ;AAAA;AAAA,8BA4GchD,GA5Gd,EA4GmB;AACX,UAAIyY,SAAS,GAAG,wDAAS,CAACzY,GAAD,CAAzB;;AAEA,aAAOyY,SAAS,IAAIA,SAAS,KAAK,KAAKxK,IAAhC,IAAwCwK,SAAS,KAAK,KAAKL,GAAlE,EAAuE;AACnEK,iBAAS,GAAGA,SAAS,CAACrb,UAAtB;AACH;;AAED,UAAIqb,SAAS,KAAK,KAAKxK,IAAnB,IAA2BwK,SAAS,KAAK,KAAKL,GAAlD,EAAuD;AACnD,aAAKM,MAAL;AACH;;AAED;AACH;AAED;;;;AA1HJ;AAAA;AAAA,2BA6HW;AAAA;;AACH,UAAI,KAAK/V,WAAT,EAAsB;AAClB;AACH;;AAED,WAAKD,OAAL,CAAauF,IAAb,CAAkB,sBAAlB,EAA0C,IAA1C,EAAgD,CAAC,qDAAM,CAAC,KAAKuP,KAAN,CAAvD;AAEA,UAAIlV,EAAE,GAAG,KAAKA,EAAd;AAEA,UAAI8V,GAAG,GAAG,sDAAS,CAAC,MAAD,CAAnB;AACA,UAAInK,IAAI,GAAG,sDAAS,CAAC,KAAD,CAApB;AAEA,WAAKoK,YAAL,GAAoB,KAAKM,SAAL,CAAexW,IAAf,CAAoB,IAApB,CAApB,CAZG,CAcH;;AACA,UAAI+L,QAAQ,GAAG,CAAC,KAAKsJ,KAAN,GACXlV,EAAE,CAACC,OAAH,CAAW,SAAX,EAAsBsG,SAAtB,CAAgC,KAAKgF,eAArC,CADW,GAEX,gDAAG,CAAC,KAAK2J,KAAN,CAFP;AAGAtJ,cAAQ,CAACtP,WAAT,CAAqBwZ,GAArB;AAEA,UAAIQ,YAAY,GAAG,CAAC,KAAKnB,SAAN,GAAkBW,GAAlB,GAAwB,gDAAG,CAAC,KAAKX,SAAN,CAA9C;;AAEA,UAAI,CAAC,KAAKM,OAAV,EAAmB;AACfa,oBAAY,CAACha,WAAb,CAAyBqP,IAAzB;AACA,YAAI4K,QAAQ,GAAG,sDAAS,CAAC,GAAD,EAAM,CAAC,MAAD,EAAS,qBAAT,CAAN,CAAxB;AACAA,gBAAQ,CAAC9a,SAAT,GAAqB,KAAKka,WAA1B;AACAY,gBAAQ,CAACja,WAAT,CAAqB,uDAAU,CAAC,KAAKiZ,OAAN,CAA/B;AACAO,WAAG,CAACxZ,WAAJ,CAAgBia,QAAhB;AACAtY,QAAA,qDAAM,CAACsY,QAAD,EAAW,OAAX,EAAoB;AAAA,iBAAM,MAAI,CAACH,MAAL,EAAN;AAAA,SAApB,CAAN;AACH,OAPD,MAOO;AACHN,WAAG,CAACtO,SAAJ,GAAgB,KAAKiO,OAArB;AACA,YAAIe,MAAM,GAAGV,GAAG,CAAC9J,UAAjB;AACA/N,QAAA,qDAAM,CAACuY,MAAD,EAAS,OAAT,EAAkB;AAAA,iBAAM,MAAI,CAACJ,MAAL,EAAN;AAAA,SAAlB,CAAN;AACAE,oBAAY,CAACha,WAAb,CAAyBqP,IAAzB;AACH;;AAED,UAAI,CAAC,KAAK2J,SAAV,EAAqB;AACjB3J,YAAI,CAACnE,SAAL,GAAiB,KAAK6N,SAAtB;AACA1J,YAAI,CAAClQ,SAAL,GAAiB,KAAKgU,YAAtB;AACH,OAHD,MAGO;AACH,YAAI,KAAK0F,SAAT,EAAoB;AAChBmB,sBAAY,CAACha,WAAb,CAAyBqP,IAAzB;AACH;;AACDA,YAAI,CAACnE,SAAL,GAAiB,KAAK8N,SAAtB;;AACA,YAAI,CAAC,KAAKH,SAAV,EAAqB;AACjBxJ,cAAI,CAAClQ,SAAL,GAAiB,KAAKgU,YAAtB;AACH;AACJ;;AACD9D,UAAI,CAACnE,SAAL,IAAkB,KAAKwO,WAAvB;AACA/X,MAAA,qDAAM,CAAC0N,IAAD,EAAO,OAAP,EAAgB;AAAA,eAAM,MAAI,CAACyK,MAAL,EAAN;AAAA,OAAhB,CAAN;AAEA,WAAKzK,IAAL,GAAYA,IAAZ;AACA,WAAKmK,GAAL,GAAWA,GAAX;AACA;;AACA,WAAKzV,WAAL,GAAmB,IAAnB;AAEA,WAAKD,OAAL,CAAauF,IAAb,CAAkB,qBAAlB,EAAyC,IAAzC;AACH;AAED;;;;AAxLJ;AAAA;AAAA,6BA2La;AACL;AACA;AACA,UAAI,CAAC,KAAKzE,SAAL,EAAL,EAAuB;AACnB;AACH,OALI,CAOL;;;AACA1C,MAAA,wDAAS,CAAC,0CAAD,EAAO,SAAP,EAAkB,KAAKuX,YAAvB,CAAT;AAEA,UAAIU,UAAU,GAAG,KAAK9K,IAAL,CAAU9C,KAAV,CAAgBC,OAAjC;;AACA,UAAI2N,UAAU,KAAK,EAAf,IAAqBA,UAAU,KAAK,2CAAxC,EAA8C;AAC1C,aAAK9K,IAAL,CAAU9C,KAAV,CAAgBC,OAAhB,GAA0B,QAA1B;AACA7K,QAAA,qDAAM,CAAC,0CAAD,EAAO,SAAP,EAAkB,KAAK8X,YAAvB,CAAN;AACH,OAHD,MAGO;AACH,aAAKpK,IAAL,CAAU9C,KAAV,CAAgBC,OAAhB,GAA0B,2CAA1B;AACH;AACJ;AAED;;;;AA9MJ;AAAA;AAAA,8BAiNc;AACN,UAAI,CAAC,KAAKzI,WAAV,EAAuB;AACnB;AACH;;AACDxF,MAAA,sDAAS,CAAC,KAAKib,GAAN,CAAT;AACA,WAAKA,GAAL,GAAW,IAAX;AAEAjb,MAAA,sDAAS,CAAC,KAAK8Q,IAAN,CAAT;AACA,WAAKA,IAAL,GAAY,IAAZ;AAEA,WAAKoK,YAAL,GAAoB,IAApB;AACA,WAAK1V,WAAL,GAAmB,KAAnB;AACH;AA7NL;;AAAA;AAAA,EAA0B,gDAA1B,E,CAiOA;;AACA2U,IAAI,CAAC0B,iBAAL,GAAyB,IAAzB,C;;;;;;;;;;;;;;;;;;;;;;;;AClPA;AACA;AACA;AACA;AAEA;;;;;;;AAMA,IAAaC,gBAAb;AAAA;AAAA;AAEI;;;;AAIA,4BAAY3W,EAAZ,EAAgB;AAAA;;AACZ,QAAIuC,CAAC,GAAGvC,EAAE,CAACG,MAAH,EAAR;AAEA;;;;;AAIA,SAAKyW,iBAAL,GAAyB,6DAAW,CAACrU,CAAC,CAACsU,mBAAH,EAAwB,SAAxB,CAApC;AAEA;;;;;AAIA,SAAK7W,EAAL,GAAUA,EAAV;AAEA;;;;;AAIA,SAAKI,OAAL,GAAeJ,EAAE,CAACI,OAAlB;AACH;AAED;;;;;AA5BJ;AAAA;AAAA,2BA+BW;AAAA;;AACH,WAAKA,OAAL,CAAaE,EAAb,CACI,CAAC,kBAAD,EAAqB,SAArB,CADJ,EAEI;AAAA,eAAM,KAAI,CAACwW,cAAL,EAAN;AAAA,OAFJ;AAIA,WAAK1W,OAAL,CAAaE,EAAb,CACI,CAAC,mBAAD,CADJ,EAEI,UAACN,EAAD,EAAKoT,IAAL,EAAW2D,IAAX;AAAA,eAAoB,KAAI,CAACC,YAAL,CAAkB5D,IAAlB,EAAwB2D,IAAxB,CAApB;AAAA,OAFJ;AAIH;AAED;;;;;;;;;AA1CJ;AAAA;AAAA,8BAkDchd,IAlDd,EAkDoBgd,IAlDpB,EAkD0B7L,QAlD1B,EAkDoC;AAC5B;AACA,UAAInR,IAAI,CAACkd,aAAT,EAAwB;AACpB,YAAIC,QAAQ,GAAGnd,IAAI,CAACI,UAApB;;AACA,aAAK,IAAInE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkhB,QAAQ,CAAChhB,MAA7B,EAAqCF,CAAC,EAAtC,EAA0C;AACtC,eAAKmhB,SAAL,CAAeD,QAAQ,CAAClhB,CAAD,CAAvB,EAA4B+gB,IAA5B,EAAkC7L,QAAlC;AACH;AACJ;;AAED,UAAInR,IAAI,CAACM,QAAL,KAAkB,CAAtB,EAAyB;AACrB,YAAI+c,OAAO,GAAGrd,IAAI,CAACsd,SAAL,CAAehJ,WAAf,EAAd;AACA,YAAIiJ,OAAO,GAAGF,OAAO,CAAC3d,OAAR,CAAgBsd,IAAI,CAAC1I,WAAL,EAAhB,CAAd;;AAEA,YAAIiJ,OAAO,KAAK,CAAC,CAAjB,EAAoB;AAChB,cAAIC,EAAE,GAAGxd,IAAI,CAACe,UAAd;;AACA,cAAIyc,EAAE,IAAIA,EAAE,CAAC9b,SAAH,KAAiByP,QAA3B,EAAqC;AACjC;AACA,gBAAIsM,EAAE,GAAGzd,IAAI,CAACsd,SAAd;AAAA,gBACI;AACAI,kBAAM,GAAG,uDAAU,CAACD,EAAE,CAAC3M,MAAH,CAAU,CAAV,EAAayM,OAAb,CAAD,CAFvB;AAAA,gBAGIze,KAAK,GAAG2e,EAAE,CAAC3M,MAAH,CAAUyM,OAAV,EAAmBP,IAAI,CAAC7gB,MAAxB,CAHZ;AAAA,gBAIIwhB,KAAK,GAAG,uDAAU,CAACF,EAAE,CAAC3M,MAAH,CAAUyM,OAAO,GAAGP,IAAI,CAAC7gB,MAAzB,CAAD,CAJtB;AAAA,gBAKIgG,IAAI,GAAG,uDAAU,CAACrD,KAAD,CALrB;AAAA,gBAMI0N,SAAS,GAAG,sDAAS,CAAC,MAAD,CANzB;AAOAA,qBAAS,CAAC9K,SAAV,GAAsByP,QAAtB;AACA3E,qBAAS,CAACjK,WAAV,CAAsBJ,IAAtB;AACAqb,cAAE,CAAChG,YAAH,CAAgBkG,MAAhB,EAAwB1d,IAAxB;AACAwd,cAAE,CAAChG,YAAH,CAAgBhL,SAAhB,EAA2BxM,IAA3B;AACAwd,cAAE,CAAChG,YAAH,CAAgBmG,KAAhB,EAAuB3d,IAAvB;AACAwd,cAAE,CAACxc,WAAH,CAAehB,IAAf;AACH;AACJ;AACJ;AACJ;AAED;;;;;;AArFJ;AAAA;AAAA,gCA0FgBgd,IA1FhB,EA0FsB7L,QA1FtB,EA0FgC;AACxB,UAAIyM,gBAAgB,GAAG,KAAK3X,EAAL,CAAQ+B,GAAR,GAAc6V,gBAAd,YAAmC1M,QAAnC,EAAvB;;AACA,WAAK,IAAIlV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2hB,gBAAgB,CAACzhB,MAArC,EAA6CF,CAAC,EAA9C,EAAkD;AAC9C,YAAIoE,CAAC,GAAGud,gBAAgB,CAAC3hB,CAAD,CAAxB;AACA,YAAIohB,OAAO,GAAG,oDAAO,CAAChd,CAAD,CAArB;;AAEA,YAAI,qDAAM,CAAC2c,IAAD,CAAN,IACAK,OAAO,CAAC/I,WAAR,GAAsB5U,OAAtB,CAA8Bsd,IAAI,CAAC1I,WAAL,EAA9B,MAAsD,CAAC,CAD3D,EAC8D;AAC1D,cAAIvT,UAAU,GAAGV,CAAC,CAACU,UAAnB;AACAA,oBAAU,CAAC+c,YAAX,CAAwB,uDAAU,CAACT,OAAD,CAAlC,EAA6Chd,CAA7C;AACAU,oBAAU,CAACgd,SAAX;AACH;AACJ;AACJ;AAED;;;;AAzGJ;AAAA;AAAA,qCA4GqB;AACb,UAAI,CAAC,KAAK9X,EAAL,CAAQ+X,iBAAb,EAAgC;AAC5B;AACH;;AAED,WAAKC,WAAL,CAAiB,IAAjB,EAAuB,KAAKpB,iBAA5B;AACH;AAED;;AApHJ;AAAA;AAAA,8BAqHc;AAAA;;AACN,WAAKxW,OAAL,CAAaiC,GAAb,CACI,CAAC,kBAAD,EAAqB,SAArB,CADJ,EAEI;AAAA,eAAM,MAAI,CAACyU,cAAL,EAAN;AAAA,OAFJ;AAIA,WAAK1W,OAAL,CAAaiC,GAAb,CACI,CAAC,mBAAD,CADJ,EAEI,UAACrC,EAAD,EAAKoT,IAAL,EAAW2D,IAAX;AAAA,eAAoB,MAAI,CAACC,YAAL,CAAkB5D,IAAlB,EAAwB2D,IAAxB,CAApB;AAAA,OAFJ;AAIH;AAED;;;;;;AAhIJ;AAAA;AAAA,iCAqIiB3D,IArIjB,EAqIuB2D,IArIvB,EAqI6B;AACrB,UAAI/W,EAAE,GAAG,KAAKA,EAAd;AACA,UAAIiY,IAAI,GAAG,IAAItc,MAAJ,CAAW,sDAAM,CAACqE,EAAE,CAACkY,UAAJ,CAAjB,CAAX;AACA,UAAIC,IAAI,GAAG,IAAIxc,MAAJ,CAAWqE,EAAE,CAACoY,UAAd,CAAX;AACA,UAAIC,IAAI,GAAG,IAAI1c,MAAJ,CAAWqE,EAAE,CAACsY,UAAd,CAAX;AACA,UAAIC,IAAI,GAAG,IAAI5c,MAAJ,CAAWqE,EAAE,CAACwY,UAAd,CAAX;AACA,UAAIC,IAAI,GAAG,IAAI9c,MAAJ,CAAWqE,EAAE,CAAC0Y,UAAd,CAAX;AACA,UAAIC,IAAI,GAAG,IAAIhd,MAAJ,CAAWqE,EAAE,CAAC4Y,UAAd,CAAX;AACA,UAAIC,GAAG,GAAG,IAAIld,MAAJ,CAAWqE,EAAE,CAAC8Y,UAAd,CAAV;AACA,UAAIC,GAAG,GAAG,IAAIpd,MAAJ,CAAWqE,EAAE,CAACgZ,UAAd,CAAV;AACA,UAAIC,GAAG,GAAG,IAAItd,MAAJ,CAAWqE,EAAE,CAACkZ,UAAd,CAAV;AAEAnC,UAAI,GAAGA,IAAI,CACN/a,OADE,CACMic,IADN,EACY,EADZ,EAEFjc,OAFE,CAEMmc,IAFN,EAEY,EAFZ,EAGFnc,OAHE,CAGMqc,IAHN,EAGY,EAHZ,EAIFrc,OAJE,CAIMuc,IAJN,EAIY,EAJZ,CAAP;;AAMA,UAAIE,IAAI,CAACU,IAAL,CAAUpC,IAAV,KAAmB4B,IAAI,CAACQ,IAAL,CAAUpC,IAAV,CAAnB,IAAsC8B,GAAG,CAACM,IAAJ,CAASpC,IAAT,CAAtC,IACAgC,GAAG,CAACI,IAAJ,CAASpC,IAAT,CADA,IACkBkC,GAAG,CAACE,IAAJ,CAASpC,IAAT,CADtB,EACsC;AAClCA,YAAI,GAAG,oDAAO,CAAC3D,IAAD,CAAd;AACH;;AAED,UAAI2D,IAAI,KAAK,EAAb,EAAiB;AACb;AACH;;AAED,WAAKI,SAAL,CAAe/D,IAAf,EAAqB2D,IAArB,EAA2B,KAAKH,iBAAhC;AACH;AAjKL;;AAAA;AAAA,I,CAoKA;;AACAD,gBAAgB,CAAC1K,OAAjB,GAA2B,mBAA3B,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChLA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAMmN,oBAAoB,GAAG,CACzB,kBADyB,EAEzB,0BAFyB,EAGzB,oBAHyB,EAIzB,yBAJyB,EAKzB,2BALyB,EAMzB,mBANyB,EAOzB,0BAPyB,EAQzB,2BARyB,EASzB,uBATyB,CAA7B;AAYA,IAAMC,mBAAmB,GAAG,CACxB,iBADwB,EAExB,yBAFwB,EAGxB,mBAHwB,EAIxB,wBAJwB,EAKxB,0BALwB,EAMxB,kBANwB,EAOxB,yBAPwB,EAQxB,0BARwB,EASxB,sBATwB,CAA5B;AAYA;;;;;;;;AAOA,IAAaC,MAAb;AAAA;AAAA;AAAA;;AAEI;;;;;AAKA,kBAAYtZ,EAAZ,EAAgB;AAAA;;AAAA;;AACZ,gFAAMA,EAAN,EAAU,QAAV;AAEA,QAAIuC,CAAC,GAAG,MAAKpC,MAAL,CAAYpI,MAAZ,IAAsB,EAA9B;AAEA;;;;;AAIA,UAAKiT,QAAL,GAAgB,6DAAW,CAACzI,CAAC,CAAC0I,SAAH,EAAc,IAAd,CAA3B;AAEA;;;;;AAIA,UAAKU,IAAL,GAAY,IAAZ;AAEA;;;;;AAIA,UAAKzP,IAAL,GAAY,6DAAW,CAACqG,CAAC,CAACrG,IAAH,EAAS,YAAT,CAAvB;AAEA;;;;;AAIA,UAAKmP,IAAL,GAAY,6DAAW,CAAC9I,CAAC,CAAC8I,IAAH,EAAS,IAAT,CAAvB;AAEA;;;;;AAIA,UAAKH,QAAL,GAAgB,6DAAW,CAAC3I,CAAC,CAAC4I,SAAH,EAAc,QAAd,CAA3B;AAEA;;;;;AAIA,UAAKoO,UAAL,GAAkB,GAAlB;AAEA;;;;;AAIA,UAAKC,MAAL,GAAc,4DAAU,CAACjX,CAAC,CAACkX,cAAH,EAAmB,+CAAnB,CAAxB;AAEA;;;;;AAIA,UAAKC,MAAL,GAAc,4DAAU,CAACnX,CAAC,CAACoX,cAAH,EAAmB,+CAAnB,CAAxB;AAnDY;AAoDf;AAED;;;;;AA7DJ;AAAA;AAAA,2BAgEW;AAAA;;AACH,UAAI,KAAKtZ,WAAT,EAAsB;AAClB;AACH;;AAED,UAAIL,EAAE,GAAG,KAAKA,EAAd;AACA,UAAII,OAAO,GAAG,KAAKA,OAAnB;AAEA,UAAIwZ,YAAY,GAAG,sDAAS,CAAC,KAAD,CAA5B;AACAA,kBAAY,CAACne,SAAb,GAAyB,KAAKyP,QAA9B;AAEA,UAAIU,QAAQ,GAAG,CAAC,KAAKZ,QAAN,GACXhL,EAAE,CAAC+B,GAAH,GAASjH,UADE,GACW,gDAAG,CAAC,KAAKkQ,QAAN,CAD7B;;AAEA,UAAI,CAAC,KAAKA,QAAV,EAAoB;AAChBY,gBAAQ,CAAC2F,YAAT,CAAsBqI,YAAtB,EAAoC5Z,EAAE,CAAC+B,GAAH,EAApC;AACH,OAFD,MAEO;AACH6J,gBAAQ,CAACtP,WAAT,CAAqBsd,YAArB;AACH;;AACD,WAAKjO,IAAL,GAAYiO,YAAZ;;AACA,UAAI,CAAC,KAAKvO,IAAV,EAAgB;AACZ,aAAKM,IAAL,CAAUrP,WAAV,CAAsB,uDAAU,CAAC,KAAKJ,IAAN,CAAhC;AACH,OAFD,MAEO;AACH,aAAKyP,IAAL,CAAUnE,SAAV,GAAsB,KAAK6D,IAA3B;AACH;;AAED,WAAKwO,IAAL,CAAU,2CAAV,EAzBG,CA2BH;;AACAzZ,aAAO,CAACE,EAAR,CAAW8Y,oBAAX,EAAiC;AAAA,eAAM,MAAI,CAACS,IAAL,CAAU,EAAV,CAAN;AAAA,OAAjC;AACAzZ,aAAO,CAACE,EAAR,CAAW+Y,mBAAX,EAAgC;AAAA,eAAM,MAAI,CAACQ,IAAL,CAAU,2CAAV,CAAN;AAAA,OAAhC;AAEA;;AACA,WAAKxZ,WAAL,GAAmB,IAAnB;AACH;AAED;;;;;AAnGJ;AAAA;AAAA,yBAuGSyZ,CAvGT,EAuGY;AACJ,UAAI,CAAC,KAAK5Y,SAAL,EAAL,EAAuB;AACnB;AACH;;AAED,eAAS6Y,aAAT,GAAyB;AACrB,YAAI,CAAC,KAAKpO,IAAV,EAAgB;AACZ;AACH;;AACD,YAAImO,CAAC,KAAK,2CAAV,EAAgB;AACZ,eAAKN,MAAL,CAAY,IAAZ;AACH;;AACD,aAAK7N,IAAL,CAAU9C,KAAV,CAAgBC,OAAhB,GAA0BgR,CAA1B;;AACA,YAAIA,CAAC,KAAK,2CAAV,EAAgB;AACZ,eAAKJ,MAAL,CAAY,IAAZ;AACH;AACJ;;AAAA;AAED,UAAIjI,CAAC,GAAGqI,CAAC,KAAK,2CAAN,GAAa,KAAKP,UAAlB,GAA+B,CAAvC;AACApM,MAAA,0CAAI,CAAC6M,UAAL,CAAgBD,aAAa,CAACla,IAAd,CAAmB,IAAnB,CAAhB,EAA0C4R,CAA1C;AACH;AAED;;;;AA7HJ;AAAA;AAAA,8BAgIc;AAAA;;AACN,UAAI,CAAC,KAAKpR,WAAV,EAAuB;AACnB;AACH;;AAED,UAAID,OAAO,GAAG,KAAKA,OAAnB;AAEAvF,MAAA,sDAAS,CAAC,KAAK8Q,IAAN,CAAT;AACA,WAAKA,IAAL,GAAY,IAAZ,CARM,CAUN;;AACAvL,aAAO,CAACiC,GAAR,CAAY+W,oBAAZ,EAAkC;AAAA,eAAM,MAAI,CAACS,IAAL,CAAU,EAAV,CAAN;AAAA,OAAlC;AACAzZ,aAAO,CAACiC,GAAR,CAAYgX,mBAAZ,EAAiC;AAAA,eAAM,MAAI,CAACQ,IAAL,CAAU,2CAAV,CAAN;AAAA,OAAjC;AAEA,WAAKxZ,WAAL,GAAmB,KAAnB;AACH;AA/IL;;AAAA;AAAA,EAA4B,gDAA5B,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AAEA;;;;;;;AAMA,IAAa4Z,iBAAb;AAAA;AAAA;AAAA;;AAEI;;;;AAIA,6BAAYja,EAAZ,EAAgB;AAAA;;AAAA;;AACZ,2FAAMA,EAAN,EAAU,mBAAV;AAEA,QAAIG,MAAM,GAAG,MAAKA,MAAL,CAAY+Z,mBAAZ,IAAmC,EAAhD;AAEA;;;;;AAIA,UAAKC,cAAL,GAAsB,6DAAW,CAACha,MAAM,CAACia,gBAAR,EAC7B,cAD6B,CAAjC;AAGA;;;;;AAIA,UAAKC,YAAL,GAAoB,6DAAW,CAACla,MAAM,CAACma,cAAR,EAC3B,YAD2B,CAA/B;AAGA;;;;;AAIA,UAAKC,eAAL,GAAuBxkB,OAAO,CAACoK,MAAM,CAACqa,gBAAR,CAA9B;AAEA;;;;;AAIA,UAAKC,oBAAL,GAA4B,4DAAU,CAACta,MAAM,CAACua,uBAAR,EAClC,+CADkC,CAAtC;AAGA;;;;;AAIA,UAAKC,mBAAL,GAA2B,4DAAU,CAACxa,MAAM,CAACya,sBAAR,EACjC,+CADiC,CAArC;AApCY;AAsCf;AAED;;;;;AA9CJ;AAAA;AAAA,2BAiDW;AAAA;;AACH,UAAI,KAAKva,WAAT,EAAsB;AAClB;AACH;;AAED,WAAKD,OAAL,CAAaE,EAAb,CAAgB,CAAC,kBAAD,CAAhB,EAAsC;AAAA,eAAM,MAAI,CAACua,kBAAL,EAAN;AAAA,OAAtC;AACA,WAAKza,OAAL,CAAaE,EAAb,CACI,CAAC,gBAAD,CADJ,EAEI,UAACN,EAAD,EAAKgD,QAAL;AAAA,eAAkB,MAAI,CAAC8X,gBAAL,CAAsB9X,QAAtB,CAAlB;AAAA,OAFJ;AAKA;;AACA,WAAK3C,WAAL,GAAmB,IAAnB;AACH;AAED;;;;AAhEJ;AAAA;AAAA,yCAmEyB;AAAA;;AACjB,UAAIL,EAAE,GAAG,KAAKA,EAAd;AACAA,QAAE,CAACkT,OAAH,CAAW,UAAC5R,GAAD,EAAS;AAChBxF,QAAA,wDAAW,CAACkE,EAAE,CAAC+a,gBAAH,CAAoBzZ,GAApB,CAAD,EAA2B,MAAI,CAAC6Y,cAAhC,CAAX;;AAEA,YAAI,MAAI,CAACI,eAAT,EAA0B;AACtB,gBAAI,CAACS,cAAL,CAAoB1Z,GAApB,EACI,UAAC8R,IAAD;AAAA,mBAAU,wDAAW,CAACA,IAAD,EAAO,MAAI,CAACiH,YAAZ,CAArB;AAAA,WADJ;AAEH;AACJ,OAPD;AAQH;AAED;;;;;AA/EJ;AAAA;AAAA,qCAmFqBrX,QAnFrB,EAmF+B;AAAA;;AACvB,UAAIhD,EAAE,GAAG,KAAKA,EAAd;AACA,UAAIib,MAAM,GAAGjb,EAAE,CAAC+a,gBAAH,CAAoB/X,QAApB,CAAb;;AACA,UAAI,qDAAQ,CAACiY,MAAD,EAAS,KAAKd,cAAd,CAAZ,EAA2C;AACvC;AACH;;AAED,WAAKM,oBAAL,CAA0B,IAA1B,EAAgCzX,QAAhC;AAEApH,MAAA,qDAAQ,CAACqf,MAAD,EAAS,KAAKd,cAAd,CAAR;;AAEA,UAAI,KAAKI,eAAT,EAA0B;AACtB,aAAKS,cAAL,CAAoBhY,QAApB,EACI,UAACoQ,IAAD;AAAA,iBAAU,qDAAQ,CAACA,IAAD,EAAO,MAAI,CAACiH,YAAZ,CAAlB;AAAA,SADJ;AAEH;;AAED,WAAKM,mBAAL,CAAyB,IAAzB,EAA+B3X,QAA/B;AACH;AAED;;;;;;;;;AAtGJ;AAAA;AAAA,mCA8GmBA,QA9GnB,EA8GiE;AAAA,UAApCxF,EAAoC,uEAA/B,+CAA+B;AAAA,UAArB2T,GAAqB,uEAAf,KAAKnR,EAAL,CAAQ+B,GAAR,EAAe;AACzD;AACA,SAAGtE,OAAH,CAAWM,IAAX,CACIoT,GAAG,CAACyG,gBAAJ,8BAA2C5U,QAAQ,GAAG,CAAtD,OADJ,EACiExF,EADjE;AAEH;AAED;;;;AApHJ;AAAA;AAAA,8BAuHc;AAAA;;AACN,UAAI,CAAC,KAAK6C,WAAV,EAAuB;AACnB;AACH;;AAED,WAAKwa,kBAAL;AACA,WAAKza,OAAL,CAAaiC,GAAb,CAAiB,CAAC,kBAAD,CAAjB,EAAuC;AAAA,eAAM,MAAI,CAACwY,kBAAL,EAAN;AAAA,OAAvC;AACA,WAAKza,OAAL,CAAaiC,GAAb,CACI,CAAC,gBAAD,CADJ,EAEI,UAACrC,EAAD,EAAKgD,QAAL;AAAA,eAAkB,MAAI,CAAC8X,gBAAL,CAAsB9X,QAAtB,CAAlB;AAAA,OAFJ;AAKA;;AACA,WAAK3C,WAAL,GAAmB,KAAnB;AACH;AArIL;;AAAA;AAAA,EAAuC,gDAAvC,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AAEA;;;;;;;AAMA,IAAa6a,SAAb;AAAA;AAAA;AAAA;;AAEI;;;;AAIA,qBAAYlb,EAAZ,EAAgB;AAAA;;AAAA;;AACZ,mFAAMA,EAAN,EAAU,WAAV,GADY,CAGZ;;AACA,QAAIuC,CAAC,GAAG,MAAKpC,MAAL,CAAYgb,kBAAZ,IAAkC,EAA1C;AAEA;;;;;AAIA,UAAKC,OAAL,GAAe,6DAAW,CAAC7Y,CAAC,CAAC6Y,OAAH,EAAY,YAAZ,CAA1B;AAEA;;;;;AAIA,UAAKC,eAAL,GAAuB,6DAAW,CAAC9Y,CAAC,CAAC+Y,gBAAH,EAAqB,IAArB,CAAlC;AAEA;;;;;AAIA,UAAKC,iBAAL,GAAyB,6DAAW,CAAChZ,CAAC,CAACiZ,mBAAH,EAAwB,IAAxB,CAApC;AAEA;;;;;;AAKA,UAAKlV,UAAL,GAAkB,CAAC,sDAAO,CAAC,MAAK+U,eAAN,CAAR,IACd,CAAC,sDAAO,CAAC,MAAKE,iBAAN,CADZ;AAGA;;;;;AAIA,UAAKrQ,QAAL,GAAgB,6DAAW,CAAC3I,CAAC,CAAC4I,SAAH,EAAc,YAAd,CAA3B;AAEA;;;;;AAIA,UAAKQ,IAAL,GAAY,IAAZ;AAEA;;;;;AAIA,UAAK8P,YAAL,GAAoB,4DAAU,CAAClZ,CAAC,CAACmZ,kBAAH,EAAuB,+CAAvB,CAA9B;AAEA;;;;;AAIA,UAAKC,WAAL,GAAmB,4DAAU,CAACpZ,CAAC,CAACqZ,iBAAH,EAAsB,+CAAtB,CAA7B;AAEA;;;;;AAIA,UAAKC,YAAL,GAAoB,4DAAU,CAACtZ,CAAC,CAACuZ,kBAAH,EAAuB,+CAAvB,CAA9B;AAEA;;;;;AAIA,UAAKC,WAAL,GAAmB,4DAAU,CAACxZ,CAAC,CAACyZ,iBAAH,EAAsB,+CAAtB,CAA7B;AAlEY;AAmEf;AAED;;;;;AA3EJ;AAAA;AAAA,2BA8EW;AAAA;;AACH,UAAI,KAAK3b,WAAT,EAAsB;AAClB;AACH;;AACD,UAAIL,EAAE,GAAG,KAAKA,EAAd;AACA,UAAIb,MAAM,GAAG,KAAKkc,eAAL,IAAwB,gDAAG,CAAC,KAAKE,iBAAN,CAA3B,IACTvb,EAAE,CAAC+B,GAAH,EADJ,CALG,CAQH;;AACA,UAAI4J,IAAI,GAAG,sDAAS,CAAC,KAAD,CAApB;AACAA,UAAI,CAAClQ,SAAL,GAAiB,KAAKyP,QAAtB;AACAS,UAAI,CAACnE,SAAL,GAAiB,KAAK4T,OAAtB;;AAEA,UAAI,KAAK9U,UAAT,EAAqB;AACjBnH,cAAM,CAAC7C,WAAP,CAAmBqP,IAAnB;AACH,OAFD,MAEO;AACHxM,cAAM,CAACrE,UAAP,CAAkByW,YAAlB,CAA+B5F,IAA/B,EAAqCxM,MAAM,CAAC8c,WAA5C;AACH;;AAED,WAAKtQ,IAAL,GAAYA,IAAZ,CAnBG,CAqBH;;AACA,WAAKvL,OAAL,CAAaE,EAAb,CACI,CAAC,aAAD,EAAgB,iBAAhB,CADJ,EAEI;AAAA,eAAM,MAAI,CAAC8V,MAAL,EAAN;AAAA,OAFJ;AAKA;;AACA,WAAK/V,WAAL,GAAmB,IAAnB;AACH;AAED;;;;AA7GJ;AAAA;AAAA,6BAgHa;AACL,UAAI,KAAKL,EAAL,CAAQkc,cAAR,KAA2B,CAA/B,EAAkC;AAC9B,aAAKC,IAAL;AACH,OAFD,MAEO;AACH,aAAKtC,IAAL;AACH;AACJ;AAED;;;;AAxHJ;AAAA;AAAA,2BA2HW;AACH,UAAI,CAAC,KAAKxZ,WAAN,IAAqB,CAAC,KAAKa,SAAL,EAA1B,EAA4C;AACxC;AACH;;AACD,WAAKua,YAAL,CAAkB,KAAKzb,EAAvB,EAA2B,IAA3B;AAEA,WAAKoc,QAAL;AACA,WAAKzQ,IAAL,CAAU9C,KAAV,CAAgBC,OAAhB,GAA0B,OAA1B;AAEA,WAAK6S,WAAL,CAAiB,KAAK3b,EAAtB,EAA0B,IAA1B;AACH;AAED;;;;AAvIJ;AAAA;AAAA,2BA0IW;AACH,UAAI,CAAC,KAAKK,WAAN,IAAqB,CAAC,KAAKa,SAAL,EAA1B,EAA4C;AACxC;AACH;;AACD,WAAK2a,YAAL,CAAkB,KAAK7b,EAAvB,EAA2B,IAA3B;AAEA,WAAK2L,IAAL,CAAU9C,KAAV,CAAgBC,OAAhB,GAA0B,2CAA1B;AAEA,WAAKiT,WAAL,CAAiB,KAAK/b,EAAtB,EAA0B,IAA1B;AACH;AAED;;;;;AArJJ;AAAA;AAAA,+BAyJe;AACP,UAAI,CAAC,KAAKK,WAAN,IAAqB,KAAKiG,UAA1B,IAAwC,CAAC,KAAKpF,SAAL,EAA7C,EAA+D;AAC3D;AACH;;AACD,UAAIlB,EAAE,GAAG,KAAKA,EAAd;;AACA,UAAIA,EAAE,CAAClI,UAAP,EAAmB;AACf,YAAIA,UAAU,GAAGkI,EAAE,CAACC,OAAH,CAAW,YAAX,CAAjB;AACA,aAAK0L,IAAL,CAAU9C,KAAV,CAAgBwG,KAAhB,GAAwBvX,UAAU,CAACmZ,OAAX,CAAmBW,WAAnB,GAAiC,IAAzD;AACH,OAHD,MAGO;AACH,aAAKjG,IAAL,CAAU9C,KAAV,CAAgBwG,KAAhB,GAAwB,CAACrP,EAAE,CAAC+B,GAAH,GAASsa,KAAT,GACrBrc,EAAE,CAAC+B,GAAH,GAASsa,KAAT,CAAezK,WADM,GAErB5R,EAAE,CAAC+B,GAAH,GAASua,OAAT,CAAiB,CAAjB,EAAoB1K,WAFA,IAEe,IAFvC;AAGH;AACJ;AAED;;AAxKJ;AAAA;AAAA,8BAyKc;AAAA;;AACN,UAAI,CAAC,KAAKvR,WAAV,EAAuB;AACnB;AACH;;AACDxF,MAAA,sDAAS,CAAC,KAAK8Q,IAAN,CAAT;AACA,WAAKA,IAAL,GAAY,IAAZ,CALM,CAMN;;AACA,WAAKvL,OAAL,CAAaiC,GAAb,CAAiB,CAAC,iBAAD,CAAjB,EAAsC;AAAA,eAAM,MAAI,CAAC+T,MAAL,EAAN;AAAA,OAAtC;AAEA,WAAK/V,WAAL,GAAmB,KAAnB;AACH;AAnLL;;AAAA;AAAA,EAA+B,gDAA/B,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;;;;;;;AAMA,IAAakc,MAAb;AAAA;AAAA;AAAA;;AAEI;;;;AAIA,kBAAYvc,EAAZ,EAAgB;AAAA;;AAAA;;AACZ,gFAAMA,EAAN,EAAU,QAAV,GADY,CAGZ;;AACA,QAAIuC,CAAC,GAAG,MAAKpC,MAAL,CAAY3H,MAAZ,IAAsB,EAA9B;AAEA;;;;;AAIA,UAAKmd,WAAL,GAAmB,6DAAW,CAACpT,CAAC,CAACqT,aAAH,EAAkB,OAAlB,CAA9B;AAEA;;;;;AAIA,UAAK4G,OAAL,GAAe,IAAf;AAEA;;;;;AAIA,UAAKC,aAAL,GAAqB,IAArB;AAEA;;;;;AAIA,UAAKvH,KAAL,GAAa,6DAAW,CAAC3S,CAAC,CAAC0I,SAAH,EAAc,IAAd,CAAxB;AAEA;;;;;AAIA,UAAKyR,UAAL,GAAkB,4DAAU,CAACna,CAAC,CAACrM,MAAH,EAAW,EAAX,CAA5B;AAEA;;;;;AAIA,UAAKymB,eAAL,GAAuB,6DAAW,CAACpa,CAAC,CAACqa,0BAAH,EAA+B,IAA/B,CAAlC;AAEA;;;;;AAIA,UAAKC,aAAL,GAAqB,6DAAW,CAACta,CAAC,CAACua,aAAH,EAAkB,OAAlB,CAAhC;AAEA;;;;;AAIA,UAAKC,aAAL,GAAqB,6DAAW,CAACxa,CAAC,CAACya,aAAH,EAAkB,SAAlB,CAAhC;AAEA;;;;;;AAKA,UAAKC,cAAL,GAAsB,6DAAW,CAAC1a,CAAC,CAAC2a,gBAAH,EAAqB,IAArB,CAAjC;AAEA;;;;;AAIA,UAAKC,iBAAL,GAAyB,sDAAO,CAAC,MAAKF,cAAN,CAAhC;AAEA;;;;;AAIA,UAAKG,kBAAL,GAA0B,6DAAW,CAAC7a,CAAC,CAAC8a,qBAAH,EAA0B,MAA1B,CAArC;AAEA;;;;;AAIA,UAAKC,mBAAL,GAA2B,6DAAW,CAAC/a,CAAC,CAACgb,sBAAH,EAClC,UADkC,CAAtC;AAGA;;;;;;AAKA,UAAKC,cAAL,GAAsB,CAAtB;AAEA;;;;;;AAKA,UAAKC,OAAL,GAAe,CAAf;AAEA;;;;;;AAKA,UAAKC,aAAL,GAAqB,CAArB;AAEA;;;;;AAIA,UAAKC,eAAL,GAAuB,6DAAW,CAACpb,CAAC,CAACqb,kBAAH,EAAuB,GAAvB,CAAlC;AAEA;;;;;AAIA,UAAKC,eAAL,GAAuB,6DAAW,CAACtb,CAAC,CAACub,kBAAH,EAAuB,GAAvB,CAAlC;AAEA;;;;;AAIA,UAAKC,eAAL,GAAuB,6DAAW,CAACxb,CAAC,CAACyb,kBAAH,EAAuB,IAAvB,CAAlC;AAEA;;;;;AAIA,UAAKC,gBAAL,GAAwB,6DAAW,CAAC1b,CAAC,CAAC2b,mBAAH,EAAwB,IAAxB,CAAnC;AAEA;;;;;AAIA,UAAKC,eAAL,GAAuB,6DAAW,CAAC5b,CAAC,CAAC6b,kBAAH,EAC7B,CAACpe,EAAE,CAACsL,WAAJ,GAAkB,IAAlB,GACG,0CAA0C,MAAKqK,WAA/C,GACA,iCAH0B,CAAlC;AAKA;;;;;AAIA,UAAK0I,eAAL,GAAuB,6DAAW,CAAC9b,CAAC,CAAC+b,kBAAH,EAC7B,CAACte,EAAE,CAACsL,WAAJ,GAAkB,IAAlB,GACG,0CAA0C,MAAKqK,WAA/C,GACA,yCAH0B,CAAlC;AAKA;;;;;AAIA,UAAK4I,gBAAL,GAAwB,6DAAW,CAAChc,CAAC,CAACic,mBAAH,EAC9B,CAACxe,EAAE,CAACsL,WAAJ,GAAkB,IAAlB,GACG,0CAA0C,MAAKqK,WAA/C,GACA,mCAH2B,CAAnC;AAKA;;;;;AAIA,UAAK8I,eAAL,GAAuB,6DAAW,CAAClc,CAAC,CAACmc,kBAAH,EAC7B,CAAC1e,EAAE,CAACsL,WAAJ,GAAkB,IAAlB,GACG,0CAA0C,MAAKqK,WAA/C,GACA,iCAH0B,CAAlC;AAKA;;;;;AAIA,UAAKgJ,QAAL,GAAgB,6DAAW,CAACpc,CAAC,CAACqc,SAAH,EAAc,QAAd,CAA3B;AAEA;;;;;AAIA,UAAKC,MAAL,GAAc,6DAAW,CAACtc,CAAC,CAACuc,OAAH,EAAY,MAAZ,CAAzB;AAEA;;;;;AAIA,UAAKC,gBAAL,GAAwB,6DAAW,CAACxc,CAAC,CAACyc,kBAAH,EAAuB,MAAvB,CAAnC;AAEA;;;;;AAIA,UAAKC,OAAL,GAAe,8DAAY,CAAC1c,CAAC,CAAC2c,IAAH,EAAS,IAAT,CAA3B;AAEA;;;;;AAIA,UAAKC,gBAAL,GAAwB,6DAAW,CAAC5c,CAAC,CAAC6c,kBAAH,EAAuB,6CAAvB,CAAnC;AAEA;;;;;AAIA,UAAK7T,eAAL,GAAuB,6DAAW,CAAChJ,CAAC,CAACiJ,gBAAH,EAAqB,+CAArB,CAAlC;AAEA;;;;;AAIA,UAAK6T,kBAAL,GAA0B,4DAAU,CAAC9c,CAAC,CAAC+c,qBAAH,EAA0B,+CAA1B,CAApC;AAEA;;;;;AAIA,UAAKC,iBAAL,GAAyB,4DAAU,CAAChd,CAAC,CAACid,oBAAH,EAAyB,+CAAzB,CAAnC;AAEA;;;;;;AAKA,UAAKC,aAAL,GAAqB,IAArB;AACA;;;;;;AAKA,UAAKC,WAAL,GAAmB,IAAnB;AACA;;;;;;AAKA,UAAKC,WAAL,GAAmB,IAAnB;AACA;;;;;;AAKA,UAAKC,WAAL,GAAmB,IAAnB;AACA;;;;;;AAKA,UAAKC,YAAL,GAAoB,IAApB;AACA;;;;;;AAKA,UAAKC,MAAL,GAAc,IAAd;AACA;;;;;;AAKA,UAAKC,QAAL,GAAgB,IAAhB;AACA;;;;;;AAKA,UAAKC,OAAL,GAAe,IAAf;AAEA,QAAIC,QAAQ,GAAGjgB,EAAE,CAAC+S,MAAlB;AACA,QAAImN,KAAK,GAAGlgB,EAAE,CAACmgB,SAAH,CAAa,IAAb,CAAZ,CAnQY,CAoQZ;;AACA,UAAK1C,OAAL,GAAe2C,IAAI,CAACC,IAAL,CAAU,CAACH,KAAK,GAAGD,QAAT,IAAqB,MAAKvD,UAApC,CAAf;;AAEA,QAAIzf,CAAC,wDAAL;AACA;;;;;;;AAKA,UAAKS,GAAL,GAAW;AACP4iB,cADO,sBACI;AACP,eAAQrjB,CAAC,CAACkiB,gBAAF,KAAuB,6CAAxB,GACHliB,CAAC,CAACuf,OAAF,CAAUvZ,OAAV,CAAkBsd,aADf,GAEH3W,QAAQ,CAAC3M,CAAC,CAACuf,OAAF,CAAU3jB,KAAX,EAAkB,EAAlB,CAAR,GAAgC,CAFpC;AAGH,OALM;AAMP2nB,YANO,oBAME;AACL,eAAQvjB,CAAC,CAACkiB,gBAAF,KAAuB,6CAAxB,GACHvV,QAAQ,CAAC3M,CAAC,CAACuf,OAAF,CAAUvZ,OAAV,CAAkB/M,MAAnB,EAA2B,EAA3B,CAAR,GAAyC,CADtC,GAEF+G,CAAC,CAACwgB,OAAF,GAAY,CAFjB;AAGH,OAVM;AAWPgD,UAXO,kBAWA;AACH,YAAIC,SAAS,GAAGzjB,CAAC,CAACS,GAAF,CAAM4iB,QAAN,KAAmBrjB,CAAC,CAACS,GAAF,CAAM8iB,MAAN,EAAnB,GACZvjB,CAAC,CAACS,GAAF,CAAM4iB,QAAN,KAAmB,CADP,GACW,CAD3B;AAEArjB,SAAC,CAAC0jB,UAAF,CAAaD,SAAb;AACH,OAfM;AAgBPE,UAhBO,kBAgBA;AACH,YAAIC,SAAS,GAAG5jB,CAAC,CAACS,GAAF,CAAM4iB,QAAN,KAAmB,CAAnB,GACZrjB,CAAC,CAACS,GAAF,CAAM4iB,QAAN,KAAmB,CADP,GACWrjB,CAAC,CAACS,GAAF,CAAM8iB,MAAN,EAD3B;AAEAvjB,SAAC,CAAC0jB,UAAF,CAAaE,SAAb;AACH,OApBM;AAqBPC,UArBO,kBAqBA;AACH7jB,SAAC,CAAC0jB,UAAF,CAAa1jB,CAAC,CAACS,GAAF,CAAM8iB,MAAN,EAAb;AACH,OAvBM;AAwBPO,WAxBO,mBAwBC;AACJ9jB,SAAC,CAAC0jB,UAAF,CAAa,CAAb;AACH,OA1BM;AA2BPK,gBA3BO,sBA2BIpT,CA3BJ,EA2BO;AACV,YAAI,2DAAY,CAACA,CAAD,EAAI,CAAC,gDAAD,CAAJ,CAAhB,EAAkC;AAC9B,cAAI5N,EAAE,CAACihB,MAAP,EAAe;AACXjhB,cAAE,CAAC6F,MAAH;AACA5I,aAAC,CAAC0jB,UAAF,CAAa1jB,CAAC,CAACS,GAAF,CAAM4iB,QAAN,EAAb;AACH,WAHD,MAGO;AACHrjB,aAAC,CAAC0jB,UAAF;AACH;;AACD,eAAKO,IAAL;AACH;AACJ,OArCM;AAsCPC,oBAAc,EAAE,IAtCT;AAuCPC,aAAO,EAAE,IAvCF;AAwCPC,aAAO,EAAE,IAxCF;AAyCPC,aAAO,EAAE,IAzCF;AA0CPC,cAAQ,EAAE;AA1CH,KAAX;AA7QY;AAyTf;AAED;;;;;AAjUJ;AAAA;AAAA,2BAoUW;AAAA;;AACH,UAAIC,QAAJ;AACA,UAAIxhB,EAAE,GAAG,KAAKA,EAAd;AACA,UAAItC,GAAG,GAAG,KAAKA,GAAf;;AAEA,UAAI,KAAK2C,WAAT,EAAsB;AAClB;AACH;;AAED,WAAKD,OAAL,CAAauF,IAAb,CAAkB,sBAAlB,EAA0C,IAA1C,EAAgD,CAAC,qDAAM,CAAC,KAAKuP,KAAN,CAAvD,EATG,CAWH;AACA;;AACA,UAAI,KAAKiI,iBAAT,EAA4B;AACxB,YAAI,KAAKF,cAAL,CAAoB/mB,MAApB,GAA6B,CAAjC,EAAoC;AAChC,eAAKinB,iBAAL,GAAyB,KAAzB;AACH,SAFD,MAEO;AACH,eAAKT,UAAL,GAAkB,KAAKO,cAAL,CAAoB,CAApB,EAAuB,CAAvB,CAAlB;AACA,eAAKwE,iBAAL;AACH;AACJ;;AAED/jB,SAAG,CAACyjB,cAAJ,GAAqB,UAACviB,KAAD,EAAW;AAC5B,YAAIsP,GAAG,GAAGtP,KAAK,CAACO,MAAhB;;AACA,cAAI,CAACwhB,UAAL,CAAgBzS,GAAG,CAACqS,aAApB;AACH,OAHD,CAtBG,CA2BH;;;AACA,UAAI,KAAKpB,gBAAL,KAA0B,6CAA9B,EAAsC;AAClCqC,gBAAQ,GAAG,sDAAS,CAAC,6CAAD,CAApB;AACAA,gBAAQ,CAAC/lB,SAAT,GAAqB,KAAKohB,aAA1B;AACA5e,QAAA,qDAAM,CAACujB,QAAD,EAAW,QAAX,EAAqB9jB,GAAG,CAACyjB,cAAzB,CAAN;AACH,OAhCE,CAkCH;;;AACA,UAAI,KAAKhC,gBAAL,KAA0B,4CAA9B,EAAqC;AACjCqC,gBAAQ,GAAG,sDAAS,CAAC,4CAAD,EAAQ,CAAC,OAAD,EAAU,KAAK9D,aAAf,CAAR,CAApB;AACA8D,gBAAQ,CAAC/lB,SAAT,GAAqB,KAAKshB,aAA1B;AACA9e,QAAA,qDAAM,CAACujB,QAAD,EAAW,UAAX,EAAuB9jB,GAAG,CAACsjB,UAA3B,CAAN;AACH,OAvCE,CAyCH;;;AACA,UAAIU,WAAW,GAAG,sDAAS,CAAC,MAAD,CAA3B;AACA,UAAIC,WAAW,GAAG,sDAAS,CAAC,MAAD,CAA3B;AACA,UAAIC,WAAW,GAAG,sDAAS,CAAC,MAAD,CAA3B;AACA,UAAIC,YAAY,GAAG,sDAAS,CAAC,MAAD,CAA5B;;AAEA,UAAI,KAAK5C,OAAT,EAAkB;AACd;AACA,YAAI,CAAC,KAAKd,eAAV,EAA2B;AACvB,cAAI2D,OAAO,GAAG,sDAAS,CAAC,4CAAD,EACnB,CAAC,MAAD,EAAS,QAAT,CADmB,EAEnB,CAAC,OAAD,EAAU,KAAKnE,eAAf,CAFmB,EAGnB,CAAC,OAAD,EAAU,MAAV,CAHmB,CAAvB;AAKAmE,iBAAO,CAACrmB,SAAR,GAAoB,KAAKka,WAAzB;AACA1X,UAAA,qDAAM,CAAC6jB,OAAD,EAAU,OAAV,EAAmBpkB,GAAG,CAAC+iB,IAAvB,CAAN;AACAiB,qBAAW,CAACplB,WAAZ,CAAwBwlB,OAAxB;AACH,SATD,MASO;AACHJ,qBAAW,CAACla,SAAZ,GAAwB,KAAK2W,eAA7B;AACAlgB,UAAA,qDAAM,CAACyjB,WAAD,EAAc,OAAd,EAAuBhkB,GAAG,CAAC+iB,IAA3B,CAAN;AACH,SAda,CAed;;;AACA,YAAI,CAAC,KAAKpC,eAAV,EAA2B;AACvB,cAAI0D,OAAO,GAAG,sDAAS,CAAC,4CAAD,EACnB,CAAC,MAAD,EAAS,QAAT,CADmB,EAEnB,CAAC,OAAD,EAAU,KAAKlE,eAAf,CAFmB,EAGnB,CAAC,OAAD,EAAU,UAAV,CAHmB,CAAvB;AAKAkE,iBAAO,CAACtmB,SAAR,GAAoB,KAAKka,WAAzB;AACA1X,UAAA,qDAAM,CAAC8jB,OAAD,EAAU,OAAV,EAAmBrkB,GAAG,CAACkjB,IAAvB,CAAN;AACAe,qBAAW,CAACrlB,WAAZ,CAAwBylB,OAAxB;AACH,SATD,MASO;AACHJ,qBAAW,CAACna,SAAZ,GAAwB,KAAK6W,eAA7B;AACApgB,UAAA,qDAAM,CAAC0jB,WAAD,EAAc,OAAd,EAAuBjkB,GAAG,CAACkjB,IAA3B,CAAN;AACH,SA5Ba,CA6Bd;;;AACA,YAAI,CAAC,KAAKnC,eAAV,EAA2B;AACvB,cAAIuD,OAAO,GAAG,sDAAS,CAAC,4CAAD,EACnB,CAAC,MAAD,EAAS,QAAT,CADmB,EAEnB,CAAC,OAAD,EAAU,KAAKjE,eAAf,CAFmB,EAGnB,CAAC,OAAD,EAAU,MAAV,CAHmB,CAAvB;AAKAiE,iBAAO,CAACvmB,SAAR,GAAoB,KAAKka,WAAzB;AACA1X,UAAA,qDAAM,CAAC+jB,OAAD,EAAU,OAAV,EAAmBtkB,GAAG,CAACojB,IAAvB,CAAN;AACAc,qBAAW,CAACtlB,WAAZ,CAAwB0lB,OAAxB;AACH,SATD,MASO;AACHJ,qBAAW,CAACpa,SAAZ,GAAwB,KAAKiX,eAA7B;AACAxgB,UAAA,qDAAM,CAAC2jB,WAAD,EAAc,OAAd,EAAuBlkB,GAAG,CAACojB,IAA3B,CAAN;AACH,SA1Ca,CA2Cd;;;AACA,YAAI,CAAC,KAAKvC,gBAAV,EAA4B;AACxB,cAAI0D,QAAQ,GAAG,sDAAS,CAAC,4CAAD,EACpB,CAAC,MAAD,EAAS,QAAT,CADoB,EAEpB,CAAC,OAAD,EAAU,KAAKhE,gBAAf,CAFoB,EAGpB,CAAC,OAAD,EAAU,OAAV,CAHoB,CAAxB;AAKAgE,kBAAQ,CAACxmB,SAAT,GAAqB,KAAKka,WAA1B;AACA1X,UAAA,qDAAM,CAACgkB,QAAD,EAAW,OAAX,EAAoBvkB,GAAG,CAACqjB,KAAxB,CAAN;AACAc,sBAAY,CAACvlB,WAAb,CAAyB2lB,QAAzB;AACH,SATD,MASO;AACHJ,sBAAY,CAACra,SAAb,GAAyB,KAAK+W,gBAA9B;AACAtgB,UAAA,qDAAM,CAAC4jB,YAAD,EAAe,OAAf,EAAwBnkB,GAAG,CAACqjB,KAA5B,CAAN;AACH;AACJ,OAxGE,CA0GH;;;AACA,UAAInV,QAAQ,GAAG,CAAC,KAAKsJ,KAAN,GACXlV,EAAE,CAACC,OAAH,CAAW,SAAX,EAAsBsG,SAAtB,CAAgC,KAAKgF,eAArC,CADW,GAEX,gDAAG,CAAC,KAAK2J,KAAN,CAFP;AAGAtJ,cAAQ,CAACtP,WAAT,CAAqBulB,YAArB;AACAjW,cAAQ,CAACtP,WAAT,CAAqBqlB,WAArB;AAEA,UAAIO,YAAY,GAAG,sDAAS,CAAC,MAAD,CAA5B;AACAA,kBAAY,CAAC5lB,WAAb,CAAyB,uDAAU,CAAC,KAAKqiB,QAAN,CAAnC;AACAuD,kBAAY,CAACzmB,SAAb,GAAyB,KAAKsjB,gBAA9B;AACAnT,cAAQ,CAACtP,WAAT,CAAqB4lB,YAArB;AACAtW,cAAQ,CAACtP,WAAT,CAAqBklB,QAArB;AACA,UAAIW,WAAW,GAAG,sDAAS,CAAC,MAAD,CAA3B;AACAA,iBAAW,CAAC7lB,WAAZ,CAAwB,uDAAU,CAAC,KAAKuiB,MAAN,CAAlC;AACAsD,iBAAW,CAAC1mB,SAAZ,GAAwB,KAAKsjB,gBAA7B;AACAnT,cAAQ,CAACtP,WAAT,CAAqB6lB,WAArB;AACA,UAAIC,MAAM,GAAG,sDAAS,CAAC,MAAD,CAAtB;AACAA,YAAM,CAAC3mB,SAAP,GAAmB,KAAKsjB,gBAAxB;AACAqD,YAAM,CAAC9lB,WAAP,CAAmB,uDAAU,CAAC,MAAM,KAAKmhB,OAAX,GAAqB,GAAtB,CAA7B;AACA7R,cAAQ,CAACtP,WAAT,CAAqB8lB,MAArB;AACAxW,cAAQ,CAACtP,WAAT,CAAqBolB,WAArB;AACA9V,cAAQ,CAACtP,WAAT,CAAqBslB,WAArB;AAEA,WAAKlC,WAAL,GAAmBgC,WAAnB;AACA,WAAK/B,WAAL,GAAmBgC,WAAnB;AACA,WAAK/B,WAAL,GAAmBgC,WAAnB;AACA,WAAK/B,YAAL,GAAoBgC,YAApB;AACA,WAAK/B,MAAL,GAAcsC,MAAd;AACA,WAAKrC,QAAL,GAAgBmC,YAAhB;AACA,WAAKlC,OAAL,GAAemC,WAAf;AACA,WAAK3F,OAAL,GAAegF,QAAf;AAEA,WAAKa,aAAL;;AAEA,UAAI,CAACriB,EAAE,CAACkR,OAAR,EAAiB;AACblR,UAAE,CAACsiB,eAAH;AACA,aAAKD,aAAL,CAAmBriB,EAAE,CAACmB,cAAtB;AACH;;AAED,WAAKf,OAAL,CAAaE,EAAb,CAAgB,CAAC,iBAAD,CAAhB,EAAqC,oDAAK,CAAC,KAAKiiB,eAAN,EAAuB,IAAvB,CAA1C;AACA,WAAKniB,OAAL,CAAaE,EAAb,CAAgB,CAAC,aAAD,CAAhB,EAAiC,oDAAK,CAAC,KAAKkiB,iBAAN,EAAyB,IAAzB,CAAtC;AACA,WAAKpiB,OAAL,CAAaE,EAAb,CAAgB,CAAC,qBAAD,CAAhB,EACI,oDAAK,CAAC,KAAKmiB,wBAAN,EAAgC,IAAhC,CADT;AAGA;;AACA,WAAKpiB,WAAL,GAAmB,IAAnB;AAEA,WAAKD,OAAL,CAAauF,IAAb,CAAkB,qBAAlB,EAAyC,IAAzC;AACH;AAED;;;;;AAheJ;AAAA;AAAA,4BAoe+B;AAAA,UAArB+c,WAAqB,uEAAP,KAAO;AACvB,WAAKjiB,MAAL;AACA,WAAKC,IAAL;;AAEA,UAAIgiB,WAAJ,EAAiB;AACb,aAAK1iB,EAAL,CAAQ6F,MAAR;AACH;AACJ;AAED;;;;AA7eJ;AAAA;AAAA,sCAgfsB;AACd,WAAK2X,cAAL,GAAsB,CAAtB;AACA,WAAKE,aAAL,GAAqB,CAArB;AACA,WAAK2E,aAAL,CAAmB,KAAKriB,EAAL,CAAQmB,cAA3B;AACH;AAED;;;;;;AAtfJ;AAAA;AAAA,kCA2fkBwhB,SA3flB,EA2f6B;AACrB,UAAI3iB,EAAE,GAAG,KAAKA,EAAd;AACA,UAAI2L,IAAI,GAAG,CAAC,KAAKuJ,KAAN,GACPlV,EAAE,CAACC,OAAH,CAAW,SAAX,EAAsBsG,SAAtB,CAAgC,KAAKgF,eAArC,CADO,GAEP,gDAAG,CAAC,KAAK2J,KAAN,CAFP,CAFqB,CAMrB;;AACAlV,QAAE,CAACmB,cAAH,GAAoBwhB,SAAS,IAAI3iB,EAAE,CAACoB,YAAH,CAAgB,IAAhB,CAAjC,CAPqB,CASrB;;AACA,WAAKqc,OAAL,GAAe2C,IAAI,CAACC,IAAL,CAAUrgB,EAAE,CAACmB,cAAH,CAAkBjL,MAAlB,GAA2B,KAAKwmB,UAA1C,CAAf,CAVqB,CAWrB;;AACA,WAAKoD,MAAL,CAAYtY,SAAZ,GAAwB,KAAKiW,OAA7B,CAZqB,CAarB;;AACA,UAAI,KAAK0B,gBAAL,KAA0B,6CAA9B,EAAsC;AAClC,aAAK3C,OAAL,CAAahV,SAAb,GAAyB,EAAzB;AACH;;AAED,UAAI,KAAKiW,OAAL,GAAe,CAAnB,EAAsB;AAClB9R,YAAI,CAAC9C,KAAL,CAAW+Z,UAAX,GAAwB,SAAxB;;AACA,YAAI,KAAKzD,gBAAL,KAA0B,6CAA9B,EAAsC;AAClC,eAAK,IAAI0D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKpF,OAAzB,EAAkCoF,CAAC,EAAnC,EAAuC;AACnC,gBAAIxmB,GAAG,GAAG,sDAAS,CAACwmB,CAAC,GAAG,CAAL,EAAQA,CAAC,GAAG,KAAKnG,UAAjB,EAA6B,KAA7B,CAAnB;AACA,iBAAKF,OAAL,CAAavZ,OAAb,CAAqB4f,CAArB,IAA0BxmB,GAA1B;AACH;AACJ,SALD,MAKO;AACH;AACA,eAAKmgB,OAAL,CAAa3jB,KAAb,GAAqB,KAAK6kB,aAA1B;AACH;AAEJ,OAZD,MAYO;AACH;AACA/R,YAAI,CAAC9C,KAAL,CAAW+Z,UAAX,GAAwB,QAAxB;AACH;;AACD,WAAKE,WAAL,CAAiB9iB,EAAE,CAACmB,cAApB;AACH;AAED;;;;;AAhiBJ;AAAA;AAAA,gCAoiBgBwhB,SApiBhB,EAoiB2B;AACnB,UAAI3iB,EAAE,GAAG,KAAKA,EAAd;AACA,UAAI8B,IAAI,GAAG9B,EAAE,CAAC+B,GAAH,GAASD,IAApB;AACA,UAAI0b,cAAc,GAAG5T,QAAQ,CAAC,KAAK4T,cAAN,EAAsB,EAAtB,CAA7B;AACA,UAAIuF,YAAY,GAAGvF,cAAc,GAAG5T,QAAQ,CAAC,KAAK8S,UAAN,EAAkB,EAAlB,CAA5C,CAJmB,CAMnB;;AACA,UAAIiG,SAAJ,EAAe;AACX3iB,UAAE,CAACmB,cAAH,GAAoBwhB,SAApB;AACH,OATkB,CAWnB;;;AACA,WAAK,IAAIK,CAAC,GAAG,CAAR,EAAWC,GAAG,GAAGjjB,EAAE,CAACkc,cAAH,CAAkB,IAAlB,CAAtB,EAA+C8G,CAAC,GAAGC,GAAnD,EAAwDD,CAAC,EAAzD,EAA6D;AACzD,YAAIE,WAAW,GAAGljB,EAAE,CAACmB,cAAH,CAAkB6hB,CAAlB,CAAlB;AACA,YAAIG,CAAC,GAAGrhB,IAAI,CAACohB,WAAD,CAAZ;AACA,YAAI5e,UAAU,GAAG6e,CAAC,CAACpd,YAAF,CAAe,UAAf,CAAjB;AACA,YAAIqd,YAAY,GAAG,KAAnB;;AAEA,YAAIJ,CAAC,IAAIxF,cAAL,IAAuBwF,CAAC,GAAGD,YAA/B,EAA6C;AACzC,cAAI,qDAAM,CAACze,UAAD,CAAN,IAAsBvO,OAAO,CAACuO,UAAU,KAAK,MAAhB,CAAjC,EAA0D;AACtD6e,aAAC,CAACta,KAAF,CAAQC,OAAR,GAAkB,EAAlB;AACAsa,wBAAY,GAAG,IAAf;AACH;AACJ,SALD,MAKO;AACHD,WAAC,CAACta,KAAF,CAAQC,OAAR,GAAkB,2CAAlB;AACH;;AACD,aAAK1I,OAAL,CAAauF,IAAb,CAAkB,WAAlB,EAA+B3F,EAA/B,EAAmCkjB,WAAnC,EAAgDF,CAAhD,EAAmDI,YAAnD;AACH,OA3BkB,CA6BnB;;;AACA,WAAKhjB,OAAL,CAAauF,IAAb,CAAkB,iBAAlB,EAAqC3F,EAArC,EAAyC,IAAzC;AACH;AAED;;;;;AArkBJ;AAAA;AAAA,8BAykBc;AACN,aAAO,KAAK0d,aAAZ;AACH;AAED;;;;;;AA7kBJ;AAAA;AAAA,4BAklBY2F,GAllBZ,EAklBiB;AACT,UAAIrjB,EAAE,GAAG,KAAKA,EAAd;;AACA,UAAI,CAACA,EAAE,CAACsjB,aAAH,EAAD,IAAuB,CAAC,KAAKpiB,SAAL,EAA5B,EAA8C;AAC1C;AACH;;AACD,UAAIqiB,MAAM,GAAG,KAAK7lB,GAAlB;AAAA,UACI8lB,OAAO,WAAUH,GAAV,CADX;;AAEA,UAAIG,OAAO,KAAK,QAAhB,EAA0B;AACtB,gBAAQH,GAAG,CAAChV,WAAJ,EAAR;AACI,eAAK,MAAL;AACIkV,kBAAM,CAAC9C,IAAP;AACA;;AACJ,eAAK,UAAL;AACI8C,kBAAM,CAAC3C,IAAP;AACA;;AACJ,eAAK,MAAL;AACI2C,kBAAM,CAACzC,IAAP;AACA;;AACJ,eAAK,OAAL;AACIyC,kBAAM,CAACxC,KAAP;AACA;;AACJ;AACIwC,kBAAM,CAAC9C,IAAP;AACA;AAfR;AAiBH,OAlBD,MAmBK,IAAI+C,OAAO,KAAK,QAAhB,EAA0B;AAC3B,aAAK7C,UAAL,CAAgB0C,GAAG,GAAG,CAAtB;AACH;AACJ;AAED;;;;AAjnBJ;AAAA;AAAA,wCAonBwB;AAAA;;AAChB,UAAIrjB,EAAE,GAAG,KAAKA,EAAd;AACA,UAAItC,GAAG,GAAG,KAAKA,GAAf;;AAEA,UAAI,KAAK+e,aAAL,IAAsB,CAAC,KAAKQ,cAAhC,EAAgD;AAC5C;AACH;;AAEDvf,SAAG,CAAC+lB,gBAAJ,GAAuB,UAACC,EAAD,EAAQ;AAC3B,cAAI,CAACC,sBAAL;;AACAD,UAAE,CAACvkB,MAAH,CAAU+hB,IAAV;AACH,OAHD;;AAKA,UAAI0C,IAAI,GAAG,sDAAS,CAAC,6CAAD,CAApB;AACAA,UAAI,CAACnoB,SAAL,GAAiB,KAAK2hB,kBAAtB;AACA,UAAIyG,QAAQ,GAAG,KAAK5G,cAAL,CAAoB,CAApB,CAAf;AAAA,UACI6G,QAAQ,GAAG,KAAK7G,cAAL,CAAoB,CAApB,CADf;AAEA,UAAI8G,QAAQ,GAAG,sDAAS,CAAC,MAAD,CAAxB;AACAA,cAAQ,CAACtoB,SAAT,GAAqB,KAAK6hB,mBAA1B,CAlBgB,CAoBhB;;AACA,UAAI1R,QAAQ,GAAG,CAAC,KAAK+Q,eAAN,GACX3c,EAAE,CAACC,OAAH,CAAW,SAAX,EAAsBsG,SAAtB,CAAgC,8CAAhC,CADW,GAEX,gDAAG,CAAC,KAAKoW,eAAN,CAFP;AAGAoH,cAAQ,CAACznB,WAAT,CAAqB,uDAAU,CAACunB,QAAD,CAA/B;AAEA,UAAInsB,IAAI,GAAGsI,EAAE,CAACC,OAAH,CAAW,MAAX,CAAX;;AACA,UAAIvI,IAAI,IAAIA,IAAI,CAACoe,GAAjB,EAAsB;AAClBpe,YAAI,CAACoe,GAAL,CAAShb,UAAT,CAAoByW,YAApB,CAAiCwS,QAAjC,EAA2CrsB,IAAI,CAACoe,GAAhD;AACApe,YAAI,CAACoe,GAAL,CAAShb,UAAT,CAAoByW,YAApB,CAAiCqS,IAAjC,EAAuClsB,IAAI,CAACoe,GAA5C;AACH,OAHD,MAGO;AACHlK,gBAAQ,CAACtP,WAAT,CAAqBynB,QAArB;AACAnY,gBAAQ,CAACtP,WAAT,CAAqBsnB,IAArB;AACH;;AAED,WAAK,IAAIT,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGW,QAAQ,CAAC5tB,MAA7B,EAAqCitB,CAAC,EAAtC,EAA0C;AACtC,YAAIa,OAAO,GAAG,IAAIC,MAAJ,CAAWH,QAAQ,CAACX,CAAD,CAAnB,EAAwBW,QAAQ,CAACX,CAAD,CAAhC,EAAqC,KAArC,EAA4C,KAA5C,CAAd;AACAS,YAAI,CAAC3gB,OAAL,CAAakgB,CAAb,IAAkBa,OAAlB;AACH;;AACD/lB,MAAA,qDAAM,CAAC2lB,IAAD,EAAO,QAAP,EAAiBlmB,GAAG,CAAC+lB,gBAArB,CAAN;AACA,WAAKhE,aAAL,GAAqBsE,QAArB;AACA,WAAKtH,aAAL,GAAqBmH,IAArB;AACH;AAED;;;;AAhqBJ;AAAA;AAAA,2CAmqB2B;AACnB,UAAI5jB,EAAE,GAAG,KAAKA,EAAd;;AACA,UAAI,CAACA,EAAE,CAACsjB,aAAH,EAAD,IAAuB,CAAC,KAAK7G,aAA7B,IACA,CAAC,KAAKQ,cADV,EAC0B;AACtB;AACH;;AACD,UAAI,KAAKR,aAAT,EAAwB;AACpB5hB,QAAA,sDAAS,CAAC,KAAK4hB,aAAN,CAAT;AACH;;AACD,UAAI,KAAKgD,aAAT,EAAwB;AACpB5kB,QAAA,sDAAS,CAAC,KAAK4kB,aAAN,CAAT;AACH;;AACD,WAAKhD,aAAL,GAAqB,IAArB;AACA,WAAKgD,aAAL,GAAqB,IAArB;AACH;AAED;;;;;AAnrBJ;AAAA;AAAA,+BAurBeyE,KAvrBf,EAurBsB;AACd,UAAIlkB,EAAE,GAAG,KAAKA,EAAd;;AAEA,UAAI,CAAC,KAAKkB,SAAL,EAAL,EAAuB;AACnB;AACH;;AAED,WAAKd,OAAL,CAAauF,IAAb,CAAkB,oBAAlB,EAAwC3F,EAAxC,EAA6CkkB,KAAK,GAAG,CAArD;;AAEA,UAAIA,KAAK,KAAK,IAAd,EAAoB;AAChBA,aAAK,GAAG,KAAK/E,gBAAL,KAA0B,6CAA1B,GACJ,KAAK3C,OAAL,CAAavZ,OAAb,CAAqBsd,aADjB,GACiC,KAAK/D,OAAL,CAAa3jB,KAAb,GAAqB,CAD9D;AAEH;;AACD,UAAIqrB,KAAK,IAAI,CAAT,IAAcA,KAAK,IAAK,KAAKzG,OAAL,GAAe,CAA3C,EAA+C;AAC3C,aAAK4B,kBAAL,CAAwB,IAAxB,EAA+B6E,KAAK,GAAG,CAAvC;AAEA,aAAKxG,aAAL,GAAqB9T,QAAQ,CAACsa,KAAD,EAAQ,EAAR,CAAR,GAAsB,CAA3C;;AACA,YAAI,KAAK/E,gBAAL,KAA0B,6CAA9B,EAAsC;AAClC,eAAK3C,OAAL,CAAavZ,OAAb,CAAqBihB,KAArB,EAA4BjV,QAA5B,GAAuC,IAAvC;AACH,SAFD,MAEO;AACH,eAAKuN,OAAL,CAAa3jB,KAAb,GAAqB,KAAK6kB,aAA1B;AACH;;AAED,aAAKF,cAAL,GAAuB,KAAK2B,gBAAL,KAA0B,6CAA3B,GAClB,KAAK3C,OAAL,CAAa3jB,KADK,GACIqrB,KAAK,GAAG,KAAKxH,UADvC;AAGA,aAAKoG,WAAL;AAEA,aAAKvD,iBAAL,CAAuB,IAAvB,EAA8B2E,KAAK,GAAG,CAAtC;AACH;;AAED,WAAK9jB,OAAL,CAAauF,IAAb,CAAkB,mBAAlB,EAAuC3F,EAAvC,EAA4CkkB,KAAK,GAAG,CAApD;AACH;AAED;;;;;AAztBJ;AAAA;AAAA,yCA6tByBtuB,GA7tBzB,EA6tB8B;AACtB,UAAI,CAAC,KAAKsL,SAAL,EAAD,IAAqBW,KAAK,CAACjM,GAAD,CAA9B,EAAqC;AACjC;AACH;;AAED,WAAK6mB,aAAL,CAAmB5jB,KAAnB,GAA2BjD,GAA3B;AACA,WAAK+tB,sBAAL;AACH;AAED;;;;AAtuBJ;AAAA;AAAA,6CAyuB6B;AACrB,UAAI3jB,EAAE,GAAG,KAAKA,EAAd;;AAEA,UAAI,CAAC,KAAKkB,SAAL,EAAD,IAAqBlB,EAAE,CAACkc,cAAH,OAAwB,CAAjD,EAAoD;AAChD;AACH;;AALoB,UAQF0H,IARE,GASjB,IATiB,CAQjBnH,aARiB;AAAA,UAQI0C,gBARJ,GASjB,IATiB,CAQIA,gBARJ;AAAA,UAQsB3C,OARtB,GASjB,IATiB,CAQsBA,OARtB;AAAA,UAQ+Bpc,OAR/B,GASjB,IATiB,CAQ+BA,OAR/B;AAWrBA,aAAO,CAACuF,IAAR,CAAa,2BAAb,EAA0C3F,EAA1C;AAEA,UAAIsgB,QAAQ,GAAGsD,IAAI,CAACrD,aAApB;AACA,UAAI4D,gBAAgB,GAAIhF,gBAAgB,KAAK,6CAAtB,GACnB3C,OAAO,CAAC+D,aADW,GACK3W,QAAQ,CAAC4S,OAAO,CAAC3jB,KAAR,GAAgB,CAAjB,EAAoB,EAApB,CADpC;AAEA,WAAK6jB,UAAL,GAAkB9S,QAAQ,CAACga,IAAI,CAAC3gB,OAAL,CAAaqd,QAAb,EAAuBznB,KAAxB,EAA+B,EAA/B,CAA1B;AACA,WAAK2kB,cAAL,GAAsB,KAAKd,UAAL,GAAkByH,gBAAxC;;AAEA,UAAI,CAACtiB,KAAK,CAAC,KAAK6a,UAAN,CAAV,EAA6B;AACzB,YAAI,KAAKc,cAAL,IAAuBxd,EAAE,CAACokB,gBAA9B,EAAgD;AAC5C,eAAK5G,cAAL,GAAuBxd,EAAE,CAACokB,gBAAH,GAAsB,KAAK1H,UAAlD;AACH;;AACD,aAAK2F,aAAL;;AAEA,YAAIlD,gBAAgB,KAAK,6CAAzB,EAAiC;AAC7B,cAAIkF,MAAM,GAAI7H,OAAO,CAACvZ,OAAR,CAAgB/M,MAAhB,GAAyB,CAAzB,IAA8BiuB,gBAA/B,GACR3H,OAAO,CAACvZ,OAAR,CAAgB/M,MAAhB,GAAyB,CADjB,GAETiuB,gBAFJ;AAGA3H,iBAAO,CAACvZ,OAAR,CAAgBohB,MAAhB,EAAwBpV,QAAxB,GAAmC,IAAnC;AACH;AACJ;;AAED7O,aAAO,CAACuF,IAAR,CAAa,0BAAb,EAAyC3F,EAAzC,EAA6C,KAAK0c,UAAlD;AACH;AAED;;;;AA7wBJ;AAAA;AAAA,gCAgxBgB;AACR,UAAI1c,EAAE,GAAG,KAAKA,EAAd;;AACA,UAAI,CAAC,KAAKkB,SAAL,EAAL,EAAuB;AACnB;AACH;;AACD,WAAKd,OAAL,CAAauF,IAAb,CAAkB,mBAAlB,EAAuC3F,EAAvC;AACA,UAAIskB,IAAI,GAAGtkB,EAAE,CAACC,OAAH,CAAW,OAAX,EAAoBskB,SAApB,EAAX;;AACA,UAAID,IAAI,KAAK,EAAb,EAAiB;AACb,aAAK3D,UAAL,CAAiB2D,IAAI,GAAG,CAAxB;AACH;;AACD,WAAKlkB,OAAL,CAAauF,IAAb,CAAkB,kBAAlB,EAAsC3F,EAAtC,EAA0CskB,IAA1C;AACH;AAED;;;;AA7xBJ;AAAA;AAAA,sCAgyBsB;AACd,UAAItkB,EAAE,GAAG,KAAKA,EAAd;;AACA,UAAI,CAAC,KAAKkB,SAAL,EAAL,EAAuB;AACnB;AACH;;AACD,WAAKd,OAAL,CAAauF,IAAb,CAAkB,0BAAlB,EAA8C3F,EAA9C;AACA,UAAIwkB,UAAU,GAAGxkB,EAAE,CAACC,OAAH,CAAW,OAAX,EAAoBwkB,aAApB,EAAjB;;AAEA,UAAID,UAAU,KAAK,EAAnB,EAAuB;AACnB,aAAK/H,aAAL,CAAmBxZ,OAAnB,CAA2BuhB,UAA3B,EAAuCvV,QAAvC,GAAkD,IAAlD;AACA,aAAKyV,oBAAL;AACH;;AACD,WAAKtkB,OAAL,CAAauF,IAAb,CAAkB,yBAAlB,EAA6C3F,EAA7C,EAAiDwkB,UAAjD;AACH;AAED;;AA/yBJ;AAAA;AAAA,sCAgzBsBxkB,EAhzBtB,EAgzB0B2kB,UAhzB1B,EAgzBsC;AAC9B,WAAKC,OAAL,CAAaD,UAAb;AACH;AAED;;AApzBJ;AAAA;AAAA,6CAqzB6B3kB,EArzB7B,EAqzBiC0c,UArzBjC,EAqzB6C;AACrC,WAAKgI,oBAAL,CAA0BhI,UAA1B;AACH;AAED;;;;AAzzBJ;AAAA;AAAA,8BA4zBc;AACN,UAAI,CAAC,KAAKrc,WAAV,EAAuB;AACnB;AACH;;AAED,UAAI3C,GAAG,GAAG,KAAKA,GAAf;;AAEA,UAAI,KAAK8e,OAAT,EAAkB;AACd,YAAI,KAAK2C,gBAAL,KAA0B,6CAA9B,EAAsC;AAClC3gB,UAAA,wDAAS,CAAC,KAAKge,OAAN,EAAe,QAAf,EAAyB9e,GAAG,CAACyjB,cAA7B,CAAT;AACH,SAFD,MAGK,IAAI,KAAKhC,gBAAL,KAA0B,4CAA9B,EAAqC;AACtC3gB,UAAA,wDAAS,CAAC,KAAKge,OAAN,EAAe,UAAf,EAA2B9e,GAAG,CAACsjB,UAA/B,CAAT;AACH;;AACDnmB,QAAA,sDAAS,CAAC,KAAK2hB,OAAN,CAAT;AACH;;AAED,UAAI,KAAKkD,WAAT,EAAsB;AAClBlhB,QAAA,wDAAS,CAAC,KAAKkhB,WAAN,EAAmB,OAAnB,EAA4BhiB,GAAG,CAAC+iB,IAAhC,CAAT;AACA5lB,QAAA,sDAAS,CAAC,KAAK6kB,WAAN,CAAT;AACA,aAAKA,WAAL,GAAmB,IAAnB;AACH;;AAED,UAAI,KAAKC,WAAT,EAAsB;AAClBnhB,QAAA,wDAAS,CAAC,KAAKmhB,WAAN,EAAmB,OAAnB,EAA4BjiB,GAAG,CAACkjB,IAAhC,CAAT;AACA/lB,QAAA,sDAAS,CAAC,KAAK8kB,WAAN,CAAT;AACA,aAAKA,WAAL,GAAmB,IAAnB;AACH;;AAED,UAAI,KAAKC,WAAT,EAAsB;AAClBphB,QAAA,wDAAS,CAAC,KAAKohB,WAAN,EAAmB,OAAnB,EAA4BliB,GAAG,CAACojB,IAAhC,CAAT;AACAjmB,QAAA,sDAAS,CAAC,KAAK+kB,WAAN,CAAT;AACA,aAAKA,WAAL,GAAmB,IAAnB;AACH;;AAED,UAAI,KAAKC,YAAT,EAAuB;AACnBrhB,QAAA,wDAAS,CAAC,KAAKqhB,YAAN,EAAoB,OAApB,EAA6BniB,GAAG,CAACqjB,KAAjC,CAAT;AACAlmB,QAAA,sDAAS,CAAC,KAAKglB,YAAN,CAAT;AACA,aAAKA,YAAL,GAAoB,IAApB;AACH;;AAED,UAAI,KAAKE,QAAT,EAAmB;AACfllB,QAAA,sDAAS,CAAC,KAAKklB,QAAN,CAAT;AACA,aAAKA,QAAL,GAAgB,IAAhB;AACH;;AAED,UAAI,KAAKC,OAAT,EAAkB;AACdnlB,QAAA,sDAAS,CAAC,KAAKmlB,OAAN,CAAT;AACA,aAAKA,OAAL,GAAe,IAAf;AACH;;AAED,UAAI,KAAKF,MAAT,EAAiB;AACbjlB,QAAA,sDAAS,CAAC,KAAKilB,MAAN,CAAT;AACA,aAAKA,MAAL,GAAc,IAAd;AACH;;AAED,UAAI,KAAK3C,iBAAT,EAA4B;AACxB,aAAK0H,oBAAL;AACH;;AAED,WAAKzkB,OAAL,CAAaiC,GAAb,CAAiB,CAAC,iBAAD,CAAjB,EACI,oDAAK,CAAC,KAAKkgB,eAAN,EAAuB,IAAvB,CADT;AAEA,WAAKniB,OAAL,CAAaiC,GAAb,CAAiB,CAAC,aAAD,CAAjB,EAAkC,oDAAK,CAAC,KAAKmgB,iBAAN,EAAyB,IAAzB,CAAvC;AACA,WAAKpiB,OAAL,CAAaiC,GAAb,CAAiB,CAAC,qBAAD,CAAjB,EACI,oDAAK,CAAC,KAAKogB,wBAAN,EAAgC,IAAhC,CADT;AAGA,WAAKjG,OAAL,GAAe,IAAf;AACA,WAAKiB,OAAL,GAAe,CAAf;AAEA,WAAKpd,WAAL,GAAmB,KAAnB;AACH;AAl4BL;;AAAA;AAAA,EAA4B,gDAA5B,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;AAMA,IAAaykB,WAAb;AAAA;AAAA;AAAA;;AAEI;;;;AAIA,uBAAY9kB,EAAZ,EAAgB;AAAA;;AAAA;;AACZ,qFAAMA,EAAN,EAAU,cAAV,GADY,CAGZ;;AACA,QAAIuC,CAAC,GAAG,MAAKpC,MAAL,CAAY4kB,aAAZ,IAA6B,EAArC;AAEA;;;;;AAIA,UAAKC,gBAAL,GAAwB,8DAAY,CAACziB,CAAC,CAAC0iB,kBAAH,EAAuB,IAAvB,CAApC;AAEA;;;;;AAIA,UAAKC,QAAL,GAAgB,6DAAW,CAAC3iB,CAAC,CAAC4iB,KAAH,EAAUnlB,EAAE,CAAColB,UAAH,GAAgB,gBAA1B,CAA3B;AAEA;;;;;AAIA,UAAKC,cAAL,GAAsB,6DAAW,CAAC9iB,CAAC,CAAC+iB,YAAH,EAC7BtlB,EAAE,CAAColB,UAAH,GAAgB,sBADa,CAAjC;AAGA;;;;;AAIA,UAAKG,QAAL,GAAgB,6DAAW,CAAChjB,CAAC,CAACijB,UAAH,EACvB,eAAe,MAAKN,QAApB,GAA+B,0BADR,CAA3B;AAGA;;;;;AAIA,UAAKO,mBAAL,GAA2B,6DAAW,CAACljB,CAAC,CAACmjB,qBAAH,EAClC,kBADkC,CAAtC;AAGA;;;;;AAIA,UAAK9gB,iBAAL,GAAyB,6DAAW,CAACrC,CAAC,CAACojB,aAAH,EAAkB,aAAlB,CAApC;AAEA;;;;;;AAKA,UAAKC,iBAAL,GAAyB,8DAAY,CAACrjB,CAAC,CAACsjB,mBAAH,EAAwB,IAAxB,CAArC;AAEA;;;;;AAIA,UAAKC,YAAL,GAAoB,4DAAU,CAACvjB,CAAC,CAACwjB,2BAAH,EAAgC,+CAAhC,CAA9B;AAEA;;;;;AAIA,UAAKC,WAAL,GAAmB,4DAAU,CAACzjB,CAAC,CAAC0jB,0BAAH,EAA+B,+CAA/B,CAA7B;AAEA;;;;;AAIA,UAAKC,aAAL,GAAqB,4DAAU,CAAC3jB,CAAC,CAAC4jB,4BAAH,EAC3B,+CAD2B,CAA/B;AAGA;;;;;AAIA,UAAKC,YAAL,GAAoB,4DAAU,CAAC7jB,CAAC,CAAC8jB,2BAAH,EAAgC,+CAAhC,CAA9B;AAEA;;;;;;AAKA,UAAKC,QAAL,GAAgB,EAAhB;AAEA;;;;;;AAKA,UAAKC,QAAL,GAAgB,EAAhB;AAEA;;;;;;AAKA,UAAKC,YAAL,GAAoB,IAApB;AAEA;;;;;;AAKA,UAAKC,OAAL,GAAe,6DAAW,CAAC,MAAKD,YAAN,EAAoB,EAApB,CAA1B;AAEA;;;;;;AAKA,UAAKE,OAAL,GAAe,QAAf;AAEA;;;;;;AAKA,UAAKtiB,eAAL,GAAuB,CAAC,CAAxB;AArHY;AAsHf;AAED;;;;;;AA9HJ;AAAA;AAAA,4BAkIY1G,GAlIZ,EAkIiB;AACT,UAAIX,GAAG,GAAG,wDAAS,CAACW,GAAD,CAAT,CAAe5C,UAAzB;AACA,UAAIkI,QAAQ,GAAG4G,QAAQ,CAAC7M,GAAG,CAACgJ,YAAJ,CAAiB,IAAjB,CAAD,EAAyB,EAAzB,CAAvB;AAEA,WAAK4gB,QAAL,CAAc3jB,QAAd;AACA,WAAKoT,MAAL,CAAYpT,QAAZ;;AAEA,UAAI,KAAK4iB,iBAAT,EAA4B;AACxB,YAAIja,IAAI,GAAG,KAAK8a,OAAL,CAAazjB,QAAb,CAAX;AAAA,YACIiY,MAAM,GAAG,KAAKjb,EAAL,CAAQ+a,gBAAR,CAAyB/X,QAAzB,CADb;AAAA,YAEI4jB,WAAW,GAAG3L,MAAM,CAACrJ,WAAP,GAAqB,IAFvC;AAGAjG,YAAI,CAAC9C,KAAL,CAAWwG,KAAX,GAAmBzF,QAAQ,CAACgd,WAAD,EAAc,EAAd,CAAR,GAA4B,IAA/C;AACH;;AACD7nB,MAAA,wDAAS,CAACrB,GAAD,CAAT;AACAiB,MAAA,sDAAO,CAACjB,GAAD,CAAP;AACH;AAED;;;;;AAnJJ;AAAA;AAAA,8BAuJcA,GAvJd,EAuJmB;AACX,UAAI,KAAK0G,eAAL,KAAyB,CAAC,CAA9B,EAAiC;AAC7B;AACH;;AACD,UAAI+R,SAAS,GAAG,wDAAS,CAACzY,GAAD,CAAzB;AACA,UAAImpB,SAAS,GAAG,KAAKJ,OAAL,CAAa,KAAKriB,eAAlB,CAAhB;AACA,UAAI0iB,IAAI,GAAG,KAAKP,QAAL,CAAc,KAAKniB,eAAnB,CAAX;;AAEA,UAAI0iB,IAAI,KAAK3Q,SAAb,EAAwB;AACpB;AACH;;AAED,aAAOA,SAAS,IAAIA,SAAS,KAAK0Q,SAAlC,EAA6C;AACzC1Q,iBAAS,GAAGA,SAAS,CAACrb,UAAtB;AACH;;AAED,UAAIqb,SAAS,KAAK0Q,SAAlB,EAA6B;AACzB,aAAKE,KAAL,CAAW,KAAK3iB,eAAhB;AACH;;AAED;AACH;AAED;;;;AA9KJ;AAAA;AAAA,2BAiLW;AAAA;;AACH,UAAI,KAAK/D,WAAT,EAAsB;AAClB;AACH;;AAED,UAAIL,EAAE,GAAG,KAAKA,EAAd,CALG,CAOH;;AACAA,QAAE,CAACyG,cAAH,GAAoB,CAAC,EAAD,CAApB,CARG,CAUH;;AACAzG,QAAE,CAACqS,eAAH,GAAqB,CAArB,CAXG,CAaH;AACA;AACA;;AACA,UAAIrS,EAAE,CAACgT,UAAH,IAAiB,CAAjB,IAAsBnR,KAAK,CAAC7B,EAAE,CAACG,MAAH,GAAY6P,iBAAb,CAA/B,EAAgE;AAC5DhQ,UAAE,CAACgT,UAAH,GAAgB,CAAhB;AACH,OAlBE,CAoBH;AACA;AACA;;;AACA,UAAIhT,EAAE,CAAClI,UAAP,EAAmB;AACfkI,UAAE,CAACgT,UAAH;AACA,aAAKgU,UAAL;AACH,OA1BE,CA4BH;;;AACA,WAAK5mB,OAAL,CAAaE,EAAb,CAAgB,CAAC,kBAAD,CAAhB,EAAsC;AAAA,eAAM,MAAI,CAAC2mB,aAAL,EAAN;AAAA,OAAtC;AACA,WAAK7mB,OAAL,CAAaE,EAAb,CAAgB,CAAC,iBAAD,CAAhB,EAAqC;AAAA,eAAM,MAAI,CAACqmB,QAAL,EAAN;AAAA,OAArC;AACA,WAAKvmB,OAAL,CAAaE,EAAb,CAAgB,CAAC,gBAAD,CAAhB,EACI,UAACN,EAAD,EAAKknB,SAAL;AAAA,eAAmB,MAAI,CAACC,WAAL,CAAiBD,SAAjB,EAA4B,IAA5B,CAAnB;AAAA,OADJ;AAEA,WAAK9mB,OAAL,CAAaE,EAAb,CAAgB,CAAC,sBAAD,CAAhB,EAA0C;AAAA,eAAM,MAAI,CAAC0mB,UAAL,EAAN;AAAA,OAA1C;AACA,WAAK5mB,OAAL,CAAaE,EAAb,CAAgB,CAAC,oBAAD,CAAhB,EACI,UAACN,EAAD,EAAKgD,QAAL;AAAA,eAAkB,MAAI,CAACiB,KAAL,CAAWjB,QAAX,CAAlB;AAAA,OADJ;AAGA;;AACA,WAAK3C,WAAL,GAAmB,IAAnB;AACH;AAED;;;;AA1NJ;AAAA;AAAA,4BA6NY;AACJ,WAAKI,MAAL;AACA,WAAKC,IAAL;AACA,WAAKsmB,UAAL;AACA,WAAKI,QAAL;AACH;AAED;;;;AApOJ;AAAA;AAAA,iCAuOiB;AAAA;;AACT,UAAIpnB,EAAE,GAAG,KAAKA,EAAd,CADS,CAGT;AACA;;AACAA,QAAE,CAACgT,UAAH;AAEAhT,QAAE,CAACkT,OAAH,CACI,UAACld,CAAD,EAAO;AACH,YAAI8wB,IAAI,GAAG,sDAAS,CAAC,MAAD,EAAS,CAAC,IAAD,EAAO9wB,CAAP,CAAT,CAApB;AACA8wB,YAAI,CAACtf,SAAL,GAAiB,MAAI,CAAC+d,QAAtB;AACA,YAAItK,MAAM,GAAGjb,EAAE,CAAC+a,gBAAH,CAAoB/kB,CAApB,CAAb;AACAilB,cAAM,CAAC3e,WAAP,CAAmBwqB,IAAnB;AACA7oB,QAAA,qDAAM,CAAC6oB,IAAD,EAAO,OAAP,EAAgB,UAACppB,GAAD;AAAA,iBAAS,MAAI,CAACoO,OAAL,CAAapO,GAAb,CAAT;AAAA,SAAhB,CAAN;AACA,cAAI,CAAC4oB,QAAL,CAActwB,CAAd,IAAmB8wB,IAAnB;AACA,cAAI,CAACP,QAAL,CAAcvwB,CAAd,IAAmB8wB,IAAI,CAAC9a,UAAxB;AACH,OATL,EAUI;AACA,gBAAChW,CAAD;AAAA,eAAOgK,EAAE,CAACiO,aAAH,CAAiBjY,CAAjB,MAAwB,2CAA/B;AAAA,OAXJ;AAaH;AAED;;;;AA7PJ;AAAA;AAAA,+BAgQe;AACP,WAAK,IAAIA,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKwwB,YAAL,CAAkBtwB,MAAtC,EAA8CF,CAAC,EAA/C,EAAmD;AAC/C,aAAKiO,KAAL,CAAWjO,CAAX,EAAc,KAAKwwB,YAAL,CAAkBxwB,CAAlB,CAAd;AACH;AACJ;AAED;;;;;;AAtQJ;AAAA;AAAA,0BA2QUgN,QA3QV,EA2QoBiD,GA3QpB,EA2QyB;AACjB,UAAIjG,EAAE,GAAG,KAAKA,EAAd;AACA,UAAIqnB,MAAM,aAAM,KAAKX,OAAX,SAAqB1mB,EAAE,CAACxD,EAAxB,cAA8BwG,QAA9B,CAAV;AACA,UAAIskB,WAAW,GAAG,sDAAS,CAAC,KAAD,EAAQ,CAAC,OAAD,EAAU,KAAK7B,mBAAf,CAAR,CAA3B;AACA,UAAI9Z,IAAI,GAAG1F,GAAG,IACV,sDAAS,CAAC,KAAD,EAAQ,CAAC,IAAD,EAAOohB,MAAP,CAAR,EAAwB,CAAC,OAAD,EAAU,KAAKziB,iBAAf,CAAxB,CADb;AAEA5E,QAAE,CAACyG,cAAH,CAAkBzD,QAAlB,IAA8B2I,IAAI,CAACnP,EAAnC;AACA8qB,iBAAW,CAAChrB,WAAZ,CAAwBqP,IAAxB;AAEA,UAAIsP,MAAM,GAAGjb,EAAE,CAAC+a,gBAAH,CAAoB/X,QAApB,CAAb;AACAiY,YAAM,CAAC1J,YAAP,CAAoB+V,WAApB,EAAiCrM,MAAM,CAACjP,UAAxC;AACA/N,MAAA,qDAAM,CAAC0N,IAAD,EAAO,OAAP,EAAgB,UAACjO,GAAD;AAAA,eAAS,sDAAO,CAACA,GAAD,CAAhB;AAAA,OAAhB,CAAN;AACA,WAAK+oB,OAAL,CAAazjB,QAAb,IAAyB2I,IAAzB;AACH;AAED;;;;;AA1RJ;AAAA;AAAA,2BA8RW3I,QA9RX,EA8RqB;AACb,UAAI,CAAC,KAAKukB,MAAL,CAAYvkB,QAAZ,CAAL,EAA4B;AACxB,aAAKwkB,IAAL,CAAUxkB,QAAV;AACH,OAFD,MAEO;AACH,aAAK+jB,KAAL,CAAW/jB,QAAX;AACH;AACJ;AAED;;;;;AAtSJ;AAAA;AAAA,yBA0SSA,QA1ST,EA0SmB;AAAA;;AACX,UAAIhD,EAAE,GAAG,KAAKA,EAAd;AAAA,UACIuG,SAAS,GAAG,KAAKkgB,OAAL,CAAazjB,QAAb,CADhB;AAGA,WAAK8iB,YAAL,CAAkB,IAAlB,EAAwBvf,SAAxB,EAAmCvD,QAAnC;AAEAuD,eAAS,CAACsC,KAAV,CAAgBC,OAAhB,GAA0B,OAA1B;AACA,WAAK1E,eAAL,GAAuBpB,QAAvB;AACA/E,MAAA,qDAAM,CAAC,0CAAD,EAAO,SAAP,EAAkB,UAACP,GAAD;AAAA,eAAS,MAAI,CAAC2Y,SAAL,CAAe3Y,GAAf,CAAT;AAAA,OAAlB,CAAN;;AAEA,UAAIsC,EAAE,CAACiO,aAAH,CAAiBjL,QAAjB,MAA+B,4CAAnC,EAA0C;AACtC,YAAIgE,GAAG,GAAGhH,EAAE,CAAC2J,gBAAH,CAAoB3G,QAApB,CAAV;;AACA,YAAIgE,GAAJ,EAAS;AACLA,aAAG,CAACygB,KAAJ;AACH;AACJ;;AAED,WAAKzB,WAAL,CAAiB,IAAjB,EAAuBzf,SAAvB,EAAkCvD,QAAlC;AACH;AAED;;;;;AA9TJ;AAAA;AAAA,0BAkUUA,QAlUV,EAkUoB;AAAA;;AACZ,UAAIuD,SAAS,GAAG,KAAKkgB,OAAL,CAAazjB,QAAb,CAAhB;AAEA,WAAKkjB,aAAL,CAAmB,IAAnB,EAAyB3f,SAAzB,EAAoCvD,QAApC;AAEAuD,eAAS,CAACsC,KAAV,CAAgBC,OAAhB,GAA0B,2CAA1B;;AACA,UAAI,KAAK1E,eAAL,KAAyBpB,QAA7B,EAAuC;AACnC,aAAKoB,eAAL,GAAuB,CAAC,CAAxB;AACH;;AACD5F,MAAA,wDAAS,CAAC,0CAAD,EAAO,SAAP,EAAkB,UAACd,GAAD;AAAA,eAAS,MAAI,CAAC2Y,SAAL,CAAe3Y,GAAf,CAAT;AAAA,OAAlB,CAAT;AAEA,WAAK0oB,YAAL,CAAkB,IAAlB,EAAwB7f,SAAxB,EAAmCvD,QAAnC;AACH;AAED;;;;;;AAhVJ;AAAA;AAAA,2BAqVWA,QArVX,EAqVqB;AACb,aAAO,KAAKyjB,OAAL,CAAazjB,QAAb,EAAuB6F,KAAvB,CAA6BC,OAA7B,KAAyC,OAAhD;AACH;AAED;;;;;AAzVJ;AAAA;AAAA,6BA6Va4e,SA7Vb,EA6VwB;AAChB;AACA;AACA,UAAI,sDAAO,CAACA,SAAD,CAAP,IAAsB,CAAC,KAAK1C,gBAAhC,EAAkD;AAC9C;AACH;;AACD,WAAK,IAAIhvB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKywB,OAAL,CAAavwB,MAAjC,EAAyCF,CAAC,EAA1C,EAA8C;AAC1C,YAAIA,CAAC,KAAK0xB,SAAV,EAAqB;AACjB;AACH;;AACD,YAAIC,OAAO,GAAG,KAAK3nB,EAAL,CAAQiO,aAAR,CAAsBjY,CAAtB,CAAd;AACA,YAAI4xB,gBAAgB,GACfD,OAAO,KAAK,gDAAZ,IAAyBA,OAAO,KAAK,+CAD1C,CAL0C,CAQ1C;AACA;;AACA,YAAI,CAACC,gBAAD,IAAqB,CAAC,sDAAO,CAACF,SAAD,CAAjC,EAA8C;AAC1C,eAAKX,KAAL,CAAW/wB,CAAX;AACH;AACJ;AACJ;AAED;;;;AAnXJ;AAAA;AAAA,oCAsXoB;AACZ,WAAK,IAAIA,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKuwB,QAAL,CAAcrwB,MAAlC,EAA0CF,CAAC,EAA3C,EAA+C;AAC3C,aAAKmxB,WAAL,CAAiBnxB,CAAjB,EAAoB,KAApB;AACH;AACJ;AAED;;;;;;AA5XJ;AAAA;AAAA,gCAiYgBgN,QAjYhB,EAiY0B6kB,MAjY1B,EAiYkC;AAC1B,UAAIf,IAAI,GAAG,KAAKP,QAAL,CAAcvjB,QAAd,CAAX;;AACA,UAAI8jB,IAAJ,EAAU;AACNA,YAAI,CAACgB,GAAL,GAAWD,MAAM,GAAG,KAAKxC,cAAR,GAAyB,KAAKH,QAA/C;AACH;AACJ;AAED;;;;AAxYJ;AAAA;AAAA,8BA2Yc;AAAA;;AACN,UAAI,CAAC,KAAK7kB,WAAV,EAAuB;AACnB;AACH;;AAED,WAAKmmB,YAAL,GAAoB,EAApB;;AACA,WAAK,IAAIxwB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKywB,OAAL,CAAavwB,MAAjC,EAAyCF,CAAC,EAA1C,EAA8C;AAC1C,YAAIuQ,SAAS,GAAG,KAAKkgB,OAAL,CAAazwB,CAAb,CAAhB;AAAA,YACIsxB,WAAW,GAAG/gB,SAAS,CAACzL,UAD5B;AAAA,YAEIgsB,IAAI,GAAG,KAAKR,QAAL,CAActwB,CAAd,CAFX;AAAA,YAGI+xB,OAAO,GAAG,KAAKxB,QAAL,CAAcvwB,CAAd,CAHd;;AAIA,YAAIuQ,SAAJ,EAAe;AACX1L,UAAA,sDAAS,CAAC0L,SAAD,CAAT;AACA,eAAKigB,YAAL,CAAkBxwB,CAAlB,IAAuBuQ,SAAvB;AACH;;AACDA,iBAAS,GAAG,IAAZ;;AACA,YAAI+gB,WAAJ,EAAiB;AACbzsB,UAAA,sDAAS,CAACysB,WAAD,CAAT;AACH;;AACDA,mBAAW,GAAG,IAAd;;AACA,YAAIR,IAAJ,EAAU;AACNjsB,UAAA,sDAAS,CAACisB,IAAD,CAAT;AACH;;AACDA,YAAI,GAAG,IAAP;;AACA,YAAIiB,OAAJ,EAAa;AACTltB,UAAA,sDAAS,CAACktB,OAAD,CAAT;AACH;;AACDA,eAAO,GAAG,IAAV;AACH;;AACD,WAAKtB,OAAL,GAAe,EAAf;AACA,WAAKH,QAAL,GAAgB,EAAhB;AACA,WAAKC,QAAL,GAAgB,EAAhB,CA/BM,CAiCN;;AACA,WAAKvmB,EAAL,CAAQyG,cAAR,GAAyB,EAAzB,CAlCM,CAoCN;;AACA,WAAKrG,OAAL,CAAaiC,GAAb,CAAiB,CAAC,kBAAD,CAAjB,EAAuC;AAAA,eAAM,MAAI,CAAC4kB,aAAL,EAAN;AAAA,OAAvC;AACA,WAAK7mB,OAAL,CAAaiC,GAAb,CAAiB,CAAC,iBAAD,CAAjB,EAAsC;AAAA,eAAM,MAAI,CAACskB,QAAL,EAAN;AAAA,OAAtC;AACA,WAAKvmB,OAAL,CAAaiC,GAAb,CAAiB,CAAC,gBAAD,CAAjB,EACI,UAACrC,EAAD,EAAKknB,SAAL;AAAA,eAAmB,MAAI,CAACC,WAAL,CAAiBD,SAAjB,EAA4B,IAA5B,CAAnB;AAAA,OADJ;AAEA,WAAK9mB,OAAL,CAAaiC,GAAb,CAAiB,CAAC,sBAAD,CAAjB,EAA2C;AAAA,eAAM,MAAI,CAAC2kB,UAAL,EAAN;AAAA,OAA3C;AACA,WAAK5mB,OAAL,CAAaiC,GAAb,CAAiB,CAAC,oBAAD,CAAjB,EACI,UAACrC,EAAD,EAAKgD,QAAL;AAAA,eAAkB,MAAI,CAACiB,KAAL,CAAWjB,QAAX,CAAlB;AAAA,OADJ;AAGA,WAAK3C,WAAL,GAAmB,KAAnB;AACH;AAzbL;;AAAA;AAAA,EAAiC,gDAAjC,E,CA6bA;;AACAykB,WAAW,CAAC7Y,OAAZ,GAAsB,cAAtB,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5cA;AACA;AACA;AACA;AACA;AAEA;;;;;;;AAMA,IAAa+b,WAAb;AAAA;AAAA;AAAA;;AAEI;;;;AAIA,uBAAYhoB,EAAZ,EAAgB;AAAA;;AAAA;;AACZ,qFAAMA,EAAN,EAAU,aAAV,EAAyBgoB,WAAzB,GADY,CAGZ;;AACA,QAAIzlB,CAAC,GAAG,MAAKpC,MAAL,CAAY8nB,YAAZ,IAA4B,EAApC;AAEA;;;;;AAIA,UAAKjd,QAAL,GAAgB,6DAAW,CAACzI,CAAC,CAAC0I,SAAH,EAAc,IAAd,CAA3B;AAEA;;;;;;AAKA,UAAK1E,SAAL,GAAiB,IAAjB;AAEA;;;;;;AAKA,UAAK1J,KAAL,GAAa,IAAb;AAEA;;;;;AAIA,UAAKX,IAAL,GAAY,6DAAW,CAACqG,CAAC,CAACrG,IAAH,EAAS,QAAT,CAAvB;AAEA;;;;;;AAKA,UAAKgsB,mBAAL,GAA2B,6DAAW,CAAC3lB,CAAC,CAAC4H,SAAH,EAAc,GAAd,CAAtC;AAEA;;;;;;;AAMA,UAAKge,QAAL,GAAgB,6DAAW,CAAC5lB,CAAC,CAAC6lB,SAAH,EAAc,KAAd,CAA3B;AAEA;;;;;AAIA,UAAKld,QAAL,GAAgB,6DAAW,CAAC3I,CAAC,CAAC4I,SAAH,EAAc,KAAd,CAA3B;AAEA;;;;;AAIA,UAAKI,eAAL,GAAuB,6DAAW,CAAChJ,CAAC,CAACiJ,gBAAH,EAAqB,6CAArB,CAAlC;AAEA;;;;;AAIA,UAAK6c,sBAAL,GAA8B,4DAAU,CAAC9lB,CAAC,CAAC+lB,yBAAH,EACpC,+CADoC,CAAxC;AAGA;;;;;AAIA,UAAKC,qBAAL,GAA6B,4DAAU,CAAChmB,CAAC,CAACimB,wBAAH,EACnC,+CADmC,CAAvC;AAtEY;AAwEf;AAED;;;;;AAhFJ;AAAA;AAAA,2BAmFW;AAAA;;AACH,UAAI,KAAKnoB,WAAT,EAAsB;AAClB;AACH;;AAED,WAAKD,OAAL,CAAauF,IAAb,CAAkB,sBAAlB,EAA0C,IAA1C,EAAgD,CAAC,qDAAM,CAAC,KAAKqF,QAAN,CAAvD;AAEA,UAAIhL,EAAE,GAAG,KAAKA,EAAd,CAPG,CASH;;AACA,UAAIyoB,QAAQ,GAAG,sDAAS,CAAC,KAAD,CAAxB;AACAA,cAAQ,CAAChtB,SAAT,GAAqB,KAAKyP,QAA1B,CAXG,CAYH;;AACA,UAAIwd,SAAS,GAAG,sDAAS,CAAC,MAAD,CAAzB;AACA,UAAIC,SAAS,GAAG,sDAAS,CAAC,MAAD,CAAzB;AACAA,eAAS,CAACrsB,WAAV,CAAsB,uDAAU,CAAC,KAAKJ,IAAN,CAAhC,EAfG,CAiBH;;AACA,UAAI0P,QAAQ,GAAG,CAAC,KAAKZ,QAAN,GACXhL,EAAE,CAACC,OAAH,CAAW,SAAX,EAAsBsG,SAAtB,CAAgC,KAAKgF,eAArC,CADW,GAEX,gDAAG,CAAC,KAAKP,QAAN,CAFP,CAlBG,CAsBH;;AACA,UAAI,CAAC,KAAKA,QAAV,EAAoB;AAChByd,gBAAQ,CAACnsB,WAAT,CAAqBqsB,SAArB;AACAF,gBAAQ,CAACnsB,WAAT,CAAqBosB,SAArB;AACA9c,gBAAQ,CAACtP,WAAT,CAAqBmsB,QAArB;AACH,OAJD,MAIO;AACH;AACA7c,gBAAQ,CAACtP,WAAT,CAAqBqsB,SAArB;AACA/c,gBAAQ,CAACtP,WAAT,CAAqBosB,SAArB;AACH;;AACD,WAAKniB,SAAL,GAAiBkiB,QAAjB;AACA,WAAK5rB,KAAL,GAAa6rB,SAAb,CAjCG,CAmCH;;AACA,WAAKtoB,OAAL,CAAaE,EAAb,CAAgB,CAAC,iBAAD,EAAoB,iBAApB,CAAhB,EACI;AAAA,eAAM,MAAI,CAACsoB,OAAL,CAAa5oB,EAAE,CAACkc,cAAH,EAAb,CAAN;AAAA,OADJ;AAEA,WAAK9b,OAAL,CAAaE,EAAb,CAAgB,CAAC,cAAD,CAAhB,EAAkC;AAAA,eAAM,MAAI,CAACsoB,OAAL,EAAN;AAAA,OAAlC;AAEA;;AACA,WAAKvoB,WAAL,GAAmB,IAAnB;AACA,WAAKuoB,OAAL;AAEA,WAAKxoB,OAAL,CAAauF,IAAb,CAAkB,qBAAlB,EAAyC,IAAzC;AACH;AAED;;;;;AAlIJ;AAAA;AAAA,4BAsIYmU,CAtIZ,EAsIe;AACP,UAAI,CAAC,KAAKzZ,WAAN,IAAqB,CAAC,KAAKa,SAAL,EAA1B,EAA4C;AACxC;AACH;;AAED,UAAIlB,EAAE,GAAG,KAAKA,EAAd;AAEA,WAAKqoB,sBAAL,CAA4BroB,EAA5B,EAAgC,KAAKnD,KAArC;AAEA,UAAIgsB,MAAJ;;AACA,UAAI,CAAC7oB,EAAE,CAACxH,MAAR,EAAgB;AACZ,YAAIshB,CAAC,IAAIA,CAAC,KAAK,EAAf,EAAmB;AACf+O,gBAAM,GAAG/O,CAAT;AACH,SAFD,MAEO;AACH+O,gBAAM,GAAG7oB,EAAE,CAAC8oB,mBAAH,KAA2B9oB,EAAE,CAAC+oB,YAAvC;AACH;AACJ,OAND,MAMO;AACH,YAAIvwB,MAAM,GAAGwH,EAAE,CAACC,OAAH,CAAW,QAAX,CAAb;;AACA,YAAIzH,MAAJ,EAAY;AACR,cAAIwwB,WAAW,GAAGhpB,EAAE,CAACkc,cAAH,EAAlB,CADQ,CAER;;AACA,cAAI+M,cAAc,GAAGrf,QAAQ,CAACpR,MAAM,CAACglB,cAAR,EAAwB,EAAxB,CAAR,IACfwL,WAAW,GAAG,CAAf,GAAoB,CAApB,GAAwB,CADR,CAArB;AAEA,cAAIE,YAAY,GACXD,cAAc,GAAGzwB,MAAM,CAACkkB,UAAzB,GAAuC,CAAvC,IACAsM,WADA,GAEIC,cAAc,GAAGzwB,MAAM,CAACkkB,UAAxB,GAAqC,CAFzC,GAGIsM,WAJR;AAKAH,gBAAM,GAAGI,cAAc,GAAG,KAAKf,mBAAtB,GACLgB,YADK,GACU,KAAKf,QADf,GAC0Ba,WADnC;AAEH;AACJ;;AAED,WAAKnsB,KAAL,CAAW2K,SAAX,GAAuBqhB,MAAvB;AACA,WAAKN,qBAAL,CAA2BvoB,EAA3B,EAA+B,KAAKnD,KAApC,EAA2CgsB,MAA3C;AACH;AAED;;;;AA3KJ;AAAA;AAAA,8BA8Kc;AAAA;;AACN,UAAI,CAAC,KAAKxoB,WAAV,EAAuB;AACnB;AACH;;AAED,UAAI,CAAC,KAAK2K,QAAN,IAAkB,KAAKzE,SAA3B,EAAsC;AAClC1L,QAAA,sDAAS,CAAC,KAAK0L,SAAN,CAAT;AACH,OAFD,MAEO;AACHxJ,QAAA,gDAAG,CAAC,KAAKiO,QAAN,CAAH,CAAmBxD,SAAnB,GAA+B,EAA/B;AACH;;AACD,WAAK3K,KAAL,GAAa,IAAb;AACA,WAAK0J,SAAL,GAAiB,IAAjB,CAXM,CAaN;;AACA,WAAKnG,OAAL,CAAaiC,GAAb,CAAiB,CAAC,iBAAD,EAAoB,iBAApB,CAAjB,EACI;AAAA,eAAM,MAAI,CAACumB,OAAL,CAAa5oB,EAAE,CAACkc,cAAH,EAAb,CAAN;AAAA,OADJ;AAEA,WAAK9b,OAAL,CAAaiC,GAAb,CAAiB,CAAC,cAAD,CAAjB,EAAmC;AAAA,eAAM,MAAI,CAACumB,OAAL,EAAN;AAAA,OAAnC;AAEA,WAAKvoB,WAAL,GAAmB,KAAnB;AACH;AAjML;;AAAA;AAAA,EAAiC,gDAAjC,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;AAOA,IAAa8oB,KAAb;AAAA;AAAA;AAAA;;AAEI;;;;AAIA,iBAAYnpB,EAAZ,EAAgB;AAAA;;AAAA;;AACZ,+EAAMA,EAAN,EAAU,OAAV;AAEA,QAAIopB,GAAG,GAAG,MAAKjpB,MAAL,CAAYvI,KAAZ,IAAqB,EAA/B;AAEA;;;;;AAIA,UAAKyxB,UAAL,GAAkBD,GAAG,KAAK,IAAR,IACb,sDAAO,CAACA,GAAG,CAAC7c,KAAL,CAAP,IAAsB6c,GAAG,CAAC7c,KAAJ,CAAU9S,OAAV,CAAkB,MAAlB,MAA8B,CAAC,CAD1D;AAGA;;;;;AAIA,UAAK6vB,kBAAL,GAA0B,sDAAO,CAACF,GAAG,CAAC7c,KAAL,CAAP,IACtB6c,GAAG,CAAC7c,KAAJ,CAAU9S,OAAV,CAAkB,eAAlB,MAAuC,CAAC,CAD5C;AAGA;;;;;AAIA,UAAK8vB,YAAL,GAAoB,sDAAO,CAACH,GAAG,CAAC7c,KAAL,CAAP,IAChB6c,GAAG,CAAC7c,KAAJ,CAAU9S,OAAV,CAAkB,QAAlB,MAAgC,CAAC,CADrC;AAGA;;;;;AAIA,UAAK+vB,cAAL,GAAsB,8DAAY,CAACJ,GAAG,CAACjZ,OAAL,EAAc,IAAd,CAAlC;AAEA;;;;;AAIA,UAAKsZ,iBAAL,GAAyB1zB,OAAO,CAACqzB,GAAG,CAACM,WAAL,CAAhC;AAEA;;;;;AAIA,UAAKC,iBAAL,GAAyB5zB,OAAO,CAACqzB,GAAG,CAACQ,WAAL,CAAhC;AAEA;;;;;AAIA,UAAKC,WAAL,GAAmB9zB,OAAO,CAACqzB,GAAG,CAACxlB,IAAL,CAA1B;AAEA;;;;;AAIA,UAAKkmB,qBAAL,GAA6B/zB,OAAO,CAACqzB,GAAG,CAACW,kBAAL,CAApC;AAEA;;;;;AAIA,UAAKC,wBAAL,GAAgCj0B,OAAO,CAACqzB,GAAG,CAACa,kBAAL,CAAvC;AAEA;;;;;AAIA,UAAKC,cAAL,GAAsB,4DAAU,CAACtgB,QAAQ,CAACwf,GAAG,CAACe,eAAL,EAAsB,EAAtB,CAAT,EAC5B,KAD4B,CAAhC;AAGA;;;;;;AAKA,UAAKC,aAAL,GAAqB,MAAKd,kBAAL,IAA2B,MAAKC,YAArD;AAEA;;;;;;AAKA,UAAKc,OAAL,GAAe,IAAf;AAEA;;;;;;AAKA,UAAK5V,IAAL,GAAY,IAAZ;AAEA;;;;;;AAKA,UAAK6V,MAAL,GAAc,IAAd;AAEA;;;;;;AAKA,UAAK5N,UAAL,GAAkB,IAAlB;AAEA;;;;;;AAKA,UAAK9Y,IAAL,GAAY,IAAZ;AAEA;;;;;;AAKA,UAAK2mB,UAAL,GAAkB,IAAlB;AAEA;;;;;;AAKA,UAAKC,iBAAL,GAAyB,IAAzB;AAEA;;;;;;AAKA,UAAK5yB,KAAL,GAAa,EAAb;AAEA;;;;;;AAKA,UAAK6yB,OAAL,GAAe,MAAf;AAEA;;;;;;AAKA,UAAKC,SAAL,GAAiB,MAAjB;AAEA;;;;;;AAKA,UAAKC,aAAL,GAAqB,aAArB;AAEA;;;;;;AAKA,UAAKC,aAAL,GAAqB,oBAArB;AA9JY;AA+Jf;AAED;;;;;AAvKJ;AAAA;AAAA,2BA0KW;AAAA;;AACH,UAAI,KAAKvqB,WAAT,EAAsB;AAClB;AACH;;AAED,WAAKD,OAAL,CAAaE,EAAb,CAAgB,CAAC,iBAAD,CAAhB,EAAqC;AAAA,eAAM,MAAI,CAACqU,MAAL,EAAN;AAAA,OAArC;AACA,WAAKvU,OAAL,CAAaE,EAAb,CAAgB,CAAC,mBAAD,EAAsB,wBAAtB,CAAhB,EACI,UAACN,EAAD,EAAKsqB,MAAL;AAAA,eAAgB,MAAI,CAACO,UAAL,CAAgBP,MAAhB,CAAhB;AAAA,OADJ;AAEA,WAAKlqB,OAAL,CAAaE,EAAb,CAAgB,CAAC,0BAAD,CAAhB,EACI,UAACN,EAAD,EAAK0c,UAAL;AAAA,eAAoB,MAAI,CAACoO,gBAAL,CAAsBpO,UAAtB,CAApB;AAAA,OADJ;AAEA,WAAKtc,OAAL,CAAaE,EAAb,CAAgB,CAAC,eAAD,CAAhB,EACI,UAACN,EAAD,EAAKkkB,KAAL,EAAY6G,UAAZ;AAAA,eAA2B,MAAI,CAACC,UAAL,CAAgB9G,KAAhB,EAAuB6G,UAAvB,CAA3B;AAAA,OADJ;AAEA,WAAK3qB,OAAL,CAAaE,EAAb,CAAgB,CAAC,kBAAD,CAAhB,EAAsC;AAAA,eAAM,MAAI,CAAC2qB,SAAL,EAAN;AAAA,OAAtC;AACA,WAAK7qB,OAAL,CAAaE,EAAb,CAAgB,CAAC,gCAAD,CAAhB,EACI;AAAA,eAAM,MAAI,CAAC4qB,mBAAL,EAAN;AAAA,OADJ;AAEA,WAAK9qB,OAAL,CAAaE,EAAb,CAAgB,CAAC,cAAD,EAAiB,eAAjB,CAAhB,EAAmD,UAACN,EAAD,EAAKC,OAAL,EAC/C+C,QAD+C,EACrCunB,UADqC;AAAA,eACtB,MAAI,CAACY,oBAAL,CAA0BZ,UAA1B,CADsB;AAAA,OAAnD;AAEA,WAAKnqB,OAAL,CAAaE,EAAb,CAAgB,CAAC,gCAAD,CAAhB,EACI;AAAA,eAAM,MAAI,CAAC8qB,sBAAL,EAAN;AAAA,OADJ;AAEA,WAAKhrB,OAAL,CAAaE,EAAb,CAAgB,CAAC,iBAAD,CAAhB,EACI,UAACN,EAAD,EAAK0S,SAAL,EAAgB2Y,OAAhB;AAAA,eAA4B,MAAI,CAACC,uBAAL,CAA6BD,OAA7B,CAA5B;AAAA,OADJ;;AAGA,UAAI,KAAKhC,UAAT,EAAqB;AACjB,aAAK5U,IAAL,GAAY,IAAI,0CAAJ,CAAS,IAAT,CAAZ;AACA,aAAKA,IAAL,CAAU/T,IAAV;AACH;;AACD,UAAI,KAAK0pB,aAAT,EAAwB;AACpB,aAAKC,OAAL,GAAe,IAAI,gDAAJ,CAAY,IAAZ,CAAf;AACA,aAAKA,OAAL,CAAa3pB,IAAb;AACH;AAED;;;AACA,WAAKL,WAAL,GAAmB,IAAnB;AACH;AAGD;;;;AA9MJ;AAAA;AAAA,6BAiNa;AAAA;;AACL,UAAI,CAAC,KAAKa,SAAL,EAAL,EAAuB;AACnB;AACH;;AACD,UAAItJ,KAAK,GAAG,KAAKA,KAAjB;AACA,UAAIoI,EAAE,GAAG,KAAKA,EAAd;;AAEA,UAAI,KAAKwpB,cAAT,EAAyB;AACrB,YAAI+B,YAAY,GAAGvrB,EAAE,CAACwrB,eAAH,EAAnB;AAEAD,oBAAY,CAAC9tB,OAAb,CAAqB,UAAC7H,GAAD,EAAM0L,GAAN,EAAc;AAC/B,cAAImqB,GAAG,aAAM,MAAI,CAAChB,OAAX,SAAqBnpB,GAArB,CAAP;;AAEA,cAAI,uDAAQ,CAAC1L,GAAD,CAAR,IAAiB,uDAAO,CAACA,GAAD,CAA5B,EAAmC;AAC/B,gBAAIgC,KAAK,CAACkV,cAAN,CAAqB2e,GAArB,CAAJ,EAA+B;AAC3B7zB,mBAAK,CAAC6zB,GAAD,CAAL,CAAWzkB,GAAX,GAAiBrD,SAAjB;AACH;AACJ,WAJD,MAIO;AACH/L,iBAAK,CAAC6zB,GAAD,CAAL,GAAa7zB,KAAK,CAAC6zB,GAAD,CAAL,IAAc,EAA3B;AACA7zB,iBAAK,CAAC6zB,GAAD,CAAL,CAAWzkB,GAAX,GAAiBpR,GAAjB;AACH;AACJ,SAXD;AAYH;;AAED,UAAI,KAAK6zB,iBAAT,EAA4B;AACxB,YAAI,qDAAM,CAAC,KAAKa,MAAN,CAAV,EAAyB;AACrB1yB,eAAK,CAAC,KAAK8yB,SAAN,CAAL,GAAwB/mB,SAAxB;AACH,SAFD,MAEO;AACH/L,eAAK,CAAC,KAAK8yB,SAAN,CAAL,GAAwB,KAAKJ,MAA7B;AACH;AACJ;;AAED,UAAI,KAAKX,iBAAT,EAA4B;AACxB,YAAI,qDAAM,CAAC,KAAKjN,UAAN,CAAV,EAA6B;AACzB9kB,eAAK,CAAC,KAAK+yB,aAAN,CAAL,GAA4BhnB,SAA5B;AACH,SAFD,MAEO;AACH/L,eAAK,CAAC,KAAK+yB,aAAN,CAAL,GAA4B,KAAKjO,UAAjC;AACH;AACJ;;AAED,UAAI,KAAKmN,WAAT,EAAsB;AAClB,YAAI,CAAC,qDAAM,CAAC,KAAKjmB,IAAN,CAAX,EAAwB;AACpB;AACA8nB,gBAAM,CAACC,IAAP,CAAY/zB,KAAZ,EAAmB6F,OAAnB,CAA2B,UAACguB,GAAD,EAAS;AAChC,gBAAIA,GAAG,CAAChyB,OAAJ,CAAY,MAAI,CAACgxB,OAAjB,MAA8B,CAAC,CAA/B,IAAoC7yB,KAAK,CAAC6zB,GAAD,CAA7C,EAAoD;AAChD7zB,mBAAK,CAAC6zB,GAAD,CAAL,CAAW7nB,IAAX,GAAkBD,SAAlB;AACH;AACJ,WAJD;AAMA,cAAI8nB,GAAG,aAAM,KAAKhB,OAAX,SAAqB,KAAK7mB,IAAL,CAAUgoB,MAA/B,CAAP;AACAh0B,eAAK,CAAC6zB,GAAD,CAAL,GAAa7zB,KAAK,CAAC6zB,GAAD,CAAL,IAAc,EAA3B;AACA7zB,eAAK,CAAC6zB,GAAD,CAAL,CAAW7nB,IAAX,GAAkB;AAAEmnB,sBAAU,EAAE,KAAKnnB,IAAL,CAAUmnB;AAAxB,WAAlB;AACH;AACJ;;AAED,UAAI,KAAKjB,qBAAT,EAAgC;AAC5B,YAAI,CAAC,qDAAM,CAAC,KAAKS,UAAN,CAAX,EAA8B;AAC1B;AACAmB,gBAAM,CAACC,IAAP,CAAY/zB,KAAZ,EAAmB6F,OAAnB,CAA2B,UAACguB,GAAD,EAAS;AAChC,gBAAIA,GAAG,CAAChyB,OAAJ,CAAY,MAAI,CAACgxB,OAAjB,MAA8B,CAAC,CAA/B,IAAoC7yB,KAAK,CAAC6zB,GAAD,CAA7C,EAAoD;AAChD7zB,mBAAK,CAAC6zB,GAAD,CAAL,CAAWI,MAAX,GAAoBloB,SAApB;AACH;AACJ,WAJD;AAMA,eAAK4mB,UAAL,CAAgB9sB,OAAhB,CAAwB,UAACqG,MAAD,EAAY;AAChC,gBAAI2nB,GAAG,aAAM,MAAI,CAAChB,OAAX,SAAqB3mB,MAArB,CAAP;AACAlM,iBAAK,CAAC6zB,GAAD,CAAL,GAAa7zB,KAAK,CAAC6zB,GAAD,CAAL,IAAc,EAA3B;AACA7zB,iBAAK,CAAC6zB,GAAD,CAAL,CAAWI,MAAX,GAAoB,IAApB;AACH,WAJD;AAKH;AACJ;;AAED,UAAI,KAAK7B,wBAAT,EAAmC;AAC/B,YAAI,qDAAM,CAAC,KAAKQ,iBAAN,CAAV,EAAoC;AAChC5yB,eAAK,CAAC,KAAKgzB,aAAN,CAAL,GAA4BjnB,SAA5B;AACH,SAFD,MAEO;AACH/L,eAAK,CAAC,KAAKgzB,aAAN,CAAL,GAA4B,KAAKJ,iBAAjC;AACH;AACJ;;AAED,WAAKpqB,OAAL,CAAauF,IAAb,CAAkB,eAAlB,EAAmC3F,EAAnC,EAAuCpI,KAAvC;AACH;AAED;;;;;;AApSJ;AAAA;AAAA,+BAySe0yB,MAzSf,EAySuB;AACf,WAAKA,MAAL,GAAcA,MAAd;AACA,WAAK3V,MAAL;AACH;AAED;;;;;;AA9SJ;AAAA;AAAA,qCAmTqB+H,UAnTrB,EAmTiC;AACzB,WAAKA,UAAL,GAAkBA,UAAlB;AACA,WAAK/H,MAAL;AACH;AAED;;;;;;;AAxTJ;AAAA;AAAA,+BA8TeuP,KA9Tf,EA8TsB6G,UA9TtB,EA8TkC;AAC1B,WAAKnnB,IAAL,GAAY;AACRgoB,cAAM,EAAE1H,KADA;AAER6G,kBAAU,EAAEA;AAFJ,OAAZ;AAIA,WAAKpW,MAAL;AACH;AAED;;;;;;AAtUJ;AAAA;AAAA,yCA2UyB4V,UA3UzB,EA2UqC;AAC7B,WAAKA,UAAL,GAAkBA,UAAlB;AACA,WAAK5V,MAAL;AACH;AAED;;;;;;AAhVJ;AAAA;AAAA,4CAqV4B0W,OArV5B,EAqVqC;AAC7B,WAAKb,iBAAL,GAAyBa,OAAzB;AACA,WAAK1W,MAAL;AACH;AAED;;;;;;AA1VJ;AAAA;AAAA,6BA+Va/c,KA/Vb,EA+VoB;AACZ,WAAKA,KAAL,GAAaA,KAAb;AACA,WAAKwI,OAAL,CAAauF,IAAb,CAAkB,eAAlB,EAAmC,KAAK3F,EAAxC,EAA4CpI,KAA5C;AACH;AAED;;;;AApWJ;AAAA;AAAA,2BAuWW;AACH,UAAIA,KAAK,GAAG,KAAKA,KAAjB;AACA,UAAIoI,EAAE,GAAG,KAAKA,EAAd;;AAEA,WAAK8rB,YAAL;;AAEA,UAAI,KAAKrC,iBAAT,EAA4B;AACxB,YAAI9E,UAAU,GAAG/sB,KAAK,CAAC,KAAK8yB,SAAN,CAAtB;AACA,aAAKtqB,OAAL,CAAauF,IAAb,CAAkB,aAAlB,EAAiC3F,EAAjC,EAAqC2kB,UAArC;AACH;;AAED,UAAI,KAAKgF,iBAAT,EAA4B;AACxB,YAAIjN,UAAU,GAAG9kB,KAAK,CAAC,KAAK+yB,aAAN,CAAtB;AACA,aAAKvqB,OAAL,CAAauF,IAAb,CAAkB,qBAAlB,EAAyC3F,EAAzC,EAA6C0c,UAA7C;AACH;;AAED,WAAKuO,SAAL;;AACA,WAAKC,mBAAL;;AACA,WAAKE,sBAAL;AACH;AAED;;;;;;AA5XJ;AAAA;AAAA,oCAiYoBxzB,KAjYpB,EAiY2B;AACnB;AACA;AACA,WAAKm0B,OAAL,GAHmB,CAInB;;AACA,WAAKC,QAAL,CAAcp0B,KAAd,EALmB,CAMnB;;AACA,WAAK8c,IAAL,GAPmB,CAQnB;;AACA,WAAKjU,MAAL;AACH;AAED;;;;;;AA7YJ;AAAA;AAAA,mCAkZmB;AAAA;;AACX,UAAI,CAAC,KAAK+oB,cAAV,EAA0B;AACtB;AACH;;AACD,UAAI5xB,KAAK,GAAG,KAAKA,KAAjB;AACA,UAAIoI,EAAE,GAAG,KAAKA,EAAd,CALW,CAOX;AACA;;AACAA,QAAE,CAACkT,OAAH,CAAW,UAACpP,MAAD;AAAA,eAAY9D,EAAE,CAACisB,cAAH,CAAkBnoB,MAAlB,EAA0B,EAA1B,CAAZ;AAAA,OAAX;AAEA4nB,YAAM,CAACC,IAAP,CAAY/zB,KAAZ,EAAmB6F,OAAnB,CAA2B,UAACguB,GAAD,EAAS;AAChC,YAAIA,GAAG,CAAChyB,OAAJ,CAAY,MAAI,CAACgxB,OAAjB,MAA8B,CAAC,CAAnC,EAAsC;AAClC,cAAI3mB,MAAM,GAAG8F,QAAQ,CAAC6hB,GAAG,CAACzvB,OAAJ,CAAY,MAAI,CAACyuB,OAAjB,EAA0B,EAA1B,CAAD,EAAgC,EAAhC,CAArB;AACA,cAAI70B,GAAG,GAAGgC,KAAK,CAAC6zB,GAAD,CAAL,CAAWzkB,GAArB;AACAhH,YAAE,CAACisB,cAAH,CAAkBnoB,MAAlB,EAA0BlO,GAA1B;AACH;AACJ,OAND;AAQAoK,QAAE,CAAC6F,MAAH;AACH;AAED;;;;;;AAxaJ;AAAA;AAAA,gCA6agB;AAAA;;AACR,UAAI,CAAC,KAAKgkB,WAAV,EAAuB;AACnB;AACH;;AACD,UAAIjyB,KAAK,GAAG,KAAKA,KAAjB;AACA,UAAIoI,EAAE,GAAG,KAAKA,EAAd;AAEA0rB,YAAM,CAACC,IAAP,CAAY/zB,KAAZ,EAAmB6F,OAAnB,CAA2B,UAACguB,GAAD,EAAS;AAChC,YAAIA,GAAG,CAAChyB,OAAJ,CAAY,MAAI,CAACgxB,OAAjB,MAA8B,CAAC,CAAnC,EAAsC;AAClC,cAAI3mB,MAAM,GAAG8F,QAAQ,CAAC6hB,GAAG,CAACzvB,OAAJ,CAAY,MAAI,CAACyuB,OAAjB,EAA0B,EAA1B,CAAD,EAAgC,EAAhC,CAArB;;AACA,cAAI,CAAC,sDAAO,CAAC7yB,KAAK,CAAC6zB,GAAD,CAAL,CAAW7nB,IAAZ,CAAZ,EAA+B;AAC3B,gBAAIA,IAAI,GAAGhM,KAAK,CAAC6zB,GAAD,CAAL,CAAW7nB,IAAtB;;AACA,kBAAI,CAACxD,OAAL,CAAauF,IAAb,CAAkB,MAAlB,EAA0B3F,EAA1B,EAA8B8D,MAA9B,EAAsCF,IAAI,CAACmnB,UAA3C;AACH;AACJ;AACJ,OARD;AASH;AAED;;;;;;AA/bJ;AAAA;AAAA,0CAoc0B;AAAA;;AAClB,UAAI,CAAC,KAAKjB,qBAAV,EAAiC;AAC7B;AACH;;AACD,UAAIlyB,KAAK,GAAG,KAAKA,KAAjB;AACA,UAAIoI,EAAE,GAAG,KAAKA,EAAd;AACA,UAAIuqB,UAAU,GAAG,EAAjB;AAEAmB,YAAM,CAACC,IAAP,CAAY/zB,KAAZ,EAAmB6F,OAAnB,CAA2B,UAACguB,GAAD,EAAS;AAChC,YAAIA,GAAG,CAAChyB,OAAJ,CAAY,MAAI,CAACgxB,OAAjB,MAA8B,CAAC,CAAnC,EAAsC;AAClC,cAAI3mB,MAAM,GAAG8F,QAAQ,CAAC6hB,GAAG,CAACzvB,OAAJ,CAAY,MAAI,CAACyuB,OAAjB,EAA0B,EAA1B,CAAD,EAAgC,EAAhC,CAArB;;AACA,cAAI,CAAC,sDAAO,CAAC7yB,KAAK,CAAC6zB,GAAD,CAAL,CAAWI,MAAZ,CAAZ,EAAiC;AAC7BtB,sBAAU,CAAC5sB,IAAX,CAAgBmG,MAAhB;AACH;AACJ;AACJ,OAPD;AASAymB,gBAAU,CAAC9sB,OAAX,CAAmB,UAACqG,MAAD,EAAY;AAC3B,cAAI,CAAC1D,OAAL,CAAauF,IAAb,CAAkB,aAAlB,EAAiC3F,EAAjC,EAAqC8D,MAArC;AACH,OAFD;AAGH;AAED;;;;;;AA1dJ;AAAA;AAAA,6CA+d6B;AACrB,UAAI,CAAC,KAAKkmB,wBAAV,EAAoC;AAChC;AACH;;AACD,UAAIpyB,KAAK,GAAG,KAAKA,KAAjB;AACA,UAAIoI,EAAE,GAAG,KAAKA,EAAd;AACA,UAAIwqB,iBAAiB,GAAG5yB,KAAK,CAAC,KAAKgzB,aAAN,CAA7B;AAEA,WAAKJ,iBAAL,GAAyBA,iBAAzB;AACA,WAAKpqB,OAAL,CAAauF,IAAb,CAAkB,cAAlB,EAAkC3F,EAAlC,EAAsCwqB,iBAAtC;AACH;AAED;;;;AA3eJ;AAAA;AAAA,8BA8ec;AAAA;;AACN,UAAI,CAAC,KAAKnqB,WAAV,EAAuB;AACnB;AACH;;AAED,WAAKzI,KAAL,GAAa,EAAb;AAEA,WAAKwI,OAAL,CAAaiC,GAAb,CAAiB,CAAC,iBAAD,CAAjB,EAAsC;AAAA,eAAM,MAAI,CAACsS,MAAL,EAAN;AAAA,OAAtC;AACA,WAAKvU,OAAL,CAAaiC,GAAb,CAAiB,CAAC,mBAAD,EAAsB,wBAAtB,CAAjB,EACI,UAACrC,EAAD,EAAKsqB,MAAL;AAAA,eAAgB,MAAI,CAACO,UAAL,CAAgBP,MAAhB,CAAhB;AAAA,OADJ;AAEA,WAAKlqB,OAAL,CAAaiC,GAAb,CAAiB,CAAC,0BAAD,CAAjB,EACI,UAACrC,EAAD,EAAKkkB,KAAL;AAAA,eAAe,MAAI,CAAC4G,gBAAL,CAAsB5G,KAAtB,CAAf;AAAA,OADJ;AAEA,WAAK9jB,OAAL,CAAaiC,GAAb,CAAiB,CAAC,eAAD,CAAjB,EACI,UAACrC,EAAD,EAAKkkB,KAAL,EAAY6G,UAAZ;AAAA,eAA2B,MAAI,CAACC,UAAL,CAAgB9G,KAAhB,EAAuB6G,UAAvB,CAA3B;AAAA,OADJ;AAEA,WAAK3qB,OAAL,CAAaiC,GAAb,CAAiB,CAAC,kBAAD,CAAjB,EAAuC;AAAA,eAAM,MAAI,CAAC4oB,SAAL,EAAN;AAAA,OAAvC;AACA,WAAK7qB,OAAL,CAAaiC,GAAb,CAAiB,CAAC,gCAAD,CAAjB,EACI;AAAA,eAAM,MAAI,CAAC6oB,mBAAL,EAAN;AAAA,OADJ;AAEA,WAAK9qB,OAAL,CAAaiC,GAAb,CAAiB,CAAC,cAAD,EAAiB,eAAjB,CAAjB,EAAoD,UAACrC,EAAD,EAAKC,OAAL,EAChD+C,QADgD,EACtCunB,UADsC;AAAA,eACvB,MAAI,CAACY,oBAAL,CAA0BZ,UAA1B,CADuB;AAAA,OAApD;AAEA,WAAKnqB,OAAL,CAAaiC,GAAb,CAAiB,CAAC,gCAAD,CAAjB,EACI;AAAA,eAAM,MAAI,CAAC+oB,sBAAL,EAAN;AAAA,OADJ;AAEA,WAAKhrB,OAAL,CAAaiC,GAAb,CAAiB,CAAC,iBAAD,CAAjB,EACI,UAACrC,EAAD,EAAK0S,SAAL,EAAgB2Y,OAAhB;AAAA,eAA4B,MAAI,CAACC,uBAAL,CAA6BD,OAA7B,CAA5B;AAAA,OADJ;;AAGA,UAAI,KAAKhC,UAAT,EAAqB;AACjB,aAAK5U,IAAL,CAAUlU,OAAV;AACA,aAAKkU,IAAL,GAAY,IAAZ;AACH;;AAED,UAAI,KAAK2V,aAAT,EAAwB;AACpB,aAAKC,OAAL,CAAa9pB,OAAb;AACA,aAAK8pB,OAAL,GAAe,IAAf;AACH;;AAED,WAAKhqB,WAAL,GAAmB,KAAnB;AACH;AAjhBL;;AAAA;AAAA,EAA2B,gDAA3B,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAM6rB,MAAM,GAAG,CACX,iBADW,EAEX,yBAFW,EAGX,mBAHW,EAIX,wBAJW,EAKX,0BALW,EAMX,kBANW,EAOX,yBAPW,EAQX,0BARW,EASX,sBATW,CAAf;AAYA;;;;;;;AAMA,IAAaC,SAAb;AAAA;AAAA;AAAA;;AAEI;;;;AAIA,qBAAYnsB,EAAZ,EAAgB;AAAA;;AAAA;;AACZ,mFAAMA,EAAN,EAAU,WAAV,GADY,CAGZ;;AACA,QAAIuC,CAAC,GAAG,MAAKpC,MAAL,CAAYisB,UAAZ,IAA0B,EAAlC;AAEA;;;;;AAIA,UAAKphB,QAAL,GAAgB,6DAAW,CAACzI,CAAC,CAAC0I,SAAH,EAAc,IAAd,CAA3B;AAEA;;;;;;AAKA,UAAK1E,SAAL,GAAiB,IAAjB;AAEA;;;;;;AAKA,UAAK8lB,YAAL,GAAoB,IAApB;AAEA;;;;;;AAKA,UAAKC,cAAL,GAAsB,IAAtB;AAEA;;;;;AAIA,UAAKpwB,IAAL,GAAY,6DAAW,CAACqG,CAAC,CAACrG,IAAH,EAAS,EAAT,CAAvB;AAEA;;;;;AAIA,UAAKgP,QAAL,GAAgB,6DAAW,CAAC3I,CAAC,CAAC4I,SAAH,EAAc,QAAd,CAA3B;AAEA;;;;;;AAKA,UAAKohB,KAAL,GAAa,GAAb;AAEA;;;;;AAIA,UAAKC,eAAL,GAAuB,4DAAU,CAACjqB,CAAC,CAACmZ,kBAAH,EAAuB,+CAAvB,CAAjC;AAEA;;;;;AAIA,UAAK+Q,cAAL,GAAsB,4DAAU,CAAClqB,CAAC,CAACqZ,iBAAH,EAAsB,+CAAtB,CAAhC;AAEA;;;;;AAIA,UAAK8Q,SAAL,GAAiB,6DAAW,CAACnqB,CAAC,CAACoqB,UAAH,EAAe,mBAAf,CAA5B;AAEA;;;;;AAIA,UAAKC,WAAL,GAAmB,6DAAW,CAACrqB,CAAC,CAACsqB,YAAH,EAAiB,sBAAjB,CAA9B;AAEA;;;;;AAIA,UAAKC,oBAAL,GAA4B,6DAAW,CAACvqB,CAAC,CAACwqB,sBAAH,EACnC,oBADmC,CAAvC;AAGA;;;;;AAIA,UAAKC,aAAL,GAAqB,6DAAW,CAACzqB,CAAC,CAAC0qB,eAAH,EAC5B,2BAD4B,CAAhC;AAGA;;;;;AAIA,UAAKC,QAAL,GAAgB,6DAAW,CAAC3qB,CAAC,CAAC4qB,SAAH,EAAc,qBAAd,CAA3B;AAEA;;;;;AAIA,UAAKC,gBAAL,GAAwB,6DAAW,CAAC7qB,CAAC,CAAC8qB,kBAAH,EAC/B,8BAD+B,CAAnC;AAGA;;;;;AAIA,UAAKC,YAAL,GAAoB,6DAAW,CAAC/qB,CAAC,CAACgrB,cAAH,EAAmB,oBAAnB,CAA/B;AAEA;;;;;AAIA,UAAKC,kBAAL,GAA0B,6DAAW,CAACjrB,CAAC,CAACkrB,qBAAH,EACjC,2BADiC,CAArC;AAGA;;;;;AAIA,UAAKC,OAAL,GAAe,6DAAW,CAACnrB,CAAC,CAACorB,QAAH,EAAa,iBAAb,CAA1B;AAEA;;;;;AAIA,UAAKC,iBAAL,GAAyB,6DAAW,CAACrrB,CAAC,CAACsrB,mBAAH,EAChC,uBADgC,CAApC;AAGA;;;;;AAIA,UAAKC,aAAL,GAAqB,6DAAW,CAACvrB,CAAC,CAACwrB,eAAH,EAC5B,qBAD4B,CAAhC;AAGA;;;;;AAIA,UAAKxiB,eAAL,GAAuB,6DAAW,CAAChJ,CAAC,CAACiJ,gBAAH,EAAqB,6CAArB,CAAlC;AA5IY;AA6If;AAED;;;;;AArJJ;AAAA;AAAA,2BAwJW;AAAA;;AACH,UAAI,KAAKnL,WAAT,EAAsB;AAClB;AACH;;AAED,UAAIL,EAAE,GAAG,KAAKA,EAAd;AACA,UAAII,OAAO,GAAG,KAAKA,OAAnB;AAEAA,aAAO,CAACuF,IAAR,CAAa,sBAAb,EAAqC,IAArC,EAA2C,CAAC,qDAAM,CAAC,KAAKqF,QAAN,CAAlD,EARG,CAUH;;AACA,UAAIgjB,SAAS,GAAG,sDAAS,CAAC,KAAD,CAAzB;AACAA,eAAS,CAACvyB,SAAV,GAAsB,KAAKyP,QAA3B,CAZG,CAcH;;AACA,UAAI+iB,UAAU,GAAG,sDAAS,CAAC,MAAD,CAA1B,CAfG,CAgBH;;AACA,UAAIC,cAAc,GAAG,sDAAS,CAAC,MAAD,CAA9B;AACAA,oBAAc,CAAC5xB,WAAf,CAA2B,uDAAU,CAAC,KAAKJ,IAAN,CAArC,EAlBG,CAoBH;;AACA,UAAI0P,QAAQ,GAAI,CAAC,KAAKZ,QAAP,GACXhL,EAAE,CAACC,OAAH,CAAW,SAAX,EAAsBsG,SAAtB,CAAgC,KAAKgF,eAArC,CADW,GAEX,gDAAG,CAAC,KAAKP,QAAN,CAFP,CArBG,CAyBH;;AACA,UAAI,CAAC,KAAKA,QAAV,EAAoB;AAChBgjB,iBAAS,CAAC1xB,WAAV,CAAsB4xB,cAAtB;AACAF,iBAAS,CAAC1xB,WAAV,CAAsB2xB,UAAtB;AACAriB,gBAAQ,CAACtP,WAAT,CAAqB0xB,SAArB;AACH,OAJD,MAIO;AACH;AACApiB,gBAAQ,CAACtP,WAAT,CAAqB4xB,cAArB;AACAtiB,gBAAQ,CAACtP,WAAT,CAAqB2xB,UAArB;AACH;;AAED,WAAK1nB,SAAL,GAAiBynB,SAAjB;AACA,WAAK3B,YAAL,GAAoB4B,UAApB;AACA,WAAK3B,cAAL,GAAsB4B,cAAtB,CAtCG,CAwCH;;AACA9tB,aAAO,CAACE,EAAR,CAAW,CAAC,kBAAD,CAAX,EAAiC;AAAA,eAAM,MAAI,CAAC6tB,OAAL,CAAa,MAAI,CAACzB,SAAlB,CAAN;AAAA,OAAjC;AACAtsB,aAAO,CAACE,EAAR,CAAW,CAAC,0BAAD,CAAX,EACI;AAAA,eAAM,MAAI,CAAC6tB,OAAL,CAAa,MAAI,CAACvB,WAAlB,CAAN;AAAA,OADJ;AAEAxsB,aAAO,CAACE,EAAR,CAAW,CAAC,oBAAD,CAAX,EACI;AAAA,eAAM,MAAI,CAAC6tB,OAAL,CAAa,MAAI,CAACnB,aAAlB,CAAN;AAAA,OADJ;AAEA5sB,aAAO,CAACE,EAAR,CAAW,CAAC,yBAAD,CAAX,EAAwC;AAAA,eACpC,MAAI,CAAC6tB,OAAL,CAAa,MAAI,CAACjB,QAAlB,CADoC;AAAA,OAAxC;AAEA9sB,aAAO,CAACE,EAAR,CAAW,CAAC,2BAAD,CAAX,EACI;AAAA,eAAM,MAAI,CAAC6tB,OAAL,CAAa,MAAI,CAACf,gBAAlB,CAAN;AAAA,OADJ;AAEAhtB,aAAO,CAACE,EAAR,CAAW,CAAC,mBAAD,CAAX,EACI;AAAA,eAAM,MAAI,CAAC6tB,OAAL,CAAa,MAAI,CAACb,YAAlB,CAAN;AAAA,OADJ;AAEAltB,aAAO,CAACE,EAAR,CAAW,CAAC,0BAAD,CAAX,EACI;AAAA,eAAM,MAAI,CAAC6tB,OAAL,CAAa,MAAI,CAACX,kBAAlB,CAAN;AAAA,OADJ;AAEAptB,aAAO,CAACE,EAAR,CAAW,CAAC,2BAAD,CAAX,EACI;AAAA,eAAM,MAAI,CAAC6tB,OAAL,CAAa,MAAI,CAACP,iBAAlB,CAAN;AAAA,OADJ;AAEAxtB,aAAO,CAACE,EAAR,CAAW,CAAC,uBAAD,CAAX,EACI;AAAA,eAAM,MAAI,CAAC6tB,OAAL,CAAa,MAAI,CAACL,aAAlB,CAAN;AAAA,OADJ;AAGA1tB,aAAO,CAACE,EAAR,CAAW4rB,MAAX,EAAmB;AAAA,eAAM,MAAI,CAACiC,OAAL,CAAa,EAAb,CAAN;AAAA,OAAnB;AAEA;;AACA,WAAK9tB,WAAL,GAAmB,IAAnB;AAEAD,aAAO,CAACuF,IAAR,CAAa,qBAAb,EAAoC,IAApC;AACH;AAED;;;;;AA3NJ;AAAA;AAAA,8BA+NoB;AAAA;;AAAA,UAAR8L,CAAQ,uEAAJ,EAAI;;AACZ,UAAI,CAAC,KAAKvQ,SAAL,EAAL,EAAuB;AACnB;AACH;;AAED,WAAKsrB,eAAL,CAAqB,KAAKxsB,EAA1B,EAA8ByR,CAA9B;AAEA,UAAII,CAAC,GAAGJ,CAAC,KAAK,EAAN,GAAW,KAAK8a,KAAhB,GAAwB,CAAhC;AACApf,MAAA,0CAAI,CAAC6M,UAAL,CAAgB,YAAM;AAClB,YAAI,CAAC,MAAI,CAAC3Z,WAAV,EAAuB;AACnB;AACH;;AACD,cAAI,CAACgsB,YAAL,CAAkB7kB,SAAlB,GAA8BiK,CAA9B;;AAEA,cAAI,CAACgb,cAAL,CAAoB,MAAI,CAACzsB,EAAzB,EAA6ByR,CAA7B;AACH,OAPD,EAOGI,CAPH;AAQH;AAED;;;;AAjPJ;AAAA;AAAA,8BAoPc;AAAA;;AACN,UAAI,CAAC,KAAKxR,WAAV,EAAuB;AACnB;AACH;;AAED,UAAID,OAAO,GAAG,KAAKA,OAAnB;AAEA,WAAKmG,SAAL,CAAeiB,SAAf,GAA2B,EAA3B;;AACA,UAAI,CAAC,KAAKwD,QAAV,EAAoB;AAChBnQ,QAAA,sDAAS,CAAC,KAAK0L,SAAN,CAAT;AACH;;AACD,WAAK+lB,cAAL,GAAsB,IAAtB;AACA,WAAKD,YAAL,GAAoB,IAApB;AACA,WAAK9lB,SAAL,GAAiB,IAAjB,CAbM,CAeN;;AACAnG,aAAO,CAACiC,GAAR,CAAY,CAAC,kBAAD,CAAZ,EAAkC;AAAA,eAAM,MAAI,CAAC8rB,OAAL,CAAa,MAAI,CAACzB,SAAlB,CAAN;AAAA,OAAlC;AACAtsB,aAAO,CAACiC,GAAR,CAAY,CAAC,0BAAD,CAAZ,EACI;AAAA,eAAM,MAAI,CAAC8rB,OAAL,CAAa,MAAI,CAACvB,WAAlB,CAAN;AAAA,OADJ;AAEAxsB,aAAO,CAACiC,GAAR,CAAY,CAAC,oBAAD,CAAZ,EACI;AAAA,eAAM,MAAI,CAAC8rB,OAAL,CAAa,MAAI,CAACnB,aAAlB,CAAN;AAAA,OADJ;AAEA5sB,aAAO,CAACiC,GAAR,CAAY,CAAC,yBAAD,CAAZ,EACI;AAAA,eAAM,MAAI,CAAC8rB,OAAL,CAAa,MAAI,CAACjB,QAAlB,CAAN;AAAA,OADJ;AAEA9sB,aAAO,CAACiC,GAAR,CAAY,CAAC,2BAAD,CAAZ,EACI;AAAA,eAAM,MAAI,CAAC8rB,OAAL,CAAa,MAAI,CAACf,gBAAlB,CAAN;AAAA,OADJ;AAEAhtB,aAAO,CAACiC,GAAR,CAAY,CAAC,mBAAD,CAAZ,EAAmC;AAAA,eAC/B,MAAI,CAAC8rB,OAAL,CAAa,MAAI,CAACb,YAAlB,CAD+B;AAAA,OAAnC;AAEAltB,aAAO,CAACiC,GAAR,CAAY,CAAC,0BAAD,CAAZ,EACI;AAAA,eAAM,MAAI,CAAC8rB,OAAL,CAAa,MAAI,CAACX,kBAAlB,CAAN;AAAA,OADJ;AAEAptB,aAAO,CAACiC,GAAR,CAAY,CAAC,2BAAD,CAAZ,EACI;AAAA,eAAM,MAAI,CAAC8rB,OAAL,CAAa,MAAI,CAACP,iBAAlB,CAAN;AAAA,OADJ;AAEAxtB,aAAO,CAACiC,GAAR,CAAY,CAAC,uBAAD,CAAZ,EACI;AAAA,eAAM,MAAI,CAAC8rB,OAAL,CAAa,MAAI,CAACL,aAAlB,CAAN;AAAA,OADJ;AAGA1tB,aAAO,CAACiC,GAAR,CAAY6pB,MAAZ,EAAoB;AAAA,eAAM,MAAI,CAACiC,OAAL,CAAa,EAAb,CAAN;AAAA,OAApB;AAEA,WAAK9tB,WAAL,GAAmB,KAAnB;AACH;AAzRL;;AAAA;AAAA,EAA+B,gDAA/B,E;;;;;;;;;;;;;;;;;;;;;;;ACzBA;AACA;AAEA,IAAM0T,IAAI,GAAG,0CAAI,CAACA,IAAlB;AACA,IAAMqa,YAAY,GAAG,0CAAI,CAACA,YAA1B;AACA,IAAMpa,QAAQ,GAAG,0CAAI,CAACA,QAAtB;AAEA;;;;AAGO,IAAMqa,UAAU,GAAG,SAAbA,UAAa,GAAM;AAC5B,SAAO,aAAa,0CAApB;AACH,CAFM;AAIP;;;;;;;AAMA,IAAaC,OAAb;AAAA;AAAA;AAEI;;;;;AAKA,mBAAY12B,KAAZ,EAAmB;AAAA;;AAEf;;;;;AAKA,SAAKA,KAAL,GAAaA,KAAb;AAEA;;;;;;AAKA,SAAKoI,EAAL,GAAUpI,KAAK,CAACoI,EAAhB;AAEA;;;;;;AAKA,SAAKspB,kBAAL,GAA0B1xB,KAAK,CAAC0xB,kBAAN,IAA4B+E,UAAU,EAAhE;AAEA;;;;;;AAKA,SAAK9E,YAAL,GAAoB3xB,KAAK,CAAC2xB,YAAN,IAAsB,CAAC,KAAKD,kBAAhD;AAEA;;;;;;AAKA,SAAKlpB,OAAL,GAAexI,KAAK,CAACwI,OAArB;AAEA;;;;;;AAKA,SAAKmuB,QAAL,GAAgB32B,KAAK,CAACsyB,cAAtB;AACH;AAGD;;;;;AArDJ;AAAA;AAAA,2BAwDW;AAAA;;AACH,WAAK9pB,OAAL,CAAaE,EAAb,CAAgB,CAAC,eAAD,CAAhB,EAAmC,UAACN,EAAD,EAAKpI,KAAL;AAAA,eAAe,KAAI,CAAC42B,IAAL,CAAU52B,KAAV,CAAf;AAAA,OAAnC;AACA,WAAKwI,OAAL,CAAaE,EAAb,CAAgB,CAAC,aAAD,CAAhB,EAAiC;AAAA,eAAM,KAAI,CAACoU,IAAL,EAAN;AAAA,OAAjC;AACH;AAED;;;;;;AA7DJ;AAAA;AAAA,yBAkES9c,KAlET,EAkEgB;AACR,UAAI,KAAK0xB,kBAAT,EAA6B;AACzB8E,oBAAY,CAAC,KAAKK,MAAL,EAAD,CAAZ,GAA8B1a,IAAI,CAACa,SAAL,CAAehd,KAAf,CAA9B;AACH,OAFD,MAEO;AACH82B,QAAA,+CAAM,CAAC91B,KAAP,CAAa,KAAK61B,MAAL,EAAb,EAA4B1a,IAAI,CAACa,SAAL,CAAehd,KAAf,CAA5B,EAAmD,KAAK22B,QAAxD;AACH;AACJ;AAED;;;;;;AA1EJ;AAAA;AAAA,+BA+Ee;AACP,UAAI32B,KAAK,GAAG,IAAZ;;AACA,UAAI,KAAK0xB,kBAAT,EAA6B;AACzB1xB,aAAK,GAAGw2B,YAAY,CAAC,KAAKK,MAAL,EAAD,CAApB;AACH,OAFD,MAEO;AACH72B,aAAK,GAAG,+CAAM,CAACyB,IAAP,CAAY,KAAKo1B,MAAL,EAAZ,CAAR;AACH;;AAED,UAAI,CAAC72B,KAAL,EAAY;AACR,eAAO,IAAP;AACH;;AACD,aAAOmc,IAAI,CAACpH,KAAL,CAAW/U,KAAX,CAAP;AACH;AAED;;;;AA7FJ;AAAA;AAAA,6BAgGa;AACL,UAAI,KAAK0xB,kBAAT,EAA6B;AACzB8E,oBAAY,CAACO,UAAb,CAAwB,KAAKF,MAAL,EAAxB;AACH,OAFD,MAEO;AACHC,QAAA,+CAAM,CAAC70B,MAAP,CAAc,KAAK40B,MAAL,EAAd;AACH;AACJ;AAED;;;;AAxGJ;AAAA;AAAA,2BA2GW;AACH,UAAI72B,KAAK,GAAG,KAAKg3B,QAAL,EAAZ;;AACA,UAAI,CAACh3B,KAAL,EAAY;AACR;AACH,OAJE,CAKH;;;AACA,WAAKA,KAAL,CAAWid,eAAX,CAA2Bjd,KAA3B;AACH;AAED;;;;;;AApHJ;AAAA;AAAA,6BAyHa;AACL,aAAOmc,IAAI,CAACa,SAAL,CAAe;AAClB6W,WAAG,YAAK,KAAKzrB,EAAL,CAAQ6uB,MAAb,cAAuB,KAAK7uB,EAAL,CAAQxD,EAA/B,CADe;AAElBsyB,YAAI,EAAE9a,QAAQ,CAAC+a;AAFG,OAAf,CAAP;AAIH;AAED;;;;AAhIJ;AAAA;AAAA,8BAmIc;AAAA;;AACN,WAAK3uB,OAAL,CAAaiC,GAAb,CAAiB,CAAC,eAAD,CAAjB,EAAoC,UAACrC,EAAD,EAAKpI,KAAL;AAAA,eAAe,MAAI,CAAC42B,IAAL,CAAU52B,KAAV,CAAf;AAAA,OAApC;AACA,WAAKwI,OAAL,CAAaiC,GAAb,CAAiB,CAAC,aAAD,CAAjB,EAAkC;AAAA,eAAM,MAAI,CAACqS,IAAL,EAAN;AAAA,OAAlC;AAEA,WAAK7a,MAAL;AAEA,WAAKjC,KAAL,GAAa,IAAb;AACA,WAAKwI,OAAL,GAAe,IAAf;AACH;AA3IL;;AAAA;AAAA,I;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AAEA,IAAM8rB,MAAM,GAAG,CACX,sBADW,EAEX,wBAFW,CAAf;AAKA;;AACO,IAAM8C,IAAI,GAAG,MAAb;AACP;;AACO,IAAMC,KAAK,GAAG,OAAd;AACP;;AACO,IAAMC,MAAM,GAAG,QAAf;AAEP;;;;;;;AAMA,IAAaC,OAAb;AAAA;AAAA;AAAA;;AAEI;;;;;AAKA,mBAAYnvB,EAAZ,EAAgB;AAAA;;AAAA;;AACZ,iFAAMA,EAAN,EAAU,SAAV,GADY,CAGZ;;AACA,QAAIuC,CAAC,GAAG,MAAKpC,MAAL,CAAY1H,OAAZ,IAAuB,EAA/B;AAEA;;;;;AAIA,UAAKgX,YAAL,GAAoB,6DAAW,CAAClN,CAAC,CAACsT,mBAAH,EAAwB,KAAxB,CAA/B;AAEA;;;;;AAIA,UAAKuZ,aAAL,GAAqB,6DAAW,CAAC7sB,CAAC,CAAC8sB,mBAAH,EAAwB,MAAxB,CAAhC;AAEA;;;;;AAIA,UAAKC,aAAL,GAAqB,6DAAW,CAAC/sB,CAAC,CAACgtB,oBAAH,EAAyB,MAAzB,CAAhC;AAEA;;;;;AAIA,UAAKC,aAAL,GAAqB,6DAAW,CAACjtB,CAAC,CAACktB,qBAAH,EAA0B,MAA1B,CAAhC;AAEA;;;;;AAIA,UAAKva,KAAL,GAAa,6DAAW,CAAC3S,CAAC,CAAC0I,SAAH,EAAc,IAAd,CAAxB;AAEA;;;;;;AAKA,UAAKU,IAAL,GAAY,IAAZ;AAEA;;;;;;AAKA,UAAK+jB,KAAL,GAAa,IAAb;AAEA;;;;;;;AAMA,UAAKC,KAAL,GAAa,IAAb;AAEA;;;;;;AAKA,UAAKC,KAAL,GAAa,IAAb;AAEA;;;;;AAIA,UAAKC,SAAL,GAAiB;AACbC,UAAI,EAAE,IADO;AAEbC,YAAM,EAAE,IAFK;AAGbC,WAAK,EAAE;AAHM,KAAjB;;AAMA,UAAK5vB,OAAL,CAAaE,EAAb,CAAgB4rB,MAAhB,EACI,UAACjsB,OAAD,EAAUqG,UAAV;AAAA,aAAyB,MAAK5F,IAAL,CAAU4F,UAAV,CAAzB;AAAA,KADJ;AAGA;;;AACA,UAAKpG,OAAL,GAAe,IAAf;AA/EY;AAgFf;AAED;;;;;;;AAzFJ;AAAA;AAAA,yBA8FSoG,UA9FT,EA8FqB;AACb,UAAI,KAAKjG,WAAL,IAAoBiG,UAAxB,EAAoC;AAChC;AACH;;AAED,UAAItG,EAAE,GAAG,KAAKA,EAAd,CALa,CAOb;;AACA,UAAIuG,SAAS,GAAG,sDAAS,CAAC,KAAD,CAAzB;AACAA,eAAS,CAAC9K,SAAV,GAAsB,KAAKgU,YAA3B,CATa,CAWb;;AACA,UAAI,KAAKyF,KAAT,EAAgB;AACZnY,QAAA,gDAAG,CAAC,KAAKmY,KAAN,CAAH,CAAgB5Y,WAAhB,CAA4BiK,SAA5B;AACH,OAFD,CAGA;AAHA,WAIK,IAAIvG,EAAE,CAAClI,UAAP,EAAmB;AACpB,cAAIA,UAAU,GAAGkI,EAAE,CAACiwB,GAAH,CAAOn4B,UAAxB;AACAA,oBAAU,CAACgZ,WAAX,CAAuBxU,WAAvB,CAAmCiK,SAAnC;AACAA,mBAAS,CAAC9K,SAAV,GAAsB3D,UAAU,CAAC+X,cAAjC;AACH,SAJI,CAKL;AALK,aAMA;AACD,gBAAIlE,IAAI,GAAG,sDAAS,CAAC,SAAD,CAApB;AACAA,gBAAI,CAACrP,WAAL,CAAiBiK,SAAjB;AACAvG,cAAE,CAAC+B,GAAH,GAASwP,YAAT,CAAsB5F,IAAtB,EAA4B3L,EAAE,CAAC+B,GAAH,GAASiK,UAArC;AACH;;AACD,WAAKL,IAAL,GAAYpF,SAAZ,CA3Ba,CA6Bb;;AACA,WAAKmpB,KAAL,GAAa,KAAKpe,eAAL,CAAqB/K,SAArB,EAAgC,KAAK6oB,aAArC,CAAb,CA9Ba,CAgCb;;AACA,WAAKO,KAAL,GAAa,KAAKre,eAAL,CAAqB/K,SAArB,EAAgC,KAAK+oB,aAArC,CAAb,CAjCa,CAmCb;;AACA,WAAKM,KAAL,GAAa,KAAKte,eAAL,CAAqB/K,SAArB,EAAgC,KAAKipB,aAArC,CAAb;AAEA,WAAKK,SAAL,GAAiB;AACbC,YAAI,EAAE,KAAKJ,KADE;AAEbK,cAAM,EAAE,KAAKH,KAFA;AAGbI,aAAK,EAAE,KAAKL;AAHC,OAAjB;AAMA;;AACA,WAAKtvB,WAAL,GAAmB,IAAnB,CA7Ca,CA+Cb;;AACA,UAAI,sDAAO,CAACL,EAAE,CAACtI,IAAJ,CAAX,EAAsB;AAClB;AACA;AACAsI,UAAE,CAACiwB,GAAH,CAAOv4B,IAAP,CAAY+I,MAAZ;AACA,aAAKL,OAAL,CAAauF,IAAb,CAAkB,WAAlB,EAA+B3F,EAA/B;AACH;AACJ;AAED;;;;;;;;AAtJJ;AAAA;AAAA,gCA6JoC;AAAA,UAAtBkwB,QAAsB,uEAAXjB,KAAW;AAAA,UAAJx0B,EAAI;AAC5B,UAAIkR,IAAI,GAAG,KAAKkkB,SAAL,CAAeK,QAAf,CAAX;;AACA,UAAIz1B,EAAJ,EAAQ;AACJkR,YAAI,CAACrP,WAAL,CAAiB7B,EAAjB;AACH;;AACD,aAAOkR,IAAP;AACH;AAED;;;;;;;AArKJ;AAAA;AAAA,oCA2KoBpF,SA3KpB,EA2K+B4pB,GA3K/B,EA2KoC;AAC5B,UAAIlqB,GAAG,GAAG,sDAAS,CAAC,KAAD,EAAQ,CAAC,OAAD,EAAUkqB,GAAV,CAAR,CAAnB;AACA5pB,eAAS,CAACjK,WAAV,CAAsB2J,GAAtB;AACA,aAAOA,GAAP;AACH;AAED;;;;AAjLJ;AAAA;AAAA,8BAoLc;AACN,UAAI,CAAC,KAAK5F,WAAV,EAAuB;AACnB;AACH;;AAED,UAAIL,EAAE,GAAG,KAAKA,EAAd;AAEAnF,MAAA,sDAAS,CAAC,KAAK8Q,IAAN,CAAT;AACA,WAAKA,IAAL,GAAY,IAAZ;AAEA,UAAIwF,GAAG,GAAGnR,EAAE,CAAC+B,GAAH,EAAV;AACA,UAAIquB,QAAQ,GAAG,gDAAG,CAACjf,GAAD,EAAM,SAAN,CAAlB;AACA,SAAG1T,OAAH,CAAWM,IAAX,CAAgBqyB,QAAhB,EAA0B,UAAC31B,EAAD;AAAA,eAAQ,sDAAS,CAACA,EAAD,CAAjB;AAAA,OAA1B;AAEA;;AACA,WAAK4F,WAAL,GAAmB,KAAnB;AACH;AApML;;AAAA;AAAA,EAA6B,gDAA7B,E,CAuMA;;AACA8uB,OAAO,CAACzY,iBAAR,GAA4B,IAA5B,C;;;;;;;;;;;;;;;AC/NA;AAEA;;;;;;;;;AAQO,IAAM/J,KAAK,GAAG,SAARA,KAAQ,CAAC9T,KAAD,EAA0B;AAAA,MAAlB0K,OAAkB,uEAAR,GAAQ;;AAC3C;AACA,MAAI,uDAAQ,CAAC1K,KAAD,CAAZ,EAAqB;AACjB,WAAOA,KAAP;AACH,GAJ0C,CAM3C;AACA;;;AACA,MAAIw3B,KAAK,GAAG,IAAI10B,MAAJ,CAAW,WAAW4H,OAAX,GAAqB,GAAhC,EAAqC,CAAC,GAAD,CAArC,CAAZ;AACA,MAAI+sB,WAAW,GAAGC,UAAU,CACxB,CAAC,KAAK13B,KAAN,GACI;AACCmD,SAFL,CAEa,UAFb,EAEyB,KAFzB,EAGI;AAHJ,GAIKA,OAJL,CAIaq0B,KAJb,EAIoB,EAJpB,EAKI;AALJ,GAMKr0B,OANL,CAMauH,OANb,EAMsB,GANtB,CADwB,CAA5B,CAT2C,CAmB3C;;AACA,SAAO,CAAC1B,KAAK,CAACyuB,WAAD,CAAN,GAAsBA,WAAtB,GAAoC,CAA3C;AACH,CArBM,C;;;;;;;;;;;;;;;;ACVP;;;AAGO,IAAMnjB,IAAI,GAAI,QAAOqjB,IAAP,yCAAOA,IAAP,OAAgB,QAAhB,IAA4BA,IAAI,CAACA,IAAL,KAAcA,IAA1C,IAAkDA,IAAnD,IACf,QAAOC,MAAP,yCAAOA,MAAP,OAAkB,QAAlB,IAA8BA,MAAM,CAACA,MAAP,KAAkBA,MAAhD,IAA0DA,MAD3C,IAEhB,SAFG,C;;;;;;;;;;;;;;;;;;;;ACHP;AAEA;;AAEA;;;;;;;;AAOO,IAAMC,YAAY,GACrB,SADSA,YACT,CAAC96B,GAAD,EAAM+6B,UAAN;AAAA,SAAqB,wDAAS,CAAC/6B,GAAD,CAAT,GAAiBA,GAAjB,GAAuB+6B,UAA5C;AAAA,CADG;AAGP;;;;;;;;AAOO,IAAMC,WAAW,GACpB,SADSA,WACT,CAACh7B,GAAD,EAAM+6B,UAAN;AAAA,SAAqB,uDAAQ,CAAC/6B,GAAD,CAAR,GAAgBA,GAAhB,GAAsB+6B,UAA3C;AAAA,CADG;AAGP;;;;;;;;AAOO,IAAME,UAAU,GACnB,SADSA,UACT,CAACj7B,GAAD,EAAM+6B,UAAN;AAAA,SAAqB9uB,KAAK,CAACjM,GAAD,CAAL,GAAa+6B,UAAb,GAA0B/6B,GAA/C;AAAA,CADG;AAGP;;;;;;;;AAOO,IAAMk7B,WAAW,GACpB,SADSA,WACT,CAACl7B,GAAD,EAAM+6B,UAAN;AAAA,SAAqB,sDAAO,CAAC/6B,GAAD,CAAP,GAAeA,GAAf,GAAqB+6B,UAA1C;AAAA,CADG;AAGP;;;;;;;;AAOO,IAAMI,UAAU,GACnB,SADSA,UACT,CAACn7B,GAAD,EAAM+6B,UAAN;AAAA,SAAqB,mDAAI,CAAC/6B,GAAD,CAAJ,GAAYA,GAAZ,GAAkB+6B,UAAvC;AAAA,CADG,C;;;;;;;;;;;;;;;;;;;;;;;ACnDP;AACA;AAEA;;AAEA;;;;;;;;;AAQO,IAAMK,UAAU,GAAG,SAAbA,UAAa,CAACC,CAAD,EAAIC,CAAJ,EAAU;AAChC,MAAIC,CAAC,GAAGF,CAAC,CAAC5iB,WAAF,EAAR;AACA,MAAI9F,CAAC,GAAG2oB,CAAC,CAAC7iB,WAAF,EAAR;AACA,SAAO8iB,CAAC,GAAG5oB,CAAJ,GAAQ,CAAC,CAAT,GAAc4oB,CAAC,GAAG5oB,CAAJ,GAAQ,CAAR,GAAY,CAAjC;AACH,CAJM;AAMP;;;;;;;AAMO,IAAM6oB,UAAU,GAAG,SAAbA,UAAa,CAACH,CAAD,EAAIC,CAAJ;AAAA,SAAWD,CAAC,GAAGC,CAAf;AAAA,CAAnB;AAEP;;;;;;;AAMO,IAAMG,WAAW,GAAG,SAAdA,WAAc,CAACJ,CAAD,EAAIC,CAAJ;AAAA,SAAWA,CAAC,GAAGD,CAAf;AAAA,CAApB;AAEP;;;;;;;;AAOO,IAAMK,WAAW,GAAG,SAAdA,WAAc,CAACC,KAAD,EAAQC,KAAR;AAAA,SAAkBD,KAAK,CAACt4B,OAAN,KAAkBu4B,KAAK,CAACv4B,OAAN,EAApC;AAAA,CAApB;AAEP;;;;;;;;AAOO,IAAMw4B,YAAY,GAAG,SAAfA,YAAe,CAACF,KAAD,EAAQC,KAAR;AAAA,SAAkBA,KAAK,CAACv4B,OAAN,KAAkBs4B,KAAK,CAACt4B,OAAN,EAApC;AAAA,CAArB;AAEP;;;;;;;;AAOO,IAAMy4B,aAAa,GAAG,SAAhBA,aAAgB,CAACruB,SAAD,EAA8B;AAAA,MAAlBE,OAAkB,uEAAR,GAAQ;AACvD,SAAO,UAACouB,OAAD,EAAUC,OAAV,EAAsB;AACzB,QAAIC,IAAI,GAAG,qDAAO,CAACF,OAAD,EAAUpuB,OAAV,CAAlB;AACA,QAAIuuB,IAAI,GAAG,qDAAO,CAACF,OAAD,EAAUruB,OAAV,CAAlB;AACA,WAAOF,SAAS,CAACwuB,IAAD,EAAOC,IAAP,CAAhB;AACH,GAJD;AAKH,CANM;AAQP;;;;;;;;AAOO,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAAC1uB,SAAD,EAAiC;AAAA,MAArBI,MAAqB,uEAAZ,OAAY;AACxD,SAAO,UAACuuB,QAAD,EAAWC,QAAX,EAAwB;AAC3B,QAAIV,KAAK,GAAG,+CAAS,CAAC7kB,MAAV,CAAiBslB,QAAjB,EAA2BvuB,MAA3B,CAAZ;AACA,QAAI+tB,KAAK,GAAG,+CAAS,CAAC9kB,MAAV,CAAiBulB,QAAjB,EAA2BxuB,MAA3B,CAAZ;AACA,WAAOJ,SAAS,CAACkuB,KAAD,EAAQC,KAAR,CAAhB;AACH,GAJD;AAKH,CANM,C;;;;;;;;;;;;;;;;;;;;;AC3EP;AAEA;;;;AAIA;;;;;;AAKO,IAAMU,IAAI,GAAG,SAAPA,IAAO,CAACh2B,IAAD,EAAU;AAC1B,MAAIA,IAAI,CAACg2B,IAAT,EAAe;AACX,WAAOh2B,IAAI,CAACg2B,IAAL,EAAP;AACH;;AACD,SAAOh2B,IAAI,CAACF,OAAL,CAAa,YAAb,EAA2B,EAA3B,CAAP;AACH,CALM;AAOP;;;;;;AAKO,IAAMm2B,OAAO,GAAG,SAAVA,OAAU,CAACj2B,IAAD;AAAA,SAAUg2B,IAAI,CAACh2B,IAAD,CAAJ,KAAe,EAAzB;AAAA,CAAhB;AAEP;;;;;;AAKO,IAAMk2B,MAAM,GAAG,SAATA,MAAS,CAACl2B,IAAD,EAAU;AAC5B,MAAIm2B,KAAK,GAAG,wBAAZ;AACA,MAAIC,QAAQ,GAAG,MAAf;AACA,SAAOC,MAAM,CAACr2B,IAAD,CAAN,CAAaF,OAAb,CAAqBq2B,KAArB,EAA4BC,QAA5B,CAAP;AACH,CAJM;AAMP;;;;;;;AAMO,IAAME,SAAS,GAAG,SAAZA,SAAY,CAACt2B,IAAD,EAAiC;AAAA,MAA1BrG,aAA0B,uEAAV,KAAU;;AACtD,MAAI,CAACA,aAAL,EAAoB;AAChB,WAAOqG,IAAI,CAACmS,WAAL,EAAP;AACH;;AACD,SAAOnS,IAAP;AACH,CALM;AAOP;;;;;;;;;;AASO,IAAMV,QAAQ,GAAG,SAAXA,QAAW,CAACub,IAAD,EAAOzc,IAAP,EACS;AAAA,MADIm4B,UACJ,uEADiB,KACjB;AAAA,MADwB58B,aACxB,uEADwC,KACxC;AAAA,MAA7B68B,gBAA6B,uEAAV,KAAU;AAC7B;AACA;AACA,MAAIC,MAAJ;AACA,MAAIC,QAAQ,GAAG/8B,aAAa,GAAG,GAAH,GAAS,IAArC;;AACA,MAAI68B,gBAAJ,EAAsB;AAClB3b,QAAI,GAAG,yDAAgB,CAACA,IAAD,CAAvB;AACAzc,QAAI,GAAG,yDAAgB,CAACA,IAAD,CAAvB;AACH;;AACD,MAAIm4B,UAAJ,EAAgB;AACZE,UAAM,GAAG,IAAIh3B,MAAJ,CAAW,YAAYy2B,MAAM,CAACrb,IAAD,CAAlB,GAA2B,SAAtC,EACL6b,QADK,CAAT;AAEH,GAHD,MAGO;AACHD,UAAM,GAAG,IAAIh3B,MAAJ,CAAWy2B,MAAM,CAACrb,IAAD,CAAjB,EAAyB6b,QAAzB,CAAT;AACH;;AACD,SAAOD,MAAM,CAACxZ,IAAP,CAAY7e,IAAZ,CAAP;AACH,CAjBM;AAmBP;;;;;;;AAMO,IAAMu4B,WAAW,GAAG,SAAdA,WAAc,GAAe;AAAA,MAAd32B,IAAc,uEAAP,EAAO;AAACkR,SAAO,CAAC0lB,GAAR,CAAY,IAAZ,EAAkB52B,IAAlB;AACvC,SAAOA,IAAI,CAACF,OAAL,CAAa,uBAAb,EAAsC,UAACN,KAAD,EAAQq3B,EAAR,EAAYC,EAAZ,EAAmB;AAC5D,QAAIA,EAAJ,EAAQ;AACJ5lB,aAAO,CAAC0lB,GAAR,CAAY,KAAZ,EAAmBE,EAAE,CAACC,WAAH,EAAnB;AACA,aAAOD,EAAE,CAACC,WAAH,EAAP;AACH;;AACD7lB,WAAO,CAAC0lB,GAAR,CAAY,KAAZ,EAAmBC,EAAE,CAAC1kB,WAAH,EAAnB;AACA,WAAO0kB,EAAE,CAAC1kB,WAAH,EAAP;AACH,GAPM,CAAP;AAQH,CATM,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnFP;AACA;AAGA;AACA;AAIA;AACA;AAKA;AACA;AACA;AACA;AAEA;AAOA,IAAI3V,GAAG,GAAG,0CAAI,CAACC,QAAf;AAEA;;;;;;;AAMA,IAAau6B,WAAb;AAAA;AAAA;AAEI;;;;;;;;AAQA,yBAAqB;AAAA;;AAAA;;AACjB;;;;;AAKA,SAAK12B,EAAL,GAAU,IAAV;AAEA;;;;;AAIA,SAAKyZ,OAAL,GAAe,QAAf;AAEA;;;;;;AAKA,SAAKC,IAAL,GAAY,IAAIld,IAAJ,GAAWm6B,WAAX,EAAZ;AAEA;;;;;;AAKA,SAAKhiB,GAAL,GAAW,IAAX;AAEA;;;;;;AAKA,SAAK4B,MAAL,GAAc,IAAd;AAEA;;;;;;AAKA,SAAKC,UAAL,GAAkB,IAAlB;AAEA;;;;;;AAKA,SAAKoW,GAAL,GAAW,EAAX;AAEA;;;;;;AAKA,SAAKhF,gBAAL,GAAwB,CAAxB;AAEA;;;;;;AAKA,SAAKnc,OAAL,GAAe,IAAf;AAEA;;;;;;AAKA,SAAKmrB,SAAL,GAAiB,KAAjB;AAEA;;AACA,SAAK/yB,WAAL,GAAmB,KAAnB;AAEA,QAAI4f,QAAJ,CAzEiB,CA2EjB;;AA3EiB,sCAANoT,IAAM;AAANA,UAAM;AAAA;;AA4EjBA,QAAI,CAAC51B,OAAL,CAAa,UAAC9C,GAAD,EAAS;AAClB,UAAI,QAAOA,GAAP,MAAe,QAAf,IAA2BA,GAAG,CAAC24B,QAAJ,KAAiB,OAAhD,EAAyD;AACrD,aAAI,CAACniB,GAAL,GAAWxW,GAAX;AACA,aAAI,CAAC6B,EAAL,GAAU7B,GAAG,CAAC6B,EAAJ,iBAAgB,IAAIxD,IAAJ,GAAWC,OAAX,EAAhB,MAAV;AACA,aAAI,CAACkY,GAAL,CAAS3U,EAAT,GAAc,KAAI,CAACA,EAAnB;AACH,OAJD,MAIO,IAAI,uDAAQ,CAAC7B,GAAD,CAAZ,EAAmB;AACtB,aAAI,CAAC6B,EAAL,GAAU7B,GAAV;AACA,aAAI,CAACwW,GAAL,GAAW,gDAAG,CAACxW,GAAD,CAAd;AACH,OAHM,MAGA,IAAI,uDAAQ,CAACA,GAAD,CAAZ,EAAmB;AACtBslB,gBAAQ,GAAGtlB,GAAX;AACH,OAFM,MAEA,IAAI,oDAAK,CAACA,GAAD,CAAT,EAAgB;AACnB,aAAI,CAACyuB,GAAL,GAAWzuB,GAAX;AACA,aAAI,CAACy4B,SAAL,GAAiB,IAAjB;AACH;AACJ,KAdD;;AAgBA,QAAI,CAAC,KAAKjiB,GAAN,IAAa,KAAKA,GAAL,CAASmiB,QAAT,KAAsB,OAAvC,EAAgD;AAC5C,YAAM,IAAI9yB,KAAJ,yFAAN;AAEH;;AAED,QAAI,KAAK2f,SAAL,CAAe,IAAf,MAAyB,CAA7B,EAAgC;AAC5B,YAAM,IAAI3f,KAAJ,2FAAN;AAEH,KApGgB,CAsGjB;;;AACA,QAAI+B,CAAC,GAAG,KAAK6mB,GAAb;AAEA;;;;;AAIA,SAAKhpB,OAAL,GAAe,IAAI,gDAAJ,EAAf,CA7GiB,CA+GjB;;AACA,SAAK2S,MAAL,GAAc,sDAAO,CAACkN,QAAD,CAAP,GAAoB,CAApB,GAAyBA,QAAQ,GAAG,CAAlD;AAEA;;;;;;AAKA,SAAKsT,WAAL,GAAmB,GAAGC,GAAH,CAAOz1B,IAAP,CACf,CAAC,KAAKgE,GAAL,GAAWD,IAAX,CAAgB,KAAKiR,MAArB,KAAgC,KAAKhR,GAAL,GAAWD,IAAX,CAAgB,CAAhB,CAAjC,EAAqD6F,KADtC,EAEf,UAACyL,IAAD,EAAO9R,GAAP,EAAe;AACX,UAAIsL,OAAO,GAAG,KAAI,CAACwc,GAAL,eAAgB9nB,GAAhB,EAAd;;AACA,aAAO,CAACsL,OAAD,GAAW,6CAAX,GAAmBA,OAAO,CAACyB,WAAR,EAA1B;AACH,KALc,CAAnB;AAOA;;;;;AAIA,SAAKolB,QAAL,GAAgB,6DAAW,CAAClxB,CAAC,CAACmxB,SAAH,EAAc,cAAd,CAA3B;AAEA;;AAEA;;;;;AAIA,SAAKxiB,OAAL,GAAe,8DAAY,CAAC3O,CAAC,CAACoxB,IAAH,EAAS,IAAT,CAA3B;AAEA;;;;;AAIA,SAAK77B,UAAL,GAAkB,oDAAK,CAACyK,CAAC,CAAC6M,WAAH,CAAL,IAAwBrZ,OAAO,CAACwM,CAAC,CAAC6M,WAAH,CAAjD;AAEA;;;;;AAIA,SAAKiD,eAAL,GAAuB,4DAAU,CAAC9P,CAAC,CAACqxB,iBAAH,EAAsB,CAAtB,CAAjC;AAEA;;;;;AAIA,SAAK5gB,UAAL,GAAkB,4DAAU,CAACzQ,CAAC,CAACyN,iBAAH,EACvB,KAAKqC,eAAL,KAAyB,CAAzB,GAA6B,CAA7B,GAAiC,CADV,CAA5B;AAGA;;;;;AAIA,SAAKoB,UAAL,GAAkB,6DAAW,CAAClR,CAAC,CAACsxB,gBAAH,EAAqB,gDAArB,CAA7B;AAEA;;;;;;AAKA,SAAKltB,MAAL,GAAc,EAAd;AAEA;;;;;;AAKA,SAAKxF,cAAL,GAAsB,EAAtB;AAEA;;AACA;;;;;AAIA,SAAK2yB,SAAL,GAAiB,KAAKC,YAAL,EAAjB;AAEA;;;;;AAIA,SAAKC,UAAL,GAAkB,KAAKC,iBAAL,EAAlB;AAEA;;;;;;AAKA,SAAKC,YAAL,GAAoB,KAAK13B,EAAL,GAAU,QAA9B;AAEA;;;;;AAIA,SAAK23B,eAAL,GAAuB,6DAAW,CAAC5xB,CAAC,CAAC6xB,kBAAH,EAAuB,QAAvB,CAAlC;AAEA;;;;;AAIA,SAAK9oB,WAAL,GAAmB,8DAAY,CAAC/I,CAAC,CAAC8xB,YAAH,EAAiB,IAAjB,CAA/B;AAEA;;;;;AAIA,SAAK/7B,aAAL,GAAqBvC,OAAO,CAACwM,CAAC,CAAC+xB,cAAH,CAA5B;AAEA;;;;;AAIA,SAAKrhB,SAAL,GAAiB,6DAAW,CAAC1Q,CAAC,CAACgyB,UAAH,EAAe,EAAf,CAA5B;AAEA;;;;AAGA,SAAKjkB,eAAL,GAAuB,4DAAU,CAAC/N,CAAC,CAACgO,iBAAH,EAAsB,GAAtB,CAAjC;AAEA;;;;;AAIA,SAAKjC,WAAL,GAAmB,6DAAW,CAAC/L,CAAC,CAACiyB,aAAH,EAAkB,KAAlB,CAA9B;AAEA;;;;;AAIA,SAAKjmB,gBAAL,GAAwB,6DAAW,CAAChM,CAAC,CAACkyB,mBAAH,EAAwB,WAAxB,CAAnC;AAEA;;;;;AAIA,SAAKC,gBAAL,GAAwB,6DAAW,CAACnyB,CAAC,CAACoyB,mBAAH,EAAwB,OAAxB,CAAnC;AAEA;;;;;AAIA,SAAKC,iBAAL,GAAyB,6DAAW,CAAC,CAACryB,CAAC,CAACsyB,aAAF,IAAmB,EAApB,EAAwB1pB,SAAzB,EAChC,YADgC,CAApC;AAGA;;AAEA;;;;;AAIA,SAAK2pB,QAAL,GAAgB,8DAAY,CAACvyB,CAAC,CAACwyB,SAAH,EAAc,IAAd,CAA5B;AAEA;;;;;AAIA,SAAKC,cAAL,GAAsB,4DAAU,CAACzyB,CAAC,CAAC0yB,gBAAH,EAAqB,+CAArB,CAAhC;AAEA;;;;;AAIA,SAAKC,aAAL,GAAqB,4DAAU,CAAC3yB,CAAC,CAAC4yB,eAAH,EAAoB,+CAApB,CAA/B;AAEA;;;;;AAIA,SAAKt/B,aAAL,GAAqBE,OAAO,CAACwM,CAAC,CAAC6yB,cAAH,CAA5B;AAEA;;;;;;;AAMA,SAAKC,kBAAL,GAA0B,sDAAO,CAAC9yB,CAAC,CAAC+yB,mBAAH,CAAjC;AAEA;;;;;AAIA,SAAKC,eAAL,GAAuB,KAAKF,kBAAL,GACnB9yB,CAAC,CAAC+yB,mBADiB,GACK,EAD5B;AAGA;;;;;AAIA,SAAK7C,UAAL,GAAkB18B,OAAO,CAACwM,CAAC,CAACizB,WAAH,CAAzB;AAEA;;;;;AAIA,SAAK9C,gBAAL,GAAwBnwB,CAAC,CAACkzB,iBAA1B;AAEA;;;;;AAIA,SAAKvxB,aAAL,GAAqBnO,OAAO,CAACwM,CAAC,CAACmzB,cAAH,CAA5B;AAEA;;;;;;AAKA,SAAKrxB,sBAAL,GAA8BtO,OAAO,CAACwM,CAAC,CAACozB,wBAAH,CAArC;AAEA;;;;;;AAKA,SAAKnxB,cAAL,GAAsB,IAAtB;AAEA;;;;;;AAKA,SAAKoxB,eAAL,GAAuB7/B,OAAO,CAAC,sDAAO,CAACwM,CAAC,CAACszB,YAAH,CAAP,IAC3BtzB,CAAC,CAACszB,YAAF,CAAe3/B,MAAf,GAAwB,CADE,CAA9B;AAGA;;;;;AAIA,SAAK8R,WAAL,GAAmB,6DAAW,CAACzF,CAAC,CAACszB,YAAH,EAAiB,EAAjB,CAA9B;AAEA;;;;;AAIA,SAAKpvB,cAAL,GAAsB,6DAAW,CAAClE,CAAC,CAACuzB,gBAAH,EAAqB,EAArB,CAAjC;AAEA;;;;;AAIA,SAAKC,eAAL,GAAuB,4DAAU,CAACxzB,CAAC,CAACyzB,iBAAH,EAAsB,+CAAtB,CAAjC;AAEA;;;;;AAIA,SAAKC,SAAL,GAAiB,oDAAK,CAAC1zB,CAAC,CAACsyB,aAAH,CAAL,IACb9+B,OAAO,CAACwM,CAAC,CAACsyB,aAAH,CADX;AAGA;;;;;;;;AAOA,SAAKqB,oBAAL,GAA4B,oDAAK,CAAC3zB,CAAC,CAACsyB,aAAH,CAAL,IACxB,sDAAO,CAACtyB,CAAC,CAACsyB,aAAF,CAAgBsB,YAAjB,CADiB,GAExB5zB,CAAC,CAACsyB,aAAF,CAAgBsB,YAFQ,GAEO,EAFnC;AAIA;;;;;AAIA,SAAKC,cAAL,GAAsB,4DAAU,CAAC7zB,CAAC,CAAC8zB,gBAAH,EAAqB,+CAArB,CAAhC;AAEA;;;;;;;;;;;;;AAYA,SAAKC,UAAL,GAAkB,oDAAK,CAAC/zB,CAAC,CAACg0B,WAAH,CAAL,IAAwB,mDAAI,CAACh0B,CAAC,CAACg0B,WAAF,CAAc5pB,KAAf,CAA5B,IACd,sDAAO,CAACpK,CAAC,CAACg0B,WAAF,CAAc7iB,IAAf,CADO,GAEdnR,CAAC,CAACg0B,WAFY,GAEE;AAAE7iB,UAAI,EAAE,EAAR;AAAY/G,WAAK,EAAE,+CAAA6pB;AAAnB,KAFpB;AAIA;;;;;;AAKA,SAAKC,SAAL,GAAiBl0B,CAAC,CAACk0B,SAAF,IAAe,EAAhC;AAEA;;;;;;AAKA,SAAKC,gBAAL,GAAwB,sDAAO,CAAC,KAAKD,SAAN,CAA/B;AAEA;;;;;AAIA,SAAK/+B,IAAL,GAAY,sDAAO,CAAC6K,CAAC,CAAC0S,iBAAH,CAAP,GAA+BtR,SAA/B,GACP,oDAAK,CAACpB,CAAC,CAAC0S,iBAAH,CAAL,IAA8Blf,OAAO,CAACwM,CAAC,CAAC0S,iBAAH,CAD1C;AAGA;;;;;AAIA,SAAKnC,YAAL,GAAoB,oDAAK,CAACvQ,CAAC,CAACwiB,aAAH,CAAL,IAA0BhvB,OAAO,CAACwM,CAAC,CAACwiB,aAAH,CAArD;AAEA;;;;;AAIA,SAAKltB,iBAAL,GAAyB,oDAAK,CAAC0K,CAAC,CAAC2X,mBAAH,CAAL,IACrBnkB,OAAO,CAACwM,CAAC,CAAC2X,mBAAH,CADX;AAGA;;AACA;;;;;AAIA,SAAKyc,eAAL,GAAuB,6DAAW,CAACp0B,CAAC,CAACq0B,iBAAH,EAAsB,OAAtB,CAAlC;AAEA;;;;;AAIA,SAAK3tB,iBAAL,GAAyBlT,OAAO,CAACwM,CAAC,CAACs0B,mBAAH,CAAhC;AAEA;;;;;AAIA,SAAKztB,SAAL,GAAiB,6DAAW,CAAC7G,CAAC,CAACu0B,UAAH,EAAe,SAAf,CAA5B;AAEA;;;;;;AAKA,SAAKztB,oBAAL,GAA4BtT,OAAO,CAACwM,CAAC,CAACw0B,uBAAH,CAAnC;AAEA;;;;;AAIA,SAAKvtB,YAAL,GAAoB,6DAAW,CAACjH,CAAC,CAACkL,cAAH,EAAmB,aAAnB,CAA/B;AAEA;;;;;;AAKA,SAAKI,WAAL,GAAmB,8DAAY,CAACtL,CAAC,CAACy0B,SAAH,EAAc,IAAd,CAA/B;AAEA;;;;;;AAKA,SAAK7zB,OAAL,GAAe,sDAAO,CAACZ,CAAC,CAAC00B,WAAH,CAAP,GAAyB,IAAzB,GACX,sDAAO,CAAC10B,CAAC,CAAC00B,WAAH,CAAP,GAAyB10B,CAAC,CAAC00B,WAA3B,GAAyClhC,OAAO,CAACwM,CAAC,CAAC00B,WAAH,CADpD;AAGA;;;;;;;AAMA,SAAKC,YAAL,GAAoBnhC,OAAO,CAACwM,CAAC,CAAC40B,YAAH,CAA3B;AAEA;;;;;;AAKA,SAAKC,UAAL,GAAkB,KAAKF,YAAL,GAAoB30B,CAAC,CAAC40B,YAAtB,GAAqC,EAAvD;AAEA;;;;;;;AAMA,SAAKE,aAAL,GAAqBthC,OAAO,CAACwM,CAAC,CAAC+0B,aAAH,CAA5B;AAEA;;;;;;AAKA,SAAKl0B,WAAL,GAAmB,KAAKi0B,aAAL,GAAqB90B,CAAC,CAAC+0B,aAAvB,GAAuC,EAA1D;AAEA;;;;;;AAKA,SAAKxxB,eAAL,GAAuB/P,OAAO,CAACwM,CAAC,CAACg1B,sBAAH,CAA9B;AAEA;;;;;AAIA,SAAKC,gBAAL,GAAwB,oDAAK,CAACj1B,CAAC,CAACk1B,cAAH,CAA7B;AAEA;;;;;;;;;;;;;;;;;;AAiBA,SAAKC,aAAL,GAAqBn1B,CAAC,CAACk1B,cAAvB;AAEA;;AACA;;;;;AAIA,SAAKE,WAAL,GAAmB,6DAAW,CAACp1B,CAAC,CAACq1B,eAAH,EAAoB,MAApB,CAA9B;AAEA;;;;;AAIA,SAAKzuB,UAAL,GAAkB,6DAAW,CAAC5G,CAAC,CAACs1B,cAAH,EAAmB,SAAnB,CAA7B;AAEA;;;;;AAIA,SAAKtuB,UAAL,GAAkB,6DAAW,CAAChH,CAAC,CAACu1B,iBAAH,EAAsB,YAAtB,CAA7B;AAEA;;;;;AAIA,SAAKztB,UAAL,GAAkB,6DAAW,CAAC9H,CAAC,CAACw1B,WAAH,EAAgB,IAAhB,CAA7B;AAEA;;;;;AAIA,SAAKC,UAAL,GAAkB,6DAAW,CAACz1B,CAAC,CAAC01B,YAAH,EAAiB,IAAjB,CAA7B;AAEA;;;;;AAIA,SAAKjf,UAAL,GAAkB,6DAAW,CAACzW,CAAC,CAAC21B,gBAAH,EAAqB,GAArB,CAA7B;AAEA;;;;;AAIA,SAAKpf,UAAL,GAAkB,6DAAW,CAACvW,CAAC,CAAC41B,cAAH,EAAmB,GAAnB,CAA7B;AAEA;;;;;AAIA,SAAKzf,UAAL,GAAkB,6DAAW,CAACnW,CAAC,CAAC61B,oBAAH,EAAyB,IAAzB,CAA7B;AAEA;;;;;AAIA,SAAKxf,UAAL,GAAkB,6DAAW,CAACrW,CAAC,CAAC81B,sBAAH,EAA2B,IAA3B,CAA7B;AAEA;;;;;AAIA,SAAKnf,UAAL,GAAkB,6DAAW,CAAC3W,CAAC,CAAC+1B,kBAAH,EAAuB,GAAvB,CAA7B;AAEA;;;;;AAIA,SAAKpgB,UAAL,GAAkB,6DAAW,CAAC3V,CAAC,CAACg2B,aAAH,EAAkB,GAAlB,CAA7B;AAEA;;;;;AAIA,SAAKngB,UAAL,GAAkB,6DAAW,CAAC7V,CAAC,CAACi2B,cAAH,EAAmB,GAAnB,CAA7B;AAEA;;;;;AAIA,SAAKlgB,UAAL,GAAkB,6DAAW,CAAC/V,CAAC,CAACk2B,mBAAH,EAAwB,GAAxB,CAA7B;AAEA;;;;;AAIA,SAAKjgB,UAAL,GAAkB,6DAAW,CAACjW,CAAC,CAACm2B,iBAAH,EAAsB,GAAtB,CAA7B,CA1mBiB,CA4mBjB;;AAEA;;;;;AAIA,SAAKvuB,SAAL,GAAiB,6DAAW,CAAC5H,CAAC,CAAC4H,SAAH,EAAc,GAAd,CAA5B;AAEA;;;;;AAIA,SAAKhS,WAAL,GAAmB,oDAAK,CAACoK,CAAC,CAAC0lB,YAAH,CAAL,IAAyBlyB,OAAO,CAACwM,CAAC,CAAC0lB,YAAH,CAAnD;AAEA;;;;;AAIA,SAAK7vB,SAAL,GAAiB,oDAAK,CAACmK,CAAC,CAAC6pB,UAAH,CAAL,IAAuBr2B,OAAO,CAACwM,CAAC,CAAC6pB,UAAH,CAA/C;AAEA;;;;;AAIA,SAAKr0B,MAAL,GAAc,oDAAK,CAACwK,CAAC,CAACxK,MAAH,CAAL,IAAmBhC,OAAO,CAACwM,CAAC,CAACxK,MAAH,CAAxC;AAEA;;AACA;;;;;AAIA,SAAK4gC,UAAL,GAAkB5iC,OAAO,CAACwM,CAAC,CAACuT,GAAH,CAAzB;AAEA;;;;;AAIA,SAAKP,OAAL,GAAe,6DAAW,CAAChT,CAAC,CAACiT,QAAH,EAAc,CAAC,KAAKlK,WAAN,GAAoB,IAApB,GAA2B,EAAzC,CAA1B;AAEA;;;;;AAIA,SAAKqK,WAAL,GAAmB,6DAAW,CAACpT,CAAC,CAACqT,aAAH,EACzB,CAAC,KAAKtK,WAAN,GAAoB,QAApB,GAA+B,aADN,CAA9B;AAGA;;;;;AAIA,SAAKstB,QAAL,GAAgB,oDAAK,CAACr2B,CAAC,CAACwI,SAAH,CAAL,IAAsBhV,OAAO,CAACwM,CAAC,CAACwI,SAAH,CAA7C;AAEA;;;;;AAIA,SAAK8tB,aAAL,GAAqB,4DAAU,CAACt2B,CAAC,CAACu2B,eAAH,EAAoB,+CAApB,CAA/B;AAEA;;;;;AAIA,SAAKC,YAAL,GAAoB,4DAAU,CAACx2B,CAAC,CAACy2B,cAAH,EAAmB,+CAAnB,CAA9B;AAEA;;;;;AAIA,SAAKxgC,MAAL,GAAc,oDAAK,CAAC+J,CAAC,CAAC/J,MAAH,CAAL,IAAmBzC,OAAO,CAACwM,CAAC,CAAC/J,MAAH,CAAxC;AAEA;;;;;;AAKA,SAAKuwB,YAAL,GAAoB,CAApB;AAEA;;;;;;AAKA,SAAKkQ,UAAL,GAAkB,oDAAK,CAAC12B,CAAC,CAAC22B,WAAH,CAAL,IAAwBnjC,OAAO,CAACwM,CAAC,CAAC22B,WAAH,CAAjD;AAEA;;;;;AAIA,SAAKC,eAAL,GAAuB,oDAAK,CAAC52B,CAAC,CAAC22B,WAAH,CAAL,IACnB,uDAAQ,CAAC32B,CAAC,CAAC22B,WAAF,CAAc3M,KAAf,CADW,GAEnBhqB,CAAC,CAAC22B,WAAF,CAAc3M,KAFK,GAEG,yDAF1B;AAIA;;;;;;AAKA,SAAK6M,YAAL,GAAoB,IAApB;AAEA;;;;;;AAKA,SAAKC,eAAL,GAAuB,IAAvB;AAEA;;;;;AAIA,SAAKthB,iBAAL,GAAyBhiB,OAAO,CAACwM,CAAC,CAAC+2B,kBAAH,CAAhC;AAEA;;;;;AAIA,SAAK/gC,SAAL,GAAiB,oDAAK,CAACgK,CAAC,CAAC4Y,kBAAH,CAAL,IACbplB,OAAO,CAACwM,CAAC,CAAC4Y,kBAAH,CADX;AAGA;;;;;AAIA,SAAKvjB,KAAL,GAAa,oDAAK,CAAC2K,CAAC,CAAC3K,KAAH,CAAL,IAAkB7B,OAAO,CAACwM,CAAC,CAAC3K,KAAH,CAAtC;AAEA;;AAEA;;;;;;AAKA,SAAKL,QAAL,GAAgB,IAAhB;AAEA;;;;;;AAKA,SAAKkM,MAAL,GAAc,6DAAW,CAAClB,CAAC,CAACkB,MAAH,EAAW,IAAX,CAAzB;AAEA;;;;;AAIA,SAAK81B,kBAAL,GAA0B,6DAAW,CAACh3B,CAAC,CAACi3B,mBAAH,EAAwB,GAAxB,CAArC;AAEA;;;;;AAIA,SAAKC,gBAAL,GAAwB,6DAAW,CAACl3B,CAAC,CAACm3B,iBAAH,EAAsB,GAAtB,CAAnC;AAEA;;;;;;;;;;;;;;;AAcA,SAAKptB,QAAL,GAAgB,sDAAO,CAAC/J,CAAC,CAACo3B,SAAH,CAAP,GAAuBp3B,CAAC,CAACo3B,SAAzB,GAAqC,EAArD;AAEA;;AACA;;;;;AAIA,SAAK9K,MAAL,GAAc,IAAd;AAEA;;;;;AAIA,SAAKtb,OAAL,GAAe,KAAf;AAEA;;;;;AAIA,SAAKqmB,aAAL,GAAqB,KAArB;AAEA;;;;;AAIA,SAAKC,cAAL,GAAsB,MAAtB;AAEA;;AACA,SAAKC,cAAL,GAAsB,QAAtB;AAEA;;AACA;;;;;AAIA,SAAKC,UAAL,GAAkB,6DAAW,CAACx3B,CAAC,CAACw3B,UAAH,EAAe,EAAf,CAA7B;AAEA;;AACA;;;;;AAIA,SAAKC,kBAAL,GAA0BjkC,OAAO,CAACwM,CAAC,CAAC03B,oBAAH,CAAjC;AAEA;;;;;;AAKA,SAAKC,SAAL,GAAkB,KAAKF,kBAAL,IAA2B,sDAAO,CAACz3B,CAAC,CAAC43B,MAAH,CAApD;AAEA;;;;;;AAKA,SAAKA,MAAL,GAAc,6DAAW,CAAC53B,CAAC,CAAC43B,MAAH,EAAW,EAAX,CAAzB;AAEA;;;;;;;AAMA,SAAK/U,UAAL,GAAkB,KAAKgV,aAAL,EAAlB;AAEA;;;;;AAIA,SAAKC,UAAL,GAAkBtkC,OAAO,CAACwM,CAAC,CAAC83B,UAAH,CAAzB;AAEA;;;;;AAIA,SAAK5hC,OAAL,GAAe,oDAAK,CAAC8J,CAAC,CAAC9J,OAAH,CAAL,IAAoB1C,OAAO,CAACwM,CAAC,CAAC9J,OAAH,CAA1C;AAEA;;;;;AAIA,SAAK6hC,aAAL,GAAqBvkC,OAAO,CAACwM,CAAC,CAACg4B,cAAH,CAA5B;AAEA;;;;;AAIA,SAAKtK,GAAL,GAAW,EAAX;AACA,SAAKuK,KAAL,GAAa,EAAb;AAEA;;;;;AAIA,SAAKC,WAAL,GAAmB,EAAnB,CAl3BiB,CAo3BjB;;AACA,SAAKC,mBAAL,CACIhP,MAAM,CAACC,IAAP,CAAY,gDAAZ,EAAsB6H,GAAtB,CAA0B,UAACmH,IAAD;AAAA,aAAU,gDAAQ,CAACA,IAAD,CAAlB;AAAA,KAA1B,CADJ;AAGH;AAED;;;;;AAp4BJ;AAAA;AAAA,2BAu4BW;AAAA;;AACH,UAAI,KAAKt6B,WAAT,EAAsB;AAClB;AACH,OAHE,CAKH;;;AACA,WAAKu6B,MAAL,CAAY,KAAK1G,YAAjB,EAA+B,KAAKD,iBAAL,EAA/B,EAAyD,IAAzD,EAA+D,MAA/D;AAEA,UAAIhE,GAAG,GAAG,KAAKA,GAAf;AACA,UAAI4K,QAAJ,CATG,CAWH;;AACA,WAAKC,UAAL;AAZG,UAcKvjC,QAdL,GAgB+C,gDAhB/C,CAcKA,QAdL;AAAA,UAceG,IAdf,GAgB+C,gDAhB/C,CAceA,IAdf;AAAA,UAcqBE,KAdrB,GAgB+C,gDAhB/C,CAcqBA,KAdrB;AAAA,UAc4BC,iBAd5B,GAgB+C,gDAhB/C,CAc4BA,iBAd5B;AAAA,UAc+CC,UAd/C,GAgB+C,gDAhB/C,CAc+CA,UAd/C;AAAA,UAc2DC,MAd3D,GAgB+C,gDAhB/C,CAc2DA,MAd3D;AAAA,UAeCC,gBAfD,GAgB+C,gDAhB/C,CAeCA,gBAfD;AAAA,UAemBE,WAfnB,GAgB+C,gDAhB/C,CAemBA,WAfnB;AAAA,UAegCC,WAfhC,GAgB+C,gDAhB/C,CAegCA,WAfhC;AAAA,UAe6CC,SAf7C,GAgB+C,gDAhB/C,CAe6CA,SAf7C;AAAA,UAewDC,WAfxD,GAgB+C,gDAhB/C,CAewDA,WAfxD;AAAA,UAgBCC,aAhBD,GAgB+C,gDAhB/C,CAgBCA,aAhBD;AAAA,UAgBgBC,SAhBhB,GAgB+C,gDAhB/C,CAgBgBA,SAhBhB;AAAA,UAgB2BC,MAhB3B,GAgB+C,gDAhB/C,CAgB2BA,MAhB3B;AAAA,UAgBmCC,OAhBnC,GAgB+C,gDAhB/C,CAgBmCA,OAhBnC,EAkBH;;AACA,WAAKsiC,YAAL,CAAkB,CACdxjC,QADc,EAEdG,IAFc,EAGdE,KAHc,EAIdC,iBAJc,EAKdC,UALc,EAMdC,MANc,EAOdC,gBAPc,EAQdE,WARc,CAAlB,EAnBG,CA8BH;;AACA,UAAI,CAAC,KAAKgZ,OAAV,EAAmB;AACf,aAAK8pB,cAAL;AACH,OAFD,MAEO;AACH,YAAIC,MAAM,GAAG,KAAKC,iBAAL,EAAb;;AAEA,aAAKjzB,OAAL,GAAe,KAAK0L,UAAL,CAAgB,KAAKZ,MAArB,CAAf;AACA,aAAKqR,gBAAL,GAAwB,KAAKjE,SAAL,EAAxB;AAEA,YAAI/lB,CAAC,GAAG,KAAK67B,SAAL,GAAiB,CAAjB,GAAqB,KAAKhuB,OAAlC,CANG,CAQH;;AACA,aAAK,IAAIjS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoE,CAApB,EAAuBpE,CAAC,EAAxB,EAA4B;AACxB,eAAKoK,OAAL,CAAauF,IAAb,CAAkB,oBAAlB,EAAwC,IAAxC,EAA8C3P,CAA9C;AAEA,cAAImlC,OAAO,GAAG,sDAAS,CAAC,KAAK1nB,UAAN,CAAvB;AAAA,cACI/Q,GAAG,GAAG,KAAKuL,aAAL,CAAmBjY,CAAnB,CADV;;AAGA,cAAI,KAAKigC,SAAT,EAAoB;AAChBkF,mBAAO,CAACC,OAAR,GAAkB,KAAKnzB,OAAvB;AACH;;AACD,cAAI,CAAC,KAAKnQ,UAAV,EAAsB;AAClBmjC,kBAAM,CAAC3+B,WAAP,CAAmB6+B,OAAnB;AACH;;AACDN,kBAAQ,GAAI7kC,CAAC,KAAKoE,CAAC,GAAG,CAAV,IAAe,KAAKu+B,UAArB,GACP,KAAKjE,gBADE,GACiB,KAAKpmB,WADjC,CAZwB,CAexB;;AACA,cAAI,KAAK2nB,SAAT,EAAoB;AAChBvzB,eAAG,GAAG,6CAAN;AACAm4B,oBAAQ,GAAG,KAAKjG,iBAAhB;AACH,WAnBuB,CAqBxB;;;AACA,cAAIlyB,GAAG,KAAK,8CAAR,IAAkBA,GAAG,KAAK,gDAA9B,EAAwC;AACpCutB,eAAG,CAACoL,QAAJ,GAAepL,GAAG,CAACoL,QAAJ,IAAgB,IAAI,0DAAJ,CAAa,IAAb,CAA/B;AACApL,eAAG,CAACoL,QAAJ,CAAa36B,IAAb,CAAkB1K,CAAlB,EAAqB,KAAKslC,aAAL,EAArB,EAA2CH,OAA3C;AACH,WAHD,CAIA;AAJA,eAKK,IAAIz4B,GAAG,KAAK,iDAAZ,EAAuB;AACxButB,iBAAG,CAACsL,SAAJ,GAAgBtL,GAAG,CAACsL,SAAJ,IAAiB,IAAI,4DAAJ,CAAc,IAAd,CAAjC;AACAtL,iBAAG,CAACsL,SAAJ,CAAc76B,IAAd,CAAmB1K,CAAnB,EAAsB,KAAKslC,aAAL,EAAtB,EAA4CH,OAA5C;AACH,aAHI,MAGE;AACH,mBAAKK,iBAAL,CAAuBxlC,CAAvB,EAA0B6kC,QAA1B,EAAoCM,OAApC;AACH,aAhCuB,CAkCxB;;;AACA,cAAInlC,CAAC,KAAKoE,CAAC,GAAG,CAAV,IAAe,KAAKu+B,UAAxB,EAAoC;AAChC,iBAAK8C,kBAAL,CACI,KAAKH,aAAL,KACI,gDAAG,CAAC,KAAK70B,cAAL,CAAoBzQ,CAApB,CAAD,CADP,GAEImlC,OAHR;AAKH;;AAED,eAAK/6B,OAAL,CAAauF,IAAb,CAAkB,mBAAlB,EAAuC,IAAvC,EAA6C3P,CAA7C;AACH;;AAED,aAAKoK,OAAL,CAAaE,EAAb,CAAgB,CAAC,cAAD,CAAhB,EACI,UAACN,EAAD,EAAK6F,MAAL;AAAA,iBAAgB,MAAI,CAAC61B,iBAAL,CAAuB71B,MAAM,CAACrJ,EAA9B,CAAhB;AAAA,SADJ;AAGH,OA3FE,CA2FF;;AAED;;;AACA,UAAI,KAAKo5B,eAAT,EAA0B;AACtB,aAAKx1B,OAAL,CAAaE,EAAb,CAAgB,CAAC,iBAAD,CAAhB,EAAqC;AAAA,iBAAM,MAAI,CAACq7B,cAAL,EAAN;AAAA,SAArC;AACA,aAAKA,cAAL;AACH;;AAED,WAAKZ,YAAL,CAAkB,CACd5iC,WADc,EAEdC,SAFc,EAGdC,WAHc,EAIdC,aAJc,EAKdC,SALc,EAMdC,MANc,EAOdC,OAPc,CAAlB;AAUA,WAAK+Z,YAAL,GA7GG,CA+GH;;AACA,UAAI,CAAC,KAAK1a,UAAV,EAAsB;AAClB8D,QAAA,qDAAQ,CAAC,KAAKmG,GAAL,EAAD,EAAa,KAAK8sB,MAAlB,CAAR;;AACA,YAAI,KAAKwL,UAAT,EAAqB;AACjBz+B,UAAA,qDAAQ,CAAC,KAAKmG,GAAL,EAAD,EAAa,KAAK83B,cAAlB,CAAR;AACH;;AACD,YAAI,KAAK5mB,SAAL,CAAe/c,MAAf,GAAwB,CAA5B,EAA+B;AAC3B,eAAK0lC,cAAL;AACH;;AACD,YAAI,KAAKtB,aAAL,IAAsB,KAAKv4B,GAAL,GAAWsa,KAArC,EAA4C;AACxCzgB,UAAA,qDAAQ,CAAC,KAAKmG,GAAL,EAAD,EAAa,KAAK+3B,cAAlB,CAAR;AACH;AACJ;AAED;;;AACA,WAAK+B,cAAL;AAEA,WAAKx7B,WAAL,GAAmB,IAAnB;AAEA,WAAK01B,eAAL,CAAqB,IAArB;AAEA,WAAK31B,OAAL,CAAauF,IAAb,CAAkB,aAAlB,EAAiC,IAAjC;AACH;AAED;;;;;AA9gCJ;AAAA;AAAA,8BAkhCcjI,GAlhCd,EAkhCmB;AACX,UAAI,CAAC,KAAKo3B,QAAV,EAAoB;AAChB;AACH;;AAED,UAAI,2DAAY,CAACp3B,GAAD,EAAM,CAAC,iDAAD,CAAN,CAAhB,EAAoC;AAChC,aAAKmI,MAAL;AACA9G,QAAA,wDAAS,CAACrB,GAAD,CAAT;AACAiB,QAAA,sDAAO,CAACjB,GAAD,CAAP;AACH,OAJD,MAIO;AACH,aAAK07B,YAAL,GAAoB,IAApB;AACAjsB,QAAA,0CAAI,CAAC2uB,aAAL,CAAmB,KAAKzC,eAAxB;AACA,aAAKA,eAAL,GAAuB,IAAvB;AACH;AACJ;AAED;;;;;;AAliCJ;AAAA;AAAA,4BAuiCY37B,GAviCZ,EAuiCiB;AACT,UAAI,CAAC,KAAKu7B,UAAV,EAAsB;AAClB;AACH;;AACD,WAAKG,YAAL,GAAoB,KAApB;;AAEA,eAASvzB,MAAT,GAAkB;AACdsH,QAAA,0CAAI,CAAC2uB,aAAL,CAAmB,KAAKzC,eAAxB;AACA,aAAKA,eAAL,GAAuB,IAAvB;;AACA,YAAI,CAAC,KAAKD,YAAV,EAAwB;AACpB,eAAKvzB,MAAL;AACA,eAAKuzB,YAAL,GAAoB,IAApB;AACH;AACJ;;AAED,UAAI,2DAAY,CAAC17B,GAAD,EACZ,CAAC,iDAAD,EAAY,+CAAZ,EAAqB,+CAArB,EAA8B,oDAA9B,EAA4C,sDAA5C,CADY,CAAhB,EACkE;AAC9DyP,QAAA,0CAAI,CAAC2uB,aAAL,CAAmB,KAAKzC,eAAxB;AACA,aAAKA,eAAL,GAAuB,IAAvB;AACH,OAJD,MAIO;AACH,YAAI,KAAKA,eAAL,KAAyB,IAA7B,EAAmC;AAC/B;AACH;;AACD,aAAKA,eAAL,GAAuB,0CAAI,CAAC0C,WAAL,CACnBl2B,MAAM,CAAChG,IAAP,CAAY,IAAZ,CADmB,EAEnB,KAAKs5B,eAFc,CAAvB;AAGH;AACJ;AAED;;;;AApkCJ;AAAA;AAAA,gCAukCgB;AACR,UAAI,KAAKF,UAAT,EAAqB;AACjB,aAAKG,YAAL,GAAoB,IAApB;AACH;AACJ;AAED;;;;;AA7kCJ;AAAA;AAAA,+BAilCe17B,GAjlCf,EAilCoB;AACZ,UAAIX,GAAG,GAAG,wDAAS,CAACW,GAAD,CAAnB;AACA,WAAK0C,OAAL,CAAauF,IAAb,CAAkB,cAAlB,EAAkC,IAAlC,EAAwC5I,GAAxC;AACH;AAED;;;;AAtlCJ;AAAA;AAAA,gCAylCgB;AACR,UAAI,KAAKk8B,UAAT,EAAqB;AACjB,aAAKG,YAAL,GAAoB,KAApB;AACAjsB,QAAA,0CAAI,CAAC2uB,aAAL,CAAmB,KAAKzC,eAAxB;AACH;;AACD,WAAKj5B,OAAL,CAAauF,IAAb,CAAkB,aAAlB,EAAiC,IAAjC;AACH;AAED;;;;AAjmCJ;AAAA;AAAA,wCAomCwB;AAChB;AACA;AACA;AACA,UAAI,KAAK7N,UAAT,EAAqB;AACjB;AACH;;AACD,UAAImjC,MAAJ;AAEA,UAAI3oB,KAAK,GAAG,gDAAG,CAAC,KAAKvQ,GAAL,EAAD,EAAa,OAAb,CAAf;;AACA,UAAIuQ,KAAK,CAACpc,MAAN,GAAe,CAAnB,EAAsB;AAClB+kC,cAAM,GAAG3oB,KAAK,CAAC,CAAD,CAAL,CAAS0pB,SAAT,CAAmB,KAAK3pB,eAAxB,CAAT;AACH,OAFD,MAEO;AACH4oB,cAAM,GAAG,KAAKl5B,GAAL,GAAWi6B,SAAX,CAAqB,KAAK3pB,eAA1B,CAAT;AACH;;AAED4oB,YAAM,CAACx/B,SAAP,GAAmB,KAAK04B,eAAxB;;AAEA,UAAI,KAAKmH,aAAL,EAAJ,EAA0B;AACtBL,cAAM,CAACpyB,KAAP,CAAaC,OAAb,GAAuB,4CAAvB;AACH;;AAED,WAAK1I,OAAL,CAAauF,IAAb,CAAkB,sBAAlB,EAA0C,IAA1C,EAAgDs1B,MAAhD;AACA,aAAOA,MAAP;AACH;AAED;;;;AA9nCJ;AAAA;AAAA,qCAioCqB;AACb,UAAI,KAAK/pB,OAAT,EAAkB;AACd;AACH;;AACD,WAAK6B,MAAL,GAAc,KAAKA,MAAL,GAAc,CAAd,GAAkB,KAAKA,MAAL,GAAc,CAAhC,GAAoC,CAAlD;AACA,WAAKqR,gBAAL,GAAwB,KAAKjE,SAAL,EAAxB;AACH;AAED;;;;;;;AAzoCJ;AAAA;AAAA,sCA+oCsBnd,QA/oCtB,EA+oCgCkI,QA/oChC,EA+oC0C3E,SA/oC1C,EA+oCqD;AAAA;;AAC7C,UAAI7D,GAAG,GAAG,KAAKuL,aAAL,CAAmBjL,QAAnB,CAAV;AACA,UAAIwD,gBAAgB,GAAG,KAAK80B,aAAL,KACnB,KAAK70B,cAAL,CAAoBzD,QAApB,CADmB,GACa,IADpC;AAEA,UAAIi5B,OAAO,GAAGv5B,GAAG,KAAK,6CAAR,GAAgB,MAAhB,GAAyB,QAAvC;AACA,UAAIw5B,GAAG,GAAG,sDAAS,CAAC,6CAAD,EACf,CAAC,IAAD,EAAO,KAAKt1B,aAAL,CAAmB5D,QAAnB,CAAP,CADe,EAEf,CAAC,MAAD,EAASi5B,OAAT,CAFe,EAEI,CAAC,IAAD,EAAOj5B,QAAP,CAFJ,CAAnB;;AAIA,UAAIi5B,OAAO,KAAK,QAAZ,IAAwB,KAAKxF,SAAjC,EAA4C;AACxCyF,WAAG,CAACthC,YAAJ,CAAiB,aAAjB,EACI,KAAK87B,gBAAL,GAAyB,KAAKD,SAAL,CAAezzB,QAAf,KAA4B,EAArD,GACI,KAAKyzB,SAFb;AAIH;;AACDyF,SAAG,CAACzgC,SAAJ,GAAgByP,QAAQ,IAAI,KAAKoD,WAAjC;AACArQ,MAAA,qDAAM,CAACi+B,GAAD,EAAM,OAAN,EAAe,UAACx+B,GAAD;AAAA,eAAS,MAAI,CAACy+B,UAAL,CAAgBz+B,GAAhB,CAAT;AAAA,OAAf,CAAN,CAhB6C,CAkB7C;;AACA,UAAI8I,gBAAJ,EAAsB;AAClBzJ,QAAA,gDAAG,CAACyJ,gBAAD,CAAH,CAAsBlK,WAAtB,CAAkC4/B,GAAlC;AACH,OAFD,MAEO;AACH31B,iBAAS,CAACjK,WAAV,CAAsB4/B,GAAtB;AACH;;AAED,WAAKv1B,MAAL,CAAYhJ,IAAZ,CAAiBu+B,GAAG,CAAC1/B,EAArB;AAEAyB,MAAA,qDAAM,CAACi+B,GAAD,EAAM,UAAN,EAAkB,UAACx+B,GAAD;AAAA,eAAS,MAAI,CAAC0+B,SAAL,CAAe1+B,GAAf,CAAT;AAAA,OAAlB,CAAN;AACAO,MAAA,qDAAM,CAACi+B,GAAD,EAAM,SAAN,EAAiB;AAAA,eAAM,MAAI,CAACG,SAAL,EAAN;AAAA,OAAjB,CAAN;AACAp+B,MAAA,qDAAM,CAACi+B,GAAD,EAAM,OAAN,EAAe,UAACx+B,GAAD;AAAA,eAAS,MAAI,CAAC4+B,OAAL,CAAa5+B,GAAb,CAAT;AAAA,OAAf,CAAN;AACAO,MAAA,qDAAM,CAACi+B,GAAD,EAAM,MAAN,EAAc;AAAA,eAAM,MAAI,CAACK,SAAL,EAAN;AAAA,OAAd,CAAN;AACH;AAED;;;;;AAhrCJ;AAAA;AAAA,uCAorCuBh2B,SAprCvB,EAorCkC;AAAA;;AAC1B,UAAIuP,GAAG,GAAG,sDAAS,CAAC,6CAAD,EACf,CAAC,MAAD,EAAS,QAAT,CADe,EAEf,CAAC,OAAD,EAAU,KAAKP,OAAf,CAFe,CAAnB;AAIAO,SAAG,CAACra,SAAJ,GAAgB,KAAKka,WAArB,CAL0B,CAO1B;;AACApP,eAAS,CAACjK,WAAV,CAAsBwZ,GAAtB;AAEA7X,MAAA,qDAAM,CAAC6X,GAAD,EAAM,OAAN,EAAe;AAAA,eAAM,MAAI,CAACjQ,MAAL,EAAN;AAAA,OAAf,CAAN;AACH;AAED;;;;;;;;;;;;;AAjsCJ;AAAA;AAAA,0CA6sCuC;AAAA;;AAAA,UAAf22B,QAAe,uEAAJ,EAAI;AAC/BA,cAAQ,CAAC/+B,OAAT,CAAiB,UAACwC,OAAD,EAAa;AAC1B;AACA;AACA;AACA;AACAA,eAAO,CAAChI,QAAR,GAAmBgI,OAAO,CAAChI,QAAR,IAAoBgI,OAAO,CAACxI,IAA/C;;AACA,YAAI,CAAC,MAAI,CAAC27B,SAAN,IAAmB,MAAI,CAACnzB,OAAO,CAAChI,QAAT,CAAJ,KAA2B,IAA9C,IACAgI,OAAO,CAACtI,OAAR,KAAoB,IADxB,EAC8B;AAAA,cACd8kC,GADc,GACDx8B,OADC,CACrBzI,KADqB;AAAA,cACTC,IADS,GACDwI,OADC,CACTxI,IADS;AAG1B,gBAAI,CAACw4B,GAAL,CAASx4B,IAAT,IAAiB,MAAI,CAACw4B,GAAL,CAASx4B,IAAT,KAAkB,IAAIglC,GAAJ,CAAQ,MAAR,CAAnC;AACH;AACJ,OAZD;AAaH;AAED;;;;;;;;;;;AA7tCJ;AAAA;AAAA,mCAuuCgC;AAAA;;AAAA,UAAfD,QAAe,uEAAJ,EAAI;AACxBA,cAAQ,CAAC/+B,OAAT,CAAiB,UAACwC,OAAD,EAAa;AAAA,YACrBhI,QADqB,GACHgI,OADG,CACrBhI,QADqB;AAAA,YACXR,IADW,GACHwI,OADG,CACXxI,IADW;;AAE1B,YAAI,MAAI,CAACQ,QAAD,CAAJ,KAAmB,IAAnB,IAA2B,MAAI,CAACg4B,GAAL,CAASx4B,IAAT,CAA/B,EAA+C;AAC3C,gBAAI,CAACw4B,GAAL,CAASx4B,IAAT,EAAeiJ,IAAf;AACH;AACJ,OALD;AAMH;AAED;;;;;;AAhvCJ;AAAA;AAAA,4BAqvCYjJ,IArvCZ,EAqvCkB;AACV,aAAO,KAAKw4B,GAAL,CAASx4B,IAAT,CAAP;AACH;AAED;;;;AAzvCJ;AAAA;AAAA,qCA4vCqB;AAAA;;AACb,UAAIilC,IAAI,GAAG,KAAK3C,UAAhB;;AACA,UAAI2C,IAAI,CAACxmC,MAAL,KAAgB,CAApB,EAAuB;AACnB;AACH,OAJY,CAMb;;;AACAymC,MAAA,qBAAuB,GAAG,KAAKlJ,QAA/B;AAEA,WAAKrzB,OAAL,CAAauF,IAAb,CAAkB,2BAAlB,EAA+C,IAA/C;AAEA+2B,UAAI,CAACj/B,OAAL,CAAa,UAACm/B,GAAD,EAAS;AAClB,cAAI,CAACC,aAAL,CAAmBD,GAAnB;AACH,OAFD;AAGA,WAAKx8B,OAAL,CAAauF,IAAb,CAAkB,0BAAlB,EAA8C,IAA9C;AACH;AAED;;;;;AA7wCJ;AAAA;AAAA,kCAixCkBi3B,GAjxClB,EAixCuB;AAAA;;AACf,UAAI,CAACA,GAAD,IAAQ,CAACA,GAAG,CAACnlC,IAAb,IAAqB,KAAKqlC,YAAL,CAAkBF,GAAG,CAACnlC,IAAtB,CAAzB,EAAsD;AAClD;AACH;;AAHc,UAKVA,IALU,GAKImlC,GALJ,CAKVnlC,IALU;AAAA,UAKJq3B,IALI,GAKI8N,GALJ,CAKJ9N,IALI;AAMf,UAAIiO,UAAJ;;AAEA,UAAItlC,IAAI,IAAIq3B,IAAZ,EAAkB;AACdiO,kBAAU,GAAGH,GAAG,CAAC9N,IAAJ,GAAWr3B,IAAxB;AACH,OAFD,MAEO;AACHA,YAAI,GAAGA,IAAI,CAACuE,OAAL,CAAa,KAAb,EAAoB,EAApB,CAAP;AACA+gC,kBAAU,GAAG,mBAAmB/gC,OAAnB,CAA2B,KAA3B,EAAkCvE,IAAlC,CAAb;AACH,OAbc,CAef;;;AACAulC,MAAA,8DAAQ,qCAAC,8DAAOD,UAAR,EAAD,GAAsB,UAACE,GAAD,EAAS;AAClC;AACA,YAAIC,IAAI,GAAG,IAAID,GAAG,CAACE,OAAR,CAAgB,MAAhB,EAAsBP,GAAtB,CAAX;AACA;;AACAM,YAAI,CAACx8B,IAAL;AACA,cAAI,CAAC+5B,WAAL,CAAiBhjC,IAAjB,IAAyBylC,IAAzB;AACH,O,6CANM,gCAAP;AAOH;AAED;;;;;;AA1yCJ;AAAA;AAAA,8BA+yCczlC,IA/yCd,EA+yCoB;AACZ,aAAO,KAAKgjC,WAAL,CAAiBhjC,IAAjB,CAAP;AACH;AAED;;;;;;AAnzCJ;AAAA;AAAA,iCAwzCiBA,IAxzCjB,EAwzCuB;AACf,aAAO,CAAC,sDAAO,CAAC,KAAKgjC,WAAL,CAAiBhjC,IAAjB,CAAD,CAAf;AACH;AAED;;;;;;AA5zCJ;AAAA;AAAA,sCAi0CsBylC,IAj0CtB,EAi0C4BzlC,IAj0C5B,EAi0CkC;AAC1B,WAAKgjC,WAAL,CAAiBhjC,IAAjB,IAAyBylC,IAAzB;AACH;AAED;;;;AAr0CJ;AAAA;AAAA,wCAw0CwB;AAChB,UAAInhC,GAAG,GAAG,KAAK0+B,WAAf;AAEA/O,YAAM,CAACC,IAAP,CAAY5vB,GAAZ,EAAiB0B,OAAjB,CAAyB,UAACguB,GAAD,EAAS;AAC9B1vB,WAAG,CAAC0vB,GAAD,CAAH,CAASlrB,OAAT;AACAxE,WAAG,CAAC0vB,GAAD,CAAH,GAAW9nB,SAAX;AACH,OAHD;AAIH;AAED;;;;AAj1CJ;AAAA;AAAA,iCAo1CiB;AAAA;;AACT,UAAI,CAAC,KAAKu2B,SAAV,EAAqB;AACjB;AACH;;AAED,UAAIC,MAAM,GAAG,KAAKA,MAAlB;AACA,WAAK/5B,OAAL,CAAauF,IAAb,CAAkB,uBAAlB,EAA2C,IAA3C,EANS,CAQT;;AACA,UAAI,KAAKq0B,kBAAT,EAA6B;AACzB,YAAIoD,YAAY,GAAG;AAAE3lC,cAAI,EAAE;AAAR,SAAnB;AACA,aAAK0iC,MAAL,CAAYx8B,IAAZ,CAAiBy/B,YAAjB;AACH;;AAEDjD,YAAM,CAAC18B,OAAP,CAAe,UAAC4/B,KAAD,EAAQrnC,CAAR,EAAc;AAAA,YACpByB,IADoB,GACN4lC,KADM,CACpB5lC,IADoB;AAAA,YACdq3B,IADc,GACNuO,KADM,CACdvO,IADc;AAEzB,YAAIwO,OAAO,GAAG,MAAI,CAACzO,MAAL,GAAcp3B,IAA5B;;AACA,YAAIA,IAAI,IAAI,CAACq3B,IAAb,EAAmB;AACfA,cAAI,GAAG,MAAI,CAAC1J,UAAL,GAAkB3tB,IAAlB,GAAyB,GAAzB,GAA+BA,IAA/B,GAAsC,MAA7C;AACH,SAFD,MAGK,IAAI,CAACA,IAAD,IAAS4lC,KAAK,CAACvO,IAAnB,EAAyB;AAC1Br3B,cAAI,GAAG,WAAWuE,OAAX,CAAmB,KAAnB,EAA0BhG,CAA1B,CAAP;AACH;;AAED,YAAI,CAAC,MAAI,CAACunC,UAAL,CAAgBzO,IAAhB,EAAsB,MAAtB,CAAL,EAAoC;AAChC,gBAAI,CAAC8L,MAAL,CAAY0C,OAAZ,EAAqBxO,IAArB,EAA2B,IAA3B,EAAiC,MAAjC;AACH;AACJ,OAbD,EAdS,CA6BT;;AACA,WAAK/2B,MAAL,GAAc,IAAd;AAEA,WAAKqI,OAAL,CAAauF,IAAb,CAAkB,sBAAlB,EAA0C,IAA1C;AACH;AAED;;;;;AAv3CJ;AAAA;AAAA,oCA23CoC;AAAA,UAAlBlO,IAAkB,uEAAX,SAAW;AAC5B,aAAO,gDAAG,CAAC,KAAKo3B,MAAL,GAAcp3B,IAAf,CAAV;AACH;AAED;;;;AA/3CJ;AAAA;AAAA,8BAk4Cc;AAAA;;AACN,UAAI,CAAC,KAAK4I,WAAV,EAAuB;AACnB;AACH;;AAED,UAAID,OAAO,GAAG,KAAKA,OAAnB;;AAEA,UAAI,KAAKk7B,aAAL,MAAwB,CAAC,KAAKxoB,YAAlC,EAAgD;AAC5C,aAAK0qB,kBAAL;AACH;;AAED,WAAKC,iBAAL;AAEA,WAAKnb,eAAL,GAbM,CAeN;;AACAliB,aAAO,CAACuF,IAAR,CAAa,SAAb,EAAwB,IAAxB;;AAEA,UAAI,KAAKuL,OAAL,IAAgB,CAAC,KAAKpZ,UAA1B,EAAsC;AAClC,aAAKiK,GAAL,GAAW27B,SAAX,CAAqB,KAAKrrB,eAA1B;AACH,OApBK,CAsBN;;;AACA,UAAI,KAAKujB,eAAT,EAA0B;AACtBx1B,eAAO,CAACiC,GAAR,CAAY,CAAC,iBAAD,CAAZ,EAAiC;AAAA,iBAAM,OAAI,CAACs5B,cAAL,EAAN;AAAA,SAAjC;AACH;;AAED,WAAKv7B,OAAL,CAAaiC,GAAb,CAAiB,CAAC,cAAD,CAAjB,EACI,UAACrC,EAAD,EAAK6F,MAAL;AAAA,eAAgB,OAAI,CAAC61B,iBAAL,CAAuB71B,MAAM,CAACrJ,EAA9B,CAAhB;AAAA,OADJ;AAGAV,MAAA,wDAAW,CAAC,KAAKiG,GAAL,EAAD,EAAa,KAAK8sB,MAAlB,CAAX;AACA/yB,MAAA,wDAAW,CAAC,KAAKiG,GAAL,EAAD,EAAa,KAAK83B,cAAlB,CAAX;;AACA,UAAI,KAAK93B,GAAL,GAAWsa,KAAf,EAAsB;AAClBvgB,QAAA,wDAAW,CAAC,KAAKiG,GAAL,GAAWsa,KAAZ,EAAmB,KAAKyd,cAAxB,CAAX;AACH;;AAED,WAAK/Q,YAAL,GAAoB,CAApB;AACA,WAAK5nB,cAAL,GAAsB,EAAtB;AACA,WAAKwF,MAAL,GAAc,EAAd;AACA,WAAKtG,WAAL,GAAmB,KAAnB;AACH;AAED;;;;AA56CJ;AAAA;AAAA,yCA+6CyB;AACjB,UAAI,CAAC,KAAKi7B,aAAL,EAAL,EAA2B;AACvB;AACH;;AACD,UAAIqC,GAAG,GAAG,KAAKl3B,cAAf;AACAk3B,SAAG,CAAClgC,OAAJ,CAAY,UAACjB,EAAD,EAAQ;AAChB,YAAIohC,WAAW,GAAG,gDAAG,CAACphC,EAAD,CAArB;;AACA,YAAIohC,WAAJ,EAAiB;AACbA,qBAAW,CAACp2B,SAAZ,GAAwB,EAAxB;AACH;AACJ,OALD;AAMH;AAED;;;;;;AA57CJ;AAAA;AAAA,oCAi8CoBxE,QAj8CpB,EAi8C8B;AACtB,aAAO,KAAKw0B,gBAAL,IACH,KAAKE,aAAL,CAAmBhkB,IAAnB,CAAwBja,OAAxB,CAAgCuJ,QAAhC,MAA8C,CAAC,CADnD;AAEH;AAED;;;;;;;AAt8CJ;AAAA;AAAA,qCA48CqBA,QA58CrB,EA48C+B;AACvB,UAAI,sDAAO,CAACA,QAAD,CAAP,IAAqB,CAAC,KAAKE,eAAL,CAAqBF,QAArB,CAA1B,EAA0D;AACtD;AACH;;AAED,UAAI00B,aAAa,GAAG,KAAKA,aAAzB;AACA,UAAIhkB,IAAI,GAAGgkB,aAAa,CAAChkB,IAAzB;AACA,UAAImqB,MAAM,GAAG,EAAb;AAAA,UAAiBC,QAAQ,GAAG,EAA5B;AACA,UAAI5Z,KAAK,GAAGxQ,IAAI,CAACja,OAAL,CAAauJ,QAAb,CAAZ;AACA,UAAI8G,SAAS,GAAG4tB,aAAa,CAAC3zB,MAAd,CAAqBmgB,KAArB,CAAhB;AACA,UAAI6Z,QAAQ,GAAGrG,aAAa,CAACsG,KAAd,CAAoB9Z,KAApB,CAAf;AACA,UAAI+Z,OAAO,GAAGvG,aAAa,CAACwG,KAAd,CAAoBha,KAApB,CAAd;;AAEA,WAAK,IAAIf,CAAC,GAAG,CAAR,EAAWF,GAAG,GAAGnZ,SAAS,CAAC5T,MAAhC,EAAwCitB,CAAC,GAAGF,GAA5C,EAAiDE,CAAC,EAAlD,EAAsD;AAClD2a,gBAAQ,CAACngC,IAAT,CAAcmM,SAAS,CAACqZ,CAAD,CAAvB;;AACA,YAAI4a,QAAQ,CAAC5a,CAAD,CAAZ,EAAiB;AACb0a,gBAAM,CAAClgC,IAAP,CAAYogC,QAAQ,CAAC5a,CAAD,CAApB;AACH,SAFD,MAEO;AACH0a,gBAAM,CAAClgC,IAAP,CAAYmM,SAAS,CAACqZ,CAAD,CAArB;AACH;AACJ;;AACD,UAAI8a,OAAJ,EAAa;AACTH,gBAAQ,CAACl6B,IAAT;AACAi6B,cAAM,CAACj6B,IAAP;AACH;;AACD,aAAO,CAACk6B,QAAD,EAAWD,MAAX,CAAP;AACH;AAED;;;;;;AAx+CJ;AAAA;AAAA,6BA6+Ca;AAAA;;AACL,UAAI,CAAC,KAAK3sB,OAAN,IAAiB,CAAC,KAAK7Q,WAA3B,EAAwC;AACpC;AACH;;AAED,UAAID,OAAO,GAAG,KAAKA,OAAnB,CALK,CAOL;;AACA,WAAK40B,cAAL,CAAoB,IAApB;AACA50B,aAAO,CAACuF,IAAR,CAAa,kBAAb,EAAiC,IAAjC;AAEA,UAAIw4B,UAAU,GAAG,CAAjB;AAEA,WAAKh9B,cAAL,GAAsB,EAAtB,CAbK,CAcL;;AACA,UAAIi9B,UAAU,GAAG,KAAK5S,eAAL,EAAjB;AAEA,UAAIrpB,OAAO,GAAG,KAAKA,OAAL,EAAd;AACAA,aAAO,CACH,UAACC,GAAD,EAAM2F,CAAN,EAAY;AACR;AACA3F,WAAG,CAACyG,KAAJ,CAAUC,OAAV,GAAoB,EAApB;AAEA,YAAInB,KAAK,GAAGvF,GAAG,CAACuF,KAAhB;AACA,YAAIM,OAAO,GAAGN,KAAK,CAACzR,MAApB;AAEA,YAAImoC,SAAS,GAAG,EAAhB;AAAA,YACIC,OAAO,GAAG,IADd;AAAA,YAEI;AACAC,wBAAgB,GAAG,KAHvB,CAPQ,CAYR;;AACA,aAAK,IAAIh9B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0G,OAApB,EAA6B1G,CAAC,EAA9B,EAAkC;AAC9B;AACA,cAAIi9B,EAAE,GAAGJ,UAAU,CAAC,OAAI,CAACnI,SAAL,GAAiB,CAAjB,GAAqB10B,CAAtB,CAAnB;;AAEA,cAAIi9B,EAAE,KAAK,EAAX,EAAe;AACX;AACH;;AAED,cAAI/2B,SAAS,GAAG,yDAAS,CAAC,OAAI,CAACC,YAAL,CAAkBC,KAAK,CAACpG,CAAD,CAAvB,CAAD,EACrB,OAAI,CAAC1L,aADgB,CAAzB,CAR8B,CAW9B;;AACA,cAAI4oC,SAAS,GAAGD,EAAE,CAACroC,QAAH,GAAc+T,KAAd,CAAoB,OAAI,CAACG,UAAzB,CAAhB;AAAA,cACI;AACAq0B,sBAAY,GAAGD,SAAS,CAACvoC,MAAV,GAAmB,CAFtC;AAAA,cAGI;AACAyoC,oBAAU,GAAGH,EAAE,CAACroC,QAAH,GAAc+T,KAAd,CAAoB,OAAI,CAAC8tB,UAAzB,CAJjB;AAAA,cAKI;AACA4G,uBAAa,GAAGD,UAAU,CAACzoC,MAAX,GAAoB,CANxC,CAZ8B,CAoB9B;;AACA,cAAI,sDAAO,CAACsoC,EAAD,CAAP,IAAeE,YAAf,IAA+BE,aAAnC,EAAkD;AAC9C,gBAAIC,EAAE,SAAN;AAAA,gBAAQC,CAAC,SAAT;AACA,gBAAIC,KAAK,GAAG,KAAZ;;AAEA,gBAAI,sDAAO,CAACP,EAAD,CAAX,EAAiB;AACbM,eAAC,GAAGN,EAAJ;AACH,aAFD,MAEO;AACHM,eAAC,GAAGJ,YAAY,GAAGD,SAAH,GAAeE,UAA/B;AACH,aAR6C,CAS9C;;;AACA,iBAAK,IAAIK,CAAC,GAAG,CAAR,EAAW/b,GAAG,GAAG6b,CAAC,CAAC5oC,MAAxB,EAAgC8oC,CAAC,GAAG/b,GAApC,EAAyC+b,CAAC,EAA1C,EAA8C;AAC1CH,gBAAE,GAAG,oDAAI,CAACC,CAAC,CAACE,CAAD,CAAF,CAAT;AACAD,mBAAK,GAAG,OAAI,CAACE,MAAL,CAAYJ,EAAZ,EAAgBp3B,SAAhB,EAA2BE,KAAK,CAACpG,CAAD,CAAhC,CAAR;;AAEA,kBAAIw9B,KAAJ,EAAW;AACP3+B,uBAAO,CAACuF,IAAR,CAAa,mBAAb,EAAkC,OAAlC,EACIgC,KAAK,CAACpG,CAAD,CADT,EACcs9B,EADd;AAEH;;AACD,kBAAKH,YAAY,IAAIK,KAAjB,IACCH,aAAa,IAAI,CAACG,KADvB,EAC+B;AAC3B;AACH;;AACD,kBAAI,sDAAO,CAACP,EAAD,CAAP,IAAeO,KAAnB,EAA0B;AACtB;AACH;AACJ;;AACDV,qBAAS,CAAC98B,CAAD,CAAT,GAAew9B,KAAf;AAEH,WA5BD,CA6BA;AA7BA,eA8BK;AACDV,uBAAS,CAAC98B,CAAD,CAAT,GACI,OAAI,CAAC09B,MAAL,CAAY,oDAAI,CAACT,EAAD,CAAhB,EAAsB/2B,SAAtB,EAAiCE,KAAK,CAACpG,CAAD,CAAtC,CADJ;;AAEA,kBAAI88B,SAAS,CAAC98B,CAAD,CAAb,EAAkB;AACdnB,uBAAO,CAACuF,IAAR,CAAa,mBAAb,EAAkC,OAAlC,EAAwCgC,KAAK,CAACpG,CAAD,CAA7C,EACIi9B,EADJ;AAEH;AACJ;;AAED,cAAI,CAACH,SAAS,CAAC98B,CAAD,CAAd,EAAmB;AACf+8B,mBAAO,GAAG,KAAV;AACH;;AAED,cAAI,OAAI,CAACrI,SAAL,IACA,OAAI,CAACC,oBAAL,CAA0Bz8B,OAA1B,CAAkC8H,CAAlC,MAAyC,CAAC,CAD1C,IAEA88B,SAAS,CAAC98B,CAAD,CAFb,EAEkB;AACdg9B,4BAAgB,GAAG,IAAnB;AACH;;AAEDn+B,iBAAO,CAACuF,IAAR,CAAa,gBAAb,EAA+B,OAA/B,EAAqCpE,CAArC,EAAwCoG,KAAK,CAACpG,CAAD,CAA7C;AACH,SApFO,CAoFP;;;AAED,YAAIg9B,gBAAJ,EAAsB;AAClBD,iBAAO,GAAG,IAAV;AACH;;AAED,eAAI,CAACY,WAAL,CAAiBn3B,CAAjB,EAAoBu2B,OAApB;;AACA,YAAI,CAACA,OAAL,EAAc;AACVH,oBAAU;AACb;;AAED/9B,eAAO,CAACuF,IAAR,CAAa,eAAb,EAA8B,OAA9B,EAAoCoC,CAApC,EACI,OAAI,CAAC5G,cAAL,CAAoBjL,MAApB,GAA6B,CADjC,EACoCooC,OADpC;AAEH,OAlGE,EAmGH;AACA,gBAACl8B,GAAD;AAAA,eAASA,GAAG,CAACuF,KAAJ,CAAUzR,MAAV,KAAqB,OAAI,CAAC+R,OAAnC;AAAA,OApGG,CAAP;AAuGA,WAAK8gB,YAAL,GAAoBoV,UAApB,CAzHK,CA2HL;;AACA,WAAKjJ,aAAL,CAAmB,IAAnB;AAEA90B,aAAO,CAACuF,IAAR,CAAa,iBAAb,EAAgC,IAAhC,EAAsCy4B,UAAtC;AACH;AAED;;;;;;;;;AA9mDJ;AAAA;AAAA,2BAsnDWrnB,IAtnDX,EAsnDiBtP,SAtnDjB,EAsnD4B2L,IAtnD5B,EAsnDkC;AAC1B,UAAI+rB,OAAJ;AACA,UAAIr7B,MAAM,GAAGsP,IAAI,CAAC8T,SAAlB;AACA,UAAI3jB,OAAO,GAAG,KAAKC,UAAL,CAAgBM,MAAhB,CAAd;AACA,UAAI2U,IAAI,GAAG,IAAI9c,MAAJ,CAAW,KAAK+c,UAAhB,CAAX;AAAA,UACIC,IAAI,GAAG,IAAIhd,MAAJ,CAAW,KAAKid,UAAhB,CADX;AAAA,UAEIC,GAAG,GAAG,IAAIld,MAAJ,CAAW,KAAKmd,UAAhB,CAFV;AAAA,UAGIC,GAAG,GAAG,IAAIpd,MAAJ,CAAW,KAAKqd,UAAhB,CAHV;AAAA,UAIIC,GAAG,GAAG,IAAItd,MAAJ,CAAW,KAAKud,UAAhB,CAJV;AAAA,UAKIjB,IAAI,GAAG,IAAItc,MAAJ,CAAW,sDAAM,CAAC,KAAKuc,UAAN,CAAjB,CALX;AAAA,UAMIC,IAAI,GAAG,IAAIxc,MAAJ,CAAW,KAAKyc,UAAhB,CANX;AAAA,UAOIC,IAAI,GAAG,IAAI1c,MAAJ,CAAW,KAAK2c,UAAhB,CAPX;AAAA,UAQIC,IAAI,GAAG,IAAI5c,MAAJ,CAAW,KAAK6c,UAAhB,CARX;AAAA,UASI;AACA;AACA4mB,UAAI,GAAG,KAAKj2B,UAXhB;AAAA,UAYIk2B,IAAI,GAAG,KAAK91B,UAZhB;AAAA,UAaI+1B,IAAI,GAAG,IAAI3jC,MAAJ,CAAW,sDAAM,CAAC,KAAKg8B,WAAN,CAAjB,CAbX;AAeA5gB,UAAI,GAAG,yDAAS,CAACA,IAAD,EAAO,KAAKlhB,aAAZ,CAAhB;AAEA,UAAIwoC,SAAS,GAAG,KAAhB,CArB0B,CAuB1B;;AACA,UAAIkB,KAAK,GAAG1mB,GAAG,CAACM,IAAJ,CAASpC,IAAT,CAAZ;AAAA,UACIyoB,KAAK,GAAG/mB,IAAI,CAACU,IAAL,CAAUpC,IAAV,CADZ;AAAA,UAEI0oB,KAAK,GAAG1mB,GAAG,CAACI,IAAJ,CAASpC,IAAT,CAFZ;AAAA,UAGI2oB,KAAK,GAAG/mB,IAAI,CAACQ,IAAL,CAAUpC,IAAV,CAHZ;AAAA,UAII4oB,KAAK,GAAG1mB,GAAG,CAACE,IAAJ,CAASpC,IAAT,CAJZ;AAAA,UAKI6oB,KAAK,GAAGznB,IAAI,CAACgB,IAAL,CAAUpC,IAAV,CALZ;AAAA,UAMI8oB,KAAK,GAAG5nB,IAAI,CAACkB,IAAL,CAAUpC,IAAV,CANZ;AAAA,UAOI;AACA+oB,WAAK,GAAGznB,IAAI,CAACc,IAAL,CAAUpC,IAAV,CARZ;AAAA,UASIgpB,KAAK,GAAGxnB,IAAI,CAACY,IAAL,CAAUpC,IAAV,CATZ;AAAA,UAUIipB,KAAK,GAAIZ,IAAI,KAAKroB,IAVtB;AAAA,UAWIkpB,KAAK,GAAIZ,IAAI,KAAKtoB,IAXtB;AAAA,UAYImpB,KAAK,GAAGZ,IAAI,CAACnmB,IAAL,CAAUpC,IAAV,CAZZ,CAxB0B,CAsC1B;;AACA,UAAI,KAAKzT,OAAL,CAAaQ,MAAb,EAAqB,CAAC,4CAAD,CAArB,CAAJ,EAAkC;AAC9B,YAAIq8B,IAAJ,EAAUC,IAAV;AAEA,YAAI7oC,QAAQ,GAAG,KAAK04B,GAAL,CAAS14B,QAAxB;AACA,YAAI8oC,WAAW,GAAG9oC,QAAQ,CAACoK,OAAT,CAAiB9B,IAAjB,CAAsBtI,QAAtB,CAAlB;AACA,YAAI+oC,SAAS,GAAG/oC,QAAQ,CAACoV,KAAT,CAAe9M,IAAf,CAAoBtI,QAApB,CAAhB;AACA,YAAIkM,MAAM,GAAGlM,QAAQ,CAACmM,SAAT,CAAmBI,MAAnB,CAAb,CAN8B,CAQ9B;;AACA,YAAIy8B,OAAO,GAAGhB,KAAK,IACfc,WAAW,CAACtpB,IAAI,CAAC/a,OAAL,CAAa6c,GAAb,EAAkB,EAAlB,CAAD,EAAwBpV,MAAxB,CADf;AAEA,YAAI+8B,QAAQ,GAAGhB,KAAK,IAChBa,WAAW,CAACtpB,IAAI,CAAC/a,OAAL,CAAayc,IAAb,EAAmB,EAAnB,CAAD,EAAyBhV,MAAzB,CADf;AAEA,YAAIg9B,OAAO,GAAGhB,KAAK,IACfY,WAAW,CAACtpB,IAAI,CAAC/a,OAAL,CAAa+c,GAAb,EAAkB,EAAlB,CAAD,EAAwBtV,MAAxB,CADf;AAEA,YAAIi9B,QAAQ,GAAGhB,KAAK,IAChBW,WAAW,CAACtpB,IAAI,CAAC/a,OAAL,CAAa2c,IAAb,EAAmB,EAAnB,CAAD,EAAyBlV,MAAzB,CADf;AAEA,YAAIk9B,QAAQ,GAAGhB,KAAK,IAChBU,WAAW,CAACtpB,IAAI,CAAC/a,OAAL,CAAaid,GAAb,EAAkB,EAAlB,CAAD,EAAwBxV,MAAxB,CADf;AAEA,YAAIm9B,QAAQ,GAAGhB,KAAK,IAChBS,WAAW,CAACtpB,IAAI,CAAC/a,OAAL,CAAamc,IAAb,EAAmB,EAAnB,CAAD,EAAyB1U,MAAzB,CADf;AAGA08B,YAAI,GAAGG,SAAS,CAAC74B,SAAD,EAAYhE,MAAZ,CAAhB,CAtB8B,CAwB9B;;AACA,YAAI+8B,QAAJ,EAAc;AACVJ,cAAI,GAAGE,SAAS,CAACvpB,IAAI,CAAC/a,OAAL,CAAayc,IAAb,EAAmB,EAAnB,CAAD,EAAyBhV,MAAzB,CAAhB;AACA46B,mBAAS,GAAG8B,IAAI,IAAIC,IAApB;AACH,SAHD,CAIA;AAJA,aAKK,IAAIG,OAAJ,EAAa;AACdH,gBAAI,GAAGE,SAAS,CAACvpB,IAAI,CAAC/a,OAAL,CAAa6c,GAAb,EAAkB,EAAlB,CAAD,EAAwBpV,MAAxB,CAAhB;AACA46B,qBAAS,GAAG8B,IAAI,GAAGC,IAAnB;AACH,WAHI,CAIL;AAJK,eAKA,IAAIM,QAAJ,EAAc;AACfN,kBAAI,GAAGE,SAAS,CAACvpB,IAAI,CAAC/a,OAAL,CAAa2c,IAAb,EAAmB,EAAnB,CAAD,EAAyBlV,MAAzB,CAAhB;AACA46B,uBAAS,GAAG8B,IAAI,IAAIC,IAApB;AACH,aAHI,CAIL;AAJK,iBAKA,IAAIK,OAAJ,EAAa;AACdL,oBAAI,GAAGE,SAAS,CAACvpB,IAAI,CAAC/a,OAAL,CAAa+c,GAAb,EAAkB,EAAlB,CAAD,EAAwBtV,MAAxB,CAAhB;AACA46B,yBAAS,GAAG8B,IAAI,GAAGC,IAAnB;AACH,eAHI,CAIL;AAJK,mBAKA,IAAIO,QAAJ,EAAc;AACfP,sBAAI,GAAGE,SAAS,CAACvpB,IAAI,CAAC/a,OAAL,CAAaid,GAAb,EAAkB,EAAlB,CAAD,EAAwBxV,MAAxB,CAAhB;AACA46B,2BAAS,GAAG8B,IAAI,CAAChqC,QAAL,OAAoBiqC,IAAI,CAACjqC,QAAL,EAAhC;AACH,iBAHI,CAIL;AAJK,qBAKA,IAAIyqC,QAAJ,EAAc;AACfR,wBAAI,GAAGE,SAAS,CAACvpB,IAAI,CAAC/a,OAAL,CAAamc,IAAb,EAAmB,EAAnB,CAAD,EAAyB1U,MAAzB,CAAhB;AACA46B,6BAAS,GAAG8B,IAAI,CAAChqC,QAAL,OAAoBiqC,IAAI,CAACjqC,QAAL,EAAhC;AACH,mBAHI,CAIL;AAJK,uBAKA,IAAI8hB,IAAI,CAACkB,IAAL,CAAUpC,IAAV,CAAJ,EAAqB;AAAC;AACvBsnB,+BAAS,GAAG,wDAAQ,CAACtnB,IAAI,CAAC/a,OAAL,CAAaic,IAAb,EAAmB,EAAnB,CAAD,EAAyBxQ,SAAzB,EAChB,KADgB,EACT,KAAK5R,aADI,CAApB;AAEH,qBAHI,MAIA,IAAIwqC,WAAW,CAACtpB,IAAD,CAAf,EAAuB;AACxBqpB,0BAAI,GAAGE,SAAS,CAACvpB,IAAD,EAAOtT,MAAP,CAAhB;AACA46B,+BAAS,GAAG8B,IAAI,CAAChqC,QAAL,OAAoBiqC,IAAI,CAACjqC,QAAL,EAAhC;AACH,qBAHI,CAIL;AAJK,yBAKA,IAAI6pC,KAAJ,EAAW;AACZ3B,iCAAS,GAAG,CAACjrB,IAAI,CAAC6D,aAAL,EAAb;AACH,uBAFI,CAGL;AAHK,2BAIA,IAAIgpB,KAAJ,EAAW;AACZ5B,mCAAS,GAAGjrB,IAAI,CAAC6D,aAAL,EAAZ;AACH,yBAFI,MAEE;AACHonB,mCAAS,GAAG,wDAAQ,CAACtnB,IAAD,EAAOtP,SAAP,EAChB,KAAKo5B,YAAL,CAAkB/8B,MAAlB,CADgB,EACW,KAAKjO,aADhB,CAApB;AAEH;AACJ,OA1ED,MA0EO;AACH;AACA;AACA;AACA;AACAspC,eAAO,GAAG,qDAAO,CAAC13B,SAAD,EAAYlE,OAAZ,CAAP,IAA+BwD,MAAM,CAACU,SAAD,CAA/C,CALG,CAOH;AACA;AAEA;;AACA,YAAIy4B,KAAJ,EAAW;AACP;AACA,cAAI;AACA;AACA,gBAAIY,OAAO,GAAG/pB,IAAI,CAAC/a,OAAL,CAAasjC,IAAb,EAAmB,EAAnB,CAAd;AACA,gBAAIyB,GAAG,GAAG,IAAIplC,MAAJ,CAAWmlC,OAAX,CAAV;AACAzC,qBAAS,GAAG0C,GAAG,CAAC5nB,IAAJ,CAAS1R,SAAT,CAAZ;AACH,WALD,CAKE,OAAOyF,EAAP,EAAW;AACTmxB,qBAAS,GAAG,KAAZ;AACH;AACJ,SAVD,CAWA;AAXA,aAYK,IAAImB,KAAJ,EAAW;AACZnB,qBAAS,GAAGc,OAAO,IAAI,qDAAO,CAC1BpoB,IAAI,CAAC/a,OAAL,CAAayc,IAAb,EAAmB,EAAnB,CAD0B,EAE1BlV,OAF0B,CAA9B;AAIH,WALI,CAML;AANK,eAOA,IAAIm8B,KAAJ,EAAW;AACZrB,uBAAS,GAAGc,OAAO,IAAI,qDAAO,CAC1BpoB,IAAI,CAAC/a,OAAL,CAAa2c,IAAb,EAAmB,EAAnB,CAD0B,EAE1BpV,OAF0B,CAA9B;AAIH,aALI,CAML;AANK,iBAOA,IAAIg8B,KAAJ,EAAW;AACZlB,yBAAS,GAAGc,OAAO,GAAG,qDAAO,CACzBpoB,IAAI,CAAC/a,OAAL,CAAa6c,GAAb,EAAkB,EAAlB,CADyB,EAEzBtV,OAFyB,CAA7B;AAIH,eALI,CAML;AANK,mBAOA,IAAIk8B,KAAJ,EAAW;AACZpB,2BAAS,GAAGc,OAAO,GAAG,qDAAO,CACzBpoB,IAAI,CAAC/a,OAAL,CAAa+c,GAAb,EAAkB,EAAlB,CADyB,EAEzBxV,OAFyB,CAA7B;AAIH,iBALI,CAML;AANK,qBAOA,IAAIo8B,KAAJ,EAAW;AACZtB,6BAAS,GAAG,wDAAQ,CAACtnB,IAAI,CAAC/a,OAAL,CAAaid,GAAb,EAAkB,EAAlB,CAAD,EAAwBxR,SAAxB,EAChB,KADgB,EACT,KAAK5R,aADI,CAAR,GACqB,KADrB,GAC6B,IADzC;AAEH,mBAHI,CAIL;AAJK,uBAKA,IAAIgqC,KAAJ,EAAW;AACZxB,+BAAS,GAAG,wDAAQ,CAACtnB,IAAI,CAAC/a,OAAL,CAAaic,IAAb,EAAmB,EAAnB,CAAD,EAAyBxQ,SAAzB,EAChB,KADgB,EACT,KAAK5R,aADI,CAApB;AAEH,qBAHI,CAIL;AAJK,yBAKA,IAAI+pC,KAAJ,EAAW;AACZvB,iCAAS,GAAG,wDAAQ,CAACtnB,IAAI,CAAC/a,OAAL,CAAamc,IAAb,EAAmB,EAAnB,CAAD,EAAyB1Q,SAAzB,EAChB,IADgB,EACV,KAAK5R,aADK,CAApB;AAEH,uBAHI,CAIL;AAJK,2BAKA,IAAIiqC,KAAJ,EAAW;AACZzB,mCAAS,GAAG52B,SAAS,CAAChO,OAAV,CAAkBsd,IAAI,CAAC/a,OAAL,CAAaqc,IAAb,EAAmB,EAAnB,CAAlB,MAA8C,CAA9C,GACR,IADQ,GACD,KADX;AAEH,yBAHI,CAIL;AAJK,6BAKA,IAAI0nB,KAAJ,EAAW;AACZ,gCAAIiB,SAAS,GAAGjqB,IAAI,CAAC/a,OAAL,CAAauc,IAAb,EAAmB,EAAnB,CAAhB;AACA8lB,qCAAS,GACL52B,SAAS,CAACw5B,WAAV,CAAsBD,SAAtB,EAAiCv5B,SAAS,CAACvR,MAAV,GAAmB,CAApD,MACKuR,SAAS,CAACvR,MAAV,GAAmB,CAApB,IAA0B8qC,SAAS,CAAC9qC,MAAV,GAAmB,CAA7C,CADJ,IAEIuR,SAAS,CAACw5B,WAAV,CAAsBD,SAAtB,EAAiCv5B,SAAS,CAACvR,MAAV,GAAmB,CAApD,IACE,CAAC,CAHP,GAGW,IAHX,GAGkB,KAJtB;AAKH,2BAPI,CAQL;AARK,+BASA,IAAI8pC,KAAJ,EAAW;AACZ3B,uCAAS,GAAG,CAACjrB,IAAI,CAAC6D,aAAL,EAAb;AACH,6BAFI,CAGL;AAHK,iCAIA,IAAIgpB,KAAJ,EAAW;AACZ5B,yCAAS,GAAGjrB,IAAI,CAAC6D,aAAL,EAAZ;AACH,+BAFI,MAEE;AACH;AACA;AACA,oCAAIkoB,OAAO,IACP,KAAK77B,OAAL,CAAaQ,MAAb,EAAqB,CAAC,8CAAD,EAAS,wDAAT,CAArB,CADA,IAEA,CAAC,KAAKmyB,SAFV,EAEqB;AACjB;AACA;AACA;AACAlf,sCAAI,GAAG,qDAAO,CAACA,IAAD,EAAOxT,OAAP,CAAP,IAA0BwT,IAAjC;AACAsnB,2CAAS,GAAGc,OAAO,KAAKpoB,IAAZ,IACR,wDAAQ,CAACA,IAAI,CAAC5gB,QAAL,EAAD,EAAkBgpC,OAAO,CAAChpC,QAAR,EAAlB,EACJ,KAAK0qC,YAAL,CAAkB/8B,MAAlB,CADI,EACuB,KAAKjO,aAD5B,CADZ;AAGH,iCAVD,MAUO;AACH;AACAwoC,2CAAS,GAAG,wDAAQ,CAChBtnB,IADgB,EAEhBtP,SAFgB,EAGhB,KAAKo5B,YAAL,CAAkB/8B,MAAlB,CAHgB,EAIhB,KAAKjO,aAJW,EAKhB,KAAKqrC,iBAAL,CAAuBp9B,MAAvB,CALgB,CAApB;AAOH;AACJ;AAEJ,OAhOyB,CAgOzB;;;AAED,aAAOu6B,SAAP;AACH;AAED;;;;;;;;AA31DJ;AAAA;AAAA,kCAk2DkBr7B,QAl2DlB,EAk2DkE;AAAA,UAAtCm+B,cAAsC,uEAArB,KAAqB;AAAA,UAAdC,OAAc,uEAAJ,EAAI;AAC1D,aAAO,KAAKC,YAAL,CAAkBr+B,QAAlB,EAA4Bm+B,cAA5B,EAA4C,IAA5C,EAAkDC,OAAlD,CAAP;AACH;AAED;;;;;;;;AAt2DJ;AAAA;AAAA,oCA62DoBp+B,QA72DpB,EA62DoE;AAAA,UAAtCm+B,cAAsC,uEAArB,KAAqB;AAAA,UAAdC,OAAc,uEAAJ,EAAI;AAC5D,aAAO,KAAKC,YAAL,CAAkBr+B,QAAlB,EAA4Bm+B,cAA5B,EAA4C,KAA5C,EAAmDC,OAAnD,CAAP;AACH;AAED;;;;;;;;;;AAj3DJ;AAAA;AAAA,iCA23DQp+B,QA33DR,EA+3DM;AAAA;;AAAA,UAHEm+B,cAGF,uEAHmB,KAGnB;AAAA,UAFEG,KAEF,uEAFU,KAEV;AAAA,UADEF,OACF,uEADY,EACZ;AACE,UAAIG,SAAS,GAAG,EAAhB;AACA,UAAIC,UAAU,GAAGF,KAAK,GAAG,KAAKG,WAAL,CAAiB5hC,IAAjB,CAAsB,IAAtB,CAAH,GAClB,KAAK6H,YAAL,CAAkB7H,IAAlB,CAAuB,IAAvB,CADJ;;AAGA,UAAIshC,cAAJ,EAAoB;AAChBI,iBAAS,CAAC5jC,IAAV,CAAe,KAAK+jC,cAAL,GAAsB1+B,QAAtB,CAAf;AACH;;AAED,UAAIb,OAAO,GAAG,KAAKA,OAAL,EAAd;AACAA,aAAO,CAAC,UAACC,GAAD,EAAMpM,CAAN,EAAY;AAChB;AACA,YAAI2rC,YAAY,GAAGP,OAAO,CAAC3nC,OAAR,CAAgBzD,CAAhB,MAAuB,CAAC,CAA3C;AACA,YAAI2R,KAAK,GAAGvF,GAAG,CAACuF,KAAhB,CAHgB,CAKhB;;AACA,YAAIA,KAAK,CAACzR,MAAN,KAAiB,OAAI,CAAC+R,OAAtB,IAAiC,CAAC05B,YAAtC,EAAoD;AAChD,cAAIrnC,IAAI,GAAGknC,UAAU,CAAC75B,KAAK,CAAC3E,QAAD,CAAN,CAArB;AACAu+B,mBAAS,CAAC5jC,IAAV,CAAerD,IAAf;AACH;AACJ,OAVM,CAAP;AAWA,aAAOinC,SAAP;AACH;AAED;;;;;;AAv5DJ;AAAA;AAAA,mCA45DmBrd,KA55DnB,EA45D0B;AAClB,UAAI,CAAC,KAAKhT,OAAV,EAAmB;AACf;AACH;;AACD,UAAI0wB,QAAQ,GAAG,EAAf;AACA,UAAI56B,GAAG,GAAG,KAAK2C,gBAAL,CAAsBua,KAAtB,CAAV;;AACA,UAAI,CAACld,GAAL,EAAU;AACN,eAAO46B,QAAP;AACH;;AAED,UAAIC,UAAU,GAAG,KAAK5zB,aAAL,CAAmBiW,KAAnB,CAAjB;;AACA,UAAI2d,UAAU,KAAK,gDAAf,IAA2BA,UAAU,KAAK,iDAA9C,EAAyD;AACrDD,gBAAQ,GAAG56B,GAAG,CAACnO,KAAf;AACH,OAFD,CAGA;AAHA,WAIK,IAAIgpC,UAAU,KAAK,gDAAnB,EAA6B;AAC9BD,kBAAQ,GAAG,KAAK3hC,OAAL,CAAa,UAAb,EAAyB+D,SAAzB,CAAmCkgB,KAAnC,CAAX;AACH,SAFI,CAGL;AAHK,aAIA,IAAI2d,UAAU,KAAK,iDAAnB,EAA8B;AAC/BD,oBAAQ,GAAG,KAAK3hC,OAAL,CAAa,WAAb,EAA0B+D,SAA1B,CAAoCkgB,KAApC,CAAX;AACH,WArBiB,CAsBlB;AACA;;;AACA,UAAI,sDAAO,CAAC0d,QAAD,CAAP,IAAqBA,QAAQ,CAAC1rC,MAAT,KAAoB,CAAzC,IACC0rC,QAAQ,CAAC1rC,MAAT,KAAoB,CAApB,IAAyB0rC,QAAQ,CAAC,CAAD,CAAR,KAAgB,EAD9C,EACmD;AAC/CA,gBAAQ,GAAG,EAAX;AACH;;AAED,aAAOA,QAAP;AACH;AAED;;;;;AA57DJ;AAAA;AAAA,sCAg8DsB;AAAA;;AACd,UAAI,CAAC,KAAK1wB,OAAV,EAAmB;AACf;AACH;;AACD,UAAIktB,UAAU,GAAG,EAAjB;AAEA,WAAKz3B,MAAL,CAAYlJ,OAAZ,CAAoB,UAACjB,EAAD,EAAKxG,CAAL,EAAW;AAC3B,YAAI4rC,QAAQ,GAAG,OAAI,CAACE,cAAL,CAAoB9rC,CAApB,CAAf;;AACA,YAAI,sDAAO,CAAC4rC,QAAD,CAAX,EAAuB;AACnBxD,oBAAU,CAACzgC,IAAX,CAAgBikC,QAAhB;AACH,SAFD,MAEO;AACHxD,oBAAU,CAACzgC,IAAX,CAAgB,oDAAI,CAACikC,QAAD,CAApB;AACH;AACJ,OAPD;AAQA,aAAOxD,UAAP;AACH;AAED;;;;;;AAj9DJ;AAAA;AAAA,gCAs9DgBla,KAt9DhB,EAs9DuB;AACf,UAAI,CAAC,KAAKhT,OAAV,EAAmB;AACf;AACH;;AACD,aAAO,KAAKvK,MAAL,CAAYud,KAAZ,CAAP;AACH;AAED;;;;;;;;;;AA79DJ;AAAA;AAAA,qCAs+DqB/lB,IAt+DrB,EAs+D2B4jC,IAt+D3B,EAs+DiC;AACzB,UAAI,CAAC,KAAK7wB,OAAV,EAAmB;AACf;AACH;;AACD,UAAIvb,GAAG,GAAG,EAAV;;AACA,WAAK,IAAIK,CAAC,GAAG,CAAR,EAAWitB,GAAG,GAAG,KAAKtc,MAAL,CAAYzQ,MAAlC,EAA0CF,CAAC,GAAGitB,GAA9C,EAAmDjtB,CAAC,EAApD,EAAwD;AACpD,YAAI2xB,OAAO,GAAG,KAAK1Z,aAAL,CAAmBjY,CAAnB,CAAd;;AACA,YAAI2xB,OAAO,KAAKxpB,IAAI,CAACkQ,WAAL,EAAhB,EAAoC;AAChC,cAAI4iB,CAAC,GAAG8Q,IAAI,GAAG/rC,CAAH,GAAO,KAAK2Q,MAAL,CAAY3Q,CAAZ,CAAnB;AACAL,aAAG,CAACgI,IAAJ,CAASszB,CAAT;AACH;AACJ;;AACD,aAAOt7B,GAAP;AACH;AAED;;;;;;AAr/DJ;AAAA;AAAA,qCA0/DqBuuB,KA1/DrB,EA0/D4B;AACpB,aAAO,gDAAG,CAAC,KAAKvd,MAAL,CAAYud,KAAZ,CAAD,CAAV;AACH;AAED;;;;;;AA9/DJ;AAAA;AAAA,iCAmgE6B;AAAA,UAAdliB,QAAc,uEAAH,CAAG;AACrB,UAAIggC,EAAE,GAAG,KAAKjgC,GAAL,GAAWD,IAAX,CAAgBE,QAAQ,IAAI,CAAZ,GAAgBA,QAAhB,GAA2B,CAA3C,CAAT;AACA,aAAOggC,EAAE,GAAGA,EAAE,CAACr6B,KAAH,CAASzR,MAAZ,GAAqB,CAA9B;AACH;AAED;;;;;;;AAxgEJ;AAAA;AAAA,8BA8gEcirC,cA9gEd,EA8gE8B;AACtB,UAAIc,MAAM,GAAG,KAAKC,cAAL,GAAsBhsC,MAAnC;;AACA,UAAI,KAAK6L,GAAL,GAAWsa,KAAf,EAAsB;AAClB,eAAO8kB,cAAc,GACjBc,MAAM,GAAG,KAAKlgC,GAAL,GAAW6V,gBAAX,CAA4B,YAA5B,EAA0C1hB,MADlC,GAEjB+rC,MAFJ;AAGH;;AACD,aAAOd,cAAc,GAAGc,MAAH,GAAYA,MAAM,GAAG,KAAKlvB,MAA/C;AACH;AAED;;;;;;AAxhEJ;AAAA;AAAA,qCA6hEqB;AACb,aAAOra,GAAG,CAACkf,gBAAJ,iBAA8B,KAAKpb,EAAnC,mBAAP;AACH;AAED;;;;;;AAjiEJ;AAAA;AAAA,iCAsiEiB4W,IAtiEjB,EAsiEuB;AACf,UAAI9R,GAAG,GAAG8R,IAAI,CAAC8T,SAAf;AACA,UAAIoP,UAAU,GAAG,KAAKA,UAAtB,CAFe,CAGf;;AACA,UAAIA,UAAU,CAAC5iB,IAAX,CAAgBja,OAAhB,CAAwB6H,GAAxB,MAAiC,CAAC,CAAtC,EAAyC;AACrC,eAAOg1B,UAAU,CAAC3pB,KAAX,CAAiB,IAAjB,EAAuByG,IAAvB,EAA6B9R,GAA7B,CAAP;AACH,OAFD,MAEO;AACH,eAAO,oDAAO,CAAC8R,IAAD,CAAd;AACH;AACJ;AAED;;;;;;AAjjEJ;AAAA;AAAA,gCAsjEgBA,IAtjEhB,EAsjEsB;AACd,UAAIpQ,QAAQ,GAAGoQ,IAAI,CAAC8T,SAApB;AACA,UAAIruB,KAAK,GAAG,KAAK6O,YAAL,CAAkB0L,IAAlB,CAAZ;;AAEA,UAAI,KAAK9P,OAAL,CAAaN,QAAb,EAAuB,CAAC,wDAAD,CAAvB,CAAJ,EAAgD;AAC5C,eAAO,qDAAO,CAACnK,KAAD,EAAQ,KAAK2K,UAAL,CAAgBR,QAAhB,CAAR,CAAd;AACH,OAFD,MAGK,IAAI,KAAKM,OAAL,CAAaN,QAAb,EAAuB,CAAC,8CAAD,CAAvB,CAAJ,EAAsC;AACvC,eAAO+D,MAAM,CAAClO,KAAD,CAAb;AACH,OAFI,MAGA,IAAI,KAAKyK,OAAL,CAAaN,QAAb,EAAuB,CAAC,4CAAD,CAAvB,CAAJ,EAAmC;AACpC,YAAIzL,QAAQ,GAAG,KAAK04B,GAAL,CAAS14B,QAAxB;AACA,eAAOA,QAAQ,CAACoV,KAAT,CAAe9T,KAAf,EAAsBtB,QAAQ,CAACmM,SAAT,CAAmBV,QAAnB,CAAtB,CAAP;AACH;;AAED,aAAOnK,KAAP;AACH;AAED;;;;;;;;;;;;AAxkEJ;AAAA;AAAA,8BAmlE+D;AAAA,UAAnDsoC,cAAmD,uEAAlC,KAAkC;AAAA,UAA3BgB,iBAA2B,uEAAP,KAAO;AACvD,aAAO,KAAKC,YAAL,CAAkBjB,cAAlB,EAAkCgB,iBAAlC,EAAqD,IAArD,CAAP;AACH;AAED;;;;;;;;;;;AAvlEJ;AAAA;AAAA,gCAimEiE;AAAA,UAAnDhB,cAAmD,uEAAlC,KAAkC;AAAA,UAA3BgB,iBAA2B,uEAAP,KAAO;AACzD,aAAO,KAAKC,YAAL,CAAkBjB,cAAlB,EAAkCgB,iBAAlC,EAAqD,KAArD,CAAP;AACH;AAED;;;;;;;;;;;;;;;AArmEJ;AAAA;AAAA,mCAunEM;AAAA;;AAAA,UAHEhB,cAGF,uEAHmB,KAGnB;AAAA,UAFEgB,iBAEF,uEAFsB,KAEtB;AAAA,UADEb,KACF,uEADU,KACV;AACE,UAAIe,OAAO,GAAG,EAAd;AACA,UAAIb,UAAU,GAAGF,KAAK,GAAG,KAAKG,WAAL,CAAiB5hC,IAAjB,CAAsB,IAAtB,CAAH,GAClB,KAAK6H,YAAL,CAAkB7H,IAAlB,CAAuB,IAAvB,CADJ;;AAGA,UAAIshC,cAAJ,EAAoB;AAChB,YAAImB,OAAO,GAAG,KAAKZ,cAAL,CAAoBS,iBAApB,CAAd;AACAE,eAAO,CAAC1kC,IAAR,CAAa,CAAC,KAAK0V,kBAAL,EAAD,EAA4BivB,OAA5B,CAAb;AACH;;AAED,UAAIngC,OAAO,GAAG,KAAKA,OAAL,EAAd;AACAA,aAAO,CAAC,UAACC,GAAD,EAAM2F,CAAN,EAAY;AAChB,YAAIw6B,OAAO,GAAG,CAACx6B,CAAD,EAAI,EAAJ,CAAd;AACA,YAAIJ,KAAK,GAAGvF,GAAG,CAACuF,KAAhB;;AACA,aAAK,IAAIpG,CAAC,GAAG,CAAR,EAAW0hB,GAAG,GAAGtb,KAAK,CAACzR,MAA5B,EAAoCqL,CAAC,GAAG0hB,GAAxC,EAA6C1hB,CAAC,EAA9C,EAAkD;AAC9C,cAAI4gC,iBAAiB,IAAI,OAAI,CAACrF,YAAL,CAAkB,gBAAlB,CAAzB,EAA8D;AAC1D,gBAAI,OAAI,CAACpqB,SAAL,CAAe,gBAAf,EAAiC8vB,WAAjC,CAA6CjhC,CAA7C,CAAJ,EAAqD;AACjD;AACH;AACJ;;AACD,cAAIkhC,WAAW,GAAGjB,UAAU,CAAC75B,KAAK,CAACpG,CAAD,CAAN,CAA5B;AACAghC,iBAAO,CAAC,CAAD,CAAP,CAAW5kC,IAAX,CAAgB8kC,WAAhB;AACH;;AACDJ,eAAO,CAAC1kC,IAAR,CAAa4kC,OAAb;AACH,OAbM,CAAP;AAcA,aAAOF,OAAP;AACH;AAED;;;;;;;;;;;;;;AAnpEJ;AAAA;AAAA,sCAgqEuE;AAAA,UAAnDlB,cAAmD,uEAAlC,KAAkC;AAAA,UAA3BgB,iBAA2B,uEAAP,KAAO;AAC/D,aAAO,KAAKO,YAAL,CAAkBvB,cAAlB,EAAkCgB,iBAAlC,EAAqD,IAArD,CAAP;AACH;AAED;;;;;;;;;;;;;AApqEJ;AAAA;AAAA,wCAgrEyE;AAAA,UAAnDhB,cAAmD,uEAAlC,KAAkC;AAAA,UAA3BgB,iBAA2B,uEAAP,KAAO;AACjE,aAAO,KAAKO,YAAL,CAAkBvB,cAAlB,EAAkCgB,iBAAlC,EAAqD,KAArD,CAAP;AACH;AAED;;;;;;;;;;;;;;;AAprEJ;AAAA;AAAA,mCAssEM;AAAA,UAHEhB,cAGF,uEAHmB,KAGnB;AAAA,UAFEgB,iBAEF,uEAFsB,KAEtB;AAAA,UADEb,KACF,uEADU,KACV;;AACE,UAAI,KAAKngC,cAAL,CAAoBjL,MAApB,KAA+B,CAAnC,EAAsC;AAClC,eAAO,EAAP;AACH;;AACD,UAAI4L,IAAI,GAAG,KAAKC,GAAL,GAAWD,IAAtB;AAAA,UACI4gC,YAAY,GAAG,EADnB;AAEA,UAAIlB,UAAU,GAAGF,KAAK,GAAG,KAAKG,WAAL,CAAiB5hC,IAAjB,CAAsB,IAAtB,CAAH,GAClB,KAAK6H,YAAL,CAAkB7H,IAAlB,CAAuB,IAAvB,CADJ;;AAGA,UAAIshC,cAAJ,EAAoB;AAChB,YAAImB,OAAO,GAAG,KAAKZ,cAAL,CAAoBS,iBAApB,CAAd;AACAO,oBAAY,CAAC/kC,IAAb,CAAkB,CAAC,KAAK0V,kBAAL,EAAD,EAA4BivB,OAA5B,CAAlB;AACH;;AAED,UAAI3f,SAAS,GAAG,KAAKvhB,YAAL,CAAkB,IAAlB,CAAhB;;AACA,WAAK,IAAIpL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2sB,SAAS,CAACzsB,MAA9B,EAAsCF,CAAC,EAAvC,EAA2C;AACvC,YAAI2sC,KAAK,GAAG,CAAC,KAAKxhC,cAAL,CAAoBnL,CAApB,CAAD,EAAyB,EAAzB,CAAZ;AAAA,YACI2R,KAAK,GAAG7F,IAAI,CAAC,KAAKX,cAAL,CAAoBnL,CAApB,CAAD,CAAJ,CAA6B2R,KADzC;;AAEA,aAAK,IAAII,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGJ,KAAK,CAACzR,MAA1B,EAAkC6R,CAAC,EAAnC,EAAuC;AACnC,cAAIo6B,iBAAiB,IAAI,KAAKrF,YAAL,CAAkB,gBAAlB,CAAzB,EAA8D;AAC1D,gBAAI,KAAKpqB,SAAL,CAAe,gBAAf,EAAiC8vB,WAAjC,CAA6Cz6B,CAA7C,CAAJ,EAAqD;AACjD;AACH;AACJ;;AACD,cAAIN,SAAS,GAAG+5B,UAAU,CAAC75B,KAAK,CAACI,CAAD,CAAN,CAA1B;AACA46B,eAAK,CAAC,CAAD,CAAL,CAAShlC,IAAT,CAAc8J,SAAd;AACH;;AACDi7B,oBAAY,CAAC/kC,IAAb,CAAkBglC,KAAlB;AACH;;AACD,aAAOD,YAAP;AACH;AAED;;;;;;;;;;AAtuEJ;AAAA;AAAA,0CA+uE0B1/B,QA/uE1B,EA+uE0E;AAAA,UAAtCm+B,cAAsC,uEAArB,KAAqB;AAAA,UAAdC,OAAc,uEAAJ,EAAI;AAClE,aAAO,KAAKwB,kBAAL,CACH5/B,QADG,EACOm+B,cADP,EACuB,IADvB,EAC6BC,OAD7B,EACsC,KADtC,CAAP;AAEH;AAED;;;;;;;;;;AApvEJ;AAAA;AAAA,yCA6vEyBp+B,QA7vEzB,EA6vEyE;AAAA,UAAtCm+B,cAAsC,uEAArB,KAAqB;AAAA,UAAdC,OAAc,uEAAJ,EAAI;AACjE,aAAO,KAAKwB,kBAAL,CACH5/B,QADG,EACOm+B,cADP,EACuB,IADvB,EAC6BC,OAD7B,EACsC,IADtC,CAAP;AAEH;AAED;;;;;;;;;;AAlwEJ;AAAA;AAAA,4CA2wE4Bp+B,QA3wE5B,EA2wE4E;AAAA,UAAtCm+B,cAAsC,uEAArB,KAAqB;AAAA,UAAdC,OAAc,uEAAJ,EAAI;AACpE,aAAO,KAAKwB,kBAAL,CACH5/B,QADG,EACOm+B,cADP,EACuB,KADvB,EAC8BC,OAD9B,EACuC,KADvC,CAAP;AAEH;AAED;;;;;;;;;;AAhxEJ;AAAA;AAAA,2CAyxE2Bp+B,QAzxE3B,EAyxE2E;AAAA,UAAtCm+B,cAAsC,uEAArB,KAAqB;AAAA,UAAdC,OAAc,uEAAJ,EAAI;AACnE,aAAO,KAAKwB,kBAAL,CACH5/B,QADG,EACOm+B,cADP,EACuB,KADvB,EAC8BC,OAD9B,EACuC,IADvC,CAAP;AAEH;AAED;;;;;;;;;;;;;;AA9xEJ;AAAA;AAAA,uCA4yEQp+B,QA5yER,EAizEM;AAAA;;AAAA,UAJEm+B,cAIF,uEAJmB,KAInB;AAAA,UAHEG,KAGF,uEAHU,KAGV;AAAA,UAFEF,OAEF,uEAFY,EAEZ;AAAA,UADE/V,OACF,uEADY,IACZ;;AACE,UAAI,sDAAO,CAACroB,QAAD,CAAX,EAAuB;AACnB,eAAO,EAAP;AACH;;AAED,UAAIlB,IAAI,GAAG,KAAKC,GAAL,GAAWD,IAAtB;AACA,UAAI0/B,UAAU,GAAGF,KAAK,GAAG,KAAKG,WAAL,CAAiB5hC,IAAjB,CAAsB,IAAtB,CAAH,GAClB,KAAK6H,YAAL,CAAkB7H,IAAlB,CAAuB,IAAvB,CADJ,CANF,CASE;AACA;;AACA,UAAI8iB,SAAS,GAAG,KAAKvhB,YAAL,CAAkB,IAAlB,EAAwByE,MAAxB,CAA+B,UAACrE,MAAD,EAAY;AACvD,eAAO4/B,OAAO,CAAC3nC,OAAR,CAAgB+H,MAAhB,MAA4B,CAAC,CAA7B,KACF6pB,OAAO,GACJ,OAAI,CAACwX,aAAL,CAAmB/gC,IAAI,CAACN,MAAD,CAAvB,MAAqC,MADjC,GAEJ,IAHD,CAAP;AAIH,OALe,CAAhB,CAXF,CAkBE;;AACA,UAAIshC,cAAc,GAAGngB,SAAS,CAAC6Q,GAAV,CAAc,UAAChyB,MAAD,EAAY;AAC3C,eAAOggC,UAAU,CAAC1/B,IAAI,CAACN,MAAD,CAAJ,CAAamG,KAAb,CAAmB3E,QAAnB,CAAD,CAAjB;AACH,OAFoB,CAArB;;AAIA,UAAIm+B,cAAJ,EAAoB;AAChB2B,sBAAc,CAACC,OAAf,CAAuB,KAAKrB,cAAL,GAAsB1+B,QAAtB,CAAvB;AACH;;AAED,aAAO8/B,cAAP;AACH;AAED;;;;;;AA/0EJ;AAAA;AAAA,kCAo1EkB1gC,GAp1ElB,EAo1EuB;AACf,aAAOA,GAAG,CAACyG,KAAJ,CAAUC,OAAjB;AACH;AAED;;;;;;AAx1EJ;AAAA;AAAA,gCA61EgB9G,QA71EhB,EA61E0BL,OA71E1B,EA61EmC;AAC3B,UAAIS,GAAG,GAAG,KAAKL,GAAL,GAAWD,IAAX,CAAgBE,QAAhB,CAAV;;AACA,UAAI,CAACI,GAAD,IAAQ,CAAC,wDAAS,CAACT,OAAD,CAAtB,EAAiC;AAC7B;AACH,OAJ0B,CAM3B;;;AACA,UAAI,KAAKqG,WAAL,CAAiBvO,OAAjB,CAAyBuI,QAAzB,MAAuC,CAAC,CAA5C,EAA+C;AAC3CL,eAAO,GAAG,IAAV;AACH;;AAED,UAAIqhC,WAAW,GAAGrhC,OAAO,GAAG,EAAH,GAAQ,4CAAjC;AAAA,UACIshC,SAAS,GAAGthC,OAAO,GAAG,MAAH,GAAY,OADnC;AAEAS,SAAG,CAACyG,KAAJ,CAAUC,OAAV,GAAoBk6B,WAApB;;AAEA,UAAI,KAAKxqC,MAAT,EAAiB;AACb4J,WAAG,CAACxH,YAAJ,CAAiB,UAAjB,EAA6BqoC,SAA7B;AACH;;AAED,UAAIthC,OAAJ,EAAa;AACT,YAAI,KAAKR,cAAL,CAAoB1H,OAApB,CAA4BuI,QAA5B,MAA0C,CAAC,CAA/C,EAAkD;AAC9C,eAAKb,cAAL,CAAoBxD,IAApB,CAAyBqE,QAAzB;AACH;;AAED,aAAKo0B,cAAL,CAAoB,IAApB,EAA0Bp0B,QAA1B;AACA,aAAK5B,OAAL,CAAauF,IAAb,CAAkB,eAAlB,EAAmC,IAAnC,EAAyC3D,QAAzC;AACH;AACJ;AAED;;;;AA13EJ;AAAA;AAAA,sCA63EsB;AACd,UAAI,CAAC,KAAK3B,WAAV,EAAuB;AACnB;AACH;;AACD,WAAKc,cAAL,GAAsB,EAAtB;;AACA,WAAK,IAAI4G,CAAC,GAAG,KAAKgL,MAAlB,EAA0BhL,CAAC,GAAG,KAAKqc,gBAAnC,EAAqDrc,CAAC,EAAtD,EAA0D;AACtD,aAAKm3B,WAAL,CAAiBn3B,CAAjB,EAAoB,IAApB;AACH;AACJ;AAED;;;;;;AAv4EJ;AAAA;AAAA,mCA44EmBmc,KA54EnB,EA44EsC;AAAA,UAAZgf,KAAY,uEAAJ,EAAI;;AAC9B,UAAI,CAAC,KAAKhyB,OAAV,EAAmB;AACf;AACH;;AACD,UAAIhD,GAAG,GAAG,KAAKvE,gBAAL,CAAsBua,KAAtB,CAAV;AAAA,UACI2d,UAAU,GAAG,KAAK5zB,aAAL,CAAmBiW,KAAnB,CADjB;;AAGA,UAAI,CAAChW,GAAL,EAAU;AACN;AACH,OAT6B,CAW9B;;;AACA,UAAI2zB,UAAU,KAAK,gDAAnB,EAA6B;AACzB,YAAI99B,MAAM,GAAG,sDAAO,CAACm/B,KAAD,CAAP,GAAiBA,KAAjB,GACTA,KAAK,CAACh5B,KAAN,CAAY,MAAM,KAAKG,UAAX,GAAwB,GAApC,CADJ;;AAGA,YAAI,KAAKvE,eAAL,IAAwB,CAAC,KAAKzF,WAAlC,EAA+C;AAC3C,eAAKD,OAAL,CAAauF,IAAb,CAAkB,qBAAlB,EAAyC,IAAzC,EAA+Cue,KAA/C,EACI,KAAKhgB,aADT,EACwB,KAAKo3B,aAAL,EADxB;AAEH;;AAED,aAAKl7B,OAAL,CAAauF,IAAb,CAAkB,gBAAlB,EAAoC,IAApC,EAA0Cue,KAA1C,EAAiDngB,MAAjD;AACH,OAVD,CAWA;AAXA,WAYK,IAAI89B,UAAU,KAAK,iDAAnB,EAA8B;AAC/B,cAAI99B,OAAM,GAAG,EAAb;;AACA,cAAI,KAAK+B,eAAL,IAAwB,CAAC,KAAKzF,WAAlC,EAA+C;AAC3C,iBAAKD,OAAL,CAAauF,IAAb,CAAkB,wBAAlB,EAA4C,IAA5C,EAAkDue,KAAlD,EACI,KAAKhgB,aADT;AAEH;;AACD,cAAI,sDAAO,CAACg/B,KAAD,CAAX,EAAoB;AAChBn/B,mBAAM,GAAGm/B,KAAT;AACH,WAFD,MAEO;AACHA,iBAAK,GAAG,yDAAS,CAACA,KAAD,EAAQ,KAAKrtC,aAAb,CAAjB;AACAkO,mBAAM,GAAGm/B,KAAK,CAACh5B,KAAN,CAAY,MAAM,KAAKG,UAAX,GAAwB,GAApC,CAAT;AACH;;AAED,eAAKjK,OAAL,CAAauF,IAAb,CAAkB,0BAAlB,EAA8C,IAA9C,EAAoDue,KAApD,EAA2DngB,OAA3D;AACH,SAdI,MAeA;AACD,cAAI,KAAK+B,eAAL,IAAwB,CAAC,KAAKzF,WAAlC,EAA+C;AAC3C,iBAAKD,OAAL,CAAauF,IAAb,CAAkB,qBAAlB,EAAyC,IAAzC,EAA+Cue,KAA/C,EACI,KAAKhgB,aADT,EACwB,KAAKo3B,aAAL,EADxB;AAEH;;AACDptB,aAAG,CAACrV,KAAJ,GAAYqqC,KAAZ;AACH;AACJ;AAED;;;;;AA57EJ;AAAA;AAAA,qCAg8EqC;AAAA,UAAlB/xB,GAAkB,uEAAZ,KAAKpP,GAAL,EAAY;AAC7B,UAAIkR,SAAS,GAAG,KAAKA,SAArB;AACA,UAAIkwB,UAAU,GAAGhyB,GAAG,CAACS,WAArB;;AAEA,UAAIqB,SAAS,CAAC/c,MAAV,GAAmB,CAAvB,EAA0B;AACtB,YAAIktC,YAAY,GAAG,KAAK9yB,eAAxB;AACA6yB,kBAAU,GAAGlwB,SAAS,CACjBowB,MADQ,CACD,UAAClS,CAAD,EAAI5oB,CAAJ;AAAA,iBACJqB,QAAQ,CAAEunB,CAAC,IAAIiS,YAAP,EAAsB,EAAtB,CAAR,GACAx5B,QAAQ,CAAErB,CAAC,IAAI66B,YAAP,EAAsB,EAAtB,CAFJ;AAAA,SADC,CAAb;AAKH;;AAEDjyB,SAAG,CAACtI,KAAJ,CAAUwG,KAAV,aAAqB8zB,UAArB;AACAhyB,SAAG,CAACtI,KAAJ,CAAU0J,WAAV,GAAwB,OAAxB;AACH;AAED;;;;;;AAj9EJ;AAAA;AAAA,mCAs9EmC;AAAA,UAAlBpB,GAAkB,uEAAZ,KAAKpP,GAAL,EAAY;AAC3B,UAAIkR,SAAS,GAAG,KAAKA,SAArB;;AACA,UAAIA,SAAS,CAAC/c,MAAV,KAAqB,CAAzB,EAA4B;AACxB;AACH;;AAED,UAAIotC,OAAO,GAAG,gDAAG,CAACnyB,GAAD,EAAM,KAAN,CAAjB;AACA,UAAIN,YAAY,GAAGyyB,OAAO,CAACptC,MAAR,GAAiB,CAApC;AACA,UAAIqtC,IAAI,GAAG,CAAC1yB,YAAD,GAAgBnY,GAAG,CAAC8qC,sBAAJ,EAAhB,GAA+C,IAA1D;AAEA,WAAKtwB,OAAL,CAAa,UAACnL,CAAD,EAAO;AAChB,YAAIrF,GAAJ;;AACA,YAAImO,YAAJ,EAAkB;AACdnO,aAAG,GAAG4gC,OAAO,CAACv7B,CAAD,CAAb;AACH,SAFD,MAEO;AACHrF,aAAG,GAAG,sDAAS,CAAC,KAAD,CAAf;AACA6gC,cAAI,CAACjnC,WAAL,CAAiBoG,GAAjB;AACH;;AACDA,WAAG,CAACmG,KAAJ,CAAUwG,KAAV,GAAkB4D,SAAS,CAAClL,CAAD,CAA3B;AACH,OATD;;AAWA,UAAI,CAAC8I,YAAL,EAAmB;AACfM,WAAG,CAACI,YAAJ,CAAiBgyB,IAAjB,EAAuBpyB,GAAG,CAACnF,UAA3B;AACH;AACJ;AAED;;;;AAh/EJ;AAAA;AAAA,qCAm/EqB;AAAA;;AACb,UAAI,CAAC,KAAK4pB,eAAV,EAA2B;AACvB;AACH;;AACD,WAAK5tB,WAAL,CAAiBvK,OAAjB,CAAyB,UAAC+D,MAAD;AAAA,eAAY,OAAI,CAAC09B,WAAL,CAAiB19B,MAAjB,EAAyB,IAAzB,CAAZ;AAAA,OAAzB;AACH;AAED;;;;AA1/EJ;AAAA;AAAA,mCA6/EmB;AACX,UAAI,CAAC,KAAK0P,OAAV,EAAmB;AACf;AACH;;AAED,WAAK9Q,OAAL,CAAauF,IAAb,CAAkB,yBAAlB,EAA6C,IAA7C;AACA,WAAKkzB,aAAL,CAAmB,IAAnB,EAAyB,KAAKrN,eAAL,EAAzB;;AAEA,WAAK,IAAIx1B,CAAC,GAAG,CAAR,EAAWitB,GAAG,GAAG,KAAKtc,MAAL,CAAYzQ,MAAlC,EAA0CF,CAAC,GAAGitB,GAA9C,EAAmDjtB,CAAC,EAApD,EAAwD;AACpD,aAAKi2B,cAAL,CAAoBj2B,CAApB,EAAuB,EAAvB;AACH;;AAED,WAAK6P,MAAL;AAEA,WAAKkzB,YAAL,CAAkB,IAAlB;AACA,WAAK34B,OAAL,CAAauF,IAAb,CAAkB,wBAAlB,EAA4C,IAA5C;AACH;AAED;;;;;AA/gFJ;AAAA;AAAA,wCAmhFwB;AAChB,aAAO,KAAKnB,cAAZ;AACH;AAED;;;;;AAvhFJ;AAAA;AAAA,sCA2hFsBi/B,QA3hFtB,EA2hFgC;AACxB,WAAKj/B,cAAL,GAAsBi/B,QAAtB;AACH;AAED;;;;;;AA/hFJ;AAAA;AAAA,iDAoiF8C;AAAA,UAAfA,QAAe,uEAAJ,EAAI;AACtC,UAAIniC,GAAG,GAAGmiC,QAAQ,CAACv5B,KAAT,CAAe,GAAf,EAAoB,CAApB,CAAV;AACA5I,SAAG,GAAGA,GAAG,CAAC4I,KAAJ,CAAU,KAAKqJ,OAAf,EAAwB,CAAxB,CAAN;AACA,aAAO3J,QAAQ,CAACtI,GAAD,EAAM,EAAN,CAAf;AACH;AAED;;;;;;;AA1iFJ;AAAA;AAAA,kCAgjFkB0B,QAhjFlB,EAgjF4B;AACpB,uBAAU,KAAKuQ,OAAf,SAAyBvQ,QAAzB,cAAqC,KAAKxG,EAA1C;AACH;AAED;;;;;;AApjFJ;AAAA;AAAA,oCAyjFoB;AACZ,aAAO,KAAKiK,cAAL,CAAoBvQ,MAApB,GAA6B,CAApC;AACH;AAED;;;;;;AA7jFJ;AAAA;AAAA,mCAkkFmB;AACX,aAAO,6DAAW,CAAC,KAAKiK,MAAL,CAAYujC,UAAb,EAAyB,KAAKjQ,QAAL,GAAgB,QAAzC,CAAlB;AACH;AAED;;;;;;AAtkFJ;AAAA;AAAA,wCA2kFwB;AAChB,aAAO,6DAAW,CAAC,KAAKtzB,MAAL,CAAY6zB,UAAb,EACd,KAAKD,YAAL,KAAsB,iBADR,CAAlB;AAEH;AAED;;;;;;AAhlFJ;AAAA;AAAA,oCAqlFoB;AACZ,aAAO,6DAAW,CAAC,KAAK5zB,MAAL,CAAYwjC,WAAb,EACd,KAAK5P,YAAL,KAAsB,SADR,CAAlB;AAEH;AAED;;;;;AA1lFJ;AAAA;AAAA,mCA8lFmB/wB,QA9lFnB,EA8lF6B;AACrB,UAAI,sDAAO,CAACA,QAAD,CAAX,EAAuB;AACnB;AACH;;AACD,WAAK04B,iBAAL,CAAuB,KAAKkI,WAAL,CAAiB5gC,QAAjB,CAAvB;AACH;AAED;;;;;;AArmFJ;AAAA;AAAA,iCA0mFiBA,QA1mFjB,EA0mF2B;AACnB,UAAI2kB,OAAO,GAAG,KAAK1Z,aAAL,CAAmBjL,QAAnB,CAAd;AACA,aAAO,KAAKuyB,eAAL,CAAqBvyB,QAArB,KAAkC,KAAKyvB,UAAvC,IACH9K,OAAO,KAAK,6CADhB;AAEH;AAED;;;;;;AAhnFJ;AAAA;AAAA,+BAqnFe3lB,QArnFf,EAqnFyB;AACjB,aAAO,KAAKZ,YAAL,GAAoB3H,OAApB,CAA4BuI,QAA5B,MAA0C,CAAC,CAAlD;AACH;AAED;;;;;;AAznFJ;AAAA;AAAA,mCA8nFmBA,QA9nFnB,EA8nF6B;AACrB,UAAII,GAAG,GAAG,KAAKL,GAAL,GAAWD,IAAX,CAAgBE,QAAhB,CAAV;AACA,aAAO,KAAK6gC,aAAL,CAAmBzgC,GAAnB,MAA4B,EAAnC;AACH;AAED;;;;;;;AAnoFJ;AAAA;AAAA,sCAyoFsBY,QAzoFtB,EAyoFgC;AACxB,UAAI6gC,UAAU,GAAG,KAAKnR,gBAAtB;;AACA,UAAI,sDAAO,CAACmR,UAAD,CAAX,EAAyB;AACrB,eAAOA,UAAU,CAAC7gC,QAAD,CAAjB;AACH;;AACD,aAAOjN,OAAO,CAAC8tC,UAAD,CAAd;AACH;AAED;;;;;;AAjpFJ;AAAA;AAAA,uCAspFuB7gC,QAtpFvB,EAspFiC;AACzB,UAAI8gC,SAAS,GAAG,KAAKnN,eAArB;;AACA,UAAI,sDAAO,CAACmN,SAAD,CAAX,EAAwB;AACpB,eAAOA,SAAS,CAAC9gC,QAAD,CAAhB;AACH;;AACD,aAAO8gC,SAAP;AACH;AAED;;;;;;;;AA9pFJ;AAAA;AAAA,8BAqqFsE;AAAA,UAA1DtmC,EAA0D,uEAArD,+CAAqD;AAAA,UAA3CumC,UAA2C,uEAA9B,+CAA8B;AAAA,UAApBC,OAAoB,uEAAV,+CAAU;AAC9D,UAAI/gB,GAAG,GAAG,KAAKtP,UAAL,CAAgB,KAAKZ,MAArB,CAAV;;AACA,WAAK,IAAI/c,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGitB,GAApB,EAAyBjtB,CAAC,EAA1B,EAA8B;AAC1B,YAAI+tC,UAAU,CAAC/tC,CAAD,CAAV,KAAkB,IAAtB,EAA4B;AACxB;AACH;;AACD,YAAIguC,OAAO,CAAChuC,CAAD,CAAP,KAAe,IAAnB,EAAyB;AACrB;AACH;;AACDwH,UAAE,CAACxH,CAAD,CAAF;AACH;AACJ;AAED;;;;;;;AAlrFJ;AAAA;AAAA,8BAwrFoC;AAAA;;AAAA,UAAxBiuC,QAAwB,uEAAb,KAAKlxB,MAAQ;AAC5B,aAAO,YAA8D;AAAA,YAA7DvV,EAA6D,uEAAxD,+CAAwD;AAAA,YAA9CumC,UAA8C,uEAAjC,+CAAiC;AAAA,YAAvBC,OAAuB,uEAAb,+CAAa;;AACjE,YAAIliC,IAAI,GAAG,OAAI,CAACC,GAAL,GAAWD,IAAtB;;AACA,YAAImhB,GAAG,GAAG,OAAI,CAAC9C,SAAL,CAAe,IAAf,CAAV;;AACA,aAAK,IAAInqB,CAAC,GAAGiuC,QAAb,EAAuBjuC,CAAC,GAAGitB,GAA3B,EAAgCjtB,CAAC,EAAjC,EAAqC;AACjC,cAAI+tC,UAAU,CAACjiC,IAAI,CAAC9L,CAAD,CAAL,EAAUA,CAAV,CAAV,KAA2B,IAA/B,EAAqC;AACjC;AACH;;AACD,cAAIguC,OAAO,CAACliC,IAAI,CAAC9L,CAAD,CAAL,EAAUA,CAAV,CAAP,KAAwB,IAA5B,EAAkC;AAC9B;AACH;;AACDwH,YAAE,CAACsE,IAAI,CAAC9L,CAAD,CAAL,EAAUA,CAAV,CAAF;AACH;AACJ,OAZD;AAaH;AAED;;;;;;;AAxsFJ;AAAA;AAAA,+BA8sFekuC,QA9sFf,EA8sF0C;AAAA,UAAjB/lC,IAAiB,uEAAV,QAAU;AAClC,UAAIgmC,QAAQ,GAAG,KAAf;AAAA,UACIC,IAAI,GAAGjmC,IAAI,KAAK,QAAT,GAAoB,KAApB,GAA4B,MADvC;AAAA,UAEIkmC,KAAK,GAAG,gDAAG,CAAC3rC,GAAD,EAAMyF,IAAN,CAFf;;AAGA,WAAK,IAAInI,CAAC,GAAG,CAAR,EAAWitB,GAAG,GAAGohB,KAAK,CAACnuC,MAA5B,EAAoCF,CAAC,GAAGitB,GAAxC,EAA6CjtB,CAAC,EAA9C,EAAkD;AAC9C,YAAI,sDAAO,CAACquC,KAAK,CAACruC,CAAD,CAAL,CAASouC,IAAT,CAAD,CAAX,EAA6B;AACzB;AACH;;AACD,YAAIC,KAAK,CAACruC,CAAD,CAAL,CAASouC,IAAT,EAAe1oC,KAAf,CAAqBwoC,QAArB,CAAJ,EAAoC;AAChCC,kBAAQ,GAAG,IAAX;AACA;AACH;AACJ;;AACD,aAAOA,QAAP;AACH;AAED;;;;;;;;AA9tFJ;AAAA;AAAA,4BAquFWG,MAruFX,EAquFmBJ,QAruFnB,EAquF6BK,QAruF7B,EAquFwD;AAAA;;AAAA,UAAjBpmC,IAAiB,uEAAV,QAAU;;AAChD,UAAI,KAAKo/B,UAAL,CAAgB2G,QAAhB,EAA0B/lC,IAA1B,CAAJ,EAAqC;AACjC;AACH;;AACD,UAAIlB,CAAC,GAAG,IAAR;AAAA,UACIunC,QAAQ,GAAG,KADf;AAAA,UAEIC,IAFJ;AAAA,UAGIC,IAAI,GAAG,gDAAG,CAAChsC,GAAD,EAAM,MAAN,CAAH,CAAiB,CAAjB,CAHX;;AAKA,UAAIyF,IAAI,CAACkQ,WAAL,OAAuB,MAA3B,EAAmC;AAC/Bo2B,YAAI,GAAG,sDAAS,CAAC,MAAD,EACZ,CAAC,IAAD,EAAOH,MAAP,CADY,EACI,CAAC,MAAD,EAAS,UAAT,CADJ,EAEZ,CAAC,KAAD,EAAQ,YAAR,CAFY,EAEW,CAAC,MAAD,EAASJ,QAAT,CAFX,CAAhB;AAIH,OALD,MAKO;AACHO,YAAI,GAAG,sDAAS,CAAC,QAAD,EACZ,CAAC,IAAD,EAAOH,MAAP,CADY,EAEZ,CAAC,MAAD,EAAS,iBAAT,CAFY,EAEiB,CAAC,KAAD,EAAQJ,QAAR,CAFjB,CAAhB;AAIH,OAnB+C,CAqBhD;;;AACAO,UAAI,CAACE,MAAL,GAAcF,IAAI,CAACG,kBAAL,GAA0B,YAAM;AAC1C,YAAI,CAACJ,QAAD,KACC,CAAC,OAAI,CAACK,UAAN,IAAoB,OAAI,CAACA,UAAL,KAAoB,QAAxC,IACG,OAAI,CAACA,UAAL,KAAoB,UAFxB,CAAJ,EAEyC;AACrCL,kBAAQ,GAAG,IAAX;;AACA,cAAI,OAAOD,QAAP,KAAoB,UAAxB,EAAoC;AAChCA,oBAAQ,CAACxmC,IAAT,CAAc,IAAd,EAAoBd,CAApB;AACH;AACJ;AACJ,OATD;;AAUAwnC,UAAI,CAACK,OAAL,GAAe,YAAM;AACjB,cAAM,IAAItkC,KAAJ,uCAAyC0jC,QAAzC,EAAN;AACH,OAFD;;AAGAQ,UAAI,CAACpoC,WAAL,CAAiBmoC,IAAjB;AACH;AAED;;;;;AA3wFJ;AAAA;AAAA,oCA+wFoB;AACZ,aAAO,KAAKpkC,WAAZ;AACH;AAED;;;;;AAnxFJ;AAAA;AAAA,mCAuxFmB;AACX,aAAO,KAAKsG,MAAL,IAAe,EAAtB;AACH;AAED;;;;;;AA3xFJ;AAAA;AAAA,iCAgyFiBo+B,MAhyFjB,EAgyFyB;AAAA;;AACjB,UAAI,CAACA,MAAL,EAAa;AACT,eAAO,KAAK5jC,cAAZ;AACH;;AAED,WAAKA,cAAL,GAAsB,EAAtB;AAEA,UAAIgB,OAAO,GAAG,KAAKA,OAAL,EAAd;AACAA,aAAO,CAAC,UAACC,GAAD,EAAS;AACb,YAAI,CAAC,OAAI,CAAC5J,MAAV,EAAkB;AACd,cAAI,OAAI,CAACqqC,aAAL,CAAmBzgC,GAAnB,MAA4B,4CAAhC,EAAsC;AAClC,mBAAI,CAACjB,cAAL,CAAoBxD,IAApB,CAAyByE,GAAG,CAACJ,QAA7B;AACH;AACJ,SAJD,MAIO;AACH,cAAII,GAAG,CAAC2D,YAAJ,CAAiB,UAAjB,MAAiC,MAAjC,IACA3D,GAAG,CAAC2D,YAAJ,CAAiB,UAAjB,MAAiC,IADrC,EAC2C;AACvC,mBAAI,CAAC5E,cAAL,CAAoBxD,IAApB,CAAyByE,GAAG,CAACJ,QAA7B;AACH;AACJ;AACJ,OAXM,CAAP;AAYA,aAAO,KAAKb,cAAZ;AACH;AAED;;;;;AAvzFJ;AAAA;AAAA,yCA2zFyB;AACjB,aAAO,KAAKkR,eAAZ;AACH;AAED;;;;;AA/zFJ;AAAA;AAAA,yCAm0FyB;AACjB,aAAO,KAAKW,UAAZ;AACH;AAED;;;;;;AAv0FJ;AAAA;AAAA,uCA40FuB;AACf,aAAO,KAAKD,MAAZ;AACH;AAED;;;;;AAh1FJ;AAAA;AAAA,sCAo1FsB;AACd,UAAIkvB,MAAM,GAAG,KAAK9hB,SAAL,CAAe,IAAf,CAAb;AACA,aAAQ8hB,MAAM,GAAG,CAAjB;AACH;AAED;;;;;;;AAz1FJ;AAAA;AAAA,4BA+1FYj/B,QA/1FZ,EA+1FkC;AAAA,UAAZuJ,KAAY,uEAAJ,EAAI;;AAC1B,UAAI,KAAKD,QAAL,CAAcpW,MAAd,KAAyB,CAA7B,EAAgC;AAC5B,eAAO,KAAP;AACH;;AACD,UAAI0W,OAAO,GAAG,KAAKN,QAAL,CAActJ,QAAd,CAAd;;AACA,UAAI,oDAAK,CAAC4J,OAAD,CAAT,EAAoB;AAChBA,eAAO,GAAGA,OAAO,CAACzO,IAAlB;AACH;;AACD,aAAOoO,KAAK,CAAC9S,OAAN,CAAcmT,OAAd,MAA2B,CAAC,CAAnC;AACH;AAED;;;;;;AA12FJ;AAAA;AAAA,qCA+2FqB5J,QA/2FrB,EA+2F+B;AACvB,UAAIgiC,KAAK,GAAG,KAAKltC,UAAL,GAAkB,KAAKm4B,GAAL,CAASn4B,UAAT,CAAoBmZ,OAAtC,GAAgD,KAAKlP,GAAL,EAA5D;AACA,UAAIsa,KAAK,GAAG,gDAAG,CAAC2oB,KAAD,EAAQ,OAAR,CAAf;AACA,UAAIxjC,MAAM,GAAG,KAAK6R,kBAAL,EAAb;AACA,UAAI4H,MAAJ;;AACA,UAAIoB,KAAK,CAACnmB,MAAN,KAAiB,CAArB,EAAwB;AACpB+kB,cAAM,GAAG+pB,KAAK,CAACljC,IAAN,CAAWN,MAAX,EAAmBmG,KAAnB,CAAyB3E,QAAzB,CAAT;AACH;;AACD,UAAIqZ,KAAK,CAACnmB,MAAN,KAAiB,CAArB,EAAwB;AACpB+kB,cAAM,GAAGoB,KAAK,CAAC,CAAD,CAAL,CAASva,IAAT,CAAcN,MAAd,EAAsBmG,KAAtB,CAA4B3E,QAA5B,CAAT;AACH;;AACD,aAAOiY,MAAP;AACH;AAED;;;;;;AA73FJ;AAAA;AAAA,qCAk4F8C;AAAA;;AAAA,UAA3BknB,iBAA2B,uEAAP,KAAO;AACtC,UAAIG,OAAO,GAAG,EAAd;AACA,WAAKpvB,OAAL,CACI,UAAC3R,CAAD,EAAO;AACH,YAAI0Z,MAAM,GAAG,OAAI,CAACF,gBAAL,CAAsBxZ,CAAtB,CAAb;;AACA,YAAI0jC,UAAU,GAAG,6DAAgB,CAAChqB,MAAD,CAAjC;AACAqnB,eAAO,CAAC3kC,IAAR,CAAasnC,UAAb;AACH,OALL,EAMI;AACA,gBAAC1jC,CAAD,EAAO;AACH,YAAI4gC,iBAAiB,IAAI,OAAI,CAACrF,YAAL,CAAkB,gBAAlB,CAAzB,EAA8D;AAC1D,iBAAO,OAAI,CAACpqB,SAAL,CAAe,gBAAf,EAAiC8vB,WAAjC,CAA6CjhC,CAA7C,CAAP;AACH;;AACD,eAAO,KAAP;AACH,OAZL;AAcA,aAAO+gC,OAAP;AACH;AAED;;;;;;AAr5FJ;AAAA;AAAA,kCA05FkBt/B,QA15FlB,EA05F4B;AACpB,aAAO,KAAKuwB,WAAL,CAAiBvwB,QAAjB,CAAP;AACH;AAED;;;;;AA95FJ;AAAA;AAAA,0CAk6F0B;AAClB,aAAO,KAAKmd,SAAL,CAAe,KAAf,CAAP;AACH;AAED;;;;;;AAt6FJ;AAAA;AAAA,qCA26FmC;AAAA,UAAhB4kB,MAAgB,uEAAP,KAAO;AAC3B,aAAO,KAAK3jC,YAAL,CAAkB2jC,MAAlB,EAA0B7uC,MAAjC;AACH;AAED;;;;;AA/6FJ;AAAA;AAAA,0BAm7FU;AACF,aAAO,KAAKib,GAAZ;AACH;AAED;;;;;;;AAv7FJ;AAAA;AAAA,+BA67FenO,QA77Ff,EA67FyB;AACjB,UAAIO,OAAO,GAAG,KAAKk2B,gBAAnB;;AACA,UAAI,KAAKn2B,OAAL,CAAaN,QAAb,EAAuB,CAAC,wDAAD,CAAvB,CAAJ,EAAgD;AAC5C,YAAI4J,OAAO,GAAG,KAAKN,QAAL,CAActJ,QAAd,CAAd;;AACA,YAAI4J,OAAO,CAACE,cAAR,CAAuB,SAAvB,CAAJ,EAAuC;AACnCvJ,iBAAO,GAAGqJ,OAAO,CAACrJ,OAAlB;AACH;AACJ;;AACD,aAAOA,OAAP;AACH;AAED;;;;;AAx8FJ;AAAA;AAAA,6BA48Fa;AACL,aAAO,KAAK6lB,GAAZ;AACH;AA98FL;;AAAA;AAAA,I;;;;;;;;;;;;;;;;;;ACnCA;AACA;AAEA,IAAa8b,MAAb,GACI,gBAAYllC,EAAZ,EAA0B;AAAA,MAAV3E,GAAU,uEAAJ,EAAI;;AAAA;;AACtB+R,SAAO,CAAC0lB,GAAR,CAAYz3B,GAAG,CAAC5D,IAAhB;AACA;;;;;AAIA,OAAKuI,EAAL,GAAUA,EAAV;AAEA;;;;;;AAKA,OAAKC,OAAL,GAAe,6DAAW,CAAC5E,GAAG,CAAC4Q,OAAL,EAAc,2DAAW,CAAC5Q,GAAG,CAAC5D,IAAL,CAAzB,CAA1B;AACA2V,SAAO,CAAC0lB,GAAR,CAAY,KAAK7yB,OAAjB,EAA0B,2DAAW,CAAC5E,GAAG,CAAC5D,IAAL,CAArC;;AAEA,OAAKuI,EAAL,CAAQw6B,KAAR,CAAc78B,IAAd,CAAmB,KAAKsC,OAAxB;AACH,CAlBL,C;;;;;;;;;;;;;;;;;;;;;;ACFA;AAAA;;;AAIA,IAAMklC,SAAS,GAAG,KAAK,CAAvB;AAEA;;;;;AAIO,IAAM3O,QAAQ,GAAG,SAAXA,QAAW,GAAW,CAAE,CAA9B;AAEP;;;;;;AAKO,IAAM4O,KAAK,GACd,SADSA,KACT,CAAClnC,GAAD;AAAA,SAASwtB,MAAM,CAAC2Z,SAAP,CAAiBlvC,QAAjB,CAA0B4H,IAA1B,CAA+BG,GAA/B,MAAwC,iBAAjD;AAAA,CADG;AAGP;;;;;;AAKO,IAAMonC,IAAI,GACb,SADSA,IACT,CAACpnC,GAAD;AAAA,SAASwtB,MAAM,CAAC2Z,SAAP,CAAiBlvC,QAAjB,CAA0B4H,IAA1B,CAA+BG,GAA/B,MAAwC,mBAAjD;AAAA,CADG;AAGP;;;;;;AAKO,IAAMqnC,OAAO,GAChB,SADSA,OACT,CAACrnC,GAAD;AAAA,SAASwtB,MAAM,CAAC2Z,SAAP,CAAiBlvC,QAAjB,CAA0B4H,IAA1B,CAA+BG,GAA/B,MAAwC,gBAAjD;AAAA,CADG;AAGP;;;;;;AAKO,IAAMsnC,QAAQ,GACjB,SADSA,QACT,CAACtnC,GAAD;AAAA,SAASwtB,MAAM,CAAC2Z,SAAP,CAAiBlvC,QAAjB,CAA0B4H,IAA1B,CAA+BG,GAA/B,MAAwC,iBAAjD;AAAA,CADG;AAGP;;;;;;AAKO,IAAMunC,QAAQ,GACjB,SADSA,QACT,CAACvnC,GAAD;AAAA,SAASwtB,MAAM,CAAC2Z,SAAP,CAAiBlvC,QAAjB,CAA0B4H,IAA1B,CAA+BG,GAA/B,MAAwC,iBAAjD;AAAA,CADG;AAGP;;;;;;AAKO,IAAMwnC,SAAS,GAClB,SADSA,SACT,CAACxnC,GAAD;AAAA,SAASwtB,MAAM,CAAC2Z,SAAP,CAAiBlvC,QAAjB,CAA0B4H,IAA1B,CAA+BG,GAA/B,MAAwC,kBAAjD;AAAA,CADG;AAGP;;;;;;AAKO,IAAMynC,OAAO,GAAG,SAAVA,OAAU,CAACznC,GAAD;AAAA,SAASA,GAAG,KAAKinC,SAAjB;AAAA,CAAhB;AAEP;;;;;;AAKO,IAAMS,MAAM,GAAG,SAATA,MAAS,CAAC1nC,GAAD;AAAA,SAASA,GAAG,KAAK,IAAjB;AAAA,CAAf;AAEP;;;;;;AAKO,IAAMi0B,OAAO,GAAG,SAAVA,OAAU,CAACj0B,GAAD;AAAA,SAASynC,OAAO,CAACznC,GAAD,CAAP,IAAgB0nC,MAAM,CAAC1nC,GAAD,CAAtB,IAA+BA,GAAG,CAAChI,MAAJ,KAAe,CAAvD;AAAA,CAAhB,C","file":"tablefilter.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn "," \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1]\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t\"main\": 0\n \t};\n\n\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar head = document.getElementsByTagName('head')[0];\n \t\t\t\tvar script = document.createElement('script');\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120000;\n\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = __webpack_require__.p + \"tf-\" + ({}[chunkId]||chunkId) + \"-\" + {\"0\":\"8ba4e8f28dcb16cfc50b\"}[chunkId] + \".js\";\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tfunction onScriptComplete(event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\tvar error = new Error('Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')');\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\thead.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/tablefilter.js\");\n","exports.remove = removeDiacritics;\n\nvar replacementList = [\n {\n base: ' ',\n chars: \"\\u00A0\",\n }, {\n base: '0',\n chars: \"\\u07C0\",\n }, {\n base: 'A',\n chars: \"\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F\",\n }, {\n base: 'AA',\n chars: \"\\uA732\",\n }, {\n base: 'AE',\n chars: \"\\u00C6\\u01FC\\u01E2\",\n }, {\n base: 'AO',\n chars: \"\\uA734\",\n }, {\n base: 'AU',\n chars: \"\\uA736\",\n }, {\n base: 'AV',\n chars: \"\\uA738\\uA73A\",\n }, {\n base: 'AY',\n chars: \"\\uA73C\",\n }, {\n base: 'B',\n chars: \"\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0181\",\n }, {\n base: 'C',\n chars: \"\\u24b8\\uff23\\uA73E\\u1E08\\u0106\\u0043\\u0108\\u010A\\u010C\\u00C7\\u0187\\u023B\",\n }, {\n base: 'D',\n chars: \"\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018A\\u0189\\u1D05\\uA779\",\n }, {\n base: 'Dh',\n chars: \"\\u00D0\",\n }, {\n base: 'DZ',\n chars: \"\\u01F1\\u01C4\",\n }, {\n base: 'Dz',\n chars: \"\\u01F2\\u01C5\",\n }, {\n base: 'E',\n chars: \"\\u025B\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E\\u1D07\",\n }, {\n base: 'F',\n chars: \"\\uA77C\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B\",\n }, {\n base: 'G',\n chars: \"\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E\\u0262\",\n }, {\n base: 'H',\n chars: \"\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D\",\n }, {\n base: 'I',\n chars: \"\\u24BE\\uFF29\\xCC\\xCD\\xCE\\u0128\\u012A\\u012C\\u0130\\xCF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197\",\n }, {\n base: 'J',\n chars: \"\\u24BF\\uFF2A\\u0134\\u0248\\u0237\",\n }, {\n base: 'K',\n chars: \"\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2\",\n }, {\n base: 'L',\n chars: \"\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780\",\n }, {\n base: 'LJ',\n chars: \"\\u01C7\",\n }, {\n base: 'Lj',\n chars: \"\\u01C8\",\n }, {\n base: 'M',\n chars: \"\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C\\u03FB\",\n }, {\n base: 'N',\n chars: \"\\uA7A4\\u0220\\u24C3\\uFF2E\\u01F8\\u0143\\xD1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u019D\\uA790\\u1D0E\",\n }, {\n base: 'NJ',\n chars: \"\\u01CA\",\n }, {\n base: 'Nj',\n chars: \"\\u01CB\",\n }, {\n base: 'O',\n chars: \"\\u24C4\\uFF2F\\xD2\\xD3\\xD4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\xD5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\xD6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\xD8\\u01FE\\u0186\\u019F\\uA74A\\uA74C\",\n }, {\n base: 'OE',\n chars: \"\\u0152\",\n }, {\n base: 'OI',\n chars: \"\\u01A2\",\n }, {\n base: 'OO',\n chars: \"\\uA74E\",\n }, {\n base: 'OU',\n chars: \"\\u0222\",\n }, {\n base: 'P',\n chars: \"\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754\",\n }, {\n base: 'Q',\n chars: \"\\u24C6\\uFF31\\uA756\\uA758\\u024A\",\n }, {\n base: 'R',\n chars: \"\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782\",\n }, {\n base: 'S',\n chars: \"\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784\",\n }, {\n base: 'T',\n chars: \"\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786\",\n }, {\n base: 'Th',\n chars: \"\\u00DE\",\n }, {\n base: 'TZ',\n chars: \"\\uA728\",\n }, {\n base: 'U',\n chars: \"\\u24CA\\uFF35\\xD9\\xDA\\xDB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\xDC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244\",\n }, {\n base: 'V',\n chars: \"\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245\",\n }, {\n base: 'VY',\n chars: \"\\uA760\",\n }, {\n base: 'W',\n chars: \"\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72\",\n }, {\n base: 'X',\n chars: \"\\u24CD\\uFF38\\u1E8A\\u1E8C\",\n }, {\n base: 'Y',\n chars: \"\\u24CE\\uFF39\\u1EF2\\xDD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE\",\n }, {\n base: 'Z',\n chars: \"\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762\",\n }, {\n base: 'a',\n chars: \"\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250\\u0251\",\n }, {\n base: 'aa',\n chars: \"\\uA733\",\n }, {\n base: 'ae',\n chars: \"\\u00E6\\u01FD\\u01E3\",\n }, {\n base: 'ao',\n chars: \"\\uA735\",\n }, {\n base: 'au',\n chars: \"\\uA737\",\n }, {\n base: 'av',\n chars: \"\\uA739\\uA73B\",\n }, {\n base: 'ay',\n chars: \"\\uA73D\",\n }, {\n base: 'b',\n chars: \"\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253\\u0182\",\n }, {\n base: 'c',\n chars: \"\\uFF43\\u24D2\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184\",\n }, {\n base: 'd',\n chars: \"\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\u018B\\u13E7\\u0501\\uA7AA\",\n }, {\n base: 'dh',\n chars: \"\\u00F0\",\n }, {\n base: 'dz',\n chars: \"\\u01F3\\u01C6\",\n }, {\n base: 'e',\n chars: \"\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u01DD\",\n }, {\n base: 'f',\n chars: \"\\u24D5\\uFF46\\u1E1F\\u0192\",\n }, {\n base: 'ff',\n chars: \"\\uFB00\",\n }, {\n base: 'fi',\n chars: \"\\uFB01\",\n }, {\n base: 'fl',\n chars: \"\\uFB02\",\n }, {\n base: 'ffi',\n chars: \"\\uFB03\",\n }, {\n base: 'ffl',\n chars: \"\\uFB04\",\n }, {\n base: 'g',\n chars: \"\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\uA77F\\u1D79\",\n }, {\n base: 'h',\n chars: \"\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265\",\n }, {\n base: 'hv',\n chars: \"\\u0195\",\n }, {\n base: 'i',\n chars: \"\\u24D8\\uFF49\\xEC\\xED\\xEE\\u0129\\u012B\\u012D\\xEF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131\",\n }, {\n base: 'j',\n chars: \"\\u24D9\\uFF4A\\u0135\\u01F0\\u0249\",\n }, {\n base: 'k',\n chars: \"\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3\",\n }, {\n base: 'l',\n chars: \"\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747\\u026D\",\n }, {\n base: 'lj',\n chars: \"\\u01C9\",\n }, {\n base: 'm',\n chars: \"\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F\",\n }, {\n base: 'n',\n chars: \"\\u24DD\\uFF4E\\u01F9\\u0144\\xF1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5\\u043B\\u0509\",\n }, {\n base: 'nj',\n chars: \"\\u01CC\",\n }, {\n base: 'o',\n chars: \"\\u24DE\\uFF4F\\xF2\\xF3\\xF4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\xF5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\xF6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\xF8\\u01FF\\uA74B\\uA74D\\u0275\\u0254\\u1D11\",\n }, {\n base: 'oe',\n chars: \"\\u0153\",\n }, {\n base: 'oi',\n chars: \"\\u01A3\",\n }, {\n base: 'oo',\n chars: \"\\uA74F\",\n }, {\n base: 'ou',\n chars: \"\\u0223\",\n }, {\n base: 'p',\n chars: \"\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755\\u03C1\",\n }, {\n base: 'q',\n chars: \"\\u24E0\\uFF51\\u024B\\uA757\\uA759\",\n }, {\n base: 'r',\n chars: \"\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783\",\n }, {\n base: 's',\n chars: \"\\u24E2\\uFF53\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B\\u0282\",\n }, {\n base: 'ss',\n chars: \"\\xDF\",\n }, {\n base: 't',\n chars: \"\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787\",\n }, {\n base: 'th',\n chars: \"\\u00FE\",\n }, {\n base: 'tz',\n chars: \"\\uA729\",\n }, {\n base: 'u',\n chars: \"\\u24E4\\uFF55\\xF9\\xFA\\xFB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\xFC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289\",\n }, {\n base: 'v',\n chars: \"\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C\",\n }, {\n base: 'vy',\n chars: \"\\uA761\",\n }, {\n base: 'w',\n chars: \"\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73\",\n }, {\n base: 'x',\n chars: \"\\u24E7\\uFF58\\u1E8B\\u1E8D\",\n }, {\n base: 'y',\n chars: \"\\u24E8\\uFF59\\u1EF3\\xFD\\u0177\\u1EF9\\u0233\\u1E8F\\xFF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF\",\n }, {\n base: 'z',\n chars: \"\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763\",\n }\n];\n\nvar diacriticsMap = {};\nfor (var i = 0; i < replacementList.length; i += 1) {\n var chars = replacementList[i].chars;\n for (var j = 0; j < chars.length; j += 1) {\n diacriticsMap[chars[j]] = replacementList[i].base;\n }\n}\n\nfunction removeDiacritics(str) {\n return str.replace(/[^\\u0000-\\u007e]/g, function(c) {\n return diacriticsMap[c] || c;\n });\n}\n\nexports.replacementList = replacementList;\nexports.diacriticsMap = diacriticsMap;\n","/*\n * Sugar v2.0.6\n *\n * Freely distributable and licensed under the MIT-style license.\n * Copyright (c) Andrew Plummer\n * https://sugarjs.com/\n *\n * ---------------------------- */\n(function() {\n 'use strict';\n\n /***\n * @module Core\n * @description Core functionality including the ability to define methods and\n * extend onto natives.\n *\n ***/\n\n // The global to export.\n var Sugar;\n\n // The name of Sugar in the global namespace.\n var SUGAR_GLOBAL = 'Sugar';\n\n // Natives available on initialization. Letting Object go first to ensure its\n // global is set by the time the rest are checking for chainable Object methods.\n var NATIVE_NAMES = 'Object Number String Array Date RegExp Function';\n\n // Static method flag\n var STATIC = 0x1;\n\n // Instance method flag\n var INSTANCE = 0x2;\n\n // IE8 has a broken defineProperty but no defineProperties so this saves a try/catch.\n var PROPERTY_DESCRIPTOR_SUPPORT = !!(Object.defineProperty && Object.defineProperties);\n\n var globalContext = getGlobal();\n\n // Whether object instance methods can be mapped to the prototype.\n var allowObjectPrototype = false;\n\n // A map from Array to SugarArray.\n var namespacesByName = {};\n\n // A map from [object Object] to namespace.\n var namespacesByClassString = {};\n\n // Defining properties.\n // istanbul ignore next\n var defineProperty = PROPERTY_DESCRIPTOR_SUPPORT ? Object.defineProperty : definePropertyShim;\n\n // A default chainable class for unknown types.\n var DefaultChainable = getNewChainableClass('Chainable');\n\n\n // Global methods\n\n function getGlobal() {\n // Get global context by keyword here to avoid issues with libraries\n // that can potentially alter this script's context object.\n return testGlobal(typeof global !== 'undefined' && global) ||\n testGlobal(typeof window !== 'undefined' && window);\n }\n\n function testGlobal(obj) {\n // Note that Rhino uses a different \"global\" keyword so perform an\n // extra check here to ensure that it's actually the global object.\n return obj && obj.Object === Object ? obj : null;\n }\n\n function setupGlobal() {\n Sugar = globalContext[SUGAR_GLOBAL];\n // istanbul ignore if\n if (Sugar) {\n // Reuse already defined Sugar global object.\n return;\n }\n Sugar = function(arg) {\n forEachProperty(Sugar, function(sugarNamespace, name) {\n // Although only the only enumerable properties on the global\n // object are Sugar namespaces, environments that can't set\n // non-enumerable properties will step through the utility methods\n // as well here, so use this check to only allow true namespaces.\n if (hasOwn(namespacesByName, name)) {\n sugarNamespace.extend(arg);\n }\n });\n return Sugar;\n };\n // istanbul ignore else\n if (typeof module !== 'undefined' && module.exports) {\n // Node or webpack environment\n module.exports = Sugar;\n } else {\n // Unwrapped browser environment\n try {\n globalContext[SUGAR_GLOBAL] = Sugar;\n } catch (e) {\n // Contexts such as QML have a read-only global context.\n }\n }\n forEachProperty(NATIVE_NAMES.split(' '), function(name) {\n createNamespace(name);\n });\n setGlobalProperties();\n }\n\n /***\n * @method createNamespace(name)\n * @returns SugarNamespace\n * @namespace Sugar\n * @short Creates a new Sugar namespace.\n * @extra This method is for plugin developers who want to define methods to be\n * used with natives that Sugar does not handle by default. The new\n * namespace will appear on the `Sugar` global with all the methods of\n * normal namespaces, including the ability to define new methods. When\n * extended, any defined methods will be mapped to `name` in the global\n * context.\n *\n * @example\n *\n * Sugar.createNamespace('Boolean');\n *\n * @param {string} name - The namespace name.\n *\n ***/\n function createNamespace(name) {\n\n // Is the current namespace Object?\n var isObject = name === 'Object';\n\n // A Sugar namespace is also a chainable class: Sugar.Array, etc.\n var sugarNamespace = getNewChainableClass(name, true);\n\n /***\n * @method extend([opts])\n * @returns Sugar\n * @namespace Sugar\n * @short Extends Sugar defined methods onto natives.\n * @extra This method can be called on individual namespaces like\n * `Sugar.Array` or on the `Sugar` global itself, in which case\n * [opts] will be forwarded to each `extend` call. For more,\n * see `extending`.\n *\n * @options\n *\n * methods An array of method names to explicitly extend.\n *\n * except An array of method names or global namespaces (`Array`,\n * `String`) to explicitly exclude. Namespaces should be the\n * actual global objects, not strings.\n *\n * namespaces An array of global namespaces (`Array`, `String`) to\n * explicitly extend. Namespaces should be the actual\n * global objects, not strings.\n *\n * enhance A shortcut to disallow all \"enhance\" flags at once\n * (flags listed below). For more, see `enhanced methods`.\n * Default is `true`.\n *\n * enhanceString A boolean allowing String enhancements. Default is `true`.\n *\n * enhanceArray A boolean allowing Array enhancements. Default is `true`.\n *\n * objectPrototype A boolean allowing Sugar to extend Object.prototype\n * with instance methods. This option is off by default\n * and should generally not be used except with caution.\n * For more, see `object methods`.\n *\n * @example\n *\n * Sugar.Array.extend();\n * Sugar.extend();\n *\n * @option {Array} [methods]\n * @option {Array} [except]\n * @option {Array} [namespaces]\n * @option {boolean} [enhance]\n * @option {boolean} [enhanceString]\n * @option {boolean} [enhanceArray]\n * @option {boolean} [objectPrototype]\n * @param {ExtendOptions} [opts]\n *\n ***\n * @method extend([opts])\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Extends Sugar defined methods for a specific namespace onto natives.\n * @param {ExtendOptions} [opts]\n *\n ***/\n var extend = function (opts) {\n\n var nativeClass = globalContext[name], nativeProto = nativeClass.prototype;\n var staticMethods = {}, instanceMethods = {}, methodsByName;\n\n function objectRestricted(name, target) {\n return isObject && target === nativeProto &&\n (!allowObjectPrototype || name === 'get' || name === 'set');\n }\n\n function arrayOptionExists(field, val) {\n var arr = opts[field];\n if (arr) {\n for (var i = 0, el; el = arr[i]; i++) {\n if (el === val) {\n return true;\n }\n }\n }\n return false;\n }\n\n function arrayOptionExcludes(field, val) {\n return opts[field] && !arrayOptionExists(field, val);\n }\n\n function disallowedByFlags(methodName, target, flags) {\n // Disallowing methods by flag currently only applies if methods already\n // exist to avoid enhancing native methods, as aliases should still be\n // extended (i.e. Array#all should still be extended even if Array#every\n // is being disallowed by a flag).\n if (!target[methodName] || !flags) {\n return false;\n }\n for (var i = 0; i < flags.length; i++) {\n if (opts[flags[i]] === false) {\n return true;\n }\n }\n }\n\n function namespaceIsExcepted() {\n return arrayOptionExists('except', nativeClass) ||\n arrayOptionExcludes('namespaces', nativeClass);\n }\n\n function methodIsExcepted(methodName) {\n return arrayOptionExists('except', methodName);\n }\n\n function canExtend(methodName, method, target) {\n return !objectRestricted(methodName, target) &&\n !disallowedByFlags(methodName, target, method.flags) &&\n !methodIsExcepted(methodName);\n }\n\n opts = opts || {};\n methodsByName = opts.methods;\n\n if (namespaceIsExcepted()) {\n return;\n } else if (isObject && typeof opts.objectPrototype === 'boolean') {\n // Store \"objectPrototype\" flag for future reference.\n allowObjectPrototype = opts.objectPrototype;\n }\n\n forEachProperty(methodsByName || sugarNamespace, function(method, methodName) {\n if (methodsByName) {\n // If we have method names passed in an array,\n // then we need to flip the key and value here\n // and find the method in the Sugar namespace.\n methodName = method;\n method = sugarNamespace[methodName];\n }\n if (hasOwn(method, 'instance') && canExtend(methodName, method, nativeProto)) {\n instanceMethods[methodName] = method.instance;\n }\n if(hasOwn(method, 'static') && canExtend(methodName, method, nativeClass)) {\n staticMethods[methodName] = method;\n }\n });\n\n // Accessing the extend target each time instead of holding a reference as\n // it may have been overwritten (for example Date by Sinon). Also need to\n // access through the global to allow extension of user-defined namespaces.\n extendNative(nativeClass, staticMethods);\n extendNative(nativeProto, instanceMethods);\n\n if (!methodsByName) {\n // If there are no method names passed, then\n // all methods in the namespace will be extended\n // to the native. This includes all future defined\n // methods, so add a flag here to check later.\n setProperty(sugarNamespace, 'active', true);\n }\n return sugarNamespace;\n };\n\n function defineWithOptionCollect(methodName, instance, args) {\n setProperty(sugarNamespace, methodName, function(arg1, arg2, arg3) {\n var opts = collectDefineOptions(arg1, arg2, arg3);\n defineMethods(sugarNamespace, opts.methods, instance, args, opts.last);\n return sugarNamespace;\n });\n }\n\n /***\n * @method defineStatic(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines static methods on the namespace that can later be extended\n * onto the native globals.\n * @extra Accepts either a single object mapping names to functions, or name\n * and function as two arguments. If `extend` was previously called\n * with no arguments, the method will be immediately mapped to its\n * native when defined.\n *\n * @example\n *\n * Sugar.Number.defineStatic({\n * isOdd: function (num) {\n * return num % 2 === 1;\n * }\n * });\n *\n * @signature defineStatic(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineStatic', STATIC);\n\n /***\n * @method defineInstance(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines methods on the namespace that can later be extended as\n * instance methods onto the native prototype.\n * @extra Accepts either a single object mapping names to functions, or name\n * and function as two arguments. All functions should accept the\n * native for which they are mapped as their first argument, and should\n * never refer to `this`. If `extend` was previously called with no\n * arguments, the method will be immediately mapped to its native when\n * defined.\n *\n * Methods cannot accept more than 4 arguments in addition to the\n * native (5 arguments total). Any additional arguments will not be\n * mapped. If the method needs to accept unlimited arguments, use\n * `defineInstanceWithArguments`. Otherwise if more options are\n * required, use an options object instead.\n *\n * @example\n *\n * Sugar.Number.defineInstance({\n * square: function (num) {\n * return num * num;\n * }\n * });\n *\n * @signature defineInstance(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineInstance', INSTANCE);\n\n /***\n * @method defineInstanceAndStatic(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short A shortcut to define both static and instance methods on the namespace.\n * @extra This method is intended for use with `Object` instance methods. Sugar\n * will not map any methods to `Object.prototype` by default, so defining\n * instance methods as static helps facilitate their proper use.\n *\n * @example\n *\n * Sugar.Object.defineInstanceAndStatic({\n * isAwesome: function (obj) {\n * // check if obj is awesome!\n * }\n * });\n *\n * @signature defineInstanceAndStatic(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineInstanceAndStatic', INSTANCE | STATIC);\n\n\n /***\n * @method defineStaticWithArguments(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines static methods that collect arguments.\n * @extra This method is identical to `defineStatic`, except that when defined\n * methods are called, they will collect any arguments past `n - 1`,\n * where `n` is the number of arguments that the method accepts.\n * Collected arguments will be passed to the method in an array\n * as the last argument defined on the function.\n *\n * @example\n *\n * Sugar.Number.defineStaticWithArguments({\n * addAll: function (num, args) {\n * for (var i = 0; i < args.length; i++) {\n * num += args[i];\n * }\n * return num;\n * }\n * });\n *\n * @signature defineStaticWithArguments(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineStaticWithArguments', STATIC, true);\n\n /***\n * @method defineInstanceWithArguments(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines instance methods that collect arguments.\n * @extra This method is identical to `defineInstance`, except that when\n * defined methods are called, they will collect any arguments past\n * `n - 1`, where `n` is the number of arguments that the method\n * accepts. Collected arguments will be passed to the method as the\n * last argument defined on the function.\n *\n * @example\n *\n * Sugar.Number.defineInstanceWithArguments({\n * addAll: function (num, args) {\n * for (var i = 0; i < args.length; i++) {\n * num += args[i];\n * }\n * return num;\n * }\n * });\n *\n * @signature defineInstanceWithArguments(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineInstanceWithArguments', INSTANCE, true);\n\n /***\n * @method defineStaticPolyfill(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines static methods that are mapped onto the native if they do\n * not already exist.\n * @extra Intended only for use creating polyfills that follow the ECMAScript\n * spec. Accepts either a single object mapping names to functions, or\n * name and function as two arguments. Note that polyfill methods will\n * be immediately mapped onto their native prototype regardless of the\n * use of `extend`.\n *\n * @example\n *\n * Sugar.Object.defineStaticPolyfill({\n * keys: function (obj) {\n * // get keys!\n * }\n * });\n *\n * @signature defineStaticPolyfill(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n setProperty(sugarNamespace, 'defineStaticPolyfill', function(arg1, arg2, arg3) {\n var opts = collectDefineOptions(arg1, arg2, arg3);\n extendNative(globalContext[name], opts.methods, true, opts.last);\n return sugarNamespace;\n });\n\n /***\n * @method defineInstancePolyfill(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines instance methods that are mapped onto the native prototype\n * if they do not already exist.\n * @extra Intended only for use creating polyfills that follow the ECMAScript\n * spec. Accepts either a single object mapping names to functions, or\n * name and function as two arguments. This method differs from\n * `defineInstance` as there is no static signature (as the method\n * is mapped as-is to the native), so it should refer to its `this`\n * object. Note that polyfill methods will be immediately mapped onto\n * their native prototype regardless of the use of `extend`.\n *\n * @example\n *\n * Sugar.Array.defineInstancePolyfill({\n * indexOf: function (arr, el) {\n * // index finding code here!\n * }\n * });\n *\n * @signature defineInstancePolyfill(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n setProperty(sugarNamespace, 'defineInstancePolyfill', function(arg1, arg2, arg3) {\n var opts = collectDefineOptions(arg1, arg2, arg3);\n extendNative(globalContext[name].prototype, opts.methods, true, opts.last);\n // Map instance polyfills to chainable as well.\n forEachProperty(opts.methods, function(fn, methodName) {\n defineChainableMethod(sugarNamespace, methodName, fn);\n });\n return sugarNamespace;\n });\n\n /***\n * @method alias(toName, from)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Aliases one Sugar method to another.\n *\n * @example\n *\n * Sugar.Array.alias('all', 'every');\n *\n * @signature alias(toName, fn)\n * @param {string} toName - Name for new method.\n * @param {string|Function} from - Method to alias, or string shortcut.\n ***/\n setProperty(sugarNamespace, 'alias', function(name, source) {\n var method = typeof source === 'string' ? sugarNamespace[source] : source;\n setMethod(sugarNamespace, name, method);\n return sugarNamespace;\n });\n\n // Each namespace can extend only itself through its .extend method.\n setProperty(sugarNamespace, 'extend', extend);\n\n // Cache the class to namespace relationship for later use.\n namespacesByName[name] = sugarNamespace;\n namespacesByClassString['[object ' + name + ']'] = sugarNamespace;\n\n mapNativeToChainable(name);\n mapObjectChainablesToNamespace(sugarNamespace);\n\n\n // Export\n return Sugar[name] = sugarNamespace;\n }\n\n function setGlobalProperties() {\n setProperty(Sugar, 'VERSION', '2.0.6');\n setProperty(Sugar, 'extend', Sugar);\n setProperty(Sugar, 'toString', toString);\n setProperty(Sugar, 'createNamespace', createNamespace);\n\n setProperty(Sugar, 'util', {\n 'hasOwn': hasOwn,\n 'getOwn': getOwn,\n 'setProperty': setProperty,\n 'classToString': classToString,\n 'defineProperty': defineProperty,\n 'forEachProperty': forEachProperty,\n 'mapNativeToChainable': mapNativeToChainable\n });\n }\n\n function toString() {\n return SUGAR_GLOBAL;\n }\n\n\n // Defining Methods\n\n function defineMethods(sugarNamespace, methods, type, args, flags) {\n forEachProperty(methods, function(method, methodName) {\n var instanceMethod, staticMethod = method;\n if (args) {\n staticMethod = wrapMethodWithArguments(method);\n }\n if (flags) {\n staticMethod.flags = flags;\n }\n\n // A method may define its own custom implementation, so\n // make sure that's not the case before creating one.\n if (type & INSTANCE && !method.instance) {\n instanceMethod = wrapInstanceMethod(method, args);\n setProperty(staticMethod, 'instance', instanceMethod);\n }\n\n if (type & STATIC) {\n setProperty(staticMethod, 'static', true);\n }\n\n setMethod(sugarNamespace, methodName, staticMethod);\n\n if (sugarNamespace.active) {\n // If the namespace has been activated (.extend has been called),\n // then map this method as well.\n sugarNamespace.extend(methodName);\n }\n });\n }\n\n function collectDefineOptions(arg1, arg2, arg3) {\n var methods, last;\n if (typeof arg1 === 'string') {\n methods = {};\n methods[arg1] = arg2;\n last = arg3;\n } else {\n methods = arg1;\n last = arg2;\n }\n return {\n last: last,\n methods: methods\n };\n }\n\n function wrapInstanceMethod(fn, args) {\n return args ? wrapMethodWithArguments(fn, true) : wrapInstanceMethodFixed(fn);\n }\n\n function wrapMethodWithArguments(fn, instance) {\n // Functions accepting enumerated arguments will always have \"args\" as the\n // last argument, so subtract one from the function length to get the point\n // at which to start collecting arguments. If this is an instance method on\n // a prototype, then \"this\" will be pushed into the arguments array so start\n // collecting 1 argument earlier.\n var startCollect = fn.length - 1 - (instance ? 1 : 0);\n return function() {\n var args = [], collectedArgs = [], len;\n if (instance) {\n args.push(this);\n }\n len = Math.max(arguments.length, startCollect);\n // Optimized: no leaking arguments\n for (var i = 0; i < len; i++) {\n if (i < startCollect) {\n args.push(arguments[i]);\n } else {\n collectedArgs.push(arguments[i]);\n }\n }\n args.push(collectedArgs);\n return fn.apply(this, args);\n };\n }\n\n function wrapInstanceMethodFixed(fn) {\n switch(fn.length) {\n // Wrapped instance methods will always be passed the instance\n // as the first argument, but requiring the argument to be defined\n // may cause confusion here, so return the same wrapped function regardless.\n case 0:\n case 1:\n return function() {\n return fn(this);\n };\n case 2:\n return function(a) {\n return fn(this, a);\n };\n case 3:\n return function(a, b) {\n return fn(this, a, b);\n };\n case 4:\n return function(a, b, c) {\n return fn(this, a, b, c);\n };\n case 5:\n return function(a, b, c, d) {\n return fn(this, a, b, c, d);\n };\n }\n }\n\n // Method helpers\n\n function extendNative(target, source, polyfill, override) {\n forEachProperty(source, function(method, name) {\n if (polyfill && !override && target[name]) {\n // Method exists, so bail.\n return;\n }\n setProperty(target, name, method);\n });\n }\n\n function setMethod(sugarNamespace, methodName, method) {\n sugarNamespace[methodName] = method;\n if (method.instance) {\n defineChainableMethod(sugarNamespace, methodName, method.instance, true);\n }\n }\n\n\n // Chainables\n\n function getNewChainableClass(name) {\n var fn = function SugarChainable(obj, arg) {\n if (!(this instanceof fn)) {\n return new fn(obj, arg);\n }\n if (this.constructor !== fn) {\n // Allow modules to define their own constructors.\n obj = this.constructor.apply(obj, arguments);\n }\n this.raw = obj;\n };\n setProperty(fn, 'toString', function() {\n return SUGAR_GLOBAL + name;\n });\n setProperty(fn.prototype, 'valueOf', function() {\n return this.raw;\n });\n return fn;\n }\n\n function defineChainableMethod(sugarNamespace, methodName, fn) {\n var wrapped = wrapWithChainableResult(fn), existing, collision, dcp;\n dcp = DefaultChainable.prototype;\n existing = dcp[methodName];\n\n // If the method was previously defined on the default chainable, then a\n // collision exists, so set the method to a disambiguation function that will\n // lazily evaluate the object and find it's associated chainable. An extra\n // check is required to avoid false positives from Object inherited methods.\n collision = existing && existing !== Object.prototype[methodName];\n\n // The disambiguation function is only required once.\n if (!existing || !existing.disambiguate) {\n dcp[methodName] = collision ? disambiguateMethod(methodName) : wrapped;\n }\n\n // The target chainable always receives the wrapped method. Additionally,\n // if the target chainable is Sugar.Object, then map the wrapped method\n // to all other namespaces as well if they do not define their own method\n // of the same name. This way, a Sugar.Number will have methods like\n // isEqual that can be called on any object without having to traverse up\n // the prototype chain and perform disambiguation, which costs cycles.\n // Note that the \"if\" block below actually does nothing on init as Object\n // goes first and no other namespaces exist yet. However it needs to be\n // here as Object instance methods defined later also need to be mapped\n // back onto existing namespaces.\n sugarNamespace.prototype[methodName] = wrapped;\n if (sugarNamespace === Sugar.Object) {\n mapObjectChainableToAllNamespaces(methodName, wrapped);\n }\n }\n\n function mapObjectChainablesToNamespace(sugarNamespace) {\n forEachProperty(Sugar.Object && Sugar.Object.prototype, function(val, methodName) {\n if (typeof val === 'function') {\n setObjectChainableOnNamespace(sugarNamespace, methodName, val);\n }\n });\n }\n\n function mapObjectChainableToAllNamespaces(methodName, fn) {\n forEachProperty(namespacesByName, function(sugarNamespace) {\n setObjectChainableOnNamespace(sugarNamespace, methodName, fn);\n });\n }\n\n function setObjectChainableOnNamespace(sugarNamespace, methodName, fn) {\n var proto = sugarNamespace.prototype;\n if (!hasOwn(proto, methodName)) {\n proto[methodName] = fn;\n }\n }\n\n function wrapWithChainableResult(fn) {\n return function() {\n return new DefaultChainable(fn.apply(this.raw, arguments));\n };\n }\n\n function disambiguateMethod(methodName) {\n var fn = function() {\n var raw = this.raw, sugarNamespace;\n if (raw != null) {\n // Find the Sugar namespace for this unknown.\n sugarNamespace = namespacesByClassString[classToString(raw)];\n }\n if (!sugarNamespace) {\n // If no sugarNamespace can be resolved, then default\n // back to Sugar.Object so that undefined and other\n // non-supported types can still have basic object\n // methods called on them, such as type checks.\n sugarNamespace = Sugar.Object;\n }\n\n return new sugarNamespace(raw)[methodName].apply(this, arguments);\n };\n fn.disambiguate = true;\n return fn;\n }\n\n function mapNativeToChainable(name, methodNames) {\n var sugarNamespace = namespacesByName[name],\n nativeProto = globalContext[name].prototype;\n\n if (!methodNames && ownPropertyNames) {\n methodNames = ownPropertyNames(nativeProto);\n }\n\n forEachProperty(methodNames, function(methodName) {\n if (nativeMethodProhibited(methodName)) {\n // Sugar chainables have their own constructors as well as \"valueOf\"\n // methods, so exclude them here. The __proto__ argument should be trapped\n // by the function check below, however simply accessing this property on\n // Object.prototype causes QML to segfault, so pre-emptively excluding it.\n return;\n }\n try {\n var fn = nativeProto[methodName];\n if (typeof fn !== 'function') {\n // Bail on anything not a function.\n return;\n }\n } catch (e) {\n // Function.prototype has properties that\n // will throw errors when accessed.\n return;\n }\n defineChainableMethod(sugarNamespace, methodName, fn);\n });\n }\n\n function nativeMethodProhibited(methodName) {\n return methodName === 'constructor' ||\n methodName === 'valueOf' ||\n methodName === '__proto__';\n }\n\n\n // Util\n\n // Internal references\n var ownPropertyNames = Object.getOwnPropertyNames,\n internalToString = Object.prototype.toString,\n internalHasOwnProperty = Object.prototype.hasOwnProperty;\n\n // Defining this as a variable here as the ES5 module\n // overwrites it to patch DONTENUM.\n var forEachProperty = function (obj, fn) {\n for(var key in obj) {\n if (!hasOwn(obj, key)) continue;\n if (fn.call(obj, obj[key], key, obj) === false) break;\n }\n };\n\n // istanbul ignore next\n function definePropertyShim(obj, prop, descriptor) {\n obj[prop] = descriptor.value;\n }\n\n function setProperty(target, name, value, enumerable) {\n defineProperty(target, name, {\n value: value,\n enumerable: !!enumerable,\n configurable: true,\n writable: true\n });\n }\n\n // PERF: Attempts to speed this method up get very Heisenbergy. Quickly\n // returning based on typeof works for primitives, but slows down object\n // types. Even === checks on null and undefined (no typeof) will end up\n // basically breaking even. This seems to be as fast as it can go.\n function classToString(obj) {\n return internalToString.call(obj);\n }\n\n function hasOwn(obj, prop) {\n return !!obj && internalHasOwnProperty.call(obj, prop);\n }\n\n function getOwn(obj, prop) {\n if (hasOwn(obj, prop)) {\n return obj[prop];\n }\n }\n\n setupGlobal();\n\n /***\n * @module Common\n * @description Internal utility and common methods.\n ***/\n\n // Flag allowing native methods to be enhanced.\n var ENHANCEMENTS_FLAG = 'enhance';\n\n // For type checking, etc. Excludes object as this is more nuanced.\n var NATIVE_TYPES = 'Boolean Number String Date RegExp Function Array Error Set Map';\n\n // Do strings have no keys?\n var NO_KEYS_IN_STRING_OBJECTS = !('0' in Object('a'));\n\n // Prefix for private properties.\n var PRIVATE_PROP_PREFIX = '_sugar_';\n\n // Matches 1..2 style ranges in properties.\n var PROPERTY_RANGE_REG = /^(.*?)\\[([-\\d]*)\\.\\.([-\\d]*)\\](.*)$/;\n\n // WhiteSpace/LineTerminator as defined in ES5.1 plus Unicode characters in the Space, Separator category.\n var TRIM_CHARS = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u2028\\u2029\\u3000\\uFEFF';\n\n // Regex for matching a formatted string.\n var STRING_FORMAT_REG = /([{}])\\1|{([^}]*)}|(%)%|(%(\\w*))/g;\n\n // Common chars\n var HALF_WIDTH_ZERO = 0x30,\n FULL_WIDTH_ZERO = 0xff10,\n HALF_WIDTH_PERIOD = '.',\n FULL_WIDTH_PERIOD = '.',\n HALF_WIDTH_COMMA = ',',\n OPEN_BRACE = '{',\n CLOSE_BRACE = '}';\n\n // Namespace aliases\n var sugarObject = Sugar.Object,\n sugarArray = Sugar.Array,\n sugarDate = Sugar.Date,\n sugarString = Sugar.String,\n sugarNumber = Sugar.Number,\n sugarFunction = Sugar.Function,\n sugarRegExp = Sugar.RegExp;\n\n // Class checks\n var isSerializable,\n isBoolean, isNumber, isString,\n isDate, isRegExp, isFunction,\n isArray, isSet, isMap, isError;\n\n function buildClassChecks() {\n\n var knownTypes = {};\n\n function addCoreTypes() {\n\n var names = spaceSplit(NATIVE_TYPES);\n\n isBoolean = buildPrimitiveClassCheck(names[0]);\n isNumber = buildPrimitiveClassCheck(names[1]);\n isString = buildPrimitiveClassCheck(names[2]);\n\n isDate = buildClassCheck(names[3]);\n isRegExp = buildClassCheck(names[4]);\n\n // Wanted to enhance performance here by using simply \"typeof\"\n // but Firefox has two major issues that make this impossible,\n // one fixed, the other not, so perform a full class check here.\n //\n // 1. Regexes can be typeof \"function\" in FF < 3\n // https://bugzilla.mozilla.org/show_bug.cgi?id=61911 (fixed)\n //\n // 2. HTMLEmbedElement and HTMLObjectElement are be typeof \"function\"\n // https://bugzilla.mozilla.org/show_bug.cgi?id=268945 (won't fix)\n isFunction = buildClassCheck(names[5]);\n\n // istanbul ignore next\n isArray = Array.isArray || buildClassCheck(names[6]);\n isError = buildClassCheck(names[7]);\n\n isSet = buildClassCheck(names[8], typeof Set !== 'undefined' && Set);\n isMap = buildClassCheck(names[9], typeof Map !== 'undefined' && Map);\n\n // Add core types as known so that they can be checked by value below,\n // notably excluding Functions and adding Arguments and Error.\n addKnownType('Arguments');\n addKnownType(names[0]);\n addKnownType(names[1]);\n addKnownType(names[2]);\n addKnownType(names[3]);\n addKnownType(names[4]);\n addKnownType(names[6]);\n\n }\n\n function addArrayTypes() {\n var types = 'Int8 Uint8 Uint8Clamped Int16 Uint16 Int32 Uint32 Float32 Float64';\n forEach(spaceSplit(types), function(str) {\n addKnownType(str + 'Array');\n });\n }\n\n function addKnownType(className) {\n var str = '[object '+ className +']';\n knownTypes[str] = true;\n }\n\n function isKnownType(className) {\n return knownTypes[className];\n }\n\n function buildClassCheck(className, globalObject) {\n // istanbul ignore if\n if (globalObject && isClass(new globalObject, 'Object')) {\n return getConstructorClassCheck(globalObject);\n } else {\n return getToStringClassCheck(className);\n }\n }\n\n // Map and Set may be [object Object] in certain IE environments.\n // In this case we need to perform a check using the constructor\n // instead of Object.prototype.toString.\n // istanbul ignore next\n function getConstructorClassCheck(obj) {\n var ctorStr = String(obj);\n return function(obj) {\n return String(obj.constructor) === ctorStr;\n };\n }\n\n function getToStringClassCheck(className) {\n return function(obj, str) {\n // perf: Returning up front on instanceof appears to be slower.\n return isClass(obj, className, str);\n };\n }\n\n function buildPrimitiveClassCheck(className) {\n var type = className.toLowerCase();\n return function(obj) {\n var t = typeof obj;\n return t === type || t === 'object' && isClass(obj, className);\n };\n }\n\n addCoreTypes();\n addArrayTypes();\n\n isSerializable = function(obj, className) {\n // Only known objects can be serialized. This notably excludes functions,\n // host objects, Symbols (which are matched by reference), and instances\n // of classes. The latter can arguably be matched by value, but\n // distinguishing between these and host objects -- which should never be\n // compared by value -- is very tricky so not dealing with it here.\n return isKnownType(className) || isPlainObject(obj, className);\n };\n\n }\n\n function isClass(obj, className, str) {\n if (!str) {\n str = classToString(obj);\n }\n return str === '[object '+ className +']';\n }\n\n // Wrapping the core's \"define\" methods to\n // save a few bytes in the minified script.\n function wrapNamespace(method) {\n return function(sugarNamespace, arg1, arg2) {\n sugarNamespace[method](arg1, arg2);\n };\n }\n\n // Method define aliases\n var alias = wrapNamespace('alias'),\n defineStatic = wrapNamespace('defineStatic'),\n defineInstance = wrapNamespace('defineInstance'),\n defineStaticPolyfill = wrapNamespace('defineStaticPolyfill'),\n defineInstancePolyfill = wrapNamespace('defineInstancePolyfill'),\n defineInstanceAndStatic = wrapNamespace('defineInstanceAndStatic'),\n defineInstanceWithArguments = wrapNamespace('defineInstanceWithArguments');\n\n function defineInstanceSimilar(sugarNamespace, set, fn, flags) {\n defineInstance(sugarNamespace, collectSimilarMethods(set, fn), flags);\n }\n\n function defineInstanceAndStaticSimilar(sugarNamespace, set, fn, flags) {\n defineInstanceAndStatic(sugarNamespace, collectSimilarMethods(set, fn), flags);\n }\n\n function collectSimilarMethods(set, fn) {\n var methods = {};\n if (isString(set)) {\n set = spaceSplit(set);\n }\n forEach(set, function(el, i) {\n fn(methods, el, i);\n });\n return methods;\n }\n\n // This song and dance is to fix methods to a different length\n // from what they actually accept in order to stay in line with\n // spec. Additionally passing argument length, as some methods\n // throw assertion errors based on this (undefined check is not\n // enough). Fortunately for now spec is such that passing 3\n // actual arguments covers all requirements. Note that passing\n // the argument length also forces the compiler to not rewrite\n // length of the compiled function.\n function fixArgumentLength(fn) {\n var staticFn = function(a) {\n var args = arguments;\n return fn(a, args[1], args[2], args.length - 1);\n };\n staticFn.instance = function(b) {\n var args = arguments;\n return fn(this, b, args[1], args.length);\n };\n return staticFn;\n }\n\n function defineAccessor(namespace, name, fn) {\n setProperty(namespace, name, fn);\n }\n\n function defineOptionsAccessor(namespace, defaults) {\n var obj = simpleClone(defaults);\n\n function getOption(name) {\n return obj[name];\n }\n\n function setOption(arg1, arg2) {\n var options;\n if (arguments.length === 1) {\n options = arg1;\n } else {\n options = {};\n options[arg1] = arg2;\n }\n forEachProperty(options, function(val, name) {\n if (val === null) {\n val = defaults[name];\n }\n obj[name] = val;\n });\n }\n\n defineAccessor(namespace, 'getOption', getOption);\n defineAccessor(namespace, 'setOption', setOption);\n return getOption;\n }\n\n // For methods defined directly on the prototype like Range\n function defineOnPrototype(ctor, methods) {\n var proto = ctor.prototype;\n forEachProperty(methods, function(val, key) {\n proto[key] = val;\n });\n }\n\n // Argument helpers\n\n function assertArgument(exists) {\n if (!exists) {\n throw new TypeError('Argument required');\n }\n }\n\n function assertCallable(obj) {\n if (!isFunction(obj)) {\n throw new TypeError('Function is not callable');\n }\n }\n\n function assertArray(obj) {\n if (!isArray(obj)) {\n throw new TypeError('Array required');\n }\n }\n\n function assertWritable(obj) {\n if (isPrimitive(obj)) {\n // If strict mode is active then primitives will throw an\n // error when attempting to write properties. We can't be\n // sure if strict mode is available, so pre-emptively\n // throw an error here to ensure consistent behavior.\n throw new TypeError('Property cannot be written');\n }\n }\n\n // Coerces an object to a positive integer.\n // Does not allow Infinity.\n function coercePositiveInteger(n) {\n n = +n || 0;\n if (n < 0 || !isNumber(n) || !isFinite(n)) {\n throw new RangeError('Invalid number');\n }\n return trunc(n);\n }\n\n\n // General helpers\n\n function isDefined(o) {\n return o !== undefined;\n }\n\n function isUndefined(o) {\n return o === undefined;\n }\n\n function privatePropertyAccessor(key) {\n var privateKey = PRIVATE_PROP_PREFIX + key;\n return function(obj, val) {\n if (arguments.length > 1) {\n setProperty(obj, privateKey, val);\n return obj;\n }\n return obj[privateKey];\n };\n }\n\n function setChainableConstructor(sugarNamespace, createFn) {\n sugarNamespace.prototype.constructor = function() {\n return createFn.apply(this, arguments);\n };\n }\n\n // Fuzzy matching helpers\n\n function getMatcher(f) {\n if (!isPrimitive(f)) {\n var className = classToString(f);\n if (isRegExp(f, className)) {\n return regexMatcher(f);\n } else if (isDate(f, className)) {\n return dateMatcher(f);\n } else if (isFunction(f, className)) {\n return functionMatcher(f);\n } else if (isPlainObject(f, className)) {\n return fuzzyMatcher(f);\n }\n }\n // Default is standard isEqual\n return defaultMatcher(f);\n }\n\n function fuzzyMatcher(obj) {\n var matchers = {};\n return function(el, i, arr) {\n var matched = true;\n if (!isObjectType(el)) {\n return false;\n }\n forEachProperty(obj, function(val, key) {\n matchers[key] = getOwn(matchers, key) || getMatcher(val);\n if (matchers[key].call(arr, el[key], i, arr) === false) {\n matched = false;\n }\n return matched;\n });\n return matched;\n };\n }\n\n function defaultMatcher(f) {\n return function(el) {\n return isEqual(el, f);\n };\n }\n\n function regexMatcher(reg) {\n reg = RegExp(reg);\n return function(el) {\n return reg.test(el);\n };\n }\n\n function dateMatcher(d) {\n var ms = d.getTime();\n return function(el) {\n return !!(el && el.getTime) && el.getTime() === ms;\n };\n }\n\n function functionMatcher(fn) {\n return function(el, i, arr) {\n // Return true up front if match by reference\n return el === fn || fn.call(arr, el, i, arr);\n };\n }\n\n // Object helpers\n\n function getKeys(obj) {\n return Object.keys(obj);\n }\n\n function deepHasProperty(obj, key, any) {\n return handleDeepProperty(obj, key, any, true);\n }\n\n function deepGetProperty(obj, key, any) {\n return handleDeepProperty(obj, key, any, false);\n }\n\n function deepSetProperty(obj, key, val) {\n handleDeepProperty(obj, key, false, false, true, false, val);\n return obj;\n }\n\n function handleDeepProperty(obj, key, any, has, fill, fillLast, val) {\n var ns, bs, ps, cbi, set, isLast, isPush, isIndex, nextIsIndex, exists;\n ns = obj;\n if (key == null) return;\n\n if (isObjectType(key)) {\n // Allow array and array-like accessors\n bs = [key];\n } else {\n key = String(key);\n if (key.indexOf('..') !== -1) {\n return handleArrayIndexRange(obj, key, any, val);\n }\n bs = key.split('[');\n }\n\n set = isDefined(val);\n\n for (var i = 0, blen = bs.length; i < blen; i++) {\n ps = bs[i];\n\n if (isString(ps)) {\n ps = periodSplit(ps);\n }\n\n for (var j = 0, plen = ps.length; j < plen; j++) {\n key = ps[j];\n\n // Is this the last key?\n isLast = i === blen - 1 && j === plen - 1;\n\n // Index of the closing ]\n cbi = key.indexOf(']');\n\n // Is the key an array index?\n isIndex = cbi !== -1;\n\n // Is this array push syntax \"[]\"?\n isPush = set && cbi === 0;\n\n // If the bracket split was successful and this is the last element\n // in the dot split, then we know the next key will be an array index.\n nextIsIndex = blen > 1 && j === plen - 1;\n\n if (isPush) {\n // Set the index to the end of the array\n key = ns.length;\n } else if (isIndex) {\n // Remove the closing ]\n key = key.slice(0, -1);\n }\n\n // If the array index is less than 0, then\n // add its length to allow negative indexes.\n if (isIndex && key < 0) {\n key = +key + ns.length;\n }\n\n // Bracket keys may look like users[5] or just [5], so the leading\n // characters are optional. We can enter the namespace if this is the\n // 2nd part, if there is only 1 part, or if there is an explicit key.\n if (i || key || blen === 1) {\n\n // TODO: need to be sure this check handles ''.length when\n // we refactor.\n exists = any ? key in Object(ns) : hasOwn(ns, key);\n\n // Non-existent namespaces are only filled if they are intermediate\n // (not at the end) or explicitly filling the last.\n if (fill && (!isLast || fillLast) && !exists) {\n // For our purposes, last only needs to be an array.\n ns = ns[key] = nextIsIndex || (fillLast && isLast) ? [] : {};\n continue;\n }\n\n if (has) {\n if (isLast || !exists) {\n return exists;\n }\n } else if (set && isLast) {\n assertWritable(ns);\n ns[key] = val;\n }\n\n ns = exists ? ns[key] : undefined;\n }\n\n }\n }\n return ns;\n }\n\n // Get object property with support for 0..1 style range notation.\n function handleArrayIndexRange(obj, key, any, val) {\n var match, start, end, leading, trailing, arr, set;\n match = key.match(PROPERTY_RANGE_REG);\n if (!match) {\n return;\n }\n\n set = isDefined(val);\n leading = match[1];\n\n if (leading) {\n arr = handleDeepProperty(obj, leading, any, false, set ? true : false, true);\n } else {\n arr = obj;\n }\n\n assertArray(arr);\n\n trailing = match[4];\n start = match[2] ? +match[2] : 0;\n end = match[3] ? +match[3] : arr.length;\n\n // A range of 0..1 is inclusive, so we need to add 1 to the end. If this\n // pushes the index from -1 to 0, then set it to the full length of the\n // array, otherwise it will return nothing.\n end = end === -1 ? arr.length : end + 1;\n\n if (set) {\n for (var i = start; i < end; i++) {\n handleDeepProperty(arr, i + trailing, any, false, true, false, val);\n }\n } else {\n arr = arr.slice(start, end);\n\n // If there are trailing properties, then they need to be mapped for each\n // element in the array.\n if (trailing) {\n if (trailing.charAt(0) === HALF_WIDTH_PERIOD) {\n // Need to chomp the period if one is trailing after the range. We\n // can't do this at the regex level because it will be required if\n // we're setting the value as it needs to be concatentated together\n // with the array index to be set.\n trailing = trailing.slice(1);\n }\n return map(arr, function(el) {\n return handleDeepProperty(el, trailing);\n });\n }\n }\n return arr;\n }\n\n function getOwnKey(obj, key) {\n if (hasOwn(obj, key)) {\n return key;\n }\n }\n\n function hasProperty(obj, prop) {\n return !isPrimitive(obj) && prop in obj;\n }\n\n function isObjectType(obj, type) {\n return !!obj && (type || typeof obj) === 'object';\n }\n\n function isPrimitive(obj, type) {\n type = type || typeof obj;\n return obj == null || type === 'string' || type === 'number' || type === 'boolean';\n }\n\n function isPlainObject(obj, className) {\n return isObjectType(obj) &&\n isClass(obj, 'Object', className) &&\n hasValidPlainObjectPrototype(obj) &&\n hasOwnEnumeratedProperties(obj);\n }\n\n function hasValidPlainObjectPrototype(obj) {\n var hasToString = 'toString' in obj;\n var hasConstructor = 'constructor' in obj;\n // An object created with Object.create(null) has no methods in the\n // prototype chain, so check if any are missing. The additional hasToString\n // check is for false positives on some host objects in old IE which have\n // toString but no constructor. If the object has an inherited constructor,\n // then check if it is Object (the \"isPrototypeOf\" tapdance here is a more\n // robust way of ensuring this if the global has been hijacked). Note that\n // accessing the constructor directly (without \"in\" or \"hasOwnProperty\")\n // will throw a permissions error in IE8 on cross-domain windows.\n return (!hasConstructor && !hasToString) ||\n (hasConstructor && !hasOwn(obj, 'constructor') &&\n hasOwn(obj.constructor.prototype, 'isPrototypeOf'));\n }\n\n function hasOwnEnumeratedProperties(obj) {\n // Plain objects are generally defined as having enumerated properties\n // all their own, however in early IE environments without defineProperty,\n // there may also be enumerated methods in the prototype chain, so check\n // for both of these cases.\n var objectProto = Object.prototype;\n for (var key in obj) {\n var val = obj[key];\n if (!hasOwn(obj, key) && val !== objectProto[key]) {\n return false;\n }\n }\n return true;\n }\n\n function simpleRepeat(n, fn) {\n for (var i = 0; i < n; i++) {\n fn(i);\n }\n }\n\n function simpleClone(obj) {\n return simpleMerge({}, obj);\n }\n\n // TODO: Use Object.assign here going forward.\n function simpleMerge(target, source) {\n forEachProperty(source, function(val, key) {\n target[key] = val;\n });\n return target;\n }\n\n // Make primtives types like strings into objects.\n function coercePrimitiveToObject(obj) {\n if (isPrimitive(obj)) {\n obj = Object(obj);\n }\n // istanbul ignore next\n if (NO_KEYS_IN_STRING_OBJECTS && isString(obj)) {\n forceStringCoercion(obj);\n }\n return obj;\n }\n\n // Force strings to have their indexes set in\n // environments that don't do this automatically.\n // istanbul ignore next\n function forceStringCoercion(obj) {\n var i = 0, chr;\n while (chr = obj.charAt(i)) {\n obj[i++] = chr;\n }\n }\n\n // Equality helpers\n\n // Perf\n function isEqual(a, b, stack) {\n var aClass, bClass;\n if (a === b) {\n // Return quickly up front when matched by reference,\n // but be careful about 0 !== -0.\n return a !== 0 || 1 / a === 1 / b;\n }\n aClass = classToString(a);\n bClass = classToString(b);\n if (aClass !== bClass) {\n return false;\n }\n\n if (isSerializable(a, aClass) && isSerializable(b, bClass)) {\n return objectIsEqual(a, b, aClass, stack);\n } else if (isSet(a, aClass) && isSet(b, bClass)) {\n return a.size === b.size && isEqual(setToArray(a), setToArray(b), stack);\n } else if (isMap(a, aClass) && isMap(b, bClass)) {\n return a.size === b.size && isEqual(mapToArray(a), mapToArray(b), stack);\n } else if (isError(a, aClass) && isError(b, bClass)) {\n return a.toString() === b.toString();\n }\n\n return false;\n }\n\n // Perf\n function objectIsEqual(a, b, aClass, stack) {\n var aType = typeof a, bType = typeof b, propsEqual, count;\n if (aType !== bType) {\n return false;\n }\n if (isObjectType(a.valueOf())) {\n if (a.length !== b.length) {\n // perf: Quickly returning up front for arrays.\n return false;\n }\n count = 0;\n propsEqual = true;\n iterateWithCyclicCheck(a, false, stack, function(key, val, cyc, stack) {\n if (!cyc && (!(key in b) || !isEqual(val, b[key], stack))) {\n propsEqual = false;\n }\n count++;\n return propsEqual;\n });\n if (!propsEqual || count !== getKeys(b).length) {\n return false;\n }\n }\n // Stringifying the value handles NaN, wrapped primitives, dates, and errors in one go.\n return a.valueOf().toString() === b.valueOf().toString();\n }\n\n // Serializes an object in a way that will provide a token unique\n // to the type, class, and value of an object. Host objects, class\n // instances etc, are not serializable, and are held in an array\n // of references that will return the index as a unique identifier\n // for the object. This array is passed from outside so that the\n // calling function can decide when to dispose of this array.\n function serializeInternal(obj, refs, stack) {\n var type = typeof obj, sign = '', className, value, ref;\n\n // Return up front on\n if (1 / obj === -Infinity) {\n sign = '-';\n }\n\n // Return quickly for primitives to save cycles\n if (isPrimitive(obj, type) && !isRealNaN(obj)) {\n return type + sign + obj;\n }\n\n className = classToString(obj);\n\n if (!isSerializable(obj, className)) {\n ref = indexOf(refs, obj);\n if (ref === -1) {\n ref = refs.length;\n refs.push(obj);\n }\n return ref;\n } else if (isObjectType(obj)) {\n value = serializeDeep(obj, refs, stack) + obj.toString();\n } else if (obj.valueOf) {\n value = obj.valueOf();\n }\n return type + className + sign + value;\n }\n\n function serializeDeep(obj, refs, stack) {\n var result = '';\n iterateWithCyclicCheck(obj, true, stack, function(key, val, cyc, stack) {\n result += cyc ? 'CYC' : key + serializeInternal(val, refs, stack);\n });\n return result;\n }\n\n function iterateWithCyclicCheck(obj, sortedKeys, stack, fn) {\n\n function next(val, key) {\n var cyc = false;\n\n // Allowing a step into the structure before triggering this check to save\n // cycles on standard JSON structures and also to try as hard as possible to\n // catch basic properties that may have been modified.\n if (stack.length > 1) {\n var i = stack.length;\n while (i--) {\n if (stack[i] === val) {\n cyc = true;\n }\n }\n }\n\n stack.push(val);\n fn(key, val, cyc, stack);\n stack.pop();\n }\n\n function iterateWithSortedKeys() {\n // Sorted keys is required for serialization, where object order\n // does not matter but stringified order does.\n var arr = getKeys(obj).sort(), key;\n for (var i = 0; i < arr.length; i++) {\n key = arr[i];\n next(obj[key], arr[i]);\n }\n }\n\n // This method for checking for cyclic structures was egregiously stolen from\n // the ingenious method by @kitcambridge from the Underscore script:\n // https://github.com/documentcloud/underscore/issues/240\n if (!stack) {\n stack = [];\n }\n\n if (sortedKeys) {\n iterateWithSortedKeys();\n } else {\n forEachProperty(obj, next);\n }\n }\n\n\n // Array helpers\n\n function isArrayIndex(n) {\n return n >>> 0 == n && n != 0xFFFFFFFF;\n }\n\n function iterateOverSparseArray(arr, fn, fromIndex, loop) {\n var indexes = getSparseArrayIndexes(arr, fromIndex, loop), index;\n for (var i = 0, len = indexes.length; i < len; i++) {\n index = indexes[i];\n fn.call(arr, arr[index], index, arr);\n }\n return arr;\n }\n\n // It's unclear whether or not sparse arrays qualify as \"simple enumerables\".\n // If they are not, however, the wrapping function will be deoptimized, so\n // isolate here (also to share between es5 and array modules).\n function getSparseArrayIndexes(arr, fromIndex, loop, fromRight) {\n var indexes = [], i;\n for (i in arr) {\n // istanbul ignore next\n if (isArrayIndex(i) && (loop || (fromRight ? i <= fromIndex : i >= fromIndex))) {\n indexes.push(+i);\n }\n }\n indexes.sort(function(a, b) {\n var aLoop = a > fromIndex;\n var bLoop = b > fromIndex;\n // This block cannot be reached unless ES5 methods are being shimmed.\n // istanbul ignore if\n if (aLoop !== bLoop) {\n return aLoop ? -1 : 1;\n }\n return a - b;\n });\n return indexes;\n }\n\n function getEntriesForIndexes(obj, find, loop, isString) {\n var result, length = obj.length;\n if (!isArray(find)) {\n return entryAtIndex(obj, find, length, loop, isString);\n }\n result = new Array(find.length);\n forEach(find, function(index, i) {\n result[i] = entryAtIndex(obj, index, length, loop, isString);\n });\n return result;\n }\n\n function getNormalizedIndex(index, length, loop) {\n if (index && loop) {\n index = index % length;\n }\n if (index < 0) index = length + index;\n return index;\n }\n\n function entryAtIndex(obj, index, length, loop, isString) {\n index = getNormalizedIndex(index, length, loop);\n return isString ? obj.charAt(index) : obj[index];\n }\n\n function mapWithShortcuts(el, f, context, mapArgs) {\n if (!f) {\n return el;\n } else if (f.apply) {\n return f.apply(context, mapArgs);\n } else if (isArray(f)) {\n return map(f, function(m) {\n return mapWithShortcuts(el, m, context, mapArgs);\n });\n } else if (isFunction(el[f])) {\n return el[f].call(el);\n } else {\n return deepGetProperty(el, f, true);\n }\n }\n\n function spaceSplit(str) {\n return str.split(' ');\n }\n\n function commaSplit(str) {\n return str.split(HALF_WIDTH_COMMA);\n }\n\n function periodSplit(str) {\n return str.split(HALF_WIDTH_PERIOD);\n }\n\n function forEach(arr, fn) {\n for (var i = 0, len = arr.length; i < len; i++) {\n if (!(i in arr)) {\n return iterateOverSparseArray(arr, fn, i);\n }\n fn(arr[i], i);\n }\n }\n\n function filter(arr, fn) {\n var result = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n var el = arr[i];\n if (i in arr && fn(el, i)) {\n result.push(el);\n }\n }\n return result;\n }\n\n function map(arr, fn) {\n // perf: Not using fixed array len here as it may be sparse.\n var result = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n if (i in arr) {\n result.push(fn(arr[i], i));\n }\n }\n return result;\n }\n\n function indexOf(arr, el) {\n for (var i = 0, len = arr.length; i < len; i++) {\n if (i in arr && arr[i] === el) return i;\n }\n return -1;\n }\n\n // Number helpers\n\n // istanbul ignore next\n var trunc = Math.trunc || function(n) {\n if (n === 0 || !isFinite(n)) return n;\n return n < 0 ? ceil(n) : floor(n);\n };\n\n function isRealNaN(obj) {\n // This is only true of NaN\n return obj != null && obj !== obj;\n }\n\n function withPrecision(val, precision, fn) {\n var multiplier = pow(10, abs(precision || 0));\n fn = fn || round;\n if (precision < 0) multiplier = 1 / multiplier;\n return fn(val * multiplier) / multiplier;\n }\n\n function padNumber(num, place, sign, base, replacement) {\n var str = abs(num).toString(base || 10);\n str = repeatString(replacement || '0', place - str.replace(/\\.\\d+/, '').length) + str;\n if (sign || num < 0) {\n str = (num < 0 ? '-' : '+') + str;\n }\n return str;\n }\n\n function getOrdinalSuffix(num) {\n if (num >= 11 && num <= 13) {\n return 'th';\n } else {\n switch(num % 10) {\n case 1: return 'st';\n case 2: return 'nd';\n case 3: return 'rd';\n default: return 'th';\n }\n }\n }\n\n // Fullwidth number helpers\n var fullWidthNumberReg, fullWidthNumberMap, fullWidthNumbers;\n\n function buildFullWidthNumber() {\n var fwp = FULL_WIDTH_PERIOD, hwp = HALF_WIDTH_PERIOD, hwc = HALF_WIDTH_COMMA, fwn = '';\n fullWidthNumberMap = {};\n for (var i = 0, digit; i <= 9; i++) {\n digit = chr(i + FULL_WIDTH_ZERO);\n fwn += digit;\n fullWidthNumberMap[digit] = chr(i + HALF_WIDTH_ZERO);\n }\n fullWidthNumberMap[hwc] = '';\n fullWidthNumberMap[fwp] = hwp;\n // Mapping this to itself to capture it easily\n // in stringToNumber to detect decimals later.\n fullWidthNumberMap[hwp] = hwp;\n fullWidthNumberReg = allCharsReg(fwn + fwp + hwc + hwp);\n fullWidthNumbers = fwn;\n }\n\n // Takes into account full-width characters, commas, and decimals.\n function stringToNumber(str, base) {\n var sanitized, isDecimal;\n sanitized = str.replace(fullWidthNumberReg, function(chr) {\n var replacement = getOwn(fullWidthNumberMap, chr);\n if (replacement === HALF_WIDTH_PERIOD) {\n isDecimal = true;\n }\n return replacement;\n });\n return isDecimal ? parseFloat(sanitized) : parseInt(sanitized, base || 10);\n }\n\n // Math aliases\n var abs = Math.abs,\n pow = Math.pow,\n min = Math.min,\n max = Math.max,\n ceil = Math.ceil,\n floor = Math.floor,\n round = Math.round;\n\n\n // String helpers\n\n var chr = String.fromCharCode;\n\n function trim(str) {\n return str.trim();\n }\n\n function repeatString(str, num) {\n var result = '';\n str = str.toString();\n while (num > 0) {\n if (num & 1) {\n result += str;\n }\n if (num >>= 1) {\n str += str;\n }\n }\n return result;\n }\n\n function simpleCapitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n function createFormatMatcher(bracketMatcher, percentMatcher, precheck) {\n\n var reg = STRING_FORMAT_REG;\n var compileMemoized = memoizeFunction(compile);\n\n function getToken(format, match) {\n var get, token, literal, fn;\n var bKey = match[2];\n var pLit = match[3];\n var pKey = match[5];\n if (match[4] && percentMatcher) {\n token = pKey;\n get = percentMatcher;\n } else if (bKey) {\n token = bKey;\n get = bracketMatcher;\n } else if (pLit && percentMatcher) {\n literal = pLit;\n } else {\n literal = match[1] || match[0];\n }\n if (get) {\n assertPassesPrecheck(precheck, bKey, pKey);\n fn = function(obj, opt) {\n return get(obj, token, opt);\n };\n }\n format.push(fn || getLiteral(literal));\n }\n\n function getSubstring(format, str, start, end) {\n if (end > start) {\n var sub = str.slice(start, end);\n assertNoUnmatched(sub, OPEN_BRACE);\n assertNoUnmatched(sub, CLOSE_BRACE);\n format.push(function() {\n return sub;\n });\n }\n }\n\n function getLiteral(str) {\n return function() {\n return str;\n };\n }\n\n function assertPassesPrecheck(precheck, bt, pt) {\n if (precheck && !precheck(bt, pt)) {\n throw new TypeError('Invalid token '+ (bt || pt) +' in format string');\n }\n }\n\n function assertNoUnmatched(str, chr) {\n if (str.indexOf(chr) !== -1) {\n throw new TypeError('Unmatched '+ chr +' in format string');\n }\n }\n\n function compile(str) {\n var format = [], lastIndex = 0, match;\n reg.lastIndex = 0;\n while(match = reg.exec(str)) {\n getSubstring(format, str, lastIndex, match.index);\n getToken(format, match);\n lastIndex = reg.lastIndex;\n }\n getSubstring(format, str, lastIndex, str.length);\n return format;\n }\n\n return function(str, obj, opt) {\n var format = compileMemoized(str), result = '';\n for (var i = 0; i < format.length; i++) {\n result += format[i](obj, opt);\n }\n return result;\n };\n }\n\n // Inflection helper\n\n var Inflections = {};\n\n function getAcronym(str) {\n // istanbul ignore next\n return Inflections.acronyms && Inflections.acronyms.find(str);\n }\n\n function getHumanWord(str) {\n // istanbul ignore next\n return Inflections.human && Inflections.human.find(str);\n }\n\n function runHumanRules(str) {\n // istanbul ignore next\n return Inflections.human && Inflections.human.runRules(str) || str;\n }\n\n // RegExp helpers\n\n function allCharsReg(src) {\n return RegExp('[' + src + ']', 'g');\n }\n\n function getRegExpFlags(reg, add) {\n var flags = '';\n add = add || '';\n function checkFlag(prop, flag) {\n if (prop || add.indexOf(flag) > -1) {\n flags += flag;\n }\n }\n checkFlag(reg.global, 'g');\n checkFlag(reg.ignoreCase, 'i');\n checkFlag(reg.multiline, 'm');\n checkFlag(reg.sticky, 'y');\n return flags;\n }\n\n function escapeRegExp(str) {\n if (!isString(str)) str = String(str);\n return str.replace(/([\\\\/'*+?|()[\\]{}.^$-])/g,'\\\\$1');\n }\n\n // Date helpers\n\n var _utc = privatePropertyAccessor('utc');\n\n function callDateGet(d, method) {\n return d['get' + (_utc(d) ? 'UTC' : '') + method]();\n }\n\n function callDateSet(d, method, value, safe) {\n // \"Safe\" denotes not setting the date if the value is the same as what is\n // currently set. In theory this should be a noop, however it will cause\n // timezone shifts when in the middle of a DST fallback. This is unavoidable\n // as the notation itself is ambiguous (i.e. there are two \"1:00ams\" on\n // November 1st, 2015 in northern hemisphere timezones that follow DST),\n // however when advancing or rewinding dates this can throw off calculations\n // so avoiding this unintentional shifting on an opt-in basis.\n if (safe && value === callDateGet(d, method, value)) {\n return;\n }\n d['set' + (_utc(d) ? 'UTC' : '') + method](value);\n }\n\n // Memoization helpers\n\n var INTERNAL_MEMOIZE_LIMIT = 1000;\n\n // Note that attemps to consolidate this with Function#memoize\n // ended up clunky as that is also serializing arguments. Separating\n // these implementations turned out to be simpler.\n function memoizeFunction(fn) {\n var memo = {}, counter = 0;\n\n return function(key) {\n if (hasOwn(memo, key)) {\n return memo[key];\n }\n // istanbul ignore if\n if (counter === INTERNAL_MEMOIZE_LIMIT) {\n memo = {};\n counter = 0;\n }\n counter++;\n return memo[key] = fn(key);\n };\n }\n\n // ES6 helpers\n\n function setToArray(set) {\n var arr = new Array(set.size), i = 0;\n set.forEach(function(val) {\n arr[i++] = val;\n });\n return arr;\n }\n\n function mapToArray(map) {\n var arr = new Array(map.size), i = 0;\n map.forEach(function(val, key) {\n arr[i++] = [key, val];\n });\n return arr;\n }\n\n buildClassChecks();\n buildFullWidthNumber();\n\n /***\n * @module ES5\n * @description Functions and polyfill methods that fix ES5 functionality. This\n * module is excluded from default builds, and can be included if\n * you need legacy browser support (IE8 and below).\n *\n ***/\n\n // Non-enumerable properties on Object.prototype. In early JScript implementations\n // (< IE9) these will shadow object properties and break for..in loops.\n var DONT_ENUM_PROPS = [\n 'valueOf',\n 'toString',\n 'constructor',\n 'isPrototypeOf',\n 'hasOwnProperty',\n 'toLocaleString',\n 'propertyIsEnumerable'\n ];\n\n /***\n * @fix\n * @short Fixes DontEnum bug for iteration methods in < IE9.\n ***/\n function buildDontEnumFix() {\n if (!({toString:1}).propertyIsEnumerable('toString')) {\n var forEachEnumerableProperty = forEachProperty;\n forEachProperty = function(obj, fn) {\n forEachEnumerableProperty(obj, fn);\n for (var i = 0, key; key = DONT_ENUM_PROPS[i]; i++) {\n if (hasOwn(obj, key)) {\n if(fn.call(obj, obj[key], key, obj) === false) break;\n }\n }\n };\n }\n }\n\n /***\n * @fix\n * @short Adds native methods to chainables in < IE9.\n ***/\n function buildChainableNativeMethodsFix() {\n if (!Object.getOwnPropertyNames) {\n defineNativeMethodsOnChainable();\n }\n }\n\n // Polyfilled methods will automatically be added to the chainable prototype.\n // However, Object.getOwnPropertyNames cannot be shimmed for non-enumerable\n // properties, so if it does not exist, then the only way to access native\n // methods previous to ES5 is to provide them as a list of tokens here.\n function defineNativeMethodsOnChainable() {\n\n var nativeTokens = {\n 'Function': 'apply,call',\n 'RegExp': 'compile,exec,test',\n 'Number': 'toExponential,toFixed,toLocaleString,toPrecision',\n 'Object': 'hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString',\n 'Array': 'concat,join,pop,push,reverse,shift,slice,sort,splice,toLocaleString,unshift',\n 'Date': 'getTime,getTimezoneOffset,setTime,toDateString,toGMTString,toLocaleDateString,toLocaleString,toLocaleTimeString,toTimeString,toUTCString',\n 'String': 'anchor,big,blink,bold,charAt,charCodeAt,concat,fixed,fontcolor,fontsize,indexOf,italics,lastIndexOf,link,localeCompare,match,replace,search,slice,small,split,strike,sub,substr,substring,sup,toLocaleLowerCase,toLocaleUpperCase,toLowerCase,toUpperCase'\n };\n\n var dateTokens = 'FullYear,Month,Date,Hours,Minutes,Seconds,Milliseconds'.split(',');\n\n function addDateTokens(prefix, arr) {\n for (var i = 0; i < dateTokens.length; i++) {\n arr.push(prefix + dateTokens[i]);\n }\n }\n\n forEachProperty(nativeTokens, function(str, name) {\n var tokens = str.split(',');\n if (name === 'Date') {\n addDateTokens('get', tokens);\n addDateTokens('set', tokens);\n addDateTokens('getUTC', tokens);\n addDateTokens('setUTC', tokens);\n }\n tokens.push('toString');\n mapNativeToChainable(name, tokens);\n });\n\n }\n\n\n buildDontEnumFix();\n buildChainableNativeMethodsFix();\n\n\n /*** @namespace Object ***/\n\n function assertNonNull(obj) {\n if (obj == null) {\n throw new TypeError('Object required');\n }\n }\n\n defineStaticPolyfill(sugarObject, {\n\n 'keys': function(obj) {\n var keys = [];\n assertNonNull(obj);\n forEachProperty(coercePrimitiveToObject(obj), function(val, key) {\n keys.push(key);\n });\n return keys;\n }\n\n });\n\n\n /*** @namespace Array ***/\n\n function arrayIndexOf(arr, search, fromIndex, fromRight) {\n var length = arr.length, defaultFromIndex, index, increment;\n\n increment = fromRight ? -1 : 1;\n defaultFromIndex = fromRight ? length - 1 : 0;\n fromIndex = trunc(fromIndex);\n if (!fromIndex && fromIndex !== 0) {\n fromIndex = defaultFromIndex;\n }\n if (fromIndex < 0) {\n fromIndex = length + fromIndex;\n }\n if ((!fromRight && fromIndex < 0) || (fromRight && fromIndex >= length)) {\n fromIndex = defaultFromIndex;\n }\n\n index = fromIndex;\n\n while((fromRight && index >= 0) || (!fromRight && index < length)) {\n if (!(index in arr)) {\n return sparseIndexOf(arr, search, fromIndex, fromRight);\n }\n if (isArrayIndex(index) && arr[index] === search) {\n return index;\n }\n index += increment;\n }\n return -1;\n }\n\n function sparseIndexOf(arr, search, fromIndex, fromRight) {\n var indexes = getSparseArrayIndexes(arr, fromIndex, false, fromRight), index;\n indexes.sort(function(a, b) {\n return fromRight ? b - a : a - b;\n });\n while ((index = indexes.shift()) !== undefined) {\n if (arr[index] === search) {\n return +index;\n }\n }\n return -1;\n }\n\n function arrayReduce(arr, fn, initialValue, fromRight) {\n var length = arr.length, count = 0, defined = isDefined(initialValue), result, index;\n assertCallable(fn);\n if (length == 0 && !defined) {\n throw new TypeError('Reduce called on empty array with no initial value');\n } else if (defined) {\n result = initialValue;\n } else {\n result = arr[fromRight ? length - 1 : count];\n count++;\n }\n while(count < length) {\n index = fromRight ? length - count - 1 : count;\n if (index in arr) {\n result = fn(result, arr[index], index, arr);\n }\n count++;\n }\n return result;\n }\n\n defineStaticPolyfill(sugarArray, {\n\n /***\n *\n * @method isArray(obj)\n * @returns Boolean\n * @polyfill ES5\n * @static\n * @short Returns true if `obj` is an Array.\n *\n * @example\n *\n * Array.isArray(3) -> false\n * Array.isArray(true) -> false\n * Array.isArray('wasabi') -> false\n * Array.isArray([1,2,3]) -> true\n *\n ***/\n 'isArray': function(obj) {\n return isArray(obj);\n }\n\n });\n\n defineInstancePolyfill(sugarArray, {\n\n 'every': function(fn) {\n // Force compiler to respect argument length.\n var argLen = arguments.length, context = arguments[1];\n var length = this.length, index = 0;\n assertCallable(fn);\n while(index < length) {\n if (index in this && !fn.call(context, this[index], index, this)) {\n return false;\n }\n index++;\n }\n return true;\n },\n\n 'some': function(fn) {\n // Force compiler to respect argument length.\n var argLen = arguments.length, context = arguments[1];\n var length = this.length, index = 0;\n assertCallable(fn);\n while(index < length) {\n if (index in this && fn.call(context, this[index], index, this)) {\n return true;\n }\n index++;\n }\n return false;\n },\n\n 'map': function(fn) {\n // Force compiler to respect argument length.\n var argLen = arguments.length, context = arguments[1];\n var length = this.length, index = 0, result = new Array(length);\n assertCallable(fn);\n while(index < length) {\n if (index in this) {\n result[index] = fn.call(context, this[index], index, this);\n }\n index++;\n }\n return result;\n },\n\n 'filter': function(fn) {\n // Force compiler to respect argument length.\n var argLen = arguments.length, context = arguments[1];\n var length = this.length, index = 0, result = [];\n assertCallable(fn);\n while(index < length) {\n if (index in this && fn.call(context, this[index], index, this)) {\n result.push(this[index]);\n }\n index++;\n }\n return result;\n },\n\n /***\n * @method indexOf(search, [fromIndex] = 0)\n * @returns Number\n * @polyfill ES5\n * @short Searches the array and returns the first index where `search` occurs,\n * or `-1` if the element is not found.\n * @extra [fromIndex] is the index from which to begin the search. This\n * method performs a simple strict equality comparison on `search`.\n * Sugar does not enhance this method to support `enhanced matching`.\n * For such functionality, use the `findIndex` method instead.\n *\n * @example\n *\n * [1,2,3].indexOf(3) -> 1\n * [1,2,3].indexOf(7) -> -1\n *\n ***/\n 'indexOf': function(search) {\n // Force compiler to respect argument length.\n var argLen = arguments.length, fromIndex = arguments[1];\n if (isString(this)) return this.indexOf(search, fromIndex);\n return arrayIndexOf(this, search, fromIndex);\n },\n\n /***\n * @method lastIndexOf(search, [fromIndex] = array.length - 1)\n * @returns Number\n * @polyfill ES5\n * @short Searches the array from the end and returns the first index where\n * `search` occurs, or `-1` if the element is not found.\n * @extra [fromIndex] is the index from which to begin the search. This method\n * performs a simple strict equality comparison on `search`.\n * Sugar does not enhance this method to support `enhanced matching`.\n *\n * @example\n *\n * [1,2,1].lastIndexOf(1) -> 2\n * [1,2,1].lastIndexOf(7) -> -1\n *\n ***/\n 'lastIndexOf': function(search) {\n // Force compiler to respect argument length.\n var argLen = arguments.length, fromIndex = arguments[1];\n if (isString(this)) return this.lastIndexOf(search, fromIndex);\n return arrayIndexOf(this, search, fromIndex, true);\n },\n\n /***\n * @method forEach([eachFn], [context])\n * @polyfill ES5\n * @short Iterates over the array, calling [eachFn] on each loop.\n * @extra [context] becomes the `this` object.\n *\n * @callback eachFn\n *\n * el The element of the current iteration.\n * i The index of the current iteration.\n * arr A reference to the array.\n *\n * @example\n *\n * ['a','b','c'].forEach(function(a) {\n * // Called 3 times: 'a','b','c'\n * });\n *\n ***/\n 'forEach': function(eachFn) {\n // Force compiler to respect argument length.\n var argLen = arguments.length, context = arguments[1];\n var length = this.length, index = 0;\n assertCallable(eachFn);\n while(index < length) {\n if (index in this) {\n eachFn.call(context, this[index], index, this);\n }\n index++;\n }\n },\n\n /***\n * @method reduce(reduceFn, [init])\n * @returns Mixed\n * @polyfill ES5\n * @short Reduces the array to a single result.\n * @extra This operation is sometimes called \"accumulation\", as it takes the\n * result of the last iteration of `reduceFn` and passes it as the first\n * argument to the next iteration, \"accumulating\" that value as it goes.\n * The return value of this method will be the return value of the final\n * iteration of `reduceFn`. If [init] is passed, it will be the initial\n * \"accumulator\" (the first argument). If [init] is not passed, then it\n * will take the first element in the array, and `reduceFn` will not be\n * called for that element.\n *\n * @callback reduceFn\n *\n * acc The \"accumulator\". Either [init], the result of the last iteration\n * of `reduceFn`, or the first element of the array.\n * el The current element for this iteration.\n * idx The current index for this iteration.\n * arr A reference to the array.\n *\n * @example\n *\n * [1,2,3].reduce(function(a, b) {\n * return a - b; // 1 - 2 - 3\n * });\n *\n * [1,2,3].reduce(function(a, b) {\n * return a - b; // 100 - 1 - 2 - 3\n * }, 100);\n *\n ***/\n 'reduce': function(reduceFn) {\n // Force compiler to respect argument length.\n var argLen = arguments.length, context = arguments[1];\n return arrayReduce(this, reduceFn, context);\n },\n\n /***\n * @method reduceRight([reduceFn], [init])\n * @returns Mixed\n * @polyfill ES5\n * @short Similar to `Array#reduce`, but operates on the elements in reverse.\n *\n * @callback reduceFn\n *\n * acc The \"accumulator\", either [init], the result of the last iteration\n * of `reduceFn`, or the last element of the array.\n * el The current element for this iteration.\n * idx The current index for this iteration.\n * arr A reference to the array.\n *\n * @example\n *\n * [1,2,3].reduceRight(function(a, b) {\n * return a - b; // 3 - 2 - 1\n * });\n *\n * [1,2,3].reduceRight(function(a, b) {\n * return a - b; // 100 - 3 - 2 - 1\n * }, 100);\n *\n *\n ***/\n 'reduceRight': function(reduceFn) {\n // Force compiler to respect argument length.\n var argLen = arguments.length, context = arguments[1];\n return arrayReduce(this, reduceFn, context, true);\n }\n\n });\n\n\n /*** @namespace String ***/\n\n var TRIM_REG = RegExp('^[' + TRIM_CHARS + ']+|['+ TRIM_CHARS +']+$', 'g');\n\n defineInstancePolyfill(sugarString, {\n /***\n * @method trim()\n * @returns String\n * @polyfill ES5\n * @short Removes leading and trailing whitespace from the string.\n * @extra Whitespace is defined as line breaks, tabs, and any character in the\n * \"Space, Separator\" Unicode category, conforming to the the ES5 spec.\n *\n * @example\n *\n * ' wasabi '.trim() -> 'wasabi'\n * ' wasabi '.trimLeft() -> 'wasabi '\n * ' wasabi '.trimRight() -> ' wasabi'\n *\n ***/\n 'trim': function() {\n return this.toString().replace(TRIM_REG, '');\n }\n });\n\n\n /*** @namespace Function ***/\n\n defineInstancePolyfill(sugarFunction, {\n\n /***\n * @method bind(context, [arg1], ...)\n * @returns Function\n * @polyfill ES5\n * @short Binds `context` as the `this` object for the function when it is\n * called. Also allows currying an unlimited number of parameters.\n * @extra \"currying\" means setting parameters ([arg1], [arg2], etc.) ahead of\n * time so that they are passed when the function is called later. If\n * you pass additional parameters when the function is actually called,\n * they will be added to the end of the curried parameters.\n *\n * @example\n *\n * logThis.bind('woof')() -> logs 'woof' as its this object\n * addArgs.bind(1, 2, 3)() -> returns 5 with 1 as the this object\n * addArgs.bind(1)(2, 3, 4) -> returns 9\n *\n ***/\n 'bind': function(context) {\n // Optimized: no leaking arguments\n var boundArgs = []; for(var $i = 1, $len = arguments.length; $i < $len; $i++) boundArgs.push(arguments[$i]);\n var fn = this, bound;\n assertCallable(this);\n bound = function() {\n // Optimized: no leaking arguments\n var args = []; for(var $i = 0, $len = arguments.length; $i < $len; $i++) args.push(arguments[$i]);\n return fn.apply(fn.prototype && this instanceof fn ? this : context, boundArgs.concat(args));\n };\n bound.prototype = this.prototype;\n return bound;\n }\n\n });\n\n\n /*** @namespace Date ***/\n\n defineStaticPolyfill(sugarDate, {\n\n /***\n * @method now()\n * @returns String\n * @polyfill ES5\n * @static\n * @short Returns the current time as a Unix timestamp.\n * @extra The number of milliseconds since January 1st, 1970 00:00:00 (UTC).\n *\n * @example\n *\n * Date.now() -> ex. 1311938296231\n *\n ***/\n 'now': function() {\n return new Date().getTime();\n }\n\n });\n\n function hasISOSupport() {\n var d = new Date(Date.UTC(2000, 0));\n return !!d.toISOString && d.toISOString() === '2000-01-01T00:00:00.000Z';\n }\n\n defineInstancePolyfill(sugarDate, {\n\n /***\n * @method toISOString()\n * @returns String\n * @polyfill ES5\n * @short Formats the string to ISO8601 format.\n * @extra This will always format as UTC time.\n *\n * @example\n *\n * Date.create().toISOString() -> ex. 2011-07-05 12:24:55.528Z\n *\n ***/\n 'toISOString': function() {\n return padNumber(this.getUTCFullYear(), 4) + '-' +\n padNumber(this.getUTCMonth() + 1, 2) + '-' +\n padNumber(this.getUTCDate(), 2) + 'T' +\n padNumber(this.getUTCHours(), 2) + ':' +\n padNumber(this.getUTCMinutes(), 2) + ':' +\n padNumber(this.getUTCSeconds(), 2) + '.' +\n padNumber(this.getUTCMilliseconds(), 3) + 'Z';\n },\n\n /***\n * @method toJSON([key])\n * @returns String\n * @polyfill ES5\n * @short Returns a JSON representation of the date.\n * @extra This is effectively an alias for `toISOString`. Will always return\n * the date in UTC time. [key] is ignored.\n *\n * @example\n *\n * Date.create().toJSON() -> ex. 2011-07-05 12:24:55.528Z\n *\n ***/\n 'toJSON': function(key) {\n // Force compiler to respect argument length.\n var argLen = arguments.length;\n return this.toISOString(key);\n }\n\n }, !hasISOSupport());\n\n}).call(this);","'use strict';\n\nfunction allCharsReg(src) {\n return RegExp('[' + src + ']', 'g');\n}\n\nmodule.exports = allCharsReg;","'use strict';\n\nvar _utc = require('../var/_utc');\n\nfunction callDateGet(d, method) {\n return d['get' + (_utc(d) ? 'UTC' : '') + method]();\n}\n\nmodule.exports = callDateGet;","'use strict';\n\nvar _utc = require('../var/_utc'),\n callDateGet = require('./callDateGet');\n\nfunction callDateSet(d, method, value, safe) {\n // \"Safe\" denotes not setting the date if the value is the same as what is\n // currently set. In theory this should be a noop, however it will cause\n // timezone shifts when in the middle of a DST fallback. This is unavoidable\n // as the notation itself is ambiguous (i.e. there are two \"1:00ams\" on\n // November 1st, 2015 in northern hemisphere timezones that follow DST),\n // however when advancing or rewinding dates this can throw off calculations\n // so avoiding this unintentional shifting on an opt-in basis.\n if (safe && value === callDateGet(d, method, value)) {\n return;\n }\n d['set' + (_utc(d) ? 'UTC' : '') + method](value);\n}\n\nmodule.exports = callDateSet;","'use strict';\n\nvar forEach = require('./forEach'),\n spaceSplit = require('./spaceSplit'),\n classChecks = require('../var/classChecks');\n\nvar isString = classChecks.isString;\n\nfunction collectSimilarMethods(set, fn) {\n var methods = {};\n if (isString(set)) {\n set = spaceSplit(set);\n }\n forEach(set, function(el, i) {\n fn(methods, el, i);\n });\n return methods;\n}\n\nmodule.exports = collectSimilarMethods;","'use strict';\n\nvar CommonChars = require('../var/CommonChars');\n\nvar HALF_WIDTH_COMMA = CommonChars.HALF_WIDTH_COMMA;\n\nfunction commaSplit(str) {\n return str.split(HALF_WIDTH_COMMA);\n}\n\nmodule.exports = commaSplit;","'use strict';\n\nvar STRING_FORMAT_REG = require('../var/STRING_FORMAT_REG'),\n CommonChars = require('../var/CommonChars'),\n memoizeFunction = require('./memoizeFunction');\n\nvar OPEN_BRACE = CommonChars.OPEN_BRACE,\n CLOSE_BRACE = CommonChars.CLOSE_BRACE;\n\nfunction createFormatMatcher(bracketMatcher, percentMatcher, precheck) {\n\n var reg = STRING_FORMAT_REG;\n var compileMemoized = memoizeFunction(compile);\n\n function getToken(format, match) {\n var get, token, literal, fn;\n var bKey = match[2];\n var pLit = match[3];\n var pKey = match[5];\n if (match[4] && percentMatcher) {\n token = pKey;\n get = percentMatcher;\n } else if (bKey) {\n token = bKey;\n get = bracketMatcher;\n } else if (pLit && percentMatcher) {\n literal = pLit;\n } else {\n literal = match[1] || match[0];\n }\n if (get) {\n assertPassesPrecheck(precheck, bKey, pKey);\n fn = function(obj, opt) {\n return get(obj, token, opt);\n };\n }\n format.push(fn || getLiteral(literal));\n }\n\n function getSubstring(format, str, start, end) {\n if (end > start) {\n var sub = str.slice(start, end);\n assertNoUnmatched(sub, OPEN_BRACE);\n assertNoUnmatched(sub, CLOSE_BRACE);\n format.push(function() {\n return sub;\n });\n }\n }\n\n function getLiteral(str) {\n return function() {\n return str;\n };\n }\n\n function assertPassesPrecheck(precheck, bt, pt) {\n if (precheck && !precheck(bt, pt)) {\n throw new TypeError('Invalid token '+ (bt || pt) +' in format string');\n }\n }\n\n function assertNoUnmatched(str, chr) {\n if (str.indexOf(chr) !== -1) {\n throw new TypeError('Unmatched '+ chr +' in format string');\n }\n }\n\n function compile(str) {\n var format = [], lastIndex = 0, match;\n reg.lastIndex = 0;\n while(match = reg.exec(str)) {\n getSubstring(format, str, lastIndex, match.index);\n getToken(format, match);\n lastIndex = reg.lastIndex;\n }\n getSubstring(format, str, lastIndex, str.length);\n return format;\n }\n\n return function(str, obj, opt) {\n var format = compileMemoized(str), result = '';\n for (var i = 0; i < format.length; i++) {\n result += format[i](obj, opt);\n }\n return result;\n };\n}\n\nmodule.exports = createFormatMatcher;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar setProperty = coreUtilityAliases.setProperty;\n\nfunction defineAccessor(namespace, name, fn) {\n setProperty(namespace, name, fn);\n}\n\nmodule.exports = defineAccessor;","'use strict';\n\nvar methodDefineAliases = require('../var/methodDefineAliases'),\n collectSimilarMethods = require('./collectSimilarMethods');\n\nvar defineInstance = methodDefineAliases.defineInstance;\n\nfunction defineInstanceSimilar(sugarNamespace, set, fn, flags) {\n defineInstance(sugarNamespace, collectSimilarMethods(set, fn), flags);\n}\n\nmodule.exports = defineInstanceSimilar;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar forEachProperty = coreUtilityAliases.forEachProperty;\n\nfunction defineOnPrototype(ctor, methods) {\n var proto = ctor.prototype;\n forEachProperty(methods, function(val, key) {\n proto[key] = val;\n });\n}\n\nmodule.exports = defineOnPrototype;","'use strict';\n\nvar simpleClone = require('./simpleClone'),\n defineAccessor = require('./defineAccessor'),\n coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar forEachProperty = coreUtilityAliases.forEachProperty;\n\nfunction defineOptionsAccessor(namespace, defaults) {\n var obj = simpleClone(defaults);\n\n function getOption(name) {\n return obj[name];\n }\n\n function setOption(arg1, arg2) {\n var options;\n if (arguments.length === 1) {\n options = arg1;\n } else {\n options = {};\n options[arg1] = arg2;\n }\n forEachProperty(options, function(val, name) {\n if (val === null) {\n val = defaults[name];\n }\n obj[name] = val;\n });\n }\n\n defineAccessor(namespace, 'getOption', getOption);\n defineAccessor(namespace, 'setOption', setOption);\n return getOption;\n}\n\nmodule.exports = defineOptionsAccessor;","'use strict';\n\nvar classChecks = require('../var/classChecks');\n\nvar isString = classChecks.isString;\n\nfunction escapeRegExp(str) {\n if (!isString(str)) str = String(str);\n return str.replace(/([\\\\/'*+?|()[\\]{}.^$-])/g,'\\\\$1');\n}\n\nmodule.exports = escapeRegExp;","'use strict';\n\nfunction filter(arr, fn) {\n var result = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n var el = arr[i];\n if (i in arr && fn(el, i)) {\n result.push(el);\n }\n }\n return result;\n}\n\nmodule.exports = filter;","'use strict';\n\nvar iterateOverSparseArray = require('./iterateOverSparseArray');\n\nfunction forEach(arr, fn) {\n for (var i = 0, len = arr.length; i < len; i++) {\n if (!(i in arr)) {\n return iterateOverSparseArray(arr, fn, i);\n }\n fn(arr[i], i);\n }\n}\n\nmodule.exports = forEach;","'use strict';\n\nfunction getKeys(obj) {\n return Object.keys(obj);\n}\n\nmodule.exports = getKeys;","'use strict';\n\nfunction getOrdinalSuffix(num) {\n if (num >= 11 && num <= 13) {\n return 'th';\n } else {\n switch(num % 10) {\n case 1: return 'st';\n case 2: return 'nd';\n case 3: return 'rd';\n default: return 'th';\n }\n }\n}\n\nmodule.exports = getOrdinalSuffix;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction getOwnKey(obj, key) {\n if (hasOwn(obj, key)) {\n return key;\n }\n}\n\nmodule.exports = getOwnKey;","'use strict';\n\nvar isArrayIndex = require('./isArrayIndex');\n\nfunction getSparseArrayIndexes(arr, fromIndex, loop, fromRight) {\n var indexes = [], i;\n for (i in arr) {\n // istanbul ignore next\n if (isArrayIndex(i) && (loop || (fromRight ? i <= fromIndex : i >= fromIndex))) {\n indexes.push(+i);\n }\n }\n indexes.sort(function(a, b) {\n var aLoop = a > fromIndex;\n var bLoop = b > fromIndex;\n // This block cannot be reached unless ES5 methods are being shimmed.\n // istanbul ignore if\n if (aLoop !== bLoop) {\n return aLoop ? -1 : 1;\n }\n return a - b;\n });\n return indexes;\n}\n\nmodule.exports = getSparseArrayIndexes;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction hasOwnEnumeratedProperties(obj) {\n // Plain objects are generally defined as having enumerated properties\n // all their own, however in early IE environments without defineProperty,\n // there may also be enumerated methods in the prototype chain, so check\n // for both of these cases.\n var objectProto = Object.prototype;\n for (var key in obj) {\n var val = obj[key];\n if (!hasOwn(obj, key) && val !== objectProto[key]) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = hasOwnEnumeratedProperties;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction hasValidPlainObjectPrototype(obj) {\n var hasToString = 'toString' in obj;\n var hasConstructor = 'constructor' in obj;\n // An object created with Object.create(null) has no methods in the\n // prototype chain, so check if any are missing. The additional hasToString\n // check is for false positives on some host objects in old IE which have\n // toString but no constructor. If the object has an inherited constructor,\n // then check if it is Object (the \"isPrototypeOf\" tapdance here is a more\n // robust way of ensuring this if the global has been hijacked). Note that\n // accessing the constructor directly (without \"in\" or \"hasOwnProperty\")\n // will throw a permissions error in IE8 on cross-domain windows.\n return (!hasConstructor && !hasToString) ||\n (hasConstructor && !hasOwn(obj, 'constructor') &&\n hasOwn(obj.constructor.prototype, 'isPrototypeOf'));\n}\n\nmodule.exports = hasValidPlainObjectPrototype;","'use strict';\n\nfunction isArrayIndex(n) {\n return n >>> 0 == n && n != 0xFFFFFFFF;\n}\n\nmodule.exports = isArrayIndex;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar classToString = coreUtilityAliases.classToString;\n\nfunction isClass(obj, className, str) {\n if (!str) {\n str = classToString(obj);\n }\n return str === '[object '+ className +']';\n}\n\nmodule.exports = isClass;","'use strict';\n\nfunction isDefined(o) {\n return o !== undefined;\n}\n\nmodule.exports = isDefined;","'use strict';\n\nfunction isObjectType(obj, type) {\n return !!obj && (type || typeof obj) === 'object';\n}\n\nmodule.exports = isObjectType;","'use strict';\n\nvar isClass = require('./isClass'),\n isObjectType = require('./isObjectType'),\n hasOwnEnumeratedProperties = require('./hasOwnEnumeratedProperties'),\n hasValidPlainObjectPrototype = require('./hasValidPlainObjectPrototype');\n\nfunction isPlainObject(obj, className) {\n return isObjectType(obj) &&\n isClass(obj, 'Object', className) &&\n hasValidPlainObjectPrototype(obj) &&\n hasOwnEnumeratedProperties(obj);\n}\n\nmodule.exports = isPlainObject;","'use strict';\n\nfunction isUndefined(o) {\n return o === undefined;\n}\n\nmodule.exports = isUndefined;","'use strict';\n\nvar getSparseArrayIndexes = require('./getSparseArrayIndexes');\n\nfunction iterateOverSparseArray(arr, fn, fromIndex, loop) {\n var indexes = getSparseArrayIndexes(arr, fromIndex, loop), index;\n for (var i = 0, len = indexes.length; i < len; i++) {\n index = indexes[i];\n fn.call(arr, arr[index], index, arr);\n }\n return arr;\n}\n\nmodule.exports = iterateOverSparseArray;","'use strict';\n\nfunction map(arr, fn) {\n // perf: Not using fixed array len here as it may be sparse.\n var result = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n if (i in arr) {\n result.push(fn(arr[i], i));\n }\n }\n return result;\n}\n\nmodule.exports = map;","'use strict';\n\nvar INTERNAL_MEMOIZE_LIMIT = require('../var/INTERNAL_MEMOIZE_LIMIT'),\n coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction memoizeFunction(fn) {\n var memo = {}, counter = 0;\n\n return function(key) {\n if (hasOwn(memo, key)) {\n return memo[key];\n }\n // istanbul ignore if\n if (counter === INTERNAL_MEMOIZE_LIMIT) {\n memo = {};\n counter = 0;\n }\n counter++;\n return memo[key] = fn(key);\n };\n}\n\nmodule.exports = memoizeFunction;","'use strict';\n\nvar mathAliases = require('../var/mathAliases'),\n repeatString = require('./repeatString');\n\nvar abs = mathAliases.abs;\n\nfunction padNumber(num, place, sign, base, replacement) {\n var str = abs(num).toString(base || 10);\n str = repeatString(replacement || '0', place - str.replace(/\\.\\d+/, '').length) + str;\n if (sign || num < 0) {\n str = (num < 0 ? '-' : '+') + str;\n }\n return str;\n}\n\nmodule.exports = padNumber;","'use strict';\n\nvar CommonChars = require('../var/CommonChars');\n\nvar HALF_WIDTH_PERIOD = CommonChars.HALF_WIDTH_PERIOD;\n\nfunction periodSplit(str) {\n return str.split(HALF_WIDTH_PERIOD);\n}\n\nmodule.exports = periodSplit;","'use strict';\n\nvar PRIVATE_PROP_PREFIX = require('../var/PRIVATE_PROP_PREFIX'),\n coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar setProperty = coreUtilityAliases.setProperty;\n\nfunction privatePropertyAccessor(key) {\n var privateKey = PRIVATE_PROP_PREFIX + key;\n return function(obj, val) {\n if (arguments.length > 1) {\n setProperty(obj, privateKey, val);\n return obj;\n }\n return obj[privateKey];\n };\n}\n\nmodule.exports = privatePropertyAccessor;","'use strict';\n\nfunction repeatString(str, num) {\n var result = '';\n str = str.toString();\n while (num > 0) {\n if (num & 1) {\n result += str;\n }\n if (num >>= 1) {\n str += str;\n }\n }\n return result;\n}\n\nmodule.exports = repeatString;","'use strict';\n\nfunction setChainableConstructor(sugarNamespace, createFn) {\n sugarNamespace.prototype.constructor = function() {\n return createFn.apply(this, arguments);\n };\n}\n\nmodule.exports = setChainableConstructor;","'use strict';\n\nfunction simpleCapitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nmodule.exports = simpleCapitalize;","'use strict';\n\nvar simpleMerge = require('./simpleMerge');\n\nfunction simpleClone(obj) {\n return simpleMerge({}, obj);\n}\n\nmodule.exports = simpleClone;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar forEachProperty = coreUtilityAliases.forEachProperty;\n\nfunction simpleMerge(target, source) {\n forEachProperty(source, function(val, key) {\n target[key] = val;\n });\n return target;\n}\n\nmodule.exports = simpleMerge;","'use strict';\n\nfunction spaceSplit(str) {\n return str.split(' ');\n}\n\nmodule.exports = spaceSplit;","'use strict';\n\nfunction trim(str) {\n return str.trim();\n}\n\nmodule.exports = trim;","'use strict';\n\nvar mathAliases = require('../var/mathAliases');\n\nvar abs = mathAliases.abs,\n pow = mathAliases.pow,\n round = mathAliases.round;\n\nfunction withPrecision(val, precision, fn) {\n var multiplier = pow(10, abs(precision || 0));\n fn = fn || round;\n if (precision < 0) multiplier = 1 / multiplier;\n return fn(val * multiplier) / multiplier;\n}\n\nmodule.exports = withPrecision;","'use strict';\n\nfunction wrapNamespace(method) {\n return function(sugarNamespace, arg1, arg2) {\n sugarNamespace[method](arg1, arg2);\n };\n}\n\nmodule.exports = wrapNamespace;","'use strict';\n\nmodule.exports = {\n HALF_WIDTH_ZERO: 0x30,\n FULL_WIDTH_ZERO: 0xff10,\n HALF_WIDTH_PERIOD: '.',\n FULL_WIDTH_PERIOD: '.',\n HALF_WIDTH_COMMA: ',',\n OPEN_BRACE: '{',\n CLOSE_BRACE: '}'\n};","'use strict';\n\nmodule.exports = 1000;","'use strict';\n\nmodule.exports = 'Boolean Number String Date RegExp Function Array Error Set Map';","'use strict';\n\nmodule.exports = '_sugar_';","'use strict';\n\nmodule.exports = /([{}])\\1|{([^}]*)}|(%)%|(%(\\w*))/g;","'use strict';\n\nvar privatePropertyAccessor = require('../internal/privatePropertyAccessor');\n\nmodule.exports = privatePropertyAccessor('utc');","'use strict';\n\nmodule.exports = String.fromCharCode;","'use strict';\n\nvar NATIVE_TYPES = require('./NATIVE_TYPES'),\n forEach = require('../internal/forEach'),\n isClass = require('../internal/isClass'),\n spaceSplit = require('../internal/spaceSplit'),\n isPlainObject = require('../internal/isPlainObject');\n\nvar isSerializable,\n isBoolean, isNumber, isString,\n isDate, isRegExp, isFunction,\n isArray, isSet, isMap, isError;\n\nfunction buildClassChecks() {\n\n var knownTypes = {};\n\n function addCoreTypes() {\n\n var names = spaceSplit(NATIVE_TYPES);\n\n isBoolean = buildPrimitiveClassCheck(names[0]);\n isNumber = buildPrimitiveClassCheck(names[1]);\n isString = buildPrimitiveClassCheck(names[2]);\n\n isDate = buildClassCheck(names[3]);\n isRegExp = buildClassCheck(names[4]);\n\n // Wanted to enhance performance here by using simply \"typeof\"\n // but Firefox has two major issues that make this impossible,\n // one fixed, the other not, so perform a full class check here.\n //\n // 1. Regexes can be typeof \"function\" in FF < 3\n // https://bugzilla.mozilla.org/show_bug.cgi?id=61911 (fixed)\n //\n // 2. HTMLEmbedElement and HTMLObjectElement are be typeof \"function\"\n // https://bugzilla.mozilla.org/show_bug.cgi?id=268945 (won't fix)\n isFunction = buildClassCheck(names[5]);\n\n // istanbul ignore next\n isArray = Array.isArray || buildClassCheck(names[6]);\n isError = buildClassCheck(names[7]);\n\n isSet = buildClassCheck(names[8], typeof Set !== 'undefined' && Set);\n isMap = buildClassCheck(names[9], typeof Map !== 'undefined' && Map);\n\n // Add core types as known so that they can be checked by value below,\n // notably excluding Functions and adding Arguments and Error.\n addKnownType('Arguments');\n addKnownType(names[0]);\n addKnownType(names[1]);\n addKnownType(names[2]);\n addKnownType(names[3]);\n addKnownType(names[4]);\n addKnownType(names[6]);\n\n }\n\n function addArrayTypes() {\n var types = 'Int8 Uint8 Uint8Clamped Int16 Uint16 Int32 Uint32 Float32 Float64';\n forEach(spaceSplit(types), function(str) {\n addKnownType(str + 'Array');\n });\n }\n\n function addKnownType(className) {\n var str = '[object '+ className +']';\n knownTypes[str] = true;\n }\n\n function isKnownType(className) {\n return knownTypes[className];\n }\n\n function buildClassCheck(className, globalObject) {\n // istanbul ignore if\n if (globalObject && isClass(new globalObject, 'Object')) {\n return getConstructorClassCheck(globalObject);\n } else {\n return getToStringClassCheck(className);\n }\n }\n\n // Map and Set may be [object Object] in certain IE environments.\n // In this case we need to perform a check using the constructor\n // instead of Object.prototype.toString.\n // istanbul ignore next\n function getConstructorClassCheck(obj) {\n var ctorStr = String(obj);\n return function(obj) {\n return String(obj.constructor) === ctorStr;\n };\n }\n\n function getToStringClassCheck(className) {\n return function(obj, str) {\n // perf: Returning up front on instanceof appears to be slower.\n return isClass(obj, className, str);\n };\n }\n\n function buildPrimitiveClassCheck(className) {\n var type = className.toLowerCase();\n return function(obj) {\n var t = typeof obj;\n return t === type || t === 'object' && isClass(obj, className);\n };\n }\n\n addCoreTypes();\n addArrayTypes();\n\n isSerializable = function(obj, className) {\n // Only known objects can be serialized. This notably excludes functions,\n // host objects, Symbols (which are matched by reference), and instances\n // of classes. The latter can arguably be matched by value, but\n // distinguishing between these and host objects -- which should never be\n // compared by value -- is very tricky so not dealing with it here.\n return isKnownType(className) || isPlainObject(obj, className);\n };\n\n}\n\nbuildClassChecks();\n\nmodule.exports = {\n isSerializable: isSerializable,\n isBoolean: isBoolean,\n isNumber: isNumber,\n isString: isString,\n isDate: isDate,\n isRegExp: isRegExp,\n isFunction: isFunction,\n isArray: isArray,\n isSet: isSet,\n isMap: isMap,\n isError: isError\n};","'use strict';\n\nvar Sugar = require('sugar-core');\n\nmodule.exports = {\n hasOwn: Sugar.util.hasOwn,\n getOwn: Sugar.util.getOwn,\n setProperty: Sugar.util.setProperty,\n classToString: Sugar.util.classToString,\n defineProperty: Sugar.util.defineProperty,\n forEachProperty: Sugar.util.forEachProperty,\n mapNativeToChainable: Sugar.util.mapNativeToChainable\n};","'use strict';\n\nvar CommonChars = require('./CommonChars'),\n chr = require('./chr'),\n allCharsReg = require('../internal/allCharsReg');\n\nvar HALF_WIDTH_ZERO = CommonChars.HALF_WIDTH_ZERO,\n FULL_WIDTH_ZERO = CommonChars.FULL_WIDTH_ZERO,\n HALF_WIDTH_PERIOD = CommonChars.HALF_WIDTH_PERIOD,\n FULL_WIDTH_PERIOD = CommonChars.FULL_WIDTH_PERIOD,\n HALF_WIDTH_COMMA = CommonChars.HALF_WIDTH_COMMA;\n\nvar fullWidthNumberReg, fullWidthNumberMap, fullWidthNumbers;\n\nfunction buildFullWidthNumber() {\n var fwp = FULL_WIDTH_PERIOD, hwp = HALF_WIDTH_PERIOD, hwc = HALF_WIDTH_COMMA, fwn = '';\n fullWidthNumberMap = {};\n for (var i = 0, digit; i <= 9; i++) {\n digit = chr(i + FULL_WIDTH_ZERO);\n fwn += digit;\n fullWidthNumberMap[digit] = chr(i + HALF_WIDTH_ZERO);\n }\n fullWidthNumberMap[hwc] = '';\n fullWidthNumberMap[fwp] = hwp;\n // Mapping this to itself to capture it easily\n // in stringToNumber to detect decimals later.\n fullWidthNumberMap[hwp] = hwp;\n fullWidthNumberReg = allCharsReg(fwn + fwp + hwc + hwp);\n fullWidthNumbers = fwn;\n}\n\nbuildFullWidthNumber();\n\nmodule.exports = {\n fullWidthNumberReg: fullWidthNumberReg,\n fullWidthNumberMap: fullWidthNumberMap,\n fullWidthNumbers: fullWidthNumbers\n};","'use strict';\n\nmodule.exports = {\n abs: Math.abs,\n pow: Math.pow,\n min: Math.min,\n max: Math.max,\n ceil: Math.ceil,\n floor: Math.floor,\n round: Math.round\n};","'use strict';\n\nvar wrapNamespace = require('../internal/wrapNamespace');\n\nmodule.exports = {\n alias: wrapNamespace('alias'),\n defineStatic: wrapNamespace('defineStatic'),\n defineInstance: wrapNamespace('defineInstance'),\n defineStaticPolyfill: wrapNamespace('defineStaticPolyfill'),\n defineInstancePolyfill: wrapNamespace('defineInstancePolyfill'),\n defineInstanceAndStatic: wrapNamespace('defineInstanceAndStatic'),\n defineInstanceWithArguments: wrapNamespace('defineInstanceWithArguments')\n};","'use strict';\n\nvar Sugar = require('sugar-core');\n\nmodule.exports = {\n sugarObject: Sugar.Object,\n sugarArray: Sugar.Array,\n sugarDate: Sugar.Date,\n sugarString: Sugar.String,\n sugarNumber: Sugar.Number,\n sugarFunction: Sugar.Function,\n sugarRegExp: Sugar.RegExp\n};","'use strict';\n\nvar mathAliases = require('./mathAliases');\n\nvar ceil = mathAliases.ceil,\n floor = mathAliases.floor;\n\nvar trunc = Math.trunc || function(n) {\n if (n === 0 || !isFinite(n)) return n;\n return n < 0 ? ceil(n) : floor(n);\n};\n\nmodule.exports = trunc;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addDays;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addHours;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'addLocale': function(code, set) {\n return localeManager.add(code, set);\n }\n\n});\n\nmodule.exports = Sugar.Date.addLocale;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addMilliseconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addMinutes;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addMonths;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addSeconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addWeeks;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addYears;","'use strict';\n\nvar Sugar = require('sugar-core'),\n advanceDateWithArgs = require('./internal/advanceDateWithArgs');\n\nSugar.Date.defineInstanceWithArguments({\n\n 'advance': function(d, args) {\n return advanceDateWithArgs(d, args, 1);\n }\n\n});\n\nmodule.exports = Sugar.Date.advance;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfDay;","'use strict';\n\nvar Sugar = require('sugar-core'),\n resetTime = require('./internal/resetTime'),\n getWeekday = require('./internal/getWeekday'),\n setWeekday = require('./internal/setWeekday');\n\nSugar.Date.defineInstance({\n\n 'beginningOfISOWeek': function(date) {\n var day = getWeekday(date);\n if (day === 0) {\n day = -6;\n } else if (day !== 1) {\n day = 1;\n }\n setWeekday(date, day);\n return resetTime(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.beginningOfISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfYear;","'use strict';\n\nvar buildDateUnitMethods = require('../internal/buildDateUnitMethods');\n\nbuildDateUnitMethods();","'use strict';\n\nvar buildNumberUnitMethods = require('../internal/buildNumberUnitMethods');\n\nbuildNumberUnitMethods();","'use strict';\n\nvar buildRelativeAliases = require('../internal/buildRelativeAliases');\n\nbuildRelativeAliases();","'use strict';\n\nvar setDateChainableConstructor = require('../internal/setDateChainableConstructor');\n\nsetDateChainableConstructor();","'use strict';\n\nvar Sugar = require('sugar-core'),\n cloneDate = require('./internal/cloneDate');\n\nSugar.Date.defineInstance({\n\n 'clone': function(date) {\n return cloneDate(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.clone;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate');\n\nrequire('./build/setDateChainableConstructorCall');\n\nSugar.Date.defineStatic({\n\n 'create': function(d, options) {\n return createDate(d, options);\n }\n\n});\n\nmodule.exports = Sugar.Date.create;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysFromNow;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getDaysInMonth = require('./internal/getDaysInMonth');\n\nSugar.Date.defineInstance({\n\n 'daysInMonth': function(date) {\n return getDaysInMonth(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.daysInMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfDay;","'use strict';\n\nvar Sugar = require('sugar-core'),\n DateUnitIndexes = require('./var/DateUnitIndexes'),\n getWeekday = require('./internal/getWeekday'),\n setWeekday = require('./internal/setWeekday'),\n moveToEndOfUnit = require('./internal/moveToEndOfUnit');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nSugar.Date.defineInstance({\n\n 'endOfISOWeek': function(date) {\n if (getWeekday(date) !== 0) {\n setWeekday(date, 7);\n }\n return moveToEndOfUnit(date, DAY_INDEX);\n }\n\n});\n\nmodule.exports = Sugar.Date.endOfISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfYear;","'use strict';\n\nvar Sugar = require('sugar-core'),\n dateFormat = require('./internal/dateFormat');\n\nSugar.Date.defineInstance({\n\n 'format': function(date, f, localeCode) {\n return dateFormat(date, f, localeCode);\n }\n\n});\n\nmodule.exports = Sugar.Date.format;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDateWithContext = require('./internal/createDateWithContext');\n\nSugar.Date.defineInstance({\n\n 'get': function(date, d, options) {\n return createDateWithContext(date, d, options);\n }\n\n});\n\nmodule.exports = Sugar.Date.get;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers'),\n getKeys = require('../common/internal/getKeys');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'getAllLocaleCodes': function() {\n return getKeys(localeManager.getAll());\n }\n\n});\n\nmodule.exports = Sugar.Date.getAllLocaleCodes;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'getAllLocales': function() {\n return localeManager.getAll();\n }\n\n});\n\nmodule.exports = Sugar.Date.getAllLocales;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getWeekNumber = require('./internal/getWeekNumber');\n\nSugar.Date.defineInstance({\n\n 'getISOWeek': function(date) {\n return getWeekNumber(date, true);\n }\n\n});\n\nmodule.exports = Sugar.Date.getISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'getLocale': function(code) {\n return localeManager.get(code, !code);\n }\n\n});\n\nmodule.exports = Sugar.Date.getLocale;","'use strict';\n\nvar Sugar = require('sugar-core'),\n _dateOptions = require('./var/_dateOptions');\n\nmodule.exports = Sugar.Date.getOption;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getUTCOffset = require('./internal/getUTCOffset');\n\nSugar.Date.defineInstance({\n\n 'getUTCOffset': function(date, iso) {\n return getUTCOffset(date, iso);\n }\n\n});\n\nmodule.exports = Sugar.Date.getUTCOffset;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nSugar.Date.defineInstance({\n\n 'getUTCWeekday': function(date) {\n return date.getUTCDay();\n }\n\n});\n\nmodule.exports = Sugar.Date.getUTCWeekday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getWeekday = require('./internal/getWeekday');\n\nSugar.Date.defineInstance({\n\n 'getWeekday': function(date) {\n return getWeekday(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.getWeekday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursUntil;","'use strict';\n\n// Static Methods\nrequire('./addLocale');\nrequire('./create');\nrequire('./getAllLocaleCodes');\nrequire('./getAllLocales');\nrequire('./getLocale');\nrequire('./removeLocale');\nrequire('./setLocale');\n\n// Instance Methods\nrequire('../number/day');\nrequire('../number/dayAfter');\nrequire('../number/dayAgo');\nrequire('../number/dayBefore');\nrequire('../number/dayFromNow');\nrequire('../number/days');\nrequire('../number/daysAfter');\nrequire('../number/daysAgo');\nrequire('../number/daysBefore');\nrequire('../number/daysFromNow');\nrequire('../number/duration');\nrequire('../number/hour');\nrequire('../number/hourAfter');\nrequire('../number/hourAgo');\nrequire('../number/hourBefore');\nrequire('../number/hourFromNow');\nrequire('../number/hours');\nrequire('../number/hoursAfter');\nrequire('../number/hoursAgo');\nrequire('../number/hoursBefore');\nrequire('../number/hoursFromNow');\nrequire('../number/millisecond');\nrequire('../number/millisecondAfter');\nrequire('../number/millisecondAgo');\nrequire('../number/millisecondBefore');\nrequire('../number/millisecondFromNow');\nrequire('../number/milliseconds');\nrequire('../number/millisecondsAfter');\nrequire('../number/millisecondsAgo');\nrequire('../number/millisecondsBefore');\nrequire('../number/millisecondsFromNow');\nrequire('../number/minute');\nrequire('../number/minuteAfter');\nrequire('../number/minuteAgo');\nrequire('../number/minuteBefore');\nrequire('../number/minuteFromNow');\nrequire('../number/minutes');\nrequire('../number/minutesAfter');\nrequire('../number/minutesAgo');\nrequire('../number/minutesBefore');\nrequire('../number/minutesFromNow');\nrequire('../number/month');\nrequire('../number/monthAfter');\nrequire('../number/monthAgo');\nrequire('../number/monthBefore');\nrequire('../number/monthFromNow');\nrequire('../number/months');\nrequire('../number/monthsAfter');\nrequire('../number/monthsAgo');\nrequire('../number/monthsBefore');\nrequire('../number/monthsFromNow');\nrequire('../number/second');\nrequire('../number/secondAfter');\nrequire('../number/secondAgo');\nrequire('../number/secondBefore');\nrequire('../number/secondFromNow');\nrequire('../number/seconds');\nrequire('../number/secondsAfter');\nrequire('../number/secondsAgo');\nrequire('../number/secondsBefore');\nrequire('../number/secondsFromNow');\nrequire('../number/week');\nrequire('../number/weekAfter');\nrequire('../number/weekAgo');\nrequire('../number/weekBefore');\nrequire('../number/weekFromNow');\nrequire('../number/weeks');\nrequire('../number/weeksAfter');\nrequire('../number/weeksAgo');\nrequire('../number/weeksBefore');\nrequire('../number/weeksFromNow');\nrequire('../number/year');\nrequire('../number/yearAfter');\nrequire('../number/yearAgo');\nrequire('../number/yearBefore');\nrequire('../number/yearFromNow');\nrequire('../number/years');\nrequire('../number/yearsAfter');\nrequire('../number/yearsAgo');\nrequire('../number/yearsBefore');\nrequire('../number/yearsFromNow');\nrequire('./addDays');\nrequire('./addHours');\nrequire('./addMilliseconds');\nrequire('./addMinutes');\nrequire('./addMonths');\nrequire('./addSeconds');\nrequire('./addWeeks');\nrequire('./addYears');\nrequire('./advance');\nrequire('./beginningOfDay');\nrequire('./beginningOfISOWeek');\nrequire('./beginningOfMonth');\nrequire('./beginningOfWeek');\nrequire('./beginningOfYear');\nrequire('./clone');\nrequire('./daysAgo');\nrequire('./daysFromNow');\nrequire('./daysInMonth');\nrequire('./daysSince');\nrequire('./daysUntil');\nrequire('./endOfDay');\nrequire('./endOfISOWeek');\nrequire('./endOfMonth');\nrequire('./endOfWeek');\nrequire('./endOfYear');\nrequire('./format');\nrequire('./get');\nrequire('./getISOWeek');\nrequire('./getUTCOffset');\nrequire('./getUTCWeekday');\nrequire('./getWeekday');\nrequire('./hoursAgo');\nrequire('./hoursFromNow');\nrequire('./hoursSince');\nrequire('./hoursUntil');\nrequire('./is');\nrequire('./isAfter');\nrequire('./isBefore');\nrequire('./isBetween');\nrequire('./isFriday');\nrequire('./isFuture');\nrequire('./isLastMonth');\nrequire('./isLastWeek');\nrequire('./isLastYear');\nrequire('./isLeapYear');\nrequire('./isMonday');\nrequire('./isNextMonth');\nrequire('./isNextWeek');\nrequire('./isNextYear');\nrequire('./isPast');\nrequire('./isSaturday');\nrequire('./isSunday');\nrequire('./isThisMonth');\nrequire('./isThisWeek');\nrequire('./isThisYear');\nrequire('./isThursday');\nrequire('./isToday');\nrequire('./isTomorrow');\nrequire('./isTuesday');\nrequire('./isUTC');\nrequire('./isValid');\nrequire('./isWednesday');\nrequire('./isWeekday');\nrequire('./isWeekend');\nrequire('./isYesterday');\nrequire('./iso');\nrequire('./millisecondsAgo');\nrequire('./millisecondsFromNow');\nrequire('./millisecondsSince');\nrequire('./millisecondsUntil');\nrequire('./minutesAgo');\nrequire('./minutesFromNow');\nrequire('./minutesSince');\nrequire('./minutesUntil');\nrequire('./monthsAgo');\nrequire('./monthsFromNow');\nrequire('./monthsSince');\nrequire('./monthsUntil');\nrequire('./relative');\nrequire('./relativeTo');\nrequire('./reset');\nrequire('./rewind');\nrequire('./secondsAgo');\nrequire('./secondsFromNow');\nrequire('./secondsSince');\nrequire('./secondsUntil');\nrequire('./set');\nrequire('./setISOWeek');\nrequire('./setUTC');\nrequire('./setWeekday');\nrequire('./weeksAgo');\nrequire('./weeksFromNow');\nrequire('./weeksSince');\nrequire('./weeksUntil');\nrequire('./yearsAgo');\nrequire('./yearsFromNow');\nrequire('./yearsSince');\nrequire('./yearsUntil');\n\n// Accessors\nrequire('./getOption');\nrequire('./setOption');\n\nmodule.exports = require('sugar-core');","'use strict';\n\nvar updateDate = require('./updateDate');\n\nfunction advanceDate(d, unit, num, reset) {\n var set = {};\n set[unit] = num;\n return updateDate(d, set, reset, 1);\n}\n\nmodule.exports = advanceDate;","'use strict';\n\nvar updateDate = require('./updateDate'),\n collectUpdateDateArguments = require('./collectUpdateDateArguments');\n\nfunction advanceDateWithArgs(d, args, dir) {\n args = collectUpdateDateArguments(args, true);\n return updateDate(d, args[0], args[1], dir);\n}\n\nmodule.exports = advanceDateWithArgs;","'use strict';\n\nvar map = require('../../common/internal/map'),\n escapeRegExp = require('../../common/internal/escapeRegExp');\n\nfunction arrayToRegAlternates(arr) {\n var joined = arr.join('');\n if (!arr || !arr.length) {\n return '';\n }\n if (joined.length === arr.length) {\n return '[' + joined + ']';\n }\n // map handles sparse arrays so no need to compact the array here.\n return map(arr, escapeRegExp).join('|');\n}\n\nmodule.exports = arrayToRegAlternates;","'use strict';\n\nvar dateIsValid = require('./dateIsValid');\n\nfunction assertDateIsValid(d) {\n if (!dateIsValid(d)) {\n throw new TypeError('Date is not valid');\n }\n}\n\nmodule.exports = assertDateIsValid;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n forEach = require('../../common/internal/forEach'),\n createDate = require('./createDate'),\n compareDate = require('./compareDate'),\n advanceDate = require('./advanceDate'),\n moveToEndOfUnit = require('./moveToEndOfUnit'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n simpleCapitalize = require('../../common/internal/simpleCapitalize'),\n moveToBeginningOfUnit = require('./moveToBeginningOfUnit'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar'),\n getTimeDistanceForUnit = require('./getTimeDistanceForUnit');\n\nvar sugarDate = namespaceAliases.sugarDate,\n HOURS_INDEX = DateUnitIndexes.HOURS_INDEX,\n DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nfunction buildDateUnitMethods() {\n\n defineInstanceSimilar(sugarDate, DateUnits, function(methods, unit, index) {\n var name = unit.name, caps = simpleCapitalize(name);\n\n if (index > DAY_INDEX) {\n forEach(['Last','This','Next'], function(shift) {\n methods['is' + shift + caps] = function(d, localeCode) {\n return compareDate(d, shift + ' ' + name, 0, localeCode, { locale: 'en' });\n };\n });\n }\n if (index > HOURS_INDEX) {\n methods['beginningOf' + caps] = function(d, localeCode) {\n return moveToBeginningOfUnit(d, index, localeCode);\n };\n methods['endOf' + caps] = function(d, localeCode) {\n return moveToEndOfUnit(d, index, localeCode);\n };\n }\n\n methods['add' + caps + 's'] = function(d, num, reset) {\n return advanceDate(d, name, num, reset);\n };\n\n var since = function(date, d, options) {\n return getTimeDistanceForUnit(date, createDate(d, options, true), unit);\n };\n var until = function(date, d, options) {\n return getTimeDistanceForUnit(createDate(d, options, true), date, unit);\n };\n\n methods[name + 'sAgo'] = methods[name + 'sUntil'] = until;\n methods[name + 'sSince'] = methods[name + 'sFromNow'] = since;\n\n });\n\n}\n\nmodule.exports = buildDateUnitMethods;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n createDate = require('./createDate'),\n mathAliases = require('../../common/var/mathAliases'),\n advanceDate = require('./advanceDate'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar');\n\nvar sugarNumber = namespaceAliases.sugarNumber,\n round = mathAliases.round;\n\nfunction buildNumberUnitMethods() {\n defineInstanceSimilar(sugarNumber, DateUnits, function(methods, unit) {\n var name = unit.name, base, after, before;\n base = function(n) {\n return round(n * unit.multiplier);\n };\n after = function(n, d, options) {\n return advanceDate(createDate(d, options, true), name, n);\n };\n before = function(n, d, options) {\n return advanceDate(createDate(d, options, true), name, -n);\n };\n methods[name] = base;\n methods[name + 's'] = base;\n methods[name + 'Before'] = before;\n methods[name + 'sBefore'] = before;\n methods[name + 'Ago'] = before;\n methods[name + 'sAgo'] = before;\n methods[name + 'After'] = after;\n methods[name + 'sAfter'] = after;\n methods[name + 'FromNow'] = after;\n methods[name + 'sFromNow'] = after;\n });\n}\n\nmodule.exports = buildNumberUnitMethods;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n spaceSplit = require('../../common/internal/spaceSplit'),\n fullCompareDate = require('./fullCompareDate'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar');\n\nvar English = LocaleHelpers.English,\n sugarDate = namespaceAliases.sugarDate;\n\nfunction buildRelativeAliases() {\n var special = spaceSplit('Today Yesterday Tomorrow Weekday Weekend Future Past');\n var weekdays = English.weekdays.slice(0, 7);\n var months = English.months.slice(0, 12);\n var together = special.concat(weekdays).concat(months);\n defineInstanceSimilar(sugarDate, together, function(methods, name) {\n methods['is'+ name] = function(d) {\n return fullCompareDate(d, name);\n };\n });\n}\n\nmodule.exports = buildRelativeAliases;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet'),\n setISOWeekNumber = require('./setISOWeekNumber');\n\nfunction callDateSetWithWeek(d, method, value, safe) {\n if (method === 'ISOWeek') {\n setISOWeekNumber(d, value);\n } else {\n callDateSet(d, method, value, safe);\n }\n}\n\nmodule.exports = callDateSetWithWeek;","'use strict';\n\nvar _utc = require('../../common/var/_utc');\n\nfunction cloneDate(d) {\n // Rhino environments have a bug where new Date(d) truncates\n // milliseconds so need to call getTime() here.\n var clone = new Date(d.getTime());\n _utc(clone, !!_utc(d));\n return clone;\n}\n\nmodule.exports = cloneDate;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n isDefined = require('../../common/internal/isDefined'),\n walkUnitDown = require('./walkUnitDown');\n\nvar YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction collectDateParamsFromArguments(args) {\n var params = {}, index = 0;\n walkUnitDown(YEAR_INDEX, function(unit) {\n var arg = args[index++];\n if (isDefined(arg)) {\n params[unit.name] = arg;\n }\n });\n return params;\n}\n\nmodule.exports = collectDateParamsFromArguments;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n simpleClone = require('../../common/internal/simpleClone'),\n isObjectType = require('../../common/internal/isObjectType'),\n getDateParamsFromString = require('./getDateParamsFromString'),\n collectDateParamsFromArguments = require('./collectDateParamsFromArguments');\n\nvar isNumber = classChecks.isNumber,\n isString = classChecks.isString;\n\nfunction collectUpdateDateArguments(args, allowDuration) {\n var arg1 = args[0], arg2 = args[1], params, reset;\n if (allowDuration && isString(arg1)) {\n params = getDateParamsFromString(arg1);\n reset = arg2;\n } else if (isNumber(arg1) && isNumber(arg2)) {\n params = collectDateParamsFromArguments(args);\n } else {\n params = isObjectType(arg1) ? simpleClone(arg1) : arg1;\n reset = arg2;\n }\n return [params, reset];\n}\n\nmodule.exports = collectUpdateDateArguments;","'use strict';\n\nvar MINUTES = require('../var/MINUTES'),\n DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n _utc = require('../../common/var/_utc'),\n tzOffset = require('./tzOffset'),\n cloneDate = require('./cloneDate'),\n isDefined = require('../../common/internal/isDefined'),\n advanceDate = require('./advanceDate'),\n dateIsValid = require('./dateIsValid'),\n moveToEndOfUnit = require('./moveToEndOfUnit'),\n getExtendedDate = require('./getExtendedDate'),\n moveToBeginningOfUnit = require('./moveToBeginningOfUnit');\n\nvar MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction compareDate(date, d, margin, localeCode, options) {\n var loMargin = 0, hiMargin = 0, timezoneShift, compareEdges, override, min, max, p, t;\n\n function getTimezoneShift() {\n // If there is any specificity in the date then we're implicitly not\n // checking absolute time, so ignore timezone shifts.\n if (p.set && p.set.specificity) {\n return 0;\n }\n return (tzOffset(p.date) - tzOffset(date)) * MINUTES;\n }\n\n function addSpecificUnit() {\n var unit = DateUnits[p.set.specificity];\n return advanceDate(cloneDate(p.date), unit.name, 1).getTime() - 1;\n }\n\n if (_utc(date)) {\n options = options || {};\n options.fromUTC = true;\n options.setUTC = true;\n }\n\n p = getExtendedDate(null, d, options, true);\n\n if (margin > 0) {\n loMargin = hiMargin = margin;\n override = true;\n }\n if (!dateIsValid(p.date)) return false;\n if (p.set && p.set.specificity) {\n if (isDefined(p.set.edge) || isDefined(p.set.shift)) {\n compareEdges = true;\n moveToBeginningOfUnit(p.date, p.set.specificity, localeCode);\n }\n if (compareEdges || p.set.specificity === MONTH_INDEX) {\n max = moveToEndOfUnit(cloneDate(p.date), p.set.specificity, localeCode).getTime();\n } else {\n max = addSpecificUnit();\n }\n if (!override && isDefined(p.set.sign) && p.set.specificity) {\n // If the time is relative, there can occasionally be an disparity between\n // the relative date and \"now\", which it is being compared to, so set an\n // extra margin to account for this.\n loMargin = 50;\n hiMargin = -50;\n }\n }\n t = date.getTime();\n min = p.date.getTime();\n max = max || min;\n timezoneShift = getTimezoneShift();\n // istanbul ignore if\n if (timezoneShift) {\n min -= timezoneShift;\n max -= timezoneShift;\n }\n return t >= (min - loMargin) && t <= (max + hiMargin);\n}\n\nmodule.exports = compareDate;","'use strict';\n\nvar setDate = require('./setDate'),\n getDate = require('./getDate'),\n getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n getNewDate = require('./getNewDate');\n\nfunction compareDay(d, shift) {\n var comp = getNewDate();\n if (shift) {\n setDate(comp, getDate(comp) + shift);\n }\n return getYear(d) === getYear(comp) &&\n getMonth(d) === getMonth(comp) &&\n getDate(d) === getDate(comp);\n}\n\nmodule.exports = compareDay;","'use strict';\n\nvar getExtendedDate = require('./getExtendedDate');\n\nfunction createDate(d, options, forceClone) {\n return getExtendedDate(null, d, options, forceClone).date;\n}\n\nmodule.exports = createDate;","'use strict';\n\nvar getExtendedDate = require('./getExtendedDate');\n\nfunction createDateWithContext(contextDate, d, options, forceClone) {\n return getExtendedDate(contextDate, d, options, forceClone).date;\n}\n\nmodule.exports = createDateWithContext;","'use strict';\n\nvar CoreOutputFormats = require('../var/CoreOutputFormats'),\n formattingTokens = require('../var/formattingTokens'),\n assertDateIsValid = require('./assertDateIsValid');\n\nvar dateFormatMatcher = formattingTokens.dateFormatMatcher;\n\nfunction dateFormat(d, format, localeCode) {\n assertDateIsValid(d);\n format = CoreOutputFormats[format] || format || '{long}';\n return dateFormatMatcher(format, d, localeCode);\n}\n\nmodule.exports = dateFormat;","'use strict';\n\nfunction dateIsValid(d) {\n return !isNaN(d.getTime());\n}\n\nmodule.exports = dateIsValid;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n dateFormat = require('./dateFormat'),\n classChecks = require('../../common/var/classChecks'),\n assertDateIsValid = require('./assertDateIsValid'),\n getAdjustedUnitForDate = require('./getAdjustedUnitForDate');\n\nvar isFunction = classChecks.isFunction,\n localeManager = LocaleHelpers.localeManager;\n\nfunction dateRelative(d, dRelative, arg1, arg2) {\n var adu, format, type, localeCode, fn;\n assertDateIsValid(d);\n if (isFunction(arg1)) {\n fn = arg1;\n } else {\n localeCode = arg1;\n fn = arg2;\n }\n adu = getAdjustedUnitForDate(d, dRelative);\n if (fn) {\n format = fn.apply(d, adu.concat(localeManager.get(localeCode)));\n if (format) {\n return dateFormat(d, format, localeCode);\n }\n }\n // Adjust up if time is in ms, as this doesn't\n // look very good for a standard relative date.\n if (adu[1] === 0) {\n adu[1] = 1;\n adu[0] = 1;\n }\n if (dRelative) {\n type = 'duration';\n } else if (adu[2] > 0) {\n type = 'future';\n } else {\n type = 'past';\n }\n return localeManager.get(localeCode).getRelativeFormat(adu, type);\n}\n\nmodule.exports = dateRelative;","'use strict';\n\nfunction defaultNewDate() {\n return new Date;\n}\n\nmodule.exports = defaultNewDate;","'use strict';\n\nvar getDateParamKey = require('./getDateParamKey');\n\nfunction deleteDateParam(params, key) {\n delete params[getDateParamKey(params, key)];\n}\n\nmodule.exports = deleteDateParam;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n trim = require('../../common/internal/trim'),\n getMonth = require('./getMonth'),\n isDefined = require('../../common/internal/isDefined'),\n getNewDate = require('./getNewDate'),\n compareDay = require('./compareDay'),\n getWeekday = require('./getWeekday'),\n dateIsValid = require('./dateIsValid'),\n classChecks = require('../../common/var/classChecks'),\n compareDate = require('./compareDate');\n\nvar isString = classChecks.isString,\n English = LocaleHelpers.English;\n\nfunction fullCompareDate(date, d, margin) {\n var tmp;\n if (!dateIsValid(date)) return;\n if (isString(d)) {\n d = trim(d).toLowerCase();\n switch(true) {\n case d === 'future': return date.getTime() > getNewDate().getTime();\n case d === 'past': return date.getTime() < getNewDate().getTime();\n case d === 'today': return compareDay(date);\n case d === 'tomorrow': return compareDay(date, 1);\n case d === 'yesterday': return compareDay(date, -1);\n case d === 'weekday': return getWeekday(date) > 0 && getWeekday(date) < 6;\n case d === 'weekend': return getWeekday(date) === 0 || getWeekday(date) === 6;\n\n case (isDefined(tmp = English.weekdayMap[d])):\n return getWeekday(date) === tmp;\n case (isDefined(tmp = English.monthMap[d])):\n return getMonth(date) === tmp;\n }\n }\n return compareDate(date, d, margin);\n}\n\nmodule.exports = fullCompareDate;","'use strict';\n\nvar mathAliases = require('../../common/var/mathAliases'),\n iterateOverDateUnits = require('./iterateOverDateUnits');\n\nvar abs = mathAliases.abs;\n\nfunction getAdjustedUnit(ms, fn) {\n var unitIndex = 0, value = 0;\n iterateOverDateUnits(function(unit, i) {\n value = abs(fn(unit));\n if (value >= 1) {\n unitIndex = i;\n return false;\n }\n });\n return [value, unitIndex, ms];\n}\n\nmodule.exports = getAdjustedUnit;","'use strict';\n\nvar getNewDate = require('./getNewDate'),\n mathAliases = require('../../common/var/mathAliases'),\n getAdjustedUnit = require('./getAdjustedUnit'),\n getTimeDistanceForUnit = require('./getTimeDistanceForUnit');\n\nvar abs = mathAliases.abs;\n\nfunction getAdjustedUnitForDate(d, dRelative) {\n var ms;\n if (!dRelative) {\n dRelative = getNewDate();\n if (d > dRelative) {\n // If our date is greater than the one that we got from getNewDate, it\n // means that we are finding the unit for a date that is in the future\n // relative to now. However, often the incoming date was created in\n // the same cycle as our comparison, but our \"now\" date will have been\n // created an instant after it, creating situations where \"5 minutes from\n // now\" becomes \"4 minutes from now\" in the same tick. To prevent this,\n // subtract a buffer of 10ms to compensate.\n dRelative = new Date(dRelative.getTime() - 10);\n }\n }\n ms = d - dRelative;\n return getAdjustedUnit(ms, function(u) {\n return abs(getTimeDistanceForUnit(d, dRelative, u));\n });\n}\n\nmodule.exports = getAdjustedUnitForDate;","'use strict';\n\nvar trunc = require('../../common/var/trunc'),\n withPrecision = require('../../common/internal/withPrecision'),\n getAdjustedUnit = require('./getAdjustedUnit');\n\nfunction getAdjustedUnitForNumber(ms) {\n return getAdjustedUnit(ms, function(unit) {\n return trunc(withPrecision(ms / unit.multiplier, 1));\n });\n}\n\nmodule.exports = getAdjustedUnitForNumber;","'use strict';\n\nfunction getArrayWithOffset(arr, n, alternate, offset) {\n var val;\n if (alternate > 1) {\n val = arr[n + (alternate - 1) * offset];\n }\n return val || arr[n];\n}\n\nmodule.exports = getArrayWithOffset;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getDate(d) {\n return callDateGet(d, 'Date');\n}\n\nmodule.exports = getDate;","'use strict';\n\nvar getDateParamKey = require('./getDateParamKey'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases');\n\nvar getOwn = coreUtilityAliases.getOwn;\n\nfunction getDateParam(params, key) {\n return getOwn(params, getDateParamKey(params, key));\n}\n\nmodule.exports = getDateParam;","'use strict';\n\nvar getOwnKey = require('../../common/internal/getOwnKey');\n\nfunction getDateParamKey(params, key) {\n return getOwnKey(params, key) ||\n getOwnKey(params, key + 's') ||\n (key === 'day' && getOwnKey(params, 'date'));\n}\n\nmodule.exports = getDateParamKey;","'use strict';\n\nvar isUndefined = require('../../common/internal/isUndefined');\n\nfunction getDateParamsFromString(str) {\n var match, num, params = {};\n match = str.match(/^(-?\\d*[\\d.]\\d*)?\\s?(\\w+?)s?$/i);\n if (match) {\n if (isUndefined(num)) {\n num = match[1] ? +match[1] : 1;\n }\n params[match[2].toLowerCase()] = num;\n }\n return params;\n}\n\nmodule.exports = getDateParamsFromString;","'use strict';\n\nvar getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n callDateGet = require('../../common/internal/callDateGet');\n\nfunction getDaysInMonth(d) {\n return 32 - callDateGet(new Date(getYear(d), getMonth(d), 32), 'Date');\n}\n\nmodule.exports = getDaysInMonth;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n getTimeDistanceForUnit = require('./getTimeDistanceForUnit');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nfunction getDaysSince(d1, d2) {\n return getTimeDistanceForUnit(d1, d2, DateUnits[DAY_INDEX]);\n}\n\nmodule.exports = getDaysSince;","'use strict';\n\nvar EnglishLocaleBaseDefinition = require('../var/EnglishLocaleBaseDefinition'),\n simpleMerge = require('../../common/internal/simpleMerge'),\n simpleClone = require('../../common/internal/simpleClone');\n\nfunction getEnglishVariant(v) {\n return simpleMerge(simpleClone(EnglishLocaleBaseDefinition), v);\n}\n\nmodule.exports = getEnglishVariant;","'use strict';\n\nvar MINUTES = require('../var/MINUTES'),\n ABBREVIATED_YEAR_REG = require('../var/ABBREVIATED_YEAR_REG'),\n LocaleHelpers = require('../var/LocaleHelpers'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n _utc = require('../../common/var/_utc'),\n trunc = require('../../common/var/trunc'),\n forEach = require('../../common/internal/forEach'),\n tzOffset = require('./tzOffset'),\n isDefined = require('../../common/internal/isDefined'),\n resetTime = require('./resetTime'),\n getNewDate = require('./getNewDate'),\n updateDate = require('./updateDate'),\n setWeekday = require('./setWeekday'),\n simpleMerge = require('../../common/internal/simpleMerge'),\n advanceDate = require('./advanceDate'),\n isUndefined = require('../../common/internal/isUndefined'),\n classChecks = require('../../common/var/classChecks'),\n dateIsValid = require('./dateIsValid'),\n simpleClone = require('../../common/internal/simpleClone'),\n isObjectType = require('../../common/internal/isObjectType'),\n moveToEndOfUnit = require('./moveToEndOfUnit'),\n deleteDateParam = require('./deleteDateParam'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases'),\n moveToBeginningOfUnit = require('./moveToBeginningOfUnit'),\n iterateOverDateParams = require('./iterateOverDateParams'),\n getYearFromAbbreviation = require('./getYearFromAbbreviation'),\n iterateOverHigherDateParams = require('./iterateOverHigherDateParams');\n\nvar isNumber = classChecks.isNumber,\n isString = classChecks.isString,\n isDate = classChecks.isDate,\n getOwn = coreUtilityAliases.getOwn,\n English = LocaleHelpers.English,\n localeManager = LocaleHelpers.localeManager,\n DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX,\n YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction getExtendedDate(contextDate, d, opt, forceClone) {\n\n // Locals\n var date, set, loc, afterCallbacks, relative, weekdayDir;\n\n // Options\n var optPrefer, optLocale, optFromUTC, optSetUTC, optParams, optClone;\n\n afterCallbacks = [];\n\n setupOptions(opt);\n\n function setupOptions(opt) {\n opt = isString(opt) ? { locale: opt } : opt || {};\n optPrefer = +!!getOwn(opt, 'future') - +!!getOwn(opt, 'past');\n optLocale = getOwn(opt, 'locale');\n optFromUTC = getOwn(opt, 'fromUTC');\n optSetUTC = getOwn(opt, 'setUTC');\n optParams = getOwn(opt, 'params');\n optClone = getOwn(opt, 'clone');\n }\n\n function parseFormatValues(match, dif) {\n var set = optParams || {};\n forEach(dif.to, function(param, i) {\n var str = match[i + 1], val;\n if (!str) return;\n\n val = parseIrregular(str, param);\n\n if (isUndefined(val)) {\n val = loc.parseValue(str, param);\n }\n\n set[param] = val;\n });\n return set;\n }\n\n function parseIrregular(str, param) {\n if (param === 'utc') {\n return 1;\n } else if (param === 'year') {\n var match = str.match(ABBREVIATED_YEAR_REG);\n if (match) {\n return getYearFromAbbreviation(match[1], date, optPrefer);\n }\n }\n }\n\n // Force the UTC flags to be true if the source date\n // date is UTC, as they will be overwritten later.\n function cloneDateByFlag(d, clone) {\n if (_utc(d) && !isDefined(optFromUTC)) {\n optFromUTC = true;\n }\n if (_utc(d) && !isDefined(optSetUTC)) {\n optSetUTC = true;\n }\n if (clone) {\n d = new Date(d.getTime());\n }\n return d;\n }\n\n function afterDateSet(fn) {\n afterCallbacks.push(fn);\n }\n\n function fireCallbacks() {\n forEach(afterCallbacks, function(fn) {\n fn.call();\n });\n }\n\n function parseStringDate(str) {\n\n str = str.toLowerCase();\n\n // The act of getting the locale will initialize\n // if it is missing and add the required formats.\n loc = localeManager.get(optLocale);\n\n for (var i = 0, dif, match; dif = loc.compiledFormats[i]; i++) {\n match = str.match(dif.reg);\n if (match) {\n\n // Note that caching the format will modify the compiledFormats array\n // which is not a good idea to do inside its for loop, however we\n // know at this point that we have a matched format and that we will\n // break out below, so simpler to do it here.\n loc.cacheFormat(dif, i);\n\n set = parseFormatValues(match, dif);\n\n if (isDefined(set.timestamp)) {\n date.setTime(set.timestamp);\n break;\n }\n\n if (isDefined(set.ampm)) {\n handleAmpm(set.ampm);\n }\n\n if (set.utc || isDefined(set.tzHour)) {\n handleTimezoneOffset(set.tzHour, set.tzMinute);\n }\n\n if (isDefined(set.shift) && isUndefined(set.unit)) {\n // \"next january\", \"next monday\", etc\n handleUnitlessShift();\n }\n\n if (isDefined(set.num) && isUndefined(set.unit)) {\n // \"the second of January\", etc\n handleUnitlessNum(set.num);\n }\n\n if (set.midday) {\n // \"noon\" and \"midnight\"\n handleMidday(set.midday);\n }\n\n if (isDefined(set.day)) {\n // Relative day localizations such as \"today\" and \"tomorrow\".\n handleRelativeDay(set.day);\n }\n\n if (isDefined(set.unit)) {\n // \"3 days ago\", etc\n handleRelativeUnit(set.unit);\n }\n\n if (set.edge) {\n // \"the end of January\", etc\n handleEdge(set.edge, set);\n }\n\n break;\n }\n }\n\n if (!set) {\n // TODO: remove in next major version\n // Fall back to native parsing\n date = new Date(str);\n if (optFromUTC && dateIsValid(date)) {\n // Falling back to system date here which cannot be parsed as UTC,\n // so if we're forcing UTC then simply add the offset.\n date.setTime(date.getTime() + (tzOffset(date) * MINUTES));\n }\n } else if (relative) {\n updateDate(date, set, false, 1);\n } else {\n updateDate(date, set, true, 0, optPrefer, weekdayDir, contextDate);\n }\n fireCallbacks();\n return date;\n }\n\n function handleAmpm(ampm) {\n if (ampm === 1 && set.hour < 12) {\n // If the time is 1pm-11pm advance the time by 12 hours.\n set.hour += 12;\n } else if (ampm === 0 && set.hour === 12) {\n // If it is 12:00am then set the hour to 0.\n set.hour = 0;\n }\n }\n\n function handleTimezoneOffset(tzHour, tzMinute) {\n // Adjust for timezone offset\n _utc(date, true);\n\n // Sign is parsed as part of the hour, so flip\n // the minutes if it's negative.\n\n if (tzHour < 0) {\n tzMinute *= -1;\n }\n\n var offset = tzHour * 60 + (tzMinute || 0);\n if (offset) {\n set.minute = (set.minute || 0) - offset;\n }\n }\n\n function handleUnitlessShift() {\n if (isDefined(set.month)) {\n // \"next January\"\n set.unit = YEAR_INDEX;\n } else if (isDefined(set.weekday)) {\n // \"next Monday\"\n set.unit = WEEK_INDEX;\n }\n }\n\n function handleUnitlessNum(num) {\n if (isDefined(set.weekday)) {\n // \"The second Tuesday of March\"\n setOrdinalWeekday(num);\n } else if (isDefined(set.month)) {\n // \"The second of March\"\n set.date = set.num;\n }\n }\n\n function handleMidday(hour) {\n set.hour = hour % 24;\n if (hour > 23) {\n // If the date has hours past 24, we need to prevent it from traversing\n // into a new day as that would make it being part of a new week in\n // ambiguous dates such as \"Monday\".\n afterDateSet(function() {\n advanceDate(date, 'date', trunc(hour / 24));\n });\n }\n }\n\n function handleRelativeDay() {\n resetTime(date);\n if (isUndefined(set.unit)) {\n set.unit = DAY_INDEX;\n set.num = set.day;\n delete set.day;\n }\n }\n\n function handleRelativeUnit(unitIndex) {\n var num;\n\n if (isDefined(set.num)) {\n num = set.num;\n } else if (isDefined(set.edge) && isUndefined(set.shift)) {\n num = 0;\n } else {\n num = 1;\n }\n\n // If a weekday is defined, there are 3 possible formats being applied:\n //\n // 1. \"the day after monday\": unit is days\n // 2. \"next monday\": short for \"next week monday\", unit is weeks\n // 3. \"the 2nd monday of next month\": unit is months\n //\n // In the first case, we need to set the weekday up front, as the day is\n // relative to it. The second case also needs to be handled up front for\n // formats like \"next monday at midnight\" which will have its weekday reset\n // if not set up front. The last case will set up the params necessary to\n // shift the weekday and allow separateAbsoluteUnits below to handle setting\n // it after the date has been shifted.\n if(isDefined(set.weekday)) {\n if(unitIndex === MONTH_INDEX) {\n setOrdinalWeekday(num);\n num = 1;\n } else {\n updateDate(date, { weekday: set.weekday }, true);\n delete set.weekday;\n }\n }\n\n if (set.half) {\n // Allow localized \"half\" as a standalone colloquialism. Purposely avoiding\n // the locale number system to reduce complexity. The units \"month\" and\n // \"week\" are purposely excluded in the English date formats below, as\n // \"half a week\" and \"half a month\" are meaningless as exact dates.\n num *= set.half;\n }\n\n if (isDefined(set.shift)) {\n // Shift and unit, ie \"next month\", \"last week\", etc.\n num *= set.shift;\n } else if (set.sign) {\n // Unit and sign, ie \"months ago\", \"weeks from now\", etc.\n num *= set.sign;\n }\n\n if (isDefined(set.day)) {\n // \"the day after tomorrow\"\n num += set.day;\n delete set.day;\n }\n\n // Formats like \"the 15th of last month\" or \"6:30pm of next week\"\n // contain absolute units in addition to relative ones, so separate\n // them here, remove them from the params, and set up a callback to\n // set them after the relative ones have been set.\n separateAbsoluteUnits(unitIndex);\n\n // Finally shift the unit.\n set[English.units[unitIndex]] = num;\n relative = true;\n }\n\n function handleEdge(edge, params) {\n var edgeIndex = params.unit, weekdayOfMonth;\n if (!edgeIndex) {\n // If we have \"the end of January\", then we need to find the unit index.\n iterateOverHigherDateParams(params, function(unitName, val, unit, i) {\n if (unitName === 'weekday' && isDefined(params.month)) {\n // If both a month and weekday exist, then we have a format like\n // \"the last tuesday in November, 2012\", where the \"last\" is still\n // relative to the end of the month, so prevent the unit \"weekday\"\n // from taking over.\n return;\n }\n edgeIndex = i;\n });\n }\n if (edgeIndex === MONTH_INDEX && isDefined(params.weekday)) {\n // If a weekday in a month exists (as described above),\n // then set it up to be set after the date has been shifted.\n weekdayOfMonth = params.weekday;\n delete params.weekday;\n }\n afterDateSet(function() {\n var stopIndex;\n // \"edge\" values that are at the very edge are \"2\" so the beginning of the\n // year is -2 and the end of the year is 2. Conversely, the \"last day\" is\n // actually 00:00am so it is 1. -1 is reserved but unused for now.\n if (edge < 0) {\n moveToBeginningOfUnit(date, edgeIndex, optLocale);\n } else if (edge > 0) {\n if (edge === 1) {\n stopIndex = DAY_INDEX;\n moveToBeginningOfUnit(date, DAY_INDEX);\n }\n moveToEndOfUnit(date, edgeIndex, optLocale, stopIndex);\n }\n if (isDefined(weekdayOfMonth)) {\n setWeekday(date, weekdayOfMonth, -edge);\n resetTime(date);\n }\n });\n if (edgeIndex === MONTH_INDEX) {\n params.specificity = DAY_INDEX;\n } else {\n params.specificity = edgeIndex - 1;\n }\n }\n\n function setOrdinalWeekday(num) {\n // If we have \"the 2nd Tuesday of June\", then pass the \"weekdayDir\"\n // flag along to updateDate so that the date does not accidentally traverse\n // into the previous month. This needs to be independent of the \"prefer\"\n // flag because we are only ensuring that the weekday is in the future, not\n // the entire date.\n set.weekday = 7 * (num - 1) + set.weekday;\n set.date = 1;\n weekdayDir = 1;\n }\n\n function separateAbsoluteUnits(unitIndex) {\n var params;\n\n iterateOverDateParams(set, function(name, val, unit, i) {\n // If there is a time unit set that is more specific than\n // the matched unit we have a string like \"5:30am in 2 minutes\",\n // which is meaningless, so invalidate the date...\n if (i >= unitIndex) {\n date.setTime(NaN);\n return false;\n } else if (i < unitIndex) {\n // ...otherwise set the params to set the absolute date\n // as a callback after the relative date has been set.\n params = params || {};\n params[name] = val;\n deleteDateParam(set, name);\n }\n });\n if (params) {\n afterDateSet(function() {\n updateDate(date, params, true, 0, false, weekdayDir);\n if (optParams) {\n simpleMerge(optParams, params);\n }\n });\n if (set.edge) {\n // \"the end of March of next year\"\n handleEdge(set.edge, params);\n delete set.edge;\n }\n }\n }\n\n if (contextDate && d) {\n // If a context date is passed (\"get\" and \"unitsFromNow\"),\n // then use it as the starting point.\n date = cloneDateByFlag(contextDate, true);\n } else {\n date = getNewDate();\n }\n\n _utc(date, optFromUTC);\n\n if (isString(d)) {\n date = parseStringDate(d);\n } else if (isDate(d)) {\n date = cloneDateByFlag(d, optClone || forceClone);\n } else if (isObjectType(d)) {\n set = simpleClone(d);\n updateDate(date, set, true);\n } else if (isNumber(d) || d === null) {\n date.setTime(d);\n }\n // A date created by parsing a string presumes that the format *itself* is\n // UTC, but not that the date, once created, should be manipulated as such. In\n // other words, if you are creating a date object from a server time\n // \"2012-11-15T12:00:00Z\", in the majority of cases you are using it to create\n // a date that will, after creation, be manipulated as local, so reset the utc\n // flag here unless \"setUTC\" is also set.\n _utc(date, !!optSetUTC);\n return {\n set: set,\n date: date\n };\n}\n\nmodule.exports = getExtendedDate;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction getHigherUnitIndex(index) {\n return index === DAY_INDEX ? MONTH_INDEX : index + 1;\n}\n\nmodule.exports = getHigherUnitIndex;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getHours(d) {\n return callDateGet(d, 'Hours');\n}\n\nmodule.exports = getHours;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes');\n\nvar HOURS_INDEX = DateUnitIndexes.HOURS_INDEX,\n DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction getLowerUnitIndex(index) {\n if (index === MONTH_INDEX) {\n return DAY_INDEX;\n } else if (index === WEEK_INDEX) {\n return HOURS_INDEX;\n }\n return index - 1;\n}\n\nmodule.exports = getLowerUnitIndex;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n trunc = require('../../common/var/trunc'),\n getHours = require('./getHours');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nfunction getMeridiemToken(d, localeCode) {\n var hours = getHours(d);\n return localeManager.get(localeCode).ampm[trunc(hours / 12)] || '';\n}\n\nmodule.exports = getMeridiemToken;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getMonth(d) {\n return callDateGet(d, 'Month');\n}\n\nmodule.exports = getMonth;","'use strict';\n\nvar _dateOptions = require('../var/_dateOptions');\n\nfunction getNewDate() {\n return _dateOptions('newDateInternal')();\n}\n\nmodule.exports = getNewDate;","'use strict';\n\nvar LOCALE_ARRAY_FIELDS = require('../var/LOCALE_ARRAY_FIELDS'),\n ISODefaults = require('../var/ISODefaults'),\n CoreParsingTokens = require('../var/CoreParsingTokens'),\n CoreParsingFormats = require('../var/CoreParsingFormats'),\n LocalizedParsingTokens = require('../var/LocalizedParsingTokens'),\n map = require('../../common/internal/map'),\n filter = require('../../common/internal/filter'),\n forEach = require('../../common/internal/forEach'),\n isDefined = require('../../common/internal/isDefined'),\n commaSplit = require('../../common/internal/commaSplit'),\n classChecks = require('../../common/var/classChecks'),\n mathAliases = require('../../common/var/mathAliases'),\n isUndefined = require('../../common/internal/isUndefined'),\n simpleMerge = require('../../common/internal/simpleMerge'),\n getOrdinalSuffix = require('../../common/internal/getOrdinalSuffix'),\n getArrayWithOffset = require('./getArrayWithOffset'),\n getRegNonCapturing = require('./getRegNonCapturing'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases'),\n iterateOverDateUnits = require('./iterateOverDateUnits'),\n arrayToRegAlternates = require('./arrayToRegAlternates'),\n fullwidthNumberHelpers = require('../../common/var/fullwidthNumberHelpers'),\n getAdjustedUnitForNumber = require('./getAdjustedUnitForNumber'),\n getParsingTokenWithSuffix = require('./getParsingTokenWithSuffix');\n\nvar hasOwn = coreUtilityAliases.hasOwn,\n getOwn = coreUtilityAliases.getOwn,\n forEachProperty = coreUtilityAliases.forEachProperty,\n fullWidthNumberMap = fullwidthNumberHelpers.fullWidthNumberMap,\n fullWidthNumbers = fullwidthNumberHelpers.fullWidthNumbers,\n pow = mathAliases.pow,\n max = mathAliases.max,\n ISO_FIRST_DAY_OF_WEEK = ISODefaults.ISO_FIRST_DAY_OF_WEEK,\n ISO_FIRST_DAY_OF_WEEK_YEAR = ISODefaults.ISO_FIRST_DAY_OF_WEEK_YEAR,\n isString = classChecks.isString,\n isFunction = classChecks.isFunction;\n\nfunction getNewLocale(def) {\n\n function Locale(def) {\n this.init(def);\n }\n\n Locale.prototype = {\n\n getMonthName: function(n, alternate) {\n if (this.monthSuffix) {\n return (n + 1) + this.monthSuffix;\n }\n return getArrayWithOffset(this.months, n, alternate, 12);\n },\n\n getWeekdayName: function(n, alternate) {\n return getArrayWithOffset(this.weekdays, n, alternate, 7);\n },\n\n // TODO: rename to parse in next major version\n parseValue: function(str, param) {\n var map = this[param + 'Map'];\n if (hasOwn(map, str)) {\n return map[str];\n }\n return this.parseNumber(str, param);\n },\n\n // TODO: analyze performance of parsing first vs checking\n // numeralMap first.\n parseNumber: function(str, param) {\n var val;\n\n // Simple numerals such as \"one\" are mapped directly in\n // the numeral map so catch up front if there is a match.\n if (hasOwn(this.numeralMap, str)) {\n val = this.numeralMap[str];\n }\n\n // TODO: perf test isNaN vs other methods\n if (isNaN(val)) {\n val = this.parseRegularNumerals(str);\n }\n\n if (isNaN(val)) {\n val = this.parseIrregularNumerals(str);\n }\n\n if (param === 'month') {\n // Months are the only numeric date field\n // whose value is not the same as its number.\n val -= 1;\n }\n\n return val;\n },\n\n // TODO: perf test returning up front if no regular decimals exist\n parseRegularNumerals: function(str) {\n // Allow decimals as commas and the minus-sign as per ISO-8601.\n str = str.replace(/^−/, '-').replace(/,/, '.');\n\n // The unary plus operator here shows better performance and handles\n // every format that parseFloat does with the exception of trailing\n // characters, which are guaranteed not to be in our string at this point.\n return +str;\n },\n\n parseIrregularNumerals: function(str) {\n var place = 1, num = 0, lastWasPlace, isPlace, numeral, digit, arr;\n\n // Note that \"numerals\" that need to be converted through this method are\n // all considered to be single characters in order to handle CJK. This\n // method is by no means unique to CJK, but the complexity of handling\n // inflections in non-CJK languages adds too much overhead for not enough\n // value, so avoiding for now.\n arr = str.split('');\n for (var i = arr.length - 1; numeral = arr[i]; i--) {\n digit = getOwn(this.numeralMap, numeral);\n if (isUndefined(digit)) {\n digit = getOwn(fullWidthNumberMap, numeral) || 0;\n }\n isPlace = digit > 0 && digit % 10 === 0;\n if (isPlace) {\n if (lastWasPlace) {\n num += place;\n }\n if (i) {\n place = digit;\n } else {\n num += digit;\n }\n } else {\n num += digit * place;\n place *= 10;\n }\n lastWasPlace = isPlace;\n }\n return num;\n },\n\n getOrdinal: function(n) {\n var suffix = this.ordinalSuffix;\n return suffix || getOrdinalSuffix(n);\n },\n\n getRelativeFormat: function(adu, type) {\n return this.convertAdjustedToFormat(adu, type);\n },\n\n getDuration: function(ms) {\n return this.convertAdjustedToFormat(getAdjustedUnitForNumber(max(0, ms)), 'duration');\n },\n\n getFirstDayOfWeek: function() {\n var val = this.firstDayOfWeek;\n return isDefined(val) ? val : ISO_FIRST_DAY_OF_WEEK;\n },\n\n getFirstDayOfWeekYear: function() {\n return this.firstDayOfWeekYear || ISO_FIRST_DAY_OF_WEEK_YEAR;\n },\n\n convertAdjustedToFormat: function(adu, type) {\n var sign, unit, mult,\n num = adu[0],\n u = adu[1],\n ms = adu[2],\n format = this[type] || this.relative;\n if (isFunction(format)) {\n return format.call(this, num, u, ms, type);\n }\n mult = !this.plural || num === 1 ? 0 : 1;\n unit = this.units[mult * 8 + u] || this.units[u];\n sign = this[ms > 0 ? 'fromNow' : 'ago'];\n return format.replace(/\\{(.*?)\\}/g, function(full, match) {\n switch(match) {\n case 'num': return num;\n case 'unit': return unit;\n case 'sign': return sign;\n }\n });\n },\n\n cacheFormat: function(dif, i) {\n this.compiledFormats.splice(i, 1);\n this.compiledFormats.unshift(dif);\n },\n\n addFormat: function(format) {\n var loc = this, src, to;\n\n function getTokenSrc(token) {\n var suffix, src, tmp,\n opt = token.match(/\\?$/),\n nc = token.match(/^(\\d+)\\??$/),\n slice = token.match(/(\\d)(?:-(\\d))?/),\n param = token.replace(/[^a-z]+$/i, '');\n\n // Allowing alias tokens such as {time}\n if (tmp = getOwn(loc.parsingAliases, param)) {\n src = formatToSrc(tmp);\n if (opt) {\n src = getRegNonCapturing(src, true);\n }\n return src;\n }\n\n if (nc) {\n src = loc.tokens[nc[1]];\n } else if (tmp = getOwn(CoreParsingTokens, param)) {\n src = tmp.src;\n param = tmp.param || param;\n } else {\n tmp = getOwn(loc.parsingTokens, param) || getOwn(loc, param);\n\n // Both the \"months\" array and the \"month\" parsing token can be accessed\n // by either {month} or {months}, falling back as necessary, however\n // regardless of whether or not a fallback occurs, the final field to\n // be passed to addRawFormat must be normalized as singular.\n param = param.replace(/s$/, '');\n\n if (!tmp) {\n tmp = getOwn(loc.parsingTokens, param) || getOwn(loc, param + 's');\n }\n\n if (isString(tmp)) {\n src = tmp;\n suffix = loc[param + 'Suffix'];\n } else {\n\n // This is a hack to temporarily disallow parsing of single character\n // weekdays until the format can be changed to allow for this.\n if (param === 'weekday' && loc.code === 'ko') {\n tmp = filter(tmp, function(str) {\n return str.length > 1;\n });\n }\n\n if (slice) {\n tmp = filter(tmp, function(m, i) {\n var mod = i % (loc.units ? 8 : tmp.length);\n return mod >= slice[1] && mod <= (slice[2] || slice[1]);\n });\n }\n src = arrayToRegAlternates(tmp);\n }\n }\n if (!src) {\n return '';\n }\n if (nc) {\n // Non-capturing tokens like {0}\n src = getRegNonCapturing(src);\n } else {\n // Capturing group and add to parsed tokens\n to.push(param);\n src = '(' + src + ')';\n }\n if (suffix) {\n // Date/time suffixes such as those in CJK\n src = getParsingTokenWithSuffix(param, src, suffix);\n }\n if (opt) {\n src += '?';\n }\n return src;\n }\n\n function formatToSrc(str) {\n\n // Make spaces optional\n str = str.replace(/ /g, ' ?');\n\n str = str.replace(/\\{([^,]+?)\\}/g, function(match, token) {\n var tokens = token.split('|');\n if (tokens.length > 1) {\n return getRegNonCapturing(map(tokens, getTokenSrc).join('|'));\n } else {\n return getTokenSrc(token);\n }\n });\n\n return str;\n }\n\n function parseInputFormat() {\n to = [];\n src = formatToSrc(format);\n }\n\n parseInputFormat();\n loc.addRawFormat(src, to);\n },\n\n addRawFormat: function(format, to) {\n this.compiledFormats.unshift({\n reg: RegExp('^ *' + format + ' *$', 'i'),\n to: to\n });\n },\n\n init: function(def) {\n var loc = this;\n\n // -- Initialization helpers\n\n function initFormats() {\n loc.compiledFormats = [];\n loc.parsingAliases = {};\n loc.parsingTokens = {};\n }\n\n function initDefinition() {\n simpleMerge(loc, def);\n }\n\n function initArrayFields() {\n forEach(LOCALE_ARRAY_FIELDS, function(name) {\n var val = loc[name];\n if (isString(val)) {\n loc[name] = commaSplit(val);\n } else if (!val) {\n loc[name] = [];\n }\n });\n }\n\n // -- Value array build helpers\n\n function buildValueArray(name, mod, map, fn) {\n var field = name, all = [], setMap;\n if (!loc[field]) {\n field += 's';\n }\n if (!map) {\n map = {};\n setMap = true;\n }\n forAllAlternates(field, function(alt, j, i) {\n var idx = j * mod + i, val;\n val = fn ? fn(i) : i;\n map[alt] = val;\n map[alt.toLowerCase()] = val;\n all[idx] = alt;\n });\n loc[field] = all;\n if (setMap) {\n loc[name + 'Map'] = map;\n }\n }\n\n function forAllAlternates(field, fn) {\n forEach(loc[field], function(str, i) {\n forEachAlternate(str, function(alt, j) {\n fn(alt, j, i);\n });\n });\n }\n\n function forEachAlternate(str, fn) {\n var arr = map(str.split('+'), function(split) {\n return split.replace(/(.+):(.+)$/, function(full, base, suffixes) {\n return map(suffixes.split('|'), function(suffix) {\n return base + suffix;\n }).join('|');\n });\n }).join('|');\n forEach(arr.split('|'), fn);\n }\n\n function buildNumerals() {\n var map = {};\n buildValueArray('numeral', 10, map);\n buildValueArray('article', 1, map, function() {\n return 1;\n });\n buildValueArray('placeholder', 4, map, function(n) {\n return pow(10, n + 1);\n });\n loc.numeralMap = map;\n }\n\n function buildTimeFormats() {\n loc.parsingAliases['time'] = getTimeFormat();\n loc.parsingAliases['tzOffset'] = getTZOffsetFormat();\n }\n\n function getTimeFormat(standalone) {\n var src, sep;\n sep = getTimeSeparatorSrc(standalone);\n if (loc.ampmFront) {\n // \"ampmFront\" exists mostly for CJK locales, which also presume that\n // time suffixes exist, allowing this to be a simpler regex.\n src = '{ampm?} {hour} (?:{minute} (?::?{second})?)?';\n } else if(loc.ampm.length) {\n src = '{hour}(?:'+sep+'{minute?}(?:'+sep+'{second?})? {ampm?}| {ampm})';\n } else {\n src = '{hour}(?:'+sep+'{minute?}(?:'+sep+'{second?})?)';\n }\n return src;\n }\n\n function getTimeSeparatorSrc() {\n if (loc.timeSeparator) {\n return '[:' + loc.timeSeparator + ']';\n } else {\n return ':';\n }\n }\n\n function getTZOffsetFormat() {\n return '(?:{Z}|{GMT?}(?:{tzHour}(?::?{tzMinute}(?: \\\\([\\\\w\\\\s]+\\\\))?)?)?)?';\n }\n\n function buildParsingTokens() {\n forEachProperty(LocalizedParsingTokens, function(token, name) {\n var src = token.base ? getCoreTokensForBase(token.base) : token.src, arr;\n if (token.requiresNumerals || loc.numeralUnits) {\n src += getNumeralSrc();\n }\n arr = loc[name + 's'];\n if (arr && arr.length) {\n src += '|' + arrayToRegAlternates(arr);\n }\n loc.parsingTokens[name] = src;\n });\n }\n\n function getCoreTokensForBase(base) {\n return map(base.split('|'), function(key) {\n return CoreParsingTokens[key].src;\n }).join('|');\n }\n\n function getNumeralSrc() {\n var all, src = '';\n all = loc.numerals.concat(loc.placeholders).concat(loc.articles);\n if (loc.allowsFullWidth) {\n all = all.concat(fullWidthNumbers.split(''));\n }\n if (all.length) {\n src = '|(?:' + arrayToRegAlternates(all) + ')+';\n }\n return src;\n }\n\n function buildTimeSuffixes() {\n iterateOverDateUnits(function(unit, i) {\n var token = loc.timeSuffixes[i];\n if (token) {\n loc[(unit.alias || unit.name) + 'Suffix'] = token;\n }\n });\n }\n\n function buildModifiers() {\n forEach(loc.modifiers, function(modifier) {\n var name = modifier.name, mapKey = name + 'Map', map;\n map = loc[mapKey] || {};\n forEachAlternate(modifier.src, function(alt, j) {\n var token = getOwn(loc.parsingTokens, name), val = modifier.value;\n map[alt] = val;\n loc.parsingTokens[name] = token ? token + '|' + alt : alt;\n if (modifier.name === 'sign' && j === 0) {\n // Hooking in here to set the first \"fromNow\" or \"ago\" modifier\n // directly on the locale, so that it can be reused in the\n // relative format.\n loc[val === 1 ? 'fromNow' : 'ago'] = alt;\n }\n });\n loc[mapKey] = map;\n });\n }\n\n // -- Format adding helpers\n\n function addCoreFormats() {\n forEach(CoreParsingFormats, function(df) {\n var src = df.src;\n if (df.localeCheck && !df.localeCheck(loc)) {\n return;\n }\n if (df.mdy && loc.mdy) {\n // Use the mm/dd/yyyy variant if it\n // exists and the locale requires it\n src = df.mdy;\n }\n if (df.time) {\n // Core formats that allow time require the time\n // reg on both sides, so add both versions here.\n loc.addFormat(getFormatWithTime(src, true));\n loc.addFormat(getFormatWithTime(src));\n } else {\n loc.addFormat(src);\n }\n });\n loc.addFormat('{time}');\n }\n\n function addLocaleFormats() {\n addFormatSet('parse');\n addFormatSet('timeParse', true);\n addFormatSet('timeFrontParse', true, true);\n }\n\n function addFormatSet(field, allowTime, timeFront) {\n forEach(loc[field], function(format) {\n if (allowTime) {\n format = getFormatWithTime(format, timeFront);\n }\n loc.addFormat(format);\n });\n }\n\n function getFormatWithTime(baseFormat, timeBefore) {\n if (timeBefore) {\n return getTimeBefore() + baseFormat;\n }\n return baseFormat + getTimeAfter();\n }\n\n function getTimeBefore() {\n return getRegNonCapturing('{time}[,\\\\s\\\\u3000]', true);\n }\n\n function getTimeAfter() {\n var markers = ',?[\\\\s\\\\u3000]', localized;\n localized = arrayToRegAlternates(loc.timeMarkers);\n if (localized) {\n markers += '| (?:' + localized + ') ';\n }\n markers = getRegNonCapturing(markers, loc.timeMarkerOptional);\n return getRegNonCapturing(markers + '{time}{tzOffset}', true);\n }\n\n initFormats();\n initDefinition();\n initArrayFields();\n\n buildValueArray('month', 12);\n buildValueArray('weekday', 7);\n buildValueArray('unit', 8);\n buildValueArray('ampm', 2);\n\n buildNumerals();\n buildTimeFormats();\n buildParsingTokens();\n buildTimeSuffixes();\n buildModifiers();\n\n // The order of these formats is important. Order is reversed so formats\n // that are initialized later will take precedence. Generally, this means\n // that more specific formats should come later.\n addCoreFormats();\n addLocaleFormats();\n\n }\n\n };\n\n return new Locale(def);\n}\n\nmodule.exports = getNewLocale;","'use strict';\n\nvar LocalizedParsingTokens = require('../var/LocalizedParsingTokens'),\n getRegNonCapturing = require('./getRegNonCapturing');\n\nfunction getParsingTokenWithSuffix(field, src, suffix) {\n var token = LocalizedParsingTokens[field];\n if (token.requiresSuffix) {\n src = getRegNonCapturing(src + getRegNonCapturing(suffix));\n } else if (token.requiresSuffixOr) {\n src += getRegNonCapturing(token.requiresSuffixOr + '|' + suffix);\n } else {\n src += getRegNonCapturing(suffix, true);\n }\n return src;\n}\n\nmodule.exports = getParsingTokenWithSuffix;","'use strict';\n\nfunction getRegNonCapturing(src, opt) {\n if (src.length > 1) {\n src = '(?:' + src + ')';\n }\n if (opt) {\n src += '?';\n }\n return src;\n}\n\nmodule.exports = getRegNonCapturing;","'use strict';\n\nvar trunc = require('../../common/var/trunc'),\n cloneDate = require('./cloneDate'),\n advanceDate = require('./advanceDate');\n\nfunction getTimeDistanceForUnit(d1, d2, unit) {\n var fwd = d2 > d1, num, tmp;\n if (!fwd) {\n tmp = d2;\n d2 = d1;\n d1 = tmp;\n }\n num = d2 - d1;\n if (unit.multiplier > 1) {\n num = trunc(num / unit.multiplier);\n }\n // For higher order with potential ambiguity, use the numeric calculation\n // as a starting point, then iterate until we pass the target date. Decrement\n // starting point by 1 to prevent overshooting the date due to inconsistencies\n // in ambiguous units numerically. For example, calculating the number of days\n // from the beginning of the year to August 5th at 11:59:59 by doing a simple\n // d2 - d1 will produce different results depending on whether or not a\n // timezone shift was encountered due to DST, however that should not have an\n // effect on our calculation here, so subtract by 1 to ensure that the\n // starting point has not already overshot our target date.\n if (unit.ambiguous) {\n d1 = cloneDate(d1);\n if (num) {\n num -= 1;\n advanceDate(d1, unit.name, num);\n }\n while (d1 < d2) {\n advanceDate(d1, unit.name, 1);\n if (d1 > d2) {\n break;\n }\n num += 1;\n }\n }\n return fwd ? -num : num;\n}\n\nmodule.exports = getTimeDistanceForUnit;","'use strict';\n\nvar _utc = require('../../common/var/_utc'),\n trunc = require('../../common/var/trunc'),\n tzOffset = require('./tzOffset'),\n padNumber = require('../../common/internal/padNumber'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar abs = mathAliases.abs;\n\nfunction getUTCOffset(d, iso) {\n var offset = _utc(d) ? 0 : tzOffset(d), hours, mins, colon;\n colon = iso === true ? ':' : '';\n if (!offset && iso) return 'Z';\n hours = padNumber(trunc(-offset / 60), 2, true);\n mins = padNumber(abs(offset % 60), 2);\n return hours + colon + mins;\n}\n\nmodule.exports = getUTCOffset;","'use strict';\n\nvar iterateOverDateParams = require('./iterateOverDateParams');\n\nfunction getUnitIndexForParamName(name) {\n var params = {}, unitIndex;\n params[name] = 1;\n iterateOverDateParams(params, function(name, val, unit, i) {\n unitIndex = i;\n return false;\n });\n return unitIndex;\n}\n\nmodule.exports = getUnitIndexForParamName;","'use strict';\n\nvar ISODefaults = require('../var/ISODefaults'),\n setDate = require('./setDate'),\n getDate = require('./getDate'),\n cloneDate = require('./cloneDate'),\n isUndefined = require('../../common/internal/isUndefined'),\n moveToEndOfWeek = require('./moveToEndOfWeek'),\n moveToBeginningOfWeek = require('./moveToBeginningOfWeek'),\n moveToFirstDayOfWeekYear = require('./moveToFirstDayOfWeekYear');\n\nvar ISO_FIRST_DAY_OF_WEEK = ISODefaults.ISO_FIRST_DAY_OF_WEEK,\n ISO_FIRST_DAY_OF_WEEK_YEAR = ISODefaults.ISO_FIRST_DAY_OF_WEEK_YEAR;\n\nfunction getWeekNumber(d, allowPrevious, firstDayOfWeek, firstDayOfWeekYear) {\n var isoWeek, n = 0;\n if (isUndefined(firstDayOfWeek)) {\n firstDayOfWeek = ISO_FIRST_DAY_OF_WEEK;\n }\n if (isUndefined(firstDayOfWeekYear)) {\n firstDayOfWeekYear = ISO_FIRST_DAY_OF_WEEK_YEAR;\n }\n // Moving to the end of the week allows for forward year traversal, ie\n // Dec 29 2014 is actually week 01 of 2015.\n isoWeek = moveToEndOfWeek(cloneDate(d), firstDayOfWeek);\n moveToFirstDayOfWeekYear(isoWeek, firstDayOfWeek, firstDayOfWeekYear);\n if (allowPrevious && d < isoWeek) {\n // If the date is still before the start of the year, then it should be\n // the last week of the previous year, ie Jan 1 2016 is actually week 53\n // of 2015, so move to the beginning of the week to traverse the year.\n isoWeek = moveToBeginningOfWeek(cloneDate(d), firstDayOfWeek);\n moveToFirstDayOfWeekYear(isoWeek, firstDayOfWeek, firstDayOfWeekYear);\n }\n while (isoWeek <= d) {\n // Doing a very simple walk to get the week number.\n setDate(isoWeek, getDate(isoWeek) + 7);\n n++;\n }\n return n;\n}\n\nmodule.exports = getWeekNumber;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n getWeekNumber = require('./getWeekNumber');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nfunction getWeekYear(d, localeCode, iso) {\n var year, month, firstDayOfWeek, firstDayOfWeekYear, week, loc;\n year = getYear(d);\n month = getMonth(d);\n if (month === 0 || month === 11) {\n if (!iso) {\n loc = localeManager.get(localeCode);\n firstDayOfWeek = loc.getFirstDayOfWeek(localeCode);\n firstDayOfWeekYear = loc.getFirstDayOfWeekYear(localeCode);\n }\n week = getWeekNumber(d, false, firstDayOfWeek, firstDayOfWeekYear);\n if (month === 0 && week === 0) {\n year -= 1;\n } else if (month === 11 && week === 1) {\n year += 1;\n }\n }\n return year;\n}\n\nmodule.exports = getWeekYear;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getWeekday(d) {\n return callDateGet(d, 'Day');\n}\n\nmodule.exports = getWeekday;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getYear(d) {\n return callDateGet(d, 'FullYear');\n}\n\nmodule.exports = getYear;","'use strict';\n\nvar getYear = require('./getYear'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar abs = mathAliases.abs;\n\nfunction getYearFromAbbreviation(str, d, prefer) {\n // Following IETF here, adding 1900 or 2000 depending on the last two digits.\n // Note that this makes no accordance for what should happen after 2050, but\n // intentionally ignoring this for now. https://www.ietf.org/rfc/rfc2822.txt\n var val = +str, delta;\n val += val < 50 ? 2000 : 1900;\n if (prefer) {\n delta = val - getYear(d);\n if (delta / abs(delta) !== prefer) {\n val += prefer * 100;\n }\n }\n return val;\n}\n\nmodule.exports = getYearFromAbbreviation;","'use strict';\n\nvar _utc = require('../../common/var/_utc'),\n tzOffset = require('./tzOffset');\n\nfunction isUTC(d) {\n return !!_utc(d) || tzOffset(d) === 0;\n}\n\nmodule.exports = isUTC;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n isDefined = require('../../common/internal/isDefined'),\n getDateParam = require('./getDateParam'),\n iterateOverDateUnits = require('./iterateOverDateUnits');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nfunction iterateOverDateParams(params, fn, startIndex, endIndex) {\n\n function run(name, unit, i) {\n var val = getDateParam(params, name);\n if (isDefined(val)) {\n fn(name, val, unit, i);\n }\n }\n\n iterateOverDateUnits(function (unit, i) {\n var result = run(unit.name, unit, i);\n if (result !== false && i === DAY_INDEX) {\n // Check for \"weekday\", which has a distinct meaning\n // in the context of setting a date, but has the same\n // meaning as \"day\" as a unit of time.\n result = run('weekday', unit, i);\n }\n return result;\n }, startIndex, endIndex);\n\n}\n\nmodule.exports = iterateOverDateParams;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n isUndefined = require('../../common/internal/isUndefined');\n\nvar YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction iterateOverDateUnits(fn, startIndex, endIndex) {\n endIndex = endIndex || 0;\n if (isUndefined(startIndex)) {\n startIndex = YEAR_INDEX;\n }\n for (var index = startIndex; index >= endIndex; index--) {\n if (fn(DateUnits[index], index) === false) {\n break;\n }\n }\n}\n\nmodule.exports = iterateOverDateUnits;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n iterateOverDateParams = require('./iterateOverDateParams');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction iterateOverHigherDateParams(params, fn) {\n iterateOverDateParams(params, fn, YEAR_INDEX, DAY_INDEX);\n}\n\nmodule.exports = iterateOverHigherDateParams;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n getLowerUnitIndex = require('./getLowerUnitIndex'),\n moveToBeginningOfWeek = require('./moveToBeginningOfWeek'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nvar WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n localeManager = LocaleHelpers.localeManager;\n\nfunction moveToBeginningOfUnit(d, unitIndex, localeCode) {\n if (unitIndex === WEEK_INDEX) {\n moveToBeginningOfWeek(d, localeManager.get(localeCode).getFirstDayOfWeek());\n }\n return setUnitAndLowerToEdge(d, getLowerUnitIndex(unitIndex));\n}\n\nmodule.exports = moveToBeginningOfUnit;","'use strict';\n\nvar setWeekday = require('./setWeekday'),\n getWeekday = require('./getWeekday'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar floor = mathAliases.floor;\n\nfunction moveToBeginningOfWeek(d, firstDayOfWeek) {\n setWeekday(d, floor((getWeekday(d) - firstDayOfWeek) / 7) * 7 + firstDayOfWeek);\n return d;\n}\n\nmodule.exports = moveToBeginningOfWeek;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n moveToEndOfWeek = require('./moveToEndOfWeek'),\n getLowerUnitIndex = require('./getLowerUnitIndex'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nvar WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n localeManager = LocaleHelpers.localeManager;\n\nfunction moveToEndOfUnit(d, unitIndex, localeCode, stopIndex) {\n if (unitIndex === WEEK_INDEX) {\n moveToEndOfWeek(d, localeManager.get(localeCode).getFirstDayOfWeek());\n }\n return setUnitAndLowerToEdge(d, getLowerUnitIndex(unitIndex), stopIndex, true);\n}\n\nmodule.exports = moveToEndOfUnit;","'use strict';\n\nvar setWeekday = require('./setWeekday'),\n getWeekday = require('./getWeekday'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar ceil = mathAliases.ceil;\n\nfunction moveToEndOfWeek(d, firstDayOfWeek) {\n var target = firstDayOfWeek - 1;\n setWeekday(d, ceil((getWeekday(d) - target) / 7) * 7 + target);\n return d;\n}\n\nmodule.exports = moveToEndOfWeek;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n setDate = require('./setDate'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge'),\n moveToBeginningOfWeek = require('./moveToBeginningOfWeek');\n\nvar MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction moveToFirstDayOfWeekYear(d, firstDayOfWeek, firstDayOfWeekYear) {\n setUnitAndLowerToEdge(d, MONTH_INDEX);\n setDate(d, firstDayOfWeekYear);\n moveToBeginningOfWeek(d, firstDayOfWeek);\n}\n\nmodule.exports = moveToFirstDayOfWeekYear;","'use strict';\n\nvar getLowerUnitIndex = require('./getLowerUnitIndex'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nfunction resetLowerUnits(d, unitIndex) {\n return setUnitAndLowerToEdge(d, getLowerUnitIndex(unitIndex));\n}\n\nmodule.exports = resetLowerUnits;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nvar HOURS_INDEX = DateUnitIndexes.HOURS_INDEX;\n\nfunction resetTime(d) {\n return setUnitAndLowerToEdge(d, HOURS_INDEX);\n}\n\nmodule.exports = resetTime;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet');\n\nfunction setDate(d, val) {\n callDateSet(d, 'Date', val);\n}\n\nmodule.exports = setDate;","'use strict';\n\nvar createDate = require('./createDate'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n setChainableConstructor = require('../../common/internal/setChainableConstructor');\n\nvar sugarDate = namespaceAliases.sugarDate;\n\nfunction setDateChainableConstructor() {\n setChainableConstructor(sugarDate, createDate);\n}\n\nmodule.exports = setDateChainableConstructor;","'use strict';\n\nvar ISODefaults = require('../var/ISODefaults'),\n getDate = require('./getDate'),\n setDate = require('./setDate'),\n setYear = require('./setYear'),\n getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n setMonth = require('./setMonth'),\n cloneDate = require('./cloneDate'),\n getWeekday = require('./getWeekday'),\n setWeekday = require('./setWeekday'),\n classChecks = require('../../common/var/classChecks'),\n moveToFirstDayOfWeekYear = require('./moveToFirstDayOfWeekYear');\n\nvar isNumber = classChecks.isNumber,\n ISO_FIRST_DAY_OF_WEEK = ISODefaults.ISO_FIRST_DAY_OF_WEEK,\n ISO_FIRST_DAY_OF_WEEK_YEAR = ISODefaults.ISO_FIRST_DAY_OF_WEEK_YEAR;\n\nfunction setISOWeekNumber(d, num) {\n if (isNumber(num)) {\n // Intentionally avoiding updateDate here to prevent circular dependencies.\n var isoWeek = cloneDate(d), dow = getWeekday(d);\n moveToFirstDayOfWeekYear(isoWeek, ISO_FIRST_DAY_OF_WEEK, ISO_FIRST_DAY_OF_WEEK_YEAR);\n setDate(isoWeek, getDate(isoWeek) + 7 * (num - 1));\n setYear(d, getYear(isoWeek));\n setMonth(d, getMonth(isoWeek));\n setDate(d, getDate(isoWeek));\n setWeekday(d, dow || 7);\n }\n return d.getTime();\n}\n\nmodule.exports = setISOWeekNumber;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet');\n\nfunction setMonth(d, val) {\n callDateSet(d, 'Month', val);\n}\n\nmodule.exports = setMonth;","'use strict';\n\nvar isDefined = require('../../common/internal/isDefined'),\n classChecks = require('../../common/var/classChecks'),\n callDateSet = require('../../common/internal/callDateSet'),\n walkUnitDown = require('./walkUnitDown');\n\nvar isFunction = classChecks.isFunction;\n\nfunction setUnitAndLowerToEdge(d, startIndex, stopIndex, end) {\n walkUnitDown(startIndex, function(unit, i) {\n var val = end ? unit.end : unit.start;\n if (isFunction(val)) {\n val = val(d);\n }\n callDateSet(d, unit.method, val);\n return !isDefined(stopIndex) || i > stopIndex;\n });\n return d;\n}\n\nmodule.exports = setUnitAndLowerToEdge;","'use strict';\n\nvar setDate = require('./setDate'),\n getDate = require('./getDate'),\n getWeekday = require('./getWeekday'),\n classChecks = require('../../common/var/classChecks'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar isNumber = classChecks.isNumber,\n abs = mathAliases.abs;\n\nfunction setWeekday(d, dow, dir) {\n if (!isNumber(dow)) return;\n var currentWeekday = getWeekday(d);\n if (dir) {\n // Allow a \"direction\" parameter to determine whether a weekday can\n // be set beyond the current weekday in either direction.\n var ndir = dir > 0 ? 1 : -1;\n var offset = dow % 7 - currentWeekday;\n if (offset && offset / abs(offset) !== ndir) {\n dow += 7 * ndir;\n }\n }\n setDate(d, getDate(d) + dow - currentWeekday);\n return d.getTime();\n}\n\nmodule.exports = setWeekday;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet');\n\nfunction setYear(d, val) {\n callDateSet(d, 'FullYear', val);\n}\n\nmodule.exports = setYear;","'use strict';\n\nfunction tzOffset(d) {\n return d.getTimezoneOffset();\n}\n\nmodule.exports = tzOffset;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n trunc = require('../../common/var/trunc'),\n setDate = require('./setDate'),\n getDate = require('./getDate'),\n getMonth = require('./getMonth'),\n getNewDate = require('./getNewDate'),\n setWeekday = require('./setWeekday'),\n mathAliases = require('../../common/var/mathAliases'),\n callDateGet = require('../../common/internal/callDateGet'),\n classChecks = require('../../common/var/classChecks'),\n resetLowerUnits = require('./resetLowerUnits'),\n getLowerUnitIndex = require('./getLowerUnitIndex'),\n getHigherUnitIndex = require('./getHigherUnitIndex'),\n callDateSetWithWeek = require('./callDateSetWithWeek'),\n iterateOverDateParams = require('./iterateOverDateParams');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX,\n YEAR_INDEX = DateUnitIndexes.YEAR_INDEX,\n round = mathAliases.round,\n isNumber = classChecks.isNumber;\n\nfunction updateDate(d, params, reset, advance, prefer, weekdayDir, contextDate) {\n var upperUnitIndex;\n\n function setUpperUnit(unitName, unitIndex) {\n if (prefer && !upperUnitIndex) {\n if (unitName === 'weekday') {\n upperUnitIndex = WEEK_INDEX;\n } else {\n upperUnitIndex = getHigherUnitIndex(unitIndex);\n }\n }\n }\n\n function setSpecificity(unitIndex) {\n // Other functions may preemptively set the specificity before arriving\n // here so concede to them if they have already set more specific units.\n if (unitIndex > params.specificity) {\n return;\n }\n params.specificity = unitIndex;\n }\n\n function canDisambiguate() {\n if (!upperUnitIndex || upperUnitIndex > YEAR_INDEX) {\n return;\n }\n\n switch(prefer) {\n case -1: return d >= (contextDate || getNewDate());\n case 1: return d <= (contextDate || getNewDate());\n }\n }\n\n function disambiguateHigherUnit() {\n var unit = DateUnits[upperUnitIndex];\n advance = prefer;\n setUnit(unit.name, 1, unit, upperUnitIndex);\n }\n\n function handleFraction(unit, unitIndex, fraction) {\n if (unitIndex) {\n var lowerUnit = DateUnits[getLowerUnitIndex(unitIndex)];\n var val = round(unit.multiplier / lowerUnit.multiplier * fraction);\n params[lowerUnit.name] = val;\n }\n }\n\n function monthHasShifted(d, targetMonth) {\n if (targetMonth < 0) {\n targetMonth = targetMonth % 12 + 12;\n }\n return targetMonth % 12 !== getMonth(d);\n }\n\n function setUnit(unitName, value, unit, unitIndex) {\n var method = unit.method, checkMonth, fraction;\n\n setUpperUnit(unitName, unitIndex);\n setSpecificity(unitIndex);\n\n fraction = value % 1;\n if (fraction) {\n handleFraction(unit, unitIndex, fraction);\n value = trunc(value);\n }\n\n if (unitName === 'weekday') {\n if (!advance) {\n // Weekdays are always considered absolute units so simply set them\n // here even if it is an \"advance\" operation. This is to help avoid\n // ambiguous meanings in \"advance\" as well as to neatly allow formats\n // like \"Wednesday of next week\" without more complex logic.\n setWeekday(d, value, weekdayDir);\n }\n return;\n }\n checkMonth = unitIndex === MONTH_INDEX && getDate(d) > 28;\n\n // If we are advancing or rewinding, then we need we need to set the\n // absolute time if the unit is \"hours\" or less. This is due to the fact\n // that setting by method is ambiguous during DST shifts. For example,\n // 1:00am on November 1st 2015 occurs twice in North American timezones\n // with DST, the second time being after the clocks are rolled back at\n // 2:00am. When springing forward this is automatically handled as there\n // is no 2:00am so the date automatically jumps to 3:00am. However, when\n // rolling back, setHours(2) will always choose the first \"2am\" even if\n // the date is currently set to the second, causing unintended jumps.\n // This ambiguity is unavoidable when setting dates as the notation is\n // ambiguous. However when advancing, we clearly want the resulting date\n // to be an acutal hour ahead, which can only be accomplished by setting\n // the absolute time. Conversely, any unit higher than \"hours\" MUST use\n // the internal set methods, as they are ambiguous as absolute units of\n // time. Years may be 365 or 366 days depending on leap years, months are\n // all over the place, and even days may be 23-25 hours depending on DST\n // shifts. Finally, note that the kind of jumping described above will\n // occur when calling ANY \"set\" method on the date and will occur even if\n // the value being set is identical to the one currently set (i.e.\n // setHours(2) on a date at 2am may not be a noop). This is precarious,\n // so avoiding this situation in callDateSet by checking up front that\n // the value is not the same before setting.\n if (advance && !unit.ambiguous) {\n d.setTime(d.getTime() + (value * advance * unit.multiplier));\n return;\n } else if (advance) {\n if (unitIndex === WEEK_INDEX) {\n value *= 7;\n method = DateUnits[DAY_INDEX].method;\n }\n value = (value * advance) + callDateGet(d, method);\n }\n callDateSetWithWeek(d, method, value, advance);\n if (checkMonth && monthHasShifted(d, value)) {\n // As we are setting the units in reverse order, there is a chance that\n // our date may accidentally traverse into a new month, such as setting\n // { month: 1, date 15 } on January 31st. Check for this here and reset\n // the date to the last day of the previous month if this has happened.\n setDate(d, 0);\n }\n }\n\n if (isNumber(params) && advance) {\n // If param is a number and advancing, the number is in milliseconds.\n params = { millisecond: params };\n } else if (isNumber(params)) {\n // Otherwise just set the timestamp and return.\n d.setTime(params);\n return d;\n }\n\n iterateOverDateParams(params, setUnit);\n\n if (reset && params.specificity) {\n resetLowerUnits(d, params.specificity);\n }\n\n // If past or future is preferred, then the process of \"disambiguation\" will\n // ensure that an ambiguous time/date (\"4pm\", \"thursday\", \"June\", etc.) will\n // be in the past or future. Weeks are only considered ambiguous if there is\n // a weekday, i.e. \"thursday\" is an ambiguous week, but \"the 4th\" is an\n // ambiguous month.\n if (canDisambiguate()) {\n disambiguateHigherUnit();\n }\n return d;\n}\n\nmodule.exports = updateDate;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n getLowerUnitIndex = require('./getLowerUnitIndex');\n\nfunction walkUnitDown(unitIndex, fn) {\n while (unitIndex >= 0) {\n if (fn(DateUnits[unitIndex], unitIndex) === false) {\n break;\n }\n unitIndex = getLowerUnitIndex(unitIndex);\n }\n}\n\nmodule.exports = walkUnitDown;","'use strict';\n\nvar Sugar = require('sugar-core'),\n fullCompareDate = require('./internal/fullCompareDate');\n\nSugar.Date.defineInstance({\n\n 'is': function(date, d, margin) {\n return fullCompareDate(date, d, margin);\n }\n\n});\n\nmodule.exports = Sugar.Date.is;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate');\n\nSugar.Date.defineInstance({\n\n 'isAfter': function(date, d, margin) {\n return date.getTime() > createDate(d).getTime() - (margin || 0);\n }\n\n});\n\nmodule.exports = Sugar.Date.isAfter;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate');\n\nSugar.Date.defineInstance({\n\n 'isBefore': function(date, d, margin) {\n return date.getTime() < createDate(d).getTime() + (margin || 0);\n }\n\n});\n\nmodule.exports = Sugar.Date.isBefore;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate'),\n mathAliases = require('../common/var/mathAliases');\n\nvar min = mathAliases.min,\n max = mathAliases.max;\n\nSugar.Date.defineInstance({\n\n 'isBetween': function(date, d1, d2, margin) {\n var t = date.getTime();\n var t1 = createDate(d1).getTime();\n var t2 = createDate(d2).getTime();\n var lo = min(t1, t2);\n var hi = max(t1, t2);\n margin = margin || 0;\n return (lo - margin <= t) && (hi + margin >= t);\n }\n\n});\n\nmodule.exports = Sugar.Date.isBetween;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isFriday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isFuture;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isLastMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isLastWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isLastYear;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getYear = require('./internal/getYear');\n\nSugar.Date.defineInstance({\n\n 'isLeapYear': function(date) {\n var year = getYear(date);\n return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);\n }\n\n});\n\nmodule.exports = Sugar.Date.isLeapYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isMonday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isNextMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isNextWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isNextYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isPast;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isSaturday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isSunday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isThisMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isThisWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isThisYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isThursday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isToday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isTomorrow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isTuesday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n isUTC = require('./internal/isUTC');\n\nSugar.Date.defineInstance({\n\n 'isUTC': function(date) {\n return isUTC(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.isUTC;","'use strict';\n\nvar Sugar = require('sugar-core'),\n dateIsValid = require('./internal/dateIsValid');\n\nSugar.Date.defineInstance({\n\n 'isValid': function(date) {\n return dateIsValid(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.isValid;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isWednesday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isWeekday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isWeekend;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isYesterday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nSugar.Date.defineInstance({\n\n 'iso': function(date) {\n return date.toISOString();\n }\n\n});\n\nmodule.exports = Sugar.Date.iso;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsUntil;","'use strict';\n\nvar Sugar = require('sugar-core'),\n DateRangeConstructor = require('../range/var/DateRangeConstructor');\n\nSugar.Date.defineStatic({\n\n 'range': DateRangeConstructor\n\n});\n\nmodule.exports = Sugar.Date.range;","'use strict';\n\nvar Sugar = require('sugar-core'),\n dateRelative = require('./internal/dateRelative');\n\nSugar.Date.defineInstance({\n\n 'relative': function(date, localeCode, relativeFn) {\n return dateRelative(date, null, localeCode, relativeFn);\n }\n\n});\n\nmodule.exports = Sugar.Date.relative;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate'),\n dateRelative = require('./internal/dateRelative');\n\nSugar.Date.defineInstance({\n\n 'relativeTo': function(date, d, localeCode) {\n return dateRelative(date, createDate(d), localeCode);\n }\n\n});\n\nmodule.exports = Sugar.Date.relativeTo;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'removeLocale': function(code) {\n return localeManager.remove(code);\n }\n\n});\n\nmodule.exports = Sugar.Date.removeLocale;","'use strict';\n\nvar Sugar = require('sugar-core'),\n DateUnitIndexes = require('./var/DateUnitIndexes'),\n moveToBeginningOfUnit = require('./internal/moveToBeginningOfUnit'),\n getUnitIndexForParamName = require('./internal/getUnitIndexForParamName');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nSugar.Date.defineInstance({\n\n 'reset': function(date, unit, localeCode) {\n var unitIndex = unit ? getUnitIndexForParamName(unit) : DAY_INDEX;\n moveToBeginningOfUnit(date, unitIndex, localeCode);\n return date;\n }\n\n});\n\nmodule.exports = Sugar.Date.reset;","'use strict';\n\nvar Sugar = require('sugar-core'),\n advanceDateWithArgs = require('./internal/advanceDateWithArgs');\n\nSugar.Date.defineInstanceWithArguments({\n\n 'rewind': function(d, args) {\n return advanceDateWithArgs(d, args, -1);\n }\n\n});\n\nmodule.exports = Sugar.Date.rewind;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsUntil;","'use strict';\n\nvar Sugar = require('sugar-core'),\n updateDate = require('./internal/updateDate'),\n collectUpdateDateArguments = require('./internal/collectUpdateDateArguments');\n\nSugar.Date.defineInstanceWithArguments({\n\n 'set': function(d, args) {\n args = collectUpdateDateArguments(args);\n return updateDate(d, args[0], args[1]);\n }\n\n});\n\nmodule.exports = Sugar.Date.set;","'use strict';\n\nvar Sugar = require('sugar-core'),\n setISOWeekNumber = require('./internal/setISOWeekNumber');\n\nSugar.Date.defineInstance({\n\n 'setISOWeek': function(date, num) {\n return setISOWeekNumber(date, num);\n }\n\n});\n\nmodule.exports = Sugar.Date.setISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'setLocale': function(code) {\n return localeManager.set(code);\n }\n\n});\n\nmodule.exports = Sugar.Date.setLocale;","'use strict';\n\nvar Sugar = require('sugar-core'),\n _dateOptions = require('./var/_dateOptions');\n\nmodule.exports = Sugar.Date.setOption;","'use strict';\n\nvar Sugar = require('sugar-core'),\n _utc = require('../common/var/_utc');\n\nSugar.Date.defineInstance({\n\n 'setUTC': function(date, on) {\n return _utc(date, on);\n }\n\n});\n\nmodule.exports = Sugar.Date.setUTC;","'use strict';\n\nvar Sugar = require('sugar-core'),\n setWeekday = require('./internal/setWeekday');\n\nSugar.Date.defineInstance({\n\n 'setWeekday': function(date, dow) {\n return setWeekday(date, dow);\n }\n\n});\n\nmodule.exports = Sugar.Date.setWeekday;","'use strict';\n\nmodule.exports = /^'?(\\d{1,2})$/;","'use strict';\n\nvar getEnglishVariant = require('../internal/getEnglishVariant');\n\nvar AmericanEnglishDefinition = getEnglishVariant({\n 'mdy': true,\n 'firstDayOfWeek': 0,\n 'firstDayOfWeekYear': 1,\n 'short': '{MM}/{dd}/{yyyy}',\n 'medium': '{Month} {d}, {yyyy}',\n 'long': '{Month} {d}, {yyyy} {time}',\n 'full': '{Weekday}, {Month} {d}, {yyyy} {time}',\n 'stamp': '{Dow} {Mon} {d} {yyyy} {time}',\n 'time': '{h}:{mm} {TT}'\n});\n\nmodule.exports = AmericanEnglishDefinition;","'use strict';\n\nvar getEnglishVariant = require('../internal/getEnglishVariant');\n\nvar BritishEnglishDefinition = getEnglishVariant({\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {Month} {yyyy}',\n 'long': '{d} {Month} {yyyy} {H}:{mm}',\n 'full': '{Weekday}, {d} {Month}, {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}'\n});\n\nmodule.exports = BritishEnglishDefinition;","'use strict';\n\nvar getEnglishVariant = require('../internal/getEnglishVariant');\n\nvar CanadianEnglishDefinition = getEnglishVariant({\n 'short': '{yyyy}-{MM}-{dd}',\n 'medium': '{d} {Month}, {yyyy}',\n 'long': '{d} {Month}, {yyyy} {H}:{mm}',\n 'full': '{Weekday}, {d} {Month}, {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}'\n});\n\nmodule.exports = CanadianEnglishDefinition;","'use strict';\n\nvar CoreOutputFormats = {\n 'ISO8601': '{yyyy}-{MM}-{dd}T{HH}:{mm}:{ss}.{SSS}{Z}',\n 'RFC1123': '{Dow}, {dd} {Mon} {yyyy} {HH}:{mm}:{ss} {ZZ}',\n 'RFC1036': '{Weekday}, {dd}-{Mon}-{yy} {HH}:{mm}:{ss} {ZZ}'\n};\n\nmodule.exports = CoreOutputFormats;","'use strict';\n\nvar CoreParsingFormats = [\n {\n // 12-1978\n // 08-1978 (MDY)\n src: '{MM}[-.\\\\/]{yyyy}'\n },\n {\n // 12/08/1978\n // 08/12/1978 (MDY)\n time: true,\n src: '{dd}[-\\\\/]{MM}(?:[-\\\\/]{yyyy|yy|y})?',\n mdy: '{MM}[-\\\\/]{dd}(?:[-\\\\/]{yyyy|yy|y})?'\n },\n {\n // 12.08.1978\n // 08.12.1978 (MDY)\n time: true,\n src: '{dd}\\\\.{MM}(?:\\\\.{yyyy|yy|y})?',\n mdy: '{MM}\\\\.{dd}(?:\\\\.{yyyy|yy|y})?',\n localeCheck: function(loc) {\n // Do not allow this format if the locale\n // uses a period as a time separator.\n return loc.timeSeparator !== '.';\n }\n },\n {\n // 1975-08-25\n time: true,\n src: '{yyyy}[-.\\\\/]{MM}(?:[-.\\\\/]{dd})?'\n },\n {\n // .NET JSON\n src: '\\\\\\\\/Date\\\\({timestamp}(?:[-+]\\\\d{4,4})?\\\\)\\\\\\\\/'\n },\n {\n // ISO-8601\n src: '{iyyyy}(?:-?{MM}(?:-?{dd}(?:T{ihh}(?::?{imm}(?::?{ss})?)?)?)?)?{tzOffset?}'\n }\n];\n\nmodule.exports = CoreParsingFormats;","'use strict';\n\nvar CoreParsingTokens = {\n 'yyyy': {\n param: 'year',\n src: '[-−+]?\\\\d{4,6}'\n },\n 'yy': {\n param: 'year',\n src: '\\\\d{2}'\n },\n 'y': {\n param: 'year',\n src: '\\\\d'\n },\n 'ayy': {\n param: 'year',\n src: '\\'\\\\d{2}'\n },\n 'MM': {\n param: 'month',\n src: '(?:1[012]|0?[1-9])'\n },\n 'dd': {\n param: 'date',\n src: '(?:3[01]|[12][0-9]|0?[1-9])'\n },\n 'hh': {\n param: 'hour',\n src: '(?:2[0-4]|[01]?[0-9])'\n },\n 'mm': {\n param: 'minute',\n src: '[0-5]\\\\d'\n },\n 'ss': {\n param: 'second',\n src: '[0-5]\\\\d(?:[,.]\\\\d+)?'\n },\n 'tzHour': {\n src: '[-−+](?:2[0-4]|[01]?[0-9])'\n },\n 'tzMinute': {\n src: '[0-5]\\\\d'\n },\n 'iyyyy': {\n param: 'year',\n src: '(?:[-−+]?\\\\d{4}|[-−+]\\\\d{5,6})'\n },\n 'ihh': {\n param: 'hour',\n src: '(?:2[0-4]|[01][0-9])(?:[,.]\\\\d+)?'\n },\n 'imm': {\n param: 'minute',\n src: '[0-5]\\\\d(?:[,.]\\\\d+)?'\n },\n 'GMT': {\n param: 'utc',\n src: 'GMT'\n },\n 'Z': {\n param: 'utc',\n src: 'Z'\n },\n 'timestamp': {\n src: '\\\\d+'\n }\n};\n\nmodule.exports = CoreParsingTokens;","'use strict';\n\nvar defaultNewDate = require('../internal/defaultNewDate');\n\nvar DATE_OPTIONS = {\n 'newDateInternal': defaultNewDate\n};\n\nmodule.exports = DATE_OPTIONS;","'use strict';\n\nmodule.exports = {\n HOURS_INDEX: 3,\n DAY_INDEX: 4,\n WEEK_INDEX: 5,\n MONTH_INDEX: 6,\n YEAR_INDEX: 7\n};","'use strict';\n\nvar getDaysInMonth = require('../internal/getDaysInMonth');\n\nvar DateUnits = [\n {\n name: 'millisecond',\n method: 'Milliseconds',\n multiplier: 1,\n start: 0,\n end: 999\n },\n {\n name: 'second',\n method: 'Seconds',\n multiplier: 1000,\n start: 0,\n end: 59\n },\n {\n name: 'minute',\n method: 'Minutes',\n multiplier: 60 * 1000,\n start: 0,\n end: 59\n },\n {\n name: 'hour',\n method: 'Hours',\n multiplier: 60 * 60 * 1000,\n start: 0,\n end: 23\n },\n {\n name: 'day',\n alias: 'date',\n method: 'Date',\n ambiguous: true,\n multiplier: 24 * 60 * 60 * 1000,\n start: 1,\n end: function(d) {\n return getDaysInMonth(d);\n }\n },\n {\n name: 'week',\n method: 'ISOWeek',\n ambiguous: true,\n multiplier: 7 * 24 * 60 * 60 * 1000\n },\n {\n name: 'month',\n method: 'Month',\n ambiguous: true,\n multiplier: 30.4375 * 24 * 60 * 60 * 1000,\n start: 0,\n end: 11\n },\n {\n name: 'year',\n method: 'FullYear',\n ambiguous: true,\n multiplier: 365.25 * 24 * 60 * 60 * 1000,\n start: 0\n }\n];\n\nmodule.exports = DateUnits;","'use strict';\n\nvar EnglishLocaleBaseDefinition = {\n 'code': 'en',\n 'plural': true,\n 'timeMarkers': 'at',\n 'ampm': 'AM|A.M.|a,PM|P.M.|p',\n 'units': 'millisecond:|s,second:|s,minute:|s,hour:|s,day:|s,week:|s,month:|s,year:|s',\n 'months': 'Jan:uary|,Feb:ruary|,Mar:ch|,Apr:il|,May,Jun:e|,Jul:y|,Aug:ust|,Sep:tember|t|,Oct:ober|,Nov:ember|,Dec:ember|',\n 'weekdays': 'Sun:day|,Mon:day|,Tue:sday|,Wed:nesday|,Thu:rsday|,Fri:day|,Sat:urday|+weekend',\n 'numerals': 'zero,one|first,two|second,three|third,four:|th,five|fifth,six:|th,seven:|th,eight:|h,nin:e|th,ten:|th',\n 'articles': 'a,an,the',\n 'tokens': 'the,st|nd|rd|th,of|in,a|an,on',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{num} {unit} {sign}',\n 'duration': '{num} {unit}',\n 'modifiers': [\n { 'name': 'half', 'src': 'half', 'value': .5 },\n { 'name': 'midday', 'src': 'noon', 'value': 12 },\n { 'name': 'midday', 'src': 'midnight', 'value': 24 },\n { 'name': 'day', 'src': 'yesterday', 'value': -1 },\n { 'name': 'day', 'src': 'today|tonight', 'value': 0 },\n { 'name': 'day', 'src': 'tomorrow', 'value': 1 },\n { 'name': 'sign', 'src': 'ago|before', 'value': -1 },\n { 'name': 'sign', 'src': 'from now|after|from|in|later', 'value': 1 },\n { 'name': 'edge', 'src': 'first day|first|beginning', 'value': -2 },\n { 'name': 'edge', 'src': 'last day', 'value': 1 },\n { 'name': 'edge', 'src': 'end|last', 'value': 2 },\n { 'name': 'shift', 'src': 'last', 'value': -1 },\n { 'name': 'shift', 'src': 'the|this', 'value': 0 },\n { 'name': 'shift', 'src': 'next', 'value': 1 }\n ],\n 'parse': [\n '(?:just)? now',\n '{shift} {unit:5-7}',\n '{months?} {year}',\n '{midday} {4?} {day|weekday}',\n '{months},?[-.\\\\/\\\\s]?{year?}',\n '{edge} of (?:day)? {day|weekday}',\n '{0} {num}{1?} {weekday} {2} {months},? {year?}',\n '{shift?} {day?} {weekday?} (?:at)? {midday}',\n '{sign?} {3?} {half} {3?} {unit:3-4|unit:7} {sign?}',\n '{0?} {edge} {weekday?} {2} {shift?} {unit:4-7?} {months?},? {year?}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift} {unit:5?} {weekday}',\n '{0?} {date}{1?} {2?} {months?}',\n '{weekday} {2?} {shift} {unit:5}',\n '{0?} {num} {2?} {months}\\\\.?,? {year?}',\n '{num?} {unit:4-5} {sign} {day|weekday}',\n '{0|months} {date?}{1?} of {shift} {unit:6-7}',\n '{0?} {num}{1?} {weekday} of {shift} {unit:6}',\n '{year?}[-.\\\\/\\\\s]?{months}[-.\\\\/\\\\s]{date}',\n '{date}[-.\\\\/\\\\s]{months}(?:[-.\\\\/\\\\s]{year|yy})?',\n '{weekday?}\\\\.?,? {months}\\\\.?,? {date}{1?},? {year?}',\n '{weekday?}\\\\.?,? {date} {months} {year}'\n ],\n 'timeFrontParse': [\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{4?} {day|weekday}'\n ]\n};\n\nmodule.exports = EnglishLocaleBaseDefinition;","'use strict';\n\nvar TIMEZONE_ABBREVIATION_REG = require('./TIMEZONE_ABBREVIATION_REG'),\n LocaleHelpers = require('./LocaleHelpers'),\n DateUnitIndexes = require('./DateUnitIndexes'),\n trunc = require('../../common/var/trunc'),\n getDate = require('../internal/getDate'),\n getYear = require('../internal/getYear'),\n getHours = require('../internal/getHours'),\n getMonth = require('../internal/getMonth'),\n cloneDate = require('../internal/cloneDate'),\n padNumber = require('../../common/internal/padNumber'),\n getWeekday = require('../internal/getWeekday'),\n callDateGet = require('../../common/internal/callDateGet'),\n mathAliases = require('../../common/var/mathAliases'),\n getWeekYear = require('../internal/getWeekYear'),\n getUTCOffset = require('../internal/getUTCOffset'),\n getDaysSince = require('../internal/getDaysSince'),\n getWeekNumber = require('../internal/getWeekNumber'),\n getMeridiemToken = require('../internal/getMeridiemToken'),\n setUnitAndLowerToEdge = require('../internal/setUnitAndLowerToEdge');\n\nvar localeManager = LocaleHelpers.localeManager,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX,\n ceil = mathAliases.ceil;\n\nvar FormatTokensBase = [\n {\n ldml: 'Dow',\n strf: 'a',\n lowerToken: 'dow',\n get: function(d, localeCode) {\n return localeManager.get(localeCode).getWeekdayName(getWeekday(d), 2);\n }\n },\n {\n ldml: 'Weekday',\n strf: 'A',\n lowerToken: 'weekday',\n allowAlternates: true,\n get: function(d, localeCode, alternate) {\n return localeManager.get(localeCode).getWeekdayName(getWeekday(d), alternate);\n }\n },\n {\n ldml: 'Mon',\n strf: 'b h',\n lowerToken: 'mon',\n get: function(d, localeCode) {\n return localeManager.get(localeCode).getMonthName(getMonth(d), 2);\n }\n },\n {\n ldml: 'Month',\n strf: 'B',\n lowerToken: 'month',\n allowAlternates: true,\n get: function(d, localeCode, alternate) {\n return localeManager.get(localeCode).getMonthName(getMonth(d), alternate);\n }\n },\n {\n strf: 'C',\n get: function(d) {\n return getYear(d).toString().slice(0, 2);\n }\n },\n {\n ldml: 'd date day',\n strf: 'd',\n strfPadding: 2,\n ldmlPaddedToken: 'dd',\n ordinalToken: 'do',\n get: function(d) {\n return getDate(d);\n }\n },\n {\n strf: 'e',\n get: function(d) {\n return padNumber(getDate(d), 2, false, 10, ' ');\n }\n },\n {\n ldml: 'H 24hr',\n strf: 'H',\n strfPadding: 2,\n ldmlPaddedToken: 'HH',\n get: function(d) {\n return getHours(d);\n }\n },\n {\n ldml: 'h hours 12hr',\n strf: 'I',\n strfPadding: 2,\n ldmlPaddedToken: 'hh',\n get: function(d) {\n return getHours(d) % 12 || 12;\n }\n },\n {\n ldml: 'D',\n strf: 'j',\n strfPadding: 3,\n ldmlPaddedToken: 'DDD',\n get: function(d) {\n var s = setUnitAndLowerToEdge(cloneDate(d), MONTH_INDEX);\n return getDaysSince(d, s) + 1;\n }\n },\n {\n ldml: 'M',\n strf: 'm',\n strfPadding: 2,\n ordinalToken: 'Mo',\n ldmlPaddedToken: 'MM',\n get: function(d) {\n return getMonth(d) + 1;\n }\n },\n {\n ldml: 'm minutes',\n strf: 'M',\n strfPadding: 2,\n ldmlPaddedToken: 'mm',\n get: function(d) {\n return callDateGet(d, 'Minutes');\n }\n },\n {\n ldml: 'Q',\n get: function(d) {\n return ceil((getMonth(d) + 1) / 3);\n }\n },\n {\n ldml: 'TT',\n strf: 'p',\n get: function(d, localeCode) {\n return getMeridiemToken(d, localeCode);\n }\n },\n {\n ldml: 'tt',\n strf: 'P',\n get: function(d, localeCode) {\n return getMeridiemToken(d, localeCode).toLowerCase();\n }\n },\n {\n ldml: 'T',\n lowerToken: 't',\n get: function(d, localeCode) {\n return getMeridiemToken(d, localeCode).charAt(0);\n }\n },\n {\n ldml: 's seconds',\n strf: 'S',\n strfPadding: 2,\n ldmlPaddedToken: 'ss',\n get: function(d) {\n return callDateGet(d, 'Seconds');\n }\n },\n {\n ldml: 'S ms',\n strfPadding: 3,\n ldmlPaddedToken: 'SSS',\n get: function(d) {\n return callDateGet(d, 'Milliseconds');\n }\n },\n {\n ldml: 'e',\n strf: 'u',\n ordinalToken: 'eo',\n get: function(d) {\n return getWeekday(d) || 7;\n }\n },\n {\n strf: 'U',\n strfPadding: 2,\n get: function(d) {\n // Sunday first, 0-53\n return getWeekNumber(d, false, 0);\n }\n },\n {\n ldml: 'W',\n strf: 'V',\n strfPadding: 2,\n ordinalToken: 'Wo',\n ldmlPaddedToken: 'WW',\n get: function(d) {\n // Monday first, 1-53 (ISO8601)\n return getWeekNumber(d, true);\n }\n },\n {\n strf: 'w',\n get: function(d) {\n return getWeekday(d);\n }\n },\n {\n ldml: 'w',\n ordinalToken: 'wo',\n ldmlPaddedToken: 'ww',\n get: function(d, localeCode) {\n // Locale dependent, 1-53\n var loc = localeManager.get(localeCode),\n dow = loc.getFirstDayOfWeek(localeCode),\n doy = loc.getFirstDayOfWeekYear(localeCode);\n return getWeekNumber(d, true, dow, doy);\n }\n },\n {\n strf: 'W',\n strfPadding: 2,\n get: function(d) {\n // Monday first, 0-53\n return getWeekNumber(d, false);\n }\n },\n {\n ldmlPaddedToken: 'gggg',\n ldmlTwoDigitToken: 'gg',\n get: function(d, localeCode) {\n return getWeekYear(d, localeCode);\n }\n },\n {\n strf: 'G',\n strfPadding: 4,\n strfTwoDigitToken: 'g',\n ldmlPaddedToken: 'GGGG',\n ldmlTwoDigitToken: 'GG',\n get: function(d, localeCode) {\n return getWeekYear(d, localeCode, true);\n }\n },\n {\n ldml: 'year',\n ldmlPaddedToken: 'yyyy',\n ldmlTwoDigitToken: 'yy',\n strf: 'Y',\n strfPadding: 4,\n strfTwoDigitToken: 'y',\n get: function(d) {\n return getYear(d);\n }\n },\n {\n ldml: 'ZZ',\n strf: 'z',\n get: function(d) {\n return getUTCOffset(d);\n }\n },\n {\n ldml: 'X',\n get: function(d) {\n return trunc(d.getTime() / 1000);\n }\n },\n {\n ldml: 'x',\n get: function(d) {\n return d.getTime();\n }\n },\n {\n ldml: 'Z',\n get: function(d) {\n return getUTCOffset(d, true);\n }\n },\n {\n ldml: 'z',\n strf: 'Z',\n get: function(d) {\n // Note that this is not accurate in all browsing environments!\n // https://github.com/moment/moment/issues/162\n // It will continue to be supported for Node and usage with the\n // understanding that it may be blank.\n var match = d.toString().match(TIMEZONE_ABBREVIATION_REG);\n // istanbul ignore next\n return match ? match[1] : '';\n }\n },\n {\n strf: 'D',\n alias: '%m/%d/%y'\n },\n {\n strf: 'F',\n alias: '%Y-%m-%d'\n },\n {\n strf: 'r',\n alias: '%I:%M:%S %p'\n },\n {\n strf: 'R',\n alias: '%H:%M'\n },\n {\n strf: 'T',\n alias: '%H:%M:%S'\n },\n {\n strf: 'x',\n alias: '{short}'\n },\n {\n strf: 'X',\n alias: '{time}'\n },\n {\n strf: 'c',\n alias: '{stamp}'\n }\n];\n\nmodule.exports = FormatTokensBase;","'use strict';\n\nmodule.exports = {\n ISO_FIRST_DAY_OF_WEEK: 1,\n ISO_FIRST_DAY_OF_WEEK_YEAR: 4\n};","'use strict';\n\nvar LOCALE_ARRAY_FIELDS = [\n 'months', 'weekdays', 'units', 'numerals', 'placeholders',\n 'articles', 'tokens', 'timeMarkers', 'ampm', 'timeSuffixes',\n 'parse', 'timeParse', 'timeFrontParse', 'modifiers'\n];\n\nmodule.exports = LOCALE_ARRAY_FIELDS;","'use strict';\n\nvar BritishEnglishDefinition = require('./BritishEnglishDefinition'),\n AmericanEnglishDefinition = require('./AmericanEnglishDefinition'),\n CanadianEnglishDefinition = require('./CanadianEnglishDefinition');\n\nvar LazyLoadedLocales = {\n 'en-US': AmericanEnglishDefinition,\n 'en-GB': BritishEnglishDefinition,\n 'en-AU': BritishEnglishDefinition,\n 'en-CA': CanadianEnglishDefinition\n};\n\nmodule.exports = LazyLoadedLocales;","'use strict';\n\nvar LazyLoadedLocales = require('./LazyLoadedLocales'),\n AmericanEnglishDefinition = require('./AmericanEnglishDefinition'),\n getNewLocale = require('../internal/getNewLocale');\n\nvar English, localeManager;\n\nfunction buildLocales() {\n\n function LocaleManager(loc) {\n this.locales = {};\n this.add(loc);\n }\n\n LocaleManager.prototype = {\n\n get: function(code, fallback) {\n var loc = this.locales[code];\n if (!loc && LazyLoadedLocales[code]) {\n loc = this.add(code, LazyLoadedLocales[code]);\n } else if (!loc && code) {\n loc = this.locales[code.slice(0, 2)];\n }\n return loc || fallback === false ? loc : this.current;\n },\n\n getAll: function() {\n return this.locales;\n },\n\n set: function(code) {\n var loc = this.get(code, false);\n if (!loc) {\n throw new TypeError('Invalid Locale: ' + code);\n }\n return this.current = loc;\n },\n\n add: function(code, def) {\n if (!def) {\n def = code;\n code = def.code;\n } else {\n def.code = code;\n }\n var loc = def.compiledFormats ? def : getNewLocale(def);\n this.locales[code] = loc;\n if (!this.current) {\n this.current = loc;\n }\n return loc;\n },\n\n remove: function(code) {\n if (this.current.code === code) {\n this.current = this.get('en');\n }\n return delete this.locales[code];\n }\n\n };\n\n // Sorry about this guys...\n English = getNewLocale(AmericanEnglishDefinition);\n localeManager = new LocaleManager(English);\n}\n\nbuildLocales();\n\nmodule.exports = {\n English: English,\n localeManager: localeManager\n};","'use strict';\n\nvar LocalizedParsingTokens = {\n 'year': {\n base: 'yyyy|ayy',\n requiresSuffix: true\n },\n 'month': {\n base: 'MM',\n requiresSuffix: true\n },\n 'date': {\n base: 'dd',\n requiresSuffix: true\n },\n 'hour': {\n base: 'hh',\n requiresSuffixOr: ':'\n },\n 'minute': {\n base: 'mm'\n },\n 'second': {\n base: 'ss'\n },\n 'num': {\n src: '\\\\d+',\n requiresNumerals: true\n }\n};\n\nmodule.exports = LocalizedParsingTokens;","'use strict';\n\nmodule.exports = 60 * 1000;","'use strict';\n\nmodule.exports = /\\(([-+]\\d{2,4}|\\w{3,5})\\)$/;","'use strict';\n\nvar DATE_OPTIONS = require('./DATE_OPTIONS'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n defineOptionsAccessor = require('../../common/internal/defineOptionsAccessor');\n\nvar sugarDate = namespaceAliases.sugarDate;\n\nmodule.exports = defineOptionsAccessor(sugarDate, DATE_OPTIONS);","'use strict';\n\nvar LocaleHelpers = require('./LocaleHelpers'),\n FormatTokensBase = require('./FormatTokensBase'),\n CoreOutputFormats = require('./CoreOutputFormats'),\n forEach = require('../../common/internal/forEach'),\n padNumber = require('../../common/internal/padNumber'),\n spaceSplit = require('../../common/internal/spaceSplit'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases'),\n createFormatMatcher = require('../../common/internal/createFormatMatcher'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar');\n\nvar localeManager = LocaleHelpers.localeManager,\n hasOwn = coreUtilityAliases.hasOwn,\n getOwn = coreUtilityAliases.getOwn,\n forEachProperty = coreUtilityAliases.forEachProperty,\n sugarDate = namespaceAliases.sugarDate;\n\nvar ldmlTokens, strfTokens;\n\nfunction buildDateFormatTokens() {\n\n function addFormats(target, tokens, fn) {\n if (tokens) {\n forEach(spaceSplit(tokens), function(token) {\n target[token] = fn;\n });\n }\n }\n\n function buildLowercase(get) {\n return function(d, localeCode) {\n return get(d, localeCode).toLowerCase();\n };\n }\n\n function buildOrdinal(get) {\n return function(d, localeCode) {\n var n = get(d, localeCode);\n return n + localeManager.get(localeCode).getOrdinal(n);\n };\n }\n\n function buildPadded(get, padding) {\n return function(d, localeCode) {\n return padNumber(get(d, localeCode), padding);\n };\n }\n\n function buildTwoDigits(get) {\n return function(d, localeCode) {\n return get(d, localeCode) % 100;\n };\n }\n\n function buildAlias(alias) {\n return function(d, localeCode) {\n return dateFormatMatcher(alias, d, localeCode);\n };\n }\n\n function buildAlternates(f) {\n for (var n = 1; n <= 5; n++) {\n buildAlternate(f, n);\n }\n }\n\n function buildAlternate(f, n) {\n var alternate = function(d, localeCode) {\n return f.get(d, localeCode, n);\n };\n addFormats(ldmlTokens, f.ldml + n, alternate);\n if (f.lowerToken) {\n ldmlTokens[f.lowerToken + n] = buildLowercase(alternate);\n }\n }\n\n function getIdentityFormat(name) {\n return function(d, localeCode) {\n var loc = localeManager.get(localeCode);\n return dateFormatMatcher(loc[name], d, localeCode);\n };\n }\n\n ldmlTokens = {};\n strfTokens = {};\n\n forEach(FormatTokensBase, function(f) {\n var get = f.get, getPadded;\n if (f.lowerToken) {\n ldmlTokens[f.lowerToken] = buildLowercase(get);\n }\n if (f.ordinalToken) {\n ldmlTokens[f.ordinalToken] = buildOrdinal(get, f);\n }\n if (f.ldmlPaddedToken) {\n ldmlTokens[f.ldmlPaddedToken] = buildPadded(get, f.ldmlPaddedToken.length);\n }\n if (f.ldmlTwoDigitToken) {\n ldmlTokens[f.ldmlTwoDigitToken] = buildPadded(buildTwoDigits(get), 2);\n }\n if (f.strfTwoDigitToken) {\n strfTokens[f.strfTwoDigitToken] = buildPadded(buildTwoDigits(get), 2);\n }\n if (f.strfPadding) {\n getPadded = buildPadded(get, f.strfPadding);\n }\n if (f.alias) {\n get = buildAlias(f.alias);\n }\n if (f.allowAlternates) {\n buildAlternates(f);\n }\n addFormats(ldmlTokens, f.ldml, get);\n addFormats(strfTokens, f.strf, getPadded || get);\n });\n\n forEachProperty(CoreOutputFormats, function(src, name) {\n addFormats(ldmlTokens, name, buildAlias(src));\n });\n\n defineInstanceSimilar(sugarDate, 'short medium long full', function(methods, name) {\n var fn = getIdentityFormat(name);\n addFormats(ldmlTokens, name, fn);\n methods[name] = fn;\n });\n\n addFormats(ldmlTokens, 'time', getIdentityFormat('time'));\n addFormats(ldmlTokens, 'stamp', getIdentityFormat('stamp'));\n}\n\nvar dateFormatMatcher;\n\nfunction buildDateFormatMatcher() {\n\n function getLdml(d, token, localeCode) {\n return getOwn(ldmlTokens, token)(d, localeCode);\n }\n\n function getStrf(d, token, localeCode) {\n return getOwn(strfTokens, token)(d, localeCode);\n }\n\n function checkDateToken(ldml, strf) {\n return hasOwn(ldmlTokens, ldml) || hasOwn(strfTokens, strf);\n }\n\n // Format matcher for LDML or STRF tokens.\n dateFormatMatcher = createFormatMatcher(getLdml, getStrf, checkDateToken);\n}\n\nbuildDateFormatTokens();\n\nbuildDateFormatMatcher();\n\nmodule.exports = {\n ldmlTokens: ldmlTokens,\n strfTokens: strfTokens,\n dateFormatMatcher: dateFormatMatcher\n};","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsUntil;","'use strict';\n\nrequire('./date');\nrequire('./range');\n\nmodule.exports = require('sugar-core');","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Catalan locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ca')\n *\n */\naddLocale('ca', {\n 'plural': true,\n 'units': 'milisegon:|s,segon:|s,minut:|s,hor:a|es,di:a|es,setman:a|es,mes:|os,any:|s',\n 'months': 'gen:er|,febr:er|,mar:ç|,abr:il|,mai:g|,jun:y|,jul:iol|,ag:ost|,set:embre|,oct:ubre|,nov:embre|,des:embre|',\n 'weekdays': 'diumenge|dg,dilluns|dl,dimarts|dt,dimecres|dc,dijous|dj,divendres|dv,dissabte|ds',\n 'numerals': 'zero,un,dos,tres,quatre,cinc,sis,set,vuit,nou,deu',\n 'tokens': 'el,la,de',\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday} {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'a las',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': \"abans d'ahir\", 'value': -2 },\n { 'name': 'day', 'src': 'ahir', 'value': -1 },\n { 'name': 'day', 'src': 'avui', 'value': 0 },\n { 'name': 'day', 'src': 'demà|dema', 'value': 1 },\n { 'name': 'sign', 'src': 'fa', 'value': -1 },\n { 'name': 'sign', 'src': 'en', 'value': 1 },\n { 'name': 'shift', 'src': 'passat', 'value': -1 },\n { 'name': 'shift', 'src': 'el proper|la propera', 'value': 1 }\n ],\n 'parse': [\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{0?}{1?} {unit:5-7} {shift}',\n '{0?}{1?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift} {weekday}',\n '{weekday} {shift}',\n '{date?} {2?} {months}\\\\.? {2?} {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ca\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Danish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('da')\n *\n */\naddLocale('da', {\n 'plural': true,\n 'units': 'millisekund:|er,sekund:|er,minut:|ter,tim:e|er,dag:|e,ug:e|er|en,måned:|er|en+maaned:|er|en,år:||et+aar:||et',\n 'months': 'jan:uar|,feb:ruar|,mar:ts|,apr:il|,maj,jun:i|,jul:i|,aug:ust|,sep:tember|,okt:ober|,nov:ember|,dec:ember|',\n 'weekdays': 'søn:dag|+son:dag|,man:dag|,tir:sdag|,ons:dag|,tor:sdag|,fre:dag|,lør:dag|+lor:dag|',\n 'numerals': 'nul,en|et,to,tre,fire,fem,seks,syv,otte,ni,ti',\n 'tokens': 'den,for',\n 'articles': 'den',\n 'short': '{dd}-{MM}-{yyyy}',\n 'medium': '{d}. {month} {yyyy}',\n 'long': '{d}. {month} {yyyy} {time}',\n 'full': '{weekday} d. {d}. {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'forgårs|i forgårs|forgaars|i forgaars', 'value': -2 },\n { 'name': 'day', 'src': 'i går|igår|i gaar|igaar', 'value': -1 },\n { 'name': 'day', 'src': 'i dag|idag', 'value': 0 },\n { 'name': 'day', 'src': 'i morgen|imorgen', 'value': 1 },\n { 'name': 'day', 'src': 'over morgon|overmorgen|i over morgen|i overmorgen|iovermorgen', 'value': 2 },\n { 'name': 'sign', 'src': 'siden', 'value': -1 },\n { 'name': 'sign', 'src': 'om', 'value': 1 },\n { 'name': 'shift', 'src': 'i sidste|sidste', 'value': -1 },\n { 'name': 'shift', 'src': 'denne', 'value': 0 },\n { 'name': 'shift', 'src': 'næste|naeste', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{1?} {num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift} {weekday}',\n '{0?} {weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"da\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * German locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('de')\n *\n */\naddLocale('de', {\n 'plural': true,\n 'units': 'Millisekunde:|n,Sekunde:|n,Minute:|n,Stunde:|n,Tag:|en,Woche:|n,Monat:|en,Jahr:|en|e',\n 'months': 'Jan:uar|,Feb:ruar|,M:är|ärz|ar|arz,Apr:il|,Mai,Juni,Juli,Aug:ust|,Sept:ember|,Okt:ober|,Nov:ember|,Dez:ember|',\n 'weekdays': 'So:nntag|,Mo:ntag|,Di:enstag|,Mi:ttwoch|,Do:nnerstag|,Fr:eitag|,Sa:mstag|',\n 'numerals': 'null,ein:|e|er|en|em,zwei,drei,vier,fuenf,sechs,sieben,acht,neun,zehn',\n 'tokens': 'der',\n 'short': '{dd}.{MM}.{yyyy}',\n 'medium': '{d}. {Month} {yyyy}',\n 'long': '{d}. {Month} {yyyy} {time}',\n 'full': '{Weekday}, {d}. {Month} {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'um',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'vorgestern', 'value': -2 },\n { 'name': 'day', 'src': 'gestern', 'value': -1 },\n { 'name': 'day', 'src': 'heute', 'value': 0 },\n { 'name': 'day', 'src': 'morgen', 'value': 1 },\n { 'name': 'day', 'src': 'übermorgen|ubermorgen|uebermorgen', 'value': 2 },\n { 'name': 'sign', 'src': 'vor:|her', 'value': -1 },\n { 'name': 'sign', 'src': 'in', 'value': 1 },\n { 'name': 'shift', 'src': 'letzte:|r|n|s', 'value': -1 },\n { 'name': 'shift', 'src': 'nächste:|r|n|s+nachste:|r|n|s+naechste:|r|n|s+kommende:n|r', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift} {weekday}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"de\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Spanish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('es')\n *\n */\naddLocale('es', {\n 'plural': true,\n 'units': 'milisegundo:|s,segundo:|s,minuto:|s,hora:|s,día|días|dia|dias,semana:|s,mes:|es,año|años|ano|anos',\n 'months': 'ene:ro|,feb:rero|,mar:zo|,abr:il|,may:o|,jun:io|,jul:io|,ago:sto|,sep:tiembre|,oct:ubre|,nov:iembre|,dic:iembre|',\n 'weekdays': 'dom:ingo|,lun:es|,mar:tes|,mié:rcoles|+mie:rcoles|,jue:ves|,vie:rnes|,sáb:ado|+sab:ado|',\n 'numerals': 'cero,uno,dos,tres,cuatro,cinco,seis,siete,ocho,nueve,diez',\n 'tokens': 'el,la,de',\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} de {Month} de {yyyy}',\n 'long': '{d} de {Month} de {yyyy} {time}',\n 'full': '{weekday}, {d} de {month} de {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'a las',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'anteayer', 'value': -2 },\n { 'name': 'day', 'src': 'ayer', 'value': -1 },\n { 'name': 'day', 'src': 'hoy', 'value': 0 },\n { 'name': 'day', 'src': 'mañana|manana', 'value': 1 },\n { 'name': 'sign', 'src': 'hace', 'value': -1 },\n { 'name': 'sign', 'src': 'dentro de', 'value': 1 },\n { 'name': 'shift', 'src': 'pasad:o|a', 'value': -1 },\n { 'name': 'shift', 'src': 'próximo|próxima|proximo|proxima', 'value': 1 }\n ],\n 'parse': [\n '{months} {2?} {year?}',\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{0?}{1?} {unit:5-7} {shift}',\n '{0?}{1?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday} {shift?}',\n '{date} {2?} {months?}\\\\.? {2?} {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {weekday} {shift?}',\n '{date} {2?} {months?}\\\\.? {2?} {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"es\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Finnish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('fi')\n *\n */\naddLocale('fi', {\n 'plural': true,\n 'units': 'millisekun:ti|tia|nin|teja|tina,sekun:ti|tia|nin|teja|tina,minuut:ti|tia|in|teja|tina,tun:ti|tia|nin|teja|tina,päiv:ä|ää|än|iä|änä,viik:ko|koa|on|olla|koja|kona,kuukau:si|tta|den+kuussa,vuo:si|tta|den|sia|tena|nna',\n 'months': 'tammi:kuuta||kuu,helmi:kuuta||kuu,maalis:kuuta||kuu,huhti:kuuta||kuu,touko:kuuta||kuu,kesä:kuuta||kuu,heinä:kuuta||kuu,elo:kuuta||kuu,syys:kuuta||kuu,loka:kuuta||kuu,marras:kuuta||kuu,joulu:kuuta||kuu',\n 'weekdays': 'su:nnuntai||nnuntaina,ma:anantai||anantaina,ti:istai||istaina,ke:skiviikko||skiviikkona,to:rstai||rstaina,pe:rjantai||rjantaina,la:uantai||uantaina',\n 'numerals': 'nolla,yksi|ensimmäinen,kaksi|toinen,kolm:e|as,neljä:|s,vii:si|des,kuu:si|des,seitsemä:n|s,kahdeksa:n|s,yhdeksä:n|s,kymmene:n|s',\n 'short': '{d}.{M}.{yyyy}',\n 'medium': '{d}. {month} {yyyy}',\n 'long': '{d}. {month} {yyyy} klo {time}',\n 'full': '{weekday} {d}. {month} {yyyy} klo {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}.{mm}',\n 'timeMarkers': 'klo,kello',\n 'timeSeparator': '.',\n 'ordinalSuffix': '.',\n 'relative': function(num, unit, ms, format) {\n var units = this['units'];\n function numberWithUnit(mult) {\n return num + ' ' + units[(8 * mult) + unit];\n }\n function baseUnit() {\n return numberWithUnit(num === 1 ? 0 : 1);\n }\n switch(format) {\n case 'duration': return baseUnit();\n case 'past': return baseUnit() + ' sitten';\n case 'future': return numberWithUnit(2) + ' kuluttua';\n }\n },\n 'modifiers': [\n { 'name': 'day', 'src': 'toissa päivänä', 'value': -2 },\n { 'name': 'day', 'src': 'eilen|eilistä', 'value': -1 },\n { 'name': 'day', 'src': 'tänään', 'value': 0 },\n { 'name': 'day', 'src': 'huomenna|huomista', 'value': 1 },\n { 'name': 'day', 'src': 'ylihuomenna|ylihuomista', 'value': 2 },\n { 'name': 'sign', 'src': 'sitten|aiemmin', 'value': -1 },\n { 'name': 'sign', 'src': 'päästä|kuluttua|myöhemmin', 'value': 1 },\n { 'name': 'edge', 'src': 'lopussa', 'value': 2 },\n { 'name': 'edge', 'src': 'ensimmäinen|ensimmäisenä', 'value': -2 },\n { 'name': 'shift', 'src': 'edel:linen|lisenä', 'value': -1 },\n { 'name': 'shift', 'src': 'viime', 'value': -1 },\n { 'name': 'shift', 'src': 'tä:llä|ssä|nä|mä', 'value': 0 },\n { 'name': 'shift', 'src': 'seuraava|seuraavana|tuleva|tulevana|ensi', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {day|weekday}',\n '{num?} {unit} {sign}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"fi\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * French locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('fr')\n *\n */\naddLocale('fr', {\n 'plural': true,\n 'units': 'milliseconde:|s,seconde:|s,minute:|s,heure:|s,jour:|s,semaine:|s,mois,an:|s|née|nee',\n 'months': 'janv:ier|,févr:ier|+fevr:ier|,mars,avr:il|,mai,juin,juil:let|,août,sept:embre|,oct:obre|,nov:embre|,déc:embre|+dec:embre|',\n 'weekdays': 'dim:anche|,lun:di|,mar:di|,mer:credi|,jeu:di|,ven:dredi|,sam:edi|',\n 'numerals': 'zéro,un:|e,deux,trois,quatre,cinq,six,sept,huit,neuf,dix',\n 'tokens': \"l'|la|le,er\",\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday} {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'à',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'hier', 'value': -1 },\n { 'name': 'day', 'src': \"aujourd'hui\", 'value': 0 },\n { 'name': 'day', 'src': 'demain', 'value': 1 },\n { 'name': 'sign', 'src': 'il y a', 'value': -1 },\n { 'name': 'sign', 'src': \"dans|d'ici\", 'value': 1 },\n { 'name': 'shift', 'src': 'derni:èr|er|ère|ere', 'value': -1 },\n { 'name': 'shift', 'src': 'prochain:|e', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{sign} {num} {unit}',\n '{0?} {unit:5-7} {shift}'\n ],\n 'timeParse': [\n '{day|weekday} {shift?}',\n '{weekday?},? {0?} {date}{1?} {months}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{0?} {weekday} {shift}',\n '{weekday?},? {0?} {date}{1?} {months}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"fr\" locale.","'use strict';\n\nrequire('./ca');\nrequire('./da');\nrequire('./de');\nrequire('./es');\nrequire('./fi');\nrequire('./fr');\nrequire('./it');\nrequire('./ja');\nrequire('./ko');\nrequire('./nl');\nrequire('./no');\nrequire('./pl');\nrequire('./pt');\nrequire('./ru');\nrequire('./sv');\nrequire('./zh-CN');\nrequire('./zh-TW');\n\nmodule.exports = require('sugar-core');","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Italian locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('it')\n *\n */\naddLocale('it', {\n 'plural': true,\n 'units': 'millisecond:o|i,second:o|i,minut:o|i,or:a|e,giorn:o|i,settiman:a|e,mes:e|i,ann:o|i',\n 'months': 'gen:naio|,feb:braio|,mar:zo|,apr:ile|,mag:gio|,giu:gno|,lug:lio|,ago:sto|,set:tembre|,ott:obre|,nov:embre|,dic:embre|',\n 'weekdays': 'dom:enica|,lun:edì||edi,mar:tedì||tedi,mer:coledì||coledi,gio:vedì||vedi,ven:erdì||erdi,sab:ato|',\n 'numerals': \"zero,un:|a|o|',due,tre,quattro,cinque,sei,sette,otto,nove,dieci\",\n 'tokens': \"l'|la|il\",\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday}, {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{num} {unit} {sign}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'alle',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'ieri', 'value': -1 },\n { 'name': 'day', 'src': 'oggi', 'value': 0 },\n { 'name': 'day', 'src': 'domani', 'value': 1 },\n { 'name': 'day', 'src': 'dopodomani', 'value': 2 },\n { 'name': 'sign', 'src': 'fa', 'value': -1 },\n { 'name': 'sign', 'src': 'da adesso', 'value': 1 },\n { 'name': 'shift', 'src': 'scors:o|a', 'value': -1 },\n { 'name': 'shift', 'src': 'prossim:o|a', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{0?} {unit:5-7} {shift}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{day|weekday} {shift?}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{day|weekday} {shift?}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"it\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Japanese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ja')\n *\n */\naddLocale('ja', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'allowsFullWidth': true,\n 'timeMarkerOptional': true,\n 'firstDayOfWeek': 0,\n 'firstDayOfWeekYear': 1,\n 'units': 'ミリ秒,秒,分,時間,日,週間|週,ヶ月|ヵ月|月,年|年度',\n 'weekdays': '日:曜日||曜,月:曜日||曜,火:曜日||曜,水:曜日||曜,木:曜日||曜,金:曜日||曜,土:曜日||曜',\n 'numerals': '〇,一,二,三,四,五,六,七,八,九',\n 'placeholders': '十,百,千,万',\n 'timeSuffixes': ',秒,分,時,日,,月,年度?',\n 'short': '{yyyy}/{MM}/{dd}',\n 'medium': '{yyyy}年{M}月{d}日',\n 'long': '{yyyy}年{M}月{d}日{time}',\n 'full': '{yyyy}年{M}月{d}日{time} {weekday}',\n 'stamp': '{yyyy}年{M}月{d}日 {H}:{mm} {dow}',\n 'time': '{tt}{h}時{mm}分',\n 'past': '{num}{unit}{sign}',\n 'future': '{num}{unit}{sign}',\n 'duration': '{num}{unit}',\n 'ampm': '午前,午後',\n 'modifiers': [\n { 'name': 'day', 'src': '一昨々日|前々々日', 'value': -3 },\n { 'name': 'day', 'src': '一昨日|おととい|前々日', 'value': -2 },\n { 'name': 'day', 'src': '昨日|前日', 'value': -1 },\n { 'name': 'day', 'src': '今日|当日|本日', 'value': 0 },\n { 'name': 'day', 'src': '明日|翌日|次日', 'value': 1 },\n { 'name': 'day', 'src': '明後日|翌々日', 'value': 2 },\n { 'name': 'day', 'src': '明々後日|翌々々日', 'value': 3 },\n { 'name': 'sign', 'src': '前', 'value': -1 },\n { 'name': 'sign', 'src': '後', 'value': 1 },\n { 'name': 'edge', 'src': '始|初日|頭', 'value': -2 },\n { 'name': 'edge', 'src': '末|尻', 'value': 2 },\n { 'name': 'edge', 'src': '末日', 'value': 1 },\n { 'name': 'shift', 'src': '一昨々|前々々', 'value': -3 },\n { 'name': 'shift', 'src': '一昨|前々|先々', 'value': -2 },\n { 'name': 'shift', 'src': '先|昨|去|前', 'value': -1 },\n { 'name': 'shift', 'src': '今|本|当', 'value': 0 },\n { 'name': 'shift', 'src': '来|明|翌|次', 'value': 1 },\n { 'name': 'shift', 'src': '明後|翌々|次々|再来|さ来', 'value': 2 },\n { 'name': 'shift', 'src': '明々後|翌々々', 'value': 3 }\n ],\n 'parse': [\n '{month}{edge}',\n '{num}{unit}{sign}',\n '{year?}{month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift}{unit:5}{weekday?}',\n '{shift}{unit:7}{month}{edge}',\n '{shift}{unit:7}{month?}{date?}',\n '{shift}{unit:6}{edge?}{date?}',\n '{year?}{month?}{date}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ja\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Korean locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ko')\n *\n */\naddLocale('ko', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'units': '밀리초,초,분,시간,일,주,개월|달,년|해',\n 'weekdays': '일:요일|,월:요일|,화:요일|,수:요일|,목:요일|,금:요일|,토:요일|',\n 'numerals': '영|제로,일|한,이,삼,사,오,육,칠,팔,구,십',\n 'short': '{yyyy}.{MM}.{dd}',\n 'medium': '{yyyy}년 {M}월 {d}일',\n 'long': '{yyyy}년 {M}월 {d}일 {time}',\n 'full': '{yyyy}년 {M}월 {d}일 {weekday} {time}',\n 'stamp': '{yyyy}년 {M}월 {d}일 {H}:{mm} {dow}',\n 'time': '{tt} {h}시 {mm}분',\n 'past': '{num}{unit} {sign}',\n 'future': '{num}{unit} {sign}',\n 'duration': '{num}{unit}',\n 'timeSuffixes': ',초,분,시,일,,월,년',\n 'ampm': '오전,오후',\n 'modifiers': [\n { 'name': 'day', 'src': '그저께', 'value': -2 },\n { 'name': 'day', 'src': '어제', 'value': -1 },\n { 'name': 'day', 'src': '오늘', 'value': 0 },\n { 'name': 'day', 'src': '내일', 'value': 1 },\n { 'name': 'day', 'src': '모레', 'value': 2 },\n { 'name': 'sign', 'src': '전', 'value': -1 },\n { 'name': 'sign', 'src': '후', 'value': 1 },\n { 'name': 'shift', 'src': '지난|작', 'value': -1 },\n { 'name': 'shift', 'src': '이번|올', 'value': 0 },\n { 'name': 'shift', 'src': '다음|내', 'value': 1 }\n ],\n 'parse': [\n '{num}{unit} {sign}',\n '{shift?} {unit:5-7}',\n '{year?} {month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift} {unit:5?} {weekday}',\n '{year?} {month?} {date} {weekday?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ko\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Dutch locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('nl')\n *\n */\naddLocale('nl', {\n 'plural': true,\n 'units': 'milliseconde:|n,seconde:|n,minu:ut|ten,uur,dag:|en,we:ek|ken,maand:|en,jaar',\n 'months': 'jan:uari|,feb:ruari|,maart|mrt,apr:il|,mei,jun:i|,jul:i|,aug:ustus|,sep:tember|,okt:ober|,nov:ember|,dec:ember|',\n 'weekdays': 'zondag|zo,maandag|ma,dinsdag|di,woensdag|wo|woe,donderdag|do,vrijdag|vr|vrij,zaterdag|za',\n 'numerals': 'nul,een,twee,drie,vier,vijf,zes,zeven,acht,negen,tien',\n 'short': '{dd}-{MM}-{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {Month} {yyyy} {time}',\n 'full': '{weekday} {d} {Month} {yyyy} {time}',\n 'stamp': '{dow} {d} {Mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{num} {unit} {sign}',\n 'duration': '{num} {unit}',\n 'timeMarkers': \"'s,om\",\n 'modifiers': [\n { 'name': 'day', 'src': 'gisteren', 'value': -1 },\n { 'name': 'day', 'src': 'vandaag', 'value': 0 },\n { 'name': 'day', 'src': 'morgen', 'value': 1 },\n { 'name': 'day', 'src': 'overmorgen', 'value': 2 },\n { 'name': 'sign', 'src': 'geleden', 'value': -1 },\n { 'name': 'sign', 'src': 'vanaf nu', 'value': 1 },\n { 'name': 'shift', 'src': 'laatste|vorige|afgelopen', 'value': -1 },\n { 'name': 'shift', 'src': 'volgend:|e', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{0?} {unit:5-7} {shift}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"nl\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Norwegian locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('no')\n *\n */\naddLocale('no', {\n 'plural': true,\n 'units': 'millisekund:|er,sekund:|er,minutt:|er,tim:e|er,dag:|er,uk:e|er|en,måned:|er|en+maaned:|er|en,år:||et+aar:||et',\n 'months': 'januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember',\n 'weekdays': 'søndag|sondag,mandag,tirsdag,onsdag,torsdag,fredag,lørdag|lordag',\n 'numerals': 'en|et,to,tre,fire,fem,seks,sju|syv,åtte,ni,ti',\n 'tokens': 'den,for',\n 'articles': 'den',\n 'short':'d. {d}. {month} {yyyy}',\n 'long': 'den {d}. {month} {yyyy} {H}:{mm}',\n 'full': '{Weekday} den {d}. {month} {yyyy} {H}:{mm}:{ss}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'forgårs|i forgårs|forgaars|i forgaars', 'value': -2 },\n { 'name': 'day', 'src': 'i går|igår|i gaar|igaar', 'value': -1 },\n { 'name': 'day', 'src': 'i dag|idag', 'value': 0 },\n { 'name': 'day', 'src': 'i morgen|imorgen', 'value': 1 },\n { 'name': 'day', 'src': 'overimorgen|overmorgen|over i morgen', 'value': 2 },\n { 'name': 'sign', 'src': 'siden', 'value': -1 },\n { 'name': 'sign', 'src': 'om', 'value': 1 },\n { 'name': 'shift', 'src': 'i siste|siste', 'value': -1 },\n { 'name': 'shift', 'src': 'denne', 'value': 0 },\n { 'name': 'shift', 'src': 'neste', 'value': 1 }\n ],\n 'parse': [\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{1?} {num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{date} {month}',\n '{shift} {weekday}',\n '{0?} {weekday?},? {date?} {month}\\\\.? {year}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"no\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Polish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('pl')\n *\n */\naddLocale('pl', {\n 'plural': true,\n 'units': 'milisekund:a|y|,sekund:a|y|,minut:a|y|,godzin:a|y|,dzień|dni|dni,tydzień|tygodnie|tygodni,miesiąc|miesiące|miesięcy,rok|lata|lat',\n 'months': 'sty:cznia||czeń,lut:ego||y,mar:ca||zec,kwi:etnia||ecień,maj:a|,cze:rwca||rwiec,lip:ca||iec,sie:rpnia||rpień,wrz:eśnia||esień,paź:dziernika||dziernik,lis:topada||topad,gru:dnia||dzień',\n 'weekdays': 'nie:dziela||dzielę,pon:iedziałek|,wt:orek|,śr:oda||odę,czw:artek|,piątek|pt,sobota|sb|sobotę',\n 'numerals': 'zero,jeden|jedną,dwa|dwie,trzy,cztery,pięć,sześć,siedem,osiem,dziewięć,dziesięć',\n 'tokens': 'w|we,roku',\n 'short': '{dd}.{MM}.{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full' : '{weekday}, {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'timeMarkers': 'o',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'przedwczoraj', 'value': -2 },\n { 'name': 'day', 'src': 'wczoraj', 'value': -1 },\n { 'name': 'day', 'src': 'dzisiaj|dziś', 'value': 0 },\n { 'name': 'day', 'src': 'jutro', 'value': 1 },\n { 'name': 'day', 'src': 'pojutrze', 'value': 2 },\n { 'name': 'sign', 'src': 'temu|przed', 'value': -1 },\n { 'name': 'sign', 'src': 'za', 'value': 1 },\n { 'name': 'shift', 'src': 'zeszły|zeszła|ostatni|ostatnia', 'value': -1 },\n { 'name': 'shift', 'src': 'następny|następna|następnego|przyszły|przyszła|przyszłego', 'value': 1 }\n ],\n 'relative': function (num, unit, ms, format) {\n // special cases for relative days\n var DAY = 4;\n if (unit === DAY) {\n if (num === 1 && format === 'past') return 'wczoraj';\n if (num === 1 && format === 'future') return 'jutro';\n if (num === 2 && format === 'past') return 'przedwczoraj';\n if (num === 2 && format === 'future') return 'pojutrze';\n }\n\n var mult;\n var last = +num.toFixed(0).slice(-1);\n var last2 = +num.toFixed(0).slice(-2);\n switch (true) {\n case num === 1: mult = 0; break;\n case last2 >= 12 && last2 <= 14: mult = 2; break;\n case last >= 2 && last <= 4: mult = 1; break;\n default: mult = 2;\n }\n var text = this['units'][(mult * 8) + unit];\n var prefix = num + ' ';\n\n // changing to accusative case for 'past' and 'future' formats\n // (only singular feminine unit words are different in accusative, each of which ends with 'a')\n if ((format === 'past' || format === 'future') && num === 1) {\n text = text.replace(/a$/, 'ę');\n }\n\n text = prefix + text;\n switch (format) {\n case 'duration': return text;\n case 'past': return text + ' temu';\n case 'future': return 'za ' + text;\n }\n },\n 'parse': [\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{months} {year?}',\n '{shift} {unit:5-7}',\n '{0} {shift?} {weekday}'\n ],\n 'timeFrontParse': [\n '{day|weekday}',\n '{date} {months} {year?} {1?}',\n '{0?} {shift?} {weekday}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"pl\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Portuguese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('pt')\n *\n */\naddLocale('pt', {\n 'plural': true,\n 'units': 'milisegundo:|s,segundo:|s,minuto:|s,hora:|s,dia:|s,semana:|s,mês|mêses|mes|meses,ano:|s',\n 'months': 'jan:eiro|,fev:ereiro|,mar:ço|,abr:il|,mai:o|,jun:ho|,jul:ho|,ago:sto|,set:embro|,out:ubro|,nov:embro|,dez:embro|',\n 'weekdays': 'dom:ingo|,seg:unda-feira|,ter:ça-feira|,qua:rta-feira|,qui:nta-feira|,sex:ta-feira|,sáb:ado||ado',\n 'numerals': 'zero,um:|a,dois|duas,três|tres,quatro,cinco,seis,sete,oito,nove,dez',\n 'tokens': 'a,de',\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} de {Month} de {yyyy}',\n 'long': '{d} de {Month} de {yyyy} {time}',\n 'full': '{Weekday}, {d} de {Month} de {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'às',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'anteontem', 'value': -2 },\n { 'name': 'day', 'src': 'ontem', 'value': -1 },\n { 'name': 'day', 'src': 'hoje', 'value': 0 },\n { 'name': 'day', 'src': 'amanh:ã|a', 'value': 1 },\n { 'name': 'sign', 'src': 'atrás|atras|há|ha', 'value': -1 },\n { 'name': 'sign', 'src': 'daqui a', 'value': 1 },\n { 'name': 'shift', 'src': 'passad:o|a', 'value': -1 },\n { 'name': 'shift', 'src': 'próximo|próxima|proximo|proxima', 'value': 1 }\n ],\n 'parse': [\n '{months} {1?} {year?}',\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{0?} {unit:5-7} {shift}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{0?} {shift} {weekday}',\n '{date} {1?} {months?} {1?} {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {day|weekday}',\n '{date} {1?} {months?} {1?} {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"pt\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Russian locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ru')\n *\n */\naddLocale('ru', {\n 'firstDayOfWeekYear': 1,\n 'units': 'миллисекунд:а|у|ы|,секунд:а|у|ы|,минут:а|у|ы|,час:||а|ов,день|день|дня|дней,недел:я|ю|и|ь|е,месяц:||а|ев|е,год|год|года|лет|году',\n 'months': 'янв:аря||.|арь,фев:раля||р.|раль,мар:та||т,апр:еля||.|ель,мая|май,июн:я||ь,июл:я||ь,авг:уста||.|уст,сен:тября||т.|тябрь,окт:ября||.|ябрь,ноя:бря||брь,дек:абря||.|абрь',\n 'weekdays': 'воскресенье|вс,понедельник|пн,вторник|вт,среда|ср,четверг|чт,пятница|пт,суббота|сб',\n 'numerals': 'ноль,од:ин|ну,дв:а|е,три,четыре,пять,шесть,семь,восемь,девять,десять',\n 'tokens': 'в|на,г\\\\.?(?:ода)?',\n 'short': '{dd}.{MM}.{yyyy}',\n 'medium': '{d} {month} {yyyy} г.',\n 'long': '{d} {month} {yyyy} г., {time}',\n 'full': '{weekday}, {d} {month} {yyyy} г., {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'timeMarkers': 'в',\n 'ampm': ' утра, вечера',\n 'modifiers': [\n { 'name': 'day', 'src': 'позавчера', 'value': -2 },\n { 'name': 'day', 'src': 'вчера', 'value': -1 },\n { 'name': 'day', 'src': 'сегодня', 'value': 0 },\n { 'name': 'day', 'src': 'завтра', 'value': 1 },\n { 'name': 'day', 'src': 'послезавтра', 'value': 2 },\n { 'name': 'sign', 'src': 'назад', 'value': -1 },\n { 'name': 'sign', 'src': 'через', 'value': 1 },\n { 'name': 'shift', 'src': 'прошл:ый|ой|ом', 'value': -1 },\n { 'name': 'shift', 'src': 'следующ:ий|ей|ем', 'value': 1 }\n ],\n 'relative': function(num, unit, ms, format) {\n var numberWithUnit, last = num.toString().slice(-1), mult;\n switch(true) {\n case num >= 11 && num <= 15: mult = 3; break;\n case last == 1: mult = 1; break;\n case last >= 2 && last <= 4: mult = 2; break;\n default: mult = 3;\n }\n numberWithUnit = num + ' ' + this['units'][(mult * 8) + unit];\n switch(format) {\n case 'duration': return numberWithUnit;\n case 'past': return numberWithUnit + ' назад';\n case 'future': return 'через ' + numberWithUnit;\n }\n },\n 'parse': [\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{months} {year?}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{0?} {shift} {weekday}',\n '{date} {months?} {year?} {1?}'\n ],\n 'timeFrontParse': [\n '{0?} {shift} {weekday}',\n '{date} {months?} {year?} {1?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ru\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Swedish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('sv')\n *\n */\naddLocale('sv', {\n 'plural': true,\n 'units': 'millisekund:|er,sekund:|er,minut:|er,timm:e|ar,dag:|ar,veck:a|or|an,månad:|er|en+manad:|er|en,år:||et+ar:||et',\n 'months': 'jan:uari|,feb:ruari|,mar:s|,apr:il|,maj,jun:i|,jul:i|,aug:usti|,sep:tember|,okt:ober|,nov:ember|,dec:ember|',\n 'weekdays': 'sön:dag|+son:dag|,mån:dag||dagen+man:dag||dagen,tis:dag|,ons:dag|,tor:sdag|,fre:dag|,lör:dag||dag',\n 'numerals': 'noll,en|ett,två|tva,tre,fyra,fem,sex,sju,åtta|atta,nio,tio',\n 'tokens': 'den,för|for',\n 'articles': 'den',\n 'short': '{yyyy}-{MM}-{dd}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday} {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'förrgår|i förrgår|iförrgår|forrgar|i forrgar|iforrgar', 'value': -2 },\n { 'name': 'day', 'src': 'går|i går|igår|gar|i gar|igar', 'value': -1 },\n { 'name': 'day', 'src': 'dag|i dag|idag', 'value': 0 },\n { 'name': 'day', 'src': 'morgon|i morgon|imorgon', 'value': 1 },\n { 'name': 'day', 'src': 'över morgon|övermorgon|i över morgon|i övermorgon|iövermorgon|over morgon|overmorgon|i over morgon|i overmorgon|iovermorgon', 'value': 2 },\n { 'name': 'sign', 'src': 'sedan|sen', 'value': -1 },\n { 'name': 'sign', 'src': 'om', 'value': 1 },\n { 'name': 'shift', 'src': 'i förra|förra|i forra|forra', 'value': -1 },\n { 'name': 'shift', 'src': 'denna', 'value': 0 },\n { 'name': 'shift', 'src': 'nästa|nasta', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{1?} {num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift} {weekday}',\n '{0?} {weekday?},? {date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{day|weekday}',\n '{shift} {weekday}',\n '{0?} {weekday?},? {date} {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"sv\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Simplified Chinese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('zh-CN')\n *\n */\naddLocale('zh-CN', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'allowsFullWidth': true,\n 'timeMarkerOptional': true,\n 'units': '毫秒,秒钟,分钟,小时,天,个星期|周,个月,年',\n 'weekdays': '星期日|日|周日|星期天,星期一|一|周一,星期二|二|周二,星期三|三|周三,星期四|四|周四,星期五|五|周五,星期六|六|周六',\n 'numerals': '〇,一,二,三,四,五,六,七,八,九',\n 'placeholders': '十,百,千,万',\n 'short': '{yyyy}-{MM}-{dd}',\n 'medium': '{yyyy}年{M}月{d}日',\n 'long': '{yyyy}年{M}月{d}日{time}',\n 'full': '{yyyy}年{M}月{d}日{weekday}{time}',\n 'stamp': '{yyyy}年{M}月{d}日{H}:{mm}{dow}',\n 'time': '{tt}{h}点{mm}分',\n 'past': '{num}{unit}{sign}',\n 'future': '{num}{unit}{sign}',\n 'duration': '{num}{unit}',\n 'timeSuffixes': ',秒,分钟?,点|时,日|号,,月,年',\n 'ampm': '上午,下午',\n 'modifiers': [\n { 'name': 'day', 'src': '大前天', 'value': -3 },\n { 'name': 'day', 'src': '前天', 'value': -2 },\n { 'name': 'day', 'src': '昨天', 'value': -1 },\n { 'name': 'day', 'src': '今天', 'value': 0 },\n { 'name': 'day', 'src': '明天', 'value': 1 },\n { 'name': 'day', 'src': '后天', 'value': 2 },\n { 'name': 'day', 'src': '大后天', 'value': 3 },\n { 'name': 'sign', 'src': '前', 'value': -1 },\n { 'name': 'sign', 'src': '后', 'value': 1 },\n { 'name': 'shift', 'src': '上|去', 'value': -1 },\n { 'name': 'shift', 'src': '这', 'value': 0 },\n { 'name': 'shift', 'src': '下|明', 'value': 1 }\n ],\n 'parse': [\n '{num}{unit}{sign}',\n '{shift}{unit:5-7}',\n '{year?}{month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift}{weekday}',\n '{year?}{month?}{date}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"zh-CN\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Traditional Chinese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('zh-TW')\n *\n */\naddLocale('zh-TW', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'allowsFullWidth': true,\n 'timeMarkerOptional': true,\n 'units': '毫秒,秒鐘,分鐘,小時,天,個星期|週,個月,年',\n 'weekdays': '星期日|日|週日|星期天,星期一|一|週一,星期二|二|週二,星期三|三|週三,星期四|四|週四,星期五|五|週五,星期六|六|週六',\n 'numerals': '〇,一,二,三,四,五,六,七,八,九',\n 'placeholders': '十,百,千,万',\n 'short': '{yyyy}/{MM}/{dd}',\n 'medium': '{yyyy}年{M}月{d}日',\n 'long': '{yyyy}年{M}月{d}日{time}',\n 'full': '{yyyy}年{M}月{d}日{weekday}{time}',\n 'stamp': '{yyyy}年{M}月{d}日{H}:{mm}{dow}',\n 'time': '{tt}{h}點{mm}分',\n 'past': '{num}{unit}{sign}',\n 'future': '{num}{unit}{sign}',\n 'duration': '{num}{unit}',\n 'timeSuffixes': ',秒,分鐘?,點|時,日|號,,月,年',\n 'ampm': '上午,下午',\n 'modifiers': [\n { 'name': 'day', 'src': '大前天', 'value': -3 },\n { 'name': 'day', 'src': '前天', 'value': -2 },\n { 'name': 'day', 'src': '昨天', 'value': -1 },\n { 'name': 'day', 'src': '今天', 'value': 0 },\n { 'name': 'day', 'src': '明天', 'value': 1 },\n { 'name': 'day', 'src': '後天', 'value': 2 },\n { 'name': 'day', 'src': '大後天', 'value': 3 },\n { 'name': 'sign', 'src': '前', 'value': -1 },\n { 'name': 'sign', 'src': '後', 'value': 1 },\n { 'name': 'shift', 'src': '上|去', 'value': -1 },\n { 'name': 'shift', 'src': '這', 'value': 0 },\n { 'name': 'shift', 'src': '下|明', 'value': 1 }\n ],\n 'parse': [\n '{num}{unit}{sign}',\n '{shift}{unit:5-7}',\n '{year?}{month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift}{weekday}',\n '{year?}{month?}{date}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"zh-TW\" locale.","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.day;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.days;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysFromNow;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('../date/var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Number.defineInstance({\n\n 'duration': function(n, localeCode) {\n return localeManager.get(localeCode).getDuration(n);\n }\n\n});\n\nmodule.exports = Sugar.Number.duration;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hour;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hours;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecond;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.milliseconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minute;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutes;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.month;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.months;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.second;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.seconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.week;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeks;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.year;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.years;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsFromNow;","'use strict';\n\nvar buildDateRangeUnits = require('../internal/buildDateRangeUnits');\n\nbuildDateRangeUnits();","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeClamp = require('./internal/rangeClamp'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'clamp': function(el) {\n return rangeClamp(this, el);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"clamp\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'clone': function() {\n return new Range(this.start, this.end);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"clone\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'contains': function(el) {\n if (el == null) return false;\n if (el.start && el.end) {\n return el.start >= this.start && el.start <= this.end &&\n el.end >= this.start && el.end <= this.end;\n } else {\n return el >= this.start && el <= this.end;\n }\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"contains\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"days\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeEvery = require('./internal/rangeEvery'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'every': function(amount, everyFn) {\n return rangeEvery(this, amount, false, everyFn);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"every\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"hours\" on Range.prototype.","'use strict';\n\n// Static Methods\nrequire('../date/range');\n\n// Prototype Methods\nrequire('./clamp');\nrequire('./clone');\nrequire('./contains');\nrequire('./days');\nrequire('./every');\nrequire('./hours');\nrequire('./intersect');\nrequire('./isValid');\nrequire('./milliseconds');\nrequire('./minutes');\nrequire('./months');\nrequire('./seconds');\nrequire('./span');\nrequire('./toArray');\nrequire('./toString');\nrequire('./union');\nrequire('./weeks');\nrequire('./years');\n\nmodule.exports = require('sugar-core');","'use strict';\n\nvar cloneRangeMember = require('./cloneRangeMember');\n\nfunction Range(start, end) {\n this.start = cloneRangeMember(start);\n this.end = cloneRangeMember(end);\n}\n\nmodule.exports = Range;","'use strict';\n\nvar MULTIPLIERS = require('../var/MULTIPLIERS'),\n DURATION_UNITS = require('../var/DURATION_UNITS'),\n Range = require('./Range'),\n trunc = require('../../common/var/trunc'),\n forEach = require('../../common/internal/forEach'),\n rangeEvery = require('./rangeEvery'),\n simpleCapitalize = require('../../common/internal/simpleCapitalize'),\n defineOnPrototype = require('../../common/internal/defineOnPrototype');\n\nfunction buildDateRangeUnits() {\n var methods = {};\n forEach(DURATION_UNITS.split('|'), function(unit, i) {\n var name = unit + 's', mult, fn;\n if (i < 4) {\n fn = function() {\n return rangeEvery(this, unit, true);\n };\n } else {\n mult = MULTIPLIERS[simpleCapitalize(name)];\n fn = function() {\n return trunc((this.end - this.start) / mult);\n };\n }\n methods[name] = fn;\n });\n defineOnPrototype(Range, methods);\n}\n\nmodule.exports = buildDateRangeUnits;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n getRangeMemberPrimitiveValue = require('./getRangeMemberPrimitiveValue');\n\nvar isDate = classChecks.isDate;\n\nfunction cloneRangeMember(m) {\n if (isDate(m)) {\n return new Date(m.getTime());\n } else {\n return getRangeMemberPrimitiveValue(m);\n }\n}\n\nmodule.exports = cloneRangeMember;","'use strict';\n\nvar Range = require('./Range'),\n DurationTextFormats = require('../var/DurationTextFormats'),\n incrementDate = require('./incrementDate'),\n getDateForRange = require('./getDateForRange'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n getDateIncrementObject = require('./getDateIncrementObject');\n\nvar sugarDate = namespaceAliases.sugarDate,\n RANGE_REG_FROM_TO = DurationTextFormats.RANGE_REG_FROM_TO,\n RANGE_REG_REAR_DURATION = DurationTextFormats.RANGE_REG_REAR_DURATION,\n RANGE_REG_FRONT_DURATION = DurationTextFormats.RANGE_REG_FRONT_DURATION;\n\nfunction createDateRangeFromString(str) {\n var match, datetime, duration, dio, start, end;\n if (sugarDate.get && (match = str.match(RANGE_REG_FROM_TO))) {\n start = getDateForRange(match[1].replace('from', 'at'));\n end = sugarDate.get(start, match[2]);\n return new Range(start, end);\n }\n if (match = str.match(RANGE_REG_FRONT_DURATION)) {\n duration = match[1];\n datetime = match[2];\n }\n if (match = str.match(RANGE_REG_REAR_DURATION)) {\n datetime = match[1];\n duration = match[2];\n }\n if (datetime && duration) {\n start = getDateForRange(datetime);\n dio = getDateIncrementObject(duration);\n end = incrementDate(start, dio[0], dio[1]);\n } else {\n start = str;\n }\n return new Range(getDateForRange(start), getDateForRange(end));\n}\n\nmodule.exports = createDateRangeFromString;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n namespaceAliases = require('../../common/var/namespaceAliases');\n\nvar isDate = classChecks.isDate,\n sugarDate = namespaceAliases.sugarDate;\n\nfunction getDateForRange(d) {\n if (isDate(d)) {\n return d;\n } else if (d == null) {\n return new Date();\n } else if (sugarDate.create) {\n return sugarDate.create(d);\n }\n return new Date(d);\n}\n\nmodule.exports = getDateForRange;","'use strict';\n\nvar DURATION_REG = require('../var/DURATION_REG'),\n classChecks = require('../../common/var/classChecks'),\n simpleCapitalize = require('../../common/internal/simpleCapitalize');\n\nvar isNumber = classChecks.isNumber;\n\nfunction getDateIncrementObject(amt) {\n var match, val, unit;\n if (isNumber(amt)) {\n return [amt, 'Milliseconds'];\n }\n match = amt.match(DURATION_REG);\n val = +match[1] || 1;\n unit = simpleCapitalize(match[2].toLowerCase());\n if (unit.match(/hour|minute|second/i)) {\n unit += 's';\n } else if (unit === 'Year') {\n unit = 'FullYear';\n } else if (unit === 'Week') {\n unit = 'Date';\n val *= 7;\n } else if (unit === 'Day') {\n unit = 'Date';\n }\n return [val, unit];\n}\n\nmodule.exports = getDateIncrementObject;","'use strict';\n\nvar mathAliases = require('../../common/var/mathAliases'),\n getPrecision = require('./getPrecision');\n\nvar max = mathAliases.max;\n\nfunction getGreaterPrecision(n1, n2) {\n return max(getPrecision(n1), getPrecision(n2));\n}\n\nmodule.exports = getGreaterPrecision;","'use strict';\n\nvar periodSplit = require('../../common/internal/periodSplit');\n\nfunction getPrecision(n) {\n var split = periodSplit(n.toString());\n return split[1] ? split[1].length : 0;\n}\n\nmodule.exports = getPrecision;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks');\n\nvar isString = classChecks.isString;\n\nfunction getRangeMemberNumericValue(m) {\n return isString(m) ? m.charCodeAt(0) : m;\n}\n\nmodule.exports = getRangeMemberNumericValue;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks');\n\nvar isDate = classChecks.isDate;\n\nfunction getRangeMemberPrimitiveValue(m) {\n if (m == null) return m;\n return isDate(m) ? m.getTime() : m.valueOf();\n}\n\nmodule.exports = getRangeMemberPrimitiveValue;","'use strict';\n\nvar MULTIPLIERS = require('../var/MULTIPLIERS'),\n callDateSet = require('../../common/internal/callDateSet'),\n callDateGet = require('../../common/internal/callDateGet');\n\nfunction incrementDate(src, amount, unit) {\n var mult = MULTIPLIERS[unit], d;\n if (mult) {\n d = new Date(src.getTime() + (amount * mult));\n } else {\n d = new Date(src);\n callDateSet(d, unit, callDateGet(src, unit) + amount);\n }\n return d;\n}\n\nmodule.exports = incrementDate;","'use strict';\n\nvar withPrecision = require('../../common/internal/withPrecision');\n\nfunction incrementNumber(current, amount, precision) {\n return withPrecision(current + amount, precision);\n}\n\nmodule.exports = incrementNumber;","'use strict';\n\nvar chr = require('../../common/var/chr');\n\nfunction incrementString(current, amount) {\n return chr(current.charCodeAt(0) + amount);\n}\n\nmodule.exports = incrementString;","'use strict';\n\nvar valueIsNotInfinite = require('./valueIsNotInfinite'),\n getRangeMemberPrimitiveValue = require('./getRangeMemberPrimitiveValue');\n\nfunction isValidRangeMember(m) {\n var val = getRangeMemberPrimitiveValue(m);\n return (!!val || val === 0) && valueIsNotInfinite(m);\n}\n\nmodule.exports = isValidRangeMember;","'use strict';\n\nvar cloneRangeMember = require('./cloneRangeMember');\n\nfunction rangeClamp(range, obj) {\n var clamped,\n start = range.start,\n end = range.end,\n min = end < start ? end : start,\n max = start > end ? start : end;\n if (obj < min) {\n clamped = min;\n } else if (obj > max) {\n clamped = max;\n } else {\n clamped = obj;\n }\n return cloneRangeMember(clamped);\n}\n\nmodule.exports = rangeClamp;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n rangeIsValid = require('./rangeIsValid'),\n incrementDate = require('./incrementDate'),\n incrementNumber = require('./incrementNumber'),\n incrementString = require('./incrementString'),\n getGreaterPrecision = require('./getGreaterPrecision'),\n getDateIncrementObject = require('./getDateIncrementObject');\n\nvar isNumber = classChecks.isNumber,\n isString = classChecks.isString,\n isDate = classChecks.isDate,\n isFunction = classChecks.isFunction;\n\nfunction rangeEvery(range, step, countOnly, fn) {\n var increment,\n precision,\n dio,\n unit,\n start = range.start,\n end = range.end,\n inverse = end < start,\n current = start,\n index = 0,\n result = [];\n\n if (!rangeIsValid(range)) {\n return countOnly ? NaN : [];\n }\n if (isFunction(step)) {\n fn = step;\n step = null;\n }\n step = step || 1;\n if (isNumber(start)) {\n precision = getGreaterPrecision(start, step);\n increment = function() {\n return incrementNumber(current, step, precision);\n };\n } else if (isString(start)) {\n increment = function() {\n return incrementString(current, step);\n };\n } else if (isDate(start)) {\n dio = getDateIncrementObject(step);\n step = dio[0];\n unit = dio[1];\n increment = function() {\n return incrementDate(current, step, unit);\n };\n }\n // Avoiding infinite loops\n if (inverse && step > 0) {\n step *= -1;\n }\n while(inverse ? current >= end : current <= end) {\n if (!countOnly) {\n result.push(current);\n }\n if (fn) {\n fn(current, index, range);\n }\n current = increment();\n index++;\n }\n return countOnly ? index - 1 : result;\n}\n\nmodule.exports = rangeEvery;","'use strict';\n\nvar isValidRangeMember = require('./isValidRangeMember');\n\nfunction rangeIsValid(range) {\n return isValidRangeMember(range.start) &&\n isValidRangeMember(range.end) &&\n typeof range.start === typeof range.end;\n}\n\nmodule.exports = rangeIsValid;","'use strict';\n\nfunction valueIsNotInfinite(m) {\n return m !== -Infinity && m !== Infinity;\n}\n\nmodule.exports = valueIsNotInfinite;","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'intersect': function(range) {\n if (range.start > this.end || range.end < this.start) {\n return new Range(NaN, NaN);\n }\n return new Range(\n this.start > range.start ? this.start : range.start,\n this.end < range.end ? this.end : range.end\n );\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"intersect\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeIsValid = require('./internal/rangeIsValid'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'isValid': function() {\n return rangeIsValid(this);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"isValid\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"milliseconds\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"minutes\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"months\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"seconds\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n mathAliases = require('../common/var/mathAliases'),\n rangeIsValid = require('./internal/rangeIsValid'),\n defineOnPrototype = require('../common/internal/defineOnPrototype'),\n getRangeMemberNumericValue = require('./internal/getRangeMemberNumericValue');\n\nvar abs = mathAliases.abs;\n\ndefineOnPrototype(Range, {\n\n 'span': function() {\n var n = getRangeMemberNumericValue(this.end) - getRangeMemberNumericValue(this.start);\n return rangeIsValid(this) ? abs(n) + 1 : NaN;\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"span\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeEvery = require('./internal/rangeEvery'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'toArray': function() {\n return rangeEvery(this);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"toArray\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeIsValid = require('./internal/rangeIsValid'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'toString': function() {\n return rangeIsValid(this) ? this.start + '..' + this.end : 'Invalid Range';\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"toString\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'union': function(range) {\n return new Range(\n this.start < range.start ? this.start : range.start,\n this.end > range.end ? this.end : range.end\n );\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"union\" on Range.prototype.","'use strict';\n\nvar DURATION_UNITS = require('./DURATION_UNITS');\n\nmodule.exports = RegExp('(\\\\d+)?\\\\s*('+ DURATION_UNITS +')s?', 'i');","'use strict';\n\nmodule.exports = 'year|month|week|day|hour|minute|second|millisecond';","'use strict';\n\nvar Range = require('../internal/Range'),\n classChecks = require('../../common/var/classChecks'),\n getDateForRange = require('../internal/getDateForRange'),\n createDateRangeFromString = require('../internal/createDateRangeFromString');\n\nvar isString = classChecks.isString;\n\nvar DateRangeConstructor = function(start, end) {\n if (arguments.length === 1 && isString(start)) {\n return createDateRangeFromString(start);\n }\n return new Range(getDateForRange(start), getDateForRange(end));\n};\n\nmodule.exports = DateRangeConstructor;","'use strict';\n\nvar FULL_CAPTURED_DURATION = require('./FULL_CAPTURED_DURATION');\n\nmodule.exports = {\n RANGE_REG_FROM_TO: /(?:from)?\\s*(.+)\\s+(?:to|until)\\s+(.+)$/i,\n RANGE_REG_REAR_DURATION: RegExp('(.+)\\\\s*for\\\\s*' + FULL_CAPTURED_DURATION, 'i'),\n RANGE_REG_FRONT_DURATION: RegExp('(?:for)?\\\\s*'+ FULL_CAPTURED_DURATION +'\\\\s*(?:starting)?\\\\s(?:at\\\\s)?(.+)', 'i')\n};","'use strict';\n\nvar DURATION_UNITS = require('./DURATION_UNITS');\n\nmodule.exports = '((?:\\\\d+)?\\\\s*(?:' + DURATION_UNITS + '))s?';","'use strict';\n\nvar MULTIPLIERS = {\n 'Hours': 60 * 60 * 1000,\n 'Minutes': 60 * 1000,\n 'Seconds': 1000,\n 'Milliseconds': 1\n};\n\nmodule.exports = MULTIPLIERS;","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"weeks\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"years\" on Range.prototype.","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n","/**\r\n * Array utilities\r\n */\r\n\r\nimport {matchCase} from './string';\r\n\r\n/**\r\n * Checks if given item can be found in the passed collection\r\n * @param {Array} arr collection\r\n * @param {Any} val item to search\r\n * @param {Boolean} caseSensitive respects case if true\r\n * @return {Boolean}\r\n */\r\nexport const has = (arr, val, caseSensitive) => {\r\n let sCase = Boolean(caseSensitive);\r\n for (var i = 0, l = arr.length; i < l; i++) {\r\n if (matchCase(arr[i].toString(), sCase) === val) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n","import {DateType} from './modules/dateType';\r\nimport {Help} from './modules/help';\r\nimport {State} from './modules/state';\r\nimport {GridLayout} from './modules/gridLayout';\r\nimport {Loader} from './modules/loader';\r\nimport {HighlightKeyword} from './modules/highlightKeywords';\r\nimport {PopupFilter} from './modules/popupFilter';\r\nimport {MarkActiveColumns} from './modules/markActiveColumns';\r\nimport {RowsCounter} from './modules/rowsCounter';\r\nimport {StatusBar} from './modules/statusBar';\r\nimport {ClearButton} from './modules/clearButton';\r\nimport {AlternateRows} from './modules/alternateRows';\r\nimport {NoResults} from './modules/noResults';\r\nimport {Paging} from './modules/paging';\r\nimport {Toolbar} from './modules/toolbar';\r\n\r\n/**\r\n * Filter types\r\n */\r\n\r\n/**\r\n * Input filter type\r\n * @type {String}\r\n */\r\nexport const INPUT = 'input';\r\n/**\r\n * Select filter type\r\n * @type {String}\r\n */\r\nexport const SELECT = 'select';\r\n/**\r\n * Multiple select filter type\r\n * @type {String}\r\n */\r\nexport const MULTIPLE = 'multiple';\r\n/**\r\n * Checklist filter type\r\n * @type {String}\r\n */\r\nexport const CHECKLIST = 'checklist';\r\n/**\r\n * None filter type\r\n * @type {String}\r\n */\r\nexport const NONE = 'none';\r\n\r\n/**\r\n * Key codes\r\n */\r\n\r\n/**\r\n * Enter key code\r\n * @type {Number}\r\n */\r\nexport const ENTER_KEY = 13;\r\n/**\r\n * Tab key code\r\n * @type {Number}\r\n */\r\nexport const TAB_KEY = 9;\r\n/**\r\n * Escape key code\r\n * @type {Number}\r\n */\r\nexport const ESC_KEY = 27;\r\n/**\r\n * Up arrow key code\r\n * @type {Number}\r\n */\r\nexport const UP_ARROW_KEY = 38;\r\n/**\r\n * Down arrow key code\r\n * @type {Number}\r\n */\r\nexport const DOWN_ARROW_KEY = 40;\r\n\r\n/**\r\n * HTML tags\r\n */\r\n\r\n/**\r\n * Header cell tag\r\n * @type {String}\r\n */\r\nexport const HEADER_TAG = 'TH';\r\n/**\r\n * Cell tag\r\n * @type {String}\r\n */\r\nexport const CELL_TAG = 'TD';\r\n\r\n/**\r\n * Data types\r\n */\r\n\r\n/**\r\n * String\r\n * @type {String}\r\n */\r\nexport const STRING = 'string';\r\n\r\n/**\r\n * Number\r\n * @type {String}\r\n */\r\nexport const NUMBER = 'number';\r\n\r\n/**\r\n * Formatted number\r\n * @type {String}\r\n */\r\nexport const FORMATTED_NUMBER = 'formatted-number';\r\n\r\n/**\r\n * Date\r\n * @type {String}\r\n */\r\nexport const DATE = 'date';\r\n\r\n/**\r\n * IP address\r\n * @type {String}\r\n */\r\nexport const IP_ADDRESS = 'ipaddress';\r\n\r\n/**\r\n * Default values\r\n */\r\n\r\n/**\r\n * Auto filter delay in milliseconds\r\n * @type {Number}\r\n */\r\nexport const AUTO_FILTER_DELAY = 750;\r\n\r\n/**\r\n * TableFilter features definitions\r\n * @type {Object}\r\n */\r\nexport const FEATURES = {\r\n dateType: {\r\n class: DateType,\r\n name: 'dateType'\r\n },\r\n help: {\r\n class: Help,\r\n name: 'help',\r\n enforce: true\r\n },\r\n state: {\r\n class: State,\r\n name: 'state'\r\n },\r\n markActiveColumns: {\r\n class: MarkActiveColumns,\r\n name: 'markActiveColumns'\r\n },\r\n gridLayout: {\r\n class: GridLayout,\r\n name: 'gridLayout'\r\n },\r\n loader: {\r\n class: Loader,\r\n name: 'loader'\r\n },\r\n highlightKeyword: {\r\n class: HighlightKeyword,\r\n name: 'highlightKeyword',\r\n property: 'highlightKeywords'\r\n },\r\n popupFilter: {\r\n class: PopupFilter,\r\n name: 'popupFilter',\r\n property: 'popupFilters'\r\n },\r\n rowsCounter: {\r\n class: RowsCounter,\r\n name: 'rowsCounter'\r\n },\r\n statusBar: {\r\n class: StatusBar,\r\n name: 'statusBar'\r\n },\r\n clearButton: {\r\n class: ClearButton,\r\n name: 'clearButton',\r\n property: 'btnReset'\r\n },\r\n alternateRows: {\r\n class: AlternateRows,\r\n name: 'alternateRows'\r\n },\r\n noResults: {\r\n class: NoResults,\r\n name: 'noResults'\r\n },\r\n paging: {\r\n class: Paging,\r\n name: 'paging'\r\n },\r\n toolbar: {\r\n class: Toolbar,\r\n name: 'toolbar',\r\n enforce: true\r\n }\r\n};\r\n","import {root} from './root';\r\n\r\n/**\r\n * Cookie utilities\r\n */\r\n\r\nconst doc = root.document;\r\n\r\nexport default {\r\n\r\n /**\r\n * Write a cookie\r\n * @param {String} name Name of the cookie\r\n * @param {String} value Value of the cookie\r\n * @param {Number} hours Cookie duration in hours\r\n */\r\n write(name, value, hours) {\r\n let expire = '';\r\n if (hours) {\r\n expire = new Date((new Date()).getTime() + hours * 3600000);\r\n expire = '; expires=' + expire.toGMTString();\r\n }\r\n doc.cookie = name + '=' + escape(value) + expire;\r\n },\r\n\r\n /**\r\n * Read a cookie\r\n * @param {String} name Name of the cookie\r\n * @returns {String} Value of the cookie\r\n */\r\n read(name) {\r\n let cookieValue = '',\r\n search = name + '=';\r\n if (doc.cookie.length > 0) {\r\n let cookie = doc.cookie,\r\n offset = cookie.indexOf(search);\r\n if (offset !== -1) {\r\n offset += search.length;\r\n let end = cookie.indexOf(';', offset);\r\n if (end === -1) {\r\n end = cookie.length;\r\n }\r\n cookieValue = unescape(cookie.substring(offset, end));\r\n }\r\n }\r\n return cookieValue;\r\n },\r\n\r\n /**\r\n * Remove a cookie\r\n * @param {String} name Name of the cookie\r\n */\r\n remove(name) {\r\n this.write(name, '', -1);\r\n }\r\n\r\n};\r\n","import {root} from './root';\r\nimport {isArray, isString, isUndef} from './types';\r\nimport {trim} from './string';\r\n\r\n/**\r\n * DOM utilities\r\n */\r\n\r\nconst doc = root.document;\r\n\r\n/**\r\n * Returns text + text of children of given node\r\n * @param {NodeElement} node\r\n * @return {String}\r\n */\r\nexport const getText = (node) => {\r\n if (isUndef(node.textContent)) {\r\n return trim(node.innerText);\r\n }\r\n return trim(node.textContent);\r\n};\r\n\r\n/**\r\n * Returns the first text node contained in the supplied node\r\n * @param {NodeElement} node node\r\n * @return {String}\r\n */\r\nexport const getFirstTextNode = (node) => {\r\n for (let i = 0; i < node.childNodes.length; i++) {\r\n let n = node.childNodes[i];\r\n if (n.nodeType === 3) {\r\n return n.data;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Creates an html element with given collection of attributes\r\n * @param {String} tag a string of the html tag to create\r\n * @param {Array} an undetermined number of arrays containing the with 2\r\n * items, the attribute name and its value ['id','myId']\r\n * @return {Object} created element\r\n */\r\nexport const createElm = (...args) => {\r\n let tag = args[0];\r\n if (!isString(tag)) {\r\n return null;\r\n }\r\n\r\n let el = doc.createElement(tag);\r\n for (let i = 0; i < args.length; i++) {\r\n let arg = args[i];\r\n\r\n if (isArray(arg) && arg.length === 2) {\r\n el.setAttribute(arg[0], arg[1]);\r\n }\r\n }\r\n return el;\r\n};\r\n\r\n/**\r\n * Removes passed node from DOM\r\n * @param {DOMElement} node\r\n * @return {DOMElement} old node reference\r\n */\r\nexport const removeElm = (node) => node.parentNode.removeChild(node);\r\n\r\n/**\r\n * Returns a text node with given text\r\n * @param {String} txt\r\n * @return {Object}\r\n */\r\nexport const createText = (txt) => doc.createTextNode(txt);\r\n\r\n/**\r\n * Determine whether the passed elements is assigned the given class\r\n * @param {DOMElement} ele DOM element\r\n * @param {String} cls CSS class name\r\n * @returns {Boolean}\r\n */\r\nexport const hasClass = (ele, cls) => {\r\n if (isUndef(ele)) {\r\n return false;\r\n }\r\n\r\n if (supportsClassList()) {\r\n return ele.classList.contains(cls);\r\n }\r\n return ele.className.match(new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)'));\r\n};\r\n\r\n/**\r\n * Adds the specified class to the passed element\r\n * @param {DOMElement} ele DOM element\r\n * @param {String} cls CSS class name\r\n */\r\nexport const addClass = (ele, cls) => {\r\n if (isUndef(ele)) {\r\n return;\r\n }\r\n\r\n if (supportsClassList()) {\r\n ele.classList.add(cls);\r\n return;\r\n }\r\n\r\n if (ele.className === '') {\r\n ele.className = cls;\r\n }\r\n else if (!hasClass(ele, cls)) {\r\n ele.className += ' ' + cls;\r\n }\r\n};\r\n\r\n/**\r\n * Removes the specified class to the passed element\r\n * @param {DOMElement} ele DOM element\r\n * @param {String} cls CSS class name\r\n */\r\nexport const removeClass = (ele, cls) => {\r\n if (isUndef(ele)) {\r\n return;\r\n }\r\n\r\n if (supportsClassList()) {\r\n ele.classList.remove(cls);\r\n return;\r\n }\r\n let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)', 'g');\r\n ele.className = ele.className.replace(reg, '');\r\n};\r\n\r\n/**\r\n * Creates and returns an option element\r\n * @param {String} text option text\r\n * @param {String} value option value\r\n * @param {Boolean} isSel whether option is selected\r\n * @return {Object} option element\r\n */\r\nexport const createOpt = (text, value, isSel) => {\r\n let isSelected = isSel ? true : false;\r\n let opt = isSelected ?\r\n createElm('option', ['value', value], ['selected', 'true']) :\r\n createElm('option', ['value', value]);\r\n opt.appendChild(createText(text));\r\n return opt;\r\n};\r\n\r\n/**\r\n * Creates and returns a checklist item\r\n * @param {String} id index of check item\r\n * @param {String} chkValue check item value\r\n * @param {String} labelText check item label text\r\n * @param {Array} extraAttr array containing attribute name and its value\r\n * @return {Object} li DOM element\r\n */\r\nexport const createCheckItem = (id, chkValue, labelText, extraAttr = []) => {\r\n let li = createElm('li');\r\n let label = createElm('label', ['for', id]);\r\n let check = createElm('input',\r\n ['id', id],\r\n ['name', id],\r\n ['type', 'checkbox'],\r\n ['value', chkValue],\r\n extraAttr\r\n );\r\n label.appendChild(check);\r\n label.appendChild(createText(labelText));\r\n li.appendChild(label);\r\n li.label = label;\r\n li.check = check;\r\n return li;\r\n};\r\n\r\n/**\r\n * Returns the element matching the supplied Id\r\n * @param {String} id Element identifier\r\n * @return {DOMElement}\r\n */\r\nexport const elm = (id) => doc.getElementById(id);\r\n\r\n/**\r\n * Returns list of element matching the supplied tag name\r\n * @param {String} tagname Tag name\r\n * @return {NodeList}\r\n */\r\nexport const tag = (o, tagname) => o.getElementsByTagName(tagname);\r\n\r\n// HTML5 classList API\r\nfunction supportsClassList() {\r\n return doc.documentElement.classList;\r\n}\r\n","/**\r\n * Event emitter class\r\n */\r\nexport class Emitter {\r\n /**\r\n * Creates an instance of Emitter.\r\n */\r\n constructor() {\r\n /**\r\n * Events object\r\n * @type {Object}\r\n */\r\n this.events = {};\r\n }\r\n\r\n /**\r\n * Subscribe to an event\r\n * @param {Array} evts Collection of event names\r\n * @param {Function} fn Function invoked when event is emitted\r\n */\r\n on(evts, fn) {\r\n evts.forEach((evt) => {\r\n this.events[evt] = this.events[evt] || [];\r\n this.events[evt].push(fn);\r\n });\r\n }\r\n\r\n /**\r\n * Unsubscribe to an event\r\n * @param {Array} evts Collection of event names\r\n * @param {Function} fn Function invoked when event is emitted\r\n */\r\n off(evts, fn) {\r\n evts.forEach((evt) => {\r\n if (evt in this.events) {\r\n this.events[evt].splice(this.events[evt].indexOf(fn), 1);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Emit an event\r\n * @param {String} evt Event name followed by any other argument passed to\r\n * the invoked function\r\n */\r\n emit(evt /*, args...*/) {\r\n if (evt in this.events) {\r\n for (let i = 0; i < this.events[evt].length; i++) {\r\n this.events[evt][i].apply(this, [].slice.call(arguments, 1));\r\n }\r\n }\r\n }\r\n}\r\n","import {root} from './root';\r\n\r\n/**\r\n * DOM event utilities\r\n */\r\n\r\n/**\r\n * Add event handler for specified event on passed element\r\n *\r\n * @param {DOMElement} obj Element\r\n * @param {String} type Event type\r\n * @param {Function} Handler\r\n * @param {Boolean} capture Specifiy whether the event should be executed in\r\n * the capturing or in the bubbling phase\r\n */\r\nexport const addEvt = (obj, type, func, capture) => {\r\n if (obj.addEventListener) {\r\n obj.addEventListener(type, func, capture);\r\n }\r\n else if (obj.attachEvent) {\r\n obj.attachEvent('on' + type, func);\r\n } else {\r\n obj['on' + type] = func;\r\n }\r\n};\r\n\r\n/**\r\n * Remove event handler for specified event on passed element\r\n *\r\n * @param {DOMElement} obj Element\r\n * @param {String} type Event type\r\n * @param {Function} Handler\r\n * @param {Boolean} capture Specifiy whether the event should be executed in\r\n * the capturing or in the bubbling phase\r\n */\r\nexport const removeEvt = (obj, type, func, capture) => {\r\n if (obj.removeEventListener) {\r\n obj.removeEventListener(type, func, capture);\r\n } else if (obj.detachEvent) {\r\n obj.detachEvent('on' + type, func);\r\n } else {\r\n obj['on' + type] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Prevents further propagation of the current event in the bubbling phase\r\n *\r\n * @param {Event} evt Event on the DOM\r\n */\r\nexport const stopEvt = (evt) => {\r\n if (!evt) {\r\n evt = root.event;\r\n }\r\n if (evt.stopPropagation) {\r\n evt.stopPropagation();\r\n } else {\r\n evt.cancelBubble = true;\r\n }\r\n};\r\n\r\n/**\r\n * Cancels the event if it is cancelable, without stopping further\r\n * propagation of the event.\r\n *\r\n * @param {Event} evt Event on the DOM\r\n */\r\nexport const cancelEvt = (evt) => {\r\n if (!evt) {\r\n evt = root.event;\r\n }\r\n if (evt.preventDefault) {\r\n evt.preventDefault();\r\n } else {\r\n evt.returnValue = false;\r\n }\r\n};\r\n\r\n/**\r\n * Reference to the object that dispatched the event\r\n *\r\n * @param {Event} evt Event on the DOM\r\n * @returns {DOMElement}\r\n */\r\nexport const targetEvt = (evt) => {\r\n if (!evt) {\r\n evt = root.event;\r\n }\r\n return evt.target || evt.srcElement;\r\n};\r\n\r\n/**\r\n * Returns the Unicode value of pressed key\r\n *\r\n * @param {Event} evt Event on the DOM\r\n * @returns {Number}\r\n */\r\nexport const keyCode = (evt) => {\r\n return evt.charCode ? evt.charCode :\r\n (evt.keyCode ? evt.keyCode : (evt.which ? evt.which : 0));\r\n};\r\n\r\n/**\r\n * Check code of pressed key is one of the expected key codes\r\n *\r\n * @param {Event} evt key event\r\n * @param {Array} keyCodes list of keycodes to check\r\n */\r\nexport const isKeyPressed = (evt, keyCodes = []) => {\r\n return keyCodes.indexOf(keyCode(evt)) !== -1;\r\n};\r\n\r\n/**\r\n * Bind passed function to passed scope\r\n * @param {Function} fn function\r\n * @param {Object} scope object instance\r\n */\r\nexport function bound(fn, scope) {\r\n let boundFnName = `${fn.name}_bound`;\r\n if (!scope[boundFnName]) {\r\n scope[boundFnName] = fn.bind(scope);\r\n }\r\n return scope[boundFnName];\r\n}\r\n","import {TfBase} from './tfBase';\r\n\r\nconst NOT_IMPLEMENTED = 'Not implemented.';\r\n\r\n/**\r\n * Base class defining the interface of a TableFilter feature\r\n */\r\nexport class Feature extends TfBase {\r\n /**\r\n * Creates an instance of Feature\r\n * @param {Object} tf TableFilter instance\r\n * @param {String} feature Feature name known by TableFilter\r\n */\r\n constructor(tf, feature, cls) {\r\n super(tf, cls);\r\n\r\n /**\r\n * TableFilter instance\r\n * @type {TableFilter}\r\n */\r\n this.tf = tf;\r\n\r\n /**\r\n * Feature name\r\n * @type {String}\r\n */\r\n this.feature = feature;\r\n\r\n /**\r\n * TableFilter feature setting\r\n * @type {Boolean}\r\n */\r\n this.enabled = tf[feature];\r\n\r\n /**\r\n * TableFilter configuration\r\n * @type {Object}\r\n */\r\n this.config = tf.config();\r\n\r\n /**\r\n * TableFilter emitter instance\r\n * @type {Emitter}\r\n */\r\n this.emitter = tf.emitter;\r\n\r\n /**\r\n * Field indicating whether Feature is initialized\r\n * @type {Boolean}\r\n */\r\n this.initialized = false;\r\n\r\n /** Subscribe to destroy event */\r\n this.emitter.on(['destroy'], () => this.destroy());\r\n }\r\n\r\n /**\r\n * Initialize the feature\r\n */\r\n init() {\r\n throw new Error(NOT_IMPLEMENTED);\r\n }\r\n\r\n /**\r\n * Reset the feature after being disabled\r\n */\r\n reset() {\r\n this.enable();\r\n this.init();\r\n }\r\n\r\n /**\r\n * Destroy the feature\r\n */\r\n destroy() {\r\n throw new Error(NOT_IMPLEMENTED);\r\n }\r\n\r\n /**\r\n * Enable the feature\r\n */\r\n enable() {\r\n this.enabled = true;\r\n }\r\n\r\n /**\r\n * Disable the feature\r\n */\r\n disable() {\r\n this.enabled = false;\r\n }\r\n\r\n /**\r\n * Indicate whether the feature is enabled or not\r\n * @returns {Boolean}\r\n */\r\n isEnabled() {\r\n return this.enabled === true;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {addClass, removeClass} from '../dom';\r\nimport {defaultsStr} from '../settings';\r\nimport {bound} from '../event';\r\n\r\n/**\r\n * Rows with alternating background color for improved readability\r\n */\r\nexport class AlternateRows extends Feature {\r\n\r\n /**\r\n * Creates an instance of AlternateRows.\r\n *\r\n * @param {Object} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'alternateRows');\r\n\r\n let config = this.config;\r\n /**\r\n * Css class for even rows (default: 'even')\r\n * @type {String}\r\n */\r\n this.evenCss = defaultsStr(config.even_row_css_class, 'even');\r\n\r\n /**\r\n * Css class for odd rows (default: 'odd')\r\n * @type {String}\r\n */\r\n this.oddCss = defaultsStr(config.odd_row_css_class, 'odd');\r\n }\r\n\r\n /**\r\n * Sets alternating rows color\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.processAll();\r\n\r\n // Subscribe to events\r\n this.emitter.on(['row-processed', 'row-paged'],\r\n bound(this.processRowHandler, this));\r\n this.emitter.on(['column-sorted', 'rows-changed'],\r\n bound(this.processAll, this));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Apply background to all valid rows\r\n */\r\n processAll() {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let validRowsIndex = tf.getValidRows(true);\r\n let indexLen = validRowsIndex.length;\r\n let idx = 0;\r\n\r\n //alternates bg color\r\n for (let j = 0; j < indexLen; j++) {\r\n let rowIdx = validRowsIndex[j];\r\n this.setRowBg(rowIdx, idx);\r\n idx++;\r\n }\r\n }\r\n\r\n /**\r\n * Set/remove row background based on row validation\r\n * @param {Number} rowIdx Row index\r\n * @param {Number} arrIdx Array index\r\n * @param {Boolean} isValid Valid row flag\r\n */\r\n processRow(rowIdx, arrIdx, isValid) {\r\n if (isValid) {\r\n this.setRowBg(rowIdx, arrIdx);\r\n } else {\r\n this.removeRowBg(rowIdx);\r\n }\r\n }\r\n\r\n /**\r\n * Sets row background color\r\n * @param {Number} rowIdx Row index\r\n * @param {Number} idx Valid rows collection index needed to calculate bg\r\n * color\r\n * @private\r\n */\r\n setRowBg(rowIdx, idx) {\r\n if (!this.isEnabled() || isNaN(rowIdx)) {\r\n return;\r\n }\r\n let rows = this.tf.dom().rows;\r\n let i = isNaN(idx) ? rowIdx : idx;\r\n this.removeRowBg(rowIdx);\r\n\r\n addClass(rows[rowIdx], (i % 2) ? this.evenCss : this.oddCss);\r\n }\r\n\r\n /**\r\n * Removes row background color\r\n * @param {Number} idx Row index\r\n * @private\r\n */\r\n removeRowBg(idx) {\r\n if (isNaN(idx)) {\r\n return;\r\n }\r\n let rows = this.tf.dom().rows;\r\n removeClass(rows[idx], this.oddCss);\r\n removeClass(rows[idx], this.evenCss);\r\n }\r\n\r\n /** @private */\r\n processRowHandler(tf, rowIndex, arrIndex, isValid) {\r\n this.processRow(rowIndex, arrIndex, isValid);\r\n }\r\n\r\n /**\r\n * Removes all alternating backgrounds\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let eachRow = this.tf.eachRow(0);\r\n eachRow((row, i) => this.removeRowBg(i));\r\n\r\n // Unsubscribe to events\r\n this.emitter.off(['row-processed', 'row-paged'],\r\n bound(this.processRowHandler, this));\r\n this.emitter.off(['column-sorted', 'rows-changed'],\r\n bound(this.processAll, this));\r\n\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {Feature} from '../feature';\r\nimport {\r\n ignoreCase, numSortAsc, numSortDesc,\r\n dateSortAsc, sortNumberStr, sortDateStr\r\n} from '../sort';\r\nimport {isArray, isObj, isEmpty} from '../types';\r\nimport {NUMBER, FORMATTED_NUMBER, DATE} from '../const';\r\n\r\n/**\r\n * Base class for Dropdown and CheckList UI components\r\n * @export\r\n * @class BaseDropdown\r\n * @extends {Feature}\r\n */\r\nexport class BaseDropdown extends Feature {\r\n\r\n /**\r\n * Creates an instance of BaseDropdown\r\n * @param {TableFilter} tf\r\n */\r\n constructor(tf) {\r\n super(tf, 'baseDropdown');\r\n\r\n let f = this.config;\r\n\r\n /**\r\n * Filter options custom sorter on a column basis\r\n * @type {Object}\r\n */\r\n this.customSorter = isObj(f.filter_options_sorter) &&\r\n isArray(f.filter_options_sorter.col) &&\r\n isArray(f.filter_options_sorter.comparer) ?\r\n f.filter_options_sorter :\r\n null;\r\n\r\n // TODO: move here all properties shared by Dropdown CheckList\r\n\r\n /**\r\n * Has custom options\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isCustom = false;\r\n\r\n /**\r\n * List of options values\r\n * @type {Array}\r\n * @private\r\n */\r\n this.opts = [];\r\n\r\n /**\r\n * List of options texts for custom values\r\n * @type {Array}\r\n * @private\r\n */\r\n this.optsTxt = [];\r\n\r\n /**\r\n * List of options to be excluded from the checklist filter\r\n * @type {Array}\r\n * @private\r\n */\r\n this.excludedOpts = [];\r\n }\r\n\r\n /**\r\n * Sort passed options based on the type of the specified column\r\n * @param {Number} colIndex Column index\r\n * @param {Array} [options=[]] Collection of values\r\n * @return {Array} Sorted values\r\n * @private\r\n */\r\n sortOptions(colIndex, options = []) {\r\n let tf = this.tf;\r\n\r\n if (tf.isCustomOptions(colIndex) || !tf.sortSlc ||\r\n (isArray(tf.sortSlc) && tf.sortSlc.indexOf(colIndex) === -1)) {\r\n return options;\r\n }\r\n\r\n let { caseSensitive, sortNumDesc } = tf;\r\n let compareFn;\r\n\r\n if (this.customSorter &&\r\n this.customSorter.col.indexOf(colIndex) !== -1) {\r\n var idx = this.customSorter.col.indexOf(colIndex);\r\n compareFn = this.customSorter.comparer[idx];\r\n }\r\n else if (tf.hasType(colIndex, [NUMBER, FORMATTED_NUMBER])) {\r\n let decimal = tf.getDecimal(colIndex);\r\n let comparer = numSortAsc;\r\n if (sortNumDesc === true || sortNumDesc.indexOf(colIndex) !== -1) {\r\n comparer = numSortDesc;\r\n }\r\n compareFn = sortNumberStr(comparer, decimal);\r\n }\r\n else if (tf.hasType(colIndex, [DATE])) {\r\n let locale = tf.feature('dateType').getLocale(colIndex);\r\n let comparer = dateSortAsc;\r\n compareFn = sortDateStr(comparer, locale);\r\n } else { // string\r\n compareFn = caseSensitive ? undefined : ignoreCase;\r\n }\r\n\r\n return options.sort(compareFn);\r\n }\r\n\r\n /**\r\n * Regenerate filters of specified columns and maintain selection if any\r\n * @param {Array} colIndexes Collection of column indexes\r\n * @private\r\n */\r\n refreshFilters(colIndexes) {\r\n colIndexes.forEach((colIdx) => {\r\n let values = this.getValues(colIdx);\r\n this.build(colIdx, this.tf.linkedFilters);\r\n this.selectOptions(colIdx, values);\r\n });\r\n }\r\n\r\n /**\r\n * Check passed row contains a valid linked value\r\n * @param {Number} rowIdx Row index\r\n * @param {Number} activeFilterIdx Current active filter index\r\n * @returns {Boolean}\r\n */\r\n isValidLinkedValue(rowIdx, activeFilterIdx) {\r\n let tf = this.tf;\r\n\r\n if (tf.disableExcludedOptions) {\r\n return true;\r\n }\r\n\r\n if (tf.paging) {\r\n if (!isEmpty(activeFilterIdx) && tf.isRowValid(rowIdx)) {\r\n return true;\r\n }\r\n } else {\r\n if (tf.isRowDisplayed(rowIdx)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Refresh linked filters to offer only selected options\r\n */\r\n linkFilters() {\r\n let tf = this.tf;\r\n if (!tf.linkedFilters || !tf.activeFilterId) {\r\n return;\r\n }\r\n\r\n this.refreshAll();\r\n }\r\n}\r\n","import {BaseDropdown} from './baseDropdown';\r\nimport {\r\n addClass, createCheckItem, createText, createElm, elm, removeClass, tag\r\n} from '../dom';\r\nimport {has} from '../array';\r\nimport {matchCase, trim, rgxEsc} from '../string';\r\nimport {addEvt, removeEvt, targetEvt} from '../event';\r\nimport {isEmpty} from '../types';\r\nimport {CHECKLIST, NONE} from '../const';\r\nimport {defaultsStr, defaultsBool} from '../settings';\r\n\r\n/**\r\n * Checklist filter UI component\r\n * @export\r\n * @class CheckList\r\n * @extends {BaseDropdown}\r\n */\r\nexport class CheckList extends BaseDropdown {\r\n\r\n /**\r\n * Creates an instance of CheckList\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'checkList');\r\n\r\n let f = this.config;\r\n\r\n /**\r\n * List of container DOM elements\r\n * @type {Array}\r\n */\r\n this.containers = [];\r\n\r\n /**\r\n * Css class for the container of the checklist filter (div)\r\n * @type {String}\r\n */\r\n this.containerCssClass = defaultsStr(f.div_checklist_css_class,\r\n 'div_checklist');\r\n\r\n /**\r\n * Css class for the checklist filter element (ul)\r\n * @type {String}\r\n */\r\n this.filterCssClass = defaultsStr(f.checklist_css_class,\r\n 'flt_checklist');\r\n\r\n /**\r\n * Css class for the item of a checklist (li)\r\n * @type {String}\r\n */\r\n this.itemCssClass = defaultsStr(f.checklist_item_css_class,\r\n 'flt_checklist_item');\r\n\r\n /**\r\n * Css class for a selected item of a checklist (li)\r\n * @type {String}\r\n */\r\n this.selectedItemCssClass = defaultsStr(\r\n f.checklist_selected_item_css_class,\r\n 'flt_checklist_slc_item'\r\n );\r\n\r\n /**\r\n * Text placed in the filter's container when load filter on demand\r\n * feature is enabled\r\n * @type {String}\r\n */\r\n this.activateText = defaultsStr(\r\n f.activate_checklist_text,\r\n 'Click to load filter data'\r\n );\r\n\r\n /**\r\n * Css class for a disabled item of a checklist (li)\r\n * @type {String}\r\n */\r\n this.disabledItemCssClass = defaultsStr(\r\n f.checklist_item_disabled_css_class,\r\n 'flt_checklist_item_disabled'\r\n );\r\n\r\n /**\r\n * Enable the reset filter option as first item\r\n * @type {Boolean}\r\n */\r\n this.enableResetOption = defaultsBool(f.enable_checklist_reset_filter,\r\n true);\r\n\r\n /**\r\n * Prefix for container element ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfx = 'chkdiv_';\r\n }\r\n\r\n /**\r\n * Checklist option click event handler\r\n * @param {Event} evt\r\n * @private\r\n */\r\n optionClick(evt) {\r\n let elm = targetEvt(evt);\r\n let tf = this.tf;\r\n\r\n this.emitter.emit('filter-focus', tf, elm);\r\n this.setItemOption(elm);\r\n tf.filter();\r\n }\r\n\r\n /**\r\n * Checklist container click event handler for load-on-demand feature\r\n * @param {Event} evt\r\n * @private\r\n */\r\n onCheckListClick(evt) {\r\n let elm = targetEvt(evt);\r\n if (this.tf.loadFltOnDemand && elm.getAttribute('filled') === '0') {\r\n let ct = elm.getAttribute('ct');\r\n let div = this.containers[ct];\r\n this.build(ct);\r\n removeEvt(div, 'click', (evt) => this.onCheckListClick(evt));\r\n }\r\n }\r\n\r\n /**\r\n * Refresh all checklist filters\r\n */\r\n refreshAll() {\r\n let colIdxs = this.tf.getFiltersByType(CHECKLIST, true);\r\n this.refreshFilters(colIdxs);\r\n }\r\n\r\n /**\r\n * Initialize checklist filter\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isExternal External filter flag\r\n * @param {DOMElement} container Dom element containing the filter\r\n */\r\n init(colIndex, isExternal, container) {\r\n let tf = this.tf;\r\n let externalFltTgtId = isExternal ?\r\n tf.externalFltIds[colIndex] : null;\r\n\r\n let divCont = createElm('div',\r\n ['id', `${this.prfx}${colIndex}_${tf.id}`],\r\n ['ct', colIndex], ['filled', '0']);\r\n divCont.className = this.containerCssClass;\r\n\r\n //filter is appended in desired element\r\n if (externalFltTgtId) {\r\n elm(externalFltTgtId).appendChild(divCont);\r\n } else {\r\n container.appendChild(divCont);\r\n }\r\n\r\n this.containers[colIndex] = divCont;\r\n tf.fltIds.push(tf.buildFilterId(colIndex));\r\n\r\n if (!tf.loadFltOnDemand) {\r\n this.build(colIndex);\r\n } else {\r\n addEvt(divCont, 'click', (evt) => this.onCheckListClick(evt));\r\n divCont.appendChild(createText(this.activateText));\r\n }\r\n\r\n this.emitter.on(\r\n ['build-checklist-filter'],\r\n (tf, colIndex, isLinked) => this.build(colIndex, isLinked)\r\n );\r\n\r\n this.emitter.on(\r\n ['select-checklist-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n\r\n this.emitter.on(['rows-changed'], () => this.refreshAll());\r\n\r\n this.emitter.on(['after-filtering'], () => this.linkFilters());\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Build checklist UI\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isLinked Enable linked filters behaviour\r\n */\r\n build(colIndex, isLinked = false) {\r\n let tf = this.tf;\r\n colIndex = Number(colIndex);\r\n\r\n this.emitter.emit('before-populating-filter', tf, colIndex);\r\n\r\n /** @inherited */\r\n this.opts = [];\r\n /** @inherited */\r\n this.optsTxt = [];\r\n\r\n let flt = this.containers[colIndex];\r\n let ul = createElm('ul',\r\n ['id', tf.fltIds[colIndex]],\r\n ['colIndex', colIndex]);\r\n ul.className = this.filterCssClass;\r\n\r\n let caseSensitive = tf.caseSensitive;\r\n /** @inherited */\r\n this.isCustom = tf.isCustomOptions(colIndex);\r\n\r\n //Retrieves custom values\r\n if (this.isCustom) {\r\n let customValues = tf.getCustomOptions(colIndex);\r\n this.opts = customValues[0];\r\n this.optsTxt = customValues[1];\r\n }\r\n\r\n let activeIdx;\r\n let activeFilterId = tf.getActiveFilterId();\r\n\r\n if (isLinked && activeFilterId) {\r\n activeIdx = tf.getColumnIndexFromFilterId(activeFilterId);\r\n }\r\n\r\n let filteredDataCol = [];\r\n if (isLinked && tf.disableExcludedOptions) {\r\n /** @inherited */\r\n this.excludedOpts = [];\r\n }\r\n\r\n flt.innerHTML = '';\r\n\r\n let eachRow = tf.eachRow();\r\n eachRow(\r\n (row) => {\r\n let cellValue = tf.getCellValue(row.cells[colIndex]);\r\n //Vary Peter's patch\r\n let cellString = matchCase(cellValue, caseSensitive);\r\n // checks if celldata is already in array\r\n if (!has(this.opts, cellString, caseSensitive)) {\r\n this.opts.push(cellValue);\r\n }\r\n let filteredCol = filteredDataCol[colIndex];\r\n if (isLinked && tf.disableExcludedOptions) {\r\n if (!filteredCol) {\r\n filteredCol = tf.getVisibleColumnValues(colIndex);\r\n }\r\n if (!has(filteredCol, cellString, caseSensitive) &&\r\n !has(this.excludedOpts, cellString, caseSensitive)) {\r\n this.excludedOpts.push(cellValue);\r\n }\r\n }\r\n },\r\n // continue conditions function\r\n (row, k) => {\r\n // excluded rows don't need to appear on selects as always valid\r\n if (tf.excludeRows.indexOf(k) !== -1) {\r\n return true;\r\n }\r\n\r\n // checks if row has expected number of cells\r\n if (row.cells.length !== tf.nbCells || this.isCustom) {\r\n return true;\r\n }\r\n\r\n if (isLinked && !this.isValidLinkedValue(k, activeIdx)) {\r\n return true;\r\n }\r\n }\r\n );\r\n\r\n //sort options\r\n this.opts = this.sortOptions(colIndex, this.opts);\r\n if (this.excludedOpts) {\r\n this.excludedOpts = this.sortOptions(colIndex, this.excludedOpts);\r\n }\r\n\r\n this.addChecks(colIndex, ul);\r\n\r\n if (tf.loadFltOnDemand) {\r\n flt.innerHTML = '';\r\n }\r\n flt.appendChild(ul);\r\n flt.setAttribute('filled', '1');\r\n\r\n this.emitter.emit('after-populating-filter', tf, colIndex, flt);\r\n }\r\n\r\n /**\r\n * Add checklist options\r\n * @param {Number} colIndex Column index\r\n * @param {Object} ul Ul element\r\n * @private\r\n */\r\n addChecks(colIndex, ul) {\r\n let tf = this.tf;\r\n let chkCt = this.addTChecks(colIndex, ul);\r\n\r\n for (let y = 0; y < this.opts.length; y++) {\r\n let val = this.opts[y]; //item value\r\n let lbl = this.isCustom ? this.optsTxt[y] : val; //item text\r\n let fltId = tf.fltIds[colIndex];\r\n let lblIdx = y + chkCt;\r\n let li = createCheckItem(`${fltId}_${lblIdx}`, val, lbl,\r\n ['data-idx', lblIdx]);\r\n li.className = this.itemCssClass;\r\n\r\n if (tf.linkedFilters && tf.disableExcludedOptions &&\r\n has(this.excludedOpts, matchCase(val, tf.caseSensitive),\r\n tf.caseSensitive)) {\r\n addClass(li, this.disabledItemCssClass);\r\n li.check.disabled = true;\r\n li.disabled = true;\r\n } else {\r\n addEvt(li.check, 'click', evt => this.optionClick(evt));\r\n }\r\n ul.appendChild(li);\r\n\r\n if (val === '') {\r\n //item is hidden\r\n li.style.display = NONE;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Add checklist header option\r\n * @param {Number} colIndex Column index\r\n * @param {Object} ul Ul element\r\n * @private\r\n */\r\n addTChecks(colIndex, ul) {\r\n let tf = this.tf;\r\n let chkCt = 1;\r\n let fltId = tf.fltIds[colIndex];\r\n let li0 = createCheckItem(`${fltId}_0`, '',\r\n tf.getClearFilterText(colIndex), ['data-idx', 0]);\r\n li0.className = this.itemCssClass;\r\n ul.appendChild(li0);\r\n\r\n addEvt(li0.check, 'click', evt => this.optionClick(evt));\r\n\r\n if (!this.enableResetOption) {\r\n li0.style.display = NONE;\r\n }\r\n\r\n if (tf.enableEmptyOption) {\r\n let li1 = createCheckItem(`${fltId}_1`, tf.emOperator,\r\n tf.emptyText, ['data-idx', 1]);\r\n li1.className = this.itemCssClass;\r\n ul.appendChild(li1);\r\n addEvt(li1.check, 'click', evt => this.optionClick(evt));\r\n chkCt++;\r\n }\r\n\r\n if (tf.enableNonEmptyOption) {\r\n let li2 = createCheckItem(`${fltId}_2`, tf.nmOperator,\r\n tf.nonEmptyText, ['data-idx', 2]);\r\n li2.className = this.itemCssClass;\r\n ul.appendChild(li2);\r\n addEvt(li2.check, 'click', evt => this.optionClick(evt));\r\n chkCt++;\r\n }\r\n return chkCt;\r\n }\r\n\r\n /**\r\n * Set/unset value of passed item option in filter's DOM element attribute\r\n * @param {Object} o checklist option DOM element\r\n * @private\r\n */\r\n setItemOption(o) {\r\n if (!o) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n let chkValue = o.value; //checked item value\r\n let chkIndex = o.dataset.idx;\r\n let colIdx = tf.getColumnIndexFromFilterId(o.id);\r\n let n = tf.getFilterElement(parseInt(colIdx, 10));\r\n let items = n.childNodes;\r\n let li = items[chkIndex];\r\n //selected values (ul tag)\r\n let slcValues = n.getAttribute('value') || '';\r\n //selected items indexes (ul tag)\r\n let slcIndexes = n.getAttribute('indexes') || '';\r\n\r\n if (o.checked) {\r\n //show all item\r\n if (chkValue === '') {\r\n //items indexes\r\n let indexes = slcIndexes.split(tf.separator);\r\n indexes.forEach(idx => {\r\n idx = Number(idx);\r\n let li = items[idx];\r\n let chx = tag(li, 'input')[0];\r\n if (chx && idx > 0) {\r\n chx.checked = false;\r\n removeClass(li, this.selectedItemCssClass);\r\n }\r\n });\r\n\r\n n.setAttribute('value', '');\r\n n.setAttribute('indexes', '');\r\n\r\n } else {\r\n let indexes = slcIndexes + chkIndex + tf.separator;\r\n let values =\r\n trim(slcValues + ' ' + chkValue + ' ' + tf.orOperator);\r\n\r\n n.setAttribute('value', values);\r\n n.setAttribute('indexes', indexes);\r\n\r\n //uncheck first option\r\n let chx0 = tag(items[0], 'input')[0];\r\n if (chx0) {\r\n chx0.checked = false;\r\n }\r\n }\r\n\r\n removeClass(items[0], this.selectedItemCssClass);\r\n addClass(li, this.selectedItemCssClass);\r\n } else { //removes values and indexes\r\n let replaceValue =\r\n new RegExp(rgxEsc(chkValue + ' ' + tf.orOperator));\r\n let values = slcValues.replace(replaceValue, '');\r\n let replaceIndex = new RegExp(rgxEsc(chkIndex + tf.separator));\r\n let indexes = slcIndexes.replace(replaceIndex, '');\r\n\r\n n.setAttribute('value', trim(values));\r\n n.setAttribute('indexes', indexes);\r\n\r\n removeClass(li, this.selectedItemCssClass);\r\n }\r\n }\r\n\r\n /**\r\n * Select filter options programmatically\r\n * @param {Number} colIndex Column index\r\n * @param {Array} values Array of option values to select\r\n */\r\n selectOptions(colIndex, values = []) {\r\n let tf = this.tf;\r\n let flt = tf.getFilterElement(colIndex);\r\n if (!flt || values.length === 0) {\r\n return;\r\n }\r\n\r\n let lis = tag(flt, 'li');\r\n\r\n flt.setAttribute('value', '');\r\n flt.setAttribute('indexes', '');\r\n\r\n [].forEach.call(lis, (li) => {\r\n let chk = tag(li, 'input')[0];\r\n let chkVal = matchCase(chk.value, tf.caseSensitive);\r\n\r\n if (chkVal !== '' && has(values, chkVal, tf.caseSensitive)) {\r\n chk.checked = true;\r\n } else {\r\n // Check non-empty-text or empty-text option\r\n if (values.indexOf(tf.nmOperator) !== -1 &&\r\n chkVal === matchCase(tf.nonEmptyText, tf.caseSensitive)) {\r\n chk.checked = true;\r\n }\r\n else if (values.indexOf(tf.emOperator) !== -1 &&\r\n chkVal === matchCase(tf.emptyText, tf.caseSensitive)) {\r\n chk.checked = true;\r\n } else {\r\n chk.checked = false;\r\n }\r\n }\r\n this.setItemOption(chk);\r\n });\r\n }\r\n\r\n /**\r\n * Get filter values for a given column index\r\n * @param {Number} colIndex Column index\r\n * @returns {Array} values Collection of selected values\r\n */\r\n getValues(colIndex) {\r\n let tf = this.tf;\r\n let flt = tf.getFilterElement(colIndex);\r\n if (!flt) {\r\n return [];\r\n }\r\n\r\n let fltAttr = flt.getAttribute('value');\r\n let values = isEmpty(fltAttr) ? '' : fltAttr;\r\n //removes last operator ||\r\n values = values.substr(0, values.length - 3);\r\n //turn || separated values into array\r\n values = values.split(' ' + tf.orOperator + ' ');\r\n\r\n return values;\r\n }\r\n\r\n /**\r\n * Destroy CheckList instance\r\n */\r\n destroy() {\r\n this.emitter.off(\r\n ['build-checklist-filter'],\r\n (tf, colIndex, isLinked) => this.build(colIndex, isLinked)\r\n );\r\n this.emitter.off(\r\n ['select-checklist-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n this.emitter.off(['rows-changed'], () => this.refreshAll());\r\n this.emitter.off(['after-filtering'], () => this.linkFilters());\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {addEvt} from '../event';\r\nimport {defaultsStr} from '../settings';\r\nimport {isNull} from '../types';\r\nimport {RIGHT} from './toolbar';\r\n\r\n/**\r\n * Clear button UI component\r\n */\r\nexport class ClearButton extends Feature {\r\n\r\n /**\r\n * Creates an instance of ClearButton\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'btnReset');\r\n\r\n let f = this.config.btn_reset || {};\r\n\r\n /**\r\n * Container element ID\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Text for the clear button\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, null);\r\n\r\n /**\r\n * Css class for reset button\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'reset');\r\n\r\n /**\r\n * Tooltip text for the clear button\r\n * @type {String}\r\n */\r\n this.tooltip = f.tooltip || 'Clear filters';\r\n\r\n /**\r\n * Custom Html string for the clear button\r\n * @type {String}\r\n */\r\n this.html = defaultsStr(f.html,\r\n (!tf.enableIcons || this.text ? null :\r\n ''));\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 * Clear button container element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.container = null;\r\n\r\n /**\r\n * Clear button element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.element = null;\r\n }\r\n\r\n /**\r\n * Click event handler for clear button\r\n * @private\r\n */\r\n onClick() {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n this.tf.clearFilters();\r\n }\r\n\r\n /**\r\n * Initialize clear button component\r\n */\r\n init() {\r\n let tf = this.tf;\r\n\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.targetId));\r\n\r\n let cont = createElm('span');\r\n\r\n let targetEl = !this.targetId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n targetEl.appendChild(cont);\r\n\r\n if (!this.html) {\r\n let fltReset = createElm('a', ['href', 'javascript:void(0);']);\r\n fltReset.className = this.cssClass;\r\n fltReset.appendChild(createText(this.text));\r\n cont.appendChild(fltReset);\r\n addEvt(fltReset, 'click', () => this.onClick());\r\n } else {\r\n cont.innerHTML = this.html;\r\n let resetEl = cont.firstChild;\r\n addEvt(resetEl, 'click', () => this.onClick());\r\n }\r\n this.element = cont.firstChild;\r\n this.container = cont;\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Destroy ClearButton instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n removeElm(this.element);\r\n removeElm(this.container);\r\n this.element = null;\r\n this.container = null;\r\n this.initialized = false;\r\n }\r\n}\r\n\r\n// TODO: remove as soon as feature name is fixed\r\nClearButton.altName = 'btnReset';\r\n","import {Date as SugarDate} from 'sugar-date';\r\nimport 'sugar-date/locales';\r\nimport {Feature} from '../feature';\r\nimport {isObj, isArray} from '../types';\r\nimport {DATE} from '../const';\r\nimport {root} from '../root';\r\n\r\n/**\r\n * Wrapper for Sugar Date module providing datetime helpers and locales\r\n * @export\r\n * @class DateType\r\n */\r\nexport class DateType extends Feature {\r\n\r\n /**\r\n * Creates an instance of DateType\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'dateType');\r\n\r\n /**\r\n * Global locale\r\n * @type {String}\r\n */\r\n this.locale = tf.locale;\r\n\r\n /**\r\n * Sugar Date instance\r\n * @type {Object}\r\n */\r\n this.datetime = SugarDate;\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initialize DateType instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n // Set global locale\r\n this.datetime.setLocale(this.locale);\r\n\r\n // Add formats from column types configuration if any\r\n this.addConfigFormats(this.tf.colTypes);\r\n\r\n this.emitter.on(\r\n ['add-date-type-formats'],\r\n (tf, types) => this.addConfigFormats(types)\r\n );\r\n\r\n // Broadcast date-type initialization\r\n this.emitter.emit('date-type-initialized', this.tf, this);\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Parse a string representation of a date for a specified locale and return\r\n * a date object\r\n * @param {String} dateStr String representation of a date\r\n * @param {String} localeCode Locale code (ie 'en-us')\r\n * @returns {Date}\r\n */\r\n parse(dateStr, localeCode) {\r\n return this.datetime.create(dateStr, localeCode);\r\n }\r\n\r\n /**\r\n * Check string representation of a date for a specified locale is valid\r\n * @param {any} dateStr String representation of a date\r\n * @param {any} localeCode Locale code (ie 'en-us')\r\n * @returns {Boolean}\r\n */\r\n isValid(dateStr, localeCode) {\r\n return this.datetime.isValid(this.parse(dateStr, localeCode));\r\n }\r\n\r\n /**\r\n * Return the type object of a specified column as per configuration or\r\n * passed collection\r\n * @param {Number} colIndex Column index\r\n * @param {Array} types Collection of column types, optional\r\n * @returns {Object}\r\n */\r\n getOptions(colIndex, types) {\r\n types = types || this.tf.colTypes;\r\n let colType = types[colIndex];\r\n return isObj(colType) ? colType : {};\r\n }\r\n\r\n /**\r\n * Return the locale code for supplied column index as per configuration\r\n * or global setting\r\n * @param {Number} colIndex Column index\r\n * @returns {String} Locale code (ie: 'en-us')\r\n */\r\n getLocale(colIndex) {\r\n return this.getOptions(colIndex).locale || this.locale;\r\n }\r\n\r\n /**\r\n * Add date time format(s) to a locale as specified by the passed\r\n * collection of column types, ie:\r\n * [\r\n * 'string',\r\n * 'number',\r\n * { type: 'date', locale: 'en', format: ['{dd}/{MM}/{yyyy}']}\r\n * ]\r\n *\r\n * @param {Array} [types=[]] Collection of column types\r\n */\r\n addConfigFormats(types=[]) {\r\n types.forEach((type, idx) => {\r\n let options = this.getOptions(idx, types);\r\n if (options.type === DATE && options.hasOwnProperty('format')) {\r\n let locale = this.datetime.getLocale(\r\n options.locale || this.locale\r\n );\r\n let formats = isArray(options.format) ?\r\n options.format : [options.format];\r\n\r\n // Sugar date module throws exceptions with locale.addFormat\r\n try {\r\n formats.forEach((format) => {\r\n locale.addFormat(format);\r\n });\r\n } catch (ex) {\r\n root.console.error(ex);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Remove DateType instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n // TODO: remove added formats\r\n\r\n this.emitter.off(\r\n ['add-date-type-formats'],\r\n (tf, types) => this.addConfigFormats(types)\r\n );\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {BaseDropdown} from './baseDropdown';\r\nimport {createElm, createOpt, elm} from '../dom';\r\nimport {has} from '../array';\r\nimport {matchCase} from '../string';\r\nimport {addEvt, targetEvt} from '../event';\r\nimport {SELECT, MULTIPLE, NONE} from '../const';\r\nimport {defaultsStr, defaultsBool} from '../settings';\r\n\r\n/**\r\n * Dropdown filter UI component\r\n * @export\r\n * @class Dropdown\r\n * @extends {BaseDropdown}\r\n */\r\nexport class Dropdown extends BaseDropdown {\r\n\r\n /**\r\n * Creates an instance of Dropdown\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'dropdown');\r\n\r\n // Configuration object\r\n let f = this.config;\r\n\r\n /**\r\n * Enable the reset filter option as first item\r\n * @type {Boolean}\r\n */\r\n this.enableSlcResetFilter =\r\n defaultsBool(f.enable_slc_reset_filter, true);\r\n\r\n /**\r\n * Non empty option text\r\n * @type {String}\r\n */\r\n this.nonEmptyText = defaultsStr(f.non_empty_text, '(Non empty)');\r\n\r\n /**\r\n * Tooltip text appearing on multiple select\r\n * @type {String}\r\n */\r\n this.multipleSlcTooltip = defaultsStr(f.multiple_slc_tooltip,\r\n 'Use Ctrl/Cmd key for multiple selections');\r\n }\r\n\r\n\r\n /**\r\n * Drop-down filter focus event handler\r\n * @param {Event} e DOM Event\r\n * @private\r\n */\r\n onSlcFocus(e) {\r\n let elm = targetEvt(e);\r\n let tf = this.tf;\r\n // select is populated when element has focus\r\n if (tf.loadFltOnDemand && elm.getAttribute('filled') === '0') {\r\n let ct = elm.getAttribute('ct');\r\n this.build(ct);\r\n }\r\n this.emitter.emit('filter-focus', tf, elm);\r\n }\r\n\r\n /**\r\n * Drop-down filter change event handler\r\n * @private\r\n */\r\n onSlcChange() {\r\n if (this.tf.onSlcChange) {\r\n this.tf.filter();\r\n }\r\n }\r\n\r\n /**\r\n * Refresh all drop-down filters\r\n */\r\n refreshAll() {\r\n let selectFlts = this.tf.getFiltersByType(SELECT, true);\r\n let multipleFlts = this.tf.getFiltersByType(MULTIPLE, true);\r\n let colIdxs = selectFlts.concat(multipleFlts);\r\n this.refreshFilters(colIdxs);\r\n }\r\n\r\n /**\r\n * Initialize drop-down filter\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isExternal External filter flag\r\n * @param {DOMElement} container Dom element containing the filter\r\n */\r\n init(colIndex, isExternal, container) {\r\n let tf = this.tf;\r\n let col = tf.getFilterType(colIndex);\r\n let externalFltTgtId = isExternal ?\r\n tf.externalFltIds[colIndex] : null;\r\n\r\n let slc = createElm(SELECT,\r\n ['id', tf.buildFilterId(colIndex)],\r\n ['ct', colIndex], ['filled', '0']\r\n );\r\n\r\n if (col === MULTIPLE) {\r\n slc.multiple = MULTIPLE;\r\n slc.title = this.multipleSlcTooltip;\r\n }\r\n slc.className = col.toLowerCase() === SELECT ?\r\n tf.fltCssClass : tf.fltMultiCssClass;\r\n\r\n //filter is appended in container element\r\n if (externalFltTgtId) {\r\n elm(externalFltTgtId).appendChild(slc);\r\n } else {\r\n container.appendChild(slc);\r\n }\r\n\r\n tf.fltIds.push(slc.id);\r\n\r\n if (!tf.loadFltOnDemand) {\r\n this.build(colIndex);\r\n } else {\r\n //1st option is created here since build isn't invoked\r\n let opt0 = createOpt(tf.getClearFilterText(colIndex), '');\r\n slc.appendChild(opt0);\r\n }\r\n\r\n addEvt(slc, 'change', () => this.onSlcChange());\r\n addEvt(slc, 'focus', (e) => this.onSlcFocus(e));\r\n\r\n this.emitter.on(\r\n ['build-select-filter'],\r\n (tf, colIndex, isLinked, isExternal) =>\r\n this.build(colIndex, isLinked, isExternal)\r\n );\r\n this.emitter.on(\r\n ['select-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n this.emitter.on(['rows-changed'], () => this.refreshAll());\r\n\r\n this.emitter.on(['after-filtering'], () => this.linkFilters());\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Build drop-down filter UI\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isLinked Enable linked filters behaviour\r\n */\r\n build(colIndex, isLinked = false) {\r\n let tf = this.tf;\r\n colIndex = Number(colIndex);\r\n\r\n this.emitter.emit('before-populating-filter', tf, colIndex);\r\n\r\n /** @inherited */\r\n this.opts = [];\r\n /** @inherited */\r\n this.optsTxt = [];\r\n\r\n let slc = tf.getFilterElement(colIndex);\r\n\r\n //custom select test\r\n /** @inherited */\r\n this.isCustom = tf.isCustomOptions(colIndex);\r\n\r\n //Retrieves custom values\r\n if (this.isCustom) {\r\n let customValues = tf.getCustomOptions(colIndex);\r\n this.opts = customValues[0];\r\n this.optsTxt = customValues[1];\r\n }\r\n\r\n //custom selects text\r\n let activeIdx;\r\n let activeFilterId = tf.getActiveFilterId();\r\n if (isLinked && activeFilterId) {\r\n activeIdx = tf.getColumnIndexFromFilterId(activeFilterId);\r\n }\r\n\r\n let excludedOpts = null,\r\n filteredDataCol = null;\r\n if (isLinked && tf.disableExcludedOptions) {\r\n excludedOpts = [];\r\n filteredDataCol = [];\r\n }\r\n\r\n let eachRow = tf.eachRow();\r\n eachRow(\r\n (row) => {\r\n let cellValue = tf.getCellValue(row.cells[colIndex]);\r\n //Vary Peter's patch\r\n let cellString = matchCase(cellValue, tf.caseSensitive);\r\n\r\n // checks if celldata is already in array\r\n if (!has(this.opts, cellString, tf.caseSensitive)) {\r\n this.opts.push(cellValue);\r\n }\r\n\r\n if (isLinked && tf.disableExcludedOptions) {\r\n let filteredCol = filteredDataCol[colIndex];\r\n if (!filteredCol) {\r\n filteredCol = tf.getVisibleColumnValues(colIndex);\r\n }\r\n if (!has(filteredCol, cellString, tf.caseSensitive) &&\r\n !has(excludedOpts, cellString, tf.caseSensitive)) {\r\n excludedOpts.push(cellValue);\r\n }\r\n }\r\n },\r\n // continue conditions function\r\n (row, k) => {\r\n // excluded rows don't need to appear on selects as always valid\r\n if (tf.excludeRows.indexOf(k) !== -1) {\r\n return true;\r\n }\r\n\r\n // checks if row has expected number of cells\r\n if (row.cells.length !== tf.nbCells || this.isCustom) {\r\n return true;\r\n }\r\n\r\n if (isLinked && !this.isValidLinkedValue(k, activeIdx)) {\r\n return true;\r\n }\r\n }\r\n );\r\n\r\n //sort options\r\n this.opts = this.sortOptions(colIndex, this.opts);\r\n if (excludedOpts) {\r\n excludedOpts = this.sortOptions(colIndex, excludedOpts);\r\n }\r\n\r\n //populates drop-down\r\n this.addOptions(colIndex, slc, isLinked, excludedOpts);\r\n\r\n this.emitter.emit('after-populating-filter', tf, colIndex, slc);\r\n }\r\n\r\n /**\r\n * Add drop-down options\r\n * @param {Number} colIndex Column index\r\n * @param {Object} slc Select Dom element\r\n * @param {Boolean} isLinked Enable linked refresh behaviour\r\n * @param {Array} excludedOpts Array of excluded options\r\n */\r\n addOptions(colIndex, slc, isLinked, excludedOpts) {\r\n let tf = this.tf,\r\n slcValue = slc.value;\r\n\r\n slc.innerHTML = '';\r\n slc = this.addFirstOption(slc);\r\n\r\n for (let y = 0; y < this.opts.length; y++) {\r\n if (this.opts[y] === '') {\r\n continue;\r\n }\r\n let val = this.opts[y]; //option value\r\n let lbl = this.isCustom ? this.optsTxt[y] : val; //option text\r\n let isDisabled = false;\r\n if (isLinked && tf.disableExcludedOptions &&\r\n has(excludedOpts, matchCase(val, tf.caseSensitive),\r\n tf.caseSensitive)) {\r\n isDisabled = true;\r\n }\r\n\r\n let opt;\r\n //fill select on demand\r\n if (tf.loadFltOnDemand && slcValue === this.opts[y] &&\r\n tf.getFilterType(colIndex) === SELECT) {\r\n opt = createOpt(lbl, val, true);\r\n } else {\r\n opt = createOpt(lbl, val, false);\r\n }\r\n if (isDisabled) {\r\n opt.disabled = true;\r\n }\r\n slc.appendChild(opt);\r\n }// for y\r\n\r\n slc.setAttribute('filled', '1');\r\n }\r\n\r\n /**\r\n * Add drop-down header option\r\n * @param {Object} slc Select DOM element\r\n */\r\n addFirstOption(slc) {\r\n let tf = this.tf;\r\n let colIdx = tf.getColumnIndexFromFilterId(slc.id);\r\n let opt0 = createOpt((!this.enableSlcResetFilter ?\r\n '' : tf.getClearFilterText(colIdx)), '');\r\n if (!this.enableSlcResetFilter) {\r\n opt0.style.display = NONE;\r\n }\r\n slc.appendChild(opt0);\r\n if (tf.enableEmptyOption) {\r\n let opt1 = createOpt(tf.emptyText, tf.emOperator);\r\n slc.appendChild(opt1);\r\n }\r\n if (tf.enableNonEmptyOption) {\r\n let opt2 = createOpt(tf.nonEmptyText, tf.nmOperator);\r\n slc.appendChild(opt2);\r\n }\r\n return slc;\r\n }\r\n\r\n /**\r\n * Select filter options programmatically\r\n * @param {Number} colIndex Column index\r\n * @param {Array} values Array of option values to select\r\n */\r\n selectOptions(colIndex, values = []) {\r\n let tf = this.tf;\r\n if (values.length === 0) {\r\n return;\r\n }\r\n let slc = tf.getFilterElement(colIndex);\r\n [].forEach.call(slc.options, (option) => {\r\n // Empty value means clear all selections and first option is the\r\n // clear all option\r\n if (values[0] === '' || option.value === '') {\r\n option.selected = false;\r\n }\r\n\r\n if (option.value !== '' && has(values, option.value, true)) {\r\n option.selected = true;\r\n }//if\r\n });\r\n }\r\n\r\n /**\r\n * Get filter values for a given column index\r\n * @param {Number} colIndex Column index\r\n * @returns {Array} values Array of selected values\r\n */\r\n getValues(colIndex) {\r\n let tf = this.tf;\r\n let slc = tf.getFilterElement(colIndex);\r\n let values = [];\r\n\r\n // IE >= 9 does not support the selectedOptions property :(\r\n if (slc.selectedOptions) {\r\n [].forEach.call(slc.selectedOptions,\r\n option => values.push(option.value));\r\n } else {\r\n [].forEach.call(slc.options, (option) => {\r\n if (option.selected) {\r\n values.push(option.value);\r\n }\r\n });\r\n }\r\n\r\n return values;\r\n }\r\n\r\n /**\r\n * Destroy Dropdown instance\r\n */\r\n destroy() {\r\n this.emitter.off(\r\n ['build-select-filter'],\r\n (colIndex, isLinked, isExternal) =>\r\n this.build(colIndex, isLinked, isExternal)\r\n );\r\n this.emitter.off(\r\n ['select-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n this.emitter.off(['rows-changed'], () => this.refreshAll());\r\n this.emitter.off(['after-filtering'], () => this.linkFilters());\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, removeElm, elm, tag} from '../dom';\r\nimport {addEvt, targetEvt} from '../event';\r\nimport {contains} from '../string';\r\nimport {NONE} from '../const';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsNb, defaultsArr\r\n} from '../settings';\r\n\r\n/**\r\n * Grid layout, table with fixed headers\r\n */\r\nexport class GridLayout extends Feature {\r\n\r\n /**\r\n * Creates an instance of GridLayout\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'gridLayout');\r\n\r\n let f = this.config.grid_layout || {};\r\n\r\n /**\r\n * Grid-layout container width as CSS string\r\n * @type {String}\r\n */\r\n this.width = defaultsStr(f.width, null);\r\n\r\n /**\r\n * Grid-layout container height as CSS string\r\n * @type {String}\r\n */\r\n this.height = defaultsStr(f.height, null);\r\n\r\n /**\r\n * Css class for main container element\r\n * @type {String}\r\n */\r\n this.mainContCssClass = defaultsStr(f.cont_css_class, 'grd_Cont');\r\n\r\n /**\r\n * Css class for body table container element\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.tbl_cont_css_class, 'grd_tblCont');\r\n\r\n /**\r\n * Css class for headers table container element\r\n * @type {String}\r\n */\r\n this.headContCssClass = defaultsStr(f.tbl_head_css_class,\r\n 'grd_headTblCont');\r\n\r\n /**\r\n * Css class for toolbar container element (rows counter, paging etc.)\r\n * @type {String}\r\n */\r\n this.infDivCssClass = defaultsStr(f.inf_grid_css_class, 'grd_inf');\r\n\r\n /**\r\n * Index of the headers row, default: 0\r\n * @type {Number}\r\n */\r\n this.headRowIndex = defaultsNb(f.headers_row_index, 0);\r\n\r\n /**\r\n * Collection of the header row indexes to be moved into headers table\r\n * @type {Array}\r\n */\r\n this.headRows = defaultsArr(f.headers_rows, [0]);\r\n\r\n /**\r\n * Enable or disable column filters generation, default: true\r\n * @type {Boolean}\r\n */\r\n this.filters = defaultsBool(f.filters, true);\r\n\r\n /**\r\n * Enable or disable column headers, default: false\r\n * @type {Boolean}\r\n */\r\n this.noHeaders = Boolean(f.no_headers);\r\n\r\n /**\r\n * Grid-layout default column widht as CSS string\r\n * @type {String}\r\n */\r\n this.defaultColWidth = defaultsStr(f.default_col_width, '100px');\r\n\r\n /**\r\n * List of column elements\r\n * @type {Array}\r\n * @private\r\n */\r\n this.colElms = [];\r\n\r\n /**\r\n * Prefix for grid-layout filter's cell ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxGridFltTd = '_td_';\r\n\r\n /**\r\n * Prefix for grid-layout header's cell ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxGridTh = 'tblHeadTh_';\r\n\r\n /**\r\n * Mark-up of original HTML table\r\n * @type {String}\r\n * @private\r\n */\r\n this.sourceTblHtml = tf.dom().outerHTML;\r\n\r\n /**\r\n * Indicates if working table has column elements\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.tblHasColTag = tag(tf.dom(), 'col').length > 0 ? true : false;\r\n\r\n /**\r\n * Main container element\r\n * @private\r\n */\r\n this.tblMainCont = null;\r\n\r\n /**\r\n * Table container element\r\n * @private\r\n */\r\n this.tblCont = null;\r\n\r\n /**\r\n * Headers' table container element\r\n * @private\r\n */\r\n this.headTblCont = null;\r\n\r\n /**\r\n * Headers' table element\r\n * @private\r\n */\r\n this.headTbl = null;\r\n\r\n // filters flag at TF level\r\n tf.fltGrid = this.filters;\r\n }\r\n\r\n /**\r\n * Generates a grid with fixed headers\r\n * TODO: reduce size of init by extracting single purposed methods\r\n */\r\n init() {\r\n let tf = this.tf;\r\n let tbl = tf.dom();\r\n\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n // Override relevant TableFilter properties\r\n this.setOverrides();\r\n\r\n // Assign default column widths\r\n this.setDefaultColWidths();\r\n\r\n //Main container: it will contain all the elements\r\n this.tblMainCont = this.createContainer(\r\n 'div', this.mainContCssClass);\r\n if (this.width) {\r\n this.tblMainCont.style.width = this.width;\r\n }\r\n tbl.parentNode.insertBefore(this.tblMainCont, tbl);\r\n\r\n //Table container: div wrapping content table\r\n this.tblCont = this.createContainer('div', this.contCssClass);\r\n this.setConfigWidth(this.tblCont);\r\n if (this.height) {\r\n this.tblCont.style.height = this.height;\r\n }\r\n tbl.parentNode.insertBefore(this.tblCont, tbl);\r\n let t = removeElm(tbl);\r\n this.tblCont.appendChild(t);\r\n\r\n //In case table width is expressed in %\r\n if (tbl.style.width === '') {\r\n let tblW = this.initialTableWidth();\r\n tbl.style.width = (contains('%', tblW) ?\r\n tbl.clientWidth : tblW) + 'px';\r\n }\r\n\r\n let d = removeElm(this.tblCont);\r\n this.tblMainCont.appendChild(d);\r\n\r\n //Headers table container: div wrapping headers table\r\n this.headTblCont = this.createContainer(\r\n 'div', this.headContCssClass);\r\n\r\n //Headers table\r\n this.headTbl = createElm('table');\r\n let tH = createElm('tHead');\r\n\r\n //1st row should be headers row, ids are added if not set\r\n //Those ids are used by the sort feature\r\n let hRow = tbl.rows[this.headRowIndex];\r\n let sortTriggers = this.getSortTriggerIds(hRow);\r\n\r\n //Filters row is created\r\n let filtersRow = this.createFiltersRow();\r\n\r\n //Headers row are moved from content table to headers table\r\n this.setHeadersRow(tH);\r\n\r\n this.headTbl.appendChild(tH);\r\n if (tf.filtersRowIndex === 0) {\r\n tH.insertBefore(filtersRow, hRow);\r\n } else {\r\n tH.appendChild(filtersRow);\r\n }\r\n\r\n this.headTblCont.appendChild(this.headTbl);\r\n this.tblCont.parentNode.insertBefore(this.headTblCont, this.tblCont);\r\n\r\n //THead needs to be removed in content table for sort feature\r\n let thead = tag(tbl, 'thead');\r\n if (thead.length > 0) {\r\n tbl.removeChild(thead[0]);\r\n }\r\n\r\n // ensure table layout is always set even if already set in css\r\n // definitions, potentially with custom css class this could be lost\r\n this.headTbl.style.tableLayout = 'fixed';\r\n tbl.style.tableLayout = 'fixed';\r\n\r\n //content table without headers needs col widths to be reset\r\n tf.setColWidths(this.headTbl);\r\n\r\n //Headers container width\r\n this.headTbl.style.width = tbl.style.width;\r\n //\r\n\r\n //scroll synchronisation\r\n addEvt(this.tblCont, 'scroll', (evt) => {\r\n let elm = targetEvt(evt);\r\n let scrollLeft = elm.scrollLeft;\r\n this.headTblCont.scrollLeft = scrollLeft;\r\n //New pointerX calc taking into account scrollLeft\r\n // if(!o.isPointerXOverwritten){\r\n // try{\r\n // o.Evt.pointerX = function(evt){\r\n // let e = evt || global.event;\r\n // let bdScrollLeft = tf_StandardBody().scrollLeft +\r\n // scrollLeft;\r\n // return (e.pageX + scrollLeft) ||\r\n // (e.clientX + bdScrollLeft);\r\n // };\r\n // o.isPointerXOverwritten = true;\r\n // } catch(err) {\r\n // o.isPointerXOverwritten = false;\r\n // }\r\n // }\r\n });\r\n\r\n // TODO: Trigger a custom event handled by sort extension\r\n let sort = tf.extension('sort');\r\n if (sort) {\r\n sort.asyncSort = true;\r\n sort.triggerIds = sortTriggers;\r\n }\r\n\r\n //Col elements are enough to keep column widths after sorting and\r\n //filtering\r\n this.setColumnElements();\r\n\r\n if (tf.popupFilters) {\r\n filtersRow.style.display = NONE;\r\n }\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Overrides TableFilter instance properties to adjust to grid layout mode\r\n * @private\r\n */\r\n setOverrides() {\r\n let tf = this.tf;\r\n tf.refRow = 0;\r\n tf.headersRow = 0;\r\n tf.filtersRowIndex = 1;\r\n }\r\n\r\n /**\r\n * Set grid-layout default column widths if column widths are not defined\r\n * @private\r\n */\r\n setDefaultColWidths() {\r\n let tf = this.tf;\r\n if (tf.colWidths.length > 0) {\r\n return;\r\n }\r\n\r\n tf.eachCol((k) => {\r\n let colW;\r\n let cell = tf.dom().rows[tf.getHeadersRowIndex()].cells[k];\r\n if (cell.width !== '') {\r\n colW = cell.width;\r\n } else if (cell.style.width !== '') {\r\n colW = parseInt(cell.style.width, 10);\r\n } else {\r\n colW = this.defaultColWidth;\r\n }\r\n tf.colWidths[k] = colW;\r\n });\r\n\r\n tf.setColWidths();\r\n }\r\n\r\n /**\r\n * Initial table width\r\n * @returns {Number}\r\n * @private\r\n */\r\n initialTableWidth() {\r\n let tbl = this.tf.dom();\r\n let width; //initial table width\r\n\r\n if (tbl.width !== '') {\r\n width = tbl.width;\r\n }\r\n else if (tbl.style.width !== '') {\r\n width = tbl.style.width;\r\n } else {\r\n width = tbl.clientWidth;\r\n }\r\n return parseInt(width, 10);\r\n }\r\n\r\n /**\r\n * Creates container element\r\n * @param {String} tag Tag name\r\n * @param {String} className Css class to assign to element\r\n * @returns {DOMElement}\r\n * @private\r\n */\r\n createContainer(tag, className) {\r\n let element = createElm(tag);\r\n element.className = className;\r\n return element;\r\n }\r\n\r\n /**\r\n * Creates filters row with cells\r\n * @returns {HTMLTableRowElement}\r\n * @private\r\n */\r\n createFiltersRow() {\r\n let tf = this.tf;\r\n let filtersRow = createElm('tr');\r\n if (this.filters && tf.fltGrid) {\r\n tf.externalFltIds = [];\r\n tf.eachCol((j) => {\r\n let fltTdId = `${tf.prfxFlt + j + this.prfxGridFltTd + tf.id}`;\r\n let cl = createElm(tf.fltCellTag, ['id', fltTdId]);\r\n filtersRow.appendChild(cl);\r\n tf.externalFltIds[j] = fltTdId;\r\n });\r\n }\r\n return filtersRow;\r\n }\r\n\r\n /**\r\n * Generates column elements if necessary and assigns their widths\r\n * @private\r\n */\r\n setColumnElements() {\r\n let tf = this.tf;\r\n let cols = tag(tf.dom(), 'col');\r\n this.tblHasColTag = cols.length > 0;\r\n\r\n for (let k = (tf.getCellsNb() - 1); k >= 0; k--) {\r\n let col;\r\n\r\n if (!this.tblHasColTag) {\r\n col = createElm('col');\r\n tf.dom().insertBefore(col, tf.dom().firstChild);\r\n } else {\r\n col = cols[k];\r\n }\r\n col.style.width = tf.colWidths[k];\r\n this.colElms[k] = col;\r\n }\r\n this.tblHasColTag = true;\r\n }\r\n\r\n /**\r\n * Sets headers row in headers table\r\n * @param {HTMLHeadElement} tableHead Table head element\r\n * @private\r\n */\r\n setHeadersRow(tableHead) {\r\n if (this.noHeaders) {\r\n // Handle table with no headers, assuming here headers do not\r\n // exist\r\n tableHead.appendChild(createElm('tr'));\r\n } else {\r\n // Headers row are moved from content table to headers table\r\n for (let i = 0; i < this.headRows.length; i++) {\r\n let row = this.tf.dom().rows[this.headRows[i]];\r\n tableHead.appendChild(row);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets width defined in configuration to passed element\r\n * @param {DOMElement} element DOM element\r\n * @private\r\n */\r\n setConfigWidth(element) {\r\n if (!this.width) {\r\n return;\r\n }\r\n if (this.width.indexOf('%') !== -1) {\r\n element.style.width = '100%';\r\n } else {\r\n element.style.width = this.width;\r\n }\r\n }\r\n\r\n /**\r\n * Returns a list of header IDs used for specifing external sort triggers\r\n * @param {HTMLTableRowElement} row DOM row element\r\n * @returns {Array} List of IDs\r\n * @private\r\n */\r\n getSortTriggerIds(row) {\r\n let tf = this.tf;\r\n let sortTriggers = [];\r\n tf.eachCol((n) => {\r\n let c = row.cells[n];\r\n let thId = c.getAttribute('id');\r\n if (!thId || thId === '') {\r\n thId = `${this.prfxGridTh + n}_${tf.id}`;\r\n c.setAttribute('id', thId);\r\n }\r\n sortTriggers.push(thId);\r\n });\r\n return sortTriggers;\r\n }\r\n\r\n /**\r\n * Removes the grid layout\r\n */\r\n destroy() {\r\n let tf = this.tf;\r\n let tbl = tf.dom();\r\n\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let t = removeElm(tbl);\r\n this.tblMainCont.parentNode.insertBefore(t, this.tblMainCont);\r\n removeElm(this.tblMainCont);\r\n\r\n this.tblMainCont = null;\r\n this.headTblCont = null;\r\n this.headTbl = null;\r\n this.tblCont = null;\r\n\r\n tbl.outerHTML = this.sourceTblHtml;\r\n //needed to keep reference of table element for future usage\r\n this.tf.tbl = elm(tf.id);\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {addEvt, removeEvt} from '../event';\r\nimport {root} from '../root';\r\n\r\nconst JSON = root.JSON;\r\nconst location = root.location;\r\nconst decodeURIComponent = root.decodeURIComponent;\r\nconst encodeURIComponent = root.encodeURIComponent;\r\n\r\n/**\r\n * Checks if browser has onhashchange event\r\n */\r\nexport const hasHashChange = () => {\r\n let docMode = root.documentMode;\r\n return ('onhashchange' in root) && (docMode === undefined || docMode > 7);\r\n};\r\n\r\n/**\r\n * Manages state via URL hash changes\r\n *\r\n * @export\r\n * @class Hash\r\n */\r\nexport class Hash {\r\n\r\n /**\r\n * Creates an instance of Hash\r\n *\r\n * @param {State} state Instance of State\r\n */\r\n constructor(state) {\r\n /**\r\n * State object\r\n * @type {State}\r\n */\r\n this.state = state;\r\n\r\n /**\r\n * Cached URL hash\r\n * @type {String} Hash string\r\n * @private\r\n */\r\n this.lastHash = null;\r\n\r\n /**\r\n * Application event emitter instance\r\n * @type {Emitter}\r\n */\r\n this.emitter = state.emitter;\r\n\r\n /**\r\n * Bound sync wrapper for future use\r\n * @private\r\n */\r\n this.boundSync = null;\r\n }\r\n\r\n /**\r\n * Initializes the Hash object\r\n */\r\n init() {\r\n if (!hasHashChange()) {\r\n return;\r\n }\r\n\r\n this.lastHash = location.hash;\r\n //Store a bound sync wrapper\r\n this.boundSync = this.sync.bind(this);\r\n this.emitter.on(['state-changed'], (tf, state) => this.update(state));\r\n this.emitter.on(['initialized'], this.boundSync);\r\n addEvt(root, 'hashchange', this.boundSync);\r\n }\r\n\r\n /**\r\n * Updates the URL hash based on a state change\r\n *\r\n * @param {State} state Instance of State\r\n */\r\n update(state) {\r\n let hash = `#${encodeURIComponent(JSON.stringify(state))}`;\r\n if (this.lastHash === hash) {\r\n return;\r\n }\r\n\r\n location.hash = hash;\r\n this.lastHash = hash;\r\n }\r\n\r\n /**\r\n * Converts a URL hash into a state JSON object\r\n *\r\n * @param {String} hash URL hash fragment\r\n * @returns {Object} JSON object\r\n */\r\n parse(hash) {\r\n if (hash.indexOf('#') === -1) {\r\n return null;\r\n }\r\n hash = hash.substr(1);\r\n return JSON.parse(decodeURIComponent(hash));\r\n }\r\n\r\n /**\r\n * Applies current hash state to features\r\n */\r\n sync() {\r\n let state = this.parse(location.hash);\r\n if (!state) {\r\n return;\r\n }\r\n // override current state with persisted one and sync features\r\n this.state.overrideAndSync(state);\r\n }\r\n\r\n /**\r\n * Release Hash event subscriptions and clear fields\r\n */\r\n destroy() {\r\n this.emitter.off(['state-changed'], (tf, state) => this.update(state));\r\n this.emitter.off(['initialized'], this.boundSync);\r\n removeEvt(root, 'hashchange', this.boundSync);\r\n\r\n this.state = null;\r\n this.lastHash = null;\r\n this.emitter = null;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {addEvt, targetEvt, removeEvt} from '../event';\r\nimport {NONE} from '../const';\r\nimport {root} from '../root';\r\nimport {isEmpty, isNull} from '../types';\r\nimport {defaultsStr} from '../settings';\r\nimport {RIGHT} from './toolbar';\r\n\r\nconst WIKI_URL = 'https://github.com/koalyptus/TableFilter/wiki/' +\r\n '4.-Filter-operators';\r\nconst WEBSITE_URL = 'https://www.tablefilter.com/';\r\n\r\n/**\r\n * Help UI component\r\n */\r\nexport class Help extends Feature {\r\n\r\n /**\r\n * Creates an instance of Help\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'help');\r\n\r\n let f = this.config.help_instructions || {};\r\n\r\n /**\r\n * ID of main custom container element\r\n * @type {String}\r\n */\r\n this.tgtId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * ID of custom container element for instructions\r\n * @type {String}\r\n */\r\n this.contTgtId = defaultsStr(f.container_target_id, null);\r\n\r\n /**\r\n * Instructions text (accepts HTML)\r\n * @type {String}\r\n */\r\n this.instrText = !isEmpty(f.text) ? f.text :\r\n 'Use the filters above each column to filter and limit table ' +\r\n 'data. Advanced searches can be performed by using the following ' +\r\n 'operators:
<, <=, >, ' +\r\n '>=, =, *, !, {, }, ' +\r\n '||,&&, [empty], [nonempty], ' +\r\n 'rgx:
' +\r\n 'Learn more
';\r\n\r\n /**\r\n * Instructions HTML\r\n * @type {String}\r\n */\r\n this.instrHtml = defaultsStr(f.html, null);\r\n\r\n /**\r\n * Help button text ('?')\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, '?');\r\n\r\n /**\r\n * Custom help button 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 help button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'helpBtn');\r\n\r\n /**\r\n * Css class for help container element\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.container_css_class, 'helpCont');\r\n\r\n /**\r\n * Button DOM element\r\n * @type {DOMElement}\r\n */\r\n this.btn = null;\r\n\r\n /**\r\n * Help container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.cont = null;\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 * Default HTML appended to instructions text\r\n * @type {String}\r\n */\r\n this.defaultHtml = '

TableFilter ' +\r\n 'v' + tf.version + '

' + '' + WEBSITE_URL + '' +\r\n '
©2015-' + tf.year + ' Max Guglielmi' +\r\n '
' +\r\n 'Close
';\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 this.emitter.on(['init-help'], () => this.init());\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.cont && targetElm !== this.btn) {\r\n targetElm = targetElm.parentNode;\r\n }\r\n\r\n if (targetElm !== this.cont && targetElm !== this.btn) {\r\n this.toggle();\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Initialise Help instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.tgtId));\r\n\r\n let tf = this.tf;\r\n\r\n let btn = createElm('span');\r\n let cont = createElm('div');\r\n\r\n this.boundMouseup = this.onMouseup.bind(this);\r\n\r\n //help button is added to defined element\r\n let targetEl = !this.tgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.tgtId);\r\n targetEl.appendChild(btn);\r\n\r\n let divContainer = !this.contTgtId ? btn : elm(this.contTgtId);\r\n\r\n if (!this.btnHtml) {\r\n divContainer.appendChild(cont);\r\n let helplink = createElm('a', ['href', 'javascript:void(0);']);\r\n helplink.className = this.btnCssClass;\r\n helplink.appendChild(createText(this.btnText));\r\n btn.appendChild(helplink);\r\n addEvt(helplink, 'click', () => this.toggle());\r\n } else {\r\n btn.innerHTML = this.btnHtml;\r\n let helpEl = btn.firstChild;\r\n addEvt(helpEl, 'click', () => this.toggle());\r\n divContainer.appendChild(cont);\r\n }\r\n\r\n if (!this.instrHtml) {\r\n cont.innerHTML = this.instrText;\r\n cont.className = this.contCssClass;\r\n } else {\r\n if (this.contTgtId) {\r\n divContainer.appendChild(cont);\r\n }\r\n cont.innerHTML = this.instrHtml;\r\n if (!this.contTgtId) {\r\n cont.className = this.contCssClass;\r\n }\r\n }\r\n cont.innerHTML += this.defaultHtml;\r\n addEvt(cont, 'click', () => this.toggle());\r\n\r\n this.cont = cont;\r\n this.btn = btn;\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Toggle help pop-up\r\n */\r\n toggle() {\r\n // check only if explicitily disabled as in this case undefined\r\n // signifies the help feature is enabled by default\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n // ensure mouseup event handler is removed\r\n removeEvt(root, 'mouseup', this.boundMouseup);\r\n\r\n let divDisplay = this.cont.style.display;\r\n if (divDisplay === '' || divDisplay === NONE) {\r\n this.cont.style.display = 'inline';\r\n addEvt(root, 'mouseup', this.boundMouseup);\r\n } else {\r\n this.cont.style.display = NONE;\r\n }\r\n }\r\n\r\n /**\r\n * Remove help UI\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n removeElm(this.btn);\r\n this.btn = null;\r\n\r\n removeElm(this.cont);\r\n this.cont = null;\r\n\r\n this.boundMouseup = null;\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n\r\n// TODO: remove as soon as feature name is fixed\r\nHelp.alwaysInstantiate = true;\r\n","import {createText, createElm, getText} from '../dom';\r\nimport {isNull} from '../types';\r\nimport {rgxEsc} from '../string';\r\nimport {defaultsStr} from '../settings';\r\n\r\n/**\r\n * Highlight matched keywords upon filtering\r\n *\r\n * @export\r\n * @class HighlightKeyword\r\n */\r\nexport class HighlightKeyword {\r\n\r\n /**\r\n * Creates an instance of HighlightKeyword\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n let f = tf.config();\r\n\r\n /**\r\n * Css class for highlighted term\r\n * @type {String}\r\n */\r\n this.highlightCssClass = defaultsStr(f.highlight_css_class, 'keyword');\r\n\r\n /**\r\n * TableFilter instance\r\n * @type {TableFilter}\r\n */\r\n this.tf = tf;\r\n\r\n /**\r\n * TableFilter's emitter instance\r\n * @type {Emitter}\r\n */\r\n this.emitter = tf.emitter;\r\n }\r\n\r\n /**\r\n * Initializes HighlightKeyword instance\r\n */\r\n init() {\r\n this.emitter.on(\r\n ['before-filtering', 'destroy'],\r\n () => this.unhighlightAll()\r\n );\r\n this.emitter.on(\r\n ['highlight-keyword'],\r\n (tf, cell, term) => this._processTerm(cell, term)\r\n );\r\n }\r\n\r\n /**\r\n * Highlight occurences of searched term in passed node\r\n * @param {Node} node\r\n * @param {String} term Searched term\r\n * @param {String} cssClass Css class name\r\n *\r\n * TODO: refactor this method\r\n */\r\n highlight(node, term, cssClass) {\r\n // Iterate into this nodes childNodes\r\n if (node.hasChildNodes) {\r\n let children = node.childNodes;\r\n for (let i = 0; i < children.length; i++) {\r\n this.highlight(children[i], term, cssClass);\r\n }\r\n }\r\n\r\n if (node.nodeType === 3) {\r\n let nodeVal = node.nodeValue.toLowerCase();\r\n let termIdx = nodeVal.indexOf(term.toLowerCase());\r\n\r\n if (termIdx !== -1) {\r\n let pn = node.parentNode;\r\n if (pn && pn.className !== cssClass) {\r\n // term not highlighted yet\r\n let nv = node.nodeValue,\r\n // Create a load of replacement nodes\r\n before = createText(nv.substr(0, termIdx)),\r\n value = nv.substr(termIdx, term.length),\r\n after = createText(nv.substr(termIdx + term.length)),\r\n text = createText(value),\r\n container = createElm('span');\r\n container.className = cssClass;\r\n container.appendChild(text);\r\n pn.insertBefore(before, node);\r\n pn.insertBefore(container, node);\r\n pn.insertBefore(after, node);\r\n pn.removeChild(node);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes highlight to nodes matching passed string\r\n * @param {String} term\r\n * @param {String} cssClass Css class to remove\r\n */\r\n unhighlight(term, cssClass) {\r\n let highlightedNodes = this.tf.dom().querySelectorAll(`.${cssClass}`);\r\n for (let i = 0; i < highlightedNodes.length; i++) {\r\n let n = highlightedNodes[i];\r\n let nodeVal = getText(n);\r\n\r\n if (isNull(term) ||\r\n nodeVal.toLowerCase().indexOf(term.toLowerCase()) !== -1) {\r\n let parentNode = n.parentNode;\r\n parentNode.replaceChild(createText(nodeVal), n);\r\n parentNode.normalize();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clear all occurrences of highlighted nodes\r\n */\r\n unhighlightAll() {\r\n if (!this.tf.highlightKeywords) {\r\n return;\r\n }\r\n\r\n this.unhighlight(null, this.highlightCssClass);\r\n }\r\n\r\n /** Remove feature */\r\n destroy() {\r\n this.emitter.off(\r\n ['before-filtering', 'destroy'],\r\n () => this.unhighlightAll()\r\n );\r\n this.emitter.off(\r\n ['highlight-keyword'],\r\n (tf, cell, term) => this._processTerm(cell, term)\r\n );\r\n }\r\n\r\n /**\r\n * Ensure filtering operators are handled before highlighting any match\r\n * @param {any} Table cell to look searched term into\r\n * @param {any} Searched termIdx\r\n */\r\n _processTerm(cell, term) {\r\n let tf = this.tf;\r\n let reLk = new RegExp(rgxEsc(tf.lkOperator));\r\n let reEq = new RegExp(tf.eqOperator);\r\n let reSt = new RegExp(tf.stOperator);\r\n let reEn = new RegExp(tf.enOperator);\r\n let reLe = new RegExp(tf.leOperator);\r\n let reGe = new RegExp(tf.geOperator);\r\n let reL = new RegExp(tf.lwOperator);\r\n let reG = new RegExp(tf.grOperator);\r\n let reD = new RegExp(tf.dfOperator);\r\n\r\n term = term\r\n .replace(reLk, '')\r\n .replace(reEq, '')\r\n .replace(reSt, '')\r\n .replace(reEn, '');\r\n\r\n if (reLe.test(term) || reGe.test(term) || reL.test(term) ||\r\n reG.test(term) || reD.test(term)) {\r\n term = getText(cell);\r\n }\r\n\r\n if (term === '') {\r\n return;\r\n }\r\n\r\n this.highlight(cell, term, this.highlightCssClass);\r\n }\r\n}\r\n\r\n// TODO: remove as soon as feature name is fixed\r\nHighlightKeyword.altName = 'highlightKeywords';\r\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {EMPTY_FN} from '../types';\r\nimport {root} from '../root';\r\nimport {NONE} from '../const';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\n\r\nconst BEFORE_ACTION_EVENTS = [\r\n 'before-filtering',\r\n 'before-populating-filter',\r\n 'before-page-change',\r\n 'before-clearing-filters',\r\n 'before-page-length-change',\r\n 'before-reset-page',\r\n 'before-reset-page-length',\r\n 'before-loading-extensions',\r\n 'before-loading-themes'\r\n];\r\n\r\nconst AFTER_ACTION_EVENTS = [\r\n 'after-filtering',\r\n 'after-populating-filter',\r\n 'after-page-change',\r\n 'after-clearing-filters',\r\n 'after-page-length-change',\r\n 'after-reset-page',\r\n 'after-reset-page-length',\r\n 'after-loading-extensions',\r\n 'after-loading-themes'\r\n];\r\n\r\n/**\r\n * Activity indicator\r\n *\r\n * @export\r\n * @class Loader\r\n * @extends {Feature}\r\n */\r\nexport class Loader extends Feature {\r\n\r\n /**\r\n * Creates an instance of Loader.\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'loader');\r\n\r\n let f = this.config.loader || {};\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Loader container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.cont = null;\r\n\r\n /**\r\n * Text displayed when indicator is visible\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, 'Loading...');\r\n\r\n /**\r\n * Custom HTML injected in Loader's container element\r\n * @type {String}\r\n */\r\n this.html = defaultsStr(f.html, null);\r\n\r\n /**\r\n * Css class for Loader's container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'loader');\r\n\r\n /**\r\n * Close delay in milliseconds\r\n * @type {Number}\r\n */\r\n this.closeDelay = 250;\r\n\r\n /**\r\n * Callback fired when loader is displayed\r\n * @type {Function}\r\n */\r\n this.onShow = defaultsFn(f.on_show_loader, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired when loader is closed\r\n * @type {Function}\r\n */\r\n this.onHide = defaultsFn(f.on_hide_loader, EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initializes Loader instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n let emitter = this.emitter;\r\n\r\n let containerDiv = createElm('div');\r\n containerDiv.className = this.cssClass;\r\n\r\n let targetEl = !this.targetId ?\r\n tf.dom().parentNode : elm(this.targetId);\r\n if (!this.targetId) {\r\n targetEl.insertBefore(containerDiv, tf.dom());\r\n } else {\r\n targetEl.appendChild(containerDiv);\r\n }\r\n this.cont = containerDiv;\r\n if (!this.html) {\r\n this.cont.appendChild(createText(this.text));\r\n } else {\r\n this.cont.innerHTML = this.html;\r\n }\r\n\r\n this.show(NONE);\r\n\r\n // Subscribe to events\r\n emitter.on(BEFORE_ACTION_EVENTS, () => this.show(''));\r\n emitter.on(AFTER_ACTION_EVENTS, () => this.show(NONE));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Shows or hides activity indicator\r\n * @param {String} Two possible values: '' or 'none'\r\n */\r\n show(p) {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n function displayLoader() {\r\n if (!this.cont) {\r\n return;\r\n }\r\n if (p !== NONE) {\r\n this.onShow(this);\r\n }\r\n this.cont.style.display = p;\r\n if (p === NONE) {\r\n this.onHide(this);\r\n }\r\n };\r\n\r\n let t = p === NONE ? this.closeDelay : 1;\r\n root.setTimeout(displayLoader.bind(this), t);\r\n }\r\n\r\n /**\r\n * Removes feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let emitter = this.emitter;\r\n\r\n removeElm(this.cont);\r\n this.cont = null;\r\n\r\n // Unsubscribe to events\r\n emitter.off(BEFORE_ACTION_EVENTS, () => this.show(''));\r\n emitter.off(AFTER_ACTION_EVENTS, () => this.show(NONE));\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {addClass, removeClass, hasClass} from '../dom';\r\nimport {EMPTY_FN} from '../types';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\n\r\n/**\r\n * Visual indicator for filtered columns\r\n * @export\r\n * @class MarkActiveColumns\r\n * @extends {Feature}\r\n */\r\nexport class MarkActiveColumns extends Feature {\r\n\r\n /**\r\n * Create an instance of MarkActiveColumns\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'markActiveColumns');\r\n\r\n let config = this.config.mark_active_columns || {};\r\n\r\n /**\r\n * Css class for filtered (active) columns\r\n * @type {String}\r\n */\r\n this.headerCssClass = defaultsStr(config.header_css_class,\r\n 'activeHeader');\r\n\r\n /**\r\n * Css class for filtered (active) column cells\r\n * @type {String}\r\n */\r\n this.cellCssClass = defaultsStr(config.cell_css_class,\r\n 'activeCell');\r\n\r\n /**\r\n * Enable/disable column highlighting\r\n * @type {Boolean}\r\n */\r\n this.highlightColumn = Boolean(config.highlight_column);\r\n\r\n /**\r\n * Callback fired before a column is marked as filtered\r\n * @type {Function}\r\n */\r\n this.onBeforeActiveColumn = defaultsFn(config.on_before_active_column,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a column is marked as filtered\r\n * @type {Function}\r\n */\r\n this.onAfterActiveColumn = defaultsFn(config.on_after_active_column,\r\n EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initialise MarkActiveColumns instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.on(['before-filtering'], () => this.clearActiveColumns());\r\n this.emitter.on(\r\n ['cell-processed'],\r\n (tf, colIndex) => this.markActiveColumn(colIndex)\r\n );\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Clear filtered columns visual indicator (background color)\r\n */\r\n clearActiveColumns() {\r\n let tf = this.tf;\r\n tf.eachCol((idx) => {\r\n removeClass(tf.getHeaderElement(idx), this.headerCssClass);\r\n\r\n if (this.highlightColumn) {\r\n this.eachColumnCell(idx,\r\n (cell) => removeClass(cell, this.cellCssClass));\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mark currently filtered column\r\n * @param {Number} colIndex Column index\r\n */\r\n markActiveColumn(colIndex) {\r\n let tf = this.tf;\r\n let header = tf.getHeaderElement(colIndex);\r\n if (hasClass(header, this.headerCssClass)) {\r\n return;\r\n }\r\n\r\n this.onBeforeActiveColumn(this, colIndex);\r\n\r\n addClass(header, this.headerCssClass);\r\n\r\n if (this.highlightColumn) {\r\n this.eachColumnCell(colIndex,\r\n (cell) => addClass(cell, this.cellCssClass));\r\n }\r\n\r\n this.onAfterActiveColumn(this, colIndex);\r\n }\r\n\r\n /**\r\n * Column cells iterator\r\n * TODO: make public and move into TableFilter if used elsewhere\r\n * @param {Number} colIndex\r\n * @param {Function} fn\r\n * @param {DOMElement} tbl\r\n * @private\r\n */\r\n eachColumnCell(colIndex, fn = EMPTY_FN, tbl = this.tf.dom()) {\r\n // TODO: remove [].forEach when polyfill for PhanthomJs is available\r\n [].forEach.call(\r\n tbl.querySelectorAll(`tbody td:nth-child(${colIndex + 1})`), fn);\r\n }\r\n\r\n /**\r\n * Remove feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.clearActiveColumns();\r\n this.emitter.off(['before-filtering'], () => this.clearActiveColumns());\r\n this.emitter.off(\r\n ['cell-processed'],\r\n (tf, colIndex) => this.markActiveColumn(colIndex)\r\n );\r\n\r\n /** @inherited */\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, elm, removeElm} from '../dom';\r\nimport {isEmpty, EMPTY_FN} from '../types';\r\nimport {NONE} from '../const';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\n\r\n/**\r\n * UI when filtering yields no matches\r\n * @export\r\n * @class NoResults\r\n * @extends {Feature}\r\n */\r\nexport class NoResults extends Feature {\r\n\r\n /**\r\n * Creates an instance of NoResults\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'noResults');\r\n\r\n //configuration object\r\n let f = this.config.no_results_message || {};\r\n\r\n /**\r\n * Text (accepts HTML)\r\n * @type {String}\r\n */\r\n this.content = defaultsStr(f.content, 'No results');\r\n\r\n /**\r\n * Custom container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.customContainer = defaultsStr(f.custom_container, null);\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.customContainerId = defaultsStr(f.custom_container_id, null);\r\n\r\n /**\r\n * Indicates if UI is contained in a external element\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isExternal = !isEmpty(this.customContainer) ||\r\n !isEmpty(this.customContainerId);\r\n\r\n /**\r\n * Css class assigned to container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'no-results');\r\n\r\n /**\r\n * Stores container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.cont = null;\r\n\r\n /**\r\n * Callback fired before the message is displayed\r\n * @type {Function}\r\n */\r\n this.onBeforeShow = defaultsFn(f.on_before_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the message is displayed\r\n * @type {Function}\r\n */\r\n this.onAfterShow = defaultsFn(f.on_after_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before the message is hidden\r\n * @type {Function}\r\n */\r\n this.onBeforeHide = defaultsFn(f.on_before_hide_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the message is hidden\r\n * @type {Function}\r\n */\r\n this.onAfterHide = defaultsFn(f.on_after_hide_msg, EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initializes NoResults instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let target = this.customContainer || elm(this.customContainerId) ||\r\n tf.dom();\r\n\r\n //container\r\n let cont = createElm('div');\r\n cont.className = this.cssClass;\r\n cont.innerHTML = this.content;\r\n\r\n if (this.isExternal) {\r\n target.appendChild(cont);\r\n } else {\r\n target.parentNode.insertBefore(cont, target.nextSibling);\r\n }\r\n\r\n this.cont = cont;\r\n\r\n // subscribe to after-filtering event\r\n this.emitter.on(\r\n ['initialized', 'after-filtering'],\r\n () => this.toggle()\r\n );\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Toggle no results message\r\n */\r\n toggle() {\r\n if (this.tf.getValidRowsNb() > 0) {\r\n this.hide();\r\n } else {\r\n this.show();\r\n }\r\n }\r\n\r\n /**\r\n * Show no results message\r\n */\r\n show() {\r\n if (!this.initialized || !this.isEnabled()) {\r\n return;\r\n }\r\n this.onBeforeShow(this.tf, this);\r\n\r\n this.setWidth();\r\n this.cont.style.display = 'block';\r\n\r\n this.onAfterShow(this.tf, this);\r\n }\r\n\r\n /**\r\n * Hide no results message\r\n */\r\n hide() {\r\n if (!this.initialized || !this.isEnabled()) {\r\n return;\r\n }\r\n this.onBeforeHide(this.tf, this);\r\n\r\n this.cont.style.display = NONE;\r\n\r\n this.onAfterHide(this.tf, this);\r\n }\r\n\r\n /**\r\n * Sets no results container width\r\n * @private\r\n */\r\n setWidth() {\r\n if (!this.initialized || this.isExternal || !this.isEnabled()) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n if (tf.gridLayout) {\r\n let gridLayout = tf.feature('gridLayout');\r\n this.cont.style.width = gridLayout.headTbl.clientWidth + 'px';\r\n } else {\r\n this.cont.style.width = (tf.dom().tHead ?\r\n tf.dom().tHead.clientWidth :\r\n tf.dom().tBodies[0].clientWidth) + 'px';\r\n }\r\n }\r\n\r\n /** Remove feature */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n removeElm(this.cont);\r\n this.cont = null;\r\n // unsubscribe to after-filtering event\r\n this.emitter.off(['after-filtering'], () => this.toggle());\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createOpt, createText, elm, removeElm} from '../dom';\r\nimport {isArray, isNull, EMPTY_FN} from '../types';\r\nimport {addEvt, removeEvt, isKeyPressed, bound} from '../event';\r\nimport {INPUT, SELECT, NONE, ENTER_KEY} from '../const';\r\nimport {\r\n defaultsStr, defaultsNb, defaultsBool, defaultsArr, defaultsFn\r\n} from '../settings';\r\nimport {CENTER, RIGHT} from './toolbar';\r\n\r\n/**\r\n * Paging UI component\r\n * @export\r\n * @class Paging\r\n * @extends {Feature}\r\n */\r\nexport class Paging extends Feature {\r\n\r\n /**\r\n * Creates an instance of Paging\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'paging');\r\n\r\n // Configuration object\r\n let f = this.config.paging || {};\r\n\r\n /**\r\n * Css class for the paging buttons (previous, next, etc.)\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'pgInp');\r\n\r\n /**\r\n * Main select DOM element\r\n * @type {DOMElement}\r\n */\r\n this.pageSlc = null;\r\n\r\n /**\r\n * Results per page select DOM element\r\n * @type {DOMElement}\r\n */\r\n this.pageLengthSlc = null;\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.tgtId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Number of rows contained in a page\r\n * @type {Number}\r\n */\r\n this.pageLength = defaultsNb(f.length, 10);\r\n\r\n /**\r\n * ID of custom container element for the results per page selector\r\n * @type {String}\r\n */\r\n this.pageLengthTgtId = defaultsStr(f.results_per_page_target_id, null);\r\n\r\n /**\r\n * Css class for the paging select element\r\n * @type {String}\r\n */\r\n this.pgSlcCssClass = defaultsStr(f.slc_css_class, 'pgSlc');\r\n\r\n /**\r\n * Css class for the paging input element\r\n * @type {String}\r\n */\r\n this.pgInpCssClass = defaultsStr(f.inp_css_class, 'pgNbInp');\r\n\r\n /**\r\n * Label and values for the results per page select, example of usage:\r\n * ['Records: ', [10,25,50,100]]\r\n * @type {Array}\r\n */\r\n this.resultsPerPage = defaultsArr(f.results_per_page, null);\r\n\r\n /**\r\n * Determines if results per page is configured\r\n * @type {Boolean}\r\n */\r\n this.hasResultsPerPage = isArray(this.resultsPerPage);\r\n\r\n /**\r\n * Css class for the results per page select\r\n * @type {String}\r\n */\r\n this.resultsSlcCssClass = defaultsStr(f.results_slc_css_class, 'rspg');\r\n\r\n /**\r\n * Css class for the label preceding results per page select\r\n * @type {String}\r\n */\r\n this.resultsSpanCssClass = defaultsStr(f.results_span_css_class,\r\n 'rspgSpan');\r\n\r\n /**\r\n * Index of the first row of current page\r\n * @type {Number}\r\n * @private\r\n */\r\n this.startPagingRow = 0;\r\n\r\n /**\r\n * Total number of pages\r\n * @type {Number}\r\n * @private\r\n */\r\n this.nbPages = 0;\r\n\r\n /**\r\n * Current page number\r\n * @type {Number}\r\n * @private\r\n */\r\n this.currentPageNb = 1;\r\n\r\n /**\r\n * Next page button text\r\n * @type {String}\r\n */\r\n this.btnNextPageText = defaultsStr(f.btn_next_page_text, '>');\r\n\r\n /**\r\n * Previous page button text\r\n * @type {String}\r\n */\r\n this.btnPrevPageText = defaultsStr(f.btn_prev_page_text, '<');\r\n\r\n /**\r\n * Last page button text\r\n * @type {String}\r\n */\r\n this.btnLastPageText = defaultsStr(f.btn_last_page_text, '>|');\r\n\r\n /**\r\n * First page button text\r\n * @type {String}\r\n */\r\n this.btnFirstPageText = defaultsStr(f.btn_first_page_text, '|<');\r\n\r\n /**\r\n * Next page button HTML\r\n * @type {String}\r\n */\r\n this.btnNextPageHtml = defaultsStr(f.btn_next_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * Previous page button HTML\r\n * @type {String}\r\n */\r\n this.btnPrevPageHtml = defaultsStr(f.btn_prev_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * First page button HTML\r\n * @type {String}\r\n */\r\n this.btnFirstPageHtml = defaultsStr(f.btn_first_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * Last page button HTML\r\n * @type {String}\r\n */\r\n this.btnLastPageHtml = defaultsStr(f.btn_last_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * Text preceeding page selector drop-down\r\n * @type {String}\r\n */\r\n this.pageText = defaultsStr(f.page_text, ' Page ');\r\n\r\n /**\r\n * Text after page selector drop-down\r\n * @type {String}\r\n */\r\n this.ofText = defaultsStr(f.of_text, ' of ');\r\n\r\n /**\r\n * Css class for the span containing total number of pages\r\n * @type {String}\r\n */\r\n this.nbPgSpanCssClass = defaultsStr(f.nb_pages_css_class, 'nbpg');\r\n\r\n /**\r\n * Determines if paging buttons are enabled (default: true)\r\n * @type {Boolean}\r\n */\r\n this.hasBtns = defaultsBool(f.btns, true);\r\n\r\n /**\r\n * Defines page selector type, two possible values: 'select', 'input'\r\n * @type {String}\r\n */\r\n this.pageSelectorType = defaultsStr(f.page_selector_type, SELECT);\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, CENTER);\r\n\r\n /**\r\n * Callback fired before the page is changed\r\n * @type {Function}\r\n */\r\n this.onBeforeChangePage = defaultsFn(f.on_before_change_page, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the page is changed\r\n * @type {Function}\r\n */\r\n this.onAfterChangePage = defaultsFn(f.on_after_change_page, EMPTY_FN);\r\n\r\n /**\r\n * Label preciding results per page select\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.slcResultsTxt = null;\r\n /**\r\n * Span containing next page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnNextCont = null;\r\n /**\r\n * Span containing previous page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnPrevCont = null;\r\n /**\r\n * Span containing last page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnLastCont = null;\r\n /**\r\n * Span containing first page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnFirstCont = null;\r\n /**\r\n * Span for tot nb pages\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.pgCont = null;\r\n /**\r\n * Span preceding pages select (contains 'Page')\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.pgBefore = null;\r\n /**\r\n * Span following pages select (contains ' of ')\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.pgAfter = null;\r\n\r\n let startRow = tf.refRow;\r\n let nrows = tf.getRowsNb(true);\r\n //calculates page nb\r\n this.nbPages = Math.ceil((nrows - startRow) / this.pageLength);\r\n\r\n let o = this;\r\n /**\r\n * Paging DOM events handlers\r\n * @type {String}\r\n * @private\r\n */\r\n this.evt = {\r\n slcIndex() {\r\n return (o.pageSelectorType === SELECT) ?\r\n o.pageSlc.options.selectedIndex :\r\n parseInt(o.pageSlc.value, 10) - 1;\r\n },\r\n nbOpts() {\r\n return (o.pageSelectorType === SELECT) ?\r\n parseInt(o.pageSlc.options.length, 10) - 1 :\r\n (o.nbPages - 1);\r\n },\r\n next() {\r\n let nextIndex = o.evt.slcIndex() < o.evt.nbOpts() ?\r\n o.evt.slcIndex() + 1 : 0;\r\n o.changePage(nextIndex);\r\n },\r\n prev() {\r\n let prevIndex = o.evt.slcIndex() > 0 ?\r\n o.evt.slcIndex() - 1 : o.evt.nbOpts();\r\n o.changePage(prevIndex);\r\n },\r\n last() {\r\n o.changePage(o.evt.nbOpts());\r\n },\r\n first() {\r\n o.changePage(0);\r\n },\r\n _detectKey(e) {\r\n if (isKeyPressed(e, [ENTER_KEY])) {\r\n if (tf.sorted) {\r\n tf.filter();\r\n o.changePage(o.evt.slcIndex());\r\n } else {\r\n o.changePage();\r\n }\r\n this.blur();\r\n }\r\n },\r\n slcPagesChange: null,\r\n nextEvt: null,\r\n prevEvt: null,\r\n lastEvt: null,\r\n firstEvt: null\r\n };\r\n }\r\n\r\n /**\r\n * Initialize DOM elements\r\n */\r\n init() {\r\n let slcPages;\r\n let tf = this.tf;\r\n let evt = this.evt;\r\n\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.tgtId));\r\n\r\n // Check resultsPerPage is in expected format and initialise the\r\n // results per page component\r\n if (this.hasResultsPerPage) {\r\n if (this.resultsPerPage.length < 2) {\r\n this.hasResultsPerPage = false;\r\n } else {\r\n this.pageLength = this.resultsPerPage[1][0];\r\n this.setResultsPerPage();\r\n }\r\n }\r\n\r\n evt.slcPagesChange = (event) => {\r\n let slc = event.target;\r\n this.changePage(slc.selectedIndex);\r\n };\r\n\r\n // Paging drop-down list selector\r\n if (this.pageSelectorType === SELECT) {\r\n slcPages = createElm(SELECT);\r\n slcPages.className = this.pgSlcCssClass;\r\n addEvt(slcPages, 'change', evt.slcPagesChange);\r\n }\r\n\r\n // Paging input selector\r\n if (this.pageSelectorType === INPUT) {\r\n slcPages = createElm(INPUT, ['value', this.currentPageNb]);\r\n slcPages.className = this.pgInpCssClass;\r\n addEvt(slcPages, 'keypress', evt._detectKey);\r\n }\r\n\r\n // btns containers\r\n let btnNextSpan = createElm('span');\r\n let btnPrevSpan = createElm('span');\r\n let btnLastSpan = createElm('span');\r\n let btnFirstSpan = createElm('span');\r\n\r\n if (this.hasBtns) {\r\n // Next button\r\n if (!this.btnNextPageHtml) {\r\n let btnNext = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnNextPageText],\r\n ['title', 'Next']\r\n );\r\n btnNext.className = this.btnCssClass;\r\n addEvt(btnNext, 'click', evt.next);\r\n btnNextSpan.appendChild(btnNext);\r\n } else {\r\n btnNextSpan.innerHTML = this.btnNextPageHtml;\r\n addEvt(btnNextSpan, 'click', evt.next);\r\n }\r\n // Previous button\r\n if (!this.btnPrevPageHtml) {\r\n let btnPrev = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnPrevPageText],\r\n ['title', 'Previous']\r\n );\r\n btnPrev.className = this.btnCssClass;\r\n addEvt(btnPrev, 'click', evt.prev);\r\n btnPrevSpan.appendChild(btnPrev);\r\n } else {\r\n btnPrevSpan.innerHTML = this.btnPrevPageHtml;\r\n addEvt(btnPrevSpan, 'click', evt.prev);\r\n }\r\n // Last button\r\n if (!this.btnLastPageHtml) {\r\n let btnLast = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnLastPageText],\r\n ['title', 'Last']\r\n );\r\n btnLast.className = this.btnCssClass;\r\n addEvt(btnLast, 'click', evt.last);\r\n btnLastSpan.appendChild(btnLast);\r\n } else {\r\n btnLastSpan.innerHTML = this.btnLastPageHtml;\r\n addEvt(btnLastSpan, 'click', evt.last);\r\n }\r\n // First button\r\n if (!this.btnFirstPageHtml) {\r\n let btnFirst = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnFirstPageText],\r\n ['title', 'First']\r\n );\r\n btnFirst.className = this.btnCssClass;\r\n addEvt(btnFirst, 'click', evt.first);\r\n btnFirstSpan.appendChild(btnFirst);\r\n } else {\r\n btnFirstSpan.innerHTML = this.btnFirstPageHtml;\r\n addEvt(btnFirstSpan, 'click', evt.first);\r\n }\r\n }\r\n\r\n // paging elements (buttons+drop-down list) are added to defined element\r\n let targetEl = !this.tgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.tgtId);\r\n targetEl.appendChild(btnFirstSpan);\r\n targetEl.appendChild(btnPrevSpan);\r\n\r\n let pgBeforeSpan = createElm('span');\r\n pgBeforeSpan.appendChild(createText(this.pageText));\r\n pgBeforeSpan.className = this.nbPgSpanCssClass;\r\n targetEl.appendChild(pgBeforeSpan);\r\n targetEl.appendChild(slcPages);\r\n let pgAfterSpan = createElm('span');\r\n pgAfterSpan.appendChild(createText(this.ofText));\r\n pgAfterSpan.className = this.nbPgSpanCssClass;\r\n targetEl.appendChild(pgAfterSpan);\r\n let pgSpan = createElm('span');\r\n pgSpan.className = this.nbPgSpanCssClass;\r\n pgSpan.appendChild(createText(' ' + this.nbPages + ' '));\r\n targetEl.appendChild(pgSpan);\r\n targetEl.appendChild(btnNextSpan);\r\n targetEl.appendChild(btnLastSpan);\r\n\r\n this.btnNextCont = btnNextSpan;\r\n this.btnPrevCont = btnPrevSpan;\r\n this.btnLastCont = btnLastSpan;\r\n this.btnFirstCont = btnFirstSpan;\r\n this.pgCont = pgSpan;\r\n this.pgBefore = pgBeforeSpan;\r\n this.pgAfter = pgAfterSpan;\r\n this.pageSlc = slcPages;\r\n\r\n this.setPagingInfo();\r\n\r\n if (!tf.fltGrid) {\r\n tf.validateAllRows();\r\n this.setPagingInfo(tf.validRowsIndex);\r\n }\r\n\r\n this.emitter.on(['after-filtering'], bound(this.resetPagingInfo, this));\r\n this.emitter.on(['change-page'], bound(this.changePageHandler, this));\r\n this.emitter.on(['change-page-results'],\r\n bound(this.changePageResultsHandler, this));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Reset paging when filters are already instantiated\r\n * @param {Boolean} filterTable Execute filtering once paging instanciated\r\n */\r\n reset(filterTable = false) {\r\n this.enable();\r\n this.init();\r\n\r\n if (filterTable) {\r\n this.tf.filter();\r\n }\r\n }\r\n\r\n /**\r\n * Reset paging info from scratch after a filtering process\r\n */\r\n resetPagingInfo() {\r\n this.startPagingRow = 0;\r\n this.currentPageNb = 1;\r\n this.setPagingInfo(this.tf.validRowsIndex);\r\n }\r\n\r\n /**\r\n * Calculate number of pages based on valid rows\r\n * Refresh paging select according to number of pages\r\n * @param {Array} validRows Collection of valid rows\r\n */\r\n setPagingInfo(validRows) {\r\n let tf = this.tf;\r\n let cont = !this.tgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.tgtId);\r\n\r\n //store valid rows indexes\r\n tf.validRowsIndex = validRows || tf.getValidRows(true);\r\n\r\n //calculate nb of pages\r\n this.nbPages = Math.ceil(tf.validRowsIndex.length / this.pageLength);\r\n //refresh page nb span\r\n this.pgCont.innerHTML = this.nbPages;\r\n //select clearing shortcut\r\n if (this.pageSelectorType === SELECT) {\r\n this.pageSlc.innerHTML = '';\r\n }\r\n\r\n if (this.nbPages > 0) {\r\n cont.style.visibility = 'visible';\r\n if (this.pageSelectorType === SELECT) {\r\n for (let z = 0; z < this.nbPages; z++) {\r\n let opt = createOpt(z + 1, z * this.pageLength, false);\r\n this.pageSlc.options[z] = opt;\r\n }\r\n } else {\r\n //input type\r\n this.pageSlc.value = this.currentPageNb;\r\n }\r\n\r\n } else {\r\n /*** if no results paging select and buttons are hidden ***/\r\n cont.style.visibility = 'hidden';\r\n }\r\n this.groupByPage(tf.validRowsIndex);\r\n }\r\n\r\n /**\r\n * Group table rows by page and display valid rows\r\n * @param {Array} validRows Collection of valid rows\r\n */\r\n groupByPage(validRows) {\r\n let tf = this.tf;\r\n let rows = tf.dom().rows;\r\n let startPagingRow = parseInt(this.startPagingRow, 10);\r\n let endPagingRow = startPagingRow + parseInt(this.pageLength, 10);\r\n\r\n //store valid rows indexes\r\n if (validRows) {\r\n tf.validRowsIndex = validRows;\r\n }\r\n\r\n //this loop shows valid rows of current page\r\n for (let h = 0, len = tf.getValidRowsNb(true); h < len; h++) {\r\n let validRowIdx = tf.validRowsIndex[h];\r\n let r = rows[validRowIdx];\r\n let isRowValid = r.getAttribute('validRow');\r\n let rowDisplayed = false;\r\n\r\n if (h >= startPagingRow && h < endPagingRow) {\r\n if (isNull(isRowValid) || Boolean(isRowValid === 'true')) {\r\n r.style.display = '';\r\n rowDisplayed = true;\r\n }\r\n } else {\r\n r.style.display = NONE;\r\n }\r\n this.emitter.emit('row-paged', tf, validRowIdx, h, rowDisplayed);\r\n }\r\n\r\n // broadcast grouping by page\r\n this.emitter.emit('grouped-by-page', tf, this);\r\n }\r\n\r\n /**\r\n * Return the current page number\r\n * @return {Number} Page number\r\n */\r\n getPage() {\r\n return this.currentPageNb;\r\n }\r\n\r\n /**\r\n * Show page defined by passed argument (string or number):\r\n * @param {String}/{Number} cmd possible string values: 'next',\r\n * 'previous', 'last', 'first' or page number as per param\r\n */\r\n setPage(cmd) {\r\n let tf = this.tf;\r\n if (!tf.isInitialized() || !this.isEnabled()) {\r\n return;\r\n }\r\n let btnEvt = this.evt,\r\n cmdtype = typeof cmd;\r\n if (cmdtype === 'string') {\r\n switch (cmd.toLowerCase()) {\r\n case 'next':\r\n btnEvt.next();\r\n break;\r\n case 'previous':\r\n btnEvt.prev();\r\n break;\r\n case 'last':\r\n btnEvt.last();\r\n break;\r\n case 'first':\r\n btnEvt.first();\r\n break;\r\n default:\r\n btnEvt.next();\r\n break;\r\n }\r\n }\r\n else if (cmdtype === 'number') {\r\n this.changePage(cmd - 1);\r\n }\r\n }\r\n\r\n /**\r\n * Generates UI elements for the number of results per page drop-down\r\n */\r\n setResultsPerPage() {\r\n let tf = this.tf;\r\n let evt = this.evt;\r\n\r\n if (this.pageLengthSlc || !this.resultsPerPage) {\r\n return;\r\n }\r\n\r\n evt.slcResultsChange = (ev) => {\r\n this.onChangeResultsPerPage();\r\n ev.target.blur();\r\n };\r\n\r\n let slcR = createElm(SELECT);\r\n slcR.className = this.resultsSlcCssClass;\r\n let slcRText = this.resultsPerPage[0],\r\n slcROpts = this.resultsPerPage[1];\r\n let slcRSpan = createElm('span');\r\n slcRSpan.className = this.resultsSpanCssClass;\r\n\r\n // results per page select is added to external element\r\n let targetEl = !this.pageLengthTgtId ?\r\n tf.feature('toolbar').container(RIGHT) :\r\n elm(this.pageLengthTgtId);\r\n slcRSpan.appendChild(createText(slcRText));\r\n\r\n let help = tf.feature('help');\r\n if (help && help.btn) {\r\n help.btn.parentNode.insertBefore(slcRSpan, help.btn);\r\n help.btn.parentNode.insertBefore(slcR, help.btn);\r\n } else {\r\n targetEl.appendChild(slcRSpan);\r\n targetEl.appendChild(slcR);\r\n }\r\n\r\n for (let r = 0; r < slcROpts.length; r++) {\r\n let currOpt = new Option(slcROpts[r], slcROpts[r], false, false);\r\n slcR.options[r] = currOpt;\r\n }\r\n addEvt(slcR, 'change', evt.slcResultsChange);\r\n this.slcResultsTxt = slcRSpan;\r\n this.pageLengthSlc = slcR;\r\n }\r\n\r\n /**\r\n * Remove number of results per page UI elements\r\n */\r\n removeResultsPerPage() {\r\n let tf = this.tf;\r\n if (!tf.isInitialized() || !this.pageLengthSlc ||\r\n !this.resultsPerPage) {\r\n return;\r\n }\r\n if (this.pageLengthSlc) {\r\n removeElm(this.pageLengthSlc);\r\n }\r\n if (this.slcResultsTxt) {\r\n removeElm(this.slcResultsTxt);\r\n }\r\n this.pageLengthSlc = null;\r\n this.slcResultsTxt = null;\r\n }\r\n\r\n /**\r\n * Change the page based on passed index\r\n * @param {Number} index Index of the page (0-n)\r\n */\r\n changePage(index) {\r\n let tf = this.tf;\r\n\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('before-page-change', tf, (index + 1));\r\n\r\n if (index === null) {\r\n index = this.pageSelectorType === SELECT ?\r\n this.pageSlc.options.selectedIndex : this.pageSlc.value - 1;\r\n }\r\n if (index >= 0 && index <= (this.nbPages - 1)) {\r\n this.onBeforeChangePage(this, (index + 1));\r\n\r\n this.currentPageNb = parseInt(index, 10) + 1;\r\n if (this.pageSelectorType === SELECT) {\r\n this.pageSlc.options[index].selected = true;\r\n } else {\r\n this.pageSlc.value = this.currentPageNb;\r\n }\r\n\r\n this.startPagingRow = (this.pageSelectorType === SELECT) ?\r\n this.pageSlc.value : (index * this.pageLength);\r\n\r\n this.groupByPage();\r\n\r\n this.onAfterChangePage(this, (index + 1));\r\n }\r\n\r\n this.emitter.emit('after-page-change', tf, (index + 1));\r\n }\r\n\r\n /**\r\n * Change the number of results per page based on passed value\r\n * @param {String} val The number of results per page\r\n */\r\n changeResultsPerPage(val) {\r\n if (!this.isEnabled() || isNaN(val)) {\r\n return;\r\n }\r\n\r\n this.pageLengthSlc.value = val;\r\n this.onChangeResultsPerPage();\r\n }\r\n\r\n /**\r\n * Change rows according to page results drop-down\r\n */\r\n onChangeResultsPerPage() {\r\n let tf = this.tf;\r\n\r\n if (!this.isEnabled() || tf.getValidRowsNb() === 0) {\r\n return;\r\n }\r\n\r\n let {\r\n pageLengthSlc: slcR, pageSelectorType, pageSlc, emitter\r\n } = this;\r\n\r\n emitter.emit('before-page-length-change', tf);\r\n\r\n let slcIndex = slcR.selectedIndex;\r\n let slcPagesSelIndex = (pageSelectorType === SELECT) ?\r\n pageSlc.selectedIndex : parseInt(pageSlc.value - 1, 10);\r\n this.pageLength = parseInt(slcR.options[slcIndex].value, 10);\r\n this.startPagingRow = this.pageLength * slcPagesSelIndex;\r\n\r\n if (!isNaN(this.pageLength)) {\r\n if (this.startPagingRow >= tf.nbFilterableRows) {\r\n this.startPagingRow = (tf.nbFilterableRows - this.pageLength);\r\n }\r\n this.setPagingInfo();\r\n\r\n if (pageSelectorType === SELECT) {\r\n let slcIdx = (pageSlc.options.length - 1 <= slcPagesSelIndex) ?\r\n (pageSlc.options.length - 1) :\r\n slcPagesSelIndex;\r\n pageSlc.options[slcIdx].selected = true;\r\n }\r\n }\r\n\r\n emitter.emit('after-page-length-change', tf, this.pageLength);\r\n }\r\n\r\n /**\r\n * Re-set page nb at page re-load\r\n */\r\n resetPage() {\r\n let tf = this.tf;\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n this.emitter.emit('before-reset-page', tf);\r\n let pgNb = tf.feature('store').getPageNb();\r\n if (pgNb !== '') {\r\n this.changePage((pgNb - 1));\r\n }\r\n this.emitter.emit('after-reset-page', tf, pgNb);\r\n }\r\n\r\n /**\r\n * Re-set page length value at page re-load\r\n */\r\n resetPageLength() {\r\n let tf = this.tf;\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n this.emitter.emit('before-reset-page-length', tf);\r\n let pglenIndex = tf.feature('store').getPageLength();\r\n\r\n if (pglenIndex !== '') {\r\n this.pageLengthSlc.options[pglenIndex].selected = true;\r\n this.changeResultsPerPage();\r\n }\r\n this.emitter.emit('after-reset-page-length', tf, pglenIndex);\r\n }\r\n\r\n /** @private */\r\n changePageHandler(tf, pageNumber) {\r\n this.setPage(pageNumber);\r\n }\r\n\r\n /** @private */\r\n changePageResultsHandler(tf, pageLength) {\r\n this.changeResultsPerPage(pageLength);\r\n }\r\n\r\n /**\r\n * Remove paging feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let evt = this.evt;\r\n\r\n if (this.pageSlc) {\r\n if (this.pageSelectorType === SELECT) {\r\n removeEvt(this.pageSlc, 'change', evt.slcPagesChange);\r\n }\r\n else if (this.pageSelectorType === INPUT) {\r\n removeEvt(this.pageSlc, 'keypress', evt._detectKey);\r\n }\r\n removeElm(this.pageSlc);\r\n }\r\n\r\n if (this.btnNextCont) {\r\n removeEvt(this.btnNextCont, 'click', evt.next);\r\n removeElm(this.btnNextCont);\r\n this.btnNextCont = null;\r\n }\r\n\r\n if (this.btnPrevCont) {\r\n removeEvt(this.btnPrevCont, 'click', evt.prev);\r\n removeElm(this.btnPrevCont);\r\n this.btnPrevCont = null;\r\n }\r\n\r\n if (this.btnLastCont) {\r\n removeEvt(this.btnLastCont, 'click', evt.last);\r\n removeElm(this.btnLastCont);\r\n this.btnLastCont = null;\r\n }\r\n\r\n if (this.btnFirstCont) {\r\n removeEvt(this.btnFirstCont, 'click', evt.first);\r\n removeElm(this.btnFirstCont);\r\n this.btnFirstCont = null;\r\n }\r\n\r\n if (this.pgBefore) {\r\n removeElm(this.pgBefore);\r\n this.pgBefore = null;\r\n }\r\n\r\n if (this.pgAfter) {\r\n removeElm(this.pgAfter);\r\n this.pgAfter = null;\r\n }\r\n\r\n if (this.pgCont) {\r\n removeElm(this.pgCont);\r\n this.pgCont = null;\r\n }\r\n\r\n if (this.hasResultsPerPage) {\r\n this.removeResultsPerPage();\r\n }\r\n\r\n this.emitter.off(['after-filtering'],\r\n bound(this.resetPagingInfo, this));\r\n this.emitter.off(['change-page'], bound(this.changePageHandler, this));\r\n this.emitter.off(['change-page-results'],\r\n bound(this.changePageResultsHandler, this));\r\n\r\n this.pageSlc = null;\r\n this.nbPages = 0;\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {isUndef, EMPTY_FN} from '../types';\r\nimport {createElm, removeElm} from '../dom';\r\nimport {addEvt, cancelEvt, stopEvt, targetEvt, removeEvt} from '../event';\r\nimport {INPUT, NONE, CHECKLIST, MULTIPLE} from '../const';\r\nimport {root} from '../root';\r\nimport {defaultsStr, defaultsBool, defaultsArr, defaultsFn} from '../settings';\r\n\r\n/**\r\n * Pop-up filter component\r\n * @export\r\n * @class PopupFilter\r\n * @extends {Feature}\r\n */\r\nexport class PopupFilter extends Feature {\r\n\r\n /**\r\n * Creates an instance of PopupFilter\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'popupFilters');\r\n\r\n // Configuration object\r\n let f = this.config.popup_filters || {};\r\n\r\n /**\r\n * Close active popup filter upon filtering, enabled by default\r\n * @type {Boolean}\r\n */\r\n this.closeOnFiltering = defaultsBool(f.close_on_filtering, true);\r\n\r\n /**\r\n * Filter icon path\r\n * @type {String}\r\n */\r\n this.iconPath = defaultsStr(f.image, tf.themesPath + 'icn_filter.gif');\r\n\r\n /**\r\n * Active filter icon path\r\n * @type {string}\r\n */\r\n this.activeIconPath = defaultsStr(f.image_active,\r\n tf.themesPath + 'icn_filterActive.gif');\r\n\r\n /**\r\n * HTML for the filter icon\r\n * @type {string}\r\n */\r\n this.iconHtml = defaultsStr(f.image_html,\r\n '\"Column');\r\n\r\n /**\r\n * Css class assigned to the popup container element\r\n * @type {String}\r\n */\r\n this.placeholderCssClass = defaultsStr(f.placeholder_css_class,\r\n 'popUpPlaceholder');\r\n\r\n /**\r\n * Css class assigned to filter container element\r\n * @type {String}\r\n */\r\n this.containerCssClass = defaultsStr(f.div_css_class, 'popUpFilter');\r\n\r\n /**\r\n * Ensure filter's container element width matches column width, enabled\r\n * by default\r\n * @type {Boolean}\r\n */\r\n this.adjustToContainer = defaultsBool(f.adjust_to_container, true);\r\n\r\n /**\r\n * Callback fired before a popup filter is opened\r\n * @type {Function}\r\n */\r\n this.onBeforeOpen = defaultsFn(f.on_before_popup_filter_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a popup filter is opened\r\n * @type {Function}\r\n */\r\n this.onAfterOpen = defaultsFn(f.on_after_popup_filter_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a popup filter is closed\r\n * @type {Function}\r\n */\r\n this.onBeforeClose = defaultsFn(f.on_before_popup_filter_close,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a popup filter is closed\r\n * @type {Function}\r\n */\r\n this.onAfterClose = defaultsFn(f.on_after_popup_filter_close, EMPTY_FN);\r\n\r\n /**\r\n * Collection of filters spans\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltSpans = [];\r\n\r\n /**\r\n * Collection of filters icons\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltIcons = [];\r\n\r\n /**\r\n * Collection of filters icons cached after pop-up filters are removed\r\n * @type {Array}\r\n * @private\r\n */\r\n this.filtersCache = null;\r\n\r\n /**\r\n * Collection of filters containers\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltElms = defaultsArr(this.filtersCache, []);\r\n\r\n /**\r\n * Prefix for pop-up filter container ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxDiv = 'popup_';\r\n\r\n /**\r\n * Column index of popup filter currently active\r\n * @type {Number}\r\n * @private\r\n */\r\n this.activeFilterIdx = -1;\r\n }\r\n\r\n /**\r\n * Click event handler for pop-up filter icon\r\n * @private\r\n */\r\n onClick(evt) {\r\n let elm = targetEvt(evt).parentNode;\r\n let colIndex = parseInt(elm.getAttribute('ci'), 10);\r\n\r\n this.closeAll(colIndex);\r\n this.toggle(colIndex);\r\n\r\n if (this.adjustToContainer) {\r\n let cont = this.fltElms[colIndex],\r\n header = this.tf.getHeaderElement(colIndex),\r\n headerWidth = header.clientWidth * 0.95;\r\n cont.style.width = parseInt(headerWidth, 10) + 'px';\r\n }\r\n cancelEvt(evt);\r\n stopEvt(evt);\r\n }\r\n\r\n /**\r\n * Mouse-up event handler handling popup filter auto-close behaviour\r\n * @private\r\n */\r\n onMouseup(evt) {\r\n if (this.activeFilterIdx === -1) {\r\n return;\r\n }\r\n let targetElm = targetEvt(evt);\r\n let activeFlt = this.fltElms[this.activeFilterIdx];\r\n let icon = this.fltIcons[this.activeFilterIdx];\r\n\r\n if (icon === targetElm) {\r\n return;\r\n }\r\n\r\n while (targetElm && targetElm !== activeFlt) {\r\n targetElm = targetElm.parentNode;\r\n }\r\n\r\n if (targetElm !== activeFlt) {\r\n this.close(this.activeFilterIdx);\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Initialize DOM elements\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n // Enable external filters\r\n tf.externalFltIds = [''];\r\n\r\n // Override filters row index supplied by configuration\r\n tf.filtersRowIndex = 0;\r\n\r\n // Override headers row index if no grouped headers\r\n // TODO: Because of the filters row generation, headers row index needs\r\n // adjusting: prevent useless row generation\r\n if (tf.headersRow <= 1 && isNaN(tf.config().headers_row_index)) {\r\n tf.headersRow = 0;\r\n }\r\n\r\n // Adjust headers row index for grid-layout mode\r\n // TODO: Because of the filters row generation, headers row index needs\r\n // adjusting: prevent useless row generation\r\n if (tf.gridLayout) {\r\n tf.headersRow--;\r\n this.buildIcons();\r\n }\r\n\r\n // subscribe to events\r\n this.emitter.on(['before-filtering'], () => this.setIconsState());\r\n this.emitter.on(['after-filtering'], () => this.closeAll());\r\n this.emitter.on(['cell-processed'],\r\n (tf, cellIndex) => this.changeState(cellIndex, true));\r\n this.emitter.on(['filters-row-inserted'], () => this.buildIcons());\r\n this.emitter.on(['before-filter-init'],\r\n (tf, colIndex) => this.build(colIndex));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Reset previously destroyed feature\r\n */\r\n reset() {\r\n this.enable();\r\n this.init();\r\n this.buildIcons();\r\n this.buildAll();\r\n }\r\n\r\n /**\r\n * Build all filters icons\r\n */\r\n buildIcons() {\r\n let tf = this.tf;\r\n\r\n // TODO: Because of the filters row generation, headers row index needs\r\n // adjusting: prevent useless row generation\r\n tf.headersRow++;\r\n\r\n tf.eachCol(\r\n (i) => {\r\n let icon = createElm('span', ['ci', i]);\r\n icon.innerHTML = this.iconHtml;\r\n let header = tf.getHeaderElement(i);\r\n header.appendChild(icon);\r\n addEvt(icon, 'click', (evt) => this.onClick(evt));\r\n this.fltSpans[i] = icon;\r\n this.fltIcons[i] = icon.firstChild;\r\n },\r\n // continue condition function\r\n (i) => tf.getFilterType(i) === NONE\r\n );\r\n }\r\n\r\n /**\r\n * Build all pop-up filters elements\r\n */\r\n buildAll() {\r\n for (let i = 0; i < this.filtersCache.length; i++) {\r\n this.build(i, this.filtersCache[i]);\r\n }\r\n }\r\n\r\n /**\r\n * Build a specified pop-up filter elements\r\n * @param {Number} colIndex Column index\r\n * @param {Object} div Optional container DOM element\r\n */\r\n build(colIndex, div) {\r\n let tf = this.tf;\r\n let contId = `${this.prfxDiv}${tf.id}_${colIndex}`;\r\n let placeholder = createElm('div', ['class', this.placeholderCssClass]);\r\n let cont = div ||\r\n createElm('div', ['id', contId], ['class', this.containerCssClass]);\r\n tf.externalFltIds[colIndex] = cont.id;\r\n placeholder.appendChild(cont);\r\n\r\n let header = tf.getHeaderElement(colIndex);\r\n header.insertBefore(placeholder, header.firstChild);\r\n addEvt(cont, 'click', (evt) => stopEvt(evt));\r\n this.fltElms[colIndex] = cont;\r\n }\r\n\r\n /**\r\n * Toggle visibility of specified filter\r\n * @param {Number} colIndex Column index\r\n */\r\n toggle(colIndex) {\r\n if (!this.isOpen(colIndex)) {\r\n this.open(colIndex);\r\n } else {\r\n this.close(colIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Open popup filter of specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n open(colIndex) {\r\n let tf = this.tf,\r\n container = this.fltElms[colIndex];\r\n\r\n this.onBeforeOpen(this, container, colIndex);\r\n\r\n container.style.display = 'block';\r\n this.activeFilterIdx = colIndex;\r\n addEvt(root, 'mouseup', (evt) => this.onMouseup(evt));\r\n\r\n if (tf.getFilterType(colIndex) === INPUT) {\r\n let flt = tf.getFilterElement(colIndex);\r\n if (flt) {\r\n flt.focus();\r\n }\r\n }\r\n\r\n this.onAfterOpen(this, container, colIndex);\r\n }\r\n\r\n /**\r\n * Close popup filter of specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n close(colIndex) {\r\n let container = this.fltElms[colIndex];\r\n\r\n this.onBeforeClose(this, container, colIndex);\r\n\r\n container.style.display = NONE;\r\n if (this.activeFilterIdx === colIndex) {\r\n this.activeFilterIdx = -1;\r\n }\r\n removeEvt(root, 'mouseup', (evt) => this.onMouseup(evt));\r\n\r\n this.onAfterClose(this, container, colIndex);\r\n }\r\n\r\n /**\r\n * Check if popup filter for specified column is open\r\n * @param {Number} colIndex Column index\r\n * @returns {Boolean}\r\n */\r\n isOpen(colIndex) {\r\n return this.fltElms[colIndex].style.display === 'block';\r\n }\r\n\r\n /**\r\n * Close all filters excepted for the specified one if any\r\n * @param {Number} exceptIdx Column index of the filter to not close\r\n */\r\n closeAll(exceptIdx) {\r\n // Do not close filters only if argument is undefined and close on\r\n // filtering option is disabled\r\n if (isUndef(exceptIdx) && !this.closeOnFiltering) {\r\n return;\r\n }\r\n for (let i = 0; i < this.fltElms.length; i++) {\r\n if (i === exceptIdx) {\r\n continue;\r\n }\r\n let fltType = this.tf.getFilterType(i);\r\n let isMultipleFilter =\r\n (fltType === CHECKLIST || fltType === MULTIPLE);\r\n\r\n // Always hide all single selection filter types but hide multiple\r\n // selection filter types only if index set\r\n if (!isMultipleFilter || !isUndef(exceptIdx)) {\r\n this.close(i);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Build all the icons representing the pop-up filters\r\n */\r\n setIconsState() {\r\n for (let i = 0; i < this.fltIcons.length; i++) {\r\n this.changeState(i, false);\r\n }\r\n }\r\n\r\n /**\r\n * Apply specified icon state\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} active Apply active state\r\n */\r\n changeState(colIndex, active) {\r\n let icon = this.fltIcons[colIndex];\r\n if (icon) {\r\n icon.src = active ? this.activeIconPath : this.iconPath;\r\n }\r\n }\r\n\r\n /**\r\n * Remove pop-up filters\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.filtersCache = [];\r\n for (let i = 0; i < this.fltElms.length; i++) {\r\n let container = this.fltElms[i],\r\n placeholder = container.parentNode,\r\n icon = this.fltSpans[i],\r\n iconImg = this.fltIcons[i];\r\n if (container) {\r\n removeElm(container);\r\n this.filtersCache[i] = container;\r\n }\r\n container = null;\r\n if (placeholder) {\r\n removeElm(placeholder);\r\n }\r\n placeholder = null;\r\n if (icon) {\r\n removeElm(icon);\r\n }\r\n icon = null;\r\n if (iconImg) {\r\n removeElm(iconImg);\r\n }\r\n iconImg = null;\r\n }\r\n this.fltElms = [];\r\n this.fltSpans = [];\r\n this.fltIcons = [];\r\n\r\n // TODO: expose an API to handle external filter IDs\r\n this.tf.externalFltIds = [];\r\n\r\n // unsubscribe to events\r\n this.emitter.off(['before-filtering'], () => this.setIconsState());\r\n this.emitter.off(['after-filtering'], () => this.closeAll());\r\n this.emitter.off(['cell-processed'],\r\n (tf, cellIndex) => this.changeState(cellIndex, true));\r\n this.emitter.off(['filters-row-inserted'], () => this.buildIcons());\r\n this.emitter.off(['before-filter-init'],\r\n (tf, colIndex) => this.build(colIndex));\r\n\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n\r\n// TODO: remove as soon as feature name is fixed\r\nPopupFilter.altName = 'popupFilters';\r\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {EMPTY_FN, isNull} from '../types';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\nimport {LEFT} from './toolbar';\r\n\r\n/**\r\n * Rows counter UI component\r\n * @export\r\n * @class RowsCounter\r\n * @extends {Feature}\r\n */\r\nexport class RowsCounter extends Feature {\r\n\r\n /**\r\n * Creates an instance of RowsCounter\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'rowsCounter', RowsCounter);\r\n\r\n // TableFilter configuration\r\n let f = this.config.rows_counter || {};\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.container = null;\r\n\r\n /**\r\n * Container DOM element for label displaying the total number of rows\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.label = null;\r\n\r\n /**\r\n * Text preceding the total number of rows\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, 'Rows: ');\r\n\r\n /**\r\n * Separator symbol appearing between the first and last visible rows of\r\n * current page when paging is enabled. ie: Rows: 31-40 / 70\r\n * @type {String}\r\n */\r\n this.fromToTextSeparator = defaultsStr(f.separator, '-');\r\n\r\n /**\r\n * Separator symbol appearing between the first and last visible rows of\r\n * current page and the total number of filterable rows when paging is\r\n * enabled. ie: Rows: 31-40 / 70\r\n * @type {String}\r\n */\r\n this.overText = defaultsStr(f.over_text, ' / ');\r\n\r\n /**\r\n * Css class for container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'tot');\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, LEFT);\r\n\r\n /**\r\n * Callback fired before the counter is refreshed\r\n * @type {Function}\r\n */\r\n this.onBeforeRefreshCounter = defaultsFn(f.on_before_refresh_counter,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the counter is refreshed\r\n * @type {Function}\r\n */\r\n this.onAfterRefreshCounter = defaultsFn(f.on_after_refresh_counter,\r\n EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initializes RowsCounter instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.targetId));\r\n\r\n let tf = this.tf;\r\n\r\n //rows counter container\r\n let countDiv = createElm('div');\r\n countDiv.className = this.cssClass;\r\n //rows counter label\r\n let countSpan = createElm('span');\r\n let countText = createElm('span');\r\n countText.appendChild(createText(this.text));\r\n\r\n // counter is added to defined element\r\n let targetEl = !this.targetId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n\r\n //default container: 'lDiv'\r\n if (!this.targetId) {\r\n countDiv.appendChild(countText);\r\n countDiv.appendChild(countSpan);\r\n targetEl.appendChild(countDiv);\r\n } else {\r\n //custom container, no need to append statusDiv\r\n targetEl.appendChild(countText);\r\n targetEl.appendChild(countSpan);\r\n }\r\n this.container = countDiv;\r\n this.label = countSpan;\r\n\r\n // subscribe to events\r\n this.emitter.on(['after-filtering', 'grouped-by-page'],\r\n () => this.refresh(tf.getValidRowsNb()));\r\n this.emitter.on(['rows-changed'], () => this.refresh());\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n this.refresh();\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Refreshes the rows counter\r\n * @param {Number} p Optional parameter the total number of rows to display\r\n */\r\n refresh(p) {\r\n if (!this.initialized || !this.isEnabled()) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n this.onBeforeRefreshCounter(tf, this.label);\r\n\r\n let totTxt;\r\n if (!tf.paging) {\r\n if (p && p !== '') {\r\n totTxt = p;\r\n } else {\r\n totTxt = tf.getFilterableRowsNb() - tf.nbHiddenRows;\r\n }\r\n } else {\r\n let paging = tf.feature('paging');\r\n if (paging) {\r\n let nbValidRows = tf.getValidRowsNb();\r\n //paging start row\r\n let pagingStartRow = parseInt(paging.startPagingRow, 10) +\r\n ((nbValidRows > 0) ? 1 : 0);\r\n let pagingEndRow =\r\n (pagingStartRow + paging.pageLength) - 1 <=\r\n nbValidRows ?\r\n pagingStartRow + paging.pageLength - 1 :\r\n nbValidRows;\r\n totTxt = pagingStartRow + this.fromToTextSeparator +\r\n pagingEndRow + this.overText + nbValidRows;\r\n }\r\n }\r\n\r\n this.label.innerHTML = totTxt;\r\n this.onAfterRefreshCounter(tf, this.label, totTxt);\r\n }\r\n\r\n /**\r\n * Remove feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n if (!this.targetId && this.container) {\r\n removeElm(this.container);\r\n } else {\r\n elm(this.targetId).innerHTML = '';\r\n }\r\n this.label = null;\r\n this.container = null;\r\n\r\n // unsubscribe to events\r\n this.emitter.off(['after-filtering', 'grouped-by-page'],\r\n () => this.refresh(tf.getValidRowsNb()));\r\n this.emitter.off(['rows-changed'], () => this.refresh());\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {Hash} from './hash';\r\nimport {Storage} from './storage';\r\nimport {isEmpty} from '../string';\r\nimport {isArray, isNull, isString, isUndef} from '../types';\r\nimport {defaultsBool, defaultsNb} from '../settings';\r\n\r\n/**\r\n * Features state object persistable with localStorage, cookie or URL hash\r\n *\r\n * @export\r\n * @class State\r\n * @extends {Feature}\r\n */\r\nexport class State extends Feature {\r\n\r\n /**\r\n * Creates an instance of State\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'state');\r\n\r\n let cfg = this.config.state || {};\r\n\r\n /**\r\n * Determines whether state is persisted with URL hash\r\n * @type {Boolean}\r\n */\r\n this.enableHash = cfg === true ||\r\n (isArray(cfg.types) && cfg.types.indexOf('hash') !== -1);\r\n\r\n /**\r\n * Determines whether state is persisted with localStorage\r\n * @type {Boolean}\r\n */\r\n this.enableLocalStorage = isArray(cfg.types) &&\r\n cfg.types.indexOf('local_storage') !== -1;\r\n\r\n /**\r\n * Determines whether state is persisted with localStorage\r\n * @type {Boolean}\r\n */\r\n this.enableCookie = isArray(cfg.types) &&\r\n cfg.types.indexOf('cookie') !== -1;\r\n\r\n /**\r\n * Persist filters values, enabled by default\r\n * @type {Boolean}\r\n */\r\n this.persistFilters = defaultsBool(cfg.filters, true);\r\n\r\n /**\r\n * Persist current page number when paging is enabled\r\n * @type {Boolean}\r\n */\r\n this.persistPageNumber = Boolean(cfg.page_number);\r\n\r\n /**\r\n * Persist page length when paging is enabled\r\n * @type {Boolean}\r\n */\r\n this.persistPageLength = Boolean(cfg.page_length);\r\n\r\n /**\r\n * Persist column sorting\r\n * @type {Boolean}\r\n */\r\n this.persistSort = Boolean(cfg.sort);\r\n\r\n /**\r\n * Persist columns visibility\r\n * @type {Boolean}\r\n */\r\n this.persistColsVisibility = Boolean(cfg.columns_visibility);\r\n\r\n /**\r\n * Persist filters row visibility\r\n * @type {Boolean}\r\n */\r\n this.persistFiltersVisibility = Boolean(cfg.filters_visibility);\r\n\r\n /**\r\n * Cookie duration in hours\r\n * @type {Boolean}\r\n */\r\n this.cookieDuration = defaultsNb(parseInt(cfg.cookie_duration, 10),\r\n 87600);\r\n\r\n /**\r\n * Enable Storage if localStorage or cookie is required\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.enableStorage = this.enableLocalStorage || this.enableCookie;\r\n\r\n /**\r\n * Storage instance if storage is required\r\n * @type {Storage}\r\n * @private\r\n */\r\n this.storage = null;\r\n\r\n /**\r\n * Hash instance if URL hash is required\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.hash = null;\r\n\r\n /**\r\n * Current page number\r\n * @type {Number}\r\n * @private\r\n */\r\n this.pageNb = null;\r\n\r\n /**\r\n * Current page length\r\n * @type {Number}\r\n * @private\r\n */\r\n this.pageLength = null;\r\n\r\n /**\r\n * Current column sorting\r\n * @type {Object}\r\n * @private\r\n */\r\n this.sort = null;\r\n\r\n /**\r\n * Current hidden columns\r\n * @type {Object}\r\n * @private\r\n */\r\n this.hiddenCols = null;\r\n\r\n /**\r\n * Filters row visibility\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.filtersVisibility = null;\r\n\r\n /**\r\n * State object\r\n * @type {Object}\r\n * @private\r\n */\r\n this.state = {};\r\n\r\n /**\r\n * Prefix for column ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxCol = 'col_';\r\n\r\n /**\r\n * Prefix for page number ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.pageNbKey = 'page';\r\n\r\n /**\r\n * Prefix for page length ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.pageLengthKey = 'page_length';\r\n\r\n /**\r\n * Prefix for filters visibility ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.filtersVisKey = 'filters_visibility';\r\n }\r\n\r\n /**\r\n * Initializes State instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.on(['after-filtering'], () => this.update());\r\n this.emitter.on(['after-page-change', 'after-clearing-filters'],\r\n (tf, pageNb) => this.updatePage(pageNb));\r\n this.emitter.on(['after-page-length-change'],\r\n (tf, pageLength) => this.updatePageLength(pageLength));\r\n this.emitter.on(['column-sorted'],\r\n (tf, index, descending) => this.updateSort(index, descending));\r\n this.emitter.on(['sort-initialized'], () => this._syncSort());\r\n this.emitter.on(['columns-visibility-initialized'],\r\n () => this._syncColsVisibility());\r\n this.emitter.on(['column-shown', 'column-hidden'], (tf, feature,\r\n colIndex, hiddenCols) => this.updateColsVisibility(hiddenCols));\r\n this.emitter.on(['filters-visibility-initialized'],\r\n () => this._syncFiltersVisibility());\r\n this.emitter.on(['filters-toggled'],\r\n (tf, extension, visible) => this.updateFiltersVisibility(visible));\r\n\r\n if (this.enableHash) {\r\n this.hash = new Hash(this);\r\n this.hash.init();\r\n }\r\n if (this.enableStorage) {\r\n this.storage = new Storage(this);\r\n this.storage.init();\r\n }\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n\r\n /**\r\n * Update state object based on current features state\r\n */\r\n update() {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n if (this.persistFilters) {\r\n let filterValues = tf.getFiltersValue();\r\n\r\n filterValues.forEach((val, idx) => {\r\n let key = `${this.prfxCol}${idx}`;\r\n\r\n if (isString(val) && isEmpty(val)) {\r\n if (state.hasOwnProperty(key)) {\r\n state[key].flt = undefined;\r\n }\r\n } else {\r\n state[key] = state[key] || {};\r\n state[key].flt = val;\r\n }\r\n });\r\n }\r\n\r\n if (this.persistPageNumber) {\r\n if (isNull(this.pageNb)) {\r\n state[this.pageNbKey] = undefined;\r\n } else {\r\n state[this.pageNbKey] = this.pageNb;\r\n }\r\n }\r\n\r\n if (this.persistPageLength) {\r\n if (isNull(this.pageLength)) {\r\n state[this.pageLengthKey] = undefined;\r\n } else {\r\n state[this.pageLengthKey] = this.pageLength;\r\n }\r\n }\r\n\r\n if (this.persistSort) {\r\n if (!isNull(this.sort)) {\r\n // Remove previuosly sorted column\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1 && state[key]) {\r\n state[key].sort = undefined;\r\n }\r\n });\r\n\r\n let key = `${this.prfxCol}${this.sort.column}`;\r\n state[key] = state[key] || {};\r\n state[key].sort = { descending: this.sort.descending };\r\n }\r\n }\r\n\r\n if (this.persistColsVisibility) {\r\n if (!isNull(this.hiddenCols)) {\r\n // Clear previuosly hidden columns\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1 && state[key]) {\r\n state[key].hidden = undefined;\r\n }\r\n });\r\n\r\n this.hiddenCols.forEach((colIdx) => {\r\n let key = `${this.prfxCol}${colIdx}`;\r\n state[key] = state[key] || {};\r\n state[key].hidden = true;\r\n });\r\n }\r\n }\r\n\r\n if (this.persistFiltersVisibility) {\r\n if (isNull(this.filtersVisibility)) {\r\n state[this.filtersVisKey] = undefined;\r\n } else {\r\n state[this.filtersVisKey] = this.filtersVisibility;\r\n }\r\n }\r\n\r\n this.emitter.emit('state-changed', tf, state);\r\n }\r\n\r\n /**\r\n * Refresh page number field on page number changes\r\n *\r\n * @param {Number} pageNb Current page number\r\n */\r\n updatePage(pageNb) {\r\n this.pageNb = pageNb;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh page length field on page length changes\r\n *\r\n * @param {Number} pageLength Current page length value\r\n */\r\n updatePageLength(pageLength) {\r\n this.pageLength = pageLength;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh column sorting information on sort changes\r\n *\r\n * @param index {Number} Column index\r\n * @param {Boolean} descending Descending manner\r\n */\r\n updateSort(index, descending) {\r\n this.sort = {\r\n column: index,\r\n descending: descending\r\n };\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh hidden columns information on columns visibility changes\r\n *\r\n * @param {Array} hiddenCols Columns indexes\r\n */\r\n updateColsVisibility(hiddenCols) {\r\n this.hiddenCols = hiddenCols;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh filters visibility on filters visibility change\r\n *\r\n * @param {Boolean} visible Visibility flad\r\n */\r\n updateFiltersVisibility(visible) {\r\n this.filtersVisibility = visible;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Override state field\r\n *\r\n * @param state State object\r\n */\r\n override(state) {\r\n this.state = state;\r\n this.emitter.emit('state-changed', this.tf, state);\r\n }\r\n\r\n /**\r\n * Sync stored features state\r\n */\r\n sync() {\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n this._syncFilters();\r\n\r\n if (this.persistPageNumber) {\r\n let pageNumber = state[this.pageNbKey];\r\n this.emitter.emit('change-page', tf, pageNumber);\r\n }\r\n\r\n if (this.persistPageLength) {\r\n let pageLength = state[this.pageLengthKey];\r\n this.emitter.emit('change-page-results', tf, pageLength);\r\n }\r\n\r\n this._syncSort();\r\n this._syncColsVisibility();\r\n this._syncFiltersVisibility();\r\n }\r\n\r\n /**\r\n * Override current state with passed one and sync features\r\n *\r\n * @param {Object} state State object\r\n */\r\n overrideAndSync(state) {\r\n // To prevent state to react to features changes, state is temporarily\r\n // disabled\r\n this.disable();\r\n // State is overriden with passed state object\r\n this.override(state);\r\n // New hash state is applied to features\r\n this.sync();\r\n // State is re-enabled\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Sync filters with stored values and filter table\r\n *\r\n * @private\r\n */\r\n _syncFilters() {\r\n if (!this.persistFilters) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n // clear all filters\r\n // TODO: use tf.clearFilters() once it allows to not filter the table\r\n tf.eachCol((colIdx) => tf.setFilterValue(colIdx, ''));\r\n\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1) {\r\n let colIdx = parseInt(key.replace(this.prfxCol, ''), 10);\r\n let val = state[key].flt;\r\n tf.setFilterValue(colIdx, val);\r\n }\r\n });\r\n\r\n tf.filter();\r\n }\r\n\r\n /**\r\n * Sync sorted column with stored sorting information and sort table\r\n *\r\n * @private\r\n */\r\n _syncSort() {\r\n if (!this.persistSort) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1) {\r\n let colIdx = parseInt(key.replace(this.prfxCol, ''), 10);\r\n if (!isUndef(state[key].sort)) {\r\n let sort = state[key].sort;\r\n this.emitter.emit('sort', tf, colIdx, sort.descending);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Sync hidden columns with stored information\r\n *\r\n * @private\r\n */\r\n _syncColsVisibility() {\r\n if (!this.persistColsVisibility) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n let hiddenCols = [];\r\n\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1) {\r\n let colIdx = parseInt(key.replace(this.prfxCol, ''), 10);\r\n if (!isUndef(state[key].hidden)) {\r\n hiddenCols.push(colIdx);\r\n }\r\n }\r\n });\r\n\r\n hiddenCols.forEach((colIdx) => {\r\n this.emitter.emit('hide-column', tf, colIdx);\r\n });\r\n }\r\n\r\n /**\r\n * Sync filters visibility with stored information\r\n *\r\n * @private\r\n */\r\n _syncFiltersVisibility() {\r\n if (!this.persistFiltersVisibility) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n let filtersVisibility = state[this.filtersVisKey];\r\n\r\n this.filtersVisibility = filtersVisibility;\r\n this.emitter.emit('show-filters', tf, filtersVisibility);\r\n }\r\n\r\n /**\r\n * Destroy State instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.state = {};\r\n\r\n this.emitter.off(['after-filtering'], () => this.update());\r\n this.emitter.off(['after-page-change', 'after-clearing-filters'],\r\n (tf, pageNb) => this.updatePage(pageNb));\r\n this.emitter.off(['after-page-length-change'],\r\n (tf, index) => this.updatePageLength(index));\r\n this.emitter.off(['column-sorted'],\r\n (tf, index, descending) => this.updateSort(index, descending));\r\n this.emitter.off(['sort-initialized'], () => this._syncSort());\r\n this.emitter.off(['columns-visibility-initialized'],\r\n () => this._syncColsVisibility());\r\n this.emitter.off(['column-shown', 'column-hidden'], (tf, feature,\r\n colIndex, hiddenCols) => this.updateColsVisibility(hiddenCols));\r\n this.emitter.off(['filters-visibility-initialized'],\r\n () => this._syncFiltersVisibility());\r\n this.emitter.off(['filters-toggled'],\r\n (tf, extension, visible) => this.updateFiltersVisibility(visible));\r\n\r\n if (this.enableHash) {\r\n this.hash.destroy();\r\n this.hash = null;\r\n }\r\n\r\n if (this.enableStorage) {\r\n this.storage.destroy();\r\n this.storage = null;\r\n }\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {root} from '../root';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {EMPTY_FN, isNull} from '../types';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\nimport {LEFT} from './toolbar';\r\n\r\nconst EVENTS = [\r\n 'after-filtering',\r\n 'after-populating-filter',\r\n 'after-page-change',\r\n 'after-clearing-filters',\r\n 'after-page-length-change',\r\n 'after-reset-page',\r\n 'after-reset-page-length',\r\n 'after-loading-extensions',\r\n 'after-loading-themes'\r\n];\r\n\r\n/**\r\n * Status bar UI component\r\n * @export\r\n * @class StatusBar\r\n * @extends {Feature}\r\n */\r\nexport class StatusBar extends Feature {\r\n\r\n /**\r\n * Creates an instance of StatusBar\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'statusBar');\r\n\r\n // Configuration object\r\n let f = this.config.status_bar || {};\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.container = null;\r\n\r\n /**\r\n * Message container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.msgContainer = null;\r\n\r\n /**\r\n * Label container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.labelContainer = null;\r\n\r\n /**\r\n * Text preceding status message\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, '');\r\n\r\n /**\r\n * Css class for container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'status');\r\n\r\n /**\r\n * Message visibility duration in milliseconds\r\n * @type {Number}\r\n * @private\r\n */\r\n this.delay = 250;\r\n\r\n /**\r\n * Callback fired before the message is displayed\r\n * @type {Function}\r\n */\r\n this.onBeforeShowMsg = defaultsFn(f.on_before_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the message is displayed\r\n * @type {Function}\r\n */\r\n this.onAfterShowMsg = defaultsFn(f.on_after_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Message appearing upon filtering\r\n * @type {String}\r\n */\r\n this.msgFilter = defaultsStr(f.msg_filter, 'Filtering data...');\r\n\r\n /**\r\n * Message appearing when a drop-down filter is populated\r\n * @type {String}\r\n */\r\n this.msgPopulate = defaultsStr(f.msg_populate, 'Populating filter...');\r\n\r\n /**\r\n * Message appearing when a checklist filter is populated\r\n * @type {String}\r\n */\r\n this.msgPopulateCheckList = defaultsStr(f.msg_populate_checklist,\r\n 'Populating list...');\r\n\r\n /**\r\n * Message appearing when a pagination page is changed\r\n * @type {String}\r\n */\r\n this.msgChangePage = defaultsStr(f.msg_change_page,\r\n 'Collecting paging data...');\r\n\r\n /**\r\n * Message appearing when filters are cleared\r\n * @type {String}\r\n */\r\n this.msgClear = defaultsStr(f.msg_clear, 'Clearing filters...');\r\n\r\n /**\r\n * Message appearing when the page length is changed\r\n * @type {String}\r\n */\r\n this.msgChangeResults = defaultsStr(f.msg_change_results,\r\n 'Changing results per page...');\r\n\r\n /**\r\n * Message appearing when the page is re-set\r\n * @type {String}\r\n */\r\n this.msgResetPage = defaultsStr(f.msg_reset_page, 'Re-setting page...');\r\n\r\n /**\r\n * Message appearing when the page length is re-set\r\n * @type {String}\r\n */\r\n this.msgResetPageLength = defaultsStr(f.msg_reset_page_length,\r\n 'Re-setting page length...');\r\n\r\n /**\r\n * Message appearing upon column sorting\r\n * @type {String}\r\n */\r\n this.msgSort = defaultsStr(f.msg_sort, 'Sorting data...');\r\n\r\n /**\r\n * Message appearing when extensions are loading\r\n * @type {String}\r\n */\r\n this.msgLoadExtensions = defaultsStr(f.msg_load_extensions,\r\n 'Loading extensions...');\r\n\r\n /**\r\n * Message appearing when themes are loading\r\n * @type {String}\r\n */\r\n this.msgLoadThemes = defaultsStr(f.msg_load_themes,\r\n 'Loading theme(s)...');\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, LEFT);\r\n }\r\n\r\n /**\r\n * Initializes StatusBar instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n let emitter = this.emitter;\r\n\r\n emitter.emit('initializing-feature', this, !isNull(this.targetId));\r\n\r\n // status bar container\r\n let statusDiv = createElm('div');\r\n statusDiv.className = this.cssClass;\r\n\r\n // status bar label\r\n let statusSpan = createElm('span');\r\n // preceding text\r\n let statusSpanText = createElm('span');\r\n statusSpanText.appendChild(createText(this.text));\r\n\r\n // target element container\r\n let targetEl = (!this.targetId) ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n\r\n // default container\r\n if (!this.targetId) {\r\n statusDiv.appendChild(statusSpanText);\r\n statusDiv.appendChild(statusSpan);\r\n targetEl.appendChild(statusDiv);\r\n } else {\r\n // custom container, no need to append statusDiv\r\n targetEl.appendChild(statusSpanText);\r\n targetEl.appendChild(statusSpan);\r\n }\r\n\r\n this.container = statusDiv;\r\n this.msgContainer = statusSpan;\r\n this.labelContainer = statusSpanText;\r\n\r\n // subscribe to events\r\n emitter.on(['before-filtering'], () => this.message(this.msgFilter));\r\n emitter.on(['before-populating-filter'],\r\n () => this.message(this.msgPopulate));\r\n emitter.on(['before-page-change'],\r\n () => this.message(this.msgChangePage));\r\n emitter.on(['before-clearing-filters'], () =>\r\n this.message(this.msgClear));\r\n emitter.on(['before-page-length-change'],\r\n () => this.message(this.msgChangeResults));\r\n emitter.on(['before-reset-page'],\r\n () => this.message(this.msgResetPage));\r\n emitter.on(['before-reset-page-length'],\r\n () => this.message(this.msgResetPageLength));\r\n emitter.on(['before-loading-extensions'],\r\n () => this.message(this.msgLoadExtensions));\r\n emitter.on(['before-loading-themes'],\r\n () => this.message(this.msgLoadThemes));\r\n\r\n emitter.on(EVENTS, () => this.message(''));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Display status message\r\n * @param {String} [t=''] Message to be displayed\r\n */\r\n message(t = '') {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n this.onBeforeShowMsg(this.tf, t);\r\n\r\n let d = t === '' ? this.delay : 1;\r\n root.setTimeout(() => {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n this.msgContainer.innerHTML = t;\r\n\r\n this.onAfterShowMsg(this.tf, t);\r\n }, d);\r\n }\r\n\r\n /**\r\n * Destroy StatusBar instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let emitter = this.emitter;\r\n\r\n this.container.innerHTML = '';\r\n if (!this.targetId) {\r\n removeElm(this.container);\r\n }\r\n this.labelContainer = null;\r\n this.msgContainer = null;\r\n this.container = null;\r\n\r\n // Unsubscribe to events\r\n emitter.off(['before-filtering'], () => this.message(this.msgFilter));\r\n emitter.off(['before-populating-filter'],\r\n () => this.message(this.msgPopulate));\r\n emitter.off(['before-page-change'],\r\n () => this.message(this.msgChangePage));\r\n emitter.off(['before-clearing-filters'],\r\n () => this.message(this.msgClear));\r\n emitter.off(['before-page-length-change'],\r\n () => this.message(this.msgChangeResults));\r\n emitter.off(['before-reset-page'], () =>\r\n this.message(this.msgResetPage));\r\n emitter.off(['before-reset-page-length'],\r\n () => this.message(this.msgResetPageLength));\r\n emitter.off(['before-loading-extensions'],\r\n () => this.message(this.msgLoadExtensions));\r\n emitter.off(['before-loading-themes'],\r\n () => this.message(this.msgLoadThemes));\r\n\r\n emitter.off(EVENTS, () => this.message(''));\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import Cookie from '../cookie';\r\nimport {root} from '../root';\r\n\r\nconst JSON = root.JSON;\r\nconst localStorage = root.localStorage;\r\nconst location = root.location;\r\n\r\n/**\r\n * Checks if browser has Storage feature\r\n */\r\nexport const hasStorage = () => {\r\n return 'Storage' in root;\r\n};\r\n\r\n/**\r\n * Stores the features state in browser's local storage or cookie\r\n *\r\n * @export\r\n * @class Storage\r\n */\r\nexport class Storage {\r\n\r\n /**\r\n * Creates an instance of Storage\r\n *\r\n * @param {State} state Instance of State\r\n */\r\n constructor(state) {\r\n\r\n /**\r\n * State object\r\n * @type {State}\r\n * @private\r\n */\r\n this.state = state;\r\n\r\n /**\r\n * TableFilter object\r\n * @type {TableFilter}\r\n * @private\r\n */\r\n this.tf = state.tf;\r\n\r\n /**\r\n * Persist with local storage\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.enableLocalStorage = state.enableLocalStorage && hasStorage();\r\n\r\n /**\r\n * Persist with cookie\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.enableCookie = state.enableCookie && !this.enableLocalStorage;\r\n\r\n /**\r\n * Emitter object\r\n * @type {Emitter}\r\n * @private\r\n */\r\n this.emitter = state.emitter;\r\n\r\n /**\r\n * Cookie duration in hours from state object\r\n * @type {Number}\r\n * @private\r\n */\r\n this.duration = state.cookieDuration;\r\n }\r\n\r\n\r\n /**\r\n * Initializes the Storage object\r\n */\r\n init() {\r\n this.emitter.on(['state-changed'], (tf, state) => this.save(state));\r\n this.emitter.on(['initialized'], () => this.sync());\r\n }\r\n\r\n /**\r\n * Persists the features state on state changes\r\n *\r\n * @param {State} state Instance of State\r\n */\r\n save(state) {\r\n if (this.enableLocalStorage) {\r\n localStorage[this.getKey()] = JSON.stringify(state);\r\n } else {\r\n Cookie.write(this.getKey(), JSON.stringify(state), this.duration);\r\n }\r\n }\r\n\r\n /**\r\n * Turns stored string into a State JSON object\r\n *\r\n * @returns {Object} JSON object\r\n */\r\n retrieve() {\r\n let state = null;\r\n if (this.enableLocalStorage) {\r\n state = localStorage[this.getKey()];\r\n } else {\r\n state = Cookie.read(this.getKey());\r\n }\r\n\r\n if (!state) {\r\n return null;\r\n }\r\n return JSON.parse(state);\r\n }\r\n\r\n /**\r\n * Removes persisted state from storage\r\n */\r\n remove() {\r\n if (this.enableLocalStorage) {\r\n localStorage.removeItem(this.getKey());\r\n } else {\r\n Cookie.remove(this.getKey());\r\n }\r\n }\r\n\r\n /**\r\n * Applies persisted state to features\r\n */\r\n sync() {\r\n let state = this.retrieve();\r\n if (!state) {\r\n return;\r\n }\r\n // override current state with persisted one and sync features\r\n this.state.overrideAndSync(state);\r\n }\r\n\r\n /**\r\n * Returns the storage key\r\n *\r\n * @returns {String} Key\r\n */\r\n getKey() {\r\n return JSON.stringify({\r\n key: `${this.tf.prfxTf}_${this.tf.id}`,\r\n path: location.pathname\r\n });\r\n }\r\n\r\n /**\r\n * Release Storage event subscriptions and clear fields\r\n */\r\n destroy() {\r\n this.emitter.off(['state-changed'], (tf, state) => this.save(state));\r\n this.emitter.off(['initialized'], () => this.sync());\r\n\r\n this.remove();\r\n\r\n this.state = null;\r\n this.emitter = null;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, removeElm, elm, tag} from '../dom';\r\nimport {defaultsStr} from '../settings';\r\nimport {isUndef} from '../types';\r\n\r\nconst EVENTS = [\r\n 'initializing-feature',\r\n 'initializing-extension'\r\n];\r\n\r\n/** Left position in toolbar */\r\nexport const LEFT = 'left';\r\n/** Right position in toolbar */\r\nexport const RIGHT = 'right';\r\n/** Center position in toolbar */\r\nexport const CENTER = 'center';\r\n\r\n/**\r\n * Toolbar UI component\r\n * @export\r\n * @class Toolbar\r\n * @extends {Feature}\r\n */\r\nexport class Toolbar extends Feature {\r\n\r\n /**\r\n * Create an instance of Toolbar\r\n * @param {TableFilter} tf TableFilter instance\r\n * @memberof Toolbar\r\n */\r\n constructor(tf) {\r\n super(tf, 'toolbar');\r\n\r\n // Configuration object\r\n let f = this.config.toolbar || {};\r\n\r\n /**\r\n * Css class for toolbar's container DOM element\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.container_css_class, 'inf');\r\n\r\n /**\r\n * Css class for left-side inner container DOM element\r\n * @type {String}\r\n */\r\n this.lContCssClass = defaultsStr(f.left_cont_css_class, 'ldiv');\r\n\r\n /**\r\n * Css class for right-side inner container DOM element\r\n * @type {String}\r\n */\r\n this.rContCssClass = defaultsStr(f.right_cont_css_class, 'rdiv');\r\n\r\n /**\r\n * Css class for middle inner container DOM element\r\n * @type {String}\r\n */\r\n this.cContCssClass = defaultsStr(f.center_cont_css_class, 'mdiv');\r\n\r\n /**\r\n * Toolbar's custom container ID\r\n * @type {String}\r\n */\r\n this.tgtId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Toolbar's container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.cont = null;\r\n\r\n /**\r\n * Left-side inner container DOM element (rows counter in toolbar)\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.lCont = null;\r\n\r\n /**\r\n * Right-side inner container DOM element (reset button,\r\n * page length selector in toolbar)\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.rCont = null;\r\n\r\n /**\r\n * Middle inner container DOM element (paging elements in toolbar)\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.cCont = null;\r\n\r\n /**\r\n * Container elements inside toolbar\r\n * @private\r\n */\r\n this.innerCont = {\r\n left: null,\r\n center: null,\r\n right: null\r\n };\r\n\r\n this.emitter.on(EVENTS,\r\n (feature, isExternal) => this.init(isExternal));\r\n\r\n /** @inherited */\r\n this.enabled = true;\r\n }\r\n\r\n /**\r\n * Initialize toolbar components\r\n * @param {Boolean} isExternal initialize only if component belongs\r\n * to toolbar\r\n */\r\n init(isExternal) {\r\n if (this.initialized || isExternal) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n // default container\r\n let container = createElm('div');\r\n container.className = this.contCssClass;\r\n\r\n // custom container\r\n if (this.tgtId) {\r\n elm(this.tgtId).appendChild(container);\r\n }\r\n // grid-layout\r\n else if (tf.gridLayout) {\r\n let gridLayout = tf.Mod.gridLayout;\r\n gridLayout.tblMainCont.appendChild(container);\r\n container.className = gridLayout.infDivCssClass;\r\n }\r\n // default location: just above the table\r\n else {\r\n let cont = createElm('caption');\r\n cont.appendChild(container);\r\n tf.dom().insertBefore(cont, tf.dom().firstChild);\r\n }\r\n this.cont = container;\r\n\r\n // left container\r\n this.lCont = this.createContainer(container, this.lContCssClass);\r\n\r\n // right container\r\n this.rCont = this.createContainer(container, this.rContCssClass);\r\n\r\n // middle container\r\n this.cCont = this.createContainer(container, this.cContCssClass);\r\n\r\n this.innerCont = {\r\n left: this.lCont,\r\n center: this.cCont,\r\n right: this.rCont\r\n };\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n // emit help initialisation only if undefined\r\n if (isUndef(tf.help)) {\r\n // explicitily enable help to initialise feature by\r\n // default, only if setting is undefined\r\n tf.Mod.help.enable();\r\n this.emitter.emit('init-help', tf);\r\n }\r\n }\r\n\r\n /**\r\n * Return the container based on requested position inside the toolbar\r\n * @param {String} [position=RIGHT] 3 possible positions: 'left', 'center',\r\n * 'right'\r\n * @param {DOMElement} el optional DOM element to be inserter in container\r\n * @returns {DOMElement}\r\n */\r\n container(position = RIGHT, el) {\r\n let cont = this.innerCont[position];\r\n if (el) {\r\n cont.appendChild(el);\r\n }\r\n return cont;\r\n }\r\n\r\n /**\r\n * Create DOM element inside passed container\r\n * @param {DOMElement} container\r\n * @param {String} css\r\n * @private\r\n */\r\n createContainer(container, css) {\r\n let div = createElm('div', ['class', css]);\r\n container.appendChild(div);\r\n return div;\r\n }\r\n\r\n /**\r\n * Destroy Toolbar instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n removeElm(this.cont);\r\n this.cont = null;\r\n\r\n let tbl = tf.dom();\r\n let captions = tag(tbl, 'caption');\r\n [].forEach.call(captions, (el) => removeElm(el));\r\n\r\n /** @inherited */\r\n this.initialized = false;\r\n }\r\n}\r\n\r\n// TODO: remove as soon as feature name is fixed\r\nToolbar.alwaysInstantiate = true;\r\n","import {isNumber} from './types';\r\n\r\n/**\r\n * Takes a string, removes all formatting/cruft and returns the raw float value\r\n * @param {String} Formatted number\r\n * @param {String} Decimal type '.' or ','\r\n * @return {Number} Unformatted number\r\n *\r\n * https://github.com/openexchangerates/accounting.js/blob/master/accounting.js\r\n */\r\nexport const parse = (value, decimal = '.') => {\r\n // Return the value as-is if it's already a number\r\n if (isNumber(value)) {\r\n return value;\r\n }\r\n\r\n // Build regex to strip out everything except digits, decimal point and\r\n // minus sign\r\n let regex = new RegExp('[^0-9-' + decimal + ']', ['g']);\r\n let unformatted = parseFloat(\r\n ('' + value)\r\n // replace bracketed values with negatives\r\n .replace(/\\((.*)\\)/, '-$1')\r\n // strip out any cruft\r\n .replace(regex, '')\r\n // make sure decimal point is standard\r\n .replace(decimal, '.')\r\n );\r\n\r\n // This will fail silently\r\n return !isNaN(unformatted) ? unformatted : 0;\r\n};\r\n","/**\r\n * Export window or global object depending on the environment\r\n */\r\nexport const root = (typeof self === 'object' && self.self === self && self) ||\r\n (typeof global === 'object' && global.global === global && global) ||\r\n this;\r\n","import {isBoolean, isString, isFn, isArray} from './types';\r\n\r\n/** Configuration settings helpers */\r\n\r\n/**\r\n * If passed value is not of boolean type return the default value\r\n * otherwise return the value itself\r\n * @param {Boolean|Any} value\r\n * @param {Boolean} default value\r\n * @return {Boolean|Any}\r\n */\r\nexport const defaultsBool =\r\n (val, defaultVal) => isBoolean(val) ? val : defaultVal;\r\n\r\n/**\r\n * If passed value is not of string type return the default value\r\n * otherwise return the value itself\r\n * @param {String|Any} value\r\n * @param {String} default value\r\n * @return {String|Any}\r\n */\r\nexport const defaultsStr =\r\n (val, defaultVal) => isString(val) ? val : defaultVal;\r\n\r\n/**\r\n * If passed value is not of number type return the default value\r\n * otherwise return the value itself\r\n * @param {Number|Any} value\r\n * @param {Number} default value\r\n * @return {Number|Any}\r\n */\r\nexport const defaultsNb =\r\n (val, defaultVal) => isNaN(val) ? defaultVal : val;\r\n\r\n/**\r\n * If passed value is not of array type return the default value\r\n * otherwise return the value itself\r\n * @param {Array|Any} value\r\n * @param {Array} default value\r\n * @return {Array|Any}\r\n */\r\nexport const defaultsArr =\r\n (val, defaultVal) => isArray(val) ? val : defaultVal;\r\n\r\n/**\r\n * If passed value is not of function type return the default value\r\n * otherwise return the value itself\r\n * @param {Function|Any} value\r\n * @param {Function} default value\r\n * @return {Function|Any}\r\n */\r\nexport const defaultsFn =\r\n (val, defaultVal) => isFn(val) ? val : defaultVal;\r\n","import {parse as parseNb} from './number';\r\nimport {Date as SugarDate} from 'sugar-date';\r\n\r\n/** Sorting utilities */\r\n\r\n/**\r\n * Case insensitive compare function for passed strings\r\n * @param {String} First string\r\n * @param {String} Second string\r\n * @return {Number} -1 if first string lower than second one\r\n * 0 if first string same order as second one\r\n * 1 if first string greater than second one\r\n */\r\nexport const ignoreCase = (a, b) => {\r\n let x = a.toLowerCase();\r\n let y = b.toLowerCase();\r\n return x < y ? -1 : (x > y ? 1 : 0);\r\n};\r\n\r\n/**\r\n * Compare function for sorting passed numbers in ascending manner\r\n * @param {Number} First number\r\n * @param {Number} Second number\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const numSortAsc = (a, b) => (a - b);\r\n\r\n/**\r\n * Compare function for sorting passed numbers in descending manner\r\n * @param {Number} First number\r\n * @param {Number} Second number\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const numSortDesc = (a, b) => (b - a);\r\n\r\n/**\r\n * Compare function for sorting passed dates in ascending manner according to\r\n * the corresponding UTC numeric value (returned by getTime)\r\n * @param {Date} First date object\r\n * @param {Date} Second date object\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const dateSortAsc = (date1, date2) => date1.getTime() - date2.getTime();\r\n\r\n/**\r\n * Compare function for sorting passed dates in descending manner according to\r\n * the corresponding UTC numeric value (returned by getTime)\r\n * @param {Date} First date object\r\n * @param {Date} Second date object\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const dateSortDesc = (date1, date2) => date2.getTime() - date1.getTime();\r\n\r\n/**\r\n * Curried compare function for sorting passed formatted numbers in desired\r\n * fashion according to supplied compare function and decimal separator\r\n * @param {Function} Compare function\r\n * @param {String} [decimal=','] Decimal separator\r\n * @return {Function} Compare function receiving parsed numeric arguments\r\n */\r\nexport const sortNumberStr = (compareFn, decimal = ',') => {\r\n return (numStr1, numStr2) => {\r\n let num1 = parseNb(numStr1, decimal);\r\n let num2 = parseNb(numStr2, decimal);\r\n return compareFn(num1, num2);\r\n };\r\n};\r\n\r\n/**\r\n * Curried compare function for sorting passed formatted dates in desired\r\n * fashion according to supplied compare function and locale\r\n * @param {Function} Compare function\r\n * @param {String} [locale='en-us'] Locale code\r\n * @return {Function} Compare function receiving parsed date arguments\r\n */\r\nexport const sortDateStr = (compareFn, locale = 'en-us') => {\r\n return (dateStr1, dateStr2) => {\r\n let date1 = SugarDate.create(dateStr1, locale);\r\n let date2 = SugarDate.create(dateStr2, locale);\r\n return compareFn(date1, date2);\r\n };\r\n};\r\n","import {remove as removeDiacritics} from 'diacritics';\r\n\r\n/**\r\n * String utilities\r\n */\r\n\r\n/**\r\n * Removes whitespace from both sides of passed string\r\n * @param {String} text\r\n * @return {String}\r\n */\r\nexport const trim = (text) => {\r\n if (text.trim) {\r\n return text.trim();\r\n }\r\n return text.replace(/^\\s*|\\s*$/g, '');\r\n};\r\n\r\n/**\r\n * Checks if passed string is empty\r\n * @param {String} text\r\n * @return {Boolean}\r\n */\r\nexport const isEmpty = (text) => trim(text) === '';\r\n\r\n/**\r\n * Makes regex safe string by escaping special characters from passed string\r\n * @param {String} text\r\n * @return {String} escaped string\r\n */\r\nexport const rgxEsc = (text) => {\r\n let chars = /[-\\/\\\\^$*+?.()|[\\]{}]/g;\r\n let escMatch = '\\\\$&';\r\n return String(text).replace(chars, escMatch);\r\n};\r\n\r\n/**\r\n * Returns passed string as lowercase if caseSensitive flag set false. By\r\n * default it returns the string with no casing changes.\r\n * @param {String} text\r\n * @return {String} string\r\n */\r\nexport const matchCase = (text, caseSensitive = false) => {\r\n if (!caseSensitive) {\r\n return text.toLowerCase();\r\n }\r\n return text;\r\n};\r\n\r\n/**\r\n * Checks if passed data contains the searched term\r\n * @param {String} term Searched term\r\n * @param {String} data Data string\r\n * @param {Boolean} exactMatch Exact match\r\n * @param {Boolean} caseSensitive Case sensitive\r\n * @param {Boolean} ignoreDiacritics Ignore diacritics\r\n * @return {Boolean}\r\n */\r\nexport const contains = (term, data, exactMatch = false, caseSensitive = false,\r\n ignoreDiacritics = false) => {\r\n // Improved by Cedric Wartel (cwl) automatic exact match for selects and\r\n // special characters are now filtered\r\n let regexp;\r\n let modifier = caseSensitive ? 'g' : 'gi';\r\n if (ignoreDiacritics) {\r\n term = removeDiacritics(term);\r\n data = removeDiacritics(data);\r\n }\r\n if (exactMatch) {\r\n regexp = new RegExp('(^\\\\s*)' + rgxEsc(term) + '(\\\\s*$)',\r\n modifier);\r\n } else {\r\n regexp = new RegExp(rgxEsc(term), modifier);\r\n }\r\n return regexp.test(data);\r\n};\r\n\r\n/**\r\n * Camelize a string, cutting the string by multiple separators like\r\n * hyphens, underscores and spaces.\r\n * @param {String} text text to camelize\r\n * @return {String} camelized text\r\n */\r\nexport const toCamelCase = (text = '') => {console.log('in', text);\r\n return text.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) => {\r\n if (p2) {\r\n console.log('out', p2.toUpperCase());\r\n return p2.toUpperCase();\r\n }\r\n console.log('out', p1.toLowerCase());\r\n return p1.toLowerCase();\r\n });\r\n};\r\n","import {addEvt, cancelEvt, stopEvt, targetEvt, isKeyPressed} from './event';\r\nimport {\r\n addClass, createElm, elm, getText, getFirstTextNode, removeClass, tag\r\n} from './dom';\r\nimport {contains, matchCase, rgxEsc, trim} from './string';\r\nimport {\r\n isArray, isEmpty, isFn, isNumber, isObj, isString, isUndef, EMPTY_FN,\r\n isBoolean\r\n} from './types';\r\nimport {parse as parseNb} from './number';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsFn,\r\n defaultsNb, defaultsArr\r\n} from './settings';\r\n\r\nimport {root} from './root';\r\nimport {Emitter} from './emitter';\r\nimport {Dropdown} from './modules/dropdown';\r\nimport {CheckList} from './modules/checkList';\r\n\r\nimport {\r\n INPUT, SELECT, MULTIPLE, CHECKLIST, NONE,\r\n ENTER_KEY, TAB_KEY, ESC_KEY, UP_ARROW_KEY, DOWN_ARROW_KEY,\r\n CELL_TAG, AUTO_FILTER_DELAY, NUMBER, DATE, FORMATTED_NUMBER,\r\n FEATURES\r\n} from './const';\r\n\r\nlet doc = root.document;\r\n\r\n/**\r\n * Makes HTML tables filterable and a bit more :)\r\n *\r\n * @export\r\n * @class TableFilter\r\n */\r\nexport class TableFilter {\r\n\r\n /**\r\n * Creates an instance of TableFilter\r\n * requires `table` or `id` arguments, `row` and `configuration` optional\r\n * @param {HTMLTableElement} table Table DOM element\r\n * @param {String} id Table id\r\n * @param {Number} row index indicating the 1st row\r\n * @param {Object} configuration object\r\n */\r\n constructor(...args) {\r\n /**\r\n * ID of current instance\r\n * @type {String}\r\n * @private\r\n */\r\n this.id = null;\r\n\r\n /**\r\n * Current version\r\n * @type {String}\r\n */\r\n this.version = '0.6.77';\r\n\r\n /**\r\n * Current year\r\n * @type {Number}\r\n * @private\r\n */\r\n this.year = new Date().getFullYear();\r\n\r\n /**\r\n * HTML Table DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.tbl = null;\r\n\r\n /**\r\n * Calculated row's index from which starts filtering once filters\r\n * are generated\r\n * @type {Number}\r\n */\r\n this.refRow = null;\r\n\r\n /**\r\n * Index of the headers row\r\n * @type {Number}\r\n * @private\r\n */\r\n this.headersRow = null;\r\n\r\n /**\r\n * Configuration object\r\n * @type {Object}\r\n * @private\r\n */\r\n this.cfg = {};\r\n\r\n /**\r\n * Number of rows that can be filtered\r\n * @type {Number}\r\n * @private\r\n */\r\n this.nbFilterableRows = 0;\r\n\r\n /**\r\n * Number of cells in the reference row\r\n * @type {Number}\r\n * @private\r\n */\r\n this.nbCells = null;\r\n\r\n /**\r\n * Has a configuration object\r\n * @type {Object}\r\n * @private\r\n */\r\n this.hasConfig = false;\r\n\r\n /** @private */\r\n this.initialized = false;\r\n\r\n let startRow;\r\n\r\n // TODO: use for-of\r\n args.forEach((arg) => {\r\n if (typeof arg === 'object' && arg.nodeName === 'TABLE') {\r\n this.tbl = arg;\r\n this.id = arg.id || `tf_${new Date().getTime()}_`;\r\n this.tbl.id = this.id;\r\n } else if (isString(arg)) {\r\n this.id = arg;\r\n this.tbl = elm(arg);\r\n } else if (isNumber(arg)) {\r\n startRow = arg;\r\n } else if (isObj(arg)) {\r\n this.cfg = arg;\r\n this.hasConfig = true;\r\n }\r\n });\r\n\r\n if (!this.tbl || this.tbl.nodeName !== 'TABLE') {\r\n throw new Error(`Could not instantiate TableFilter: HTML table\r\n DOM element not found.`);\r\n }\r\n\r\n if (this.getRowsNb(true) === 0) {\r\n throw new Error(`Could not instantiate TableFilter: HTML table\r\n requires at least 1 row.`);\r\n }\r\n\r\n // configuration object\r\n let f = this.cfg;\r\n\r\n /**\r\n * Event emitter instance\r\n * @type {Emitter}\r\n */\r\n this.emitter = new Emitter();\r\n\r\n // start row\r\n this.refRow = isUndef(startRow) ? 2 : (startRow + 1);\r\n\r\n /**\r\n * Collection of filter type by column\r\n * @type {Array}\r\n * @private\r\n */\r\n this.filterTypes = [].map.call(\r\n (this.dom().rows[this.refRow] || this.dom().rows[0]).cells,\r\n (cell, idx) => {\r\n let colType = this.cfg[`col_${idx}`];\r\n return !colType ? INPUT : colType.toLowerCase();\r\n });\r\n\r\n /**\r\n * Base path for static assets\r\n * @type {String}\r\n */\r\n this.basePath = defaultsStr(f.base_path, 'tablefilter/');\r\n\r\n /*** filters' grid properties ***/\r\n\r\n /**\r\n * Enable/disable filters\r\n * @type {Boolean}\r\n */\r\n this.fltGrid = defaultsBool(f.grid, true);\r\n\r\n /**\r\n * Enable/disable grid layout (fixed headers)\r\n * @type {Object|Boolean}\r\n */\r\n this.gridLayout = isObj(f.grid_layout) || Boolean(f.grid_layout);\r\n\r\n /**\r\n * Filters row index\r\n * @type {Number}\r\n */\r\n this.filtersRowIndex = defaultsNb(f.filters_row_index, 0);\r\n\r\n /**\r\n * Headers row index\r\n * @type {Number}\r\n */\r\n this.headersRow = defaultsNb(f.headers_row_index,\r\n (this.filtersRowIndex === 0 ? 1 : 0));\r\n\r\n /**\r\n * Define the type of cell containing a filter (td/th)\r\n * @type {String}\r\n */\r\n this.fltCellTag = defaultsStr(f.filters_cell_tag, CELL_TAG);\r\n\r\n /**\r\n * List of filters IDs\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltIds = [];\r\n\r\n /**\r\n * List of valid rows indexes (rows visible upon filtering)\r\n * @type {Array}\r\n * @private\r\n */\r\n this.validRowsIndex = [];\r\n\r\n /*** filters' grid appearance ***/\r\n /**\r\n * Path for stylesheets\r\n * @type {String}\r\n */\r\n this.stylePath = this.getStylePath();\r\n\r\n /**\r\n * Main stylesheet path\r\n * @type {String}\r\n */\r\n this.stylesheet = this.getStylesheetPath();\r\n\r\n /**\r\n * Main stylesheet ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.stylesheetId = this.id + '_style';\r\n\r\n /**\r\n * Css class for the filters row\r\n * @type {String}\r\n */\r\n this.fltsRowCssClass = defaultsStr(f.flts_row_css_class, 'fltrow');\r\n\r\n /**\r\n * Enable/disable icons (paging, reset button)\r\n * @type {Boolean}\r\n */\r\n this.enableIcons = defaultsBool(f.enable_icons, true);\r\n\r\n /**\r\n * Enable/disable alternating rows\r\n * @type {Boolean}\r\n */\r\n this.alternateRows = Boolean(f.alternate_rows);\r\n\r\n /**\r\n * Columns widths array\r\n * @type {Array}\r\n */\r\n this.colWidths = defaultsArr(f.col_widths, []);\r\n\r\n /**\r\n * Default column width when column widths are defined\r\n */\r\n this.defaultColWidth = defaultsNb(f.default_col_width, 100);\r\n\r\n /**\r\n * Css class for a filter element\r\n * @type {String}\r\n */\r\n this.fltCssClass = defaultsStr(f.flt_css_class, 'flt');\r\n\r\n /**\r\n * Css class for multiple select filters\r\n * @type {String}\r\n */\r\n this.fltMultiCssClass = defaultsStr(f.flt_multi_css_class, 'flt_multi');\r\n\r\n /**\r\n * Css class for small filter (when submit button is active)\r\n * @type {String}\r\n */\r\n this.fltSmallCssClass = defaultsStr(f.flt_small_css_class, 'flt_s');\r\n\r\n /**\r\n * Css class for single filter type\r\n * @type {String}\r\n */\r\n this.singleFltCssClass = defaultsStr((f.single_filter || {}).css_class,\r\n 'single_flt');\r\n\r\n /*** filters' grid behaviours ***/\r\n\r\n /**\r\n * Enable/disable enter key for input type filters\r\n * @type {Boolean}\r\n */\r\n this.enterKey = defaultsBool(f.enter_key, true);\r\n\r\n /**\r\n * Callback fired before filtering process starts\r\n * @type {Function}\r\n */\r\n this.onBeforeFilter = defaultsFn(f.on_before_filter, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filtering process is completed\r\n * @type {Function}\r\n */\r\n this.onAfterFilter = defaultsFn(f.on_after_filter, EMPTY_FN);\r\n\r\n /**\r\n * Enable/disable case sensitivity filtering\r\n * @type {Boolean}\r\n */\r\n this.caseSensitive = Boolean(f.case_sensitive);\r\n\r\n /**\r\n * Indicate whether exact match filtering is enabled on a per column\r\n * basis\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.hasExactMatchByCol = isArray(f.columns_exact_match);\r\n\r\n /**\r\n * Exact match filtering per column array\r\n * @type {Array}\r\n */\r\n this.exactMatchByCol = this.hasExactMatchByCol ?\r\n f.columns_exact_match : [];\r\n\r\n /**\r\n * Globally enable/disable exact match filtering\r\n * @type {Boolean}\r\n */\r\n this.exactMatch = Boolean(f.exact_match);\r\n\r\n /**\r\n * Ignore diacritics globally or on a column basis\r\n * @type {Boolean|Array}\r\n */\r\n this.ignoreDiacritics = f.ignore_diacritics;\r\n\r\n /**\r\n * Enable/disable linked filters filtering mode\r\n * @type {Boolean}\r\n */\r\n this.linkedFilters = Boolean(f.linked_filters);\r\n\r\n /**\r\n * Enable/disable readonly state for excluded options when\r\n * linked filters filtering mode is on\r\n * @type {Boolean}\r\n */\r\n this.disableExcludedOptions = Boolean(f.disable_excluded_options);\r\n\r\n /**\r\n * Active filter ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.activeFilterId = null;\r\n\r\n /**\r\n * Determine if there are excluded rows from filtering\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.hasExcludedRows = Boolean(isArray(f.exclude_rows) &&\r\n f.exclude_rows.length > 0);\r\n\r\n /**\r\n * List of row indexes to be excluded from filtering\r\n * @type {Array}\r\n */\r\n this.excludeRows = defaultsArr(f.exclude_rows, []);\r\n\r\n /**\r\n * List of containers IDs where external filters will be generated\r\n * @type {Array}\r\n */\r\n this.externalFltIds = defaultsArr(f.external_flt_ids, []);\r\n\r\n /**\r\n * Callback fired after filters are generated\r\n * @type {Function}\r\n */\r\n this.onFiltersLoaded = defaultsFn(f.on_filters_loaded, EMPTY_FN);\r\n\r\n /**\r\n * Enable/disable single filter mode\r\n * @type {Boolean|Object}\r\n */\r\n this.singleFlt = isObj(f.single_filter) ||\r\n Boolean(f.single_filter);\r\n\r\n /**\r\n * Specify columns to be excluded from single filter search, by default\r\n * searching in all columns:\r\n * single_filter: {\r\n * exclude_cols: [2, 7]\r\n * }\r\n */\r\n this.singleFltExcludeCols = isObj(f.single_filter) &&\r\n isArray(f.single_filter.exclude_cols) ?\r\n f.single_filter.exclude_cols : [];\r\n\r\n /**\r\n * Callback fired after a row is validated during filtering\r\n * @type {Function}\r\n */\r\n this.onRowValidated = defaultsFn(f.on_row_validated, EMPTY_FN);\r\n\r\n /**\r\n * Specify which column implements a custom cell parser to retrieve the\r\n * cell value:\r\n * cell_parser: {\r\n * cols: [0, 2],\r\n * parse: function(tf, cell, colIndex) {\r\n * // custom cell parser logic here\r\n * return cellValue;\r\n * }\r\n * }\r\n * @type {Object}\r\n */\r\n this.cellParser = isObj(f.cell_parser) && isFn(f.cell_parser.parse) &&\r\n isArray(f.cell_parser.cols) ?\r\n f.cell_parser : { cols: [], parse: EMPTY_FN };\r\n\r\n /**\r\n * Global watermark text for input filter type or watermark for each\r\n * filter if an array is supplied\r\n * @type {String|Array}\r\n */\r\n this.watermark = f.watermark || '';\r\n\r\n /**\r\n * Indicate whether watermark is on a per column basis\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isWatermarkArray = isArray(this.watermark);\r\n\r\n /**\r\n * Indicate whether help UI component is disabled\r\n * @type {Boolean}\r\n */\r\n this.help = isUndef(f.help_instructions) ? undefined :\r\n (isObj(f.help_instructions) || Boolean(f.help_instructions));\r\n\r\n /**\r\n * Indicate whether pop-up filters UI is enabled\r\n * @type {Boolean|Object}\r\n */\r\n this.popupFilters = isObj(f.popup_filters) || Boolean(f.popup_filters);\r\n\r\n /**\r\n * Indicate whether filtered (active) columns indicator is enabled\r\n * @type {Boolean}\r\n */\r\n this.markActiveColumns = isObj(f.mark_active_columns) ||\r\n Boolean(f.mark_active_columns);\r\n\r\n /*** select filter's customisation and behaviours ***/\r\n /**\r\n * Text for clear option in drop-down filter types (1st option)\r\n * @type {String|Array}\r\n */\r\n this.clearFilterText = defaultsStr(f.clear_filter_text, 'Clear');\r\n\r\n /**\r\n * Indicate whether empty option is enabled in drop-down filter types\r\n * @type {Boolean}\r\n */\r\n this.enableEmptyOption = Boolean(f.enable_empty_option);\r\n\r\n /**\r\n * Text for empty option in drop-down filter types\r\n * @type {String}\r\n */\r\n this.emptyText = defaultsStr(f.empty_text, '(Empty)');\r\n\r\n /**\r\n * Indicate whether non-empty option is enabled in drop-down filter\r\n * types\r\n * @type {Boolean}\r\n */\r\n this.enableNonEmptyOption = Boolean(f.enable_non_empty_option);\r\n\r\n /**\r\n * Text for non-empty option in drop-down filter types\r\n * @type {String}\r\n */\r\n this.nonEmptyText = defaultsStr(f.non_empty_text, '(Non empty)');\r\n\r\n /**\r\n * Indicate whether drop-down filter types filter the table by default\r\n * on change event\r\n * @type {Boolean}\r\n */\r\n this.onSlcChange = defaultsBool(f.on_change, true);\r\n\r\n /**\r\n * Make drop-down filter types options sorted in alpha-numeric manner\r\n * by default globally or on a column basis\r\n * @type {Boolean|Array}\r\n */\r\n this.sortSlc = isUndef(f.sort_select) ? true :\r\n isArray(f.sort_select) ? f.sort_select : Boolean(f.sort_select);\r\n\r\n /**\r\n * Indicate whether options in drop-down filter types are sorted in a\r\n * ascending numeric manner\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isSortNumAsc = Boolean(f.sort_num_asc);\r\n\r\n /**\r\n * List of columns implementing options sorting in a ascending numeric\r\n * manner\r\n * @type {Array}\r\n */\r\n this.sortNumAsc = this.isSortNumAsc ? f.sort_num_asc : [];\r\n\r\n /**\r\n * Indicate whether options in drop-down filter types are sorted in a\r\n * descending numeric manner\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isSortNumDesc = Boolean(f.sort_num_desc);\r\n\r\n /**\r\n * List of columns implementing options sorting in a descending numeric\r\n * manner\r\n * @type {Array}\r\n */\r\n this.sortNumDesc = this.isSortNumDesc ? f.sort_num_desc : [];\r\n\r\n /**\r\n * Indicate whether drop-down filter types are populated on demand at\r\n * first usage\r\n * @type {Boolean}\r\n */\r\n this.loadFltOnDemand = Boolean(f.load_filters_on_demand);\r\n\r\n /**\r\n * Indicate whether custom drop-down filter options are implemented\r\n * @type {Boolean}\r\n */\r\n this.hasCustomOptions = isObj(f.custom_options);\r\n\r\n /**\r\n * Custom options definition of a per column basis, ie:\r\n *\tcustom_options: {\r\n * cols:[0, 1],\r\n * texts: [\r\n * ['a0', 'b0', 'c0'],\r\n * ['a1', 'b1', 'c1']\r\n * ],\r\n * values: [\r\n * ['a0', 'b0', 'c0'],\r\n * ['a1', 'b1', 'c1']\r\n * ],\r\n * sorts: [false, true]\r\n * }\r\n *\r\n * @type {Object}\r\n */\r\n this.customOptions = f.custom_options;\r\n\r\n /*** Filter operators ***/\r\n /**\r\n * Regular expression operator for input filter. Defaults to 'rgx:'\r\n * @type {String}\r\n */\r\n this.rgxOperator = defaultsStr(f.regexp_operator, 'rgx:');\r\n\r\n /**\r\n * Empty cells operator for input filter. Defaults to '[empty]'\r\n * @type {String}\r\n */\r\n this.emOperator = defaultsStr(f.empty_operator, '[empty]');\r\n\r\n /**\r\n * Non-empty cells operator for input filter. Defaults to '[nonempty]'\r\n * @type {String}\r\n */\r\n this.nmOperator = defaultsStr(f.nonempty_operator, '[nonempty]');\r\n\r\n /**\r\n * Logical OR operator for input filter. Defaults to '||'\r\n * @type {String}\r\n */\r\n this.orOperator = defaultsStr(f.or_operator, '||');\r\n\r\n /**\r\n * Logical AND operator for input filter. Defaults to '&&'\r\n * @type {String}\r\n */\r\n this.anOperator = defaultsStr(f.and_operator, '&&');\r\n\r\n /**\r\n * Greater than operator for input filter. Defaults to '>'\r\n * @type {String}\r\n */\r\n this.grOperator = defaultsStr(f.greater_operator, '>');\r\n\r\n /**\r\n * Lower than operator for input filter. Defaults to '<'\r\n * @type {String}\r\n */\r\n this.lwOperator = defaultsStr(f.lower_operator, '<');\r\n\r\n /**\r\n * Lower than or equal operator for input filter. Defaults to '<='\r\n * @type {String}\r\n */\r\n this.leOperator = defaultsStr(f.lower_equal_operator, '<=');\r\n\r\n /**\r\n * Greater than or equal operator for input filter. Defaults to '>='\r\n * @type {String}\r\n */\r\n this.geOperator = defaultsStr(f.greater_equal_operator, '>=');\r\n\r\n /**\r\n * Inequality operator for input filter. Defaults to '!'\r\n * @type {String}\r\n */\r\n this.dfOperator = defaultsStr(f.different_operator, '!');\r\n\r\n /**\r\n * Like operator for input filter. Defaults to '*'\r\n * @type {String}\r\n */\r\n this.lkOperator = defaultsStr(f.like_operator, '*');\r\n\r\n /**\r\n * Strict equality operator for input filter. Defaults to '='\r\n * @type {String}\r\n */\r\n this.eqOperator = defaultsStr(f.equal_operator, '=');\r\n\r\n /**\r\n * Starts with operator for input filter. Defaults to '='\r\n * @type {String}\r\n */\r\n this.stOperator = defaultsStr(f.start_with_operator, '{');\r\n\r\n /**\r\n * Ends with operator for input filter. Defaults to '='\r\n * @type {String}\r\n */\r\n this.enOperator = defaultsStr(f.end_with_operator, '}');\r\n\r\n // this.curExp = f.cur_exp || '^[¥£€$]';\r\n\r\n /**\r\n * Stored values separator\r\n * @type {String}\r\n */\r\n this.separator = defaultsStr(f.separator, ',');\r\n\r\n /**\r\n * Enable rows counter UI component\r\n * @type {Boolean|Object}\r\n */\r\n this.rowsCounter = isObj(f.rows_counter) || Boolean(f.rows_counter);\r\n\r\n /**\r\n * Enable status bar UI component\r\n * @type {Boolean|Object}\r\n */\r\n this.statusBar = isObj(f.status_bar) || Boolean(f.status_bar);\r\n\r\n /**\r\n * Enable activity/spinner indicator UI component\r\n * @type {Boolean|Object}\r\n */\r\n this.loader = isObj(f.loader) || Boolean(f.loader);\r\n\r\n /*** validation - reset buttons/links ***/\r\n /**\r\n * Enable filters submission button\r\n * @type {Boolean}\r\n */\r\n this.displayBtn = Boolean(f.btn);\r\n\r\n /**\r\n * Define filters submission button text\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, (!this.enableIcons ? 'Go' : ''));\r\n\r\n /**\r\n * Css class for filters submission button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class,\r\n (!this.enableIcons ? 'btnflt' : 'btnflt_icon'));\r\n\r\n /**\r\n * Enable clear button\r\n * @type {Object|Boolean}\r\n */\r\n this.btnReset = isObj(f.btn_reset) || Boolean(f.btn_reset);\r\n\r\n /**\r\n * Callback fired before filters are cleared\r\n * @type {Function}\r\n */\r\n this.onBeforeReset = defaultsFn(f.on_before_reset, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filters are cleared\r\n * @type {Function}\r\n */\r\n this.onAfterReset = defaultsFn(f.on_after_reset, EMPTY_FN);\r\n\r\n /**\r\n * Enable paging component\r\n * @type {Object|Boolean}\r\n */\r\n this.paging = isObj(f.paging) || Boolean(f.paging);\r\n\r\n /**\r\n * Number of hidden rows\r\n * @type {Number}\r\n * @private\r\n */\r\n this.nbHiddenRows = 0;\r\n\r\n /**\r\n * Enable auto-filter behaviour, table is filtered when a user\r\n * stops typing\r\n * @type {Object|Boolean}\r\n */\r\n this.autoFilter = isObj(f.auto_filter) || Boolean(f.auto_filter);\r\n\r\n /**\r\n * Auto-filter delay in milliseconds\r\n * @type {Number}\r\n */\r\n this.autoFilterDelay = isObj(f.auto_filter) &&\r\n isNumber(f.auto_filter.delay) ?\r\n f.auto_filter.delay : AUTO_FILTER_DELAY;\r\n\r\n /**\r\n * Indicate whether user is typing\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isUserTyping = null;\r\n\r\n /**\r\n * Auto-filter interval ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.autoFilterTimer = null;\r\n\r\n /**\r\n * Enable keyword highlighting behaviour\r\n * @type {Boolean}\r\n */\r\n this.highlightKeywords = Boolean(f.highlight_keywords);\r\n\r\n /**\r\n * Enable no results message UI component\r\n * @type {Object|Boolean}\r\n */\r\n this.noResults = isObj(f.no_results_message) ||\r\n Boolean(f.no_results_message);\r\n\r\n /**\r\n * Enable state persistence\r\n * @type {Object|Boolean}\r\n */\r\n this.state = isObj(f.state) || Boolean(f.state);\r\n\r\n /*** data types ***/\r\n\r\n /**\r\n * Enable date type module\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.dateType = true;\r\n\r\n /**\r\n * Define default locale, default to 'en' as per Sugar Date module:\r\n * https://sugarjs.com/docs/#/DateLocales\r\n * @type {String}\r\n */\r\n this.locale = defaultsStr(f.locale, 'en');\r\n\r\n /**\r\n * Define thousands separator ',' or '.', defaults to ','\r\n * @type {String}\r\n */\r\n this.thousandsSeparator = defaultsStr(f.thousands_separator, ',');\r\n\r\n /**\r\n * Define decimal separator ',' or '.', defaults to '.'\r\n * @type {String}\r\n */\r\n this.decimalSeparator = defaultsStr(f.decimal_separator, '.');\r\n\r\n /**\r\n * Define data types on a column basis, possible values 'string',\r\n * 'number', 'formatted-number', 'date', 'ipaddress' ie:\r\n * col_types : [\r\n * 'string', 'date', 'number',\r\n * { type: 'formatted-number', decimal: ',', thousands: '.' },\r\n * { type: 'date', locale: 'en-gb' },\r\n * { type: 'date', format: ['{dd}-{months}-{yyyy|yy}'] }\r\n * ]\r\n *\r\n * Refer to https://sugarjs.com/docs/#/DateParsing for exhaustive\r\n * information on date parsing formats supported by Sugar Date\r\n * @type {Array}\r\n */\r\n this.colTypes = isArray(f.col_types) ? f.col_types : [];\r\n\r\n /*** ids prefixes ***/\r\n /**\r\n * Main prefix\r\n * @private\r\n */\r\n this.prfxTf = 'TF';\r\n\r\n /**\r\n * Filter's ID prefix (inputs - selects)\r\n * @private\r\n */\r\n this.prfxFlt = 'flt';\r\n\r\n /**\r\n * Button's ID prefix\r\n * @private\r\n */\r\n this.prfxValButton = 'btn';\r\n\r\n /**\r\n * Responsive Css class\r\n * @private\r\n */\r\n this.prfxResponsive = 'resp';\r\n\r\n /** @private */\r\n this.stickyCssClass = 'sticky';\r\n\r\n /*** extensions ***/\r\n /**\r\n * List of loaded extensions\r\n * @type {Array}\r\n */\r\n this.extensions = defaultsArr(f.extensions, []);\r\n\r\n /*** themes ***/\r\n /**\r\n * Enable default theme\r\n * @type {Boolean}\r\n */\r\n this.enableDefaultTheme = Boolean(f.enable_default_theme);\r\n\r\n /**\r\n * Determine whether themes are enables\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.hasThemes = (this.enableDefaultTheme || isArray(f.themes));\r\n\r\n /**\r\n * List of themes, ie:\r\n * themes: [{ name: 'skyblue' }]\r\n * @type {Array}\r\n */\r\n this.themes = defaultsArr(f.themes, []);\r\n\r\n /**\r\n * Define path to themes assets, defaults to\r\n * 'tablefilter/style/themes/'. Usage:\r\n * themes: [{ name: 'skyblue' }]\r\n * @type {Array}\r\n */\r\n this.themesPath = this.getThemesPath();\r\n\r\n /**\r\n * Enable responsive layout\r\n * @type {Boolean}\r\n */\r\n this.responsive = Boolean(f.responsive);\r\n\r\n /**\r\n * Enable toolbar component\r\n * @type {Object|Boolean}\r\n */\r\n this.toolbar = isObj(f.toolbar) || Boolean(f.toolbar);\r\n\r\n /**\r\n * Enable sticky headers\r\n * @type {Boolean}\r\n */\r\n this.stickyHeaders = Boolean(f.sticky_headers);\r\n\r\n /**\r\n * Features registry\r\n * @private\r\n */\r\n this.Mod = {};\r\n this._mod_ = [];\r\n\r\n /**\r\n * Extensions registry\r\n * @private\r\n */\r\n this.ExtRegistry = {};\r\n\r\n // conditionally instantiate required features\r\n this.instantiateFeatures(\r\n Object.keys(FEATURES).map((item) => FEATURES[item])\r\n );\r\n }\r\n\r\n /**\r\n * Initialise features and layout\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n // import main stylesheet\r\n this.import(this.stylesheetId, this.getStylesheetPath(), null, 'link');\r\n\r\n let Mod = this.Mod;\r\n let inpclass;\r\n\r\n //loads theme\r\n this.loadThemes();\r\n\r\n const { dateType, help, state, markActiveColumns, gridLayout, loader,\r\n highlightKeyword, popupFilter, rowsCounter, statusBar, clearButton,\r\n alternateRows, noResults, paging, toolbar } = FEATURES;\r\n\r\n //explicitly initialise features in given order\r\n this.initFeatures([\r\n dateType,\r\n help,\r\n state,\r\n markActiveColumns,\r\n gridLayout,\r\n loader,\r\n highlightKeyword,\r\n popupFilter\r\n ]);\r\n\r\n //filters grid is not generated\r\n if (!this.fltGrid) {\r\n this._initNoFilters();\r\n } else {\r\n let fltrow = this._insertFiltersRow();\r\n\r\n this.nbCells = this.getCellsNb(this.refRow);\r\n this.nbFilterableRows = this.getRowsNb();\r\n\r\n let n = this.singleFlt ? 1 : this.nbCells;\r\n\r\n //build filters\r\n for (let i = 0; i < n; i++) {\r\n this.emitter.emit('before-filter-init', this, i);\r\n\r\n let fltCell = createElm(this.fltCellTag),\r\n col = this.getFilterType(i);\r\n\r\n if (this.singleFlt) {\r\n fltCell.colSpan = this.nbCells;\r\n }\r\n if (!this.gridLayout) {\r\n fltrow.appendChild(fltCell);\r\n }\r\n inpclass = (i === n - 1 && this.displayBtn) ?\r\n this.fltSmallCssClass : this.fltCssClass;\r\n\r\n //only 1 input for single search\r\n if (this.singleFlt) {\r\n col = INPUT;\r\n inpclass = this.singleFltCssClass;\r\n }\r\n\r\n //drop-down filters\r\n if (col === SELECT || col === MULTIPLE) {\r\n Mod.dropdown = Mod.dropdown || new Dropdown(this);\r\n Mod.dropdown.init(i, this.isExternalFlt(), fltCell);\r\n }\r\n // checklist\r\n else if (col === CHECKLIST) {\r\n Mod.checkList = Mod.checkList || new CheckList(this);\r\n Mod.checkList.init(i, this.isExternalFlt(), fltCell);\r\n } else {\r\n this._buildInputFilter(i, inpclass, fltCell);\r\n }\r\n\r\n // this adds submit button\r\n if (i === n - 1 && this.displayBtn) {\r\n this._buildSubmitButton(\r\n this.isExternalFlt() ?\r\n elm(this.externalFltIds[i]) :\r\n fltCell\r\n );\r\n }\r\n\r\n this.emitter.emit('after-filter-init', this, i);\r\n }\r\n\r\n this.emitter.on(['filter-focus'],\r\n (tf, filter) => this.setActiveFilterId(filter.id));\r\n\r\n }//if this.fltGrid\r\n\r\n /* Features */\r\n if (this.hasExcludedRows) {\r\n this.emitter.on(['after-filtering'], () => this.setExcludeRows());\r\n this.setExcludeRows();\r\n }\r\n\r\n this.initFeatures([\r\n rowsCounter,\r\n statusBar,\r\n clearButton,\r\n alternateRows,\r\n noResults,\r\n paging,\r\n toolbar\r\n ]);\r\n\r\n this.setColWidths();\r\n\r\n //TF css class is added to table\r\n if (!this.gridLayout) {\r\n addClass(this.dom(), this.prfxTf);\r\n if (this.responsive) {\r\n addClass(this.dom(), this.prfxResponsive);\r\n }\r\n if (this.colWidths.length > 0) {\r\n this.setFixedLayout();\r\n }\r\n if (this.stickyHeaders && this.dom().tHead) {\r\n addClass(this.dom(), this.stickyCssClass);\r\n }\r\n }\r\n\r\n /* Load extensions */\r\n this.initExtensions();\r\n\r\n this.initialized = true;\r\n\r\n this.onFiltersLoaded(this);\r\n\r\n this.emitter.emit('initialized', this);\r\n }\r\n\r\n /**\r\n * Detect key\r\n * @param {Event} evt\r\n */\r\n detectKey(evt) {\r\n if (!this.enterKey) {\r\n return;\r\n }\r\n\r\n if (isKeyPressed(evt, [ENTER_KEY])) {\r\n this.filter();\r\n cancelEvt(evt);\r\n stopEvt(evt);\r\n } else {\r\n this.isUserTyping = true;\r\n root.clearInterval(this.autoFilterTimer);\r\n this.autoFilterTimer = null;\r\n }\r\n }\r\n\r\n /**\r\n * Filter's keyup event: if auto-filter on, detect user is typing and filter\r\n * columns\r\n * @param {Event} evt\r\n */\r\n onKeyUp(evt) {\r\n if (!this.autoFilter) {\r\n return;\r\n }\r\n this.isUserTyping = false;\r\n\r\n function filter() {\r\n root.clearInterval(this.autoFilterTimer);\r\n this.autoFilterTimer = null;\r\n if (!this.isUserTyping) {\r\n this.filter();\r\n this.isUserTyping = null;\r\n }\r\n }\r\n\r\n if (isKeyPressed(evt,\r\n [ENTER_KEY, TAB_KEY, ESC_KEY, UP_ARROW_KEY, DOWN_ARROW_KEY])) {\r\n root.clearInterval(this.autoFilterTimer);\r\n this.autoFilterTimer = null;\r\n } else {\r\n if (this.autoFilterTimer !== null) {\r\n return;\r\n }\r\n this.autoFilterTimer = root.setInterval(\r\n filter.bind(this),\r\n this.autoFilterDelay);\r\n }\r\n }\r\n\r\n /**\r\n * Filter's keydown event: if auto-filter on, detect user is typing\r\n */\r\n onKeyDown() {\r\n if (this.autoFilter) {\r\n this.isUserTyping = true;\r\n }\r\n }\r\n\r\n /**\r\n * Filter's focus event\r\n * @param {Event} evt\r\n */\r\n onInpFocus(evt) {\r\n let elm = targetEvt(evt);\r\n this.emitter.emit('filter-focus', this, elm);\r\n }\r\n\r\n /**\r\n * Filter's blur event: if auto-filter on, clear interval on filter blur\r\n */\r\n onInpBlur() {\r\n if (this.autoFilter) {\r\n this.isUserTyping = false;\r\n root.clearInterval(this.autoFilterTimer);\r\n }\r\n this.emitter.emit('filter-blur', this);\r\n }\r\n\r\n /**\r\n * Insert filters row at initialization\r\n */\r\n _insertFiltersRow() {\r\n // TODO: prevent filters row generation for popup filters too,\r\n // to reduce and simplify headers row index adjusting across lib modules\r\n // (GridLayout, PopupFilter etc)\r\n if (this.gridLayout) {\r\n return;\r\n }\r\n let fltrow;\r\n\r\n let thead = tag(this.dom(), 'thead');\r\n if (thead.length > 0) {\r\n fltrow = thead[0].insertRow(this.filtersRowIndex);\r\n } else {\r\n fltrow = this.dom().insertRow(this.filtersRowIndex);\r\n }\r\n\r\n fltrow.className = this.fltsRowCssClass;\r\n\r\n if (this.isExternalFlt()) {\r\n fltrow.style.display = NONE;\r\n }\r\n\r\n this.emitter.emit('filters-row-inserted', this, fltrow);\r\n return fltrow;\r\n }\r\n\r\n /**\r\n * Initialize filtersless table\r\n */\r\n _initNoFilters() {\r\n if (this.fltGrid) {\r\n return;\r\n }\r\n this.refRow = this.refRow > 0 ? this.refRow - 1 : 0;\r\n this.nbFilterableRows = this.getRowsNb();\r\n }\r\n\r\n /**\r\n * Build input filter type\r\n * @param {Number} colIndex Column index\r\n * @param {String} cssClass Css class applied to filter\r\n * @param {DOMElement} container Container DOM element\r\n */\r\n _buildInputFilter(colIndex, cssClass, container) {\r\n let col = this.getFilterType(colIndex);\r\n let externalFltTgtId = this.isExternalFlt() ?\r\n this.externalFltIds[colIndex] : null;\r\n let inpType = col === INPUT ? 'text' : 'hidden';\r\n let inp = createElm(INPUT,\r\n ['id', this.buildFilterId(colIndex)],\r\n ['type', inpType], ['ct', colIndex]);\r\n\r\n if (inpType !== 'hidden' && this.watermark) {\r\n inp.setAttribute('placeholder',\r\n this.isWatermarkArray ? (this.watermark[colIndex] || '') :\r\n this.watermark\r\n );\r\n }\r\n inp.className = cssClass || this.fltCssClass;\r\n addEvt(inp, 'focus', (evt) => this.onInpFocus(evt));\r\n\r\n //filter is appended in custom element\r\n if (externalFltTgtId) {\r\n elm(externalFltTgtId).appendChild(inp);\r\n } else {\r\n container.appendChild(inp);\r\n }\r\n\r\n this.fltIds.push(inp.id);\r\n\r\n addEvt(inp, 'keypress', (evt) => this.detectKey(evt));\r\n addEvt(inp, 'keydown', () => this.onKeyDown());\r\n addEvt(inp, 'keyup', (evt) => this.onKeyUp(evt));\r\n addEvt(inp, 'blur', () => this.onInpBlur());\r\n }\r\n\r\n /**\r\n * Build submit button\r\n * @param {DOMElement} container Container DOM element\r\n */\r\n _buildSubmitButton(container) {\r\n let btn = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnText]\r\n );\r\n btn.className = this.btnCssClass;\r\n\r\n //filter is appended in container element\r\n container.appendChild(btn);\r\n\r\n addEvt(btn, 'click', () => this.filter());\r\n }\r\n\r\n /**\r\n * Istantiate the collection of features required by the\r\n * configuration and add them to the features registry. A feature is\r\n * described by a `class` and `name` fields and and optional `property`\r\n * field:\r\n * {\r\n * class: AClass,\r\n * name: 'aClass'\r\n * }\r\n * @param {Array} [features=[]]\r\n * @private\r\n */\r\n instantiateFeatures(features = []) {\r\n features.forEach((feature) => {\r\n // TODO: remove the property field.\r\n // Due to naming convention inconsistencies, a `property`\r\n // field is added to allow a conditional instanciation based\r\n // on that property on TableFilter, if supplied.\r\n feature.property = feature.property || feature.name;\r\n if (!this.hasConfig || this[feature.property] === true ||\r\n feature.enforce === true) {\r\n let {class: Cls, name} = feature;\r\n\r\n this.Mod[name] = this.Mod[name] || new Cls(this);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Initialise the passed features collection. A feature is described by a\r\n * `class` and `name` fields and and optional `property` field:\r\n * {\r\n * class: AClass,\r\n * name: 'aClass'\r\n * }\r\n * @param {Array} [features=[]]\r\n * @private\r\n */\r\n initFeatures(features = []) {\r\n features.forEach((feature) => {\r\n let {property, name} = feature;\r\n if (this[property] === true && this.Mod[name]) {\r\n this.Mod[name].init();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Return a feature instance for a given name\r\n * @param {String} name Name of the feature\r\n * @return {Object}\r\n */\r\n feature(name) {\r\n return this.Mod[name];\r\n }\r\n\r\n /**\r\n * Initialise all the extensions defined in the configuration object\r\n */\r\n initExtensions() {\r\n let exts = this.extensions;\r\n if (exts.length === 0) {\r\n return;\r\n }\r\n\r\n // Set config's publicPath dynamically for Webpack...\r\n __webpack_public_path__ = this.basePath;\r\n\r\n this.emitter.emit('before-loading-extensions', this);\r\n\r\n exts.forEach((ext) => {\r\n this.loadExtension(ext);\r\n });\r\n this.emitter.emit('after-loading-extensions', this);\r\n }\r\n\r\n /**\r\n * Load an extension module\r\n * @param {Object} ext Extension config object\r\n */\r\n loadExtension(ext) {\r\n if (!ext || !ext.name || this.hasExtension(ext.name)) {\r\n return;\r\n }\r\n\r\n let {name, path} = ext;\r\n let modulePath;\r\n\r\n if (name && path) {\r\n modulePath = ext.path + name;\r\n } else {\r\n name = name.replace('.js', '');\r\n modulePath = 'extensions/{}/{}'.replace(/{}/g, name);\r\n }\r\n\r\n // Require pattern for Webpack\r\n require(['./' + modulePath], (mod) => {\r\n /* eslint-disable */\r\n let inst = new mod.default(this, ext);\r\n /* eslint-enable */\r\n inst.init();\r\n this.ExtRegistry[name] = inst;\r\n });\r\n }\r\n\r\n /**\r\n * Get an extension instance\r\n * @param {String} name Name of the extension\r\n * @return {Object} Extension instance\r\n */\r\n extension(name) {\r\n return this.ExtRegistry[name];\r\n }\r\n\r\n /**\r\n * Check passed extension name exists\r\n * @param {String} name Name of the extension\r\n * @return {Boolean}\r\n */\r\n hasExtension(name) {\r\n return !isEmpty(this.ExtRegistry[name]);\r\n }\r\n\r\n /**\r\n * Register the passed extension instance with associated name\r\n * @param {Object} inst Extension instance\r\n * @param {String} name Name of the extension\r\n */\r\n registerExtension(inst, name) {\r\n this.ExtRegistry[name] = inst;\r\n }\r\n\r\n /**\r\n * Destroy all the extensions store in extensions registry\r\n */\r\n destroyExtensions() {\r\n let reg = this.ExtRegistry;\r\n\r\n Object.keys(reg).forEach((key) => {\r\n reg[key].destroy();\r\n reg[key] = undefined;\r\n });\r\n }\r\n\r\n /**\r\n * Load themes defined in the configuration object\r\n */\r\n loadThemes() {\r\n if (!this.hasThemes) {\r\n return;\r\n }\r\n\r\n let themes = this.themes;\r\n this.emitter.emit('before-loading-themes', this);\r\n\r\n //Default theme config\r\n if (this.enableDefaultTheme) {\r\n let defaultTheme = { name: 'default' };\r\n this.themes.push(defaultTheme);\r\n }\r\n\r\n themes.forEach((theme, i) => {\r\n let {name, path} = theme;\r\n let styleId = this.prfxTf + name;\r\n if (name && !path) {\r\n path = this.themesPath + name + '/' + name + '.css';\r\n }\r\n else if (!name && theme.path) {\r\n name = 'theme{0}'.replace('{0}', i);\r\n }\r\n\r\n if (!this.isImported(path, 'link')) {\r\n this.import(styleId, path, null, 'link');\r\n }\r\n });\r\n\r\n // Enable loader indicator\r\n this.loader = true;\r\n\r\n this.emitter.emit('after-loading-themes', this);\r\n }\r\n\r\n /**\r\n * Return stylesheet DOM element for a given theme name\r\n * @return {DOMElement} stylesheet element\r\n */\r\n getStylesheet(name = 'default') {\r\n return elm(this.prfxTf + name);\r\n }\r\n\r\n /**\r\n * Destroy filter grid\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let emitter = this.emitter;\r\n\r\n if (this.isExternalFlt() && !this.popupFilters) {\r\n this.removeExternalFlts();\r\n }\r\n\r\n this.destroyExtensions();\r\n\r\n this.validateAllRows();\r\n\r\n // broadcast destroy event modules and extensions are subscribed to\r\n emitter.emit('destroy', this);\r\n\r\n if (this.fltGrid && !this.gridLayout) {\r\n this.dom().deleteRow(this.filtersRowIndex);\r\n }\r\n\r\n // unsubscribe to events\r\n if (this.hasExcludedRows) {\r\n emitter.off(['after-filtering'], () => this.setExcludeRows());\r\n }\r\n\r\n this.emitter.off(['filter-focus'],\r\n (tf, filter) => this.setActiveFilterId(filter.id));\r\n\r\n removeClass(this.dom(), this.prfxTf);\r\n removeClass(this.dom(), this.prfxResponsive);\r\n if (this.dom().tHead) {\r\n removeClass(this.dom().tHead, this.stickyCssClass);\r\n }\r\n\r\n this.nbHiddenRows = 0;\r\n this.validRowsIndex = [];\r\n this.fltIds = [];\r\n this.initialized = false;\r\n }\r\n\r\n /**\r\n * Remove all the external column filters\r\n */\r\n removeExternalFlts() {\r\n if (!this.isExternalFlt()) {\r\n return;\r\n }\r\n let ids = this.externalFltIds;\r\n ids.forEach((id) => {\r\n let externalFlt = elm(id);\r\n if (externalFlt) {\r\n externalFlt.innerHTML = '';\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Check if given column implements a filter with custom options\r\n * @param {Number} colIndex Column's index\r\n * @return {Boolean}\r\n */\r\n isCustomOptions(colIndex) {\r\n return this.hasCustomOptions &&\r\n this.customOptions.cols.indexOf(colIndex) !== -1;\r\n }\r\n\r\n /**\r\n * Returns an array [[value0, value1 ...],[text0, text1 ...]] with the\r\n * custom options values and texts\r\n * @param {Number} colIndex Column's index\r\n * @return {Array}\r\n */\r\n getCustomOptions(colIndex) {\r\n if (isEmpty(colIndex) || !this.isCustomOptions(colIndex)) {\r\n return;\r\n }\r\n\r\n let customOptions = this.customOptions;\r\n let cols = customOptions.cols;\r\n let optTxt = [], optArray = [];\r\n let index = cols.indexOf(colIndex);\r\n let slcValues = customOptions.values[index];\r\n let slcTexts = customOptions.texts[index];\r\n let slcSort = customOptions.sorts[index];\r\n\r\n for (let r = 0, len = slcValues.length; r < len; r++) {\r\n optArray.push(slcValues[r]);\r\n if (slcTexts[r]) {\r\n optTxt.push(slcTexts[r]);\r\n } else {\r\n optTxt.push(slcValues[r]);\r\n }\r\n }\r\n if (slcSort) {\r\n optArray.sort();\r\n optTxt.sort();\r\n }\r\n return [optArray, optTxt];\r\n }\r\n\r\n /**\r\n * Filter the table by retrieving the data from each cell in every single\r\n * row and comparing it to the search term for current column. A row is\r\n * hidden when all the search terms are not found in inspected row.\r\n */\r\n filter() {\r\n if (!this.fltGrid || !this.initialized) {\r\n return;\r\n }\r\n\r\n let emitter = this.emitter;\r\n\r\n //fire onbefore callback\r\n this.onBeforeFilter(this);\r\n emitter.emit('before-filtering', this);\r\n\r\n let hiddenRows = 0;\r\n\r\n this.validRowsIndex = [];\r\n // search args\r\n let searchArgs = this.getFiltersValue();\r\n\r\n let eachRow = this.eachRow();\r\n eachRow(\r\n (row, k) => {\r\n // already filtered rows display re-init\r\n row.style.display = '';\r\n\r\n let cells = row.cells;\r\n let nbCells = cells.length;\r\n\r\n let occurence = [],\r\n isMatch = true,\r\n //only for single filter search\r\n isSingleFltMatch = false;\r\n\r\n // this loop retrieves cell data\r\n for (let j = 0; j < nbCells; j++) {\r\n //searched keyword\r\n let sA = searchArgs[this.singleFlt ? 0 : j];\r\n\r\n if (sA === '') {\r\n continue;\r\n }\r\n\r\n let cellValue = matchCase(this.getCellValue(cells[j]),\r\n this.caseSensitive);\r\n\r\n //multiple search parameter operator ||\r\n let sAOrSplit = sA.toString().split(this.orOperator),\r\n //multiple search || parameter boolean\r\n hasMultiOrSA = sAOrSplit.length > 1,\r\n //multiple search parameter operator &&\r\n sAAndSplit = sA.toString().split(this.anOperator),\r\n //multiple search && parameter boolean\r\n hasMultiAndSA = sAAndSplit.length > 1;\r\n\r\n //detect operators or array query\r\n if (isArray(sA) || hasMultiOrSA || hasMultiAndSA) {\r\n let cS, s;\r\n let found = false;\r\n\r\n if (isArray(sA)) {\r\n s = sA;\r\n } else {\r\n s = hasMultiOrSA ? sAOrSplit : sAAndSplit;\r\n }\r\n // isolate search term and check occurence in cell data\r\n for (let w = 0, len = s.length; w < len; w++) {\r\n cS = trim(s[w]);\r\n found = this._match(cS, cellValue, cells[j]);\r\n\r\n if (found) {\r\n emitter.emit('highlight-keyword', this,\r\n cells[j], cS);\r\n }\r\n if ((hasMultiOrSA && found) ||\r\n (hasMultiAndSA && !found)) {\r\n break;\r\n }\r\n if (isArray(sA) && found) {\r\n break;\r\n }\r\n }\r\n occurence[j] = found;\r\n\r\n }\r\n //single search parameter\r\n else {\r\n occurence[j] =\r\n this._match(trim(sA), cellValue, cells[j]);\r\n if (occurence[j]) {\r\n emitter.emit('highlight-keyword', this, cells[j],\r\n sA);\r\n }\r\n }\r\n\r\n if (!occurence[j]) {\r\n isMatch = false;\r\n }\r\n\r\n if (this.singleFlt &&\r\n this.singleFltExcludeCols.indexOf(j) === -1 &&\r\n occurence[j]) {\r\n isSingleFltMatch = true;\r\n }\r\n\r\n emitter.emit('cell-processed', this, j, cells[j]);\r\n }//for j\r\n\r\n if (isSingleFltMatch) {\r\n isMatch = true;\r\n }\r\n\r\n this.validateRow(k, isMatch);\r\n if (!isMatch) {\r\n hiddenRows++;\r\n }\r\n\r\n emitter.emit('row-processed', this, k,\r\n this.validRowsIndex.length - 1, isMatch);\r\n },\r\n // continue condition\r\n (row) => row.cells.length !== this.nbCells\r\n );\r\n\r\n this.nbHiddenRows = hiddenRows;\r\n\r\n //fire onafterfilter callback\r\n this.onAfterFilter(this);\r\n\r\n emitter.emit('after-filtering', this, searchArgs);\r\n }\r\n\r\n /**\r\n * Match search term in cell data\r\n * @param {String} term Search term\r\n * @param {String} cellValue Cell data\r\n * @param {DOMElement} cell Current cell\r\n * @return {Boolean}\r\n * @private\r\n */\r\n _match(term, cellValue, cell) {\r\n let numData;\r\n let colIdx = cell.cellIndex;\r\n let decimal = this.getDecimal(colIdx);\r\n let reLe = new RegExp(this.leOperator),\r\n reGe = new RegExp(this.geOperator),\r\n reL = new RegExp(this.lwOperator),\r\n reG = new RegExp(this.grOperator),\r\n reD = new RegExp(this.dfOperator),\r\n reLk = new RegExp(rgxEsc(this.lkOperator)),\r\n reEq = new RegExp(this.eqOperator),\r\n reSt = new RegExp(this.stOperator),\r\n reEn = new RegExp(this.enOperator),\r\n // re_an = new RegExp(this.anOperator),\r\n // re_cr = new RegExp(this.curExp),\r\n reEm = this.emOperator,\r\n reNm = this.nmOperator,\r\n reRe = new RegExp(rgxEsc(this.rgxOperator));\r\n\r\n term = matchCase(term, this.caseSensitive);\r\n\r\n let occurence = false;\r\n\r\n //Search arg operator tests\r\n let hasLO = reL.test(term),\r\n hasLE = reLe.test(term),\r\n hasGR = reG.test(term),\r\n hasGE = reGe.test(term),\r\n hasDF = reD.test(term),\r\n hasEQ = reEq.test(term),\r\n hasLK = reLk.test(term),\r\n // hatermN = re_an.test(term),\r\n hasST = reSt.test(term),\r\n hasEN = reEn.test(term),\r\n hasEM = (reEm === term),\r\n hasNM = (reNm === term),\r\n hasRE = reRe.test(term);\r\n\r\n // Check for dates or resolve date type\r\n if (this.hasType(colIdx, [DATE])) {\r\n let dte1, dte2;\r\n\r\n let dateType = this.Mod.dateType;\r\n let isValidDate = dateType.isValid.bind(dateType);\r\n let parseDate = dateType.parse.bind(dateType);\r\n let locale = dateType.getLocale(colIdx);\r\n\r\n // Search arg dates tests\r\n let isLDate = hasLO &&\r\n isValidDate(term.replace(reL, ''), locale);\r\n let isLEDate = hasLE &&\r\n isValidDate(term.replace(reLe, ''), locale);\r\n let isGDate = hasGR &&\r\n isValidDate(term.replace(reG, ''), locale);\r\n let isGEDate = hasGE &&\r\n isValidDate(term.replace(reGe, ''), locale);\r\n let isDFDate = hasDF &&\r\n isValidDate(term.replace(reD, ''), locale);\r\n let isEQDate = hasEQ &&\r\n isValidDate(term.replace(reEq, ''), locale);\r\n\r\n dte1 = parseDate(cellValue, locale);\r\n\r\n // lower equal date\r\n if (isLEDate) {\r\n dte2 = parseDate(term.replace(reLe, ''), locale);\r\n occurence = dte1 <= dte2;\r\n }\r\n // lower date\r\n else if (isLDate) {\r\n dte2 = parseDate(term.replace(reL, ''), locale);\r\n occurence = dte1 < dte2;\r\n }\r\n // greater equal date\r\n else if (isGEDate) {\r\n dte2 = parseDate(term.replace(reGe, ''), locale);\r\n occurence = dte1 >= dte2;\r\n }\r\n // greater date\r\n else if (isGDate) {\r\n dte2 = parseDate(term.replace(reG, ''), locale);\r\n occurence = dte1 > dte2;\r\n }\r\n // different date\r\n else if (isDFDate) {\r\n dte2 = parseDate(term.replace(reD, ''), locale);\r\n occurence = dte1.toString() !== dte2.toString();\r\n }\r\n // equal date\r\n else if (isEQDate) {\r\n dte2 = parseDate(term.replace(reEq, ''), locale);\r\n occurence = dte1.toString() === dte2.toString();\r\n }\r\n // searched keyword with * operator doesn't have to be a date\r\n else if (reLk.test(term)) {// like date\r\n occurence = contains(term.replace(reLk, ''), cellValue,\r\n false, this.caseSensitive);\r\n }\r\n else if (isValidDate(term)) {\r\n dte2 = parseDate(term, locale);\r\n occurence = dte1.toString() === dte2.toString();\r\n }\r\n //empty\r\n else if (hasEM) {\r\n occurence = !cell.hasChildNodes();\r\n }\r\n //non-empty\r\n else if (hasNM) {\r\n occurence = cell.hasChildNodes();\r\n } else {\r\n occurence = contains(term, cellValue,\r\n this.isExactMatch(colIdx), this.caseSensitive);\r\n }\r\n } else {\r\n // Convert to number anyways to auto-resolve type in case not\r\n // defined by configuration. Order is important first try to\r\n // parse formatted number then fallback to Number coercion\r\n // to avoid false positives with Number\r\n numData = parseNb(cellValue, decimal) || Number(cellValue);\r\n\r\n // first checks if there is any operator (<,>,<=,>=,!,*,=,{,},\r\n // rgx:)\r\n\r\n //regexp\r\n if (hasRE) {\r\n //in case regexp throws\r\n try {\r\n //operator is removed\r\n let srchArg = term.replace(reRe, '');\r\n let rgx = new RegExp(srchArg);\r\n occurence = rgx.test(cellValue);\r\n } catch (ex) {\r\n occurence = false;\r\n }\r\n }\r\n // lower equal\r\n else if (hasLE) {\r\n occurence = numData <= parseNb(\r\n term.replace(reLe, ''),\r\n decimal\r\n );\r\n }\r\n //greater equal\r\n else if (hasGE) {\r\n occurence = numData >= parseNb(\r\n term.replace(reGe, ''),\r\n decimal\r\n );\r\n }\r\n //lower\r\n else if (hasLO) {\r\n occurence = numData < parseNb(\r\n term.replace(reL, ''),\r\n decimal\r\n );\r\n }\r\n //greater\r\n else if (hasGR) {\r\n occurence = numData > parseNb(\r\n term.replace(reG, ''),\r\n decimal\r\n );\r\n }\r\n //different\r\n else if (hasDF) {\r\n occurence = contains(term.replace(reD, ''), cellValue,\r\n false, this.caseSensitive) ? false : true;\r\n }\r\n //like\r\n else if (hasLK) {\r\n occurence = contains(term.replace(reLk, ''), cellValue,\r\n false, this.caseSensitive);\r\n }\r\n //equal\r\n else if (hasEQ) {\r\n occurence = contains(term.replace(reEq, ''), cellValue,\r\n true, this.caseSensitive);\r\n }\r\n //starts with\r\n else if (hasST) {\r\n occurence = cellValue.indexOf(term.replace(reSt, '')) === 0 ?\r\n true : false;\r\n }\r\n //ends with\r\n else if (hasEN) {\r\n let searchArg = term.replace(reEn, '');\r\n occurence =\r\n cellValue.lastIndexOf(searchArg, cellValue.length - 1) ===\r\n (cellValue.length - 1) - (searchArg.length - 1) &&\r\n cellValue.lastIndexOf(searchArg, cellValue.length - 1)\r\n > -1 ? true : false;\r\n }\r\n //empty\r\n else if (hasEM) {\r\n occurence = !cell.hasChildNodes();\r\n }\r\n //non-empty\r\n else if (hasNM) {\r\n occurence = cell.hasChildNodes();\r\n } else {\r\n // If numeric type data, perform a strict equality test and\r\n // fallback to unformatted number string comparison\r\n if (numData &&\r\n this.hasType(colIdx, [NUMBER, FORMATTED_NUMBER]) &&\r\n !this.singleFlt) {\r\n // parseNb can return 0 for strings which are not\r\n // formatted numbers, in that case return the original\r\n // string. TODO: handle this in parseNb\r\n term = parseNb(term, decimal) || term;\r\n occurence = numData === term ||\r\n contains(term.toString(), numData.toString(),\r\n this.isExactMatch(colIdx), this.caseSensitive);\r\n } else {\r\n // Finally test search term is contained in cell data\r\n occurence = contains(\r\n term,\r\n cellValue,\r\n this.isExactMatch(colIdx),\r\n this.caseSensitive,\r\n this.ignoresDiacritics(colIdx)\r\n );\r\n }\r\n }\r\n\r\n }//else\r\n\r\n return occurence;\r\n }\r\n\r\n /**\r\n * Return the data of a specified column\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Array} [exclude=[]] List of row indexes to be excluded\r\n * @return Flat list of data for a column\r\n */\r\n getColumnData(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getColValues(colIndex, includeHeaders, true, exclude);\r\n }\r\n\r\n /**\r\n * Return the values of a specified column\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Array} [exclude=[]] List of row indexes to be excluded\r\n * @return Flat list of values for a column\r\n */\r\n getColumnValues(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getColValues(colIndex, includeHeaders, false, exclude);\r\n }\r\n\r\n /**\r\n * Return the data of a specified column\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [typed=false] Return a typed value\r\n * @param {Array} [exclude=[]] List of row indexes to be excluded\r\n * @return {Array} Flat list of data for a column\r\n * @private\r\n */\r\n getColValues(\r\n colIndex,\r\n includeHeaders = false,\r\n typed = false,\r\n exclude = []\r\n ) {\r\n let colValues = [];\r\n let getContent = typed ? this.getCellData.bind(this) :\r\n this.getCellValue.bind(this);\r\n\r\n if (includeHeaders) {\r\n colValues.push(this.getHeadersText()[colIndex]);\r\n }\r\n\r\n let eachRow = this.eachRow();\r\n eachRow((row, i) => {\r\n // checks if current row index appears in exclude array\r\n let isExludedRow = exclude.indexOf(i) !== -1;\r\n let cells = row.cells;\r\n\r\n // checks if row has exact cell # and is not excluded\r\n if (cells.length === this.nbCells && !isExludedRow) {\r\n let data = getContent(cells[colIndex]);\r\n colValues.push(data);\r\n }\r\n });\r\n return colValues;\r\n }\r\n\r\n /**\r\n * Return the filter's value of a specified column\r\n * @param {Number} index Column index\r\n * @return {String} Filter value\r\n */\r\n getFilterValue(index) {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n let fltValue = '';\r\n let flt = this.getFilterElement(index);\r\n if (!flt) {\r\n return fltValue;\r\n }\r\n\r\n let fltColType = this.getFilterType(index);\r\n if (fltColType !== MULTIPLE && fltColType !== CHECKLIST) {\r\n fltValue = flt.value;\r\n }\r\n //mutiple select\r\n else if (fltColType === MULTIPLE) {\r\n fltValue = this.feature('dropdown').getValues(index);\r\n }\r\n //checklist\r\n else if (fltColType === CHECKLIST) {\r\n fltValue = this.feature('checkList').getValues(index);\r\n }\r\n //return an empty string if collection is empty or contains a single\r\n //empty string\r\n if (isArray(fltValue) && fltValue.length === 0 ||\r\n (fltValue.length === 1 && fltValue[0] === '')) {\r\n fltValue = '';\r\n }\r\n\r\n return fltValue;\r\n }\r\n\r\n /**\r\n * Return the filters' values\r\n * @return {Array} List of filters' values\r\n */\r\n getFiltersValue() {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n let searchArgs = [];\r\n\r\n this.fltIds.forEach((id, i) => {\r\n let fltValue = this.getFilterValue(i);\r\n if (isArray(fltValue)) {\r\n searchArgs.push(fltValue);\r\n } else {\r\n searchArgs.push(trim(fltValue));\r\n }\r\n });\r\n return searchArgs;\r\n }\r\n\r\n /**\r\n * Return the ID of a specified column's filter\r\n * @param {Number} index Column's index\r\n * @return {String} ID of the filter element\r\n */\r\n getFilterId(index) {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n return this.fltIds[index];\r\n }\r\n\r\n /**\r\n * Return the list of ids of filters matching a specified type.\r\n * Note: hidden filters are also returned\r\n *\r\n * @param {String} type Filter type string ('input', 'select', 'multiple',\r\n * 'checklist')\r\n * @param {Boolean} bool If true returns columns indexes instead of IDs\r\n * @return {[type]} List of element IDs or column indexes\r\n */\r\n getFiltersByType(type, bool) {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n let arr = [];\r\n for (let i = 0, len = this.fltIds.length; i < len; i++) {\r\n let fltType = this.getFilterType(i);\r\n if (fltType === type.toLowerCase()) {\r\n let a = bool ? i : this.fltIds[i];\r\n arr.push(a);\r\n }\r\n }\r\n return arr;\r\n }\r\n\r\n /**\r\n * Return the filter's DOM element for a given column\r\n * @param {Number} index Column's index\r\n * @return {DOMElement}\r\n */\r\n getFilterElement(index) {\r\n return elm(this.fltIds[index]);\r\n }\r\n\r\n /**\r\n * Return the number of cells for a given row index\r\n * @param {Number} rowIndex Index of the row\r\n * @return {Number} Number of cells\r\n */\r\n getCellsNb(rowIndex = 0) {\r\n let tr = this.dom().rows[rowIndex >= 0 ? rowIndex : 0];\r\n return tr ? tr.cells.length : 0;\r\n }\r\n\r\n /**\r\n * Return the number of working rows starting from reference row if\r\n * defined\r\n * @param {Boolean} includeHeaders Include the headers row(s)\r\n * @return {Number} Number of working rows\r\n */\r\n getRowsNb(includeHeaders) {\r\n let nbRows = this.getWorkingRows().length;\r\n if (this.dom().tHead) {\r\n return includeHeaders ?\r\n nbRows + this.dom().querySelectorAll('thead > tr').length :\r\n nbRows;\r\n }\r\n return includeHeaders ? nbRows : nbRows - this.refRow;\r\n }\r\n\r\n /**\r\n * Return the collection of the working rows, that is, the rows belonging\r\n * to the tbody section(s)\r\n * @returns {Array}\r\n */\r\n getWorkingRows() {\r\n return doc.querySelectorAll(`table#${this.id} > tbody > tr`);\r\n }\r\n\r\n /**\r\n * Return the text content of a given cell\r\n * @param {DOMElement} Cell's DOM element\r\n * @return {String}\r\n */\r\n getCellValue(cell) {\r\n let idx = cell.cellIndex;\r\n let cellParser = this.cellParser;\r\n // Invoke cellParser for this column if any\r\n if (cellParser.cols.indexOf(idx) !== -1) {\r\n return cellParser.parse(this, cell, idx);\r\n } else {\r\n return getText(cell);\r\n }\r\n }\r\n\r\n /**\r\n * Return the typed data of a given cell based on the column type definition\r\n * @param {DOMElement} cell Cell's DOM element\r\n * @return {String|Number|Date}\r\n */\r\n getCellData(cell) {\r\n let colIndex = cell.cellIndex;\r\n let value = this.getCellValue(cell);\r\n\r\n if (this.hasType(colIndex, [FORMATTED_NUMBER])) {\r\n return parseNb(value, this.getDecimal(colIndex));\r\n }\r\n else if (this.hasType(colIndex, [NUMBER])) {\r\n return Number(value);\r\n }\r\n else if (this.hasType(colIndex, [DATE])){\r\n let dateType = this.Mod.dateType;\r\n return dateType.parse(value, dateType.getLocale(colIndex));\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Return the table data based on its columns data type definitions\r\n * with following structure:\r\n * [\r\n * [rowIndex, [data0, data1...]],\r\n * [rowIndex, [data0, data1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @return {Array}\r\n */\r\n getData(includeHeaders = false, excludeHiddenCols = false) {\r\n return this.getTableData(includeHeaders, excludeHiddenCols, true);\r\n }\r\n\r\n /**\r\n * Return the table values with following structure:\r\n * [\r\n * [rowIndex, [value0, value1...]],\r\n * [rowIndex, [value0, value1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @return {Array}\r\n */\r\n getValues(includeHeaders = false, excludeHiddenCols = false) {\r\n return this.getTableData(includeHeaders, excludeHiddenCols, false);\r\n }\r\n\r\n /**\r\n * Return the table data with following structure:\r\n * [\r\n * [rowIndex, [value0, value1...]],\r\n * [rowIndex, [value0, value1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @param {Boolean} [typed=false] Return typed value\r\n * @return {Array}\r\n * @private\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getTableData(\r\n includeHeaders = false,\r\n excludeHiddenCols = false,\r\n typed = false\r\n ) {\r\n let tblData = [];\r\n let getContent = typed ? this.getCellData.bind(this) :\r\n this.getCellValue.bind(this);\r\n\r\n if (includeHeaders) {\r\n let headers = this.getHeadersText(excludeHiddenCols);\r\n tblData.push([this.getHeadersRowIndex(), headers]);\r\n }\r\n\r\n let eachRow = this.eachRow();\r\n eachRow((row, k) => {\r\n let rowData = [k, []];\r\n let cells = row.cells;\r\n for (let j = 0, len = cells.length; j < len; j++) {\r\n if (excludeHiddenCols && this.hasExtension('colsVisibility')) {\r\n if (this.extension('colsVisibility').isColHidden(j)) {\r\n continue;\r\n }\r\n }\r\n let cellContent = getContent(cells[j]);\r\n rowData[1].push(cellContent);\r\n }\r\n tblData.push(rowData);\r\n });\r\n return tblData;\r\n }\r\n\r\n /**\r\n * Return the filtered table data based on its columns data type definitions\r\n * with following structure:\r\n * [\r\n * [rowIndex, [data0, data1...]],\r\n * [rowIndex, [data0, data1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @return {Array}\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredData(includeHeaders = false, excludeHiddenCols = false) {\r\n return this.filteredData(includeHeaders, excludeHiddenCols, true);\r\n }\r\n\r\n /**\r\n * Return the filtered table values with following structure:\r\n * [\r\n * [rowIndex, [value0, value1...]],\r\n * [rowIndex, [value0, value1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @return {Array}\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredValues(includeHeaders = false, excludeHiddenCols = false) {\r\n return this.filteredData(includeHeaders, excludeHiddenCols, false);\r\n }\r\n\r\n /**\r\n * Return the filtered data with following structure:\r\n * [\r\n * [rowIndex, [value0, value1...]],\r\n * [rowIndex, [value0, value1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @param {Boolean} [typed=false] Return typed value\r\n * @return {Array}\r\n * @private\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n filteredData(\r\n includeHeaders = false,\r\n excludeHiddenCols = false,\r\n typed = false\r\n ) {\r\n if (this.validRowsIndex.length === 0) {\r\n return [];\r\n }\r\n let rows = this.dom().rows,\r\n filteredData = [];\r\n let getContent = typed ? this.getCellData.bind(this) :\r\n this.getCellValue.bind(this);\r\n\r\n if (includeHeaders) {\r\n let headers = this.getHeadersText(excludeHiddenCols);\r\n filteredData.push([this.getHeadersRowIndex(), headers]);\r\n }\r\n\r\n let validRows = this.getValidRows(true);\r\n for (let i = 0; i < validRows.length; i++) {\r\n let rData = [this.validRowsIndex[i], []],\r\n cells = rows[this.validRowsIndex[i]].cells;\r\n for (let k = 0; k < cells.length; k++) {\r\n if (excludeHiddenCols && this.hasExtension('colsVisibility')) {\r\n if (this.extension('colsVisibility').isColHidden(k)) {\r\n continue;\r\n }\r\n }\r\n let cellValue = getContent(cells[k]);\r\n rData[1].push(cellValue);\r\n }\r\n filteredData.push(rData);\r\n }\r\n return filteredData;\r\n }\r\n\r\n /**\r\n * Return the filtered data for a given column index\r\n * @param {any} colIndex Colmun's index\r\n * @param {boolean} [includeHeaders=false] Optional Include headers row\r\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\r\n * @return {Array} Flat list of typed values [data0, data1, data2...]\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredColumnData(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getFilteredDataCol(\r\n colIndex, includeHeaders, true, exclude, false);\r\n }\r\n\r\n /**\r\n * Return the filtered and visible data for a given column index\r\n * @param {any} colIndex Colmun's index\r\n * @param {boolean} [includeHeaders=false] Optional Include headers row\r\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\r\n * @return {Array} Flat list of typed values [data0, data1, data2...]\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getVisibleColumnData(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getFilteredDataCol(\r\n colIndex, includeHeaders, true, exclude, true);\r\n }\r\n\r\n /**\r\n * Return the filtered values for a given column index\r\n * @param {any} colIndex Colmun's index\r\n * @param {boolean} [includeHeaders=false] Optional Include headers row\r\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\r\n * @return {Array} Flat list of values ['value0', 'value1', 'value2'...]\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredColumnValues(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getFilteredDataCol(\r\n colIndex, includeHeaders, false, exclude, false);\r\n }\r\n\r\n /**\r\n * Return the filtered and visible values for a given column index\r\n * @param {any} colIndex Colmun's index\r\n * @param {boolean} [includeHeaders=false] Optional Include headers row\r\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\r\n * @return {Array} Flat list of values ['value0', 'value1', 'value2'...]\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getVisibleColumnValues(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getFilteredDataCol(\r\n colIndex, includeHeaders, false, exclude, true);\r\n }\r\n\r\n /**\r\n * Return the filtered data for a given column index\r\n * @param {Number} colIndex Colmun's index\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [typed=false] Return typed value\r\n * @param {Array} [exclude=[]] List of row indexes to be excluded\r\n * @param {Boolean} [visible=true] Return only filtered and visible data\r\n * (relevant for paging)\r\n * @return {Array} Flat list of values ['val0','val1','val2'...]\r\n * @private\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredDataCol(\r\n colIndex,\r\n includeHeaders = false,\r\n typed = false,\r\n exclude = [],\r\n visible = true\r\n ) {\r\n if (isUndef(colIndex)) {\r\n return [];\r\n }\r\n\r\n let rows = this.dom().rows;\r\n let getContent = typed ? this.getCellData.bind(this) :\r\n this.getCellValue.bind(this);\r\n\r\n // ensure valid rows index do not contain excluded rows and row is\r\n // displayed\r\n let validRows = this.getValidRows(true).filter((rowIdx) => {\r\n return exclude.indexOf(rowIdx) === -1 &&\r\n (visible ?\r\n this.getRowDisplay(rows[rowIdx]) !== 'none' :\r\n true);\r\n });\r\n\r\n // convert column value to expected type if necessary\r\n let validColValues = validRows.map((rowIdx) => {\r\n return getContent(rows[rowIdx].cells[colIndex]);\r\n });\r\n\r\n if (includeHeaders) {\r\n validColValues.unshift(this.getHeadersText()[colIndex]);\r\n }\r\n\r\n return validColValues;\r\n }\r\n\r\n /**\r\n * Get the display value of a row\r\n * @param {HTMLTableRowElement} row DOM element of the row\r\n * @return {String} Usually 'none' or ''\r\n */\r\n getRowDisplay(row) {\r\n return row.style.display;\r\n }\r\n\r\n /**\r\n * Validate/invalidate row by setting the 'validRow' attribute on the row\r\n * @param {Number} rowIndex Index of the row\r\n * @param {Boolean} isValid\r\n */\r\n validateRow(rowIndex, isValid) {\r\n let row = this.dom().rows[rowIndex];\r\n if (!row || !isBoolean(isValid)) {\r\n return;\r\n }\r\n\r\n // always visible rows are valid\r\n if (this.excludeRows.indexOf(rowIndex) !== -1) {\r\n isValid = true;\r\n }\r\n\r\n let displayFlag = isValid ? '' : NONE,\r\n validFlag = isValid ? 'true' : 'false';\r\n row.style.display = displayFlag;\r\n\r\n if (this.paging) {\r\n row.setAttribute('validRow', validFlag);\r\n }\r\n\r\n if (isValid) {\r\n if (this.validRowsIndex.indexOf(rowIndex) === -1) {\r\n this.validRowsIndex.push(rowIndex);\r\n }\r\n\r\n this.onRowValidated(this, rowIndex);\r\n this.emitter.emit('row-validated', this, rowIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Validate all filterable rows\r\n */\r\n validateAllRows() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n this.validRowsIndex = [];\r\n for (let k = this.refRow; k < this.nbFilterableRows; k++) {\r\n this.validateRow(k, true);\r\n }\r\n }\r\n\r\n /**\r\n * Set search value to a given filter\r\n * @param {Number} index Column's index\r\n * @param {String or Array} query searcharg Search term\r\n */\r\n setFilterValue(index, query = '') {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n let slc = this.getFilterElement(index),\r\n fltColType = this.getFilterType(index);\r\n\r\n if (!slc) {\r\n return;\r\n }\r\n\r\n //multiple selects\r\n if (fltColType === MULTIPLE) {\r\n let values = isArray(query) ? query :\r\n query.split(' ' + this.orOperator + ' ');\r\n\r\n if (this.loadFltOnDemand && !this.initialized) {\r\n this.emitter.emit('build-select-filter', this, index,\r\n this.linkedFilters, this.isExternalFlt());\r\n }\r\n\r\n this.emitter.emit('select-options', this, index, values);\r\n }\r\n //checklist\r\n else if (fltColType === CHECKLIST) {\r\n let values = [];\r\n if (this.loadFltOnDemand && !this.initialized) {\r\n this.emitter.emit('build-checklist-filter', this, index,\r\n this.linkedFilters);\r\n }\r\n if (isArray(query)) {\r\n values = query;\r\n } else {\r\n query = matchCase(query, this.caseSensitive);\r\n values = query.split(' ' + this.orOperator + ' ');\r\n }\r\n\r\n this.emitter.emit('select-checklist-options', this, index, values);\r\n }\r\n else {\r\n if (this.loadFltOnDemand && !this.initialized) {\r\n this.emitter.emit('build-select-filter', this, index,\r\n this.linkedFilters, this.isExternalFlt());\r\n }\r\n slc.value = query;\r\n }\r\n }\r\n\r\n /**\r\n * Make passed or default working table element width fixed\r\n * @param {TableElement} tbl optional table DOM element\r\n */\r\n setFixedLayout(tbl = this.dom()) {\r\n let colWidths = this.colWidths;\r\n let tableWidth = tbl.clientWidth;\r\n\r\n if (colWidths.length > 0) {\r\n let defaultWidth = this.defaultColWidth;\r\n tableWidth = colWidths\r\n .reduce((x, y) =>\r\n parseInt((x || defaultWidth), 10) +\r\n parseInt((y || defaultWidth), 10)\r\n );\r\n }\r\n\r\n tbl.style.width = `${tableWidth}px`;\r\n tbl.style.tableLayout = 'fixed';\r\n }\r\n\r\n /**\r\n * Set passed or default working table columns' widths with configuration\r\n * values\r\n * @param {TableElement} tbl optional table DOM element\r\n */\r\n setColWidths(tbl = this.dom()) {\r\n let colWidths = this.colWidths;\r\n if (colWidths.length === 0) {\r\n return;\r\n }\r\n\r\n let colTags = tag(tbl, 'col');\r\n let tblHasColTag = colTags.length > 0;\r\n let frag = !tblHasColTag ? doc.createDocumentFragment() : null;\r\n\r\n this.eachCol((k) => {\r\n let col;\r\n if (tblHasColTag) {\r\n col = colTags[k];\r\n } else {\r\n col = createElm('col');\r\n frag.appendChild(col);\r\n }\r\n col.style.width = colWidths[k];\r\n });\r\n\r\n if (!tblHasColTag) {\r\n tbl.insertBefore(frag, tbl.firstChild);\r\n }\r\n }\r\n\r\n /**\r\n * Exclude rows from actions\r\n */\r\n setExcludeRows() {\r\n if (!this.hasExcludedRows) {\r\n return;\r\n }\r\n this.excludeRows.forEach((rowIdx) => this.validateRow(rowIdx, true));\r\n }\r\n\r\n /**\r\n * Clear all the filters' values\r\n */\r\n clearFilters() {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('before-clearing-filters', this);\r\n this.onBeforeReset(this, this.getFiltersValue());\r\n\r\n for (let i = 0, len = this.fltIds.length; i < len; i++) {\r\n this.setFilterValue(i, '');\r\n }\r\n\r\n this.filter();\r\n\r\n this.onAfterReset(this);\r\n this.emitter.emit('after-clearing-filters', this);\r\n }\r\n\r\n /**\r\n * Return the ID of the current active filter\r\n * @return {String}\r\n */\r\n getActiveFilterId() {\r\n return this.activeFilterId;\r\n }\r\n\r\n /**\r\n * Set the ID of the current active filter\r\n * @param {String} filterId Element ID\r\n */\r\n setActiveFilterId(filterId) {\r\n this.activeFilterId = filterId;\r\n }\r\n\r\n /**\r\n * Return the column index for a given filter ID\r\n * @param {string} [filterId=''] Filter ID\r\n * @return {Number} Column index\r\n */\r\n getColumnIndexFromFilterId(filterId = '') {\r\n let idx = filterId.split('_')[0];\r\n idx = idx.split(this.prfxFlt)[1];\r\n return parseInt(idx, 10);\r\n }\r\n\r\n /**\r\n * Build filter element ID for a given column index\r\n * @param {any} colIndex\r\n * @return {String} Filter element ID string\r\n * @private\r\n */\r\n buildFilterId(colIndex) {\r\n return `${this.prfxFlt}${colIndex}_${this.id}`;\r\n }\r\n\r\n /**\r\n * Check if has external filters\r\n * @returns {Boolean}\r\n * @private\r\n */\r\n isExternalFlt() {\r\n return this.externalFltIds.length > 0;\r\n }\r\n\r\n /**\r\n * Returns styles path\r\n * @returns {String}\r\n * @private\r\n */\r\n getStylePath() {\r\n return defaultsStr(this.config.style_path, this.basePath + 'style/');\r\n }\r\n\r\n /**\r\n * Returns main stylesheet path\r\n * @returns {String}\r\n * @private\r\n */\r\n getStylesheetPath() {\r\n return defaultsStr(this.config.stylesheet,\r\n this.getStylePath() + 'tablefilter.css');\r\n }\r\n\r\n /**\r\n * Returns themes path\r\n * @returns {String}\r\n * @private\r\n */\r\n getThemesPath() {\r\n return defaultsStr(this.config.themes_path,\r\n this.getStylePath() + 'themes/');\r\n }\r\n\r\n /**\r\n * Make specified column's filter active\r\n * @param colIndex Index of a column\r\n */\r\n activateFilter(colIndex) {\r\n if (isUndef(colIndex)) {\r\n return;\r\n }\r\n this.setActiveFilterId(this.getFilterId(colIndex));\r\n }\r\n\r\n /**\r\n * Determine if passed filter column implements exact query match\r\n * @param {Number} colIndex Column index\r\n * @return {Boolean}\r\n */\r\n isExactMatch(colIndex) {\r\n let fltType = this.getFilterType(colIndex);\r\n return this.exactMatchByCol[colIndex] || this.exactMatch ||\r\n fltType !== INPUT;\r\n }\r\n\r\n /**\r\n * Check if passed row is valid\r\n * @param {Number} rowIndex Row index\r\n * @return {Boolean}\r\n */\r\n isRowValid(rowIndex) {\r\n return this.getValidRows().indexOf(rowIndex) !== -1;\r\n }\r\n\r\n /**\r\n * Check if passed row is visible\r\n * @param {Number} rowIndex Row index\r\n * @return {Boolean}\r\n */\r\n isRowDisplayed(rowIndex) {\r\n let row = this.dom().rows[rowIndex];\r\n return this.getRowDisplay(row) === '';\r\n }\r\n\r\n /**\r\n * Check if specified column filter ignores diacritics.\r\n * Note this is only applicable to input filter types.\r\n * @param {Number} colIndex Column index\r\n * @return {Boolean}\r\n */\r\n ignoresDiacritics(colIndex) {\r\n let ignoreDiac = this.ignoreDiacritics;\r\n if (isArray(ignoreDiac)) {\r\n return ignoreDiac[colIndex];\r\n }\r\n return Boolean(ignoreDiac);\r\n }\r\n\r\n /**\r\n * Return clear all text for specified filter column\r\n * @param {Number} colIndex Column index\r\n * @return {String}\r\n */\r\n getClearFilterText(colIndex) {\r\n let clearText = this.clearFilterText;\r\n if (isArray(clearText)) {\r\n return clearText[colIndex];\r\n }\r\n return clearText;\r\n }\r\n\r\n /**\r\n * Column iterator invoking continue and break condition callbacks if any\r\n * then calling supplied callback for each item\r\n * @param {Function} [fn=EMPTY_FN] callback\r\n * @param {Function} [continueFn=EMPTY_FN] continue condition callback\r\n * @param {Function} [breakFn=EMPTY_FN] break condition callback\r\n */\r\n eachCol(fn = EMPTY_FN, continueFn = EMPTY_FN, breakFn = EMPTY_FN) {\r\n let len = this.getCellsNb(this.refRow);\r\n for (let i = 0; i < len; i++) {\r\n if (continueFn(i) === true) {\r\n continue;\r\n }\r\n if (breakFn(i) === true) {\r\n break;\r\n }\r\n fn(i);\r\n }\r\n }\r\n\r\n /**\r\n * Rows iterator starting from supplied row index or defaulting to reference\r\n * row index. Closure function accepts a callback function and optional\r\n * continue and break callbacks.\r\n * @param {Number} startIdx Row index from which filtering starts\r\n */\r\n eachRow(startIdx = this.refRow) {\r\n return (fn = EMPTY_FN, continueFn = EMPTY_FN, breakFn = EMPTY_FN) => {\r\n let rows = this.dom().rows;\r\n let len = this.getRowsNb(true);\r\n for (let i = startIdx; i < len; i++) {\r\n if (continueFn(rows[i], i) === true) {\r\n continue;\r\n }\r\n if (breakFn(rows[i], i) === true) {\r\n break;\r\n }\r\n fn(rows[i], i);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Check if passed script or stylesheet is already imported\r\n * @param {String} filePath Ressource path\r\n * @param {String} type Possible values: 'script' or 'link'\r\n * @return {Boolean}\r\n */\r\n isImported(filePath, type = 'script') {\r\n let imported = false,\r\n attr = type === 'script' ? 'src' : 'href',\r\n files = tag(doc, type);\r\n for (let i = 0, len = files.length; i < len; i++) {\r\n if (isUndef(files[i][attr])) {\r\n continue;\r\n }\r\n if (files[i][attr].match(filePath)) {\r\n imported = true;\r\n break;\r\n }\r\n }\r\n return imported;\r\n }\r\n\r\n /**\r\n * Import script or stylesheet\r\n * @param {String} fileId Ressource ID\r\n * @param {String} filePath Ressource path\r\n * @param {Function} callback Callback\r\n * @param {String} type Possible values: 'script' or 'link'\r\n */\r\n import(fileId, filePath, callback, type = 'script') {\r\n if (this.isImported(filePath, type)) {\r\n return;\r\n }\r\n let o = this,\r\n isLoaded = false,\r\n file,\r\n head = tag(doc, 'head')[0];\r\n\r\n if (type.toLowerCase() === 'link') {\r\n file = createElm('link',\r\n ['id', fileId], ['type', 'text/css'],\r\n ['rel', 'stylesheet'], ['href', filePath]\r\n );\r\n } else {\r\n file = createElm('script',\r\n ['id', fileId],\r\n ['type', 'text/javascript'], ['src', filePath]\r\n );\r\n }\r\n\r\n //Browser <> IE onload event works only for scripts, not for stylesheets\r\n file.onload = file.onreadystatechange = () => {\r\n if (!isLoaded &&\r\n (!this.readyState || this.readyState === 'loaded' ||\r\n this.readyState === 'complete')) {\r\n isLoaded = true;\r\n if (typeof callback === 'function') {\r\n callback.call(null, o);\r\n }\r\n }\r\n };\r\n file.onerror = () => {\r\n throw new Error(`TableFilter could not load: ${filePath}`);\r\n };\r\n head.appendChild(file);\r\n }\r\n\r\n /**\r\n * Check if table has filters grid\r\n * @return {Boolean}\r\n */\r\n isInitialized() {\r\n return this.initialized;\r\n }\r\n\r\n /**\r\n * Get list of filter IDs\r\n * @return {Array} List of filters ids\r\n */\r\n getFiltersId() {\r\n return this.fltIds || [];\r\n }\r\n\r\n /**\r\n * Get filtered (valid) rows indexes\r\n * @param {Boolean} reCalc Force calculation of filtered rows list\r\n * @return {Array} List of row indexes\r\n */\r\n getValidRows(reCalc) {\r\n if (!reCalc) {\r\n return this.validRowsIndex;\r\n }\r\n\r\n this.validRowsIndex = [];\r\n\r\n let eachRow = this.eachRow();\r\n eachRow((row) => {\r\n if (!this.paging) {\r\n if (this.getRowDisplay(row) !== NONE) {\r\n this.validRowsIndex.push(row.rowIndex);\r\n }\r\n } else {\r\n if (row.getAttribute('validRow') === 'true' ||\r\n row.getAttribute('validRow') === null) {\r\n this.validRowsIndex.push(row.rowIndex);\r\n }\r\n }\r\n });\r\n return this.validRowsIndex;\r\n }\r\n\r\n /**\r\n * Get the index of the row containing the filters\r\n * @return {Number}\r\n */\r\n getFiltersRowIndex() {\r\n return this.filtersRowIndex;\r\n }\r\n\r\n /**\r\n * Get the index of the headers row\r\n * @return {Number}\r\n */\r\n getHeadersRowIndex() {\r\n return this.headersRow;\r\n }\r\n\r\n /**\r\n * Get the row index from where the filtering process start (1st filterable\r\n * row)\r\n * @return {Number}\r\n */\r\n getStartRowIndex() {\r\n return this.refRow;\r\n }\r\n\r\n /**\r\n * Get the index of the last row\r\n * @return {Number}\r\n */\r\n getLastRowIndex() {\r\n let nbRows = this.getRowsNb(true);\r\n return (nbRows - 1);\r\n }\r\n\r\n /**\r\n * Determine whether the specified column has one of the passed types\r\n * @param {Number} colIndex Column index\r\n * @param {Array} [types=[]] List of column types\r\n * @return {Boolean}\r\n */\r\n hasType(colIndex, types = []) {\r\n if (this.colTypes.length === 0) {\r\n return false;\r\n }\r\n let colType = this.colTypes[colIndex];\r\n if (isObj(colType)) {\r\n colType = colType.type;\r\n }\r\n return types.indexOf(colType) !== -1;\r\n }\r\n\r\n /**\r\n * Get the header DOM element for a given column index\r\n * @param {Number} colIndex Column index\r\n * @return {Element}\r\n */\r\n getHeaderElement(colIndex) {\r\n let table = this.gridLayout ? this.Mod.gridLayout.headTbl : this.dom();\r\n let tHead = tag(table, 'thead');\r\n let rowIdx = this.getHeadersRowIndex();\r\n let header;\r\n if (tHead.length === 0) {\r\n header = table.rows[rowIdx].cells[colIndex];\r\n }\r\n if (tHead.length === 1) {\r\n header = tHead[0].rows[rowIdx].cells[colIndex];\r\n }\r\n return header;\r\n }\r\n\r\n /**\r\n * Return the list of headers' text\r\n * @param {Boolean} excludeHiddenCols Optional: exclude hidden columns\r\n * @return {Array} list of headers' text\r\n */\r\n getHeadersText(excludeHiddenCols = false) {\r\n let headers = [];\r\n this.eachCol(\r\n (j) => {\r\n let header = this.getHeaderElement(j);\r\n let headerText = getFirstTextNode(header);\r\n headers.push(headerText);\r\n },\r\n // continue condition function\r\n (j) => {\r\n if (excludeHiddenCols && this.hasExtension('colsVisibility')) {\r\n return this.extension('colsVisibility').isColHidden(j);\r\n }\r\n return false;\r\n }\r\n );\r\n return headers;\r\n }\r\n\r\n /**\r\n * Return the filter type for a specified column\r\n * @param {Number} colIndex Column's index\r\n * @return {String}\r\n */\r\n getFilterType(colIndex) {\r\n return this.filterTypes[colIndex];\r\n }\r\n\r\n /**\r\n * Get the total number of filterable rows\r\n * @return {Number}\r\n */\r\n getFilterableRowsNb() {\r\n return this.getRowsNb(false);\r\n }\r\n\r\n /**\r\n * Return the total number of valid rows\r\n * @param {Boolean} [reCalc=false] Forces calculation of filtered rows\r\n * @return {Number}\r\n */\r\n getValidRowsNb(reCalc = false) {\r\n return this.getValidRows(reCalc).length;\r\n }\r\n\r\n /**\r\n * Return the working DOM element\r\n * @return {HTMLTableElement}\r\n */\r\n dom() {\r\n return this.tbl;\r\n }\r\n\r\n /**\r\n * Return the decimal separator for supplied column as per column type\r\n * configuration or global setting\r\n * @param {Number} colIndex Column index\r\n * @returns {String} '.' or ','\r\n */\r\n getDecimal(colIndex) {\r\n let decimal = this.decimalSeparator;\r\n if (this.hasType(colIndex, [FORMATTED_NUMBER])) {\r\n let colType = this.colTypes[colIndex];\r\n if (colType.hasOwnProperty('decimal')) {\r\n decimal = colType.decimal;\r\n }\r\n }\r\n return decimal;\r\n }\r\n\r\n /**\r\n * Get the configuration object (literal object)\r\n * @return {Object}\r\n */\r\n config() {\r\n return this.cfg;\r\n }\r\n}\r\n","import {defaultsStr} from './settings';\r\nimport {toCamelCase} from './string';\r\n\r\nexport class TfBase {\r\n constructor(tf, cls = {}) {\r\n console.log(cls.name);\r\n /**\r\n * TableFilter instance\r\n * @type {TableFilter}\r\n */\r\n this.tf = tf;\r\n\r\n /**\r\n * Feature name, retrieved from alternate class name if found or from\r\n * camelised class name\r\n * @type {String}\r\n */\r\n this.feature = defaultsStr(cls.altName, toCamelCase(cls.name));\r\n console.log(this.feature, toCamelCase(cls.name));\r\n\r\n this.tf._mod_.push(this.feature);\r\n }\r\n}","\r\n/**\r\n * Types utilities\r\n */\r\n\r\nconst UNDEFINED = void 0;\r\n\r\n/**\r\n * Return an empty function\r\n * @return {Function}\r\n */\r\nexport const EMPTY_FN = function() {};\r\n\r\n/**\r\n * Check passed argument is an object\r\n * @param {Object} obj\r\n * @return {Boolean}\r\n */\r\nexport const isObj =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Object]';\r\n\r\n/**\r\n * Check passed argument is a function\r\n * @param {Function} obj\r\n * @return {Boolean}\r\n */\r\nexport const isFn =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Function]';\r\n\r\n/**\r\n * Check passed argument is an array\r\n * @param {Array} obj\r\n * @return {Boolean}\r\n */\r\nexport const isArray =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Array]';\r\n\r\n/**\r\n * Check passed argument is a string\r\n * @param {String} obj obj\r\n * @returns {Boolean}\r\n */\r\nexport const isString =\r\n (obj) => Object.prototype.toString.call(obj) === '[object String]';\r\n\r\n/**\r\n * Check passed argument is a number\r\n * @param {Number} obj\r\n * @returns {Boolean}\r\n */\r\nexport const isNumber =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Number]';\r\n\r\n/**\r\n * Check passed argument is a boolean\r\n * @param {Boolean} obj\r\n * @returns {Boolean}\r\n */\r\nexport const isBoolean =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Boolean]';\r\n\r\n/**\r\n * Check passed argument is undefined\r\n * @param {Any} obj\r\n * @return {Boolean}\r\n */\r\nexport const isUndef = (obj) => obj === UNDEFINED;\r\n\r\n/**\r\n * Check passed argument is null\r\n * @param {Any} obj\r\n * @return {Boolean}\r\n */\r\nexport const isNull = (obj) => obj === null;\r\n\r\n/**\r\n * Check passed argument is empty (undefined, null or empty string)\r\n * @param {Any} obj\r\n * @return {Boolean}\r\n */\r\nexport const isEmpty = (obj) => isUndef(obj) || isNull(obj) || obj.length === 0;\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/tablefilter/tf-0-1891d14d4ad1233555f2.js b/dist/tablefilter/tf-0-1891d14d4ad1233555f2.js new file mode 100644 index 00000000..1adc85b3 --- /dev/null +++ b/dist/tablefilter/tf-0-1891d14d4ad1233555f2.js @@ -0,0 +1,3504 @@ +(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],{ + +/***/ "./node_modules/format-number/index.js": +/*!*********************************************!*\ + !*** ./node_modules/format-number/index.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + + +module.exports = formatter; +module.exports.default = formatter; + +function formatter(options) { + options = options || {}; + + + // ********************************************************************************************* + // Set defaults for negatives + // options.negative, options.negativeOut, options.separator retained for backward compatibility + // ********************************************************************************************* + + // type of negative; default left + options.negativeType = options.negativeType || (options.negative === 'R' ? 'right' : 'left') + + // negative symbols '-' or '()' + if (typeof options.negativeLeftSymbol !== 'string') { + switch (options.negativeType) { + case 'left': + options.negativeLeftSymbol = '-'; + break; + case 'brackets': + options.negativeLeftSymbol = '('; + break; + default: + options.negativeLeftSymbol = ''; + } + } + if (typeof options.negativeRightSymbol !== 'string') { + switch (options.negativeType) { + case 'right': + options.negativeRightSymbol = '-'; + break; + case 'brackets': + options.negativeRightSymbol = ')'; + break; + default: + options.negativeRightSymbol = ''; + } + } + + // whether negative symbol should be inside/outside prefix and suffix + + if (typeof options.negativeLeftOut !== "boolean") { + options.negativeLeftOut = (options.negativeOut === false ? false : true); + } + if (typeof options.negativeRightOut !== "boolean") { + options.negativeRightOut = (options.negativeOut === false ? false : true); + } + + //prefix and suffix + options.prefix = options.prefix || ''; + options.suffix = options.suffix || ''; + + //separators + if (typeof options.integerSeparator !== 'string') { + options.integerSeparator = (typeof options.separator === 'string' ? options.separator : ','); + } + options.decimalsSeparator = typeof options.decimalsSeparator === 'string' ? options.decimalsSeparator : ''; + options.decimal = options.decimal || '.'; + + //padders + options.padLeft = options.padLeft || -1 //default no padding + options.padRight = options.padRight || -1 //default no padding + + function format(number, overrideOptions) { + overrideOptions = overrideOptions || {}; + + if (number || number === 0) { + number = '' + number;//convert number to string if it isn't already + } else { + return ''; + } + + //identify a negative number and make it absolute + var output = []; + var negative = number.charAt(0) === '-'; + number = number.replace(/^\-/g, ''); + + //Prepare output with left hand negative and/or prefix + if (!options.negativeLeftOut && !overrideOptions.noUnits) { + output.push(options.prefix); + } + if (negative) { + output.push(options.negativeLeftSymbol); + } + if (options.negativeLeftOut && !overrideOptions.noUnits) { + output.push(options.prefix); + } + + //Format core number + number = number.split('.'); + if (options.round != null) round(number, options.round); + if (options.truncate != null) number[1] = truncate(number[1], options.truncate); + if (options.padLeft > 0) number[0] = padLeft(number[0], options.padLeft); + if (options.padRight > 0) number[1] = padRight(number[1], options.padRight); + if (!overrideOptions.noSeparator && number[1]) number[1] = addDecimalSeparators(number[1], options.decimalsSeparator); + if (!overrideOptions.noSeparator && number[0]) number[0] = addIntegerSeparators(number[0], options.integerSeparator); + output.push(number[0]); + if (number[1]) { + output.push(options.decimal); + output.push(number[1]); + } + + //Prepare output with right hand negative and/or prefix + if (options.negativeRightOut && !overrideOptions.noUnits) { + output.push(options.suffix); + } + if (negative) { + output.push(options.negativeRightSymbol); + } + if (!options.negativeRightOut && !overrideOptions.noUnits) { + output.push(options.suffix); + } + + //join output and return + return output.join(''); + } + + format.negative = options.negative; + format.negativeOut = options.negativeOut; + format.negativeType = options.negativeType; + format.negativeLeftOut = options.negativeLeftOut; + format.negativeLeftSymbol = options.negativeLeftSymbol; + format.negativeRightOut = options.negativeRightOut; + format.negativeRightSymbol = options.negativeRightSymbol; + format.prefix = options.prefix; + format.suffix = options.suffix; + format.separate = options.separate; + format.integerSeparator = options.integerSeparator; + format.decimalsSeparator = options.decimalsSeparator; + format.decimal = options.decimal; + format.padLeft = options.padLeft; + format.padRight = options.padRight; + format.truncate = options.truncate; + format.round = options.round; + + function unformat(number, allowedSeparators) { + allowedSeparators = allowedSeparators || []; + if (options.allowedSeparators) { + options.allowedSeparators.forEach(function (s) { allowedSeparators.push (s); }); + } + allowedSeparators.push(options.integerSeparator); + allowedSeparators.push(options.decimalsSeparator); + number = number.replace(options.prefix, ''); + number = number.replace(options.suffix, ''); + var newNumber = number; + do { + number = newNumber; + for (var i = 0; i < allowedSeparators.length; i++) { + newNumber = newNumber.replace(allowedSeparators[i], ''); + } + } while (newNumber != number); + return number; + } + format.unformat = unformat; + + function validate(number, allowedSeparators) { + number = unformat(number, allowedSeparators); + number = number.split(options.decimal); + if (number.length > 2) { + return false; + } else if (options.truncate != null && number[1] && number[1].length > options.truncate) { + return false; + } else if (options.round != null && number[1] && number[1].length > options.round) { + return false; + } else { + return /^-?\d+\.?\d*$/.test(number); + } + } + return format; +} + +//where x is already the integer part of the number +function addIntegerSeparators(x, separator) { + x += ''; + if (!separator) return x; + var rgx = /(\d+)(\d{3})/; + while (rgx.test(x)) { + x = x.replace(rgx, '$1' + separator + '$2'); + } + return x; +} + +//where x is already the decimal part of the number +function addDecimalSeparators(x, separator) { + x += ''; + if (!separator) return x; + var rgx = /(\d{3})(\d+)/; + while (rgx.test(x)) { + x = x.replace(rgx, '$1' + separator + '$2'); + } + return x; +} + +//where x is the integer part of the number +function padLeft(x, padding) { + x = x + ''; + var buf = []; + while (buf.length + x.length < padding) { + buf.push('0'); + } + return buf.join('') + x; +} + +//where x is the decimals part of the number +function padRight(x, padding) { + if (x) { + x += ''; + } else { + x = ''; + } + var buf = []; + while (buf.length + x.length < padding) { + buf.push('0'); + } + return x + buf.join(''); +} +function truncate(x, length) { + if (x) { + x += ''; + } + if (x && x.length > length) { + return x.substr(0, length); + } else { + return x; + } +} + +//where number is an array with 0th item as integer string and 1st item as decimal string (no negatives) +function round(number, places) { + if (number[1] && places >= 0 && number[1].length > places) { + //truncate to correct number of decimal places + var decim = number[1].slice(0, places); + //if next digit was >= 5 we need to round up + if (+(number[1].substr(places, 1)) >= 5) { + //But first count leading zeros as converting to a number will loose them + var leadingzeros = ""; + while (decim.charAt(0)==="0") { + leadingzeros = leadingzeros + "0"; + decim = decim.substr(1); + } + //Then we can change decim to a number and add 1 before replacing leading zeros + decim = (+decim + 1) + ''; + decim = leadingzeros + decim; + if (decim.length > places) { + //adding one has made it longer + number[0] = (+number[0]+ +decim.charAt(0)) + ''; //add value of firstchar to the integer part + decim = decim.substring(1); //ignore the 1st char at the beginning which is the carry to the integer part + } + } + number[1] = decim; + } + return number; +} + + +/***/ }), + +/***/ "./node_modules/raw-loader/index.js!./libs/sortabletable.js": +/*!*********************************************************!*\ + !*** ./node_modules/raw-loader!./libs/sortabletable.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = "/*----------------------------------------------------------------------------\\\r\n| Sortable Table 1.12 |\r\n|-----------------------------------------------------------------------------|\r\n| Created by Erik Arvidsson |\r\n| (http://webfx.eae.net/contact.html#erik) |\r\n| For WebFX (http://webfx.eae.net/) |\r\n|-----------------------------------------------------------------------------|\r\n| A DOM 1 based script that allows an ordinary HTML table to be sortable. |\r\n|-----------------------------------------------------------------------------|\r\n| Copyright (c) 1998 - 2006 Erik Arvidsson |\r\n|-----------------------------------------------------------------------------|\r\n| Licensed under the Apache License, Version 2.0 (the \"License\"); you may not |\r\n| use this file except in compliance with the License. You may obtain a copy |\r\n| of the License at http://www.apache.org/licenses/LICENSE-2.0 |\r\n| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\r\n| Unless required by applicable law or agreed to in writing, software |\r\n| distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT |\r\n| WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |\r\n| License for the specific language governing permissions and limitations |\r\n| under the License. |\r\n|-----------------------------------------------------------------------------|\r\n| 2003-01-10 | First version |\r\n| 2003-01-19 | Minor changes to the date parsing |\r\n| 2003-01-28 | JScript 5.0 fixes (no support for 'in' operator) |\r\n| 2003-02-01 | Sloppy typo like error fixed in getInnerText |\r\n| 2003-07-04 | Added workaround for IE cellIndex bug. |\r\n| 2003-11-09 | The bDescending argument to sort was not correctly working |\r\n| | Using onclick DOM0 event if no support for addEventListener |\r\n| | or attachEvent |\r\n| 2004-01-13 | Adding addSortType and removeSortType which makes it a lot |\r\n| | easier to add new, custom sort types. |\r\n| 2004-01-27 | Switch to use descending = false as the default sort order. |\r\n| | Change defaultDescending to suit your needs. |\r\n| 2004-03-14 | Improved sort type None look and feel a bit |\r\n| 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you |\r\n| | can use another tHead or no tHead, and you can chose some |\r\n| | other tBody. |\r\n| 2006-04-25 | Changed license to Apache Software License 2.0 |\r\n|-----------------------------------------------------------------------------|\r\n| Created 2003-01-10 | All changes are in the log above. | Updated 2006-04-25 |\r\n\\----------------------------------------------------------------------------*/\r\n\r\n\r\nfunction SortableTable(oTable, oSortTypes) {\r\n\r\n\tthis.sortTypes = oSortTypes || [];\r\n\r\n\tthis.sortColumn = null;\r\n\tthis.descending = null;\r\n\r\n\tvar oThis = this;\r\n\tthis._headerOnclick = function (e) {\r\n\t\toThis.headerOnclick(e);\r\n\t};\r\n\r\n\tif (oTable) {\r\n\t\tthis.setTable( oTable );\r\n\t\tthis.document = oTable.ownerDocument || oTable.document;\r\n\t}\r\n\telse {\r\n\t\tthis.document = document;\r\n\t}\r\n\r\n\r\n\t// only IE needs this\r\n\tvar win = this.document.defaultView || this.document.parentWindow;\r\n\tthis._onunload = function () {\r\n\t\toThis.destroy();\r\n\t};\r\n\tif (win && typeof win.attachEvent != \"undefined\") {\r\n\t\twin.attachEvent(\"onunload\", this._onunload);\r\n\t}\r\n}\r\n\r\nSortableTable.gecko = navigator.product == \"Gecko\";\r\nSortableTable.msie = /msie/i.test(navigator.userAgent);\r\n// Mozilla is faster when doing the DOM manipulations on\r\n// an orphaned element. MSIE is not\r\nSortableTable.removeBeforeSort = SortableTable.gecko;\r\n\r\nSortableTable.prototype.onsort = function () {};\r\n\r\n// default sort order. true -> descending, false -> ascending\r\nSortableTable.prototype.defaultDescending = false;\r\n\r\n// shared between all instances. This is intentional to allow external files\r\n// to modify the prototype\r\nSortableTable.prototype._sortTypeInfo = {};\r\n\r\nSortableTable.prototype.setTable = function (oTable) {\r\n\tif ( this.tHead )\r\n\t\tthis.uninitHeader();\r\n\tthis.element = oTable;\r\n\tthis.setTHead( oTable.tHead );\r\n\tthis.setTBody( oTable.tBodies[0] );\r\n};\r\n\r\nSortableTable.prototype.setTHead = function (oTHead) {\r\n\tif (this.tHead && this.tHead != oTHead )\r\n\t\tthis.uninitHeader();\r\n\tthis.tHead = oTHead;\r\n\tthis.initHeader( this.sortTypes );\r\n};\r\n\r\nSortableTable.prototype.setTBody = function (oTBody) {\r\n\tthis.tBody = oTBody;\r\n};\r\n\r\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\r\n\tif ( this.tHead )\r\n\t\tthis.uninitHeader();\r\n\tthis.sortTypes = oSortTypes || [];\r\n\tif ( this.tHead )\r\n\t\tthis.initHeader( this.sortTypes );\r\n};\r\n\r\n// adds arrow containers and events\r\n// also binds sort type to the header cells so that reordering columns does\r\n// not break the sort types\r\nSortableTable.prototype.initHeader = function (oSortTypes) {\r\n\tif (!this.tHead) return;\r\n\tvar cells = this.tHead.rows[0].cells;\r\n\tvar doc = this.tHead.ownerDocument || this.tHead.document;\r\n\tthis.sortTypes = oSortTypes || [];\r\n\tvar l = cells.length;\r\n\tvar img, c;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tc = cells[i];\r\n\t\tif (this.sortTypes[i] != null && this.sortTypes[i] != \"None\") {\r\n\t\t\timg = doc.createElement(\"IMG\");\r\n\t\t\timg.src = \"images/blank.png\";\r\n\t\t\tc.appendChild(img);\r\n\t\t\tif (this.sortTypes[i] != null)\r\n\t\t\t\tc._sortType = this.sortTypes[i];\r\n\t\t\tif (typeof c.addEventListener != \"undefined\")\r\n\t\t\t\tc.addEventListener(\"click\", this._headerOnclick, false);\r\n\t\t\telse if (typeof c.attachEvent != \"undefined\")\r\n\t\t\t\tc.attachEvent(\"onclick\", this._headerOnclick);\r\n\t\t\telse\r\n\t\t\t\tc.onclick = this._headerOnclick;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tc.setAttribute( \"_sortType\", oSortTypes[i] );\r\n\t\t\tc._sortType = \"None\";\r\n\t\t}\r\n\t}\r\n\tthis.updateHeaderArrows();\r\n};\r\n\r\n// remove arrows and events\r\nSortableTable.prototype.uninitHeader = function () {\r\n\tif (!this.tHead) return;\r\n\tvar cells = this.tHead.rows[0].cells;\r\n\tvar l = cells.length;\r\n\tvar c;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tc = cells[i];\r\n\t\tif (c._sortType != null && c._sortType != \"None\") {\r\n\t\t\tc.removeChild(c.lastChild);\r\n\t\t\tif (typeof c.removeEventListener != \"undefined\")\r\n\t\t\t\tc.removeEventListener(\"click\", this._headerOnclick, false);\r\n\t\t\telse if (typeof c.detachEvent != \"undefined\")\r\n\t\t\t\tc.detachEvent(\"onclick\", this._headerOnclick);\r\n\t\t\tc._sortType = null;\r\n\t\t\tc.removeAttribute( \"_sortType\" );\r\n\t\t}\r\n\t}\r\n};\r\n\r\nSortableTable.prototype.updateHeaderArrows = function () {\r\n\tif (!this.tHead) return;\r\n\tvar cells = this.tHead.rows[0].cells;\r\n\tvar l = cells.length;\r\n\tvar img;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tif (cells[i]._sortType != null && cells[i]._sortType != \"None\") {\r\n\t\t\timg = cells[i].lastChild;\r\n\t\t\tif (i == this.sortColumn)\r\n\t\t\t\timg.className = \"sort-arrow \" + (this.descending ? \"descending\" : \"ascending\");\r\n\t\t\telse\r\n\t\t\t\timg.className = \"sort-arrow\";\r\n\t\t}\r\n\t}\r\n};\r\n\r\nSortableTable.prototype.headerOnclick = function (e) {\r\n\t// find TD element\r\n\tvar el = e.target || e.srcElement;\r\n\twhile (el.tagName != \"TD\")\r\n\t\tel = el.parentNode;\r\n\r\n\tthis.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\r\n};\r\n\r\n// IE returns wrong cellIndex when columns are hidden\r\nSortableTable.getCellIndex = function (oTd) {\r\n\tvar cells = oTd.parentNode.childNodes\r\n\tvar l = cells.length;\r\n\tvar i;\r\n\tfor (i = 0; cells[i] != oTd && i < l; i++)\r\n\t\t;\r\n\treturn i;\r\n};\r\n\r\nSortableTable.prototype.getSortType = function (nColumn) {\r\n\treturn this.sortTypes[nColumn] || \"String\";\r\n};\r\n\r\n// only nColumn is required\r\n// if bDescending is left out the old value is taken into account\r\n// if sSortType is left out the sort type is found from the sortTypes array\r\n\r\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\r\n\tif (!this.tBody) return;\r\n\tif (sSortType == null)\r\n\t\tsSortType = this.getSortType(nColumn);\r\n\r\n\t// exit if None\r\n\tif (sSortType == \"None\")\r\n\t\treturn;\r\n\r\n\tif (bDescending == null) {\r\n\t\tif (this.sortColumn != nColumn)\r\n\t\t\tthis.descending = this.defaultDescending;\r\n\t\telse\r\n\t\t\tthis.descending = !this.descending;\r\n\t}\r\n\telse\r\n\t\tthis.descending = bDescending;\r\n\r\n\tthis.sortColumn = nColumn;\r\n\r\n\tif (typeof this.onbeforesort == \"function\")\r\n\t\tthis.onbeforesort();\r\n\r\n\tvar f = this.getSortFunction(sSortType, nColumn);\r\n\tvar a = this.getCache(sSortType, nColumn);\r\n\tvar tBody = this.tBody;\r\n\r\n\ta.sort(f);\r\n\r\n\tif (this.descending)\r\n\t\ta.reverse();\r\n\r\n\tif (SortableTable.removeBeforeSort) {\r\n\t\t// remove from doc\r\n\t\tvar nextSibling = tBody.nextSibling;\r\n\t\tvar p = tBody.parentNode;\r\n\t\tp.removeChild(tBody);\r\n\t}\r\n\r\n\t// insert in the new order\r\n\tvar l = a.length;\r\n\tfor (var i = 0; i < l; i++)\r\n\t\ttBody.appendChild(a[i].element);\r\n\r\n\tif (SortableTable.removeBeforeSort) {\r\n\t\t// insert into doc\r\n\t\tp.insertBefore(tBody, nextSibling);\r\n\t}\r\n\r\n\tthis.updateHeaderArrows();\r\n\r\n\tthis.destroyCache(a);\r\n\r\n\tif (typeof this.onsort == \"function\")\r\n\t\tthis.onsort();\r\n};\r\n\r\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\r\n\tvar oThis = this;\r\n\tthis._asyncsort = function () {\r\n\t\toThis.sort(nColumn, bDescending, sSortType);\r\n\t};\r\n\twindow.setTimeout(this._asyncsort, 1);\r\n};\r\n\r\nSortableTable.prototype.getCache = function (sType, nColumn) {\r\n\tif (!this.tBody) return [];\r\n\tvar rows = this.tBody.rows;\r\n\tvar l = rows.length;\r\n\tvar a = new Array(l);\r\n\tvar r;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tr = rows[i];\r\n\t\ta[i] = {\r\n\t\t\tvalue:\t\tthis.getRowValue(r, sType, nColumn),\r\n\t\t\telement:\tr\r\n\t\t};\r\n\t};\r\n\treturn a;\r\n};\r\n\r\nSortableTable.prototype.destroyCache = function (oArray) {\r\n\tvar l = oArray.length;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\toArray[i].value = null;\r\n\t\toArray[i].element = null;\r\n\t\toArray[i] = null;\r\n\t}\r\n};\r\n\r\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\r\n\t// if we have defined a custom getRowValue use that\r\n\tif (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\r\n\t\treturn this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\r\n\r\n\tvar s;\r\n\tvar c = oRow.cells[nColumn];\r\n\tif (typeof c.innerText != \"undefined\")\r\n\t\ts = c.innerText;\r\n\telse\r\n\t\ts = SortableTable.getInnerText(c);\r\n\treturn this.getValueFromString(s, sType);\r\n};\r\n\r\nSortableTable.getInnerText = function (oNode) {\r\n\tvar s = \"\";\r\n\tvar cs = oNode.childNodes;\r\n\tvar l = cs.length;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tswitch (cs[i].nodeType) {\r\n\t\t\tcase 1: //ELEMENT_NODE\r\n\t\t\t\ts += SortableTable.getInnerText(cs[i]);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 3:\t//TEXT_NODE\r\n\t\t\t\ts += cs[i].nodeValue;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn s;\r\n};\r\n\r\nSortableTable.prototype.getValueFromString = function (sText, sType) {\r\n\tif (this._sortTypeInfo[sType])\r\n\t\treturn this._sortTypeInfo[sType].getValueFromString( sText );\r\n\treturn sText;\r\n\t/*\r\n\tswitch (sType) {\r\n\t\tcase \"Number\":\r\n\t\t\treturn Number(sText);\r\n\t\tcase \"CaseInsensitiveString\":\r\n\t\t\treturn sText.toUpperCase();\r\n\t\tcase \"Date\":\r\n\t\t\tvar parts = sText.split(\"-\");\r\n\t\t\tvar d = new Date(0);\r\n\t\t\td.setFullYear(parts[0]);\r\n\t\t\td.setDate(parts[2]);\r\n\t\t\td.setMonth(parts[1] - 1);\r\n\t\t\treturn d.valueOf();\r\n\t}\r\n\treturn sText;\r\n\t*/\r\n\t};\r\n\r\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\r\n\tif (this._sortTypeInfo[sType])\r\n\t\treturn this._sortTypeInfo[sType].compare;\r\n\treturn SortableTable.basicCompare;\r\n};\r\n\r\nSortableTable.prototype.destroy = function () {\r\n\tthis.uninitHeader();\r\n\tvar win = this.document.parentWindow;\r\n\tif (win && typeof win.detachEvent != \"undefined\") {\t// only IE needs this\r\n\t\twin.detachEvent(\"onunload\", this._onunload);\r\n\t}\r\n\tthis._onunload = null;\r\n\tthis.element = null;\r\n\tthis.tHead = null;\r\n\tthis.tBody = null;\r\n\tthis.document = null;\r\n\tthis._headerOnclick = null;\r\n\tthis.sortTypes = null;\r\n\tthis._asyncsort = null;\r\n\tthis.onsort = null;\r\n};\r\n\r\n// Adds a sort type to all instance of SortableTable\r\n// sType : String - the identifier of the sort type\r\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\r\n// string and casts it to a desired format. If left out the string is just\r\n// returned\r\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\r\n// compare function. Takes two values and compares them. If left out less than,\r\n// <, compare is used\r\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\r\n// that takes the row and the column index and returns the value used to compare.\r\n// If left out then the innerText is first taken for the cell and then the\r\n// fGetValueFromString is used to convert that string the desired value and type\r\n\r\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\r\n\tthis._sortTypeInfo[sType] = {\r\n\t\ttype:\t\t\t\tsType,\r\n\t\tgetValueFromString:\tfGetValueFromString || SortableTable.idFunction,\r\n\t\tcompare:\t\t\tfCompareFunction || SortableTable.basicCompare,\r\n\t\tgetRowValue:\t\tfGetRowValue\r\n\t};\r\n};\r\n\r\n// this removes the sort type from all instances of SortableTable\r\nSortableTable.prototype.removeSortType = function (sType) {\r\n\tdelete this._sortTypeInfo[sType];\r\n};\r\n\r\nSortableTable.basicCompare = function compare(n1, n2) {\r\n\tif (n1.value < n2.value)\r\n\t\treturn -1;\r\n\tif (n2.value < n1.value)\r\n\t\treturn 1;\r\n\treturn 0;\r\n};\r\n\r\nSortableTable.idFunction = function (x) {\r\n\treturn x;\r\n};\r\n\r\nSortableTable.toUpperCase = function (s) {\r\n\treturn s.toUpperCase();\r\n};\r\n\r\nSortableTable.toDate = function (s) {\r\n\tvar parts = s.split(\"-\");\r\n\tvar d = new Date(0);\r\n\td.setFullYear(parts[0]);\r\n\td.setDate(parts[2]);\r\n\td.setMonth(parts[1] - 1);\r\n\treturn d.valueOf();\r\n};\r\n\r\n\r\n// add sort types\r\nSortableTable.prototype.addSortType(\"Number\", Number);\r\nSortableTable.prototype.addSortType(\"CaseInsensitiveString\", SortableTable.toUpperCase);\r\nSortableTable.prototype.addSortType(\"Date\", SortableTable.toDate);\r\nSortableTable.prototype.addSortType(\"String\");\r\n// None is a special case\r\n" + +/***/ }), + +/***/ "./node_modules/script-loader/addScript.js": +/*!*************************************************!*\ + !*** ./node_modules/script-loader/addScript.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +module.exports = function(src) { + function log(error) { + (typeof console !== "undefined") + && (console.error || console.log)("[Script Loader]", error); + } + + // Check for IE =< 8 + function isIE() { + return typeof attachEvent !== "undefined" && typeof addEventListener === "undefined"; + } + + try { + if (typeof execScript !== "undefined" && isIE()) { + execScript(src); + } else if (typeof eval !== "undefined") { + eval.call(null, src); + } else { + log("EvalError: No eval function available"); + } + } catch (error) { + log(error); + } +} + + +/***/ }), + +/***/ "./node_modules/script-loader/index.js!./libs/sortabletable.js": +/*!************************************************************!*\ + !*** ./node_modules/script-loader!./libs/sortabletable.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(/*! !./node_modules/script-loader/addScript.js */ "./node_modules/script-loader/addScript.js")(__webpack_require__(/*! !./node_modules/raw-loader!./libs/sortabletable.js */ "./node_modules/raw-loader/index.js!./libs/sortabletable.js")+"\n\n// SCRIPT-LOADER FOOTER\n//# sourceURL=script:///C:/projects/dev/github/TableFilter/libs/sortabletable.js") + +/***/ }), + +/***/ "./src sync recursive ^\\.\\/.*$": +/*!***************************!*\ + !*** ./src sync ^\.\/.*$ ***! + \***************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var map = { + "./array": "./src/array.js", + "./array.js": "./src/array.js", + "./const": "./src/const.js", + "./const.js": "./src/const.js", + "./cookie": "./src/cookie.js", + "./cookie.js": "./src/cookie.js", + "./dom": "./src/dom.js", + "./dom.js": "./src/dom.js", + "./emitter": "./src/emitter.js", + "./emitter.js": "./src/emitter.js", + "./event": "./src/event.js", + "./event.js": "./src/event.js", + "./extensions/advancedGrid/adapterEzEditTable": "./src/extensions/advancedGrid/adapterEzEditTable.js", + "./extensions/advancedGrid/adapterEzEditTable.js": "./src/extensions/advancedGrid/adapterEzEditTable.js", + "./extensions/advancedGrid/advancedGrid": "./src/extensions/advancedGrid/advancedGrid.js", + "./extensions/advancedGrid/advancedGrid.js": "./src/extensions/advancedGrid/advancedGrid.js", + "./extensions/colOps/colOps": "./src/extensions/colOps/colOps.js", + "./extensions/colOps/colOps.js": "./src/extensions/colOps/colOps.js", + "./extensions/colsVisibility/colsVisibility": "./src/extensions/colsVisibility/colsVisibility.js", + "./extensions/colsVisibility/colsVisibility.js": "./src/extensions/colsVisibility/colsVisibility.js", + "./extensions/filtersVisibility/filtersVisibility": "./src/extensions/filtersVisibility/filtersVisibility.js", + "./extensions/filtersVisibility/filtersVisibility.js": "./src/extensions/filtersVisibility/filtersVisibility.js", + "./extensions/sort/adapterSortabletable": "./src/extensions/sort/adapterSortabletable.js", + "./extensions/sort/adapterSortabletable.js": "./src/extensions/sort/adapterSortabletable.js", + "./extensions/sort/sort": "./src/extensions/sort/sort.js", + "./extensions/sort/sort.js": "./src/extensions/sort/sort.js", + "./feature": "./src/feature.js", + "./feature.js": "./src/feature.js", + "./modules/alternateRows": "./src/modules/alternateRows.js", + "./modules/alternateRows.js": "./src/modules/alternateRows.js", + "./modules/baseDropdown": "./src/modules/baseDropdown.js", + "./modules/baseDropdown.js": "./src/modules/baseDropdown.js", + "./modules/checkList": "./src/modules/checkList.js", + "./modules/checkList.js": "./src/modules/checkList.js", + "./modules/clearButton": "./src/modules/clearButton.js", + "./modules/clearButton.js": "./src/modules/clearButton.js", + "./modules/dateType": "./src/modules/dateType.js", + "./modules/dateType.js": "./src/modules/dateType.js", + "./modules/dropdown": "./src/modules/dropdown.js", + "./modules/dropdown.js": "./src/modules/dropdown.js", + "./modules/gridLayout": "./src/modules/gridLayout.js", + "./modules/gridLayout.js": "./src/modules/gridLayout.js", + "./modules/hash": "./src/modules/hash.js", + "./modules/hash.js": "./src/modules/hash.js", + "./modules/help": "./src/modules/help.js", + "./modules/help.js": "./src/modules/help.js", + "./modules/highlightKeywords": "./src/modules/highlightKeywords.js", + "./modules/highlightKeywords.js": "./src/modules/highlightKeywords.js", + "./modules/loader": "./src/modules/loader.js", + "./modules/loader.js": "./src/modules/loader.js", + "./modules/markActiveColumns": "./src/modules/markActiveColumns.js", + "./modules/markActiveColumns.js": "./src/modules/markActiveColumns.js", + "./modules/noResults": "./src/modules/noResults.js", + "./modules/noResults.js": "./src/modules/noResults.js", + "./modules/paging": "./src/modules/paging.js", + "./modules/paging.js": "./src/modules/paging.js", + "./modules/popupFilter": "./src/modules/popupFilter.js", + "./modules/popupFilter.js": "./src/modules/popupFilter.js", + "./modules/rowsCounter": "./src/modules/rowsCounter.js", + "./modules/rowsCounter.js": "./src/modules/rowsCounter.js", + "./modules/state": "./src/modules/state.js", + "./modules/state.js": "./src/modules/state.js", + "./modules/statusBar": "./src/modules/statusBar.js", + "./modules/statusBar.js": "./src/modules/statusBar.js", + "./modules/storage": "./src/modules/storage.js", + "./modules/storage.js": "./src/modules/storage.js", + "./modules/toolbar": "./src/modules/toolbar.js", + "./modules/toolbar.js": "./src/modules/toolbar.js", + "./number": "./src/number.js", + "./number.js": "./src/number.js", + "./root": "./src/root.js", + "./root.js": "./src/root.js", + "./settings": "./src/settings.js", + "./settings.js": "./src/settings.js", + "./sort": "./src/sort.js", + "./sort.js": "./src/sort.js", + "./string": "./src/string.js", + "./string.js": "./src/string.js", + "./tablefilter": "./src/tablefilter.js", + "./tablefilter.js": "./src/tablefilter.js", + "./tfBase": "./src/tfBase.js", + "./tfBase.js": "./src/tfBase.js", + "./types": "./src/types.js", + "./types.js": "./src/types.js" +}; + + +function webpackContext(req) { + var id = webpackContextResolve(req); + var module = __webpack_require__(id); + return module; +} +function webpackContextResolve(req) { + var id = map[req]; + if(!(id + 1)) { // check for number or string + var e = new Error('Cannot find module "' + req + '".'); + e.code = 'MODULE_NOT_FOUND'; + throw e; + } + return id; +} +webpackContext.keys = function webpackContextKeys() { + return Object.keys(map); +}; +webpackContext.resolve = webpackContextResolve; +module.exports = webpackContext; +webpackContext.id = "./src sync recursive ^\\.\\/.*$"; + +/***/ }), + +/***/ "./src/extensions/advancedGrid/adapterEzEditTable.js": +/*!***********************************************************!*\ + !*** ./src/extensions/advancedGrid/adapterEzEditTable.js ***! + \***********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AdapterEzEditTable; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../const */ "./src/const.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../settings */ "./src/settings.js"); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../root */ "./src/root.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + +var INSTANTIATION_ERROR = "Failed to instantiate EditTable object.\n \n\"ezEditTable\" dependency not found."; +/** + * Adapter module for ezEditTable, an external library providing advanced + * grid features (selection and edition): + * http://codecanyon.net/item/ezedittable-enhance-html-tables/2425123?ref=koalyptus + */ + +var AdapterEzEditTable = +/*#__PURE__*/ +function (_Feature) { + _inherits(AdapterEzEditTable, _Feature); + + /** + * Creates an instance of AdapterEzEditTable + * + * @param {TableFilter} tf TableFilter instance + * @param {Object} cfg Configuration options for ezEditTable library + */ + function AdapterEzEditTable(tf, cfg) { + var _this; + + _classCallCheck(this, AdapterEzEditTable); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(AdapterEzEditTable).call(this, tf, cfg.name)); + /** + * Module description + * @type {String} + */ + + _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.description, 'ezEditTable adapter'); + /** + * Filename of ezEditTable library + * @type {String} + */ + + _this.filename = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.filename, 'ezEditTable.js'); + /** + * Path to ezEditTable library + * @type {String} + */ + + _this.vendorPath = cfg.vendor_path; + /** + * Load ezEditTable stylesheet + * @type {Boolean} + */ + + _this.loadStylesheet = Boolean(cfg.load_stylesheet); + /** + * Path to ezEditTable stylesheet + * @type {String} + */ + + _this.stylesheet = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.stylesheet, _this.vendorPath + 'ezEditTable.css'); + /** + * Name of ezEditTable stylesheet + * @type {String} + */ + + _this.stylesheetName = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.stylesheet_name, 'ezEditTableCss'); // Enable the ezEditTable's scroll into view behaviour if grid layout on + + cfg.scroll_into_view = cfg.scroll_into_view === false ? false : tf.gridLayout; + /** + * ezEditTable instance + * @type {EditTable} + * @private + */ + + _this._ezEditTable = null; + /** + * ezEditTable configuration + * @private + */ + + _this.cfg = cfg; + + _this.enable(); + + return _this; + } + /** + * Conditionally load ezEditTable library and set advanced grid + */ + + + _createClass(AdapterEzEditTable, [{ + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized) { + return; + } + + var tf = this.tf; + + if (_root__WEBPACK_IMPORTED_MODULE_4__["root"].EditTable) { + this._setAdvancedGrid(); + } else { + var path = this.vendorPath + this.filename; + tf.import(this.filename, path, function () { + return _this2._setAdvancedGrid(); + }); + } + + if (this.loadStylesheet && !tf.isImported(this.stylesheet, 'link')) { + tf.import(this.stylesheetName, this.stylesheet, null, 'link'); + } // TODO: hack to prevent ezEditTable enter key event hijaking. + // Needs to be fixed in the vendor's library + + + this.emitter.on(['filter-focus', 'filter-blur'], function () { + return _this2._toggleForInputFilter(); + }); + /** + * @inherited + */ + + this.initialized = true; + } + /** + * Instantiate ezEditTable component for advanced grid features + * @private + */ + + }, { + key: "_setAdvancedGrid", + value: function _setAdvancedGrid() { + var tf = this.tf; //start row for EditTable constructor needs to be calculated + + var startRow, + cfg = this.cfg, + thead = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(tf.dom(), 'thead'); //if thead exists and startRow not specified, startRow is calculated + //automatically by EditTable + + if (thead.length > 0 && !cfg.startRow) { + startRow = undefined; + } //otherwise startRow config property if any or TableFilter refRow + else { + startRow = cfg.startRow || tf.refRow; + } + + cfg.base_path = cfg.base_path || tf.basePath + 'ezEditTable/'; + var editable = cfg.editable; + var selectable = cfg.selection; + + if (selectable) { + cfg.default_selection = cfg.default_selection || 'row'; + } //CSS Styles + + + cfg.active_cell_css = cfg.active_cell_css || 'ezETSelectedCell'; + var _lastValidRowIndex = 0; + var _lastRowIndex = 0; + + if (selectable) { + //Row navigation needs to be calculated according to TableFilter's + //validRowsIndex array + var onAfterSelection = function onAfterSelection(et, selectedElm, e) { + var slc = et.Selection; //Next valid filtered row needs to be selected + + var doSelect = function doSelect(nextRowIndex) { + if (et.defaultSelection === 'row') { + /* eslint-disable */ + slc.SelectRowByIndex(nextRowIndex); + /* eslint-enable */ + } else { + /* eslint-disable */ + et.ClearSelections(); + /* eslint-enable */ + + var cellIndex = selectedElm.cellIndex, + _row = tf.dom().rows[nextRowIndex]; + + if (et.defaultSelection === 'both') { + /* eslint-disable */ + slc.SelectRowByIndex(nextRowIndex); + /* eslint-enable */ + } + + if (_row) { + /* eslint-disable */ + slc.SelectCell(_row.cells[cellIndex]); + /* eslint-enable */ + } + } //Table is filtered + + + if (tf.validRowsIndex.length !== tf.getRowsNb()) { + var r = tf.dom().rows[nextRowIndex]; + + if (r) { + r.scrollIntoView(false); + } + + if (cell) { + if (cell.cellIndex === tf.getCellsNb() - 1 && tf.gridLayout) { + tf.tblCont.scrollLeft = 100000000; + } else if (cell.cellIndex === 0 && tf.gridLayout) { + tf.tblCont.scrollLeft = 0; + } else { + cell.scrollIntoView(false); + } + } + } + }; //table is not filtered + + + if (!tf.validRowsIndex) { + return; + } + + var validIndexes = tf.validRowsIndex, + validIdxLen = validIndexes.length, + row = et.defaultSelection !== 'row' ? selectedElm.parentNode : selectedElm, + //cell for default_selection = 'both' or 'cell' + cell = selectedElm.nodeName === 'TD' ? selectedElm : null, + + /* eslint-disable */ + keyCode = e !== undefined ? et.Event.GetKey(e) : 0, + + /* eslint-enable */ + isRowValid = validIndexes.indexOf(row.rowIndex) !== -1, + nextRowIndex, + paging = tf.feature('paging'), + //pgup/pgdown keys + d = keyCode === 34 || keyCode === 33 ? paging && paging.pageLength || et.nbRowsPerPage : 1; //If next row is not valid, next valid filtered row needs to be + //calculated + + if (!isRowValid) { + //Selection direction up/down + if (row.rowIndex > _lastRowIndex) { + //last row + if (row.rowIndex >= validIndexes[validIdxLen - 1]) { + nextRowIndex = validIndexes[validIdxLen - 1]; + } else { + var calcRowIndex = _lastValidRowIndex + d; + + if (calcRowIndex > validIdxLen - 1) { + nextRowIndex = validIndexes[validIdxLen - 1]; + } else { + nextRowIndex = validIndexes[calcRowIndex]; + } + } + } else { + //first row + if (row.rowIndex <= validIndexes[0]) { + nextRowIndex = validIndexes[0]; + } else { + var v = validIndexes[_lastValidRowIndex - d]; + nextRowIndex = v ? v : validIndexes[0]; + } + } + + _lastRowIndex = row.rowIndex; + doSelect(nextRowIndex); + } else { + //If filtered row is valid, special calculation for + //pgup/pgdown keys + if (keyCode !== 34 && keyCode !== 33) { + _lastValidRowIndex = validIndexes.indexOf(row.rowIndex); + _lastRowIndex = row.rowIndex; + } else { + if (keyCode === 34) { + //pgdown + //last row + if (_lastValidRowIndex + d <= validIdxLen - 1) { + nextRowIndex = validIndexes[_lastValidRowIndex + d]; + } else { + nextRowIndex = [validIdxLen - 1]; + } + } else { + //pgup + //first row + if (_lastValidRowIndex - d <= validIndexes[0]) { + nextRowIndex = validIndexes[0]; + } else { + nextRowIndex = validIndexes[_lastValidRowIndex - d]; + } + } + + _lastRowIndex = nextRowIndex; + _lastValidRowIndex = validIndexes.indexOf(nextRowIndex); + doSelect(nextRowIndex); + } + } + }; //Page navigation has to be enforced whenever selected row is out of + //the current page range + + + var onBeforeSelection = function onBeforeSelection(et, selectedElm) { + var row = et.defaultSelection !== 'row' ? selectedElm.parentNode : selectedElm; + + if (tf.paging) { + if (tf.feature('paging').nbPages > 1) { + var paging = tf.feature('paging'); //page length is re-assigned in case it has changed + + et.nbRowsPerPage = paging.pageLength; + var validIndexes = tf.validRowsIndex, + validIdxLen = validIndexes.length, + pagingEndRow = parseInt(paging.startPagingRow, 10) + parseInt(paging.pageLength, 10); + var rowIndex = row.rowIndex; + + if (rowIndex === validIndexes[validIdxLen - 1] && paging.currentPageNb !== paging.nbPages) { + paging.setPage('last'); + } else if (rowIndex === validIndexes[0] && paging.currentPageNb !== 1) { + paging.setPage('first'); + } else if (rowIndex > validIndexes[pagingEndRow - 1] && rowIndex < validIndexes[validIdxLen - 1]) { + paging.setPage('next'); + } else if (rowIndex < validIndexes[paging.startPagingRow] && rowIndex > validIndexes[0]) { + paging.setPage('previous'); + } + } + } + }; //Selected row needs to be visible when paging is activated + + + if (tf.paging) { + tf.feature('paging').onAfterChangePage = function (paging) { + var advGrid = paging.tf.extension('advancedGrid'); + var et = advGrid._ezEditTable; + var slc = et.Selection; + /* eslint-disable */ + + var row = slc.GetActiveRow(); + /* eslint-enable */ + + if (row) { + row.scrollIntoView(false); + } + /* eslint-disable */ + + + var cell = slc.GetActiveCell(); + /* eslint-enable */ + + if (cell) { + cell.scrollIntoView(false); + } + }; + } //Rows navigation when rows are filtered is performed with the + //EditTable row selection callback events + + + if (cfg.default_selection === 'row') { + var fnB = cfg.on_before_selected_row; + + cfg.on_before_selected_row = function () { + var args = arguments; + onBeforeSelection(args[0], args[1], args[2]); + + if (fnB) { + fnB.call(null, args[0], args[1], args[2]); + } + }; + + var fnA = cfg.on_after_selected_row; + + cfg.on_after_selected_row = function () { + var args = arguments; + onAfterSelection(args[0], args[1], args[2]); + + if (fnA) { + fnA.call(null, args[0], args[1], args[2]); + } + }; + } else { + var fnD = cfg.on_before_selected_cell; + + cfg.on_before_selected_cell = function () { + var args = arguments; + onBeforeSelection(args[0], args[1], args[2]); + + if (fnD) { + fnD.call(null, args[0], args[1], args[2]); + } + }; + + var fnC = cfg.on_after_selected_cell; + + cfg.on_after_selected_cell = function () { + var args = arguments; + onAfterSelection(args[0], args[1], args[2]); + + if (fnC) { + fnC.call(null, args[0], args[1], args[2]); + } + }; + } + } + + if (editable) { + //Added or removed rows, TF rows number needs to be re-calculated + var fnE = cfg.on_added_dom_row; + + cfg.on_added_dom_row = function () { + var args = arguments; + tf.nbFilterableRows++; + + if (!tf.paging) { + tf.emitter.emit('rows-changed', tf, this); + } else { + tf.nbFilterableRows++; + tf.paging = false; + tf.feature('paging').destroy(); + tf.feature('paging').reset(); + } + + if (tf.alternateRows) { + tf.feature('alternateRows').init(); + } + + if (fnE) { + fnE.call(null, args[0], args[1], args[2]); + } + }; + + if (cfg.actions && cfg.actions['delete']) { + var fnF = cfg.actions['delete'].on_after_submit; + + cfg.actions['delete'].on_after_submit = function () { + var args = arguments; + tf.nbFilterableRows--; + + if (!tf.paging) { + tf.emitter.emit('rows-changed', tf, this); + } else { + tf.nbFilterableRows--; + tf.paging = false; + tf.feature('paging').destroy(); + tf.feature('paging').reset(false); + } + + if (tf.alternateRows) { + tf.feature('alternateRows').init(); + } + + if (fnF) { + fnF.call(null, args[0], args[1]); + } + }; + } + } + + try { + /* eslint-disable */ + this._ezEditTable = new EditTable(tf.id, cfg, startRow); + + this._ezEditTable.Init(); + /* eslint-enable */ + + } catch (e) { + throw new Error(INSTANTIATION_ERROR); + } + + this.initialized = true; + } + /** + * Reset advanced grid when previously removed + */ + + }, { + key: "reset", + value: function reset() { + var ezEditTable = this._ezEditTable; + + if (ezEditTable) { + if (this.cfg.selection) { + /* eslint-disable */ + ezEditTable.Selection.Set(); + /* eslint-enable */ + } + + if (this.cfg.editable) { + /* eslint-disable */ + ezEditTable.Editable.Set(); + /* eslint-enable */ + } + } + } + /** + * Toggle behaviour + */ + + }, { + key: "toggle", + value: function toggle() { + var ezEditTable = this._ezEditTable; + + if (ezEditTable.editable) { + /* eslint-disable */ + ezEditTable.Editable.Remove(); + /* eslint-enable */ + } else { + /* eslint-disable */ + ezEditTable.Editable.Set(); + /* eslint-enable */ + } + + if (ezEditTable.selection) { + /* eslint-disable */ + ezEditTable.Selection.Remove(); + /* eslint-enable */ + } else { + /* eslint-disable */ + ezEditTable.Selection.Set(); + /* eslint-enable */ + } + } + }, { + key: "_toggleForInputFilter", + value: function _toggleForInputFilter() { + var tf = this.tf; + + if (!tf.getActiveFilterId()) { + return; + } + + var colIndex = tf.getColumnIndexFromFilterId(tf.getActiveFilterId()); + var filterType = tf.getFilterType(colIndex); + + if (filterType === _const__WEBPACK_IMPORTED_MODULE_2__["INPUT"]) { + this.toggle(); + } + } + /** + * Remove advanced grid + */ + + }, { + key: "destroy", + value: function destroy() { + var _this3 = this; + + if (!this.initialized) { + return; + } + + var ezEditTable = this._ezEditTable; + + if (ezEditTable) { + if (this.cfg.selection) { + /* eslint-disable */ + ezEditTable.Selection.ClearSelections(); + ezEditTable.Selection.Remove(); + /* eslint-enable */ + } + + if (this.cfg.editable) { + /* eslint-disable */ + ezEditTable.Editable.Remove(); + /* eslint-enable */ + } + } + + this.emitter.off(['filter-focus', 'filter-blur'], function () { + return _this3._toggleForInputFilter(); + }); + this.initialized = false; + } + }]); + + return AdapterEzEditTable; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + + + +/***/ }), + +/***/ "./src/extensions/advancedGrid/advancedGrid.js": +/*!*****************************************************!*\ + !*** ./src/extensions/advancedGrid/advancedGrid.js ***! + \*****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _adapterEzEditTable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adapterEzEditTable */ "./src/extensions/advancedGrid/adapterEzEditTable.js"); + +/* harmony default export */ __webpack_exports__["default"] = (_adapterEzEditTable__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/***/ }), + +/***/ "./src/extensions/colOps/colOps.js": +/*!*****************************************!*\ + !*** ./src/extensions/colOps/colOps.js ***! + \*****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ColOps; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types */ "./src/types.js"); +/* harmony import */ var _sort__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../sort */ "./src/sort.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../const */ "./src/const.js"); +/* harmony import */ var format_number__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! format-number */ "./node_modules/format-number/index.js"); +/* harmony import */ var format_number__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(format_number__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../settings */ "./src/settings.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../event */ "./src/event.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + + + +var EVENTS = ['after-filtering', 'after-page-change', 'after-page-length-change']; +var SUM = 'sum'; +var MEAN = 'mean'; +var MIN = 'min'; +var MAX = 'max'; +var MEDIAN = 'median'; +var Q1 = 'q1'; +var Q3 = 'q3'; +/** + * Column calculations extension + */ + +var ColOps = +/*#__PURE__*/ +function (_Feature) { + _inherits(ColOps, _Feature); + + /** + * Creates an instance of ColOps + * + * @param {TableFilter} tf TableFilter instance + * @param {Object} opts Configuration object + */ + function ColOps(tf, opts) { + var _this; + + _classCallCheck(this, ColOps); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(ColOps).call(this, tf, opts.name)); + /** + * Callback fired before columns operations start + * @type {Function} + */ + + _this.onBeforeOperation = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_before_operation, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after columns operations are completed + * @type {Function} + */ + + _this.onAfterOperation = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_after_operation, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Configuration options + * @type {Object} + */ + + _this.opts = opts; + /** + * List of DOM element IDs containing column's calculation result + * @type {Array} + */ + + _this.labelIds = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.id, []); + /** + * List of columns' indexes for calculations + * @type {Array} + */ + + _this.colIndexes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.col, []); + /** + * List of operations - possible values: 'sum', 'mean', 'min', 'max', + * 'median', 'q1', 'q3' + * @type {Array} + */ + + _this.operations = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.operation, []); + /** + * List of write methods used to write the result - possible values: + * 'innerHTML', 'setValue', 'createTextNode' + * @type {Array} + */ + + _this.outputTypes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.write_method, []); + /** + * List of format objects used for formatting the result - + * refer to https://github.com/componitable/format-number to check + * configuration options + * @type {Array} + */ + + _this.formatResults = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.format_result, []); + /** + * List of row indexes displaying the results + * @type {Array} + */ + + _this.totRowIndexes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.tot_row_index, []); + /** + * List of row indexes excluded from calculations + * @type {Array} + */ + + _this.excludeRows = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.exclude_row, []); + /** + * List of decimal precision for calculation results + * @type {Array} + */ + + _this.decimalPrecisions = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.decimal_precision, 2); + + _this.enable(); + + return _this; + } + /** + * Initializes ColOps instance + */ + + + _createClass(ColOps, [{ + key: "init", + value: function init() { + if (this.initialized) { + return; + } // subscribe to events + + + this.emitter.on(EVENTS, Object(_event__WEBPACK_IMPORTED_MODULE_7__["bound"])(this.calcAll, this)); + this.calcAll(); + /** @inherited */ + + this.initialized = true; + } + /** + * Calculates columns' values + * Configuration options are stored in 'opts' property + * - 'id' contains ids of elements showing result (array) + * - 'col' contains the columns' indexes (array) + * - 'operation' contains operation type (array, values: 'sum', 'mean', + * 'min', 'max', 'median', 'q1', 'q3') + * - 'write_method' array defines which method to use for displaying the + * result (innerHTML, setValue, createTextNode) - default: 'innerHTML' + * - 'tot_row_index' defines in which row results are displayed + * (integers array) + * + * - changes made by Nuovella: + * (1) optimized the routine (now it will only process each column once), + * (2) added calculations for the median, lower and upper quartile. + */ + + }, { + key: "calcAll", + value: function calcAll() { + var tf = this.tf; + + if (!tf.isInitialized()) { + return; + } + + this.onBeforeOperation(tf, this); + this.emitter.emit('before-column-operation', tf, this); + var colIndexes = this.colIndexes, + colOperations = this.operations, + outputTypes = this.outputTypes, + totRowIndexes = this.totRowIndexes, + excludeRows = this.excludeRows, + formatResults = this.formatResults, + decimalPrecisions = this.decimalPrecisions; //nuovella: determine unique list of columns to operate on + + var uIndexes = []; + colIndexes.forEach(function (val) { + if (uIndexes.indexOf(val) === -1) { + uIndexes.push(val); + } + }); + var nbCols = uIndexes.length, + rows = tf.dom().rows, + colValues = []; + + for (var u = 0; u < nbCols; u++) { + //this retrieves col values + //use uIndexes because we only want to pass through this loop + //once for each column get the values in this unique column + colValues.push(tf.getVisibleColumnData(uIndexes[u], false, excludeRows)); + var curValues = colValues[u]; //next: calculate all operations for this column + + var result = 0, + operations = [], + precisions = [], + labels = [], + writeType = void 0, + formatResult = [], + idx = 0; + + for (var k = 0; k < colIndexes.length; k++) { + if (colIndexes[k] !== uIndexes[u]) { + continue; + } + + operations[idx] = (colOperations[k] || 'sum').toLowerCase(); + precisions[idx] = decimalPrecisions[k]; + labels[idx] = this.labelIds[k]; + writeType = Object(_types__WEBPACK_IMPORTED_MODULE_2__["isArray"])(outputTypes) ? outputTypes[k] : null; + formatResult[idx] = this.configureFormat(uIndexes[u], formatResults[k]); + idx++; + } + + for (var i = 0; i < idx; i++) { + // emit values before column calculation + this.emitter.emit('before-column-calc', tf, this, uIndexes[u], curValues, operations[i], precisions[i]); + result = Number(this.calc(curValues, operations[i], null)); // emit column calculation result + + this.emitter.emit('column-calc', tf, this, uIndexes[u], result, operations[i], precisions[i]); // write result in expected DOM element + + this.writeResult(result, labels[i], writeType, precisions[i], formatResult[i]); + } //for i + // row(s) with result are always visible + + + var totRow = totRowIndexes && totRowIndexes[u] ? rows[totRowIndexes[u]] : null; + + if (totRow) { + totRow.style.display = ''; + } + } //for u + + + this.onAfterOperation(tf, this); + this.emitter.emit('after-column-operation', tf, this); + } + /** + * Make desired calculation on specified column. + * @param {Number} colIndex Column index + * @param {String} [operation=SUM] Operation type + * @param {Number} precision Decimal precision + * @returns {Number} + */ + + }, { + key: "columnCalc", + value: function columnCalc(colIndex) { + var operation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SUM; + var precision = arguments.length > 2 ? arguments[2] : undefined; + var excludeRows = this.excludeRows || []; + var colValues = tf.getVisibleColumnData(colIndex, false, excludeRows); + return Number(this.calc(colValues, operation, precision)); + } + /** + * Make calculation on passed values. + * @param {Array} values List of values + * @param {String} [operation=SUM] Optional operation type + * @param {Number} precision Optional result precision + * @returns {Number} + * @private + */ + + }, { + key: "calc", + value: function calc(colValues) { + var operation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SUM; + var precision = arguments.length > 2 ? arguments[2] : undefined; + var result = 0; + + if (operation === Q1 || operation === Q3 || operation === MEDIAN) { + colValues = this.sortColumnValues(colValues, _sort__WEBPACK_IMPORTED_MODULE_3__["numSortAsc"]); + } + + switch (operation) { + case MEAN: + result = this.calcMean(colValues); + break; + + case SUM: + result = this.calcSum(colValues); + break; + + case MIN: + result = this.calcMin(colValues); + break; + + case MAX: + result = this.calcMax(colValues); + break; + + case MEDIAN: + result = this.calcMedian(colValues); + break; + + case Q1: + result = this.calcQ1(colValues); + break; + + case Q3: + result = this.calcQ3(colValues); + break; + } + + return Object(_types__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(precision) ? result : result.toFixed(precision); + } + /** + * Calculate the sum of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcSum", + value: function calcSum() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + + if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(values)) { + return 0; + } + + var result = values.reduce(function (x, y) { + return Number(x) + Number(y); + }); + return result; + } + /** + * Calculate the mean of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcMean", + value: function calcMean() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var result = this.calcSum(values) / values.length; + return Number(result); + } + /** + * Calculate the max value of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcMax", + value: function calcMax() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + return Math.max.apply(null, values); + } + /** + * Calculate the min value of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcMin", + value: function calcMin() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + return Math.min.apply(null, values); + } + /** + * Calculate the median of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcMedian", + value: function calcMedian() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var nbValues = values.length; + var aux = 0; + + if (nbValues % 2 === 1) { + aux = Math.floor(nbValues / 2); + return Number(values[aux]); + } + + return (Number(values[nbValues / 2]) + Number(values[nbValues / 2 - 1])) / 2; + } + /** + * Calculate the lower quartile of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcQ1", + value: function calcQ1() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var nbValues = values.length; + var posa = 0.0; + posa = Math.floor(nbValues / 4); + + if (4 * posa === nbValues) { + return (Number(values[posa - 1]) + Number(values[posa])) / 2; + } + + return Number(values[posa]); + } + /** + * Calculate the upper quartile of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcQ3", + value: function calcQ3() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var nbValues = values.length; + var posa = 0.0; + var posb = 0.0; + posa = Math.floor(nbValues / 4); + + if (4 * posa === nbValues) { + posb = 3 * posa; + return (Number(values[posb]) + Number(values[posb - 1])) / 2; + } + + return Number(values[nbValues - posa - 1]); + } + /** + * Sort passed values with supplied sorter function. + * @param {Array} [values=[]] List of values to be sorted + * @param {Function} sorter Sorter function + * @returns {Array} + */ + + }, { + key: "sortColumnValues", + value: function sortColumnValues() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var sorter = arguments.length > 1 ? arguments[1] : undefined; + return values.sort(sorter); + } + /** + * Write calculation result in passed DOM element with supplied write method + * and decimal precision. + * @param {Number} [result=0] Calculation result + * @param {DOMElement} label DOM element + * @param {String} [writeType='innerhtml'] Write method + * @param {Number} [precision=2] Applied decimal precision + * @private + */ + + }, { + key: "writeResult", + value: function writeResult() { + var result = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + var label = arguments.length > 1 ? arguments[1] : undefined; + var writeType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'innerhtml'; + var precision = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 2; + var format = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; + var labelElm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(label); + + if (!labelElm) { + return; + } + + result = result.toFixed(precision); + + if (isNaN(result) || !isFinite(result)) { + result = ''; + } else { + result = format_number__WEBPACK_IMPORTED_MODULE_5___default()(format)(result); + } + + switch (writeType.toLowerCase()) { + case 'innerhtml': + labelElm.innerHTML = result; + break; + + case 'setvalue': + labelElm.value = result; + break; + + case 'createtextnode': + var oldNode = labelElm.firstChild; + var txtNode = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createText"])(result); + labelElm.replaceChild(txtNode, oldNode); + break; + } + } + /** + * Configure the format options used to format the operation result based + * on column type. + * @param {Number} colIndex Column index + * @param {Object} [format={}] Format object + * @returns {Object} + * @private + */ + + }, { + key: "configureFormat", + value: function configureFormat(colIndex) { + var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var tf = this.tf; + + if (tf.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_4__["FORMATTED_NUMBER"]])) { + var colType = tf.colTypes[colIndex]; + + if (colType.decimal && !format.decimal) { + format.decimal = colType.decimal; + } + + if (colType.thousands && !format.integerSeparator) { + format.integerSeparator = colType.thousands; + } + } else { + format.decimal = format.decimal || ''; + format.integerSeparator = format.integerSeparator || ''; + } + + return format; + } + /** Remove extension */ + + }, { + key: "destroy", + value: function destroy() { + if (!this.initialized) { + return; + } // unsubscribe to events + + + this.emitter.off(EVENTS, Object(_event__WEBPACK_IMPORTED_MODULE_7__["bound"])(this.calcAll, this)); + this.initialized = false; + } + }]); + + return ColOps; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + + + +/***/ }), + +/***/ "./src/extensions/colsVisibility/colsVisibility.js": +/*!*********************************************************!*\ + !*** ./src/extensions/colsVisibility/colsVisibility.js ***! + \*********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ColsVisibility; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types */ "./src/types.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../event */ "./src/event.js"); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../root */ "./src/root.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../const */ "./src/const.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../settings */ "./src/settings.js"); +/* harmony import */ var _modules_toolbar__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../modules/toolbar */ "./src/modules/toolbar.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + + + +/** + * Columns Visibility extension + */ + +var ColsVisibility = +/*#__PURE__*/ +function (_Feature) { + _inherits(ColsVisibility, _Feature); + + /** + * Creates an instance of ColsVisibility + * @param {TableFilter} tf TableFilter instance + * @param {Object} Configuration object + */ + function ColsVisibility(tf, f) { + var _this; + + _classCallCheck(this, ColsVisibility); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(ColsVisibility).call(this, tf, f.name)); // Configuration object + + var cfg = _this.config; + /** + * Module name + * @type {String} + */ + + _this.name = f.name; + /** + * Module description + * @type {String} + */ + + _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.description, 'Columns visibility manager'); + /** + * show/hide columns container element + * @private + */ + + _this.spanEl = null; + /** + * show/hide columns button element + * @private + */ + + _this.btnEl = null; + /** + * show/hide columns main container element + * @private + */ + + _this.contEl = null; + /** + * Enable tick to hide a column, defaults to true + * @type {Boolean} + */ + + _this.tickToHide = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsBool"])(f.tick_to_hide, true); + /** + * Enable columns manager UI, defaults to true + * @type {Boolean} + */ + + _this.manager = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsBool"])(f.manager, true); + /** + * Headers HTML table reference only if headers are external + * @type {DOMElement} + */ + + _this.headersTbl = f.headers_table || null; + /** + * Headers row index only if headers are external + * @type {Number} + */ + + _this.headersIndex = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsNb"])(f.headers_index, 1); + /** + * ID of main container element + * @type {String} + */ + + _this.contElTgtId = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.container_target_id, null); + /** + * Alternative text for column headers in column manager UI + * @type {Array} + */ + + _this.headersText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(f.headers_text, []); + /** + * ID of button's container element + * @type {String} + */ + + _this.btnTgtId = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_target_id, null); + /** + * Button's text, defaults to Columns▼ + * @type {String} + */ + + _this.btnText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_text, 'Columns▼'); + /** + * Button's inner HTML + * @type {String} + */ + + _this.btnHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_html, null); + /** + * Css class for button + * @type {String} + */ + + _this.btnCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_css_class, 'colVis'); + /** + * Columns manager UI close link text, defaults to 'Close' + * @type {String} + */ + + _this.btnCloseText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_close_text, 'Close'); + /** + * Columns manager UI close link HTML + * @type {String} + */ + + _this.btnCloseHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_close_html, null); + /** + * Css for columns manager UI close link + * @type {String} + */ + + _this.btnCloseCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_close_css_class, _this.btnCssClass); + /** + * Extension's stylesheet filename + * @type {String} + */ + + _this.stylesheet = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.stylesheet, 'colsVisibility.css'); + /** + * Css for columns manager UI span + * @type {String} + */ + + _this.spanCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.span_css_class, 'colVisSpan'); + /** + * Css for columns manager UI main container + * @type {String} + */ + + _this.contCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.cont_css_class, 'colVisCont'); + /** + * Css for columns manager UI checklist (ul) + * @type {String} + */ + + _this.listCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(cfg.list_css_class, 'cols_checklist'); + /** + * Css for columns manager UI checklist item (li) + * @type {String} + */ + + _this.listItemCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(cfg.checklist_item_css_class, 'cols_checklist_item'); + /** + * Css for columns manager UI checklist item selected state (li) + * @type {String} + */ + + _this.listSlcItemCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(cfg.checklist_selected_item_css_class, 'cols_checklist_slc_item'); + /** + * Text preceding the columns list, defaults to 'Hide' or 'Show' + * depending on tick mode (tick_to_hide option) + * @type {String} + */ + + _this.text = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.text, _this.tickToHide ? 'Hide: ' : 'Show: '); + /** + * List of columns indexes to be hidden at initialization + * @type {Array} + */ + + _this.atStart = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(f.at_start, []); + /** + * Enable hover behaviour on columns manager button/link + * @type {Boolean} + */ + + _this.enableHover = Boolean(f.enable_hover); + /** + * Enable select all option, disabled by default + * @type {Boolean} + */ + + _this.enableTickAll = Boolean(f.enable_tick_all); + /** + * Text for select all option, defaults to 'Select all:' + * @type {String} + */ + + _this.tickAllText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.tick_all_text, 'Select all:'); + /** + * Default position in toolbar ('left'|'center'|'right') + * @type {String} + */ + + _this.toolbarPosition = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.toolbar_position, _modules_toolbar__WEBPACK_IMPORTED_MODULE_7__["RIGHT"]); + /** + * List of indexes of hidden columns + * @private + */ + + _this.hiddenCols = []; + /** + * Bound mouseup wrapper + * @private + */ + + _this.boundMouseup = null; + /** + * Callback fired when the extension is initialized + * @type {Function} + */ + + _this.onLoaded = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_loaded, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired before the columns manager is opened + * @type {Function} + */ + + _this.onBeforeOpen = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_open, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after the columns manager is opened + * @type {Function} + */ + + _this.onAfterOpen = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_open, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired before the columns manager is closed + * @type {Function} + */ + + _this.onBeforeClose = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_close, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after the columns manager is closed + * @type {Function} + */ + + _this.onAfterClose = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_close, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired before a column is hidden + * @type {Function} + */ + + _this.onBeforeColHidden = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_col_hidden, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after a column is hidden + * @type {Function} + */ + + _this.onAfterColHidden = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_col_hidden, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired before a column is displayed + * @type {Function} + */ + + _this.onBeforeColDisplayed = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_col_displayed, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after a column is displayed + * @type {Function} + */ + + _this.onAfterColDisplayed = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_col_displayed, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); //Grid layout support + + if (tf.gridLayout) { + _this.headersTbl = tf.feature('gridLayout').headTbl; //headers table + + _this.headersIndex = 0; //headers index + } //Loads extension stylesheet + + + tf.import(f.name + 'Style', tf.getStylePath() + _this.stylesheet, null, 'link'); + + _this.enable(); + + return _this; + } + /** + * Mouse-up event handler handling popup auto-close behaviour + * @private + */ + + + _createClass(ColsVisibility, [{ + key: "onMouseup", + value: function onMouseup(evt) { + var targetElm = Object(_event__WEBPACK_IMPORTED_MODULE_3__["targetEvt"])(evt); + + while (targetElm && targetElm !== this.contEl && targetElm !== this.btnEl) { + targetElm = targetElm.parentNode; + } + + if (targetElm !== this.contEl && targetElm !== this.btnEl) { + this.toggle(); + } + + return; + } + /** + * Toggle columns manager UI + */ + + }, { + key: "toggle", + value: function toggle() { + // ensure mouseup event handler is removed + Object(_event__WEBPACK_IMPORTED_MODULE_3__["removeEvt"])(_root__WEBPACK_IMPORTED_MODULE_4__["root"], 'mouseup', this.boundMouseup); + var contDisplay = this.contEl.style.display; + + if (contDisplay !== 'inline') { + this.onBeforeOpen(this); + } + + if (contDisplay === 'inline') { + this.onBeforeClose(this); + } + + this.contEl.style.display = contDisplay === 'inline' ? _const__WEBPACK_IMPORTED_MODULE_5__["NONE"] : 'inline'; + + if (contDisplay !== 'inline') { + this.onAfterOpen(this); + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(_root__WEBPACK_IMPORTED_MODULE_4__["root"], 'mouseup', this.boundMouseup); + } + + if (contDisplay === 'inline') { + this.onAfterClose(this); + } + } + /** + * Check an item in columns manager UI + * @private + */ + + }, { + key: "checkItem", + value: function checkItem(lbl) { + var li = lbl.parentNode; + + if (!li || !lbl) { + return; + } + + var isChecked = lbl.firstChild.checked; + var colIndex = lbl.firstChild.getAttribute('id').split('_')[1]; + colIndex = parseInt(colIndex, 10); + + if (isChecked) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(li, this.listSlcItemCssClass); + } else { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeClass"])(li, this.listSlcItemCssClass); + } + + var hide = false; + + if (this.tickToHide && isChecked || !this.tickToHide && !isChecked) { + hide = true; + } + + this.setHidden(colIndex, hide); + } + /** + * Initializes ColsVisibility instance + */ + + }, { + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized || !this.manager) { + return; + } + + this.emitter.emit('initializing-extension', this, !Object(_types__WEBPACK_IMPORTED_MODULE_2__["isNull"])(this.btnTgtId)); + this.emitter.on(['hide-column'], function (tf, colIndex) { + return _this2.hideCol(colIndex); + }); + this.buildBtn(); + this.buildManager(); + /** @inherited */ + + this.initialized = true; + this.boundMouseup = this.onMouseup.bind(this); + this.emitter.emit('columns-visibility-initialized', this.tf, this); + this.emitter.emit('extension-initialized', this); // Hide columns at start at very end of initialization, do not move + // as order is important + + this._hideAtStart(); + } + /** + * Build main button UI + */ + + }, { + key: "buildBtn", + value: function buildBtn() { + var _this3 = this; + + if (this.btnEl) { + return; + } + + var tf = this.tf; + var span = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span'); + span.className = this.spanCssClass; // Container element (rdiv or custom element) + + var targetEl = !this.btnTgtId ? tf.feature('toolbar').container(this.toolbarPosition) : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.btnTgtId); + + if (!this.btnTgtId) { + var firstChild = targetEl.firstChild; + firstChild.parentNode.insertBefore(span, firstChild); + } else { + targetEl.appendChild(span); + } + + if (!this.btnHtml) { + var btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:;']); + btn.className = this.btnCssClass; + btn.title = this.desc; + btn.innerHTML = this.btnText; + span.appendChild(btn); + + if (!this.enableHover) { + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function (evt) { + return _this3.toggle(evt); + }); + } else { + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'mouseover', function (evt) { + return _this3.toggle(evt); + }); + } + } else { + // Custom html + span.innerHTML = this.btnHtml; + var colVisEl = span.firstChild; + + if (!this.enableHover) { + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(colVisEl, 'click', function (evt) { + return _this3.toggle(evt); + }); + } else { + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(colVisEl, 'mouseover', function (evt) { + return _this3.toggle(evt); + }); + } + } + + this.spanEl = span; + this.btnEl = this.spanEl.firstChild; + this.onLoaded(this); + } + /** + * Build columns manager UI + */ + + }, { + key: "buildManager", + value: function buildManager() { + var _this4 = this; + + var tf = this.tf; + var container = !this.contElTgtId ? Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('div') : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contElTgtId); + container.className = this.contCssClass; //Extension description + + var extNameLabel = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('p'); + extNameLabel.innerHTML = this.text; + container.appendChild(extNameLabel); //Headers list + + var ul = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('ul'); + ul.className = this.listCssClass; + var tbl = this.headersTbl || tf.dom(); + var headerIndex = this.headersTbl ? this.headersIndex : tf.getHeadersRowIndex(); + var headerRow = tbl.rows[headerIndex]; //Tick all option + + if (this.enableTickAll) { + var li = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createCheckItem"])('col__' + tf.id, this.tickAllText, this.tickAllText); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(li, this.listItemCssClass); + ul.appendChild(li); + li.check.checked = !this.tickToHide; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(li.check, 'click', function () { + for (var h = 0; h < headerRow.cells.length; h++) { + var itm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])('col_' + h + '_' + tf.id); + + if (itm && li.check.checked !== itm.checked) { + itm.click(); + itm.checked = li.check.checked; + } + } + }); + } + + for (var i = 0; i < headerRow.cells.length; i++) { + var cell = headerRow.cells[i]; + + var cellText = this.headersText[i] || this._getHeaderText(cell); + + var liElm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createCheckItem"])('col_' + i + '_' + tf.id, cellText, cellText); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(liElm, this.listItemCssClass); + + if (!this.tickToHide) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(liElm, this.listSlcItemCssClass); + } + + ul.appendChild(liElm); + + if (!this.tickToHide) { + liElm.check.checked = true; + } + + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(liElm.check, 'click', function (evt) { + var elm = Object(_event__WEBPACK_IMPORTED_MODULE_3__["targetEvt"])(evt); + var lbl = elm.parentNode; + + _this4.checkItem(lbl); + }); + } //separator + + + var p = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('p', ['align', 'center']); + var btn; //Close link + + if (!this.btnCloseHtml) { + btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:;']); + btn.className = this.btnCloseCssClass; + btn.innerHTML = this.btnCloseText; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function (evt) { + return _this4.toggle(evt); + }); + p.appendChild(btn); + } else { + p.innerHTML = this.btnCloseHtml; + btn = p.firstChild; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function (evt) { + return _this4.toggle(evt); + }); + } + + container.appendChild(ul); + container.appendChild(p); + this.btnEl.parentNode.insertBefore(container, this.btnEl); + this.contEl = container; + } + /** + * Hide or show specified columns + * @param {Number} colIndex Column index + * @param {Boolean} hide Hide column if true or show if false + */ + + }, { + key: "setHidden", + value: function setHidden(colIndex, hide) { + var tf = this.tf; + var tbl = tf.dom(); + + if (hide) { + this.onBeforeColHidden(this, colIndex); + } else { + this.onBeforeColDisplayed(this, colIndex); + } + + this._hideElements(tbl, colIndex, hide); + + if (this.headersTbl) { + this._hideElements(this.headersTbl, colIndex, hide); + } + + var hiddenCols = this.hiddenCols; + var itemIndex = hiddenCols.indexOf(colIndex); + + if (hide) { + if (itemIndex === -1) { + this.hiddenCols.push(colIndex); + } + } else { + if (itemIndex !== -1) { + this.hiddenCols.splice(itemIndex, 1); + } + } + + if (hide) { + this.onAfterColHidden(this, colIndex); + this.emitter.emit('column-hidden', tf, this, colIndex, this.hiddenCols); + } else { + this.onAfterColDisplayed(this, colIndex); + this.emitter.emit('column-shown', tf, this, colIndex, this.hiddenCols); + } + } + /** + * Show specified column + * @param {Number} colIndex Column index + */ + + }, { + key: "showCol", + value: function showCol(colIndex) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isUndef"])(colIndex) || !this.isColHidden(colIndex)) { + return; + } + + if (this.manager && this.contEl) { + var itm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])('col_' + colIndex + '_' + this.tf.id); + + if (itm) { + itm.click(); + } + } else { + this.setHidden(colIndex, false); + } + } + /** + * Hide specified column + * @param {Number} colIndex Column index + */ + + }, { + key: "hideCol", + value: function hideCol(colIndex) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isUndef"])(colIndex) || this.isColHidden(colIndex)) { + return; + } + + if (this.manager && this.contEl) { + var itm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])('col_' + colIndex + '_' + this.tf.id); + + if (itm) { + itm.click(); + } + } else { + this.setHidden(colIndex, true); + } + } + /** + * Determine if specified column is hidden + * @param {Number} colIndex Column index + */ + + }, { + key: "isColHidden", + value: function isColHidden(colIndex) { + if (this.hiddenCols.indexOf(colIndex) !== -1) { + return true; + } + + return false; + } + /** + * Toggle visibility of specified column + * @param {Number} colIndex Column index + */ + + }, { + key: "toggleCol", + value: function toggleCol(colIndex) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isUndef"])(colIndex) || this.isColHidden(colIndex)) { + this.showCol(colIndex); + } else { + this.hideCol(colIndex); + } + } + /** + * Return the indexes of the columns currently hidden + * @return {Array} column indexes + */ + + }, { + key: "getHiddenCols", + value: function getHiddenCols() { + return this.hiddenCols; + } + /** + * Remove the columns manager + */ + + }, { + key: "destroy", + value: function destroy() { + var _this5 = this; + + if (!this.initialized) { + return; + } + + if (Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contElTgtId)) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contElTgtId).innerHTML = ''; + } else { + this.contEl.innerHTML = ''; + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.contEl); + this.contEl = null; + } + + this.btnEl.innerHTML = ''; + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.btnEl); + this.btnEl = null; + this.emitter.off(['hide-column'], function (tf, colIndex) { + return _this5.hideCol(colIndex); + }); + this.boundMouseup = null; + this.initialized = false; + } + }, { + key: "_getHeaderText", + value: function _getHeaderText(cell) { + if (!cell.hasChildNodes) { + return ''; + } + + for (var i = 0; i < cell.childNodes.length; i++) { + var n = cell.childNodes[i]; + + if (n.nodeType === 3) { + return n.nodeValue; + } else if (n.nodeType === 1) { + if (n.id && n.id.indexOf('popUp') !== -1) { + continue; + } else { + return Object(_dom__WEBPACK_IMPORTED_MODULE_1__["getText"])(n); + } + } + + continue; + } + + return ''; + } + }, { + key: "_hideElements", + value: function _hideElements(tbl, colIdx, hide) { + this._hideCells(tbl, colIdx, hide); + + this._hideCol(tbl, colIdx, hide); + } + }, { + key: "_hideCells", + value: function _hideCells(tbl, colIdx, hide) { + for (var i = 0; i < tbl.rows.length; i++) { + var row = tbl.rows[i]; + var cell = row.cells[colIdx]; + + if (cell) { + cell.style.display = hide ? _const__WEBPACK_IMPORTED_MODULE_5__["NONE"] : ''; + } + } + } + }, { + key: "_hideCol", + value: function _hideCol(tbl, colIdx, hide) { + var colElms = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(tbl, 'col'); + + if (colElms.length === 0) { + return; + } + + colElms[colIdx].style.display = hide ? _const__WEBPACK_IMPORTED_MODULE_5__["NONE"] : ''; + } + }, { + key: "_hideAtStart", + value: function _hideAtStart() { + var _this6 = this; + + this.atStart.forEach(function (colIdx) { + _this6.hideCol(colIdx); + }); + } + }]); + + return ColsVisibility; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + + + +/***/ }), + +/***/ "./src/extensions/filtersVisibility/filtersVisibility.js": +/*!***************************************************************!*\ + !*** ./src/extensions/filtersVisibility/filtersVisibility.js ***! + \***************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return FiltersVisibility; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types */ "./src/types.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../event */ "./src/event.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../settings */ "./src/settings.js"); +/* harmony import */ var _modules_toolbar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../modules/toolbar */ "./src/modules/toolbar.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + +/** + * Filters Visibility extension + */ + +var FiltersVisibility = +/*#__PURE__*/ +function (_Feature) { + _inherits(FiltersVisibility, _Feature); + + /** + * Creates an instance of FiltersVisibility + * @param {TableFilter} tf TableFilter instance + * @param {Object} Configuration object + */ + function FiltersVisibility(tf, f) { + var _this; + + _classCallCheck(this, FiltersVisibility); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(FiltersVisibility).call(this, tf, f.name)); + /** + * Module name + * @type {String} + */ + + _this.name = f.name; + /** + * Module description + * @type {String} + */ + + _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.description, 'Filters row visibility manager'); + /** + * Extension's stylesheet filename + * @type {String} + */ + + _this.stylesheet = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.stylesheet, 'filtersVisibility.css'); + /** + * Expand icon filename + * @type {String} + */ + + _this.icnExpand = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.expand_icon_name, 'icn_exp.png'); + /** + * Collapse icon filename + * @type {String} + */ + + _this.icnCollapse = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.collapse_icon_name, 'icn_clp.png'); + /** + * Main container element + * @private + */ + + _this.contEl = null; + /** + * Button element + * @private + */ + + _this.btnEl = null; + /** + * Expand icon HTML + * @private + */ + + _this.icnExpandHtml = 'Expand filters'; + /** + * Collapse icon HTML + * @private + */ + + _this.icnCollapseHtml = 'Collapse filters'; + /** + * Default text + * @private + */ + + _this.defaultText = 'Toggle filters'; + /** + * ID of main container element + * @type {String} + */ + + _this.targetId = f.target_id || null; + /** + * Enable expand/collapse icon, defaults to true + * @type {Boolean} + */ + + _this.enableIcon = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsBool"])(f.enable_icon, true); + /** + * Custom text for button + * @type {String} + */ + + _this.btnText = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.btn_text, ''); + /** + * Collapse button HTML + * @private + */ + + _this.collapseBtnHtml = _this.enableIcon ? _this.icnCollapseHtml + _this.btnText : _this.btnText || _this.defaultText; + /** + * Expand button HTML + * @private + */ + + _this.expandBtnHtml = _this.enableIcon ? _this.icnExpandHtml + _this.btnText : _this.btnText || _this.defaultText; + /** + * Button's custom HTML + * @type {String} + */ + + _this.btnHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.btn_html, null); + /** + * Css class for expand/collapse filters button + * @type {String} + */ + + _this.btnCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.btn_css_class, 'btnExpClpFlt'); + /** + * Css class for main container + * @type {String} + */ + + _this.contCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.cont_css_class, 'expClpFlt'); + /** + * Filters row index + * @type {Number} + */ + + _this.filtersRowIndex = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsNb"])(f.filters_row_index, tf.getFiltersRowIndex()); + /** + * Make filters visible at initialization, defaults to true + * @type {Boolean} + */ + + _this.visibleAtStart = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsNb"])(f.visible_at_start, true); + /** + * Default position in toolbar ('left'|'center'|'right') + * @type {String} + */ + + _this.toolbarPosition = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.toolbar_position, _modules_toolbar__WEBPACK_IMPORTED_MODULE_5__["RIGHT"]); + /** + * Callback fired before filters row is shown + * @type {Function} + */ + + _this.onBeforeShow = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_before_show, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after filters row is shown + * @type {Function} + */ + + _this.onAfterShow = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_after_show, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired before filters row is hidden + * @type {Function} + */ + + _this.onBeforeHide = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_before_hide, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after filters row is hidden + * @type {Function} + */ + + _this.onAfterHide = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_after_hide, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); //Import extension's stylesheet + + tf.import(f.name + 'Style', tf.getStylePath() + _this.stylesheet, null, 'link'); + + _this.enable(); + + return _this; + } + /** + * Initialise extension + */ + + + _createClass(FiltersVisibility, [{ + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized) { + return; + } + + this.emitter.emit('initializing-extension', this, !Object(_types__WEBPACK_IMPORTED_MODULE_2__["isNull"])(this.targetId)); + this.buildUI(); + /** @inherited */ + + this.initialized = true; + this.emitter.on(['show-filters'], function (tf, visible) { + return _this2.show(visible); + }); + this.emitter.emit('filters-visibility-initialized', this.tf, this); + this.emitter.emit('extension-initialized', this); + } + /** + * Build UI elements + */ + + }, { + key: "buildUI", + value: function buildUI() { + var _this3 = this; + + var tf = this.tf; + var span = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span'); + span.className = this.contCssClass; // Container element (rdiv or custom element) + + var targetEl = !this.targetId ? tf.feature('toolbar').container(this.toolbarPosition) : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.targetId); + + if (!this.targetId) { + var firstChild = targetEl.firstChild; + firstChild.parentNode.insertBefore(span, firstChild); + } else { + targetEl.appendChild(span); + } + + var btn; + + if (!this.btnHtml) { + btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:void(0);']); + btn.className = this.btnCssClass; + btn.title = this.btnText || this.defaultText; + btn.innerHTML = this.collapseBtnHtml; + span.appendChild(btn); + } else { + // Custom html + span.innerHTML = this.btnHtml; + btn = span.firstChild; + } + + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function () { + return _this3.toggle(); + }); + this.contEl = span; + this.btnEl = btn; + + if (!this.visibleAtStart) { + this.toggle(); + } + } + /** + * Toggle filters visibility + */ + + }, { + key: "toggle", + value: function toggle() { + var tf = this.tf; + var tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom(); + var fltRow = tbl.rows[this.filtersRowIndex]; + var isDisplayed = fltRow.style.display === ''; + this.show(!isDisplayed); + } + /** + * Show or hide filters + * + * @param {boolean} [visible=true] Visibility flag + */ + + }, { + key: "show", + value: function show() { + var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var tf = this.tf; + var tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom(); + var fltRow = tbl.rows[this.filtersRowIndex]; + + if (visible) { + this.onBeforeShow(this); + } + + if (!visible) { + this.onBeforeHide(this); + } + + fltRow.style.display = visible ? '' : 'none'; + + if (this.enableIcon && !this.btnHtml) { + this.btnEl.innerHTML = visible ? this.collapseBtnHtml : this.expandBtnHtml; + } + + if (visible) { + this.onAfterShow(this); + } + + if (!visible) { + this.onAfterHide(this); + } + + this.emitter.emit('filters-toggled', tf, this, visible); + } + /** + * Destroy the UI + */ + + }, { + key: "destroy", + value: function destroy() { + var _this4 = this; + + if (!this.initialized) { + return; + } + + this.emitter.off(['show-filters'], function (tf, visible) { + return _this4.show(visible); + }); + this.btnEl.innerHTML = ''; + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.btnEl); + this.btnEl = null; + this.contEl.innerHTML = ''; + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.contEl); + this.contEl = null; + this.initialized = false; + } + }]); + + return FiltersVisibility; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + + + +/***/ }), + +/***/ "./src/extensions/sort/adapterSortabletable.js": +/*!*****************************************************!*\ + !*** ./src/extensions/sort/adapterSortabletable.js ***! + \*****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AdapterSortableTable; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../types */ "./src/types.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../dom */ "./src/dom.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../event */ "./src/event.js"); +/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../number */ "./src/number.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../const */ "./src/const.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../settings */ "./src/settings.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + + +/** + * SortableTable Adapter module + */ + +var AdapterSortableTable = +/*#__PURE__*/ +function (_Feature) { + _inherits(AdapterSortableTable, _Feature); + + /** + * Creates an instance of AdapterSortableTable + * @param {TableFilter} tf TableFilter instance + * @param {Object} opts Configuration object + */ + function AdapterSortableTable(tf, opts) { + var _this; + + _classCallCheck(this, AdapterSortableTable); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(AdapterSortableTable).call(this, tf, opts.name)); + /** + * Module name + * @type {String} + */ + + _this.name = opts.name; + /** + * Module description + * @type {String} + */ + + _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.description, 'Sortable table'); + /** + * Indicate whether table previously sorted + * @type {Boolean} + * @private + */ + + _this.sorted = false; + /** + * List of sort type per column basis + * @type {Array} + */ + + _this.sortTypes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.types, tf.colTypes); + /** + * Column to be sorted at initialization, ie: + * sort_col_at_start: [1, true] + * @type {Array} + */ + + _this.sortColAtStart = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.sort_col_at_start, null); + /** + * Enable asynchronous sort, if triggers are external + * @type {Boolean} + */ + + _this.asyncSort = Boolean(opts.async_sort); + /** + * List of element IDs triggering sort on a per column basis + * @type {Array} + */ + + _this.triggerIds = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.trigger_ids, []); // edit .sort-arrow.descending / .sort-arrow.ascending in + // tablefilter.css to reflect any path change + + /** + * Path to images + * @type {String} + */ + + _this.imgPath = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.images_path, tf.themesPath); + /** + * Blank image file name + * @type {String} + */ + + _this.imgBlank = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_blank, 'blank.png'); + /** + * Css class for sort indicator image + * @type {String} + */ + + _this.imgClassName = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_class_name, 'sort-arrow'); + /** + * Css class for ascending sort indicator image + * @type {String} + */ + + _this.imgAscClassName = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_asc_class_name, 'ascending'); + /** + * Css class for descending sort indicator image + * @type {String} + */ + + _this.imgDescClassName = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_desc_class_name, 'descending'); + /** + * Cell attribute key storing custom value used for sorting + * @type {String} + */ + + _this.customKey = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.custom_key, 'data-tf-sortKey'); + /** + * Callback fired when sort extension is instanciated + * @type {Function} + */ + + _this.onSortLoaded = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_sort_loaded, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]); + /** + * Callback fired before a table column is sorted + * @type {Function} + */ + + _this.onBeforeSort = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_before_sort, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]); + /** + * Callback fired after a table column is sorted + * @type {Function} + */ + + _this.onAfterSort = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_after_sort, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]); + /** + * SortableTable instance + * @private + */ + + _this.stt = null; + + _this.enable(); + + return _this; + } + /** + * Initializes AdapterSortableTable instance + */ + + + _createClass(AdapterSortableTable, [{ + key: "init", + value: function init() { + if (this.initialized) { + return; + } + + var tf = this.tf; + var adpt = this; // SortableTable class sanity check (sortabletable.js) + + if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isUndef"])(SortableTable)) { + throw new Error('SortableTable class not found.'); + } // Add any date format if needed + + + this.emitter.emit('add-date-type-formats', this.tf, this.sortTypes); + this.overrideSortableTable(); + this.setSortTypes(); + this.onSortLoaded(tf, this); + /*** SortableTable callbacks ***/ + + this.stt.onbeforesort = function () { + adpt.onBeforeSort(tf, adpt.stt.sortColumn); + /*** sort behaviour for paging ***/ + + if (tf.paging) { + tf.feature('paging').disable(); + } + }; + + this.stt.onsort = function () { + adpt.sorted = true; //sort behaviour for paging + + if (tf.paging) { + var paginator = tf.feature('paging'); // recalculate valid rows index as sorting may have change it + + tf.getValidRows(true); + paginator.enable(); + paginator.setPage(paginator.getPage()); + } + + adpt.onAfterSort(tf, adpt.stt.sortColumn, adpt.stt.descending); + adpt.emitter.emit('column-sorted', tf, adpt.stt.sortColumn, adpt.stt.descending); + }; // Column sort at start + + + var sortColAtStart = adpt.sortColAtStart; + + if (sortColAtStart) { + this.stt.sort(sortColAtStart[0], sortColAtStart[1]); + } + + this.emitter.on(['sort'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.sortByColumnIndexHandler, this)); + /** @inherited */ + + this.initialized = true; + this.emitter.emit('sort-initialized', tf, this); + } + /** + * Sort specified column + * @param {Number} colIdx Column index + * @param {Boolean} desc Optional: descending manner + */ + + }, { + key: "sortByColumnIndex", + value: function sortByColumnIndex(colIdx, desc) { + this.stt.sort(colIdx, desc); + } + /** @private */ + + }, { + key: "sortByColumnIndexHandler", + value: function sortByColumnIndexHandler(tf, colIdx, desc) { + this.sortByColumnIndex(colIdx, desc); + } + /** + * Set SortableTable overrides for TableFilter integration + */ + + }, { + key: "overrideSortableTable", + value: function overrideSortableTable() { + var adpt = this, + tf = this.tf; + /** + * Overrides headerOnclick method in order to handle th event + * @param {Object} e [description] + */ + + SortableTable.prototype.headerOnclick = function (evt) { + if (!adpt.initialized) { + return; + } // find Header element + + + var el = evt.target || evt.srcElement; + + while (el.tagName !== _const__WEBPACK_IMPORTED_MODULE_5__["CELL_TAG"] && el.tagName !== _const__WEBPACK_IMPORTED_MODULE_5__["HEADER_TAG"]) { + el = el.parentNode; + } + + this.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex); + }; + /** + * Overrides getCellIndex IE returns wrong cellIndex when columns are + * hidden + * @param {Object} oTd TD element + * @return {Number} Cell index + */ + + + SortableTable.getCellIndex = function (oTd) { + var cells = oTd.parentNode.cells, + l = cells.length, + i; + + for (i = 0; cells[i] !== oTd && i < l; i++) {} + + return i; + }; + /** + * Overrides initHeader in order to handle filters row position + * @param {Array} oSortTypes + */ + + + SortableTable.prototype.initHeader = function (oSortTypes) { + var stt = this; + + if (!stt.tHead) { + if (tf.gridLayout) { + stt.tHead = tf.feature('gridLayout').headTbl.tHead; + } else { + return; + } + } + + stt.headersRow = tf.headersRow; + var cells = stt.tHead.rows[stt.headersRow].cells; + stt.sortTypes = oSortTypes || []; + var l = cells.length; + var img, c; + + for (var i = 0; i < l; i++) { + c = cells[i]; + + if (stt.sortTypes[i] !== null && stt.sortTypes[i] !== 'None') { + c.style.cursor = 'pointer'; + img = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createElm"])('img', ['src', adpt.imgPath + adpt.imgBlank]); + c.appendChild(img); + + if (stt.sortTypes[i] !== null) { + c.setAttribute('_sortType', stt.sortTypes[i]); + } + + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(c, 'click', stt._headerOnclick); + } else { + c.setAttribute('_sortType', oSortTypes[i]); + c._sortType = 'None'; + } + } + + stt.updateHeaderArrows(); + }; + /** + * Overrides updateHeaderArrows in order to handle arrows indicators + */ + + + SortableTable.prototype.updateHeaderArrows = function () { + var stt = this; + var cells, l, img; // external headers + + if (adpt.asyncSort && adpt.triggerIds.length > 0) { + var triggers = adpt.triggerIds; + cells = []; + l = triggers.length; + + for (var j = 0; j < l; j++) { + cells.push(Object(_dom__WEBPACK_IMPORTED_MODULE_2__["elm"])(triggers[j])); + } + } else { + if (!this.tHead) { + return; + } + + cells = stt.tHead.rows[stt.headersRow].cells; + l = cells.length; + } + + for (var i = 0; i < l; i++) { + var cell = cells[i]; + + if (!cell) { + continue; + } + + var cellAttr = cell.getAttribute('_sortType'); + + if (cellAttr !== null && cellAttr !== 'None') { + img = cell.lastChild || cell; + + if (img.nodeName.toLowerCase() !== 'img') { + img = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createElm"])('img', ['src', adpt.imgPath + adpt.imgBlank]); + cell.appendChild(img); + } + + if (i === stt.sortColumn) { + img.className = adpt.imgClassName + ' ' + (this.descending ? adpt.imgDescClassName : adpt.imgAscClassName); + } else { + img.className = adpt.imgClassName; + } + } + } + }; + /** + * Overrides getRowValue for custom key value feature + * @param {Object} oRow Row element + * @param {String} sType + * @param {Number} nColumn + * @return {String} + */ + + + SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) { + var stt = this; // if we have defined a custom getRowValue use that + + var sortTypeInfo = stt._sortTypeInfo[sType]; + + if (sortTypeInfo && sortTypeInfo.getRowValue) { + return sortTypeInfo.getRowValue(oRow, nColumn); + } + + var c = oRow.cells[nColumn]; + var s = SortableTable.getInnerText(c); + return stt.getValueFromString(s, sType); + }; + /** + * Overrides getInnerText in order to avoid Firefox unexpected sorting + * behaviour with untrimmed text elements + * @param {Object} cell DOM element + * @return {String} DOM element inner text + */ + + + SortableTable.getInnerText = function (cell) { + if (!cell) { + return; + } + + if (cell.getAttribute(adpt.customKey)) { + return cell.getAttribute(adpt.customKey); + } else { + return tf.getCellValue(cell); + } + }; + } + /** + * Adds a sort type + */ + + }, { + key: "addSortType", + value: function addSortType() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + // Extract the arguments + var id = args[0], + caster = args[1], + sorter = args[2], + getRowValue = args[3]; + SortableTable.prototype.addSortType(id, caster, sorter, getRowValue); + } + /** + * Sets the sort types on a column basis + * @private + */ + + }, { + key: "setSortTypes", + value: function setSortTypes() { + var _this2 = this; + + var tf = this.tf, + sortTypes = this.sortTypes, + _sortTypes = []; + tf.eachCol(function (i) { + var colType; + + if (sortTypes[i]) { + colType = sortTypes[i]; + + if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isObj"])(colType)) { + if (colType.type === _const__WEBPACK_IMPORTED_MODULE_5__["DATE"]) { + colType = _this2._addDateType(i, sortTypes); + } else if (colType.type === _const__WEBPACK_IMPORTED_MODULE_5__["FORMATTED_NUMBER"]) { + var decimal = colType.decimal || tf.decimalSeparator; + colType = _this2._addNumberType(i, decimal); + } + } else { + colType = colType.toLowerCase(); + + if (colType === _const__WEBPACK_IMPORTED_MODULE_5__["DATE"]) { + colType = _this2._addDateType(i, sortTypes); + } else if (colType === _const__WEBPACK_IMPORTED_MODULE_5__["FORMATTED_NUMBER"] || colType === _const__WEBPACK_IMPORTED_MODULE_5__["NUMBER"]) { + colType = _this2._addNumberType(i, tf.decimalSeparator); + } else if (colType === _const__WEBPACK_IMPORTED_MODULE_5__["NONE"]) { + // TODO: normalise 'none' vs 'None' + colType = 'None'; + } + } + } else { + colType = _const__WEBPACK_IMPORTED_MODULE_5__["STRING"]; + } + + _sortTypes.push(colType); + }); //Public TF method to add sort type + //Custom sort types + + this.addSortType('caseinsensitivestring', SortableTable.toUpperCase); + this.addSortType(_const__WEBPACK_IMPORTED_MODULE_5__["STRING"]); + this.addSortType(_const__WEBPACK_IMPORTED_MODULE_5__["IP_ADDRESS"], ipAddress, sortIP); + this.stt = new SortableTable(tf.dom(), _sortTypes); + /*** external table headers adapter ***/ + + if (this.asyncSort && this.triggerIds.length > 0) { + (function () { + var triggers = _this2.triggerIds; + + for (var j = 0; j < triggers.length; j++) { + if (triggers[j] === null) { + continue; + } + + var trigger = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["elm"])(triggers[j]); + + if (trigger) { + trigger.style.cursor = 'pointer'; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(trigger, 'click', function (evt) { + var elm = evt.target; + + if (!_this2.tf.sort) { + return; + } + + _this2.stt.asyncSort(triggers.indexOf(elm.id)); + }); + trigger.setAttribute('_sortType', _sortTypes[j]); + } + } + })(); + } + } + }, { + key: "_addDateType", + value: function _addDateType(colIndex, types) { + var tf = this.tf; + var dateType = tf.feature('dateType'); + var locale = dateType.getOptions(colIndex, types).locale || tf.locale; + var colType = "".concat(_const__WEBPACK_IMPORTED_MODULE_5__["DATE"], "-").concat(locale); + this.addSortType(colType, function (value) { + var parsedDate = dateType.parse(value, locale); // Invalid date defaults to Wed Feb 04 -768 11:00:00 + + return isNaN(+parsedDate) ? new Date(-86400000000000) : parsedDate; + }); + return colType; + } + }, { + key: "_addNumberType", + value: function _addNumberType(colIndex, decimal) { + var colType = "".concat(_const__WEBPACK_IMPORTED_MODULE_5__["FORMATTED_NUMBER"]).concat(decimal === '.' ? '' : '-custom'); + this.addSortType(colType, function (value) { + return Object(_number__WEBPACK_IMPORTED_MODULE_4__["parse"])(value, decimal); + }); + return colType; + } + /** + * Remove extension + */ + + }, { + key: "destroy", + value: function destroy() { + if (!this.initialized) { + return; + } + + var tf = this.tf; + this.emitter.off(['sort'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.sortByColumnIndexHandler, this)); + this.sorted = false; + this.stt.destroy(); + var ids = tf.getFiltersId(); + + for (var idx = 0; idx < ids.length; idx++) { + var header = tf.getHeaderElement(idx); + var img = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["tag"])(header, 'img'); + + if (img.length === 1) { + header.removeChild(img[0]); + } + } + + this.initialized = false; + } + }]); + + return AdapterSortableTable; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); //Converters + + + + +function ipAddress(value) { + var vals = value.split('.'); + + for (var x in vals) { + var val = vals[x]; + + while (3 > val.length) { + val = '0' + val; + } + + vals[x] = val; + } + + return vals.join('.'); +} + +function sortIP(a, b) { + var aa = ipAddress(a.value.toLowerCase()); + var bb = ipAddress(b.value.toLowerCase()); + + if (aa === bb) { + return 0; + } else if (aa < bb) { + return -1; + } else { + return 1; + } +} + +/***/ }), + +/***/ "./src/extensions/sort/sort.js": +/*!*************************************!*\ + !*** ./src/extensions/sort/sort.js ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _adapterSortabletable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adapterSortabletable */ "./src/extensions/sort/adapterSortabletable.js"); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../root */ "./src/root.js"); + + + +if (!_root__WEBPACK_IMPORTED_MODULE_1__["root"].SortableTable) { + __webpack_require__(/*! script-loader!sortabletable */ "./node_modules/script-loader/index.js!./libs/sortabletable.js"); +} + +/* harmony default export */ __webpack_exports__["default"] = (_adapterSortabletable__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/***/ }), + +/***/ "./src/tfBase.js": +/*!***********************!*\ + !*** ./src/tfBase.js ***! + \***********************/ +/*! exports provided: TfBase */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TfBase", function() { return TfBase; }); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var TfBase = function TfBase(tf, cls) { + _classCallCheck(this, TfBase); + + /** + * TableFilter instance + * @type {TableFilter} + */ + this.tf = tf; +}; + +/***/ }) + +}]); +//# sourceMappingURL=tf-0-1891d14d4ad1233555f2.js.map \ No newline at end of file diff --git a/dist/tablefilter/tf-0-1891d14d4ad1233555f2.js.map b/dist/tablefilter/tf-0-1891d14d4ad1233555f2.js.map new file mode 100644 index 00000000..530644f3 --- /dev/null +++ b/dist/tablefilter/tf-0-1891d14d4ad1233555f2.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./node_modules/format-number/index.js","webpack:///./libs/sortabletable.js","webpack:///./node_modules/script-loader/addScript.js","webpack:///./libs/sortabletable.js?8203","webpack:///./src sync ^\\.\\/.*$","webpack:///./src/extensions/advancedGrid/adapterEzEditTable.js","webpack:///./src/extensions/advancedGrid/advancedGrid.js","webpack:///./src/extensions/colOps/colOps.js","webpack:///./src/extensions/colsVisibility/colsVisibility.js","webpack:///./src/extensions/filtersVisibility/filtersVisibility.js","webpack:///./src/extensions/sort/adapterSortabletable.js","webpack:///./src/extensions/sort/sort.js","webpack:///./src/tfBase.js"],"names":["INSTANTIATION_ERROR","AdapterEzEditTable","tf","cfg","name","desc","description","filename","vendorPath","vendor_path","loadStylesheet","Boolean","load_stylesheet","stylesheet","stylesheetName","stylesheet_name","scroll_into_view","gridLayout","_ezEditTable","enable","initialized","EditTable","_setAdvancedGrid","path","import","isImported","emitter","on","_toggleForInputFilter","startRow","thead","dom","length","undefined","refRow","base_path","basePath","editable","selectable","selection","default_selection","active_cell_css","_lastValidRowIndex","_lastRowIndex","onAfterSelection","et","selectedElm","e","slc","Selection","doSelect","nextRowIndex","defaultSelection","SelectRowByIndex","ClearSelections","cellIndex","row","rows","SelectCell","cells","validRowsIndex","getRowsNb","r","scrollIntoView","cell","getCellsNb","tblCont","scrollLeft","validIndexes","validIdxLen","parentNode","nodeName","keyCode","Event","GetKey","isRowValid","indexOf","rowIndex","paging","feature","d","pageLength","nbRowsPerPage","calcRowIndex","v","onBeforeSelection","nbPages","pagingEndRow","parseInt","startPagingRow","currentPageNb","setPage","onAfterChangePage","advGrid","extension","GetActiveRow","GetActiveCell","fnB","on_before_selected_row","args","arguments","call","fnA","on_after_selected_row","fnD","on_before_selected_cell","fnC","on_after_selected_cell","fnE","on_added_dom_row","nbFilterableRows","emit","destroy","reset","alternateRows","init","actions","fnF","on_after_submit","id","Init","Error","ezEditTable","Set","Editable","Remove","getActiveFilterId","colIndex","getColumnIndexFromFilterId","filterType","getFilterType","toggle","off","EVENTS","SUM","MEAN","MIN","MAX","MEDIAN","Q1","Q3","ColOps","opts","onBeforeOperation","on_before_operation","onAfterOperation","on_after_operation","labelIds","colIndexes","col","operations","operation","outputTypes","write_method","formatResults","format_result","totRowIndexes","tot_row_index","excludeRows","exclude_row","decimalPrecisions","decimal_precision","calcAll","isInitialized","colOperations","uIndexes","forEach","val","push","nbCols","colValues","u","getVisibleColumnData","curValues","result","precisions","labels","writeType","formatResult","idx","k","toLowerCase","configureFormat","i","Number","calc","writeResult","totRow","style","display","precision","sortColumnValues","calcMean","calcSum","calcMin","calcMax","calcMedian","calcQ1","calcQ3","toFixed","values","reduce","x","y","Math","max","apply","min","nbValues","aux","floor","posa","posb","sorter","sort","label","format","labelElm","isNaN","isFinite","innerHTML","value","oldNode","firstChild","txtNode","replaceChild","hasType","colType","colTypes","decimal","thousands","integerSeparator","ColsVisibility","f","config","spanEl","btnEl","contEl","tickToHide","tick_to_hide","manager","headersTbl","headers_table","headersIndex","headers_index","contElTgtId","container_target_id","headersText","headers_text","btnTgtId","btn_target_id","btnText","btn_text","btnHtml","btn_html","btnCssClass","btn_css_class","btnCloseText","btn_close_text","btnCloseHtml","btn_close_html","btnCloseCssClass","btn_close_css_class","spanCssClass","span_css_class","contCssClass","cont_css_class","listCssClass","list_css_class","listItemCssClass","checklist_item_css_class","listSlcItemCssClass","checklist_selected_item_css_class","text","atStart","at_start","enableHover","enable_hover","enableTickAll","enable_tick_all","tickAllText","tick_all_text","toolbarPosition","toolbar_position","hiddenCols","boundMouseup","onLoaded","on_loaded","onBeforeOpen","on_before_open","onAfterOpen","on_after_open","onBeforeClose","on_before_close","onAfterClose","on_after_close","onBeforeColHidden","on_before_col_hidden","onAfterColHidden","on_after_col_hidden","onBeforeColDisplayed","on_before_col_displayed","onAfterColDisplayed","on_after_col_displayed","headTbl","getStylePath","evt","targetElm","removeEvt","contDisplay","addEvt","lbl","li","isChecked","checked","getAttribute","split","addClass","removeClass","hide","setHidden","hideCol","buildBtn","buildManager","onMouseup","bind","_hideAtStart","span","className","targetEl","container","insertBefore","appendChild","btn","title","colVisEl","extNameLabel","ul","tbl","headerIndex","getHeadersRowIndex","headerRow","check","h","itm","click","cellText","_getHeaderText","liElm","elm","checkItem","p","_hideElements","itemIndex","splice","isColHidden","showCol","removeElm","hasChildNodes","childNodes","n","nodeType","nodeValue","colIdx","_hideCells","_hideCol","colElms","FiltersVisibility","icnExpand","expand_icon_name","icnCollapse","collapse_icon_name","icnExpandHtml","themesPath","icnCollapseHtml","defaultText","targetId","target_id","enableIcon","enable_icon","collapseBtnHtml","expandBtnHtml","filtersRowIndex","filters_row_index","getFiltersRowIndex","visibleAtStart","visible_at_start","onBeforeShow","on_before_show","onAfterShow","on_after_show","onBeforeHide","on_before_hide","onAfterHide","on_after_hide","buildUI","visible","show","fltRow","isDisplayed","AdapterSortableTable","sorted","sortTypes","types","sortColAtStart","sort_col_at_start","asyncSort","async_sort","triggerIds","trigger_ids","imgPath","images_path","imgBlank","image_blank","imgClassName","image_class_name","imgAscClassName","image_asc_class_name","imgDescClassName","image_desc_class_name","customKey","custom_key","onSortLoaded","on_sort_loaded","onBeforeSort","on_before_sort","onAfterSort","on_after_sort","stt","adpt","SortableTable","overrideSortableTable","setSortTypes","onbeforesort","sortColumn","disable","onsort","paginator","getValidRows","getPage","descending","sortByColumnIndexHandler","sortByColumnIndex","prototype","headerOnclick","el","target","srcElement","tagName","msie","getCellIndex","oTd","l","initHeader","oSortTypes","tHead","headersRow","img","c","cursor","setAttribute","_headerOnclick","_sortType","updateHeaderArrows","triggers","j","cellAttr","lastChild","getRowValue","oRow","sType","nColumn","sortTypeInfo","_sortTypeInfo","s","getInnerText","getValueFromString","getCellValue","caster","addSortType","_sortTypes","eachCol","type","_addDateType","decimalSeparator","_addNumberType","toUpperCase","ipAddress","sortIP","trigger","dateType","locale","getOptions","parsedDate","parse","Date","ids","getFiltersId","header","getHeaderElement","removeChild","vals","join","a","b","aa","bb","require","TfBase","cls"],"mappings":";;;;;;;;;;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2BAA2B;AAC3B,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAsD,4BAA4B,EAAE;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8BAA8B;AACnD;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,EAAE;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAC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","file":"tf-0-1891d14d4ad1233555f2.js","sourcesContent":["\nmodule.exports = formatter;\nmodule.exports.default = formatter;\n\nfunction formatter(options) {\n options = options || {};\n\n\n // *********************************************************************************************\n // Set defaults for negatives\n // options.negative, options.negativeOut, options.separator retained for backward compatibility\n // *********************************************************************************************\n\n // type of negative; default left\n options.negativeType = options.negativeType || (options.negative === 'R' ? 'right' : 'left')\n\n // negative symbols '-' or '()'\n if (typeof options.negativeLeftSymbol !== 'string') {\n switch (options.negativeType) {\n case 'left':\n options.negativeLeftSymbol = '-';\n break;\n case 'brackets':\n options.negativeLeftSymbol = '(';\n break;\n default:\n options.negativeLeftSymbol = '';\n }\n }\n if (typeof options.negativeRightSymbol !== 'string') {\n switch (options.negativeType) {\n case 'right':\n options.negativeRightSymbol = '-';\n break;\n case 'brackets':\n options.negativeRightSymbol = ')';\n break;\n default:\n options.negativeRightSymbol = '';\n }\n }\n\n // whether negative symbol should be inside/outside prefix and suffix\n\n if (typeof options.negativeLeftOut !== \"boolean\") {\n options.negativeLeftOut = (options.negativeOut === false ? false : true);\n }\n if (typeof options.negativeRightOut !== \"boolean\") {\n options.negativeRightOut = (options.negativeOut === false ? false : true);\n }\n\n //prefix and suffix\n options.prefix = options.prefix || '';\n options.suffix = options.suffix || '';\n\n //separators\n if (typeof options.integerSeparator !== 'string') {\n options.integerSeparator = (typeof options.separator === 'string' ? options.separator : ',');\n }\n options.decimalsSeparator = typeof options.decimalsSeparator === 'string' ? options.decimalsSeparator : '';\n options.decimal = options.decimal || '.';\n\n //padders\n options.padLeft = options.padLeft || -1 //default no padding\n options.padRight = options.padRight || -1 //default no padding\n\n function format(number, overrideOptions) {\n overrideOptions = overrideOptions || {};\n\n if (number || number === 0) {\n number = '' + number;//convert number to string if it isn't already\n } else {\n return '';\n }\n\n //identify a negative number and make it absolute\n var output = [];\n var negative = number.charAt(0) === '-';\n number = number.replace(/^\\-/g, '');\n\n //Prepare output with left hand negative and/or prefix\n if (!options.negativeLeftOut && !overrideOptions.noUnits) {\n output.push(options.prefix);\n }\n if (negative) {\n output.push(options.negativeLeftSymbol);\n }\n if (options.negativeLeftOut && !overrideOptions.noUnits) {\n output.push(options.prefix);\n }\n\n //Format core number\n number = number.split('.');\n if (options.round != null) round(number, options.round);\n if (options.truncate != null) number[1] = truncate(number[1], options.truncate);\n if (options.padLeft > 0) number[0] = padLeft(number[0], options.padLeft);\n if (options.padRight > 0) number[1] = padRight(number[1], options.padRight);\n if (!overrideOptions.noSeparator && number[1]) number[1] = addDecimalSeparators(number[1], options.decimalsSeparator);\n if (!overrideOptions.noSeparator && number[0]) number[0] = addIntegerSeparators(number[0], options.integerSeparator);\n output.push(number[0]);\n if (number[1]) {\n output.push(options.decimal);\n output.push(number[1]);\n }\n\n //Prepare output with right hand negative and/or prefix\n if (options.negativeRightOut && !overrideOptions.noUnits) {\n output.push(options.suffix);\n }\n if (negative) {\n output.push(options.negativeRightSymbol);\n }\n if (!options.negativeRightOut && !overrideOptions.noUnits) {\n output.push(options.suffix);\n }\n\n //join output and return\n return output.join('');\n }\n\n format.negative = options.negative;\n format.negativeOut = options.negativeOut;\n format.negativeType = options.negativeType;\n format.negativeLeftOut = options.negativeLeftOut;\n format.negativeLeftSymbol = options.negativeLeftSymbol;\n format.negativeRightOut = options.negativeRightOut;\n format.negativeRightSymbol = options.negativeRightSymbol;\n format.prefix = options.prefix;\n format.suffix = options.suffix;\n format.separate = options.separate;\n format.integerSeparator = options.integerSeparator;\n format.decimalsSeparator = options.decimalsSeparator;\n format.decimal = options.decimal;\n format.padLeft = options.padLeft;\n format.padRight = options.padRight;\n format.truncate = options.truncate;\n format.round = options.round;\n\n function unformat(number, allowedSeparators) {\n allowedSeparators = allowedSeparators || [];\n if (options.allowedSeparators) {\n options.allowedSeparators.forEach(function (s) { allowedSeparators.push (s); });\n }\n allowedSeparators.push(options.integerSeparator);\n allowedSeparators.push(options.decimalsSeparator);\n number = number.replace(options.prefix, '');\n number = number.replace(options.suffix, '');\n var newNumber = number;\n do {\n number = newNumber;\n for (var i = 0; i < allowedSeparators.length; i++) {\n newNumber = newNumber.replace(allowedSeparators[i], '');\n }\n } while (newNumber != number);\n return number;\n }\n format.unformat = unformat;\n\n function validate(number, allowedSeparators) {\n number = unformat(number, allowedSeparators);\n number = number.split(options.decimal);\n if (number.length > 2) {\n return false;\n } else if (options.truncate != null && number[1] && number[1].length > options.truncate) {\n return false;\n } else if (options.round != null && number[1] && number[1].length > options.round) {\n return false;\n } else {\n return /^-?\\d+\\.?\\d*$/.test(number);\n }\n }\n return format;\n}\n\n//where x is already the integer part of the number\nfunction addIntegerSeparators(x, separator) {\n x += '';\n if (!separator) return x;\n var rgx = /(\\d+)(\\d{3})/;\n while (rgx.test(x)) {\n x = x.replace(rgx, '$1' + separator + '$2');\n }\n return x;\n}\n\n//where x is already the decimal part of the number\nfunction addDecimalSeparators(x, separator) {\n x += '';\n if (!separator) return x;\n var rgx = /(\\d{3})(\\d+)/;\n while (rgx.test(x)) {\n x = x.replace(rgx, '$1' + separator + '$2');\n }\n return x;\n}\n\n//where x is the integer part of the number\nfunction padLeft(x, padding) {\n x = x + '';\n var buf = [];\n while (buf.length + x.length < padding) {\n buf.push('0');\n }\n return buf.join('') + x;\n}\n\n//where x is the decimals part of the number\nfunction padRight(x, padding) {\n if (x) {\n x += '';\n } else {\n x = '';\n }\n var buf = [];\n while (buf.length + x.length < padding) {\n buf.push('0');\n }\n return x + buf.join('');\n}\nfunction truncate(x, length) {\n if (x) {\n x += '';\n }\n if (x && x.length > length) {\n return x.substr(0, length);\n } else {\n return x;\n }\n}\n\n//where number is an array with 0th item as integer string and 1st item as decimal string (no negatives)\nfunction round(number, places) {\n if (number[1] && places >= 0 && number[1].length > places) {\n //truncate to correct number of decimal places\n var decim = number[1].slice(0, places);\n //if next digit was >= 5 we need to round up\n if (+(number[1].substr(places, 1)) >= 5) {\n //But first count leading zeros as converting to a number will loose them\n var leadingzeros = \"\";\n while (decim.charAt(0)===\"0\") {\n leadingzeros = leadingzeros + \"0\";\n decim = decim.substr(1);\n }\n //Then we can change decim to a number and add 1 before replacing leading zeros\n decim = (+decim + 1) + '';\n decim = leadingzeros + decim;\n if (decim.length > places) {\n //adding one has made it longer\n number[0] = (+number[0]+ +decim.charAt(0)) + ''; //add value of firstchar to the integer part\n decim = decim.substring(1); //ignore the 1st char at the beginning which is the carry to the integer part\n }\n }\n number[1] = decim;\n }\n return number;\n}\n","module.exports = \"/*----------------------------------------------------------------------------\\\\\\r\\n| Sortable Table 1.12 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created by Erik Arvidsson |\\r\\n| (http://webfx.eae.net/contact.html#erik) |\\r\\n| For WebFX (http://webfx.eae.net/) |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| A DOM 1 based script that allows an ordinary HTML table to be sortable. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Copyright (c) 1998 - 2006 Erik Arvidsson |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not |\\r\\n| use this file except in compliance with the License. You may obtain a copy |\\r\\n| of the License at http://www.apache.org/licenses/LICENSE-2.0 |\\r\\n| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\\r\\n| Unless required by applicable law or agreed to in writing, software |\\r\\n| distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT |\\r\\n| WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |\\r\\n| License for the specific language governing permissions and limitations |\\r\\n| under the License. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| 2003-01-10 | First version |\\r\\n| 2003-01-19 | Minor changes to the date parsing |\\r\\n| 2003-01-28 | JScript 5.0 fixes (no support for 'in' operator) |\\r\\n| 2003-02-01 | Sloppy typo like error fixed in getInnerText |\\r\\n| 2003-07-04 | Added workaround for IE cellIndex bug. |\\r\\n| 2003-11-09 | The bDescending argument to sort was not correctly working |\\r\\n| | Using onclick DOM0 event if no support for addEventListener |\\r\\n| | or attachEvent |\\r\\n| 2004-01-13 | Adding addSortType and removeSortType which makes it a lot |\\r\\n| | easier to add new, custom sort types. |\\r\\n| 2004-01-27 | Switch to use descending = false as the default sort order. |\\r\\n| | Change defaultDescending to suit your needs. |\\r\\n| 2004-03-14 | Improved sort type None look and feel a bit |\\r\\n| 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you |\\r\\n| | can use another tHead or no tHead, and you can chose some |\\r\\n| | other tBody. |\\r\\n| 2006-04-25 | Changed license to Apache Software License 2.0 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created 2003-01-10 | All changes are in the log above. | Updated 2006-04-25 |\\r\\n\\\\----------------------------------------------------------------------------*/\\r\\n\\r\\n\\r\\nfunction SortableTable(oTable, oSortTypes) {\\r\\n\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\r\\n\\tthis.sortColumn = null;\\r\\n\\tthis.descending = null;\\r\\n\\r\\n\\tvar oThis = this;\\r\\n\\tthis._headerOnclick = function (e) {\\r\\n\\t\\toThis.headerOnclick(e);\\r\\n\\t};\\r\\n\\r\\n\\tif (oTable) {\\r\\n\\t\\tthis.setTable( oTable );\\r\\n\\t\\tthis.document = oTable.ownerDocument || oTable.document;\\r\\n\\t}\\r\\n\\telse {\\r\\n\\t\\tthis.document = document;\\r\\n\\t}\\r\\n\\r\\n\\r\\n\\t// only IE needs this\\r\\n\\tvar win = this.document.defaultView || this.document.parentWindow;\\r\\n\\tthis._onunload = function () {\\r\\n\\t\\toThis.destroy();\\r\\n\\t};\\r\\n\\tif (win && typeof win.attachEvent != \\\"undefined\\\") {\\r\\n\\t\\twin.attachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n}\\r\\n\\r\\nSortableTable.gecko = navigator.product == \\\"Gecko\\\";\\r\\nSortableTable.msie = /msie/i.test(navigator.userAgent);\\r\\n// Mozilla is faster when doing the DOM manipulations on\\r\\n// an orphaned element. MSIE is not\\r\\nSortableTable.removeBeforeSort = SortableTable.gecko;\\r\\n\\r\\nSortableTable.prototype.onsort = function () {};\\r\\n\\r\\n// default sort order. true -> descending, false -> ascending\\r\\nSortableTable.prototype.defaultDescending = false;\\r\\n\\r\\n// shared between all instances. This is intentional to allow external files\\r\\n// to modify the prototype\\r\\nSortableTable.prototype._sortTypeInfo = {};\\r\\n\\r\\nSortableTable.prototype.setTable = function (oTable) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.element = oTable;\\r\\n\\tthis.setTHead( oTable.tHead );\\r\\n\\tthis.setTBody( oTable.tBodies[0] );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTHead = function (oTHead) {\\r\\n\\tif (this.tHead && this.tHead != oTHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.tHead = oTHead;\\r\\n\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTBody = function (oTBody) {\\r\\n\\tthis.tBody = oTBody;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\n// adds arrow containers and events\\r\\n// also binds sort type to the header cells so that reordering columns does\\r\\n// not break the sort types\\r\\nSortableTable.prototype.initHeader = function (oSortTypes) {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar doc = this.tHead.ownerDocument || this.tHead.document;\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img, c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (this.sortTypes[i] != null && this.sortTypes[i] != \\\"None\\\") {\\r\\n\\t\\t\\timg = doc.createElement(\\\"IMG\\\");\\r\\n\\t\\t\\timg.src = \\\"images/blank.png\\\";\\r\\n\\t\\t\\tc.appendChild(img);\\r\\n\\t\\t\\tif (this.sortTypes[i] != null)\\r\\n\\t\\t\\t\\tc._sortType = this.sortTypes[i];\\r\\n\\t\\t\\tif (typeof c.addEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.addEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.attachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.attachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\tc.onclick = this._headerOnclick;\\r\\n\\t\\t}\\r\\n\\t\\telse\\r\\n\\t\\t{\\r\\n\\t\\t\\tc.setAttribute( \\\"_sortType\\\", oSortTypes[i] );\\r\\n\\t\\t\\tc._sortType = \\\"None\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\tthis.updateHeaderArrows();\\r\\n};\\r\\n\\r\\n// remove arrows and events\\r\\nSortableTable.prototype.uninitHeader = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (c._sortType != null && c._sortType != \\\"None\\\") {\\r\\n\\t\\t\\tc.removeChild(c.lastChild);\\r\\n\\t\\t\\tif (typeof c.removeEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.removeEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.detachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.detachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\tc._sortType = null;\\r\\n\\t\\t\\tc.removeAttribute( \\\"_sortType\\\" );\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.updateHeaderArrows = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tif (cells[i]._sortType != null && cells[i]._sortType != \\\"None\\\") {\\r\\n\\t\\t\\timg = cells[i].lastChild;\\r\\n\\t\\t\\tif (i == this.sortColumn)\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow \\\" + (this.descending ? \\\"descending\\\" : \\\"ascending\\\");\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.headerOnclick = function (e) {\\r\\n\\t// find TD element\\r\\n\\tvar el = e.target || e.srcElement;\\r\\n\\twhile (el.tagName != \\\"TD\\\")\\r\\n\\t\\tel = el.parentNode;\\r\\n\\r\\n\\tthis.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\\r\\n};\\r\\n\\r\\n// IE returns wrong cellIndex when columns are hidden\\r\\nSortableTable.getCellIndex = function (oTd) {\\r\\n\\tvar cells = oTd.parentNode.childNodes\\r\\n\\tvar l = cells.length;\\r\\n\\tvar i;\\r\\n\\tfor (i = 0; cells[i] != oTd && i < l; i++)\\r\\n\\t\\t;\\r\\n\\treturn i;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getSortType = function (nColumn) {\\r\\n\\treturn this.sortTypes[nColumn] || \\\"String\\\";\\r\\n};\\r\\n\\r\\n// only nColumn is required\\r\\n// if bDescending is left out the old value is taken into account\\r\\n// if sSortType is left out the sort type is found from the sortTypes array\\r\\n\\r\\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\\r\\n\\tif (!this.tBody) return;\\r\\n\\tif (sSortType == null)\\r\\n\\t\\tsSortType = this.getSortType(nColumn);\\r\\n\\r\\n\\t// exit if None\\r\\n\\tif (sSortType == \\\"None\\\")\\r\\n\\t\\treturn;\\r\\n\\r\\n\\tif (bDescending == null) {\\r\\n\\t\\tif (this.sortColumn != nColumn)\\r\\n\\t\\t\\tthis.descending = this.defaultDescending;\\r\\n\\t\\telse\\r\\n\\t\\t\\tthis.descending = !this.descending;\\r\\n\\t}\\r\\n\\telse\\r\\n\\t\\tthis.descending = bDescending;\\r\\n\\r\\n\\tthis.sortColumn = nColumn;\\r\\n\\r\\n\\tif (typeof this.onbeforesort == \\\"function\\\")\\r\\n\\t\\tthis.onbeforesort();\\r\\n\\r\\n\\tvar f = this.getSortFunction(sSortType, nColumn);\\r\\n\\tvar a = this.getCache(sSortType, nColumn);\\r\\n\\tvar tBody = this.tBody;\\r\\n\\r\\n\\ta.sort(f);\\r\\n\\r\\n\\tif (this.descending)\\r\\n\\t\\ta.reverse();\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// remove from doc\\r\\n\\t\\tvar nextSibling = tBody.nextSibling;\\r\\n\\t\\tvar p = tBody.parentNode;\\r\\n\\t\\tp.removeChild(tBody);\\r\\n\\t}\\r\\n\\r\\n\\t// insert in the new order\\r\\n\\tvar l = a.length;\\r\\n\\tfor (var i = 0; i < l; i++)\\r\\n\\t\\ttBody.appendChild(a[i].element);\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// insert into doc\\r\\n\\t\\tp.insertBefore(tBody, nextSibling);\\r\\n\\t}\\r\\n\\r\\n\\tthis.updateHeaderArrows();\\r\\n\\r\\n\\tthis.destroyCache(a);\\r\\n\\r\\n\\tif (typeof this.onsort == \\\"function\\\")\\r\\n\\t\\tthis.onsort();\\r\\n};\\r\\n\\r\\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\\r\\n\\tvar oThis = this;\\r\\n\\tthis._asyncsort = function () {\\r\\n\\t\\toThis.sort(nColumn, bDescending, sSortType);\\r\\n\\t};\\r\\n\\twindow.setTimeout(this._asyncsort, 1);\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getCache = function (sType, nColumn) {\\r\\n\\tif (!this.tBody) return [];\\r\\n\\tvar rows = this.tBody.rows;\\r\\n\\tvar l = rows.length;\\r\\n\\tvar a = new Array(l);\\r\\n\\tvar r;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tr = rows[i];\\r\\n\\t\\ta[i] = {\\r\\n\\t\\t\\tvalue:\\t\\tthis.getRowValue(r, sType, nColumn),\\r\\n\\t\\t\\telement:\\tr\\r\\n\\t\\t};\\r\\n\\t};\\r\\n\\treturn a;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroyCache = function (oArray) {\\r\\n\\tvar l = oArray.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\toArray[i].value = null;\\r\\n\\t\\toArray[i].element = null;\\r\\n\\t\\toArray[i] = null;\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\\r\\n\\t// if we have defined a custom getRowValue use that\\r\\n\\tif (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\\r\\n\\t\\treturn this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\\r\\n\\r\\n\\tvar s;\\r\\n\\tvar c = oRow.cells[nColumn];\\r\\n\\tif (typeof c.innerText != \\\"undefined\\\")\\r\\n\\t\\ts = c.innerText;\\r\\n\\telse\\r\\n\\t\\ts = SortableTable.getInnerText(c);\\r\\n\\treturn this.getValueFromString(s, sType);\\r\\n};\\r\\n\\r\\nSortableTable.getInnerText = function (oNode) {\\r\\n\\tvar s = \\\"\\\";\\r\\n\\tvar cs = oNode.childNodes;\\r\\n\\tvar l = cs.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tswitch (cs[i].nodeType) {\\r\\n\\t\\t\\tcase 1: //ELEMENT_NODE\\r\\n\\t\\t\\t\\ts += SortableTable.getInnerText(cs[i]);\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\tcase 3:\\t//TEXT_NODE\\r\\n\\t\\t\\t\\ts += cs[i].nodeValue;\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\treturn s;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getValueFromString = function (sText, sType) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].getValueFromString( sText );\\r\\n\\treturn sText;\\r\\n\\t/*\\r\\n\\tswitch (sType) {\\r\\n\\t\\tcase \\\"Number\\\":\\r\\n\\t\\t\\treturn Number(sText);\\r\\n\\t\\tcase \\\"CaseInsensitiveString\\\":\\r\\n\\t\\t\\treturn sText.toUpperCase();\\r\\n\\t\\tcase \\\"Date\\\":\\r\\n\\t\\t\\tvar parts = sText.split(\\\"-\\\");\\r\\n\\t\\t\\tvar d = new Date(0);\\r\\n\\t\\t\\td.setFullYear(parts[0]);\\r\\n\\t\\t\\td.setDate(parts[2]);\\r\\n\\t\\t\\td.setMonth(parts[1] - 1);\\r\\n\\t\\t\\treturn d.valueOf();\\r\\n\\t}\\r\\n\\treturn sText;\\r\\n\\t*/\\r\\n\\t};\\r\\n\\r\\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].compare;\\r\\n\\treturn SortableTable.basicCompare;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroy = function () {\\r\\n\\tthis.uninitHeader();\\r\\n\\tvar win = this.document.parentWindow;\\r\\n\\tif (win && typeof win.detachEvent != \\\"undefined\\\") {\\t// only IE needs this\\r\\n\\t\\twin.detachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n\\tthis._onunload = null;\\r\\n\\tthis.element = null;\\r\\n\\tthis.tHead = null;\\r\\n\\tthis.tBody = null;\\r\\n\\tthis.document = null;\\r\\n\\tthis._headerOnclick = null;\\r\\n\\tthis.sortTypes = null;\\r\\n\\tthis._asyncsort = null;\\r\\n\\tthis.onsort = null;\\r\\n};\\r\\n\\r\\n// Adds a sort type to all instance of SortableTable\\r\\n// sType : String - the identifier of the sort type\\r\\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\\r\\n// string and casts it to a desired format. If left out the string is just\\r\\n// returned\\r\\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\\r\\n// compare function. Takes two values and compares them. If left out less than,\\r\\n// <, compare is used\\r\\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\\r\\n// that takes the row and the column index and returns the value used to compare.\\r\\n// If left out then the innerText is first taken for the cell and then the\\r\\n// fGetValueFromString is used to convert that string the desired value and type\\r\\n\\r\\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\\r\\n\\tthis._sortTypeInfo[sType] = {\\r\\n\\t\\ttype:\\t\\t\\t\\tsType,\\r\\n\\t\\tgetValueFromString:\\tfGetValueFromString || SortableTable.idFunction,\\r\\n\\t\\tcompare:\\t\\t\\tfCompareFunction || SortableTable.basicCompare,\\r\\n\\t\\tgetRowValue:\\t\\tfGetRowValue\\r\\n\\t};\\r\\n};\\r\\n\\r\\n// this removes the sort type from all instances of SortableTable\\r\\nSortableTable.prototype.removeSortType = function (sType) {\\r\\n\\tdelete this._sortTypeInfo[sType];\\r\\n};\\r\\n\\r\\nSortableTable.basicCompare = function compare(n1, n2) {\\r\\n\\tif (n1.value < n2.value)\\r\\n\\t\\treturn -1;\\r\\n\\tif (n2.value < n1.value)\\r\\n\\t\\treturn 1;\\r\\n\\treturn 0;\\r\\n};\\r\\n\\r\\nSortableTable.idFunction = function (x) {\\r\\n\\treturn x;\\r\\n};\\r\\n\\r\\nSortableTable.toUpperCase = function (s) {\\r\\n\\treturn s.toUpperCase();\\r\\n};\\r\\n\\r\\nSortableTable.toDate = function (s) {\\r\\n\\tvar parts = s.split(\\\"-\\\");\\r\\n\\tvar d = new Date(0);\\r\\n\\td.setFullYear(parts[0]);\\r\\n\\td.setDate(parts[2]);\\r\\n\\td.setMonth(parts[1] - 1);\\r\\n\\treturn d.valueOf();\\r\\n};\\r\\n\\r\\n\\r\\n// add sort types\\r\\nSortableTable.prototype.addSortType(\\\"Number\\\", Number);\\r\\nSortableTable.prototype.addSortType(\\\"CaseInsensitiveString\\\", SortableTable.toUpperCase);\\r\\nSortableTable.prototype.addSortType(\\\"Date\\\", SortableTable.toDate);\\r\\nSortableTable.prototype.addSortType(\\\"String\\\");\\r\\n// None is a special case\\r\\n\"","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nmodule.exports = function(src) {\n\tfunction log(error) {\n\t\t(typeof console !== \"undefined\")\n\t\t&& (console.error || console.log)(\"[Script Loader]\", error);\n\t}\n\n\t// Check for IE =< 8\n\tfunction isIE() {\n\t\treturn typeof attachEvent !== \"undefined\" && typeof addEventListener === \"undefined\";\n\t}\n\n\ttry {\n\t\tif (typeof execScript !== \"undefined\" && isIE()) {\n\t\t\texecScript(src);\n\t\t} else if (typeof eval !== \"undefined\") {\n\t\t\teval.call(null, src);\n\t\t} else {\n\t\t\tlog(\"EvalError: No eval function available\");\n\t\t}\n\t} catch (error) {\n\t\tlog(error);\n\t}\n}\n","require(\"!!C:\\\\projects\\\\dev\\\\github\\\\TableFilter\\\\node_modules\\\\script-loader\\\\addScript.js\")(require(\"!!C:\\\\projects\\\\dev\\\\github\\\\TableFilter\\\\node_modules\\\\raw-loader\\\\index.js!C:\\\\projects\\\\dev\\\\github\\\\TableFilter\\\\libs\\\\sortabletable.js\")+\"\\n\\n// SCRIPT-LOADER FOOTER\\n//# sourceURL=script:///C:/projects/dev/github/TableFilter/libs/sortabletable.js\")","var map = {\n\t\"./array\": \"./src/array.js\",\n\t\"./array.js\": \"./src/array.js\",\n\t\"./const\": \"./src/const.js\",\n\t\"./const.js\": \"./src/const.js\",\n\t\"./cookie\": \"./src/cookie.js\",\n\t\"./cookie.js\": \"./src/cookie.js\",\n\t\"./dom\": \"./src/dom.js\",\n\t\"./dom.js\": \"./src/dom.js\",\n\t\"./emitter\": \"./src/emitter.js\",\n\t\"./emitter.js\": \"./src/emitter.js\",\n\t\"./event\": \"./src/event.js\",\n\t\"./event.js\": \"./src/event.js\",\n\t\"./extensions/advancedGrid/adapterEzEditTable\": \"./src/extensions/advancedGrid/adapterEzEditTable.js\",\n\t\"./extensions/advancedGrid/adapterEzEditTable.js\": \"./src/extensions/advancedGrid/adapterEzEditTable.js\",\n\t\"./extensions/advancedGrid/advancedGrid\": \"./src/extensions/advancedGrid/advancedGrid.js\",\n\t\"./extensions/advancedGrid/advancedGrid.js\": \"./src/extensions/advancedGrid/advancedGrid.js\",\n\t\"./extensions/colOps/colOps\": \"./src/extensions/colOps/colOps.js\",\n\t\"./extensions/colOps/colOps.js\": \"./src/extensions/colOps/colOps.js\",\n\t\"./extensions/colsVisibility/colsVisibility\": \"./src/extensions/colsVisibility/colsVisibility.js\",\n\t\"./extensions/colsVisibility/colsVisibility.js\": \"./src/extensions/colsVisibility/colsVisibility.js\",\n\t\"./extensions/filtersVisibility/filtersVisibility\": \"./src/extensions/filtersVisibility/filtersVisibility.js\",\n\t\"./extensions/filtersVisibility/filtersVisibility.js\": \"./src/extensions/filtersVisibility/filtersVisibility.js\",\n\t\"./extensions/sort/adapterSortabletable\": \"./src/extensions/sort/adapterSortabletable.js\",\n\t\"./extensions/sort/adapterSortabletable.js\": \"./src/extensions/sort/adapterSortabletable.js\",\n\t\"./extensions/sort/sort\": \"./src/extensions/sort/sort.js\",\n\t\"./extensions/sort/sort.js\": \"./src/extensions/sort/sort.js\",\n\t\"./feature\": \"./src/feature.js\",\n\t\"./feature.js\": \"./src/feature.js\",\n\t\"./modules/alternateRows\": \"./src/modules/alternateRows.js\",\n\t\"./modules/alternateRows.js\": \"./src/modules/alternateRows.js\",\n\t\"./modules/baseDropdown\": \"./src/modules/baseDropdown.js\",\n\t\"./modules/baseDropdown.js\": \"./src/modules/baseDropdown.js\",\n\t\"./modules/checkList\": \"./src/modules/checkList.js\",\n\t\"./modules/checkList.js\": \"./src/modules/checkList.js\",\n\t\"./modules/clearButton\": \"./src/modules/clearButton.js\",\n\t\"./modules/clearButton.js\": \"./src/modules/clearButton.js\",\n\t\"./modules/dateType\": \"./src/modules/dateType.js\",\n\t\"./modules/dateType.js\": \"./src/modules/dateType.js\",\n\t\"./modules/dropdown\": \"./src/modules/dropdown.js\",\n\t\"./modules/dropdown.js\": \"./src/modules/dropdown.js\",\n\t\"./modules/gridLayout\": \"./src/modules/gridLayout.js\",\n\t\"./modules/gridLayout.js\": \"./src/modules/gridLayout.js\",\n\t\"./modules/hash\": \"./src/modules/hash.js\",\n\t\"./modules/hash.js\": \"./src/modules/hash.js\",\n\t\"./modules/help\": \"./src/modules/help.js\",\n\t\"./modules/help.js\": \"./src/modules/help.js\",\n\t\"./modules/highlightKeywords\": \"./src/modules/highlightKeywords.js\",\n\t\"./modules/highlightKeywords.js\": \"./src/modules/highlightKeywords.js\",\n\t\"./modules/loader\": \"./src/modules/loader.js\",\n\t\"./modules/loader.js\": \"./src/modules/loader.js\",\n\t\"./modules/markActiveColumns\": \"./src/modules/markActiveColumns.js\",\n\t\"./modules/markActiveColumns.js\": \"./src/modules/markActiveColumns.js\",\n\t\"./modules/noResults\": \"./src/modules/noResults.js\",\n\t\"./modules/noResults.js\": \"./src/modules/noResults.js\",\n\t\"./modules/paging\": \"./src/modules/paging.js\",\n\t\"./modules/paging.js\": \"./src/modules/paging.js\",\n\t\"./modules/popupFilter\": \"./src/modules/popupFilter.js\",\n\t\"./modules/popupFilter.js\": \"./src/modules/popupFilter.js\",\n\t\"./modules/rowsCounter\": \"./src/modules/rowsCounter.js\",\n\t\"./modules/rowsCounter.js\": \"./src/modules/rowsCounter.js\",\n\t\"./modules/state\": \"./src/modules/state.js\",\n\t\"./modules/state.js\": \"./src/modules/state.js\",\n\t\"./modules/statusBar\": \"./src/modules/statusBar.js\",\n\t\"./modules/statusBar.js\": \"./src/modules/statusBar.js\",\n\t\"./modules/storage\": \"./src/modules/storage.js\",\n\t\"./modules/storage.js\": \"./src/modules/storage.js\",\n\t\"./modules/toolbar\": \"./src/modules/toolbar.js\",\n\t\"./modules/toolbar.js\": \"./src/modules/toolbar.js\",\n\t\"./number\": \"./src/number.js\",\n\t\"./number.js\": \"./src/number.js\",\n\t\"./root\": \"./src/root.js\",\n\t\"./root.js\": \"./src/root.js\",\n\t\"./settings\": \"./src/settings.js\",\n\t\"./settings.js\": \"./src/settings.js\",\n\t\"./sort\": \"./src/sort.js\",\n\t\"./sort.js\": \"./src/sort.js\",\n\t\"./string\": \"./src/string.js\",\n\t\"./string.js\": \"./src/string.js\",\n\t\"./tablefilter\": \"./src/tablefilter.js\",\n\t\"./tablefilter.js\": \"./src/tablefilter.js\",\n\t\"./tfBase\": \"./src/tfBase.js\",\n\t\"./tfBase.js\": \"./src/tfBase.js\",\n\t\"./types\": \"./src/types.js\",\n\t\"./types.js\": \"./src/types.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\tvar module = __webpack_require__(id);\n\treturn module;\n}\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) { // check for number or string\n\t\tvar e = new Error('Cannot find module \"' + req + '\".');\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn id;\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src sync recursive ^\\\\.\\\\/.*$\";","import {Feature} from '../../feature';\r\nimport {tag} from '../../dom';\r\nimport {INPUT} from '../../const';\r\nimport {defaultsStr} from '../../settings';\r\nimport {root} from '../../root';\r\n\r\nconst INSTANTIATION_ERROR = `Failed to instantiate EditTable object.\r\n \\n\"ezEditTable\" dependency not found.`;\r\n\r\n/**\r\n * Adapter module for ezEditTable, an external library providing advanced\r\n * grid features (selection and edition):\r\n * http://codecanyon.net/item/ezedittable-enhance-html-tables/2425123?ref=koalyptus\r\n */\r\nexport default class AdapterEzEditTable extends Feature {\r\n\r\n /**\r\n * Creates an instance of AdapterEzEditTable\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} cfg Configuration options for ezEditTable library\r\n */\r\n constructor(tf, cfg) {\r\n super(tf, cfg.name);\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(cfg.description, 'ezEditTable adapter');\r\n\r\n /**\r\n * Filename of ezEditTable library\r\n * @type {String}\r\n */\r\n this.filename = defaultsStr(cfg.filename, 'ezEditTable.js');\r\n\r\n /**\r\n * Path to ezEditTable library\r\n * @type {String}\r\n */\r\n this.vendorPath = cfg.vendor_path;\r\n\r\n /**\r\n * Load ezEditTable stylesheet\r\n * @type {Boolean}\r\n */\r\n this.loadStylesheet = Boolean(cfg.load_stylesheet);\r\n\r\n /**\r\n * Path to ezEditTable stylesheet\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(cfg.stylesheet,\r\n this.vendorPath + 'ezEditTable.css');\r\n\r\n /**\r\n * Name of ezEditTable stylesheet\r\n * @type {String}\r\n */\r\n this.stylesheetName = defaultsStr(cfg.stylesheet_name,\r\n 'ezEditTableCss');\r\n\r\n // Enable the ezEditTable's scroll into view behaviour if grid layout on\r\n cfg.scroll_into_view = cfg.scroll_into_view === false ?\r\n false : tf.gridLayout;\r\n\r\n /**\r\n * ezEditTable instance\r\n * @type {EditTable}\r\n * @private\r\n */\r\n this._ezEditTable = null;\r\n\r\n /**\r\n * ezEditTable configuration\r\n * @private\r\n */\r\n this.cfg = cfg;\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Conditionally load ezEditTable library and set advanced grid\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n if (root.EditTable) {\r\n this._setAdvancedGrid();\r\n } else {\r\n let path = this.vendorPath + this.filename;\r\n tf.import(this.filename, path, () => this._setAdvancedGrid());\r\n }\r\n if (this.loadStylesheet && !tf.isImported(this.stylesheet, 'link')) {\r\n tf.import(this.stylesheetName, this.stylesheet, null, 'link');\r\n }\r\n\r\n // TODO: hack to prevent ezEditTable enter key event hijaking.\r\n // Needs to be fixed in the vendor's library\r\n this.emitter.on(['filter-focus', 'filter-blur'],\r\n () => this._toggleForInputFilter());\r\n\r\n /**\r\n * @inherited\r\n */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Instantiate ezEditTable component for advanced grid features\r\n * @private\r\n */\r\n _setAdvancedGrid() {\r\n let tf = this.tf;\r\n\r\n //start row for EditTable constructor needs to be calculated\r\n let startRow,\r\n cfg = this.cfg,\r\n thead = tag(tf.dom(), 'thead');\r\n\r\n //if thead exists and startRow not specified, startRow is calculated\r\n //automatically by EditTable\r\n if (thead.length > 0 && !cfg.startRow) {\r\n startRow = undefined;\r\n }\r\n //otherwise startRow config property if any or TableFilter refRow\r\n else {\r\n startRow = cfg.startRow || tf.refRow;\r\n }\r\n\r\n cfg.base_path = cfg.base_path || tf.basePath + 'ezEditTable/';\r\n let editable = cfg.editable;\r\n let selectable = cfg.selection;\r\n\r\n if (selectable) {\r\n cfg.default_selection = cfg.default_selection || 'row';\r\n }\r\n //CSS Styles\r\n cfg.active_cell_css = cfg.active_cell_css || 'ezETSelectedCell';\r\n\r\n let _lastValidRowIndex = 0;\r\n let _lastRowIndex = 0;\r\n\r\n if (selectable) {\r\n //Row navigation needs to be calculated according to TableFilter's\r\n //validRowsIndex array\r\n let onAfterSelection = function (et, selectedElm, e) {\r\n let slc = et.Selection;\r\n //Next valid filtered row needs to be selected\r\n let doSelect = function (nextRowIndex) {\r\n if (et.defaultSelection === 'row') {\r\n /* eslint-disable */\r\n slc.SelectRowByIndex(nextRowIndex);\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n et.ClearSelections();\r\n /* eslint-enable */\r\n let cellIndex = selectedElm.cellIndex,\r\n row = tf.dom().rows[nextRowIndex];\r\n if (et.defaultSelection === 'both') {\r\n /* eslint-disable */\r\n slc.SelectRowByIndex(nextRowIndex);\r\n /* eslint-enable */\r\n }\r\n if (row) {\r\n /* eslint-disable */\r\n slc.SelectCell(row.cells[cellIndex]);\r\n /* eslint-enable */\r\n }\r\n }\r\n //Table is filtered\r\n if (tf.validRowsIndex.length !== tf.getRowsNb()) {\r\n let r = tf.dom().rows[nextRowIndex];\r\n if (r) {\r\n r.scrollIntoView(false);\r\n }\r\n if (cell) {\r\n if (cell.cellIndex === (tf.getCellsNb() - 1) &&\r\n tf.gridLayout) {\r\n tf.tblCont.scrollLeft = 100000000;\r\n }\r\n else if (cell.cellIndex === 0 && tf.gridLayout) {\r\n tf.tblCont.scrollLeft = 0;\r\n } else {\r\n cell.scrollIntoView(false);\r\n }\r\n }\r\n }\r\n };\r\n\r\n //table is not filtered\r\n if (!tf.validRowsIndex) {\r\n return;\r\n }\r\n let validIndexes = tf.validRowsIndex,\r\n validIdxLen = validIndexes.length,\r\n row = et.defaultSelection !== 'row' ?\r\n selectedElm.parentNode : selectedElm,\r\n //cell for default_selection = 'both' or 'cell'\r\n cell = selectedElm.nodeName === 'TD' ? selectedElm : null,\r\n /* eslint-disable */\r\n keyCode = e !== undefined ? et.Event.GetKey(e) : 0,\r\n /* eslint-enable */\r\n isRowValid = validIndexes.indexOf(row.rowIndex) !== -1,\r\n nextRowIndex,\r\n paging = tf.feature('paging'),\r\n //pgup/pgdown keys\r\n d = keyCode === 34 || keyCode === 33 ?\r\n (paging && paging.pageLength || et.nbRowsPerPage) :\r\n 1;\r\n\r\n //If next row is not valid, next valid filtered row needs to be\r\n //calculated\r\n if (!isRowValid) {\r\n //Selection direction up/down\r\n if (row.rowIndex > _lastRowIndex) {\r\n //last row\r\n if (row.rowIndex >= validIndexes[validIdxLen - 1]) {\r\n nextRowIndex = validIndexes[validIdxLen - 1];\r\n } else {\r\n let calcRowIndex = (_lastValidRowIndex + d);\r\n if (calcRowIndex > (validIdxLen - 1)) {\r\n nextRowIndex = validIndexes[validIdxLen - 1];\r\n } else {\r\n nextRowIndex = validIndexes[calcRowIndex];\r\n }\r\n }\r\n } else {\r\n //first row\r\n if (row.rowIndex <= validIndexes[0]) {\r\n nextRowIndex = validIndexes[0];\r\n } else {\r\n let v = validIndexes[_lastValidRowIndex - d];\r\n nextRowIndex = v ? v : validIndexes[0];\r\n }\r\n }\r\n _lastRowIndex = row.rowIndex;\r\n doSelect(nextRowIndex);\r\n } else {\r\n //If filtered row is valid, special calculation for\r\n //pgup/pgdown keys\r\n if (keyCode !== 34 && keyCode !== 33) {\r\n _lastValidRowIndex = validIndexes.indexOf(row.rowIndex);\r\n _lastRowIndex = row.rowIndex;\r\n } else {\r\n if (keyCode === 34) { //pgdown\r\n //last row\r\n if ((_lastValidRowIndex + d) <= (validIdxLen - 1)) {\r\n nextRowIndex = validIndexes[\r\n _lastValidRowIndex + d];\r\n } else {\r\n nextRowIndex = [validIdxLen - 1];\r\n }\r\n } else { //pgup\r\n //first row\r\n if ((_lastValidRowIndex - d) <= validIndexes[0]) {\r\n nextRowIndex = validIndexes[0];\r\n } else {\r\n nextRowIndex = validIndexes[\r\n _lastValidRowIndex - d];\r\n }\r\n }\r\n _lastRowIndex = nextRowIndex;\r\n _lastValidRowIndex = validIndexes.indexOf(nextRowIndex);\r\n doSelect(nextRowIndex);\r\n }\r\n }\r\n };\r\n\r\n //Page navigation has to be enforced whenever selected row is out of\r\n //the current page range\r\n let onBeforeSelection = function (et, selectedElm) {\r\n let row = et.defaultSelection !== 'row' ?\r\n selectedElm.parentNode : selectedElm;\r\n if (tf.paging) {\r\n if (tf.feature('paging').nbPages > 1) {\r\n let paging = tf.feature('paging');\r\n //page length is re-assigned in case it has changed\r\n et.nbRowsPerPage = paging.pageLength;\r\n let validIndexes = tf.validRowsIndex,\r\n validIdxLen = validIndexes.length,\r\n pagingEndRow = parseInt(paging.startPagingRow, 10) +\r\n parseInt(paging.pageLength, 10);\r\n let rowIndex = row.rowIndex;\r\n\r\n if ((rowIndex === validIndexes[validIdxLen - 1]) &&\r\n paging.currentPageNb !== paging.nbPages) {\r\n paging.setPage('last');\r\n }\r\n else if ((rowIndex === validIndexes[0]) &&\r\n paging.currentPageNb !== 1) {\r\n paging.setPage('first');\r\n }\r\n else if (rowIndex > validIndexes[pagingEndRow - 1] &&\r\n rowIndex < validIndexes[validIdxLen - 1]) {\r\n paging.setPage('next');\r\n }\r\n else if (\r\n rowIndex < validIndexes[paging.startPagingRow] &&\r\n rowIndex > validIndexes[0]) {\r\n paging.setPage('previous');\r\n }\r\n }\r\n }\r\n };\r\n\r\n //Selected row needs to be visible when paging is activated\r\n if (tf.paging) {\r\n tf.feature('paging').onAfterChangePage = function (paging) {\r\n let advGrid = paging.tf.extension('advancedGrid');\r\n let et = advGrid._ezEditTable;\r\n let slc = et.Selection;\r\n /* eslint-disable */\r\n let row = slc.GetActiveRow();\r\n /* eslint-enable */\r\n if (row) {\r\n row.scrollIntoView(false);\r\n }\r\n /* eslint-disable */\r\n let cell = slc.GetActiveCell();\r\n /* eslint-enable */\r\n if (cell) {\r\n cell.scrollIntoView(false);\r\n }\r\n };\r\n }\r\n\r\n //Rows navigation when rows are filtered is performed with the\r\n //EditTable row selection callback events\r\n if (cfg.default_selection === 'row') {\r\n let fnB = cfg.on_before_selected_row;\r\n cfg.on_before_selected_row = function () {\r\n var args = arguments;\r\n onBeforeSelection(args[0], args[1], args[2]);\r\n if (fnB) {\r\n fnB.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n let fnA = cfg.on_after_selected_row;\r\n cfg.on_after_selected_row = function () {\r\n var args = arguments;\r\n onAfterSelection(args[0], args[1], args[2]);\r\n if (fnA) {\r\n fnA.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n } else {\r\n let fnD = cfg.on_before_selected_cell;\r\n cfg.on_before_selected_cell = function () {\r\n var args = arguments;\r\n onBeforeSelection(args[0], args[1], args[2]);\r\n if (fnD) {\r\n fnD.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n let fnC = cfg.on_after_selected_cell;\r\n cfg.on_after_selected_cell = function () {\r\n var args = arguments;\r\n onAfterSelection(args[0], args[1], args[2]);\r\n if (fnC) {\r\n fnC.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n }\r\n }\r\n if (editable) {\r\n //Added or removed rows, TF rows number needs to be re-calculated\r\n let fnE = cfg.on_added_dom_row;\r\n cfg.on_added_dom_row = function () {\r\n var args = arguments;\r\n tf.nbFilterableRows++;\r\n if (!tf.paging) {\r\n tf.emitter.emit('rows-changed', tf, this);\r\n } else {\r\n tf.nbFilterableRows++;\r\n tf.paging = false;\r\n tf.feature('paging').destroy();\r\n tf.feature('paging').reset();\r\n }\r\n if (tf.alternateRows) {\r\n tf.feature('alternateRows').init();\r\n }\r\n if (fnE) {\r\n fnE.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n if (cfg.actions && cfg.actions['delete']) {\r\n let fnF = cfg.actions['delete'].on_after_submit;\r\n cfg.actions['delete'].on_after_submit = function () {\r\n var args = arguments;\r\n tf.nbFilterableRows--;\r\n if (!tf.paging) {\r\n tf.emitter.emit('rows-changed', tf, this);\r\n } else {\r\n tf.nbFilterableRows--;\r\n tf.paging = false;\r\n tf.feature('paging').destroy();\r\n tf.feature('paging').reset(false);\r\n }\r\n if (tf.alternateRows) {\r\n tf.feature('alternateRows').init();\r\n }\r\n if (fnF) {\r\n fnF.call(null, args[0], args[1]);\r\n }\r\n };\r\n }\r\n }\r\n\r\n try {\r\n /* eslint-disable */\r\n this._ezEditTable = new EditTable(tf.id, cfg, startRow);\r\n this._ezEditTable.Init();\r\n /* eslint-enable */\r\n } catch (e) { throw new Error(INSTANTIATION_ERROR); }\r\n\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Reset advanced grid when previously removed\r\n */\r\n reset() {\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable) {\r\n if (this.cfg.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Set();\r\n /* eslint-enable */\r\n }\r\n if (this.cfg.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Set();\r\n /* eslint-enable */\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Toggle behaviour\r\n */\r\n toggle() {\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Remove();\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Set();\r\n /* eslint-enable */\r\n }\r\n if (ezEditTable.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Remove();\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Set();\r\n /* eslint-enable */\r\n }\r\n }\r\n\r\n _toggleForInputFilter() {\r\n let tf = this.tf;\r\n if (!tf.getActiveFilterId()) {\r\n return;\r\n }\r\n let colIndex = tf.getColumnIndexFromFilterId(tf.getActiveFilterId());\r\n let filterType = tf.getFilterType(colIndex);\r\n if (filterType === INPUT) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n /**\r\n * Remove advanced grid\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable) {\r\n if (this.cfg.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.ClearSelections();\r\n ezEditTable.Selection.Remove();\r\n /* eslint-enable */\r\n }\r\n if (this.cfg.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Remove();\r\n /* eslint-enable */\r\n }\r\n }\r\n\r\n this.emitter.off(['filter-focus', 'filter-blur'],\r\n () => this._toggleForInputFilter());\r\n this.initialized = false;\r\n }\r\n}\r\n","import AdapterEzEditTable from './adapterEzEditTable';\r\n\r\nexport default AdapterEzEditTable;","import {Feature} from '../../feature';\r\nimport {createText, elm} from '../../dom';\r\nimport {isArray, isEmpty, EMPTY_FN} from '../../types';\r\nimport {numSortAsc} from '../../sort';\r\nimport {FORMATTED_NUMBER} from '../../const';\r\nimport formatNumber from 'format-number';\r\nimport {defaultsFn, defaultsArr} from '../../settings';\r\nimport {bound} from '../../event';\r\n\r\nconst EVENTS = [\r\n 'after-filtering',\r\n 'after-page-change',\r\n 'after-page-length-change'\r\n];\r\n\r\nconst SUM = 'sum';\r\nconst MEAN = 'mean';\r\nconst MIN = 'min';\r\nconst MAX = 'max';\r\nconst MEDIAN = 'median';\r\nconst Q1 = 'q1';\r\nconst Q3 = 'q3';\r\n\r\n/**\r\n * Column calculations extension\r\n */\r\nexport default class ColOps extends Feature {\r\n\r\n /**\r\n * Creates an instance of ColOps\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} opts Configuration object\r\n */\r\n constructor(tf, opts) {\r\n super(tf, opts.name);\r\n\r\n /**\r\n * Callback fired before columns operations start\r\n * @type {Function}\r\n */\r\n this.onBeforeOperation = defaultsFn(opts.on_before_operation, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after columns operations are completed\r\n * @type {Function}\r\n */\r\n this.onAfterOperation = defaultsFn(opts.on_after_operation, EMPTY_FN);\r\n\r\n /**\r\n * Configuration options\r\n * @type {Object}\r\n */\r\n this.opts = opts;\r\n\r\n /**\r\n * List of DOM element IDs containing column's calculation result\r\n * @type {Array}\r\n */\r\n this.labelIds = defaultsArr(opts.id, []);\r\n\r\n /**\r\n * List of columns' indexes for calculations\r\n * @type {Array}\r\n */\r\n this.colIndexes = defaultsArr(opts.col, []);\r\n\r\n /**\r\n * List of operations - possible values: 'sum', 'mean', 'min', 'max',\r\n * 'median', 'q1', 'q3'\r\n * @type {Array}\r\n */\r\n this.operations = defaultsArr(opts.operation, []);\r\n\r\n /**\r\n * List of write methods used to write the result - possible values:\r\n * 'innerHTML', 'setValue', 'createTextNode'\r\n * @type {Array}\r\n */\r\n this.outputTypes = defaultsArr(opts.write_method, []);\r\n\r\n /**\r\n * List of format objects used for formatting the result -\r\n * refer to https://github.com/componitable/format-number to check\r\n * configuration options\r\n * @type {Array}\r\n */\r\n this.formatResults = defaultsArr(opts.format_result, []);\r\n\r\n /**\r\n * List of row indexes displaying the results\r\n * @type {Array}\r\n */\r\n this.totRowIndexes = defaultsArr(opts.tot_row_index, []);\r\n\r\n /**\r\n * List of row indexes excluded from calculations\r\n * @type {Array}\r\n */\r\n this.excludeRows = defaultsArr(opts.exclude_row, []);\r\n\r\n /**\r\n * List of decimal precision for calculation results\r\n * @type {Array}\r\n */\r\n this.decimalPrecisions = defaultsArr(opts.decimal_precision, 2);\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initializes ColOps instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n // subscribe to events\r\n this.emitter.on(EVENTS, bound(this.calcAll, this));\r\n\r\n this.calcAll();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Calculates columns' values\r\n * Configuration options are stored in 'opts' property\r\n * - 'id' contains ids of elements showing result (array)\r\n * - 'col' contains the columns' indexes (array)\r\n * - 'operation' contains operation type (array, values: 'sum', 'mean',\r\n * 'min', 'max', 'median', 'q1', 'q3')\r\n * - 'write_method' array defines which method to use for displaying the\r\n * result (innerHTML, setValue, createTextNode) - default: 'innerHTML'\r\n * - 'tot_row_index' defines in which row results are displayed\r\n * (integers array)\r\n *\r\n * - changes made by Nuovella:\r\n * (1) optimized the routine (now it will only process each column once),\r\n * (2) added calculations for the median, lower and upper quartile.\r\n */\r\n calcAll() {\r\n let tf = this.tf;\r\n if (!tf.isInitialized()) {\r\n return;\r\n }\r\n\r\n this.onBeforeOperation(tf, this);\r\n this.emitter.emit('before-column-operation', tf, this);\r\n\r\n let { colIndexes, operations: colOperations, outputTypes,\r\n totRowIndexes, excludeRows, formatResults,\r\n decimalPrecisions } = this;\r\n\r\n //nuovella: determine unique list of columns to operate on\r\n let uIndexes = [];\r\n colIndexes.forEach((val) => {\r\n if (uIndexes.indexOf(val) === -1) {\r\n uIndexes.push(val);\r\n }\r\n });\r\n\r\n let nbCols = uIndexes.length,\r\n rows = tf.dom().rows,\r\n colValues = [];\r\n\r\n for (let u = 0; u < nbCols; u++) {\r\n //this retrieves col values\r\n //use uIndexes because we only want to pass through this loop\r\n //once for each column get the values in this unique column\r\n colValues.push(\r\n tf.getVisibleColumnData(uIndexes[u], false, excludeRows)\r\n );\r\n\r\n let curValues = colValues[u];\r\n\r\n //next: calculate all operations for this column\r\n let result = 0,\r\n operations = [],\r\n precisions = [],\r\n labels = [],\r\n writeType,\r\n formatResult = [],\r\n idx = 0;\r\n\r\n for (let k = 0; k < colIndexes.length; k++) {\r\n if (colIndexes[k] !== uIndexes[u]) {\r\n continue;\r\n }\r\n operations[idx] = (colOperations[k] || 'sum').toLowerCase();\r\n precisions[idx] = decimalPrecisions[k];\r\n labels[idx] = this.labelIds[k];\r\n writeType = isArray(outputTypes) ? outputTypes[k] : null;\r\n formatResult[idx] =\r\n this.configureFormat(uIndexes[u], formatResults[k]);\r\n idx++;\r\n }\r\n\r\n for (let i = 0; i < idx; i++) {\r\n // emit values before column calculation\r\n this.emitter.emit(\r\n 'before-column-calc',\r\n tf,\r\n this,\r\n uIndexes[u],\r\n curValues,\r\n operations[i],\r\n precisions[i]\r\n );\r\n\r\n result = Number(this.calc(curValues, operations[i], null));\r\n\r\n // emit column calculation result\r\n this.emitter.emit(\r\n 'column-calc',\r\n tf,\r\n this,\r\n uIndexes[u],\r\n result,\r\n operations[i],\r\n precisions[i]\r\n );\r\n\r\n // write result in expected DOM element\r\n this.writeResult(\r\n result,\r\n labels[i],\r\n writeType,\r\n precisions[i],\r\n formatResult[i]\r\n );\r\n\r\n }//for i\r\n\r\n // row(s) with result are always visible\r\n let totRow = totRowIndexes && totRowIndexes[u] ?\r\n rows[totRowIndexes[u]] : null;\r\n if (totRow) {\r\n totRow.style.display = '';\r\n }\r\n }//for u\r\n\r\n this.onAfterOperation(tf, this);\r\n this.emitter.emit('after-column-operation', tf, this);\r\n }\r\n\r\n /**\r\n * Make desired calculation on specified column.\r\n * @param {Number} colIndex Column index\r\n * @param {String} [operation=SUM] Operation type\r\n * @param {Number} precision Decimal precision\r\n * @returns {Number}\r\n */\r\n columnCalc(colIndex, operation = SUM, precision) {\r\n let excludeRows = this.excludeRows || [];\r\n let colValues = tf.getVisibleColumnData(colIndex, false, excludeRows);\r\n\r\n return Number(this.calc(colValues, operation, precision));\r\n }\r\n\r\n /**\r\n * Make calculation on passed values.\r\n * @param {Array} values List of values\r\n * @param {String} [operation=SUM] Optional operation type\r\n * @param {Number} precision Optional result precision\r\n * @returns {Number}\r\n * @private\r\n */\r\n calc(colValues, operation = SUM, precision) {\r\n let result = 0;\r\n\r\n if (operation === Q1 || operation === Q3 || operation === MEDIAN) {\r\n colValues = this.sortColumnValues(colValues, numSortAsc);\r\n }\r\n\r\n switch (operation) {\r\n case MEAN:\r\n result = this.calcMean(colValues);\r\n break;\r\n case SUM:\r\n result = this.calcSum(colValues);\r\n break;\r\n case MIN:\r\n result = this.calcMin(colValues);\r\n break;\r\n case MAX:\r\n result = this.calcMax(colValues);\r\n break;\r\n case MEDIAN:\r\n result = this.calcMedian(colValues);\r\n break;\r\n case Q1:\r\n result = this.calcQ1(colValues);\r\n break;\r\n case Q3:\r\n result = this.calcQ3(colValues);\r\n break;\r\n }\r\n\r\n return isEmpty(precision) ? result : result.toFixed(precision);\r\n }\r\n\r\n /**\r\n * Calculate the sum of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcSum(values = []) {\r\n if (isEmpty(values)) {\r\n return 0;\r\n }\r\n let result = values.reduce((x, y) => Number(x) + Number(y));\r\n return result;\r\n }\r\n\r\n /**\r\n * Calculate the mean of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMean(values = []) {\r\n let result = this.calcSum(values) / values.length;\r\n return Number(result);\r\n }\r\n\r\n /**\r\n * Calculate the max value of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMax(values = []) {\r\n return Math.max.apply(null, values);\r\n }\r\n\r\n /**\r\n * Calculate the min value of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMin(values = []) {\r\n return Math.min.apply(null, values);\r\n }\r\n\r\n /**\r\n * Calculate the median of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMedian(values = []) {\r\n let nbValues = values.length;\r\n let aux = 0;\r\n if (nbValues % 2 === 1) {\r\n aux = Math.floor(nbValues / 2);\r\n return Number(values[aux]);\r\n }\r\n return (Number(values[nbValues / 2]) +\r\n Number(values[((nbValues / 2) - 1)])) / 2;\r\n }\r\n\r\n /**\r\n * Calculate the lower quartile of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcQ1(values = []) {\r\n let nbValues = values.length;\r\n let posa = 0.0;\r\n posa = Math.floor(nbValues / 4);\r\n if (4 * posa === nbValues) {\r\n return (Number(values[posa - 1]) +\r\n Number(values[posa])) / 2;\r\n }\r\n return Number(values[posa]);\r\n }\r\n\r\n /**\r\n * Calculate the upper quartile of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcQ3(values = []) {\r\n let nbValues = values.length;\r\n let posa = 0.0;\r\n let posb = 0.0;\r\n posa = Math.floor(nbValues / 4);\r\n if (4 * posa === nbValues) {\r\n posb = 3 * posa;\r\n return (Number(values[posb]) +\r\n Number(values[posb - 1])) / 2;\r\n }\r\n return Number(values[nbValues - posa - 1]);\r\n }\r\n\r\n /**\r\n * Sort passed values with supplied sorter function.\r\n * @param {Array} [values=[]] List of values to be sorted\r\n * @param {Function} sorter Sorter function\r\n * @returns {Array}\r\n */\r\n sortColumnValues(values = [], sorter) {\r\n return values.sort(sorter);\r\n }\r\n\r\n /**\r\n * Write calculation result in passed DOM element with supplied write method\r\n * and decimal precision.\r\n * @param {Number} [result=0] Calculation result\r\n * @param {DOMElement} label DOM element\r\n * @param {String} [writeType='innerhtml'] Write method\r\n * @param {Number} [precision=2] Applied decimal precision\r\n * @private\r\n */\r\n writeResult(result = 0, label, writeType = 'innerhtml',\r\n precision = 2, format = {}) {\r\n let labelElm = elm(label);\r\n\r\n if (!labelElm) {\r\n return;\r\n }\r\n\r\n result = result.toFixed(precision);\r\n if (isNaN(result) || !isFinite(result)) {\r\n result = '';\r\n } else {\r\n result = formatNumber(format)(result);\r\n }\r\n\r\n switch (writeType.toLowerCase()) {\r\n case 'innerhtml':\r\n labelElm.innerHTML = result;\r\n break;\r\n case 'setvalue':\r\n labelElm.value = result;\r\n break;\r\n case 'createtextnode':\r\n let oldNode = labelElm.firstChild;\r\n let txtNode = createText(result);\r\n labelElm.replaceChild(txtNode, oldNode);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Configure the format options used to format the operation result based\r\n * on column type.\r\n * @param {Number} colIndex Column index\r\n * @param {Object} [format={}] Format object\r\n * @returns {Object}\r\n * @private\r\n */\r\n configureFormat(colIndex, format = {}) {\r\n let tf = this.tf;\r\n if (tf.hasType(colIndex, [FORMATTED_NUMBER])) {\r\n let colType = tf.colTypes[colIndex];\r\n if (colType.decimal && !format.decimal) {\r\n format.decimal = colType.decimal;\r\n }\r\n if (colType.thousands && !format.integerSeparator) {\r\n format.integerSeparator = colType.thousands;\r\n }\r\n } else {\r\n format.decimal = format.decimal || '';\r\n format.integerSeparator = format.integerSeparator || '';\r\n }\r\n return format;\r\n }\r\n\r\n /** Remove extension */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n // unsubscribe to events\r\n this.emitter.off(EVENTS, bound(this.calcAll, this));\r\n\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {\r\n addClass, removeClass, createCheckItem, createElm, elm, removeElm,\r\n getText, tag\r\n} from '../../dom';\r\nimport {isUndef, EMPTY_FN, isNull} from '../../types';\r\nimport {addEvt, targetEvt, removeEvt} from '../../event';\r\nimport {root} from '../../root';\r\nimport {NONE} from '../../const';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsFn, defaultsNb, defaultsArr\r\n} from '../../settings';\r\nimport {RIGHT} from '../../modules/toolbar';\r\n\r\n/**\r\n * Columns Visibility extension\r\n */\r\nexport default class ColsVisibility extends Feature {\r\n\r\n /**\r\n * Creates an instance of ColsVisibility\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} Configuration object\r\n */\r\n constructor(tf, f) {\r\n super(tf, f.name);\r\n\r\n // Configuration object\r\n let cfg = this.config;\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(f.description, 'Columns visibility manager');\r\n\r\n /**\r\n * show/hide columns container element\r\n * @private\r\n */\r\n this.spanEl = null;\r\n\r\n /**\r\n * show/hide columns button element\r\n * @private\r\n */\r\n this.btnEl = null;\r\n\r\n /**\r\n * show/hide columns main container element\r\n * @private\r\n */\r\n this.contEl = null;\r\n\r\n /**\r\n * Enable tick to hide a column, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.tickToHide = defaultsBool(f.tick_to_hide, true);\r\n\r\n /**\r\n * Enable columns manager UI, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.manager = defaultsBool(f.manager, true);\r\n\r\n /**\r\n * Headers HTML table reference only if headers are external\r\n * @type {DOMElement}\r\n */\r\n this.headersTbl = f.headers_table || null;\r\n\r\n /**\r\n * Headers row index only if headers are external\r\n * @type {Number}\r\n */\r\n this.headersIndex = defaultsNb(f.headers_index, 1);\r\n\r\n /**\r\n * ID of main container element\r\n * @type {String}\r\n */\r\n this.contElTgtId = defaultsStr(f.container_target_id, null);\r\n\r\n /**\r\n * Alternative text for column headers in column manager UI\r\n * @type {Array}\r\n */\r\n this.headersText = defaultsArr(f.headers_text, []);\r\n\r\n /**\r\n * ID of button's container element\r\n * @type {String}\r\n */\r\n this.btnTgtId = defaultsStr(f.btn_target_id, null);\r\n\r\n /**\r\n * Button's text, defaults to Columns▼\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, 'Columns▼');\r\n\r\n /**\r\n * Button's inner HTML\r\n * @type {String}\r\n */\r\n this.btnHtml = defaultsStr(f.btn_html, null);\r\n\r\n /**\r\n * Css class for button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'colVis');\r\n\r\n /**\r\n * Columns manager UI close link text, defaults to 'Close'\r\n * @type {String}\r\n */\r\n this.btnCloseText = defaultsStr(f.btn_close_text, 'Close');\r\n\r\n /**\r\n * Columns manager UI close link HTML\r\n * @type {String}\r\n */\r\n this.btnCloseHtml = defaultsStr(f.btn_close_html, null);\r\n\r\n /**\r\n * Css for columns manager UI close link\r\n * @type {String}\r\n */\r\n this.btnCloseCssClass = defaultsStr(f.btn_close_css_class,\r\n this.btnCssClass);\r\n\r\n /**\r\n * Extension's stylesheet filename\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(f.stylesheet, 'colsVisibility.css');\r\n\r\n /**\r\n * Css for columns manager UI span\r\n * @type {String}\r\n */\r\n this.spanCssClass = defaultsStr(f.span_css_class, 'colVisSpan');\r\n\r\n /**\r\n * Css for columns manager UI main container\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.cont_css_class, 'colVisCont');\r\n\r\n /**\r\n * Css for columns manager UI checklist (ul)\r\n * @type {String}\r\n */\r\n this.listCssClass = defaultsStr(cfg.list_css_class, 'cols_checklist');\r\n\r\n /**\r\n * Css for columns manager UI checklist item (li)\r\n * @type {String}\r\n */\r\n this.listItemCssClass = defaultsStr(cfg.checklist_item_css_class,\r\n 'cols_checklist_item');\r\n\r\n /**\r\n * Css for columns manager UI checklist item selected state (li)\r\n * @type {String}\r\n */\r\n this.listSlcItemCssClass = defaultsStr(\r\n cfg.checklist_selected_item_css_class,\r\n 'cols_checklist_slc_item'\r\n );\r\n\r\n /**\r\n * Text preceding the columns list, defaults to 'Hide' or 'Show'\r\n * depending on tick mode (tick_to_hide option)\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, this.tickToHide ? 'Hide: ' : 'Show: ');\r\n\r\n /**\r\n * List of columns indexes to be hidden at initialization\r\n * @type {Array}\r\n */\r\n this.atStart = defaultsArr(f.at_start, []);\r\n\r\n /**\r\n * Enable hover behaviour on columns manager button/link\r\n * @type {Boolean}\r\n */\r\n this.enableHover = Boolean(f.enable_hover);\r\n\r\n /**\r\n * Enable select all option, disabled by default\r\n * @type {Boolean}\r\n */\r\n this.enableTickAll = Boolean(f.enable_tick_all);\r\n\r\n /**\r\n * Text for select all option, defaults to 'Select all:'\r\n * @type {String}\r\n */\r\n this.tickAllText = defaultsStr(f.tick_all_text, 'Select all:');\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\r\n\r\n /**\r\n * List of indexes of hidden columns\r\n * @private\r\n */\r\n this.hiddenCols = [];\r\n\r\n /**\r\n * Bound mouseup wrapper\r\n * @private\r\n */\r\n this.boundMouseup = null;\r\n\r\n /**\r\n * Callback fired when the extension is initialized\r\n * @type {Function}\r\n */\r\n this.onLoaded = defaultsFn(f.on_loaded, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before the columns manager is opened\r\n * @type {Function}\r\n */\r\n this.onBeforeOpen = defaultsFn(f.on_before_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the columns manager is opened\r\n * @type {Function}\r\n */\r\n this.onAfterOpen = defaultsFn(f.on_after_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before the columns manager is closed\r\n * @type {Function}\r\n */\r\n this.onBeforeClose = defaultsFn(f.on_before_close, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the columns manager is closed\r\n * @type {Function}\r\n */\r\n this.onAfterClose = defaultsFn(f.on_after_close, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a column is hidden\r\n * @type {Function}\r\n */\r\n this.onBeforeColHidden = defaultsFn(f.on_before_col_hidden, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a column is hidden\r\n * @type {Function}\r\n */\r\n this.onAfterColHidden = defaultsFn(f.on_after_col_hidden, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a column is displayed\r\n * @type {Function}\r\n */\r\n this.onBeforeColDisplayed = defaultsFn(f.on_before_col_displayed,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a column is displayed\r\n * @type {Function}\r\n */\r\n this.onAfterColDisplayed = defaultsFn(f.on_after_col_displayed,\r\n EMPTY_FN);\r\n\r\n //Grid layout support\r\n if (tf.gridLayout) {\r\n this.headersTbl = tf.feature('gridLayout').headTbl; //headers table\r\n this.headersIndex = 0; //headers index\r\n }\r\n\r\n //Loads extension stylesheet\r\n tf.import(f.name + 'Style', tf.getStylePath() + this.stylesheet, null,\r\n 'link');\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Mouse-up event handler handling popup auto-close behaviour\r\n * @private\r\n */\r\n onMouseup(evt) {\r\n let targetElm = targetEvt(evt);\r\n\r\n while (targetElm && targetElm !== this.contEl\r\n && targetElm !== this.btnEl) {\r\n targetElm = targetElm.parentNode;\r\n }\r\n\r\n if (targetElm !== this.contEl && targetElm !== this.btnEl) {\r\n this.toggle();\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Toggle columns manager UI\r\n */\r\n toggle() {\r\n // ensure mouseup event handler is removed\r\n removeEvt(root, 'mouseup', this.boundMouseup);\r\n\r\n let contDisplay = this.contEl.style.display;\r\n\r\n if (contDisplay !== 'inline') {\r\n this.onBeforeOpen(this);\r\n }\r\n if (contDisplay === 'inline') {\r\n this.onBeforeClose(this);\r\n }\r\n\r\n this.contEl.style.display = contDisplay === 'inline' ?\r\n NONE : 'inline';\r\n\r\n if (contDisplay !== 'inline') {\r\n this.onAfterOpen(this);\r\n addEvt(root, 'mouseup', this.boundMouseup);\r\n }\r\n if (contDisplay === 'inline') {\r\n this.onAfterClose(this);\r\n }\r\n }\r\n\r\n /**\r\n * Check an item in columns manager UI\r\n * @private\r\n */\r\n checkItem(lbl) {\r\n let li = lbl.parentNode;\r\n if (!li || !lbl) {\r\n return;\r\n }\r\n let isChecked = lbl.firstChild.checked;\r\n let colIndex = lbl.firstChild.getAttribute('id').split('_')[1];\r\n colIndex = parseInt(colIndex, 10);\r\n if (isChecked) {\r\n addClass(li, this.listSlcItemCssClass);\r\n } else {\r\n removeClass(li, this.listSlcItemCssClass);\r\n }\r\n\r\n let hide = false;\r\n if ((this.tickToHide && isChecked) ||\r\n (!this.tickToHide && !isChecked)) {\r\n hide = true;\r\n }\r\n this.setHidden(colIndex, hide);\r\n }\r\n\r\n /**\r\n * Initializes ColsVisibility instance\r\n */\r\n init() {\r\n if (this.initialized || !this.manager) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-extension', this,\r\n !isNull(this.btnTgtId));\r\n\r\n this.emitter.on(['hide-column'],\r\n (tf, colIndex) => this.hideCol(colIndex));\r\n\r\n this.buildBtn();\r\n this.buildManager();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.boundMouseup = this.onMouseup.bind(this);\r\n\r\n this.emitter.emit('columns-visibility-initialized', this.tf, this);\r\n this.emitter.emit('extension-initialized', this);\r\n\r\n // Hide columns at start at very end of initialization, do not move\r\n // as order is important\r\n this._hideAtStart();\r\n }\r\n\r\n /**\r\n * Build main button UI\r\n */\r\n buildBtn() {\r\n if (this.btnEl) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let span = createElm('span');\r\n span.className = this.spanCssClass;\r\n\r\n // Container element (rdiv or custom element)\r\n let targetEl = !this.btnTgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.btnTgtId);\r\n\r\n if (!this.btnTgtId) {\r\n let firstChild = targetEl.firstChild;\r\n firstChild.parentNode.insertBefore(span, firstChild);\r\n } else {\r\n targetEl.appendChild(span);\r\n }\r\n\r\n if (!this.btnHtml) {\r\n let btn = createElm('a', ['href', 'javascript:;']);\r\n btn.className = this.btnCssClass;\r\n btn.title = this.desc;\r\n\r\n btn.innerHTML = this.btnText;\r\n span.appendChild(btn);\r\n if (!this.enableHover) {\r\n addEvt(btn, 'click', (evt) => this.toggle(evt));\r\n } else {\r\n addEvt(btn, 'mouseover', (evt) => this.toggle(evt));\r\n }\r\n } else { // Custom html\r\n span.innerHTML = this.btnHtml;\r\n let colVisEl = span.firstChild;\r\n if (!this.enableHover) {\r\n addEvt(colVisEl, 'click', (evt) => this.toggle(evt));\r\n } else {\r\n addEvt(colVisEl, 'mouseover', (evt) => this.toggle(evt));\r\n }\r\n }\r\n\r\n this.spanEl = span;\r\n this.btnEl = this.spanEl.firstChild;\r\n\r\n this.onLoaded(this);\r\n }\r\n\r\n /**\r\n * Build columns manager UI\r\n */\r\n buildManager() {\r\n let tf = this.tf;\r\n\r\n let container = !this.contElTgtId ?\r\n createElm('div') :\r\n elm(this.contElTgtId);\r\n container.className = this.contCssClass;\r\n\r\n //Extension description\r\n let extNameLabel = createElm('p');\r\n extNameLabel.innerHTML = this.text;\r\n container.appendChild(extNameLabel);\r\n\r\n //Headers list\r\n let ul = createElm('ul');\r\n ul.className = this.listCssClass;\r\n\r\n let tbl = this.headersTbl || tf.dom();\r\n let headerIndex = this.headersTbl ?\r\n this.headersIndex : tf.getHeadersRowIndex();\r\n let headerRow = tbl.rows[headerIndex];\r\n\r\n //Tick all option\r\n if (this.enableTickAll) {\r\n let li = createCheckItem('col__' + tf.id, this.tickAllText,\r\n this.tickAllText);\r\n addClass(li, this.listItemCssClass);\r\n ul.appendChild(li);\r\n li.check.checked = !this.tickToHide;\r\n\r\n addEvt(li.check, 'click', () => {\r\n for (let h = 0; h < headerRow.cells.length; h++) {\r\n let itm = elm('col_' + h + '_' + tf.id);\r\n if (itm && li.check.checked !== itm.checked) {\r\n itm.click();\r\n itm.checked = li.check.checked;\r\n }\r\n }\r\n });\r\n }\r\n\r\n for (let i = 0; i < headerRow.cells.length; i++) {\r\n let cell = headerRow.cells[i];\r\n let cellText = this.headersText[i] || this._getHeaderText(cell);\r\n let liElm = createCheckItem('col_' + i + '_' + tf.id, cellText,\r\n cellText);\r\n addClass(liElm, this.listItemCssClass);\r\n if (!this.tickToHide) {\r\n addClass(liElm, this.listSlcItemCssClass);\r\n }\r\n ul.appendChild(liElm);\r\n if (!this.tickToHide) {\r\n liElm.check.checked = true;\r\n }\r\n\r\n addEvt(liElm.check, 'click', (evt) => {\r\n let elm = targetEvt(evt);\r\n let lbl = elm.parentNode;\r\n this.checkItem(lbl);\r\n });\r\n }\r\n\r\n //separator\r\n let p = createElm('p', ['align', 'center']);\r\n let btn;\r\n //Close link\r\n if (!this.btnCloseHtml) {\r\n btn = createElm('a', ['href', 'javascript:;']);\r\n btn.className = this.btnCloseCssClass;\r\n btn.innerHTML = this.btnCloseText;\r\n addEvt(btn, 'click', (evt) => this.toggle(evt));\r\n p.appendChild(btn);\r\n } else {\r\n p.innerHTML = this.btnCloseHtml;\r\n btn = p.firstChild;\r\n addEvt(btn, 'click', (evt) => this.toggle(evt));\r\n }\r\n\r\n container.appendChild(ul);\r\n container.appendChild(p);\r\n\r\n this.btnEl.parentNode.insertBefore(container, this.btnEl);\r\n this.contEl = container;\r\n }\r\n\r\n /**\r\n * Hide or show specified columns\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} hide Hide column if true or show if false\r\n */\r\n setHidden(colIndex, hide) {\r\n let tf = this.tf;\r\n let tbl = tf.dom();\r\n\r\n if (hide) {\r\n this.onBeforeColHidden(this, colIndex);\r\n } else {\r\n this.onBeforeColDisplayed(this, colIndex);\r\n }\r\n\r\n this._hideElements(tbl, colIndex, hide);\r\n if (this.headersTbl) {\r\n this._hideElements(this.headersTbl, colIndex, hide);\r\n }\r\n\r\n let hiddenCols = this.hiddenCols;\r\n let itemIndex = hiddenCols.indexOf(colIndex);\r\n if (hide) {\r\n if (itemIndex === -1) {\r\n this.hiddenCols.push(colIndex);\r\n }\r\n } else {\r\n if (itemIndex !== -1) {\r\n this.hiddenCols.splice(itemIndex, 1);\r\n }\r\n }\r\n\r\n if (hide) {\r\n this.onAfterColHidden(this, colIndex);\r\n this.emitter.emit('column-hidden', tf, this, colIndex,\r\n this.hiddenCols);\r\n } else {\r\n this.onAfterColDisplayed(this, colIndex);\r\n this.emitter.emit('column-shown', tf, this, colIndex,\r\n this.hiddenCols);\r\n }\r\n }\r\n\r\n /**\r\n * Show specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n showCol(colIndex) {\r\n if (isUndef(colIndex) || !this.isColHidden(colIndex)) {\r\n return;\r\n }\r\n if (this.manager && this.contEl) {\r\n let itm = elm('col_' + colIndex + '_' + this.tf.id);\r\n if (itm) {\r\n itm.click();\r\n }\r\n } else {\r\n this.setHidden(colIndex, false);\r\n }\r\n }\r\n\r\n /**\r\n * Hide specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n hideCol(colIndex) {\r\n if (isUndef(colIndex) || this.isColHidden(colIndex)) {\r\n return;\r\n }\r\n if (this.manager && this.contEl) {\r\n let itm = elm('col_' + colIndex + '_' + this.tf.id);\r\n if (itm) {\r\n itm.click();\r\n }\r\n } else {\r\n this.setHidden(colIndex, true);\r\n }\r\n }\r\n\r\n /**\r\n * Determine if specified column is hidden\r\n * @param {Number} colIndex Column index\r\n */\r\n isColHidden(colIndex) {\r\n if (this.hiddenCols.indexOf(colIndex) !== -1) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Toggle visibility of specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n toggleCol(colIndex) {\r\n if (isUndef(colIndex) || this.isColHidden(colIndex)) {\r\n this.showCol(colIndex);\r\n } else {\r\n this.hideCol(colIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Return the indexes of the columns currently hidden\r\n * @return {Array} column indexes\r\n */\r\n getHiddenCols() {\r\n return this.hiddenCols;\r\n }\r\n\r\n /**\r\n * Remove the columns manager\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n if (elm(this.contElTgtId)) {\r\n elm(this.contElTgtId).innerHTML = '';\r\n } else {\r\n this.contEl.innerHTML = '';\r\n removeElm(this.contEl);\r\n this.contEl = null;\r\n }\r\n this.btnEl.innerHTML = '';\r\n removeElm(this.btnEl);\r\n this.btnEl = null;\r\n\r\n this.emitter.off(['hide-column'],\r\n (tf, colIndex) => this.hideCol(colIndex));\r\n\r\n this.boundMouseup = null;\r\n\r\n this.initialized = false;\r\n }\r\n\r\n _getHeaderText(cell) {\r\n if (!cell.hasChildNodes) {\r\n return '';\r\n }\r\n\r\n for (let i = 0; i < cell.childNodes.length; i++) {\r\n let n = cell.childNodes[i];\r\n if (n.nodeType === 3) {\r\n return n.nodeValue;\r\n } else if (n.nodeType === 1) {\r\n if (n.id && n.id.indexOf('popUp') !== -1) {\r\n continue;\r\n } else {\r\n return getText(n);\r\n }\r\n }\r\n continue;\r\n }\r\n return '';\r\n }\r\n\r\n _hideElements(tbl, colIdx, hide) {\r\n this._hideCells(tbl, colIdx, hide);\r\n this._hideCol(tbl, colIdx, hide);\r\n }\r\n\r\n _hideCells(tbl, colIdx, hide) {\r\n for (let i = 0; i < tbl.rows.length; i++) {\r\n let row = tbl.rows[i];\r\n let cell = row.cells[colIdx];\r\n if (cell) {\r\n cell.style.display = hide ? NONE : '';\r\n }\r\n }\r\n }\r\n\r\n _hideCol(tbl, colIdx, hide) {\r\n let colElms = tag(tbl, 'col');\r\n if (colElms.length === 0) {\r\n return;\r\n }\r\n colElms[colIdx].style.display = hide ? NONE : '';\r\n }\r\n\r\n _hideAtStart() {\r\n this.atStart.forEach((colIdx) => {\r\n this.hideCol(colIdx);\r\n });\r\n }\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {createElm, removeElm, elm} from '../../dom';\r\nimport {EMPTY_FN, isNull} from '../../types';\r\nimport {addEvt} from '../../event';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsFn, defaultsNb,\r\n} from '../../settings';\r\nimport {RIGHT} from '../../modules/toolbar';\r\n\r\n/**\r\n * Filters Visibility extension\r\n */\r\nexport default class FiltersVisibility extends Feature {\r\n\r\n /**\r\n * Creates an instance of FiltersVisibility\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} Configuration object\r\n */\r\n constructor(tf, f) {\r\n super(tf, f.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(f.description,\r\n 'Filters row visibility manager');\r\n\r\n /**\r\n * Extension's stylesheet filename\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(f.stylesheet , 'filtersVisibility.css');\r\n\r\n /**\r\n * Expand icon filename\r\n * @type {String}\r\n */\r\n this.icnExpand = defaultsStr(f.expand_icon_name, 'icn_exp.png');\r\n\r\n /**\r\n * Collapse icon filename\r\n * @type {String}\r\n */\r\n this.icnCollapse = defaultsStr(f.collapse_icon_name, 'icn_clp.png');\r\n\r\n /**\r\n * Main container element\r\n * @private\r\n */\r\n this.contEl = null;\r\n\r\n /**\r\n * Button element\r\n * @private\r\n */\r\n this.btnEl = null;\r\n\r\n /**\r\n * Expand icon HTML\r\n * @private\r\n */\r\n this.icnExpandHtml = '\"Expand';\r\n\r\n /**\r\n * Collapse icon HTML\r\n * @private\r\n */\r\n this.icnCollapseHtml = '\"Collapse';\r\n\r\n /**\r\n * Default text\r\n * @private\r\n */\r\n this.defaultText = 'Toggle filters';\r\n\r\n /**\r\n * ID of main container element\r\n * @type {String}\r\n */\r\n this.targetId = f.target_id || null;\r\n\r\n /**\r\n * Enable expand/collapse icon, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.enableIcon = defaultsBool(f.enable_icon, true);\r\n\r\n /**\r\n * Custom text for button\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, '');\r\n\r\n /**\r\n * Collapse button HTML\r\n * @private\r\n */\r\n this.collapseBtnHtml = this.enableIcon ?\r\n this.icnCollapseHtml + this.btnText :\r\n this.btnText || this.defaultText;\r\n\r\n /**\r\n * Expand button HTML\r\n * @private\r\n */\r\n this.expandBtnHtml = this.enableIcon ?\r\n this.icnExpandHtml + this.btnText :\r\n this.btnText || this.defaultText;\r\n\r\n /**\r\n * Button's custom HTML\r\n * @type {String}\r\n */\r\n this.btnHtml = defaultsStr(f.btn_html, null);\r\n\r\n /**\r\n * Css class for expand/collapse filters button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'btnExpClpFlt');\r\n\r\n /**\r\n * Css class for main container\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.cont_css_class, 'expClpFlt');\r\n\r\n /**\r\n * Filters row index\r\n * @type {Number}\r\n */\r\n this.filtersRowIndex = defaultsNb(f.filters_row_index,\r\n tf.getFiltersRowIndex());\r\n\r\n /**\r\n * Make filters visible at initialization, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.visibleAtStart = defaultsNb(f.visible_at_start, true);\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\r\n\r\n /**\r\n * Callback fired before filters row is shown\r\n * @type {Function}\r\n */\r\n this.onBeforeShow = defaultsFn(f.on_before_show, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filters row is shown\r\n * @type {Function}\r\n */\r\n this.onAfterShow = defaultsFn(f.on_after_show, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before filters row is hidden\r\n * @type {Function}\r\n */\r\n this.onBeforeHide = defaultsFn(f.on_before_hide, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filters row is hidden\r\n * @type {Function}\r\n */\r\n this.onAfterHide = defaultsFn(f.on_after_hide, EMPTY_FN);\r\n\r\n //Import extension's stylesheet\r\n tf.import(f.name + 'Style', tf.getStylePath() + this.stylesheet, null,\r\n 'link');\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initialise extension\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-extension', this,\r\n !isNull(this.targetId));\r\n\r\n this.buildUI();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.on(['show-filters'], (tf, visible) => this.show(visible));\r\n this.emitter.emit('filters-visibility-initialized', this.tf, this);\r\n this.emitter.emit('extension-initialized', this);\r\n }\r\n\r\n /**\r\n * Build UI elements\r\n */\r\n buildUI() {\r\n let tf = this.tf;\r\n let span = createElm('span');\r\n span.className = this.contCssClass;\r\n\r\n // Container element (rdiv or custom element)\r\n let targetEl = !this.targetId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n\r\n if (!this.targetId) {\r\n let firstChild = targetEl.firstChild;\r\n firstChild.parentNode.insertBefore(span, firstChild);\r\n } else {\r\n targetEl.appendChild(span);\r\n }\r\n\r\n let btn;\r\n if (!this.btnHtml) {\r\n btn = createElm('a', ['href', 'javascript:void(0);']);\r\n btn.className = this.btnCssClass;\r\n btn.title = this.btnText || this.defaultText;\r\n btn.innerHTML = this.collapseBtnHtml;\r\n span.appendChild(btn);\r\n } else { // Custom html\r\n span.innerHTML = this.btnHtml;\r\n btn = span.firstChild;\r\n }\r\n\r\n addEvt(btn, 'click', () => this.toggle());\r\n\r\n this.contEl = span;\r\n this.btnEl = btn;\r\n\r\n if (!this.visibleAtStart) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n /**\r\n * Toggle filters visibility\r\n */\r\n toggle() {\r\n let tf = this.tf;\r\n let tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();\r\n let fltRow = tbl.rows[this.filtersRowIndex];\r\n let isDisplayed = fltRow.style.display === '';\r\n\r\n this.show(!isDisplayed);\r\n }\r\n\r\n /**\r\n * Show or hide filters\r\n *\r\n * @param {boolean} [visible=true] Visibility flag\r\n */\r\n show(visible = true) {\r\n let tf = this.tf;\r\n let tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();\r\n let fltRow = tbl.rows[this.filtersRowIndex];\r\n\r\n if (visible) {\r\n this.onBeforeShow(this);\r\n }\r\n if (!visible) {\r\n this.onBeforeHide(this);\r\n }\r\n\r\n fltRow.style.display = visible ? '' : 'none';\r\n if (this.enableIcon && !this.btnHtml) {\r\n this.btnEl.innerHTML = visible ?\r\n this.collapseBtnHtml : this.expandBtnHtml;\r\n }\r\n\r\n if (visible) {\r\n this.onAfterShow(this);\r\n }\r\n if (!visible) {\r\n this.onAfterHide(this);\r\n }\r\n\r\n this.emitter.emit('filters-toggled', tf, this, visible);\r\n }\r\n\r\n /**\r\n * Destroy the UI\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.off(['show-filters'], (tf, visible) => this.show(visible));\r\n\r\n this.btnEl.innerHTML = '';\r\n removeElm(this.btnEl);\r\n this.btnEl = null;\r\n\r\n this.contEl.innerHTML = '';\r\n removeElm(this.contEl);\r\n this.contEl = null;\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {isUndef, isObj, EMPTY_FN} from '../../types';\r\nimport {createElm, elm, tag} from '../../dom';\r\nimport {addEvt, bound} from '../../event';\r\nimport {parse as parseNb} from '../../number';\r\nimport {\r\n NONE, CELL_TAG, HEADER_TAG, STRING, NUMBER, DATE, FORMATTED_NUMBER,\r\n IP_ADDRESS\r\n} from '../../const';\r\nimport {defaultsStr, defaultsFn, defaultsArr} from '../../settings';\r\n\r\n/**\r\n * SortableTable Adapter module\r\n */\r\nexport default class AdapterSortableTable extends Feature {\r\n\r\n /**\r\n * Creates an instance of AdapterSortableTable\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} opts Configuration object\r\n */\r\n constructor(tf, opts) {\r\n super(tf, opts.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = opts.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(opts.description, 'Sortable table');\r\n\r\n /**\r\n * Indicate whether table previously sorted\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.sorted = false;\r\n\r\n /**\r\n * List of sort type per column basis\r\n * @type {Array}\r\n */\r\n this.sortTypes = defaultsArr(opts.types, tf.colTypes);\r\n\r\n /**\r\n * Column to be sorted at initialization, ie:\r\n * sort_col_at_start: [1, true]\r\n * @type {Array}\r\n */\r\n this.sortColAtStart = defaultsArr(opts.sort_col_at_start, null);\r\n\r\n /**\r\n * Enable asynchronous sort, if triggers are external\r\n * @type {Boolean}\r\n */\r\n this.asyncSort = Boolean(opts.async_sort);\r\n\r\n /**\r\n * List of element IDs triggering sort on a per column basis\r\n * @type {Array}\r\n */\r\n this.triggerIds = defaultsArr(opts.trigger_ids, []);\r\n\r\n // edit .sort-arrow.descending / .sort-arrow.ascending in\r\n // tablefilter.css to reflect any path change\r\n /**\r\n * Path to images\r\n * @type {String}\r\n */\r\n this.imgPath = defaultsStr(opts.images_path, tf.themesPath);\r\n\r\n /**\r\n * Blank image file name\r\n * @type {String}\r\n */\r\n this.imgBlank = defaultsStr(opts.image_blank, 'blank.png');\r\n\r\n /**\r\n * Css class for sort indicator image\r\n * @type {String}\r\n */\r\n this.imgClassName = defaultsStr(opts.image_class_name, 'sort-arrow');\r\n\r\n /**\r\n * Css class for ascending sort indicator image\r\n * @type {String}\r\n */\r\n this.imgAscClassName = defaultsStr(opts.image_asc_class_name,\r\n 'ascending');\r\n\r\n /**\r\n * Css class for descending sort indicator image\r\n * @type {String}\r\n */\r\n this.imgDescClassName = defaultsStr(opts.image_desc_class_name,\r\n 'descending');\r\n\r\n /**\r\n * Cell attribute key storing custom value used for sorting\r\n * @type {String}\r\n */\r\n this.customKey = defaultsStr(opts.custom_key, 'data-tf-sortKey');\r\n\r\n /**\r\n * Callback fired when sort extension is instanciated\r\n * @type {Function}\r\n */\r\n this.onSortLoaded = defaultsFn(opts.on_sort_loaded, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a table column is sorted\r\n * @type {Function}\r\n */\r\n this.onBeforeSort = defaultsFn(opts.on_before_sort, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a table column is sorted\r\n * @type {Function}\r\n */\r\n this.onAfterSort = defaultsFn(opts.on_after_sort, EMPTY_FN);\r\n\r\n /**\r\n * SortableTable instance\r\n * @private\r\n */\r\n this.stt = null;\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initializes AdapterSortableTable instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let adpt = this;\r\n\r\n // SortableTable class sanity check (sortabletable.js)\r\n if (isUndef(SortableTable)) {\r\n throw new Error('SortableTable class not found.');\r\n }\r\n\r\n // Add any date format if needed\r\n this.emitter.emit('add-date-type-formats', this.tf, this.sortTypes);\r\n\r\n this.overrideSortableTable();\r\n this.setSortTypes();\r\n\r\n this.onSortLoaded(tf, this);\r\n\r\n /*** SortableTable callbacks ***/\r\n this.stt.onbeforesort = function () {\r\n adpt.onBeforeSort(tf, adpt.stt.sortColumn);\r\n\r\n /*** sort behaviour for paging ***/\r\n if (tf.paging) {\r\n tf.feature('paging').disable();\r\n }\r\n };\r\n\r\n this.stt.onsort = function () {\r\n adpt.sorted = true;\r\n\r\n //sort behaviour for paging\r\n if (tf.paging) {\r\n let paginator = tf.feature('paging');\r\n // recalculate valid rows index as sorting may have change it\r\n tf.getValidRows(true);\r\n paginator.enable();\r\n paginator.setPage(paginator.getPage());\r\n }\r\n\r\n adpt.onAfterSort(tf, adpt.stt.sortColumn, adpt.stt.descending);\r\n adpt.emitter.emit('column-sorted', tf, adpt.stt.sortColumn,\r\n adpt.stt.descending);\r\n };\r\n\r\n // Column sort at start\r\n let sortColAtStart = adpt.sortColAtStart;\r\n if (sortColAtStart) {\r\n this.stt.sort(sortColAtStart[0], sortColAtStart[1]);\r\n }\r\n\r\n this.emitter.on(['sort'], bound(this.sortByColumnIndexHandler, this));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('sort-initialized', tf, this);\r\n }\r\n\r\n /**\r\n * Sort specified column\r\n * @param {Number} colIdx Column index\r\n * @param {Boolean} desc Optional: descending manner\r\n */\r\n sortByColumnIndex(colIdx, desc) {\r\n this.stt.sort(colIdx, desc);\r\n }\r\n\r\n /** @private */\r\n sortByColumnIndexHandler(tf, colIdx, desc) {\r\n this.sortByColumnIndex(colIdx, desc);\r\n }\r\n\r\n /**\r\n * Set SortableTable overrides for TableFilter integration\r\n */\r\n overrideSortableTable() {\r\n let adpt = this,\r\n tf = this.tf;\r\n\r\n /**\r\n * Overrides headerOnclick method in order to handle th event\r\n * @param {Object} e [description]\r\n */\r\n SortableTable.prototype.headerOnclick = function (evt) {\r\n if (!adpt.initialized) {\r\n return;\r\n }\r\n\r\n // find Header element\r\n let el = evt.target || evt.srcElement;\r\n\r\n while (el.tagName !== CELL_TAG && el.tagName !== HEADER_TAG) {\r\n el = el.parentNode;\r\n }\r\n\r\n this.sort(\r\n SortableTable.msie ?\r\n SortableTable.getCellIndex(el) : el.cellIndex\r\n );\r\n };\r\n\r\n /**\r\n * Overrides getCellIndex IE returns wrong cellIndex when columns are\r\n * hidden\r\n * @param {Object} oTd TD element\r\n * @return {Number} Cell index\r\n */\r\n SortableTable.getCellIndex = function (oTd) {\r\n let cells = oTd.parentNode.cells,\r\n l = cells.length, i;\r\n for (i = 0; cells[i] !== oTd && i < l; i++) { }\r\n return i;\r\n };\r\n\r\n /**\r\n * Overrides initHeader in order to handle filters row position\r\n * @param {Array} oSortTypes\r\n */\r\n SortableTable.prototype.initHeader = function (oSortTypes) {\r\n let stt = this;\r\n if (!stt.tHead) {\r\n if (tf.gridLayout) {\r\n stt.tHead = tf.feature('gridLayout').headTbl.tHead;\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n stt.headersRow = tf.headersRow;\r\n let cells = stt.tHead.rows[stt.headersRow].cells;\r\n stt.sortTypes = oSortTypes || [];\r\n let l = cells.length;\r\n let img, c;\r\n\r\n for (let i = 0; i < l; i++) {\r\n c = cells[i];\r\n if (stt.sortTypes[i] !== null && stt.sortTypes[i] !== 'None') {\r\n c.style.cursor = 'pointer';\r\n img = createElm('img',\r\n ['src', adpt.imgPath + adpt.imgBlank]);\r\n c.appendChild(img);\r\n if (stt.sortTypes[i] !== null) {\r\n c.setAttribute('_sortType', stt.sortTypes[i]);\r\n }\r\n addEvt(c, 'click', stt._headerOnclick);\r\n } else {\r\n c.setAttribute('_sortType', oSortTypes[i]);\r\n c._sortType = 'None';\r\n }\r\n }\r\n stt.updateHeaderArrows();\r\n };\r\n\r\n /**\r\n * Overrides updateHeaderArrows in order to handle arrows indicators\r\n */\r\n SortableTable.prototype.updateHeaderArrows = function () {\r\n let stt = this;\r\n let cells, l, img;\r\n\r\n // external headers\r\n if (adpt.asyncSort && adpt.triggerIds.length > 0) {\r\n let triggers = adpt.triggerIds;\r\n cells = [];\r\n l = triggers.length;\r\n for (let j = 0; j < l; j++) {\r\n cells.push(elm(triggers[j]));\r\n }\r\n } else {\r\n if (!this.tHead) {\r\n return;\r\n }\r\n cells = stt.tHead.rows[stt.headersRow].cells;\r\n l = cells.length;\r\n }\r\n for (let i = 0; i < l; i++) {\r\n let cell = cells[i];\r\n if (!cell) {\r\n continue;\r\n }\r\n let cellAttr = cell.getAttribute('_sortType');\r\n if (cellAttr !== null && cellAttr !== 'None') {\r\n img = cell.lastChild || cell;\r\n if (img.nodeName.toLowerCase() !== 'img') {\r\n img = createElm('img',\r\n ['src', adpt.imgPath + adpt.imgBlank]);\r\n cell.appendChild(img);\r\n }\r\n if (i === stt.sortColumn) {\r\n img.className = adpt.imgClassName + ' ' +\r\n (this.descending ?\r\n adpt.imgDescClassName :\r\n adpt.imgAscClassName);\r\n } else {\r\n img.className = adpt.imgClassName;\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Overrides getRowValue for custom key value feature\r\n * @param {Object} oRow Row element\r\n * @param {String} sType\r\n * @param {Number} nColumn\r\n * @return {String}\r\n */\r\n SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\r\n let stt = this;\r\n // if we have defined a custom getRowValue use that\r\n let sortTypeInfo = stt._sortTypeInfo[sType];\r\n if (sortTypeInfo && sortTypeInfo.getRowValue) {\r\n return sortTypeInfo.getRowValue(oRow, nColumn);\r\n }\r\n let c = oRow.cells[nColumn];\r\n let s = SortableTable.getInnerText(c);\r\n return stt.getValueFromString(s, sType);\r\n };\r\n\r\n /**\r\n * Overrides getInnerText in order to avoid Firefox unexpected sorting\r\n * behaviour with untrimmed text elements\r\n * @param {Object} cell DOM element\r\n * @return {String} DOM element inner text\r\n */\r\n SortableTable.getInnerText = function (cell) {\r\n if (!cell) {\r\n return;\r\n }\r\n if (cell.getAttribute(adpt.customKey)) {\r\n return cell.getAttribute(adpt.customKey);\r\n } else {\r\n return tf.getCellValue(cell);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Adds a sort type\r\n */\r\n addSortType(...args) {\r\n // Extract the arguments\r\n let [id, caster, sorter, getRowValue] = args;\r\n SortableTable.prototype.addSortType(id, caster, sorter, getRowValue);\r\n }\r\n\r\n /**\r\n * Sets the sort types on a column basis\r\n * @private\r\n */\r\n setSortTypes() {\r\n let tf = this.tf,\r\n sortTypes = this.sortTypes,\r\n _sortTypes = [];\r\n\r\n tf.eachCol((i) => {\r\n let colType;\r\n if (sortTypes[i]) {\r\n colType = sortTypes[i];\r\n if (isObj(colType)) {\r\n if (colType.type === DATE) {\r\n colType = this._addDateType(i, sortTypes);\r\n }\r\n else if (colType.type === FORMATTED_NUMBER) {\r\n let decimal = colType.decimal || tf.decimalSeparator;\r\n colType = this._addNumberType(i, decimal);\r\n }\r\n } else {\r\n colType = colType.toLowerCase();\r\n if (colType === DATE) {\r\n colType = this._addDateType(i, sortTypes);\r\n }\r\n else if (colType === FORMATTED_NUMBER ||\r\n colType === NUMBER) {\r\n colType = this._addNumberType(i, tf.decimalSeparator);\r\n }\r\n else if (colType === NONE) {\r\n // TODO: normalise 'none' vs 'None'\r\n colType = 'None';\r\n }\r\n }\r\n } else {\r\n colType = STRING;\r\n }\r\n _sortTypes.push(colType);\r\n });\r\n\r\n //Public TF method to add sort type\r\n\r\n //Custom sort types\r\n this.addSortType('caseinsensitivestring', SortableTable.toUpperCase);\r\n this.addSortType(STRING);\r\n this.addSortType(IP_ADDRESS, ipAddress, sortIP);\r\n\r\n this.stt = new SortableTable(tf.dom(), _sortTypes);\r\n\r\n /*** external table headers adapter ***/\r\n if (this.asyncSort && this.triggerIds.length > 0) {\r\n let triggers = this.triggerIds;\r\n for (let j = 0; j < triggers.length; j++) {\r\n if (triggers[j] === null) {\r\n continue;\r\n }\r\n let trigger = elm(triggers[j]);\r\n if (trigger) {\r\n trigger.style.cursor = 'pointer';\r\n\r\n addEvt(trigger, 'click', (evt) => {\r\n let elm = evt.target;\r\n if (!this.tf.sort) {\r\n return;\r\n }\r\n this.stt.asyncSort(triggers.indexOf(elm.id));\r\n });\r\n trigger.setAttribute('_sortType', _sortTypes[j]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _addDateType(colIndex, types) {\r\n let tf = this.tf;\r\n let dateType = tf.feature('dateType');\r\n let locale = dateType.getOptions(colIndex, types).locale || tf.locale;\r\n let colType = `${DATE}-${locale}`;\r\n\r\n this.addSortType(colType, (value) => {\r\n let parsedDate = dateType.parse(value, locale);\r\n // Invalid date defaults to Wed Feb 04 -768 11:00:00\r\n return isNaN(+parsedDate) ? new Date(-86400000000000) : parsedDate;\r\n });\r\n return colType;\r\n }\r\n\r\n _addNumberType(colIndex, decimal) {\r\n let colType = `${FORMATTED_NUMBER}${decimal === '.' ? '' : '-custom'}`;\r\n\r\n this.addSortType(colType, (value) => {\r\n return parseNb(value, decimal);\r\n });\r\n return colType;\r\n }\r\n\r\n /**\r\n * Remove extension\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n this.emitter.off(['sort'], bound(this.sortByColumnIndexHandler, this));\r\n this.sorted = false;\r\n this.stt.destroy();\r\n\r\n let ids = tf.getFiltersId();\r\n for (let idx = 0; idx < ids.length; idx++) {\r\n let header = tf.getHeaderElement(idx);\r\n let img = tag(header, 'img');\r\n\r\n if (img.length === 1) {\r\n header.removeChild(img[0]);\r\n }\r\n }\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n\r\n//Converters\r\nfunction ipAddress(value) {\r\n let vals = value.split('.');\r\n for (let x in vals) {\r\n let val = vals[x];\r\n while (3 > val.length) {\r\n val = '0' + val;\r\n }\r\n vals[x] = val;\r\n }\r\n return vals.join('.');\r\n}\r\n\r\nfunction sortIP(a, b) {\r\n let aa = ipAddress(a.value.toLowerCase());\r\n let bb = ipAddress(b.value.toLowerCase());\r\n if (aa === bb) {\r\n return 0;\r\n } else if (aa < bb) {\r\n return -1;\r\n } else {\r\n return 1;\r\n }\r\n}\r\n","import AdapterSortableTable from './adapterSortabletable';\r\nimport {root} from '../../root';\r\n\r\nif (!root.SortableTable) {\r\n require('script-loader!sortabletable');\r\n}\r\n\r\nexport default AdapterSortableTable;\r\n","export class TfBase {\r\n constructor(tf, cls) {\r\n /**\r\n * TableFilter instance\r\n * @type {TableFilter}\r\n */\r\n this.tf = tf;\r\n }\r\n}"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/tablefilter/tf-0-2e300f81646508aa8de1.js b/dist/tablefilter/tf-0-2e300f81646508aa8de1.js new file mode 100644 index 00000000..ba1380dc --- /dev/null +++ b/dist/tablefilter/tf-0-2e300f81646508aa8de1.js @@ -0,0 +1,3478 @@ +(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],{ + +/***/ "./node_modules/format-number/index.js": +/*!*********************************************!*\ + !*** ./node_modules/format-number/index.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + + +module.exports = formatter; +module.exports.default = formatter; + +function formatter(options) { + options = options || {}; + + + // ********************************************************************************************* + // Set defaults for negatives + // options.negative, options.negativeOut, options.separator retained for backward compatibility + // ********************************************************************************************* + + // type of negative; default left + options.negativeType = options.negativeType || (options.negative === 'R' ? 'right' : 'left') + + // negative symbols '-' or '()' + if (typeof options.negativeLeftSymbol !== 'string') { + switch (options.negativeType) { + case 'left': + options.negativeLeftSymbol = '-'; + break; + case 'brackets': + options.negativeLeftSymbol = '('; + break; + default: + options.negativeLeftSymbol = ''; + } + } + if (typeof options.negativeRightSymbol !== 'string') { + switch (options.negativeType) { + case 'right': + options.negativeRightSymbol = '-'; + break; + case 'brackets': + options.negativeRightSymbol = ')'; + break; + default: + options.negativeRightSymbol = ''; + } + } + + // whether negative symbol should be inside/outside prefix and suffix + + if (typeof options.negativeLeftOut !== "boolean") { + options.negativeLeftOut = (options.negativeOut === false ? false : true); + } + if (typeof options.negativeRightOut !== "boolean") { + options.negativeRightOut = (options.negativeOut === false ? false : true); + } + + //prefix and suffix + options.prefix = options.prefix || ''; + options.suffix = options.suffix || ''; + + //separators + if (typeof options.integerSeparator !== 'string') { + options.integerSeparator = (typeof options.separator === 'string' ? options.separator : ','); + } + options.decimalsSeparator = typeof options.decimalsSeparator === 'string' ? options.decimalsSeparator : ''; + options.decimal = options.decimal || '.'; + + //padders + options.padLeft = options.padLeft || -1 //default no padding + options.padRight = options.padRight || -1 //default no padding + + function format(number, overrideOptions) { + overrideOptions = overrideOptions || {}; + + if (number || number === 0) { + number = '' + number;//convert number to string if it isn't already + } else { + return ''; + } + + //identify a negative number and make it absolute + var output = []; + var negative = number.charAt(0) === '-'; + number = number.replace(/^\-/g, ''); + + //Prepare output with left hand negative and/or prefix + if (!options.negativeLeftOut && !overrideOptions.noUnits) { + output.push(options.prefix); + } + if (negative) { + output.push(options.negativeLeftSymbol); + } + if (options.negativeLeftOut && !overrideOptions.noUnits) { + output.push(options.prefix); + } + + //Format core number + number = number.split('.'); + if (options.round != null) round(number, options.round); + if (options.truncate != null) number[1] = truncate(number[1], options.truncate); + if (options.padLeft > 0) number[0] = padLeft(number[0], options.padLeft); + if (options.padRight > 0) number[1] = padRight(number[1], options.padRight); + if (!overrideOptions.noSeparator && number[1]) number[1] = addDecimalSeparators(number[1], options.decimalsSeparator); + if (!overrideOptions.noSeparator && number[0]) number[0] = addIntegerSeparators(number[0], options.integerSeparator); + output.push(number[0]); + if (number[1]) { + output.push(options.decimal); + output.push(number[1]); + } + + //Prepare output with right hand negative and/or prefix + if (options.negativeRightOut && !overrideOptions.noUnits) { + output.push(options.suffix); + } + if (negative) { + output.push(options.negativeRightSymbol); + } + if (!options.negativeRightOut && !overrideOptions.noUnits) { + output.push(options.suffix); + } + + //join output and return + return output.join(''); + } + + format.negative = options.negative; + format.negativeOut = options.negativeOut; + format.negativeType = options.negativeType; + format.negativeLeftOut = options.negativeLeftOut; + format.negativeLeftSymbol = options.negativeLeftSymbol; + format.negativeRightOut = options.negativeRightOut; + format.negativeRightSymbol = options.negativeRightSymbol; + format.prefix = options.prefix; + format.suffix = options.suffix; + format.separate = options.separate; + format.integerSeparator = options.integerSeparator; + format.decimalsSeparator = options.decimalsSeparator; + format.decimal = options.decimal; + format.padLeft = options.padLeft; + format.padRight = options.padRight; + format.truncate = options.truncate; + format.round = options.round; + + function unformat(number, allowedSeparators) { + allowedSeparators = allowedSeparators || []; + if (options.allowedSeparators) { + options.allowedSeparators.forEach(function (s) { allowedSeparators.push (s); }); + } + allowedSeparators.push(options.integerSeparator); + allowedSeparators.push(options.decimalsSeparator); + number = number.replace(options.prefix, ''); + number = number.replace(options.suffix, ''); + var newNumber = number; + do { + number = newNumber; + for (var i = 0; i < allowedSeparators.length; i++) { + newNumber = newNumber.replace(allowedSeparators[i], ''); + } + } while (newNumber != number); + return number; + } + format.unformat = unformat; + + function validate(number, allowedSeparators) { + number = unformat(number, allowedSeparators); + number = number.split(options.decimal); + if (number.length > 2) { + return false; + } else if (options.truncate != null && number[1] && number[1].length > options.truncate) { + return false; + } else if (options.round != null && number[1] && number[1].length > options.round) { + return false; + } else { + return /^-?\d+\.?\d*$/.test(number); + } + } + return format; +} + +//where x is already the integer part of the number +function addIntegerSeparators(x, separator) { + x += ''; + if (!separator) return x; + var rgx = /(\d+)(\d{3})/; + while (rgx.test(x)) { + x = x.replace(rgx, '$1' + separator + '$2'); + } + return x; +} + +//where x is already the decimal part of the number +function addDecimalSeparators(x, separator) { + x += ''; + if (!separator) return x; + var rgx = /(\d{3})(\d+)/; + while (rgx.test(x)) { + x = x.replace(rgx, '$1' + separator + '$2'); + } + return x; +} + +//where x is the integer part of the number +function padLeft(x, padding) { + x = x + ''; + var buf = []; + while (buf.length + x.length < padding) { + buf.push('0'); + } + return buf.join('') + x; +} + +//where x is the decimals part of the number +function padRight(x, padding) { + if (x) { + x += ''; + } else { + x = ''; + } + var buf = []; + while (buf.length + x.length < padding) { + buf.push('0'); + } + return x + buf.join(''); +} +function truncate(x, length) { + if (x) { + x += ''; + } + if (x && x.length > length) { + return x.substr(0, length); + } else { + return x; + } +} + +//where number is an array with 0th item as integer string and 1st item as decimal string (no negatives) +function round(number, places) { + if (number[1] && places >= 0 && number[1].length > places) { + //truncate to correct number of decimal places + var decim = number[1].slice(0, places); + //if next digit was >= 5 we need to round up + if (+(number[1].substr(places, 1)) >= 5) { + //But first count leading zeros as converting to a number will loose them + var leadingzeros = ""; + while (decim.charAt(0)==="0") { + leadingzeros = leadingzeros + "0"; + decim = decim.substr(1); + } + //Then we can change decim to a number and add 1 before replacing leading zeros + decim = (+decim + 1) + ''; + decim = leadingzeros + decim; + if (decim.length > places) { + //adding one has made it longer + number[0] = (+number[0]+ +decim.charAt(0)) + ''; //add value of firstchar to the integer part + decim = decim.substring(1); //ignore the 1st char at the beginning which is the carry to the integer part + } + } + number[1] = decim; + } + return number; +} + + +/***/ }), + +/***/ "./node_modules/raw-loader/index.js!./libs/sortabletable.js": +/*!*********************************************************!*\ + !*** ./node_modules/raw-loader!./libs/sortabletable.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = "/*----------------------------------------------------------------------------\\\r\n| Sortable Table 1.12 |\r\n|-----------------------------------------------------------------------------|\r\n| Created by Erik Arvidsson |\r\n| (http://webfx.eae.net/contact.html#erik) |\r\n| For WebFX (http://webfx.eae.net/) |\r\n|-----------------------------------------------------------------------------|\r\n| A DOM 1 based script that allows an ordinary HTML table to be sortable. |\r\n|-----------------------------------------------------------------------------|\r\n| Copyright (c) 1998 - 2006 Erik Arvidsson |\r\n|-----------------------------------------------------------------------------|\r\n| Licensed under the Apache License, Version 2.0 (the \"License\"); you may not |\r\n| use this file except in compliance with the License. You may obtain a copy |\r\n| of the License at http://www.apache.org/licenses/LICENSE-2.0 |\r\n| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\r\n| Unless required by applicable law or agreed to in writing, software |\r\n| distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT |\r\n| WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |\r\n| License for the specific language governing permissions and limitations |\r\n| under the License. |\r\n|-----------------------------------------------------------------------------|\r\n| 2003-01-10 | First version |\r\n| 2003-01-19 | Minor changes to the date parsing |\r\n| 2003-01-28 | JScript 5.0 fixes (no support for 'in' operator) |\r\n| 2003-02-01 | Sloppy typo like error fixed in getInnerText |\r\n| 2003-07-04 | Added workaround for IE cellIndex bug. |\r\n| 2003-11-09 | The bDescending argument to sort was not correctly working |\r\n| | Using onclick DOM0 event if no support for addEventListener |\r\n| | or attachEvent |\r\n| 2004-01-13 | Adding addSortType and removeSortType which makes it a lot |\r\n| | easier to add new, custom sort types. |\r\n| 2004-01-27 | Switch to use descending = false as the default sort order. |\r\n| | Change defaultDescending to suit your needs. |\r\n| 2004-03-14 | Improved sort type None look and feel a bit |\r\n| 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you |\r\n| | can use another tHead or no tHead, and you can chose some |\r\n| | other tBody. |\r\n| 2006-04-25 | Changed license to Apache Software License 2.0 |\r\n|-----------------------------------------------------------------------------|\r\n| Created 2003-01-10 | All changes are in the log above. | Updated 2006-04-25 |\r\n\\----------------------------------------------------------------------------*/\r\n\r\n\r\nfunction SortableTable(oTable, oSortTypes) {\r\n\r\n\tthis.sortTypes = oSortTypes || [];\r\n\r\n\tthis.sortColumn = null;\r\n\tthis.descending = null;\r\n\r\n\tvar oThis = this;\r\n\tthis._headerOnclick = function (e) {\r\n\t\toThis.headerOnclick(e);\r\n\t};\r\n\r\n\tif (oTable) {\r\n\t\tthis.setTable( oTable );\r\n\t\tthis.document = oTable.ownerDocument || oTable.document;\r\n\t}\r\n\telse {\r\n\t\tthis.document = document;\r\n\t}\r\n\r\n\r\n\t// only IE needs this\r\n\tvar win = this.document.defaultView || this.document.parentWindow;\r\n\tthis._onunload = function () {\r\n\t\toThis.destroy();\r\n\t};\r\n\tif (win && typeof win.attachEvent != \"undefined\") {\r\n\t\twin.attachEvent(\"onunload\", this._onunload);\r\n\t}\r\n}\r\n\r\nSortableTable.gecko = navigator.product == \"Gecko\";\r\nSortableTable.msie = /msie/i.test(navigator.userAgent);\r\n// Mozilla is faster when doing the DOM manipulations on\r\n// an orphaned element. MSIE is not\r\nSortableTable.removeBeforeSort = SortableTable.gecko;\r\n\r\nSortableTable.prototype.onsort = function () {};\r\n\r\n// default sort order. true -> descending, false -> ascending\r\nSortableTable.prototype.defaultDescending = false;\r\n\r\n// shared between all instances. This is intentional to allow external files\r\n// to modify the prototype\r\nSortableTable.prototype._sortTypeInfo = {};\r\n\r\nSortableTable.prototype.setTable = function (oTable) {\r\n\tif ( this.tHead )\r\n\t\tthis.uninitHeader();\r\n\tthis.element = oTable;\r\n\tthis.setTHead( oTable.tHead );\r\n\tthis.setTBody( oTable.tBodies[0] );\r\n};\r\n\r\nSortableTable.prototype.setTHead = function (oTHead) {\r\n\tif (this.tHead && this.tHead != oTHead )\r\n\t\tthis.uninitHeader();\r\n\tthis.tHead = oTHead;\r\n\tthis.initHeader( this.sortTypes );\r\n};\r\n\r\nSortableTable.prototype.setTBody = function (oTBody) {\r\n\tthis.tBody = oTBody;\r\n};\r\n\r\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\r\n\tif ( this.tHead )\r\n\t\tthis.uninitHeader();\r\n\tthis.sortTypes = oSortTypes || [];\r\n\tif ( this.tHead )\r\n\t\tthis.initHeader( this.sortTypes );\r\n};\r\n\r\n// adds arrow containers and events\r\n// also binds sort type to the header cells so that reordering columns does\r\n// not break the sort types\r\nSortableTable.prototype.initHeader = function (oSortTypes) {\r\n\tif (!this.tHead) return;\r\n\tvar cells = this.tHead.rows[0].cells;\r\n\tvar doc = this.tHead.ownerDocument || this.tHead.document;\r\n\tthis.sortTypes = oSortTypes || [];\r\n\tvar l = cells.length;\r\n\tvar img, c;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tc = cells[i];\r\n\t\tif (this.sortTypes[i] != null && this.sortTypes[i] != \"None\") {\r\n\t\t\timg = doc.createElement(\"IMG\");\r\n\t\t\timg.src = \"images/blank.png\";\r\n\t\t\tc.appendChild(img);\r\n\t\t\tif (this.sortTypes[i] != null)\r\n\t\t\t\tc._sortType = this.sortTypes[i];\r\n\t\t\tif (typeof c.addEventListener != \"undefined\")\r\n\t\t\t\tc.addEventListener(\"click\", this._headerOnclick, false);\r\n\t\t\telse if (typeof c.attachEvent != \"undefined\")\r\n\t\t\t\tc.attachEvent(\"onclick\", this._headerOnclick);\r\n\t\t\telse\r\n\t\t\t\tc.onclick = this._headerOnclick;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tc.setAttribute( \"_sortType\", oSortTypes[i] );\r\n\t\t\tc._sortType = \"None\";\r\n\t\t}\r\n\t}\r\n\tthis.updateHeaderArrows();\r\n};\r\n\r\n// remove arrows and events\r\nSortableTable.prototype.uninitHeader = function () {\r\n\tif (!this.tHead) return;\r\n\tvar cells = this.tHead.rows[0].cells;\r\n\tvar l = cells.length;\r\n\tvar c;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tc = cells[i];\r\n\t\tif (c._sortType != null && c._sortType != \"None\") {\r\n\t\t\tc.removeChild(c.lastChild);\r\n\t\t\tif (typeof c.removeEventListener != \"undefined\")\r\n\t\t\t\tc.removeEventListener(\"click\", this._headerOnclick, false);\r\n\t\t\telse if (typeof c.detachEvent != \"undefined\")\r\n\t\t\t\tc.detachEvent(\"onclick\", this._headerOnclick);\r\n\t\t\tc._sortType = null;\r\n\t\t\tc.removeAttribute( \"_sortType\" );\r\n\t\t}\r\n\t}\r\n};\r\n\r\nSortableTable.prototype.updateHeaderArrows = function () {\r\n\tif (!this.tHead) return;\r\n\tvar cells = this.tHead.rows[0].cells;\r\n\tvar l = cells.length;\r\n\tvar img;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tif (cells[i]._sortType != null && cells[i]._sortType != \"None\") {\r\n\t\t\timg = cells[i].lastChild;\r\n\t\t\tif (i == this.sortColumn)\r\n\t\t\t\timg.className = \"sort-arrow \" + (this.descending ? \"descending\" : \"ascending\");\r\n\t\t\telse\r\n\t\t\t\timg.className = \"sort-arrow\";\r\n\t\t}\r\n\t}\r\n};\r\n\r\nSortableTable.prototype.headerOnclick = function (e) {\r\n\t// find TD element\r\n\tvar el = e.target || e.srcElement;\r\n\twhile (el.tagName != \"TD\")\r\n\t\tel = el.parentNode;\r\n\r\n\tthis.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\r\n};\r\n\r\n// IE returns wrong cellIndex when columns are hidden\r\nSortableTable.getCellIndex = function (oTd) {\r\n\tvar cells = oTd.parentNode.childNodes\r\n\tvar l = cells.length;\r\n\tvar i;\r\n\tfor (i = 0; cells[i] != oTd && i < l; i++)\r\n\t\t;\r\n\treturn i;\r\n};\r\n\r\nSortableTable.prototype.getSortType = function (nColumn) {\r\n\treturn this.sortTypes[nColumn] || \"String\";\r\n};\r\n\r\n// only nColumn is required\r\n// if bDescending is left out the old value is taken into account\r\n// if sSortType is left out the sort type is found from the sortTypes array\r\n\r\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\r\n\tif (!this.tBody) return;\r\n\tif (sSortType == null)\r\n\t\tsSortType = this.getSortType(nColumn);\r\n\r\n\t// exit if None\r\n\tif (sSortType == \"None\")\r\n\t\treturn;\r\n\r\n\tif (bDescending == null) {\r\n\t\tif (this.sortColumn != nColumn)\r\n\t\t\tthis.descending = this.defaultDescending;\r\n\t\telse\r\n\t\t\tthis.descending = !this.descending;\r\n\t}\r\n\telse\r\n\t\tthis.descending = bDescending;\r\n\r\n\tthis.sortColumn = nColumn;\r\n\r\n\tif (typeof this.onbeforesort == \"function\")\r\n\t\tthis.onbeforesort();\r\n\r\n\tvar f = this.getSortFunction(sSortType, nColumn);\r\n\tvar a = this.getCache(sSortType, nColumn);\r\n\tvar tBody = this.tBody;\r\n\r\n\ta.sort(f);\r\n\r\n\tif (this.descending)\r\n\t\ta.reverse();\r\n\r\n\tif (SortableTable.removeBeforeSort) {\r\n\t\t// remove from doc\r\n\t\tvar nextSibling = tBody.nextSibling;\r\n\t\tvar p = tBody.parentNode;\r\n\t\tp.removeChild(tBody);\r\n\t}\r\n\r\n\t// insert in the new order\r\n\tvar l = a.length;\r\n\tfor (var i = 0; i < l; i++)\r\n\t\ttBody.appendChild(a[i].element);\r\n\r\n\tif (SortableTable.removeBeforeSort) {\r\n\t\t// insert into doc\r\n\t\tp.insertBefore(tBody, nextSibling);\r\n\t}\r\n\r\n\tthis.updateHeaderArrows();\r\n\r\n\tthis.destroyCache(a);\r\n\r\n\tif (typeof this.onsort == \"function\")\r\n\t\tthis.onsort();\r\n};\r\n\r\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\r\n\tvar oThis = this;\r\n\tthis._asyncsort = function () {\r\n\t\toThis.sort(nColumn, bDescending, sSortType);\r\n\t};\r\n\twindow.setTimeout(this._asyncsort, 1);\r\n};\r\n\r\nSortableTable.prototype.getCache = function (sType, nColumn) {\r\n\tif (!this.tBody) return [];\r\n\tvar rows = this.tBody.rows;\r\n\tvar l = rows.length;\r\n\tvar a = new Array(l);\r\n\tvar r;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tr = rows[i];\r\n\t\ta[i] = {\r\n\t\t\tvalue:\t\tthis.getRowValue(r, sType, nColumn),\r\n\t\t\telement:\tr\r\n\t\t};\r\n\t};\r\n\treturn a;\r\n};\r\n\r\nSortableTable.prototype.destroyCache = function (oArray) {\r\n\tvar l = oArray.length;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\toArray[i].value = null;\r\n\t\toArray[i].element = null;\r\n\t\toArray[i] = null;\r\n\t}\r\n};\r\n\r\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\r\n\t// if we have defined a custom getRowValue use that\r\n\tif (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\r\n\t\treturn this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\r\n\r\n\tvar s;\r\n\tvar c = oRow.cells[nColumn];\r\n\tif (typeof c.innerText != \"undefined\")\r\n\t\ts = c.innerText;\r\n\telse\r\n\t\ts = SortableTable.getInnerText(c);\r\n\treturn this.getValueFromString(s, sType);\r\n};\r\n\r\nSortableTable.getInnerText = function (oNode) {\r\n\tvar s = \"\";\r\n\tvar cs = oNode.childNodes;\r\n\tvar l = cs.length;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tswitch (cs[i].nodeType) {\r\n\t\t\tcase 1: //ELEMENT_NODE\r\n\t\t\t\ts += SortableTable.getInnerText(cs[i]);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 3:\t//TEXT_NODE\r\n\t\t\t\ts += cs[i].nodeValue;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn s;\r\n};\r\n\r\nSortableTable.prototype.getValueFromString = function (sText, sType) {\r\n\tif (this._sortTypeInfo[sType])\r\n\t\treturn this._sortTypeInfo[sType].getValueFromString( sText );\r\n\treturn sText;\r\n\t/*\r\n\tswitch (sType) {\r\n\t\tcase \"Number\":\r\n\t\t\treturn Number(sText);\r\n\t\tcase \"CaseInsensitiveString\":\r\n\t\t\treturn sText.toUpperCase();\r\n\t\tcase \"Date\":\r\n\t\t\tvar parts = sText.split(\"-\");\r\n\t\t\tvar d = new Date(0);\r\n\t\t\td.setFullYear(parts[0]);\r\n\t\t\td.setDate(parts[2]);\r\n\t\t\td.setMonth(parts[1] - 1);\r\n\t\t\treturn d.valueOf();\r\n\t}\r\n\treturn sText;\r\n\t*/\r\n\t};\r\n\r\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\r\n\tif (this._sortTypeInfo[sType])\r\n\t\treturn this._sortTypeInfo[sType].compare;\r\n\treturn SortableTable.basicCompare;\r\n};\r\n\r\nSortableTable.prototype.destroy = function () {\r\n\tthis.uninitHeader();\r\n\tvar win = this.document.parentWindow;\r\n\tif (win && typeof win.detachEvent != \"undefined\") {\t// only IE needs this\r\n\t\twin.detachEvent(\"onunload\", this._onunload);\r\n\t}\r\n\tthis._onunload = null;\r\n\tthis.element = null;\r\n\tthis.tHead = null;\r\n\tthis.tBody = null;\r\n\tthis.document = null;\r\n\tthis._headerOnclick = null;\r\n\tthis.sortTypes = null;\r\n\tthis._asyncsort = null;\r\n\tthis.onsort = null;\r\n};\r\n\r\n// Adds a sort type to all instance of SortableTable\r\n// sType : String - the identifier of the sort type\r\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\r\n// string and casts it to a desired format. If left out the string is just\r\n// returned\r\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\r\n// compare function. Takes two values and compares them. If left out less than,\r\n// <, compare is used\r\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\r\n// that takes the row and the column index and returns the value used to compare.\r\n// If left out then the innerText is first taken for the cell and then the\r\n// fGetValueFromString is used to convert that string the desired value and type\r\n\r\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\r\n\tthis._sortTypeInfo[sType] = {\r\n\t\ttype:\t\t\t\tsType,\r\n\t\tgetValueFromString:\tfGetValueFromString || SortableTable.idFunction,\r\n\t\tcompare:\t\t\tfCompareFunction || SortableTable.basicCompare,\r\n\t\tgetRowValue:\t\tfGetRowValue\r\n\t};\r\n};\r\n\r\n// this removes the sort type from all instances of SortableTable\r\nSortableTable.prototype.removeSortType = function (sType) {\r\n\tdelete this._sortTypeInfo[sType];\r\n};\r\n\r\nSortableTable.basicCompare = function compare(n1, n2) {\r\n\tif (n1.value < n2.value)\r\n\t\treturn -1;\r\n\tif (n2.value < n1.value)\r\n\t\treturn 1;\r\n\treturn 0;\r\n};\r\n\r\nSortableTable.idFunction = function (x) {\r\n\treturn x;\r\n};\r\n\r\nSortableTable.toUpperCase = function (s) {\r\n\treturn s.toUpperCase();\r\n};\r\n\r\nSortableTable.toDate = function (s) {\r\n\tvar parts = s.split(\"-\");\r\n\tvar d = new Date(0);\r\n\td.setFullYear(parts[0]);\r\n\td.setDate(parts[2]);\r\n\td.setMonth(parts[1] - 1);\r\n\treturn d.valueOf();\r\n};\r\n\r\n\r\n// add sort types\r\nSortableTable.prototype.addSortType(\"Number\", Number);\r\nSortableTable.prototype.addSortType(\"CaseInsensitiveString\", SortableTable.toUpperCase);\r\nSortableTable.prototype.addSortType(\"Date\", SortableTable.toDate);\r\nSortableTable.prototype.addSortType(\"String\");\r\n// None is a special case\r\n" + +/***/ }), + +/***/ "./node_modules/script-loader/addScript.js": +/*!*************************************************!*\ + !*** ./node_modules/script-loader/addScript.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +module.exports = function(src) { + function log(error) { + (typeof console !== "undefined") + && (console.error || console.log)("[Script Loader]", error); + } + + // Check for IE =< 8 + function isIE() { + return typeof attachEvent !== "undefined" && typeof addEventListener === "undefined"; + } + + try { + if (typeof execScript !== "undefined" && isIE()) { + execScript(src); + } else if (typeof eval !== "undefined") { + eval.call(null, src); + } else { + log("EvalError: No eval function available"); + } + } catch (error) { + log(error); + } +} + + +/***/ }), + +/***/ "./node_modules/script-loader/index.js!./libs/sortabletable.js": +/*!************************************************************!*\ + !*** ./node_modules/script-loader!./libs/sortabletable.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(/*! !./node_modules/script-loader/addScript.js */ "./node_modules/script-loader/addScript.js")(__webpack_require__(/*! !./node_modules/raw-loader!./libs/sortabletable.js */ "./node_modules/raw-loader/index.js!./libs/sortabletable.js")+"\n\n// SCRIPT-LOADER FOOTER\n//# sourceURL=script:///C:/projects/dev/github/TableFilter/libs/sortabletable.js") + +/***/ }), + +/***/ "./src sync recursive ^\\.\\/.*$": +/*!***************************!*\ + !*** ./src sync ^\.\/.*$ ***! + \***************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var map = { + "./array": "./src/array.js", + "./array.js": "./src/array.js", + "./const": "./src/const.js", + "./const.js": "./src/const.js", + "./cookie": "./src/cookie.js", + "./cookie.js": "./src/cookie.js", + "./dom": "./src/dom.js", + "./dom.js": "./src/dom.js", + "./emitter": "./src/emitter.js", + "./emitter.js": "./src/emitter.js", + "./event": "./src/event.js", + "./event.js": "./src/event.js", + "./extensions/advancedGrid/adapterEzEditTable": "./src/extensions/advancedGrid/adapterEzEditTable.js", + "./extensions/advancedGrid/adapterEzEditTable.js": "./src/extensions/advancedGrid/adapterEzEditTable.js", + "./extensions/advancedGrid/advancedGrid": "./src/extensions/advancedGrid/advancedGrid.js", + "./extensions/advancedGrid/advancedGrid.js": "./src/extensions/advancedGrid/advancedGrid.js", + "./extensions/colOps/colOps": "./src/extensions/colOps/colOps.js", + "./extensions/colOps/colOps.js": "./src/extensions/colOps/colOps.js", + "./extensions/colsVisibility/colsVisibility": "./src/extensions/colsVisibility/colsVisibility.js", + "./extensions/colsVisibility/colsVisibility.js": "./src/extensions/colsVisibility/colsVisibility.js", + "./extensions/filtersVisibility/filtersVisibility": "./src/extensions/filtersVisibility/filtersVisibility.js", + "./extensions/filtersVisibility/filtersVisibility.js": "./src/extensions/filtersVisibility/filtersVisibility.js", + "./extensions/sort/adapterSortabletable": "./src/extensions/sort/adapterSortabletable.js", + "./extensions/sort/adapterSortabletable.js": "./src/extensions/sort/adapterSortabletable.js", + "./extensions/sort/sort": "./src/extensions/sort/sort.js", + "./extensions/sort/sort.js": "./src/extensions/sort/sort.js", + "./feature": "./src/feature.js", + "./feature.js": "./src/feature.js", + "./modules/alternateRows": "./src/modules/alternateRows.js", + "./modules/alternateRows.js": "./src/modules/alternateRows.js", + "./modules/baseDropdown": "./src/modules/baseDropdown.js", + "./modules/baseDropdown.js": "./src/modules/baseDropdown.js", + "./modules/checkList": "./src/modules/checkList.js", + "./modules/checkList.js": "./src/modules/checkList.js", + "./modules/clearButton": "./src/modules/clearButton.js", + "./modules/clearButton.js": "./src/modules/clearButton.js", + "./modules/dateType": "./src/modules/dateType.js", + "./modules/dateType.js": "./src/modules/dateType.js", + "./modules/dropdown": "./src/modules/dropdown.js", + "./modules/dropdown.js": "./src/modules/dropdown.js", + "./modules/gridLayout": "./src/modules/gridLayout.js", + "./modules/gridLayout.js": "./src/modules/gridLayout.js", + "./modules/hash": "./src/modules/hash.js", + "./modules/hash.js": "./src/modules/hash.js", + "./modules/help": "./src/modules/help.js", + "./modules/help.js": "./src/modules/help.js", + "./modules/highlightKeywords": "./src/modules/highlightKeywords.js", + "./modules/highlightKeywords.js": "./src/modules/highlightKeywords.js", + "./modules/loader": "./src/modules/loader.js", + "./modules/loader.js": "./src/modules/loader.js", + "./modules/markActiveColumns": "./src/modules/markActiveColumns.js", + "./modules/markActiveColumns.js": "./src/modules/markActiveColumns.js", + "./modules/noResults": "./src/modules/noResults.js", + "./modules/noResults.js": "./src/modules/noResults.js", + "./modules/paging": "./src/modules/paging.js", + "./modules/paging.js": "./src/modules/paging.js", + "./modules/popupFilter": "./src/modules/popupFilter.js", + "./modules/popupFilter.js": "./src/modules/popupFilter.js", + "./modules/rowsCounter": "./src/modules/rowsCounter.js", + "./modules/rowsCounter.js": "./src/modules/rowsCounter.js", + "./modules/state": "./src/modules/state.js", + "./modules/state.js": "./src/modules/state.js", + "./modules/statusBar": "./src/modules/statusBar.js", + "./modules/statusBar.js": "./src/modules/statusBar.js", + "./modules/storage": "./src/modules/storage.js", + "./modules/storage.js": "./src/modules/storage.js", + "./modules/toolbar": "./src/modules/toolbar.js", + "./modules/toolbar.js": "./src/modules/toolbar.js", + "./number": "./src/number.js", + "./number.js": "./src/number.js", + "./root": "./src/root.js", + "./root.js": "./src/root.js", + "./settings": "./src/settings.js", + "./settings.js": "./src/settings.js", + "./sort": "./src/sort.js", + "./sort.js": "./src/sort.js", + "./string": "./src/string.js", + "./string.js": "./src/string.js", + "./tablefilter": "./src/tablefilter.js", + "./tablefilter.js": "./src/tablefilter.js", + "./types": "./src/types.js", + "./types.js": "./src/types.js" +}; + + +function webpackContext(req) { + var id = webpackContextResolve(req); + var module = __webpack_require__(id); + return module; +} +function webpackContextResolve(req) { + var id = map[req]; + if(!(id + 1)) { // check for number or string + var e = new Error('Cannot find module "' + req + '".'); + e.code = 'MODULE_NOT_FOUND'; + throw e; + } + return id; +} +webpackContext.keys = function webpackContextKeys() { + return Object.keys(map); +}; +webpackContext.resolve = webpackContextResolve; +module.exports = webpackContext; +webpackContext.id = "./src sync recursive ^\\.\\/.*$"; + +/***/ }), + +/***/ "./src/extensions/advancedGrid/adapterEzEditTable.js": +/*!***********************************************************!*\ + !*** ./src/extensions/advancedGrid/adapterEzEditTable.js ***! + \***********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AdapterEzEditTable; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../const */ "./src/const.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../settings */ "./src/settings.js"); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../root */ "./src/root.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + +var INSTANTIATION_ERROR = "Failed to instantiate EditTable object.\n \n\"ezEditTable\" dependency not found."; +/** + * Adapter module for ezEditTable, an external library providing advanced + * grid features (selection and edition): + * http://codecanyon.net/item/ezedittable-enhance-html-tables/2425123?ref=koalyptus + */ + +var AdapterEzEditTable = +/*#__PURE__*/ +function (_Feature) { + _inherits(AdapterEzEditTable, _Feature); + + /** + * Creates an instance of AdapterEzEditTable + * + * @param {TableFilter} tf TableFilter instance + * @param {Object} cfg Configuration options for ezEditTable library + */ + function AdapterEzEditTable(tf, cfg) { + var _this; + + _classCallCheck(this, AdapterEzEditTable); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(AdapterEzEditTable).call(this, tf, cfg.name)); + /** + * Module description + * @type {String} + */ + + _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.description, 'ezEditTable adapter'); + /** + * Filename of ezEditTable library + * @type {String} + */ + + _this.filename = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.filename, 'ezEditTable.js'); + /** + * Path to ezEditTable library + * @type {String} + */ + + _this.vendorPath = cfg.vendor_path; + /** + * Load ezEditTable stylesheet + * @type {Boolean} + */ + + _this.loadStylesheet = Boolean(cfg.load_stylesheet); + /** + * Path to ezEditTable stylesheet + * @type {String} + */ + + _this.stylesheet = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.stylesheet, _this.vendorPath + 'ezEditTable.css'); + /** + * Name of ezEditTable stylesheet + * @type {String} + */ + + _this.stylesheetName = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.stylesheet_name, 'ezEditTableCss'); // Enable the ezEditTable's scroll into view behaviour if grid layout on + + cfg.scroll_into_view = cfg.scroll_into_view === false ? false : tf.gridLayout; + /** + * ezEditTable instance + * @type {EditTable} + * @private + */ + + _this._ezEditTable = null; + /** + * ezEditTable configuration + * @private + */ + + _this.cfg = cfg; + + _this.enable(); + + return _this; + } + /** + * Conditionally load ezEditTable library and set advanced grid + */ + + + _createClass(AdapterEzEditTable, [{ + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized) { + return; + } + + var tf = this.tf; + + if (_root__WEBPACK_IMPORTED_MODULE_4__["root"].EditTable) { + this._setAdvancedGrid(); + } else { + var path = this.vendorPath + this.filename; + tf.import(this.filename, path, function () { + return _this2._setAdvancedGrid(); + }); + } + + if (this.loadStylesheet && !tf.isImported(this.stylesheet, 'link')) { + tf.import(this.stylesheetName, this.stylesheet, null, 'link'); + } // TODO: hack to prevent ezEditTable enter key event hijaking. + // Needs to be fixed in the vendor's library + + + this.emitter.on(['filter-focus', 'filter-blur'], function () { + return _this2._toggleForInputFilter(); + }); + /** + * @inherited + */ + + this.initialized = true; + } + /** + * Instantiate ezEditTable component for advanced grid features + * @private + */ + + }, { + key: "_setAdvancedGrid", + value: function _setAdvancedGrid() { + var tf = this.tf; //start row for EditTable constructor needs to be calculated + + var startRow, + cfg = this.cfg, + thead = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(tf.dom(), 'thead'); //if thead exists and startRow not specified, startRow is calculated + //automatically by EditTable + + if (thead.length > 0 && !cfg.startRow) { + startRow = undefined; + } //otherwise startRow config property if any or TableFilter refRow + else { + startRow = cfg.startRow || tf.refRow; + } + + cfg.base_path = cfg.base_path || tf.basePath + 'ezEditTable/'; + var editable = cfg.editable; + var selectable = cfg.selection; + + if (selectable) { + cfg.default_selection = cfg.default_selection || 'row'; + } //CSS Styles + + + cfg.active_cell_css = cfg.active_cell_css || 'ezETSelectedCell'; + var _lastValidRowIndex = 0; + var _lastRowIndex = 0; + + if (selectable) { + //Row navigation needs to be calculated according to TableFilter's + //validRowsIndex array + var onAfterSelection = function onAfterSelection(et, selectedElm, e) { + var slc = et.Selection; //Next valid filtered row needs to be selected + + var doSelect = function doSelect(nextRowIndex) { + if (et.defaultSelection === 'row') { + /* eslint-disable */ + slc.SelectRowByIndex(nextRowIndex); + /* eslint-enable */ + } else { + /* eslint-disable */ + et.ClearSelections(); + /* eslint-enable */ + + var cellIndex = selectedElm.cellIndex, + _row = tf.dom().rows[nextRowIndex]; + + if (et.defaultSelection === 'both') { + /* eslint-disable */ + slc.SelectRowByIndex(nextRowIndex); + /* eslint-enable */ + } + + if (_row) { + /* eslint-disable */ + slc.SelectCell(_row.cells[cellIndex]); + /* eslint-enable */ + } + } //Table is filtered + + + if (tf.validRowsIndex.length !== tf.getRowsNb()) { + var r = tf.dom().rows[nextRowIndex]; + + if (r) { + r.scrollIntoView(false); + } + + if (cell) { + if (cell.cellIndex === tf.getCellsNb() - 1 && tf.gridLayout) { + tf.tblCont.scrollLeft = 100000000; + } else if (cell.cellIndex === 0 && tf.gridLayout) { + tf.tblCont.scrollLeft = 0; + } else { + cell.scrollIntoView(false); + } + } + } + }; //table is not filtered + + + if (!tf.validRowsIndex) { + return; + } + + var validIndexes = tf.validRowsIndex, + validIdxLen = validIndexes.length, + row = et.defaultSelection !== 'row' ? selectedElm.parentNode : selectedElm, + //cell for default_selection = 'both' or 'cell' + cell = selectedElm.nodeName === 'TD' ? selectedElm : null, + + /* eslint-disable */ + keyCode = e !== undefined ? et.Event.GetKey(e) : 0, + + /* eslint-enable */ + isRowValid = validIndexes.indexOf(row.rowIndex) !== -1, + nextRowIndex, + paging = tf.feature('paging'), + //pgup/pgdown keys + d = keyCode === 34 || keyCode === 33 ? paging && paging.pageLength || et.nbRowsPerPage : 1; //If next row is not valid, next valid filtered row needs to be + //calculated + + if (!isRowValid) { + //Selection direction up/down + if (row.rowIndex > _lastRowIndex) { + //last row + if (row.rowIndex >= validIndexes[validIdxLen - 1]) { + nextRowIndex = validIndexes[validIdxLen - 1]; + } else { + var calcRowIndex = _lastValidRowIndex + d; + + if (calcRowIndex > validIdxLen - 1) { + nextRowIndex = validIndexes[validIdxLen - 1]; + } else { + nextRowIndex = validIndexes[calcRowIndex]; + } + } + } else { + //first row + if (row.rowIndex <= validIndexes[0]) { + nextRowIndex = validIndexes[0]; + } else { + var v = validIndexes[_lastValidRowIndex - d]; + nextRowIndex = v ? v : validIndexes[0]; + } + } + + _lastRowIndex = row.rowIndex; + doSelect(nextRowIndex); + } else { + //If filtered row is valid, special calculation for + //pgup/pgdown keys + if (keyCode !== 34 && keyCode !== 33) { + _lastValidRowIndex = validIndexes.indexOf(row.rowIndex); + _lastRowIndex = row.rowIndex; + } else { + if (keyCode === 34) { + //pgdown + //last row + if (_lastValidRowIndex + d <= validIdxLen - 1) { + nextRowIndex = validIndexes[_lastValidRowIndex + d]; + } else { + nextRowIndex = [validIdxLen - 1]; + } + } else { + //pgup + //first row + if (_lastValidRowIndex - d <= validIndexes[0]) { + nextRowIndex = validIndexes[0]; + } else { + nextRowIndex = validIndexes[_lastValidRowIndex - d]; + } + } + + _lastRowIndex = nextRowIndex; + _lastValidRowIndex = validIndexes.indexOf(nextRowIndex); + doSelect(nextRowIndex); + } + } + }; //Page navigation has to be enforced whenever selected row is out of + //the current page range + + + var onBeforeSelection = function onBeforeSelection(et, selectedElm) { + var row = et.defaultSelection !== 'row' ? selectedElm.parentNode : selectedElm; + + if (tf.paging) { + if (tf.feature('paging').nbPages > 1) { + var paging = tf.feature('paging'); //page length is re-assigned in case it has changed + + et.nbRowsPerPage = paging.pageLength; + var validIndexes = tf.validRowsIndex, + validIdxLen = validIndexes.length, + pagingEndRow = parseInt(paging.startPagingRow, 10) + parseInt(paging.pageLength, 10); + var rowIndex = row.rowIndex; + + if (rowIndex === validIndexes[validIdxLen - 1] && paging.currentPageNb !== paging.nbPages) { + paging.setPage('last'); + } else if (rowIndex === validIndexes[0] && paging.currentPageNb !== 1) { + paging.setPage('first'); + } else if (rowIndex > validIndexes[pagingEndRow - 1] && rowIndex < validIndexes[validIdxLen - 1]) { + paging.setPage('next'); + } else if (rowIndex < validIndexes[paging.startPagingRow] && rowIndex > validIndexes[0]) { + paging.setPage('previous'); + } + } + } + }; //Selected row needs to be visible when paging is activated + + + if (tf.paging) { + tf.feature('paging').onAfterChangePage = function (paging) { + var advGrid = paging.tf.extension('advancedGrid'); + var et = advGrid._ezEditTable; + var slc = et.Selection; + /* eslint-disable */ + + var row = slc.GetActiveRow(); + /* eslint-enable */ + + if (row) { + row.scrollIntoView(false); + } + /* eslint-disable */ + + + var cell = slc.GetActiveCell(); + /* eslint-enable */ + + if (cell) { + cell.scrollIntoView(false); + } + }; + } //Rows navigation when rows are filtered is performed with the + //EditTable row selection callback events + + + if (cfg.default_selection === 'row') { + var fnB = cfg.on_before_selected_row; + + cfg.on_before_selected_row = function () { + var args = arguments; + onBeforeSelection(args[0], args[1], args[2]); + + if (fnB) { + fnB.call(null, args[0], args[1], args[2]); + } + }; + + var fnA = cfg.on_after_selected_row; + + cfg.on_after_selected_row = function () { + var args = arguments; + onAfterSelection(args[0], args[1], args[2]); + + if (fnA) { + fnA.call(null, args[0], args[1], args[2]); + } + }; + } else { + var fnD = cfg.on_before_selected_cell; + + cfg.on_before_selected_cell = function () { + var args = arguments; + onBeforeSelection(args[0], args[1], args[2]); + + if (fnD) { + fnD.call(null, args[0], args[1], args[2]); + } + }; + + var fnC = cfg.on_after_selected_cell; + + cfg.on_after_selected_cell = function () { + var args = arguments; + onAfterSelection(args[0], args[1], args[2]); + + if (fnC) { + fnC.call(null, args[0], args[1], args[2]); + } + }; + } + } + + if (editable) { + //Added or removed rows, TF rows number needs to be re-calculated + var fnE = cfg.on_added_dom_row; + + cfg.on_added_dom_row = function () { + var args = arguments; + tf.nbFilterableRows++; + + if (!tf.paging) { + tf.emitter.emit('rows-changed', tf, this); + } else { + tf.nbFilterableRows++; + tf.paging = false; + tf.feature('paging').destroy(); + tf.feature('paging').reset(); + } + + if (tf.alternateRows) { + tf.feature('alternateRows').init(); + } + + if (fnE) { + fnE.call(null, args[0], args[1], args[2]); + } + }; + + if (cfg.actions && cfg.actions['delete']) { + var fnF = cfg.actions['delete'].on_after_submit; + + cfg.actions['delete'].on_after_submit = function () { + var args = arguments; + tf.nbFilterableRows--; + + if (!tf.paging) { + tf.emitter.emit('rows-changed', tf, this); + } else { + tf.nbFilterableRows--; + tf.paging = false; + tf.feature('paging').destroy(); + tf.feature('paging').reset(false); + } + + if (tf.alternateRows) { + tf.feature('alternateRows').init(); + } + + if (fnF) { + fnF.call(null, args[0], args[1]); + } + }; + } + } + + try { + /* eslint-disable */ + this._ezEditTable = new EditTable(tf.id, cfg, startRow); + + this._ezEditTable.Init(); + /* eslint-enable */ + + } catch (e) { + throw new Error(INSTANTIATION_ERROR); + } + + this.initialized = true; + } + /** + * Reset advanced grid when previously removed + */ + + }, { + key: "reset", + value: function reset() { + var ezEditTable = this._ezEditTable; + + if (ezEditTable) { + if (this.cfg.selection) { + /* eslint-disable */ + ezEditTable.Selection.Set(); + /* eslint-enable */ + } + + if (this.cfg.editable) { + /* eslint-disable */ + ezEditTable.Editable.Set(); + /* eslint-enable */ + } + } + } + /** + * Toggle behaviour + */ + + }, { + key: "toggle", + value: function toggle() { + var ezEditTable = this._ezEditTable; + + if (ezEditTable.editable) { + /* eslint-disable */ + ezEditTable.Editable.Remove(); + /* eslint-enable */ + } else { + /* eslint-disable */ + ezEditTable.Editable.Set(); + /* eslint-enable */ + } + + if (ezEditTable.selection) { + /* eslint-disable */ + ezEditTable.Selection.Remove(); + /* eslint-enable */ + } else { + /* eslint-disable */ + ezEditTable.Selection.Set(); + /* eslint-enable */ + } + } + }, { + key: "_toggleForInputFilter", + value: function _toggleForInputFilter() { + var tf = this.tf; + + if (!tf.getActiveFilterId()) { + return; + } + + var colIndex = tf.getColumnIndexFromFilterId(tf.getActiveFilterId()); + var filterType = tf.getFilterType(colIndex); + + if (filterType === _const__WEBPACK_IMPORTED_MODULE_2__["INPUT"]) { + this.toggle(); + } + } + /** + * Remove advanced grid + */ + + }, { + key: "destroy", + value: function destroy() { + var _this3 = this; + + if (!this.initialized) { + return; + } + + var ezEditTable = this._ezEditTable; + + if (ezEditTable) { + if (this.cfg.selection) { + /* eslint-disable */ + ezEditTable.Selection.ClearSelections(); + ezEditTable.Selection.Remove(); + /* eslint-enable */ + } + + if (this.cfg.editable) { + /* eslint-disable */ + ezEditTable.Editable.Remove(); + /* eslint-enable */ + } + } + + this.emitter.off(['filter-focus', 'filter-blur'], function () { + return _this3._toggleForInputFilter(); + }); + this.initialized = false; + } + }]); + + return AdapterEzEditTable; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + + + +/***/ }), + +/***/ "./src/extensions/advancedGrid/advancedGrid.js": +/*!*****************************************************!*\ + !*** ./src/extensions/advancedGrid/advancedGrid.js ***! + \*****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _adapterEzEditTable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adapterEzEditTable */ "./src/extensions/advancedGrid/adapterEzEditTable.js"); + +/* harmony default export */ __webpack_exports__["default"] = (_adapterEzEditTable__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/***/ }), + +/***/ "./src/extensions/colOps/colOps.js": +/*!*****************************************!*\ + !*** ./src/extensions/colOps/colOps.js ***! + \*****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ColOps; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types */ "./src/types.js"); +/* harmony import */ var _sort__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../sort */ "./src/sort.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../const */ "./src/const.js"); +/* harmony import */ var format_number__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! format-number */ "./node_modules/format-number/index.js"); +/* harmony import */ var format_number__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(format_number__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../settings */ "./src/settings.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../event */ "./src/event.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + + + +var EVENTS = ['after-filtering', 'after-page-change', 'after-page-length-change']; +var SUM = 'sum'; +var MEAN = 'mean'; +var MIN = 'min'; +var MAX = 'max'; +var MEDIAN = 'median'; +var Q1 = 'q1'; +var Q3 = 'q3'; +/** + * Column calculations extension + */ + +var ColOps = +/*#__PURE__*/ +function (_Feature) { + _inherits(ColOps, _Feature); + + /** + * Creates an instance of ColOps + * + * @param {TableFilter} tf TableFilter instance + * @param {Object} opts Configuration object + */ + function ColOps(tf, opts) { + var _this; + + _classCallCheck(this, ColOps); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(ColOps).call(this, tf, opts.name)); + /** + * Callback fired before columns operations start + * @type {Function} + */ + + _this.onBeforeOperation = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_before_operation, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after columns operations are completed + * @type {Function} + */ + + _this.onAfterOperation = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_after_operation, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Configuration options + * @type {Object} + */ + + _this.opts = opts; + /** + * List of DOM element IDs containing column's calculation result + * @type {Array} + */ + + _this.labelIds = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.id, []); + /** + * List of columns' indexes for calculations + * @type {Array} + */ + + _this.colIndexes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.col, []); + /** + * List of operations - possible values: 'sum', 'mean', 'min', 'max', + * 'median', 'q1', 'q3' + * @type {Array} + */ + + _this.operations = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.operation, []); + /** + * List of write methods used to write the result - possible values: + * 'innerHTML', 'setValue', 'createTextNode' + * @type {Array} + */ + + _this.outputTypes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.write_method, []); + /** + * List of format objects used for formatting the result - + * refer to https://github.com/componitable/format-number to check + * configuration options + * @type {Array} + */ + + _this.formatResults = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.format_result, []); + /** + * List of row indexes displaying the results + * @type {Array} + */ + + _this.totRowIndexes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.tot_row_index, []); + /** + * List of row indexes excluded from calculations + * @type {Array} + */ + + _this.excludeRows = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.exclude_row, []); + /** + * List of decimal precision for calculation results + * @type {Array} + */ + + _this.decimalPrecisions = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.decimal_precision, 2); + + _this.enable(); + + return _this; + } + /** + * Initializes ColOps instance + */ + + + _createClass(ColOps, [{ + key: "init", + value: function init() { + if (this.initialized) { + return; + } // subscribe to events + + + this.emitter.on(EVENTS, Object(_event__WEBPACK_IMPORTED_MODULE_7__["bound"])(this.calcAll, this)); + this.calcAll(); + /** @inherited */ + + this.initialized = true; + } + /** + * Calculates columns' values + * Configuration options are stored in 'opts' property + * - 'id' contains ids of elements showing result (array) + * - 'col' contains the columns' indexes (array) + * - 'operation' contains operation type (array, values: 'sum', 'mean', + * 'min', 'max', 'median', 'q1', 'q3') + * - 'write_method' array defines which method to use for displaying the + * result (innerHTML, setValue, createTextNode) - default: 'innerHTML' + * - 'tot_row_index' defines in which row results are displayed + * (integers array) + * + * - changes made by Nuovella: + * (1) optimized the routine (now it will only process each column once), + * (2) added calculations for the median, lower and upper quartile. + */ + + }, { + key: "calcAll", + value: function calcAll() { + var tf = this.tf; + + if (!tf.isInitialized()) { + return; + } + + this.onBeforeOperation(tf, this); + this.emitter.emit('before-column-operation', tf, this); + var colIndexes = this.colIndexes, + colOperations = this.operations, + outputTypes = this.outputTypes, + totRowIndexes = this.totRowIndexes, + excludeRows = this.excludeRows, + formatResults = this.formatResults, + decimalPrecisions = this.decimalPrecisions; //nuovella: determine unique list of columns to operate on + + var uIndexes = []; + colIndexes.forEach(function (val) { + if (uIndexes.indexOf(val) === -1) { + uIndexes.push(val); + } + }); + var nbCols = uIndexes.length, + rows = tf.dom().rows, + colValues = []; + + for (var u = 0; u < nbCols; u++) { + //this retrieves col values + //use uIndexes because we only want to pass through this loop + //once for each column get the values in this unique column + colValues.push(tf.getVisibleColumnData(uIndexes[u], false, excludeRows)); + var curValues = colValues[u]; //next: calculate all operations for this column + + var result = 0, + operations = [], + precisions = [], + labels = [], + writeType = void 0, + formatResult = [], + idx = 0; + + for (var k = 0; k < colIndexes.length; k++) { + if (colIndexes[k] !== uIndexes[u]) { + continue; + } + + operations[idx] = (colOperations[k] || 'sum').toLowerCase(); + precisions[idx] = decimalPrecisions[k]; + labels[idx] = this.labelIds[k]; + writeType = Object(_types__WEBPACK_IMPORTED_MODULE_2__["isArray"])(outputTypes) ? outputTypes[k] : null; + formatResult[idx] = this.configureFormat(uIndexes[u], formatResults[k]); + idx++; + } + + for (var i = 0; i < idx; i++) { + // emit values before column calculation + this.emitter.emit('before-column-calc', tf, this, uIndexes[u], curValues, operations[i], precisions[i]); + result = Number(this.calc(curValues, operations[i], null)); // emit column calculation result + + this.emitter.emit('column-calc', tf, this, uIndexes[u], result, operations[i], precisions[i]); // write result in expected DOM element + + this.writeResult(result, labels[i], writeType, precisions[i], formatResult[i]); + } //for i + // row(s) with result are always visible + + + var totRow = totRowIndexes && totRowIndexes[u] ? rows[totRowIndexes[u]] : null; + + if (totRow) { + totRow.style.display = ''; + } + } //for u + + + this.onAfterOperation(tf, this); + this.emitter.emit('after-column-operation', tf, this); + } + /** + * Make desired calculation on specified column. + * @param {Number} colIndex Column index + * @param {String} [operation=SUM] Operation type + * @param {Number} precision Decimal precision + * @returns {Number} + */ + + }, { + key: "columnCalc", + value: function columnCalc(colIndex) { + var operation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SUM; + var precision = arguments.length > 2 ? arguments[2] : undefined; + var excludeRows = this.excludeRows || []; + var colValues = tf.getVisibleColumnData(colIndex, false, excludeRows); + return Number(this.calc(colValues, operation, precision)); + } + /** + * Make calculation on passed values. + * @param {Array} values List of values + * @param {String} [operation=SUM] Optional operation type + * @param {Number} precision Optional result precision + * @returns {Number} + * @private + */ + + }, { + key: "calc", + value: function calc(colValues) { + var operation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SUM; + var precision = arguments.length > 2 ? arguments[2] : undefined; + var result = 0; + + if (operation === Q1 || operation === Q3 || operation === MEDIAN) { + colValues = this.sortColumnValues(colValues, _sort__WEBPACK_IMPORTED_MODULE_3__["numSortAsc"]); + } + + switch (operation) { + case MEAN: + result = this.calcMean(colValues); + break; + + case SUM: + result = this.calcSum(colValues); + break; + + case MIN: + result = this.calcMin(colValues); + break; + + case MAX: + result = this.calcMax(colValues); + break; + + case MEDIAN: + result = this.calcMedian(colValues); + break; + + case Q1: + result = this.calcQ1(colValues); + break; + + case Q3: + result = this.calcQ3(colValues); + break; + } + + return Object(_types__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(precision) ? result : result.toFixed(precision); + } + /** + * Calculate the sum of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcSum", + value: function calcSum() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + + if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(values)) { + return 0; + } + + var result = values.reduce(function (x, y) { + return Number(x) + Number(y); + }); + return result; + } + /** + * Calculate the mean of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcMean", + value: function calcMean() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var result = this.calcSum(values) / values.length; + return Number(result); + } + /** + * Calculate the max value of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcMax", + value: function calcMax() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + return Math.max.apply(null, values); + } + /** + * Calculate the min value of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcMin", + value: function calcMin() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + return Math.min.apply(null, values); + } + /** + * Calculate the median of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcMedian", + value: function calcMedian() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var nbValues = values.length; + var aux = 0; + + if (nbValues % 2 === 1) { + aux = Math.floor(nbValues / 2); + return Number(values[aux]); + } + + return (Number(values[nbValues / 2]) + Number(values[nbValues / 2 - 1])) / 2; + } + /** + * Calculate the lower quartile of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcQ1", + value: function calcQ1() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var nbValues = values.length; + var posa = 0.0; + posa = Math.floor(nbValues / 4); + + if (4 * posa === nbValues) { + return (Number(values[posa - 1]) + Number(values[posa])) / 2; + } + + return Number(values[posa]); + } + /** + * Calculate the upper quartile of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcQ3", + value: function calcQ3() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var nbValues = values.length; + var posa = 0.0; + var posb = 0.0; + posa = Math.floor(nbValues / 4); + + if (4 * posa === nbValues) { + posb = 3 * posa; + return (Number(values[posb]) + Number(values[posb - 1])) / 2; + } + + return Number(values[nbValues - posa - 1]); + } + /** + * Sort passed values with supplied sorter function. + * @param {Array} [values=[]] List of values to be sorted + * @param {Function} sorter Sorter function + * @returns {Array} + */ + + }, { + key: "sortColumnValues", + value: function sortColumnValues() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var sorter = arguments.length > 1 ? arguments[1] : undefined; + return values.sort(sorter); + } + /** + * Write calculation result in passed DOM element with supplied write method + * and decimal precision. + * @param {Number} [result=0] Calculation result + * @param {DOMElement} label DOM element + * @param {String} [writeType='innerhtml'] Write method + * @param {Number} [precision=2] Applied decimal precision + * @private + */ + + }, { + key: "writeResult", + value: function writeResult() { + var result = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + var label = arguments.length > 1 ? arguments[1] : undefined; + var writeType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'innerhtml'; + var precision = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 2; + var format = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; + var labelElm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(label); + + if (!labelElm) { + return; + } + + result = result.toFixed(precision); + + if (isNaN(result) || !isFinite(result)) { + result = ''; + } else { + result = format_number__WEBPACK_IMPORTED_MODULE_5___default()(format)(result); + } + + switch (writeType.toLowerCase()) { + case 'innerhtml': + labelElm.innerHTML = result; + break; + + case 'setvalue': + labelElm.value = result; + break; + + case 'createtextnode': + var oldNode = labelElm.firstChild; + var txtNode = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createText"])(result); + labelElm.replaceChild(txtNode, oldNode); + break; + } + } + /** + * Configure the format options used to format the operation result based + * on column type. + * @param {Number} colIndex Column index + * @param {Object} [format={}] Format object + * @returns {Object} + * @private + */ + + }, { + key: "configureFormat", + value: function configureFormat(colIndex) { + var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var tf = this.tf; + + if (tf.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_4__["FORMATTED_NUMBER"]])) { + var colType = tf.colTypes[colIndex]; + + if (colType.decimal && !format.decimal) { + format.decimal = colType.decimal; + } + + if (colType.thousands && !format.integerSeparator) { + format.integerSeparator = colType.thousands; + } + } else { + format.decimal = format.decimal || ''; + format.integerSeparator = format.integerSeparator || ''; + } + + return format; + } + /** Remove extension */ + + }, { + key: "destroy", + value: function destroy() { + if (!this.initialized) { + return; + } // unsubscribe to events + + + this.emitter.off(EVENTS, Object(_event__WEBPACK_IMPORTED_MODULE_7__["bound"])(this.calcAll, this)); + this.initialized = false; + } + }]); + + return ColOps; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + + + +/***/ }), + +/***/ "./src/extensions/colsVisibility/colsVisibility.js": +/*!*********************************************************!*\ + !*** ./src/extensions/colsVisibility/colsVisibility.js ***! + \*********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ColsVisibility; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types */ "./src/types.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../event */ "./src/event.js"); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../root */ "./src/root.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../const */ "./src/const.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../settings */ "./src/settings.js"); +/* harmony import */ var _modules_toolbar__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../modules/toolbar */ "./src/modules/toolbar.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + + + +/** + * Columns Visibility extension + */ + +var ColsVisibility = +/*#__PURE__*/ +function (_Feature) { + _inherits(ColsVisibility, _Feature); + + /** + * Creates an instance of ColsVisibility + * @param {TableFilter} tf TableFilter instance + * @param {Object} Configuration object + */ + function ColsVisibility(tf, f) { + var _this; + + _classCallCheck(this, ColsVisibility); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(ColsVisibility).call(this, tf, f.name)); // Configuration object + + var cfg = _this.config; + /** + * Module name + * @type {String} + */ + + _this.name = f.name; + /** + * Module description + * @type {String} + */ + + _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.description, 'Columns visibility manager'); + /** + * show/hide columns container element + * @private + */ + + _this.spanEl = null; + /** + * show/hide columns button element + * @private + */ + + _this.btnEl = null; + /** + * show/hide columns main container element + * @private + */ + + _this.contEl = null; + /** + * Enable tick to hide a column, defaults to true + * @type {Boolean} + */ + + _this.tickToHide = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsBool"])(f.tick_to_hide, true); + /** + * Enable columns manager UI, defaults to true + * @type {Boolean} + */ + + _this.manager = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsBool"])(f.manager, true); + /** + * Headers HTML table reference only if headers are external + * @type {DOMElement} + */ + + _this.headersTbl = f.headers_table || null; + /** + * Headers row index only if headers are external + * @type {Number} + */ + + _this.headersIndex = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsNb"])(f.headers_index, 1); + /** + * ID of main container element + * @type {String} + */ + + _this.contElTgtId = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.container_target_id, null); + /** + * Alternative text for column headers in column manager UI + * @type {Array} + */ + + _this.headersText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(f.headers_text, []); + /** + * ID of button's container element + * @type {String} + */ + + _this.btnTgtId = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_target_id, null); + /** + * Button's text, defaults to Columns▼ + * @type {String} + */ + + _this.btnText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_text, 'Columns▼'); + /** + * Button's inner HTML + * @type {String} + */ + + _this.btnHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_html, null); + /** + * Css class for button + * @type {String} + */ + + _this.btnCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_css_class, 'colVis'); + /** + * Columns manager UI close link text, defaults to 'Close' + * @type {String} + */ + + _this.btnCloseText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_close_text, 'Close'); + /** + * Columns manager UI close link HTML + * @type {String} + */ + + _this.btnCloseHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_close_html, null); + /** + * Css for columns manager UI close link + * @type {String} + */ + + _this.btnCloseCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_close_css_class, _this.btnCssClass); + /** + * Extension's stylesheet filename + * @type {String} + */ + + _this.stylesheet = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.stylesheet, 'colsVisibility.css'); + /** + * Css for columns manager UI span + * @type {String} + */ + + _this.spanCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.span_css_class, 'colVisSpan'); + /** + * Css for columns manager UI main container + * @type {String} + */ + + _this.contCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.cont_css_class, 'colVisCont'); + /** + * Css for columns manager UI checklist (ul) + * @type {String} + */ + + _this.listCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(cfg.list_css_class, 'cols_checklist'); + /** + * Css for columns manager UI checklist item (li) + * @type {String} + */ + + _this.listItemCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(cfg.checklist_item_css_class, 'cols_checklist_item'); + /** + * Css for columns manager UI checklist item selected state (li) + * @type {String} + */ + + _this.listSlcItemCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(cfg.checklist_selected_item_css_class, 'cols_checklist_slc_item'); + /** + * Text preceding the columns list, defaults to 'Hide' or 'Show' + * depending on tick mode (tick_to_hide option) + * @type {String} + */ + + _this.text = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.text, _this.tickToHide ? 'Hide: ' : 'Show: '); + /** + * List of columns indexes to be hidden at initialization + * @type {Array} + */ + + _this.atStart = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(f.at_start, []); + /** + * Enable hover behaviour on columns manager button/link + * @type {Boolean} + */ + + _this.enableHover = Boolean(f.enable_hover); + /** + * Enable select all option, disabled by default + * @type {Boolean} + */ + + _this.enableTickAll = Boolean(f.enable_tick_all); + /** + * Text for select all option, defaults to 'Select all:' + * @type {String} + */ + + _this.tickAllText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.tick_all_text, 'Select all:'); + /** + * Default position in toolbar ('left'|'center'|'right') + * @type {String} + */ + + _this.toolbarPosition = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.toolbar_position, _modules_toolbar__WEBPACK_IMPORTED_MODULE_7__["RIGHT"]); + /** + * List of indexes of hidden columns + * @private + */ + + _this.hiddenCols = []; + /** + * Bound mouseup wrapper + * @private + */ + + _this.boundMouseup = null; + /** + * Callback fired when the extension is initialized + * @type {Function} + */ + + _this.onLoaded = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_loaded, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired before the columns manager is opened + * @type {Function} + */ + + _this.onBeforeOpen = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_open, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after the columns manager is opened + * @type {Function} + */ + + _this.onAfterOpen = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_open, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired before the columns manager is closed + * @type {Function} + */ + + _this.onBeforeClose = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_close, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after the columns manager is closed + * @type {Function} + */ + + _this.onAfterClose = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_close, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired before a column is hidden + * @type {Function} + */ + + _this.onBeforeColHidden = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_col_hidden, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after a column is hidden + * @type {Function} + */ + + _this.onAfterColHidden = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_col_hidden, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired before a column is displayed + * @type {Function} + */ + + _this.onBeforeColDisplayed = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_col_displayed, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after a column is displayed + * @type {Function} + */ + + _this.onAfterColDisplayed = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_col_displayed, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); //Grid layout support + + if (tf.gridLayout) { + _this.headersTbl = tf.feature('gridLayout').headTbl; //headers table + + _this.headersIndex = 0; //headers index + } //Loads extension stylesheet + + + tf.import(f.name + 'Style', tf.getStylePath() + _this.stylesheet, null, 'link'); + + _this.enable(); + + return _this; + } + /** + * Mouse-up event handler handling popup auto-close behaviour + * @private + */ + + + _createClass(ColsVisibility, [{ + key: "onMouseup", + value: function onMouseup(evt) { + var targetElm = Object(_event__WEBPACK_IMPORTED_MODULE_3__["targetEvt"])(evt); + + while (targetElm && targetElm !== this.contEl && targetElm !== this.btnEl) { + targetElm = targetElm.parentNode; + } + + if (targetElm !== this.contEl && targetElm !== this.btnEl) { + this.toggle(); + } + + return; + } + /** + * Toggle columns manager UI + */ + + }, { + key: "toggle", + value: function toggle() { + // ensure mouseup event handler is removed + Object(_event__WEBPACK_IMPORTED_MODULE_3__["removeEvt"])(_root__WEBPACK_IMPORTED_MODULE_4__["root"], 'mouseup', this.boundMouseup); + var contDisplay = this.contEl.style.display; + + if (contDisplay !== 'inline') { + this.onBeforeOpen(this); + } + + if (contDisplay === 'inline') { + this.onBeforeClose(this); + } + + this.contEl.style.display = contDisplay === 'inline' ? _const__WEBPACK_IMPORTED_MODULE_5__["NONE"] : 'inline'; + + if (contDisplay !== 'inline') { + this.onAfterOpen(this); + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(_root__WEBPACK_IMPORTED_MODULE_4__["root"], 'mouseup', this.boundMouseup); + } + + if (contDisplay === 'inline') { + this.onAfterClose(this); + } + } + /** + * Check an item in columns manager UI + * @private + */ + + }, { + key: "checkItem", + value: function checkItem(lbl) { + var li = lbl.parentNode; + + if (!li || !lbl) { + return; + } + + var isChecked = lbl.firstChild.checked; + var colIndex = lbl.firstChild.getAttribute('id').split('_')[1]; + colIndex = parseInt(colIndex, 10); + + if (isChecked) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(li, this.listSlcItemCssClass); + } else { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeClass"])(li, this.listSlcItemCssClass); + } + + var hide = false; + + if (this.tickToHide && isChecked || !this.tickToHide && !isChecked) { + hide = true; + } + + this.setHidden(colIndex, hide); + } + /** + * Initializes ColsVisibility instance + */ + + }, { + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized || !this.manager) { + return; + } + + this.emitter.emit('initializing-extension', this, !Object(_types__WEBPACK_IMPORTED_MODULE_2__["isNull"])(this.btnTgtId)); + this.emitter.on(['hide-column'], function (tf, colIndex) { + return _this2.hideCol(colIndex); + }); + this.buildBtn(); + this.buildManager(); + /** @inherited */ + + this.initialized = true; + this.boundMouseup = this.onMouseup.bind(this); + this.emitter.emit('columns-visibility-initialized', this.tf, this); + this.emitter.emit('extension-initialized', this); // Hide columns at start at very end of initialization, do not move + // as order is important + + this._hideAtStart(); + } + /** + * Build main button UI + */ + + }, { + key: "buildBtn", + value: function buildBtn() { + var _this3 = this; + + if (this.btnEl) { + return; + } + + var tf = this.tf; + var span = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span'); + span.className = this.spanCssClass; // Container element (rdiv or custom element) + + var targetEl = !this.btnTgtId ? tf.feature('toolbar').container(this.toolbarPosition) : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.btnTgtId); + + if (!this.btnTgtId) { + var firstChild = targetEl.firstChild; + firstChild.parentNode.insertBefore(span, firstChild); + } else { + targetEl.appendChild(span); + } + + if (!this.btnHtml) { + var btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:;']); + btn.className = this.btnCssClass; + btn.title = this.desc; + btn.innerHTML = this.btnText; + span.appendChild(btn); + + if (!this.enableHover) { + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function (evt) { + return _this3.toggle(evt); + }); + } else { + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'mouseover', function (evt) { + return _this3.toggle(evt); + }); + } + } else { + // Custom html + span.innerHTML = this.btnHtml; + var colVisEl = span.firstChild; + + if (!this.enableHover) { + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(colVisEl, 'click', function (evt) { + return _this3.toggle(evt); + }); + } else { + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(colVisEl, 'mouseover', function (evt) { + return _this3.toggle(evt); + }); + } + } + + this.spanEl = span; + this.btnEl = this.spanEl.firstChild; + this.onLoaded(this); + } + /** + * Build columns manager UI + */ + + }, { + key: "buildManager", + value: function buildManager() { + var _this4 = this; + + var tf = this.tf; + var container = !this.contElTgtId ? Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('div') : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contElTgtId); + container.className = this.contCssClass; //Extension description + + var extNameLabel = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('p'); + extNameLabel.innerHTML = this.text; + container.appendChild(extNameLabel); //Headers list + + var ul = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('ul'); + ul.className = this.listCssClass; + var tbl = this.headersTbl || tf.dom(); + var headerIndex = this.headersTbl ? this.headersIndex : tf.getHeadersRowIndex(); + var headerRow = tbl.rows[headerIndex]; //Tick all option + + if (this.enableTickAll) { + var li = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createCheckItem"])('col__' + tf.id, this.tickAllText, this.tickAllText); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(li, this.listItemCssClass); + ul.appendChild(li); + li.check.checked = !this.tickToHide; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(li.check, 'click', function () { + for (var h = 0; h < headerRow.cells.length; h++) { + var itm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])('col_' + h + '_' + tf.id); + + if (itm && li.check.checked !== itm.checked) { + itm.click(); + itm.checked = li.check.checked; + } + } + }); + } + + for (var i = 0; i < headerRow.cells.length; i++) { + var cell = headerRow.cells[i]; + + var cellText = this.headersText[i] || this._getHeaderText(cell); + + var liElm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createCheckItem"])('col_' + i + '_' + tf.id, cellText, cellText); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(liElm, this.listItemCssClass); + + if (!this.tickToHide) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(liElm, this.listSlcItemCssClass); + } + + ul.appendChild(liElm); + + if (!this.tickToHide) { + liElm.check.checked = true; + } + + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(liElm.check, 'click', function (evt) { + var elm = Object(_event__WEBPACK_IMPORTED_MODULE_3__["targetEvt"])(evt); + var lbl = elm.parentNode; + + _this4.checkItem(lbl); + }); + } //separator + + + var p = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('p', ['align', 'center']); + var btn; //Close link + + if (!this.btnCloseHtml) { + btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:;']); + btn.className = this.btnCloseCssClass; + btn.innerHTML = this.btnCloseText; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function (evt) { + return _this4.toggle(evt); + }); + p.appendChild(btn); + } else { + p.innerHTML = this.btnCloseHtml; + btn = p.firstChild; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function (evt) { + return _this4.toggle(evt); + }); + } + + container.appendChild(ul); + container.appendChild(p); + this.btnEl.parentNode.insertBefore(container, this.btnEl); + this.contEl = container; + } + /** + * Hide or show specified columns + * @param {Number} colIndex Column index + * @param {Boolean} hide Hide column if true or show if false + */ + + }, { + key: "setHidden", + value: function setHidden(colIndex, hide) { + var tf = this.tf; + var tbl = tf.dom(); + + if (hide) { + this.onBeforeColHidden(this, colIndex); + } else { + this.onBeforeColDisplayed(this, colIndex); + } + + this._hideElements(tbl, colIndex, hide); + + if (this.headersTbl) { + this._hideElements(this.headersTbl, colIndex, hide); + } + + var hiddenCols = this.hiddenCols; + var itemIndex = hiddenCols.indexOf(colIndex); + + if (hide) { + if (itemIndex === -1) { + this.hiddenCols.push(colIndex); + } + } else { + if (itemIndex !== -1) { + this.hiddenCols.splice(itemIndex, 1); + } + } + + if (hide) { + this.onAfterColHidden(this, colIndex); + this.emitter.emit('column-hidden', tf, this, colIndex, this.hiddenCols); + } else { + this.onAfterColDisplayed(this, colIndex); + this.emitter.emit('column-shown', tf, this, colIndex, this.hiddenCols); + } + } + /** + * Show specified column + * @param {Number} colIndex Column index + */ + + }, { + key: "showCol", + value: function showCol(colIndex) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isUndef"])(colIndex) || !this.isColHidden(colIndex)) { + return; + } + + if (this.manager && this.contEl) { + var itm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])('col_' + colIndex + '_' + this.tf.id); + + if (itm) { + itm.click(); + } + } else { + this.setHidden(colIndex, false); + } + } + /** + * Hide specified column + * @param {Number} colIndex Column index + */ + + }, { + key: "hideCol", + value: function hideCol(colIndex) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isUndef"])(colIndex) || this.isColHidden(colIndex)) { + return; + } + + if (this.manager && this.contEl) { + var itm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])('col_' + colIndex + '_' + this.tf.id); + + if (itm) { + itm.click(); + } + } else { + this.setHidden(colIndex, true); + } + } + /** + * Determine if specified column is hidden + * @param {Number} colIndex Column index + */ + + }, { + key: "isColHidden", + value: function isColHidden(colIndex) { + if (this.hiddenCols.indexOf(colIndex) !== -1) { + return true; + } + + return false; + } + /** + * Toggle visibility of specified column + * @param {Number} colIndex Column index + */ + + }, { + key: "toggleCol", + value: function toggleCol(colIndex) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isUndef"])(colIndex) || this.isColHidden(colIndex)) { + this.showCol(colIndex); + } else { + this.hideCol(colIndex); + } + } + /** + * Return the indexes of the columns currently hidden + * @return {Array} column indexes + */ + + }, { + key: "getHiddenCols", + value: function getHiddenCols() { + return this.hiddenCols; + } + /** + * Remove the columns manager + */ + + }, { + key: "destroy", + value: function destroy() { + var _this5 = this; + + if (!this.initialized) { + return; + } + + if (Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contElTgtId)) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contElTgtId).innerHTML = ''; + } else { + this.contEl.innerHTML = ''; + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.contEl); + this.contEl = null; + } + + this.btnEl.innerHTML = ''; + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.btnEl); + this.btnEl = null; + this.emitter.off(['hide-column'], function (tf, colIndex) { + return _this5.hideCol(colIndex); + }); + this.boundMouseup = null; + this.initialized = false; + } + }, { + key: "_getHeaderText", + value: function _getHeaderText(cell) { + if (!cell.hasChildNodes) { + return ''; + } + + for (var i = 0; i < cell.childNodes.length; i++) { + var n = cell.childNodes[i]; + + if (n.nodeType === 3) { + return n.nodeValue; + } else if (n.nodeType === 1) { + if (n.id && n.id.indexOf('popUp') !== -1) { + continue; + } else { + return Object(_dom__WEBPACK_IMPORTED_MODULE_1__["getText"])(n); + } + } + + continue; + } + + return ''; + } + }, { + key: "_hideElements", + value: function _hideElements(tbl, colIdx, hide) { + this._hideCells(tbl, colIdx, hide); + + this._hideCol(tbl, colIdx, hide); + } + }, { + key: "_hideCells", + value: function _hideCells(tbl, colIdx, hide) { + for (var i = 0; i < tbl.rows.length; i++) { + var row = tbl.rows[i]; + var cell = row.cells[colIdx]; + + if (cell) { + cell.style.display = hide ? _const__WEBPACK_IMPORTED_MODULE_5__["NONE"] : ''; + } + } + } + }, { + key: "_hideCol", + value: function _hideCol(tbl, colIdx, hide) { + var colElms = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(tbl, 'col'); + + if (colElms.length === 0) { + return; + } + + colElms[colIdx].style.display = hide ? _const__WEBPACK_IMPORTED_MODULE_5__["NONE"] : ''; + } + }, { + key: "_hideAtStart", + value: function _hideAtStart() { + var _this6 = this; + + this.atStart.forEach(function (colIdx) { + _this6.hideCol(colIdx); + }); + } + }]); + + return ColsVisibility; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + + + +/***/ }), + +/***/ "./src/extensions/filtersVisibility/filtersVisibility.js": +/*!***************************************************************!*\ + !*** ./src/extensions/filtersVisibility/filtersVisibility.js ***! + \***************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return FiltersVisibility; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types */ "./src/types.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../event */ "./src/event.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../settings */ "./src/settings.js"); +/* harmony import */ var _modules_toolbar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../modules/toolbar */ "./src/modules/toolbar.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + +/** + * Filters Visibility extension + */ + +var FiltersVisibility = +/*#__PURE__*/ +function (_Feature) { + _inherits(FiltersVisibility, _Feature); + + /** + * Creates an instance of FiltersVisibility + * @param {TableFilter} tf TableFilter instance + * @param {Object} Configuration object + */ + function FiltersVisibility(tf, f) { + var _this; + + _classCallCheck(this, FiltersVisibility); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(FiltersVisibility).call(this, tf, f.name)); + /** + * Module name + * @type {String} + */ + + _this.name = f.name; + /** + * Module description + * @type {String} + */ + + _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.description, 'Filters row visibility manager'); + /** + * Extension's stylesheet filename + * @type {String} + */ + + _this.stylesheet = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.stylesheet, 'filtersVisibility.css'); + /** + * Expand icon filename + * @type {String} + */ + + _this.icnExpand = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.expand_icon_name, 'icn_exp.png'); + /** + * Collapse icon filename + * @type {String} + */ + + _this.icnCollapse = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.collapse_icon_name, 'icn_clp.png'); + /** + * Main container element + * @private + */ + + _this.contEl = null; + /** + * Button element + * @private + */ + + _this.btnEl = null; + /** + * Expand icon HTML + * @private + */ + + _this.icnExpandHtml = 'Expand filters'; + /** + * Collapse icon HTML + * @private + */ + + _this.icnCollapseHtml = 'Collapse filters'; + /** + * Default text + * @private + */ + + _this.defaultText = 'Toggle filters'; + /** + * ID of main container element + * @type {String} + */ + + _this.targetId = f.target_id || null; + /** + * Enable expand/collapse icon, defaults to true + * @type {Boolean} + */ + + _this.enableIcon = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsBool"])(f.enable_icon, true); + /** + * Custom text for button + * @type {String} + */ + + _this.btnText = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.btn_text, ''); + /** + * Collapse button HTML + * @private + */ + + _this.collapseBtnHtml = _this.enableIcon ? _this.icnCollapseHtml + _this.btnText : _this.btnText || _this.defaultText; + /** + * Expand button HTML + * @private + */ + + _this.expandBtnHtml = _this.enableIcon ? _this.icnExpandHtml + _this.btnText : _this.btnText || _this.defaultText; + /** + * Button's custom HTML + * @type {String} + */ + + _this.btnHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.btn_html, null); + /** + * Css class for expand/collapse filters button + * @type {String} + */ + + _this.btnCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.btn_css_class, 'btnExpClpFlt'); + /** + * Css class for main container + * @type {String} + */ + + _this.contCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.cont_css_class, 'expClpFlt'); + /** + * Filters row index + * @type {Number} + */ + + _this.filtersRowIndex = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsNb"])(f.filters_row_index, tf.getFiltersRowIndex()); + /** + * Make filters visible at initialization, defaults to true + * @type {Boolean} + */ + + _this.visibleAtStart = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsNb"])(f.visible_at_start, true); + /** + * Default position in toolbar ('left'|'center'|'right') + * @type {String} + */ + + _this.toolbarPosition = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.toolbar_position, _modules_toolbar__WEBPACK_IMPORTED_MODULE_5__["RIGHT"]); + /** + * Callback fired before filters row is shown + * @type {Function} + */ + + _this.onBeforeShow = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_before_show, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after filters row is shown + * @type {Function} + */ + + _this.onAfterShow = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_after_show, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired before filters row is hidden + * @type {Function} + */ + + _this.onBeforeHide = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_before_hide, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after filters row is hidden + * @type {Function} + */ + + _this.onAfterHide = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_after_hide, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); //Import extension's stylesheet + + tf.import(f.name + 'Style', tf.getStylePath() + _this.stylesheet, null, 'link'); + + _this.enable(); + + return _this; + } + /** + * Initialise extension + */ + + + _createClass(FiltersVisibility, [{ + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized) { + return; + } + + this.emitter.emit('initializing-extension', this, !Object(_types__WEBPACK_IMPORTED_MODULE_2__["isNull"])(this.targetId)); + this.buildUI(); + /** @inherited */ + + this.initialized = true; + this.emitter.on(['show-filters'], function (tf, visible) { + return _this2.show(visible); + }); + this.emitter.emit('filters-visibility-initialized', this.tf, this); + this.emitter.emit('extension-initialized', this); + } + /** + * Build UI elements + */ + + }, { + key: "buildUI", + value: function buildUI() { + var _this3 = this; + + var tf = this.tf; + var span = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span'); + span.className = this.contCssClass; // Container element (rdiv or custom element) + + var targetEl = !this.targetId ? tf.feature('toolbar').container(this.toolbarPosition) : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.targetId); + + if (!this.targetId) { + var firstChild = targetEl.firstChild; + firstChild.parentNode.insertBefore(span, firstChild); + } else { + targetEl.appendChild(span); + } + + var btn; + + if (!this.btnHtml) { + btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:void(0);']); + btn.className = this.btnCssClass; + btn.title = this.btnText || this.defaultText; + btn.innerHTML = this.collapseBtnHtml; + span.appendChild(btn); + } else { + // Custom html + span.innerHTML = this.btnHtml; + btn = span.firstChild; + } + + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function () { + return _this3.toggle(); + }); + this.contEl = span; + this.btnEl = btn; + + if (!this.visibleAtStart) { + this.toggle(); + } + } + /** + * Toggle filters visibility + */ + + }, { + key: "toggle", + value: function toggle() { + var tf = this.tf; + var tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom(); + var fltRow = tbl.rows[this.filtersRowIndex]; + var isDisplayed = fltRow.style.display === ''; + this.show(!isDisplayed); + } + /** + * Show or hide filters + * + * @param {boolean} [visible=true] Visibility flag + */ + + }, { + key: "show", + value: function show() { + var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var tf = this.tf; + var tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom(); + var fltRow = tbl.rows[this.filtersRowIndex]; + + if (visible) { + this.onBeforeShow(this); + } + + if (!visible) { + this.onBeforeHide(this); + } + + fltRow.style.display = visible ? '' : 'none'; + + if (this.enableIcon && !this.btnHtml) { + this.btnEl.innerHTML = visible ? this.collapseBtnHtml : this.expandBtnHtml; + } + + if (visible) { + this.onAfterShow(this); + } + + if (!visible) { + this.onAfterHide(this); + } + + this.emitter.emit('filters-toggled', tf, this, visible); + } + /** + * Destroy the UI + */ + + }, { + key: "destroy", + value: function destroy() { + var _this4 = this; + + if (!this.initialized) { + return; + } + + this.emitter.off(['show-filters'], function (tf, visible) { + return _this4.show(visible); + }); + this.btnEl.innerHTML = ''; + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.btnEl); + this.btnEl = null; + this.contEl.innerHTML = ''; + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.contEl); + this.contEl = null; + this.initialized = false; + } + }]); + + return FiltersVisibility; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + + + +/***/ }), + +/***/ "./src/extensions/sort/adapterSortabletable.js": +/*!*****************************************************!*\ + !*** ./src/extensions/sort/adapterSortabletable.js ***! + \*****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AdapterSortableTable; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../types */ "./src/types.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../dom */ "./src/dom.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../event */ "./src/event.js"); +/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../number */ "./src/number.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../const */ "./src/const.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../settings */ "./src/settings.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + + +/** + * SortableTable Adapter module + */ + +var AdapterSortableTable = +/*#__PURE__*/ +function (_Feature) { + _inherits(AdapterSortableTable, _Feature); + + /** + * Creates an instance of AdapterSortableTable + * @param {TableFilter} tf TableFilter instance + * @param {Object} opts Configuration object + */ + function AdapterSortableTable(tf, opts) { + var _this; + + _classCallCheck(this, AdapterSortableTable); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(AdapterSortableTable).call(this, tf, opts.name)); + /** + * Module name + * @type {String} + */ + + _this.name = opts.name; + /** + * Module description + * @type {String} + */ + + _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.description, 'Sortable table'); + /** + * Indicate whether table previously sorted + * @type {Boolean} + * @private + */ + + _this.sorted = false; + /** + * List of sort type per column basis + * @type {Array} + */ + + _this.sortTypes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.types, tf.colTypes); + /** + * Column to be sorted at initialization, ie: + * sort_col_at_start: [1, true] + * @type {Array} + */ + + _this.sortColAtStart = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.sort_col_at_start, null); + /** + * Enable asynchronous sort, if triggers are external + * @type {Boolean} + */ + + _this.asyncSort = Boolean(opts.async_sort); + /** + * List of element IDs triggering sort on a per column basis + * @type {Array} + */ + + _this.triggerIds = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.trigger_ids, []); // edit .sort-arrow.descending / .sort-arrow.ascending in + // tablefilter.css to reflect any path change + + /** + * Path to images + * @type {String} + */ + + _this.imgPath = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.images_path, tf.themesPath); + /** + * Blank image file name + * @type {String} + */ + + _this.imgBlank = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_blank, 'blank.png'); + /** + * Css class for sort indicator image + * @type {String} + */ + + _this.imgClassName = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_class_name, 'sort-arrow'); + /** + * Css class for ascending sort indicator image + * @type {String} + */ + + _this.imgAscClassName = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_asc_class_name, 'ascending'); + /** + * Css class for descending sort indicator image + * @type {String} + */ + + _this.imgDescClassName = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_desc_class_name, 'descending'); + /** + * Cell attribute key storing custom value used for sorting + * @type {String} + */ + + _this.customKey = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.custom_key, 'data-tf-sortKey'); + /** + * Callback fired when sort extension is instanciated + * @type {Function} + */ + + _this.onSortLoaded = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_sort_loaded, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]); + /** + * Callback fired before a table column is sorted + * @type {Function} + */ + + _this.onBeforeSort = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_before_sort, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]); + /** + * Callback fired after a table column is sorted + * @type {Function} + */ + + _this.onAfterSort = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_after_sort, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]); + /** + * SortableTable instance + * @private + */ + + _this.stt = null; + + _this.enable(); + + return _this; + } + /** + * Initializes AdapterSortableTable instance + */ + + + _createClass(AdapterSortableTable, [{ + key: "init", + value: function init() { + if (this.initialized) { + return; + } + + var tf = this.tf; + var adpt = this; // SortableTable class sanity check (sortabletable.js) + + if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isUndef"])(SortableTable)) { + throw new Error('SortableTable class not found.'); + } // Add any date format if needed + + + this.emitter.emit('add-date-type-formats', this.tf, this.sortTypes); + this.overrideSortableTable(); + this.setSortTypes(); + this.onSortLoaded(tf, this); + /*** SortableTable callbacks ***/ + + this.stt.onbeforesort = function () { + adpt.onBeforeSort(tf, adpt.stt.sortColumn); + /*** sort behaviour for paging ***/ + + if (tf.paging) { + tf.feature('paging').disable(); + } + }; + + this.stt.onsort = function () { + adpt.sorted = true; //sort behaviour for paging + + if (tf.paging) { + var paginator = tf.feature('paging'); // recalculate valid rows index as sorting may have change it + + tf.getValidRows(true); + paginator.enable(); + paginator.setPage(paginator.getPage()); + } + + adpt.onAfterSort(tf, adpt.stt.sortColumn, adpt.stt.descending); + adpt.emitter.emit('column-sorted', tf, adpt.stt.sortColumn, adpt.stt.descending); + }; // Column sort at start + + + var sortColAtStart = adpt.sortColAtStart; + + if (sortColAtStart) { + this.stt.sort(sortColAtStart[0], sortColAtStart[1]); + } + + this.emitter.on(['sort'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.sortByColumnIndexHandler, this)); + /** @inherited */ + + this.initialized = true; + this.emitter.emit('sort-initialized', tf, this); + } + /** + * Sort specified column + * @param {Number} colIdx Column index + * @param {Boolean} desc Optional: descending manner + */ + + }, { + key: "sortByColumnIndex", + value: function sortByColumnIndex(colIdx, desc) { + this.stt.sort(colIdx, desc); + } + /** @private */ + + }, { + key: "sortByColumnIndexHandler", + value: function sortByColumnIndexHandler(tf, colIdx, desc) { + this.sortByColumnIndex(colIdx, desc); + } + /** + * Set SortableTable overrides for TableFilter integration + */ + + }, { + key: "overrideSortableTable", + value: function overrideSortableTable() { + var adpt = this, + tf = this.tf; + /** + * Overrides headerOnclick method in order to handle th event + * @param {Object} e [description] + */ + + SortableTable.prototype.headerOnclick = function (evt) { + if (!adpt.initialized) { + return; + } // find Header element + + + var el = evt.target || evt.srcElement; + + while (el.tagName !== _const__WEBPACK_IMPORTED_MODULE_5__["CELL_TAG"] && el.tagName !== _const__WEBPACK_IMPORTED_MODULE_5__["HEADER_TAG"]) { + el = el.parentNode; + } + + this.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex); + }; + /** + * Overrides getCellIndex IE returns wrong cellIndex when columns are + * hidden + * @param {Object} oTd TD element + * @return {Number} Cell index + */ + + + SortableTable.getCellIndex = function (oTd) { + var cells = oTd.parentNode.cells, + l = cells.length, + i; + + for (i = 0; cells[i] !== oTd && i < l; i++) {} + + return i; + }; + /** + * Overrides initHeader in order to handle filters row position + * @param {Array} oSortTypes + */ + + + SortableTable.prototype.initHeader = function (oSortTypes) { + var stt = this; + + if (!stt.tHead) { + if (tf.gridLayout) { + stt.tHead = tf.feature('gridLayout').headTbl.tHead; + } else { + return; + } + } + + stt.headersRow = tf.headersRow; + var cells = stt.tHead.rows[stt.headersRow].cells; + stt.sortTypes = oSortTypes || []; + var l = cells.length; + var img, c; + + for (var i = 0; i < l; i++) { + c = cells[i]; + + if (stt.sortTypes[i] !== null && stt.sortTypes[i] !== 'None') { + c.style.cursor = 'pointer'; + img = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createElm"])('img', ['src', adpt.imgPath + adpt.imgBlank]); + c.appendChild(img); + + if (stt.sortTypes[i] !== null) { + c.setAttribute('_sortType', stt.sortTypes[i]); + } + + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(c, 'click', stt._headerOnclick); + } else { + c.setAttribute('_sortType', oSortTypes[i]); + c._sortType = 'None'; + } + } + + stt.updateHeaderArrows(); + }; + /** + * Overrides updateHeaderArrows in order to handle arrows indicators + */ + + + SortableTable.prototype.updateHeaderArrows = function () { + var stt = this; + var cells, l, img; // external headers + + if (adpt.asyncSort && adpt.triggerIds.length > 0) { + var triggers = adpt.triggerIds; + cells = []; + l = triggers.length; + + for (var j = 0; j < l; j++) { + cells.push(Object(_dom__WEBPACK_IMPORTED_MODULE_2__["elm"])(triggers[j])); + } + } else { + if (!this.tHead) { + return; + } + + cells = stt.tHead.rows[stt.headersRow].cells; + l = cells.length; + } + + for (var i = 0; i < l; i++) { + var cell = cells[i]; + + if (!cell) { + continue; + } + + var cellAttr = cell.getAttribute('_sortType'); + + if (cellAttr !== null && cellAttr !== 'None') { + img = cell.lastChild || cell; + + if (img.nodeName.toLowerCase() !== 'img') { + img = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createElm"])('img', ['src', adpt.imgPath + adpt.imgBlank]); + cell.appendChild(img); + } + + if (i === stt.sortColumn) { + img.className = adpt.imgClassName + ' ' + (this.descending ? adpt.imgDescClassName : adpt.imgAscClassName); + } else { + img.className = adpt.imgClassName; + } + } + } + }; + /** + * Overrides getRowValue for custom key value feature + * @param {Object} oRow Row element + * @param {String} sType + * @param {Number} nColumn + * @return {String} + */ + + + SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) { + var stt = this; // if we have defined a custom getRowValue use that + + var sortTypeInfo = stt._sortTypeInfo[sType]; + + if (sortTypeInfo && sortTypeInfo.getRowValue) { + return sortTypeInfo.getRowValue(oRow, nColumn); + } + + var c = oRow.cells[nColumn]; + var s = SortableTable.getInnerText(c); + return stt.getValueFromString(s, sType); + }; + /** + * Overrides getInnerText in order to avoid Firefox unexpected sorting + * behaviour with untrimmed text elements + * @param {Object} cell DOM element + * @return {String} DOM element inner text + */ + + + SortableTable.getInnerText = function (cell) { + if (!cell) { + return; + } + + if (cell.getAttribute(adpt.customKey)) { + return cell.getAttribute(adpt.customKey); + } else { + return tf.getCellValue(cell); + } + }; + } + /** + * Adds a sort type + */ + + }, { + key: "addSortType", + value: function addSortType() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + // Extract the arguments + var id = args[0], + caster = args[1], + sorter = args[2], + getRowValue = args[3]; + SortableTable.prototype.addSortType(id, caster, sorter, getRowValue); + } + /** + * Sets the sort types on a column basis + * @private + */ + + }, { + key: "setSortTypes", + value: function setSortTypes() { + var _this2 = this; + + var tf = this.tf, + sortTypes = this.sortTypes, + _sortTypes = []; + tf.eachCol(function (i) { + var colType; + + if (sortTypes[i]) { + colType = sortTypes[i]; + + if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isObj"])(colType)) { + if (colType.type === _const__WEBPACK_IMPORTED_MODULE_5__["DATE"]) { + colType = _this2._addDateType(i, sortTypes); + } else if (colType.type === _const__WEBPACK_IMPORTED_MODULE_5__["FORMATTED_NUMBER"]) { + var decimal = colType.decimal || tf.decimalSeparator; + colType = _this2._addNumberType(i, decimal); + } + } else { + colType = colType.toLowerCase(); + + if (colType === _const__WEBPACK_IMPORTED_MODULE_5__["DATE"]) { + colType = _this2._addDateType(i, sortTypes); + } else if (colType === _const__WEBPACK_IMPORTED_MODULE_5__["FORMATTED_NUMBER"] || colType === _const__WEBPACK_IMPORTED_MODULE_5__["NUMBER"]) { + colType = _this2._addNumberType(i, tf.decimalSeparator); + } else if (colType === _const__WEBPACK_IMPORTED_MODULE_5__["NONE"]) { + // TODO: normalise 'none' vs 'None' + colType = 'None'; + } + } + } else { + colType = _const__WEBPACK_IMPORTED_MODULE_5__["STRING"]; + } + + _sortTypes.push(colType); + }); //Public TF method to add sort type + //Custom sort types + + this.addSortType('caseinsensitivestring', SortableTable.toUpperCase); + this.addSortType(_const__WEBPACK_IMPORTED_MODULE_5__["STRING"]); + this.addSortType(_const__WEBPACK_IMPORTED_MODULE_5__["IP_ADDRESS"], ipAddress, sortIP); + this.stt = new SortableTable(tf.dom(), _sortTypes); + /*** external table headers adapter ***/ + + if (this.asyncSort && this.triggerIds.length > 0) { + (function () { + var triggers = _this2.triggerIds; + + for (var j = 0; j < triggers.length; j++) { + if (triggers[j] === null) { + continue; + } + + var trigger = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["elm"])(triggers[j]); + + if (trigger) { + trigger.style.cursor = 'pointer'; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(trigger, 'click', function (evt) { + var elm = evt.target; + + if (!_this2.tf.sort) { + return; + } + + _this2.stt.asyncSort(triggers.indexOf(elm.id)); + }); + trigger.setAttribute('_sortType', _sortTypes[j]); + } + } + })(); + } + } + }, { + key: "_addDateType", + value: function _addDateType(colIndex, types) { + var tf = this.tf; + var dateType = tf.feature('dateType'); + var locale = dateType.getOptions(colIndex, types).locale || tf.locale; + var colType = "".concat(_const__WEBPACK_IMPORTED_MODULE_5__["DATE"], "-").concat(locale); + this.addSortType(colType, function (value) { + var parsedDate = dateType.parse(value, locale); // Invalid date defaults to Wed Feb 04 -768 11:00:00 + + return isNaN(+parsedDate) ? new Date(-86400000000000) : parsedDate; + }); + return colType; + } + }, { + key: "_addNumberType", + value: function _addNumberType(colIndex, decimal) { + var colType = "".concat(_const__WEBPACK_IMPORTED_MODULE_5__["FORMATTED_NUMBER"]).concat(decimal === '.' ? '' : '-custom'); + this.addSortType(colType, function (value) { + return Object(_number__WEBPACK_IMPORTED_MODULE_4__["parse"])(value, decimal); + }); + return colType; + } + /** + * Remove extension + */ + + }, { + key: "destroy", + value: function destroy() { + if (!this.initialized) { + return; + } + + var tf = this.tf; + this.emitter.off(['sort'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.sortByColumnIndexHandler, this)); + this.sorted = false; + this.stt.destroy(); + var ids = tf.getFiltersId(); + + for (var idx = 0; idx < ids.length; idx++) { + var header = tf.getHeaderElement(idx); + var img = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["tag"])(header, 'img'); + + if (img.length === 1) { + header.removeChild(img[0]); + } + } + + this.initialized = false; + } + }]); + + return AdapterSortableTable; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); //Converters + + + + +function ipAddress(value) { + var vals = value.split('.'); + + for (var x in vals) { + var val = vals[x]; + + while (3 > val.length) { + val = '0' + val; + } + + vals[x] = val; + } + + return vals.join('.'); +} + +function sortIP(a, b) { + var aa = ipAddress(a.value.toLowerCase()); + var bb = ipAddress(b.value.toLowerCase()); + + if (aa === bb) { + return 0; + } else if (aa < bb) { + return -1; + } else { + return 1; + } +} + +/***/ }), + +/***/ "./src/extensions/sort/sort.js": +/*!*************************************!*\ + !*** ./src/extensions/sort/sort.js ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _adapterSortabletable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adapterSortabletable */ "./src/extensions/sort/adapterSortabletable.js"); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../root */ "./src/root.js"); + + + +if (!_root__WEBPACK_IMPORTED_MODULE_1__["root"].SortableTable) { + __webpack_require__(/*! script-loader!sortabletable */ "./node_modules/script-loader/index.js!./libs/sortabletable.js"); +} + +/* harmony default export */ __webpack_exports__["default"] = (_adapterSortabletable__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/***/ }) + +}]); +//# sourceMappingURL=tf-0-2e300f81646508aa8de1.js.map \ No newline at end of file diff --git a/dist/tablefilter/tf-0-2e300f81646508aa8de1.js.map b/dist/tablefilter/tf-0-2e300f81646508aa8de1.js.map new file mode 100644 index 00000000..8c5083ac --- /dev/null +++ b/dist/tablefilter/tf-0-2e300f81646508aa8de1.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./node_modules/format-number/index.js","webpack:///./libs/sortabletable.js","webpack:///./node_modules/script-loader/addScript.js","webpack:///./libs/sortabletable.js?8203","webpack:///./src sync ^\\.\\/.*$","webpack:///./src/extensions/advancedGrid/adapterEzEditTable.js","webpack:///./src/extensions/advancedGrid/advancedGrid.js","webpack:///./src/extensions/colOps/colOps.js","webpack:///./src/extensions/colsVisibility/colsVisibility.js","webpack:///./src/extensions/filtersVisibility/filtersVisibility.js","webpack:///./src/extensions/sort/adapterSortabletable.js","webpack:///./src/extensions/sort/sort.js"],"names":["INSTANTIATION_ERROR","AdapterEzEditTable","tf","cfg","name","desc","description","filename","vendorPath","vendor_path","loadStylesheet","Boolean","load_stylesheet","stylesheet","stylesheetName","stylesheet_name","scroll_into_view","gridLayout","_ezEditTable","enable","initialized","EditTable","_setAdvancedGrid","path","import","isImported","emitter","on","_toggleForInputFilter","startRow","thead","dom","length","undefined","refRow","base_path","basePath","editable","selectable","selection","default_selection","active_cell_css","_lastValidRowIndex","_lastRowIndex","onAfterSelection","et","selectedElm","e","slc","Selection","doSelect","nextRowIndex","defaultSelection","SelectRowByIndex","ClearSelections","cellIndex","row","rows","SelectCell","cells","validRowsIndex","getRowsNb","r","scrollIntoView","cell","getCellsNb","tblCont","scrollLeft","validIndexes","validIdxLen","parentNode","nodeName","keyCode","Event","GetKey","isRowValid","indexOf","rowIndex","paging","feature","d","pageLength","nbRowsPerPage","calcRowIndex","v","onBeforeSelection","nbPages","pagingEndRow","parseInt","startPagingRow","currentPageNb","setPage","onAfterChangePage","advGrid","extension","GetActiveRow","GetActiveCell","fnB","on_before_selected_row","args","arguments","call","fnA","on_after_selected_row","fnD","on_before_selected_cell","fnC","on_after_selected_cell","fnE","on_added_dom_row","nbFilterableRows","emit","destroy","reset","alternateRows","init","actions","fnF","on_after_submit","id","Init","Error","ezEditTable","Set","Editable","Remove","getActiveFilterId","colIndex","getColumnIndexFromFilterId","filterType","getFilterType","toggle","off","EVENTS","SUM","MEAN","MIN","MAX","MEDIAN","Q1","Q3","ColOps","opts","onBeforeOperation","on_before_operation","onAfterOperation","on_after_operation","labelIds","colIndexes","col","operations","operation","outputTypes","write_method","formatResults","format_result","totRowIndexes","tot_row_index","excludeRows","exclude_row","decimalPrecisions","decimal_precision","calcAll","isInitialized","colOperations","uIndexes","forEach","val","push","nbCols","colValues","u","getVisibleColumnData","curValues","result","precisions","labels","writeType","formatResult","idx","k","toLowerCase","configureFormat","i","Number","calc","writeResult","totRow","style","display","precision","sortColumnValues","calcMean","calcSum","calcMin","calcMax","calcMedian","calcQ1","calcQ3","toFixed","values","reduce","x","y","Math","max","apply","min","nbValues","aux","floor","posa","posb","sorter","sort","label","format","labelElm","isNaN","isFinite","innerHTML","value","oldNode","firstChild","txtNode","replaceChild","hasType","colType","colTypes","decimal","thousands","integerSeparator","ColsVisibility","f","config","spanEl","btnEl","contEl","tickToHide","tick_to_hide","manager","headersTbl","headers_table","headersIndex","headers_index","contElTgtId","container_target_id","headersText","headers_text","btnTgtId","btn_target_id","btnText","btn_text","btnHtml","btn_html","btnCssClass","btn_css_class","btnCloseText","btn_close_text","btnCloseHtml","btn_close_html","btnCloseCssClass","btn_close_css_class","spanCssClass","span_css_class","contCssClass","cont_css_class","listCssClass","list_css_class","listItemCssClass","checklist_item_css_class","listSlcItemCssClass","checklist_selected_item_css_class","text","atStart","at_start","enableHover","enable_hover","enableTickAll","enable_tick_all","tickAllText","tick_all_text","toolbarPosition","toolbar_position","hiddenCols","boundMouseup","onLoaded","on_loaded","onBeforeOpen","on_before_open","onAfterOpen","on_after_open","onBeforeClose","on_before_close","onAfterClose","on_after_close","onBeforeColHidden","on_before_col_hidden","onAfterColHidden","on_after_col_hidden","onBeforeColDisplayed","on_before_col_displayed","onAfterColDisplayed","on_after_col_displayed","headTbl","getStylePath","evt","targetElm","removeEvt","contDisplay","addEvt","lbl","li","isChecked","checked","getAttribute","split","addClass","removeClass","hide","setHidden","hideCol","buildBtn","buildManager","onMouseup","bind","_hideAtStart","span","className","targetEl","container","insertBefore","appendChild","btn","title","colVisEl","extNameLabel","ul","tbl","headerIndex","getHeadersRowIndex","headerRow","check","h","itm","click","cellText","_getHeaderText","liElm","elm","checkItem","p","_hideElements","itemIndex","splice","isColHidden","showCol","removeElm","hasChildNodes","childNodes","n","nodeType","nodeValue","colIdx","_hideCells","_hideCol","colElms","FiltersVisibility","icnExpand","expand_icon_name","icnCollapse","collapse_icon_name","icnExpandHtml","themesPath","icnCollapseHtml","defaultText","targetId","target_id","enableIcon","enable_icon","collapseBtnHtml","expandBtnHtml","filtersRowIndex","filters_row_index","getFiltersRowIndex","visibleAtStart","visible_at_start","onBeforeShow","on_before_show","onAfterShow","on_after_show","onBeforeHide","on_before_hide","onAfterHide","on_after_hide","buildUI","visible","show","fltRow","isDisplayed","AdapterSortableTable","sorted","sortTypes","types","sortColAtStart","sort_col_at_start","asyncSort","async_sort","triggerIds","trigger_ids","imgPath","images_path","imgBlank","image_blank","imgClassName","image_class_name","imgAscClassName","image_asc_class_name","imgDescClassName","image_desc_class_name","customKey","custom_key","onSortLoaded","on_sort_loaded","onBeforeSort","on_before_sort","onAfterSort","on_after_sort","stt","adpt","SortableTable","overrideSortableTable","setSortTypes","onbeforesort","sortColumn","disable","onsort","paginator","getValidRows","getPage","descending","sortByColumnIndexHandler","sortByColumnIndex","prototype","headerOnclick","el","target","srcElement","tagName","msie","getCellIndex","oTd","l","initHeader","oSortTypes","tHead","headersRow","img","c","cursor","setAttribute","_headerOnclick","_sortType","updateHeaderArrows","triggers","j","cellAttr","lastChild","getRowValue","oRow","sType","nColumn","sortTypeInfo","_sortTypeInfo","s","getInnerText","getValueFromString","getCellValue","caster","addSortType","_sortTypes","eachCol","type","_addDateType","decimalSeparator","_addNumberType","toUpperCase","ipAddress","sortIP","trigger","dateType","locale","getOptions","parsedDate","parse","Date","ids","getFiltersId","header","getHeaderElement","removeChild","vals","join","a","b","aa","bb","require"],"mappings":";;;;;;;;;;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2BAA2B;AAC3B,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAsD,4BAA4B,EAAE;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8BAA8B;AACnD;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,EAAE;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAC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","file":"tf-0-2e300f81646508aa8de1.js","sourcesContent":["\nmodule.exports = formatter;\nmodule.exports.default = formatter;\n\nfunction formatter(options) {\n options = options || {};\n\n\n // *********************************************************************************************\n // Set defaults for negatives\n // options.negative, options.negativeOut, options.separator retained for backward compatibility\n // *********************************************************************************************\n\n // type of negative; default left\n options.negativeType = options.negativeType || (options.negative === 'R' ? 'right' : 'left')\n\n // negative symbols '-' or '()'\n if (typeof options.negativeLeftSymbol !== 'string') {\n switch (options.negativeType) {\n case 'left':\n options.negativeLeftSymbol = '-';\n break;\n case 'brackets':\n options.negativeLeftSymbol = '(';\n break;\n default:\n options.negativeLeftSymbol = '';\n }\n }\n if (typeof options.negativeRightSymbol !== 'string') {\n switch (options.negativeType) {\n case 'right':\n options.negativeRightSymbol = '-';\n break;\n case 'brackets':\n options.negativeRightSymbol = ')';\n break;\n default:\n options.negativeRightSymbol = '';\n }\n }\n\n // whether negative symbol should be inside/outside prefix and suffix\n\n if (typeof options.negativeLeftOut !== \"boolean\") {\n options.negativeLeftOut = (options.negativeOut === false ? false : true);\n }\n if (typeof options.negativeRightOut !== \"boolean\") {\n options.negativeRightOut = (options.negativeOut === false ? false : true);\n }\n\n //prefix and suffix\n options.prefix = options.prefix || '';\n options.suffix = options.suffix || '';\n\n //separators\n if (typeof options.integerSeparator !== 'string') {\n options.integerSeparator = (typeof options.separator === 'string' ? options.separator : ',');\n }\n options.decimalsSeparator = typeof options.decimalsSeparator === 'string' ? options.decimalsSeparator : '';\n options.decimal = options.decimal || '.';\n\n //padders\n options.padLeft = options.padLeft || -1 //default no padding\n options.padRight = options.padRight || -1 //default no padding\n\n function format(number, overrideOptions) {\n overrideOptions = overrideOptions || {};\n\n if (number || number === 0) {\n number = '' + number;//convert number to string if it isn't already\n } else {\n return '';\n }\n\n //identify a negative number and make it absolute\n var output = [];\n var negative = number.charAt(0) === '-';\n number = number.replace(/^\\-/g, '');\n\n //Prepare output with left hand negative and/or prefix\n if (!options.negativeLeftOut && !overrideOptions.noUnits) {\n output.push(options.prefix);\n }\n if (negative) {\n output.push(options.negativeLeftSymbol);\n }\n if (options.negativeLeftOut && !overrideOptions.noUnits) {\n output.push(options.prefix);\n }\n\n //Format core number\n number = number.split('.');\n if (options.round != null) round(number, options.round);\n if (options.truncate != null) number[1] = truncate(number[1], options.truncate);\n if (options.padLeft > 0) number[0] = padLeft(number[0], options.padLeft);\n if (options.padRight > 0) number[1] = padRight(number[1], options.padRight);\n if (!overrideOptions.noSeparator && number[1]) number[1] = addDecimalSeparators(number[1], options.decimalsSeparator);\n if (!overrideOptions.noSeparator && number[0]) number[0] = addIntegerSeparators(number[0], options.integerSeparator);\n output.push(number[0]);\n if (number[1]) {\n output.push(options.decimal);\n output.push(number[1]);\n }\n\n //Prepare output with right hand negative and/or prefix\n if (options.negativeRightOut && !overrideOptions.noUnits) {\n output.push(options.suffix);\n }\n if (negative) {\n output.push(options.negativeRightSymbol);\n }\n if (!options.negativeRightOut && !overrideOptions.noUnits) {\n output.push(options.suffix);\n }\n\n //join output and return\n return output.join('');\n }\n\n format.negative = options.negative;\n format.negativeOut = options.negativeOut;\n format.negativeType = options.negativeType;\n format.negativeLeftOut = options.negativeLeftOut;\n format.negativeLeftSymbol = options.negativeLeftSymbol;\n format.negativeRightOut = options.negativeRightOut;\n format.negativeRightSymbol = options.negativeRightSymbol;\n format.prefix = options.prefix;\n format.suffix = options.suffix;\n format.separate = options.separate;\n format.integerSeparator = options.integerSeparator;\n format.decimalsSeparator = options.decimalsSeparator;\n format.decimal = options.decimal;\n format.padLeft = options.padLeft;\n format.padRight = options.padRight;\n format.truncate = options.truncate;\n format.round = options.round;\n\n function unformat(number, allowedSeparators) {\n allowedSeparators = allowedSeparators || [];\n if (options.allowedSeparators) {\n options.allowedSeparators.forEach(function (s) { allowedSeparators.push (s); });\n }\n allowedSeparators.push(options.integerSeparator);\n allowedSeparators.push(options.decimalsSeparator);\n number = number.replace(options.prefix, '');\n number = number.replace(options.suffix, '');\n var newNumber = number;\n do {\n number = newNumber;\n for (var i = 0; i < allowedSeparators.length; i++) {\n newNumber = newNumber.replace(allowedSeparators[i], '');\n }\n } while (newNumber != number);\n return number;\n }\n format.unformat = unformat;\n\n function validate(number, allowedSeparators) {\n number = unformat(number, allowedSeparators);\n number = number.split(options.decimal);\n if (number.length > 2) {\n return false;\n } else if (options.truncate != null && number[1] && number[1].length > options.truncate) {\n return false;\n } else if (options.round != null && number[1] && number[1].length > options.round) {\n return false;\n } else {\n return /^-?\\d+\\.?\\d*$/.test(number);\n }\n }\n return format;\n}\n\n//where x is already the integer part of the number\nfunction addIntegerSeparators(x, separator) {\n x += '';\n if (!separator) return x;\n var rgx = /(\\d+)(\\d{3})/;\n while (rgx.test(x)) {\n x = x.replace(rgx, '$1' + separator + '$2');\n }\n return x;\n}\n\n//where x is already the decimal part of the number\nfunction addDecimalSeparators(x, separator) {\n x += '';\n if (!separator) return x;\n var rgx = /(\\d{3})(\\d+)/;\n while (rgx.test(x)) {\n x = x.replace(rgx, '$1' + separator + '$2');\n }\n return x;\n}\n\n//where x is the integer part of the number\nfunction padLeft(x, padding) {\n x = x + '';\n var buf = [];\n while (buf.length + x.length < padding) {\n buf.push('0');\n }\n return buf.join('') + x;\n}\n\n//where x is the decimals part of the number\nfunction padRight(x, padding) {\n if (x) {\n x += '';\n } else {\n x = '';\n }\n var buf = [];\n while (buf.length + x.length < padding) {\n buf.push('0');\n }\n return x + buf.join('');\n}\nfunction truncate(x, length) {\n if (x) {\n x += '';\n }\n if (x && x.length > length) {\n return x.substr(0, length);\n } else {\n return x;\n }\n}\n\n//where number is an array with 0th item as integer string and 1st item as decimal string (no negatives)\nfunction round(number, places) {\n if (number[1] && places >= 0 && number[1].length > places) {\n //truncate to correct number of decimal places\n var decim = number[1].slice(0, places);\n //if next digit was >= 5 we need to round up\n if (+(number[1].substr(places, 1)) >= 5) {\n //But first count leading zeros as converting to a number will loose them\n var leadingzeros = \"\";\n while (decim.charAt(0)===\"0\") {\n leadingzeros = leadingzeros + \"0\";\n decim = decim.substr(1);\n }\n //Then we can change decim to a number and add 1 before replacing leading zeros\n decim = (+decim + 1) + '';\n decim = leadingzeros + decim;\n if (decim.length > places) {\n //adding one has made it longer\n number[0] = (+number[0]+ +decim.charAt(0)) + ''; //add value of firstchar to the integer part\n decim = decim.substring(1); //ignore the 1st char at the beginning which is the carry to the integer part\n }\n }\n number[1] = decim;\n }\n return number;\n}\n","module.exports = \"/*----------------------------------------------------------------------------\\\\\\r\\n| Sortable Table 1.12 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created by Erik Arvidsson |\\r\\n| (http://webfx.eae.net/contact.html#erik) |\\r\\n| For WebFX (http://webfx.eae.net/) |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| A DOM 1 based script that allows an ordinary HTML table to be sortable. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Copyright (c) 1998 - 2006 Erik Arvidsson |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not |\\r\\n| use this file except in compliance with the License. You may obtain a copy |\\r\\n| of the License at http://www.apache.org/licenses/LICENSE-2.0 |\\r\\n| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\\r\\n| Unless required by applicable law or agreed to in writing, software |\\r\\n| distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT |\\r\\n| WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |\\r\\n| License for the specific language governing permissions and limitations |\\r\\n| under the License. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| 2003-01-10 | First version |\\r\\n| 2003-01-19 | Minor changes to the date parsing |\\r\\n| 2003-01-28 | JScript 5.0 fixes (no support for 'in' operator) |\\r\\n| 2003-02-01 | Sloppy typo like error fixed in getInnerText |\\r\\n| 2003-07-04 | Added workaround for IE cellIndex bug. |\\r\\n| 2003-11-09 | The bDescending argument to sort was not correctly working |\\r\\n| | Using onclick DOM0 event if no support for addEventListener |\\r\\n| | or attachEvent |\\r\\n| 2004-01-13 | Adding addSortType and removeSortType which makes it a lot |\\r\\n| | easier to add new, custom sort types. |\\r\\n| 2004-01-27 | Switch to use descending = false as the default sort order. |\\r\\n| | Change defaultDescending to suit your needs. |\\r\\n| 2004-03-14 | Improved sort type None look and feel a bit |\\r\\n| 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you |\\r\\n| | can use another tHead or no tHead, and you can chose some |\\r\\n| | other tBody. |\\r\\n| 2006-04-25 | Changed license to Apache Software License 2.0 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created 2003-01-10 | All changes are in the log above. | Updated 2006-04-25 |\\r\\n\\\\----------------------------------------------------------------------------*/\\r\\n\\r\\n\\r\\nfunction SortableTable(oTable, oSortTypes) {\\r\\n\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\r\\n\\tthis.sortColumn = null;\\r\\n\\tthis.descending = null;\\r\\n\\r\\n\\tvar oThis = this;\\r\\n\\tthis._headerOnclick = function (e) {\\r\\n\\t\\toThis.headerOnclick(e);\\r\\n\\t};\\r\\n\\r\\n\\tif (oTable) {\\r\\n\\t\\tthis.setTable( oTable );\\r\\n\\t\\tthis.document = oTable.ownerDocument || oTable.document;\\r\\n\\t}\\r\\n\\telse {\\r\\n\\t\\tthis.document = document;\\r\\n\\t}\\r\\n\\r\\n\\r\\n\\t// only IE needs this\\r\\n\\tvar win = this.document.defaultView || this.document.parentWindow;\\r\\n\\tthis._onunload = function () {\\r\\n\\t\\toThis.destroy();\\r\\n\\t};\\r\\n\\tif (win && typeof win.attachEvent != \\\"undefined\\\") {\\r\\n\\t\\twin.attachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n}\\r\\n\\r\\nSortableTable.gecko = navigator.product == \\\"Gecko\\\";\\r\\nSortableTable.msie = /msie/i.test(navigator.userAgent);\\r\\n// Mozilla is faster when doing the DOM manipulations on\\r\\n// an orphaned element. MSIE is not\\r\\nSortableTable.removeBeforeSort = SortableTable.gecko;\\r\\n\\r\\nSortableTable.prototype.onsort = function () {};\\r\\n\\r\\n// default sort order. true -> descending, false -> ascending\\r\\nSortableTable.prototype.defaultDescending = false;\\r\\n\\r\\n// shared between all instances. This is intentional to allow external files\\r\\n// to modify the prototype\\r\\nSortableTable.prototype._sortTypeInfo = {};\\r\\n\\r\\nSortableTable.prototype.setTable = function (oTable) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.element = oTable;\\r\\n\\tthis.setTHead( oTable.tHead );\\r\\n\\tthis.setTBody( oTable.tBodies[0] );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTHead = function (oTHead) {\\r\\n\\tif (this.tHead && this.tHead != oTHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.tHead = oTHead;\\r\\n\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTBody = function (oTBody) {\\r\\n\\tthis.tBody = oTBody;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\n// adds arrow containers and events\\r\\n// also binds sort type to the header cells so that reordering columns does\\r\\n// not break the sort types\\r\\nSortableTable.prototype.initHeader = function (oSortTypes) {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar doc = this.tHead.ownerDocument || this.tHead.document;\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img, c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (this.sortTypes[i] != null && this.sortTypes[i] != \\\"None\\\") {\\r\\n\\t\\t\\timg = doc.createElement(\\\"IMG\\\");\\r\\n\\t\\t\\timg.src = \\\"images/blank.png\\\";\\r\\n\\t\\t\\tc.appendChild(img);\\r\\n\\t\\t\\tif (this.sortTypes[i] != null)\\r\\n\\t\\t\\t\\tc._sortType = this.sortTypes[i];\\r\\n\\t\\t\\tif (typeof c.addEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.addEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.attachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.attachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\tc.onclick = this._headerOnclick;\\r\\n\\t\\t}\\r\\n\\t\\telse\\r\\n\\t\\t{\\r\\n\\t\\t\\tc.setAttribute( \\\"_sortType\\\", oSortTypes[i] );\\r\\n\\t\\t\\tc._sortType = \\\"None\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\tthis.updateHeaderArrows();\\r\\n};\\r\\n\\r\\n// remove arrows and events\\r\\nSortableTable.prototype.uninitHeader = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (c._sortType != null && c._sortType != \\\"None\\\") {\\r\\n\\t\\t\\tc.removeChild(c.lastChild);\\r\\n\\t\\t\\tif (typeof c.removeEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.removeEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.detachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.detachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\tc._sortType = null;\\r\\n\\t\\t\\tc.removeAttribute( \\\"_sortType\\\" );\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.updateHeaderArrows = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tif (cells[i]._sortType != null && cells[i]._sortType != \\\"None\\\") {\\r\\n\\t\\t\\timg = cells[i].lastChild;\\r\\n\\t\\t\\tif (i == this.sortColumn)\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow \\\" + (this.descending ? \\\"descending\\\" : \\\"ascending\\\");\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.headerOnclick = function (e) {\\r\\n\\t// find TD element\\r\\n\\tvar el = e.target || e.srcElement;\\r\\n\\twhile (el.tagName != \\\"TD\\\")\\r\\n\\t\\tel = el.parentNode;\\r\\n\\r\\n\\tthis.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\\r\\n};\\r\\n\\r\\n// IE returns wrong cellIndex when columns are hidden\\r\\nSortableTable.getCellIndex = function (oTd) {\\r\\n\\tvar cells = oTd.parentNode.childNodes\\r\\n\\tvar l = cells.length;\\r\\n\\tvar i;\\r\\n\\tfor (i = 0; cells[i] != oTd && i < l; i++)\\r\\n\\t\\t;\\r\\n\\treturn i;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getSortType = function (nColumn) {\\r\\n\\treturn this.sortTypes[nColumn] || \\\"String\\\";\\r\\n};\\r\\n\\r\\n// only nColumn is required\\r\\n// if bDescending is left out the old value is taken into account\\r\\n// if sSortType is left out the sort type is found from the sortTypes array\\r\\n\\r\\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\\r\\n\\tif (!this.tBody) return;\\r\\n\\tif (sSortType == null)\\r\\n\\t\\tsSortType = this.getSortType(nColumn);\\r\\n\\r\\n\\t// exit if None\\r\\n\\tif (sSortType == \\\"None\\\")\\r\\n\\t\\treturn;\\r\\n\\r\\n\\tif (bDescending == null) {\\r\\n\\t\\tif (this.sortColumn != nColumn)\\r\\n\\t\\t\\tthis.descending = this.defaultDescending;\\r\\n\\t\\telse\\r\\n\\t\\t\\tthis.descending = !this.descending;\\r\\n\\t}\\r\\n\\telse\\r\\n\\t\\tthis.descending = bDescending;\\r\\n\\r\\n\\tthis.sortColumn = nColumn;\\r\\n\\r\\n\\tif (typeof this.onbeforesort == \\\"function\\\")\\r\\n\\t\\tthis.onbeforesort();\\r\\n\\r\\n\\tvar f = this.getSortFunction(sSortType, nColumn);\\r\\n\\tvar a = this.getCache(sSortType, nColumn);\\r\\n\\tvar tBody = this.tBody;\\r\\n\\r\\n\\ta.sort(f);\\r\\n\\r\\n\\tif (this.descending)\\r\\n\\t\\ta.reverse();\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// remove from doc\\r\\n\\t\\tvar nextSibling = tBody.nextSibling;\\r\\n\\t\\tvar p = tBody.parentNode;\\r\\n\\t\\tp.removeChild(tBody);\\r\\n\\t}\\r\\n\\r\\n\\t// insert in the new order\\r\\n\\tvar l = a.length;\\r\\n\\tfor (var i = 0; i < l; i++)\\r\\n\\t\\ttBody.appendChild(a[i].element);\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// insert into doc\\r\\n\\t\\tp.insertBefore(tBody, nextSibling);\\r\\n\\t}\\r\\n\\r\\n\\tthis.updateHeaderArrows();\\r\\n\\r\\n\\tthis.destroyCache(a);\\r\\n\\r\\n\\tif (typeof this.onsort == \\\"function\\\")\\r\\n\\t\\tthis.onsort();\\r\\n};\\r\\n\\r\\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\\r\\n\\tvar oThis = this;\\r\\n\\tthis._asyncsort = function () {\\r\\n\\t\\toThis.sort(nColumn, bDescending, sSortType);\\r\\n\\t};\\r\\n\\twindow.setTimeout(this._asyncsort, 1);\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getCache = function (sType, nColumn) {\\r\\n\\tif (!this.tBody) return [];\\r\\n\\tvar rows = this.tBody.rows;\\r\\n\\tvar l = rows.length;\\r\\n\\tvar a = new Array(l);\\r\\n\\tvar r;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tr = rows[i];\\r\\n\\t\\ta[i] = {\\r\\n\\t\\t\\tvalue:\\t\\tthis.getRowValue(r, sType, nColumn),\\r\\n\\t\\t\\telement:\\tr\\r\\n\\t\\t};\\r\\n\\t};\\r\\n\\treturn a;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroyCache = function (oArray) {\\r\\n\\tvar l = oArray.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\toArray[i].value = null;\\r\\n\\t\\toArray[i].element = null;\\r\\n\\t\\toArray[i] = null;\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\\r\\n\\t// if we have defined a custom getRowValue use that\\r\\n\\tif (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\\r\\n\\t\\treturn this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\\r\\n\\r\\n\\tvar s;\\r\\n\\tvar c = oRow.cells[nColumn];\\r\\n\\tif (typeof c.innerText != \\\"undefined\\\")\\r\\n\\t\\ts = c.innerText;\\r\\n\\telse\\r\\n\\t\\ts = SortableTable.getInnerText(c);\\r\\n\\treturn this.getValueFromString(s, sType);\\r\\n};\\r\\n\\r\\nSortableTable.getInnerText = function (oNode) {\\r\\n\\tvar s = \\\"\\\";\\r\\n\\tvar cs = oNode.childNodes;\\r\\n\\tvar l = cs.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tswitch (cs[i].nodeType) {\\r\\n\\t\\t\\tcase 1: //ELEMENT_NODE\\r\\n\\t\\t\\t\\ts += SortableTable.getInnerText(cs[i]);\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\tcase 3:\\t//TEXT_NODE\\r\\n\\t\\t\\t\\ts += cs[i].nodeValue;\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\treturn s;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getValueFromString = function (sText, sType) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].getValueFromString( sText );\\r\\n\\treturn sText;\\r\\n\\t/*\\r\\n\\tswitch (sType) {\\r\\n\\t\\tcase \\\"Number\\\":\\r\\n\\t\\t\\treturn Number(sText);\\r\\n\\t\\tcase \\\"CaseInsensitiveString\\\":\\r\\n\\t\\t\\treturn sText.toUpperCase();\\r\\n\\t\\tcase \\\"Date\\\":\\r\\n\\t\\t\\tvar parts = sText.split(\\\"-\\\");\\r\\n\\t\\t\\tvar d = new Date(0);\\r\\n\\t\\t\\td.setFullYear(parts[0]);\\r\\n\\t\\t\\td.setDate(parts[2]);\\r\\n\\t\\t\\td.setMonth(parts[1] - 1);\\r\\n\\t\\t\\treturn d.valueOf();\\r\\n\\t}\\r\\n\\treturn sText;\\r\\n\\t*/\\r\\n\\t};\\r\\n\\r\\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].compare;\\r\\n\\treturn SortableTable.basicCompare;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroy = function () {\\r\\n\\tthis.uninitHeader();\\r\\n\\tvar win = this.document.parentWindow;\\r\\n\\tif (win && typeof win.detachEvent != \\\"undefined\\\") {\\t// only IE needs this\\r\\n\\t\\twin.detachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n\\tthis._onunload = null;\\r\\n\\tthis.element = null;\\r\\n\\tthis.tHead = null;\\r\\n\\tthis.tBody = null;\\r\\n\\tthis.document = null;\\r\\n\\tthis._headerOnclick = null;\\r\\n\\tthis.sortTypes = null;\\r\\n\\tthis._asyncsort = null;\\r\\n\\tthis.onsort = null;\\r\\n};\\r\\n\\r\\n// Adds a sort type to all instance of SortableTable\\r\\n// sType : String - the identifier of the sort type\\r\\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\\r\\n// string and casts it to a desired format. If left out the string is just\\r\\n// returned\\r\\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\\r\\n// compare function. Takes two values and compares them. If left out less than,\\r\\n// <, compare is used\\r\\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\\r\\n// that takes the row and the column index and returns the value used to compare.\\r\\n// If left out then the innerText is first taken for the cell and then the\\r\\n// fGetValueFromString is used to convert that string the desired value and type\\r\\n\\r\\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\\r\\n\\tthis._sortTypeInfo[sType] = {\\r\\n\\t\\ttype:\\t\\t\\t\\tsType,\\r\\n\\t\\tgetValueFromString:\\tfGetValueFromString || SortableTable.idFunction,\\r\\n\\t\\tcompare:\\t\\t\\tfCompareFunction || SortableTable.basicCompare,\\r\\n\\t\\tgetRowValue:\\t\\tfGetRowValue\\r\\n\\t};\\r\\n};\\r\\n\\r\\n// this removes the sort type from all instances of SortableTable\\r\\nSortableTable.prototype.removeSortType = function (sType) {\\r\\n\\tdelete this._sortTypeInfo[sType];\\r\\n};\\r\\n\\r\\nSortableTable.basicCompare = function compare(n1, n2) {\\r\\n\\tif (n1.value < n2.value)\\r\\n\\t\\treturn -1;\\r\\n\\tif (n2.value < n1.value)\\r\\n\\t\\treturn 1;\\r\\n\\treturn 0;\\r\\n};\\r\\n\\r\\nSortableTable.idFunction = function (x) {\\r\\n\\treturn x;\\r\\n};\\r\\n\\r\\nSortableTable.toUpperCase = function (s) {\\r\\n\\treturn s.toUpperCase();\\r\\n};\\r\\n\\r\\nSortableTable.toDate = function (s) {\\r\\n\\tvar parts = s.split(\\\"-\\\");\\r\\n\\tvar d = new Date(0);\\r\\n\\td.setFullYear(parts[0]);\\r\\n\\td.setDate(parts[2]);\\r\\n\\td.setMonth(parts[1] - 1);\\r\\n\\treturn d.valueOf();\\r\\n};\\r\\n\\r\\n\\r\\n// add sort types\\r\\nSortableTable.prototype.addSortType(\\\"Number\\\", Number);\\r\\nSortableTable.prototype.addSortType(\\\"CaseInsensitiveString\\\", SortableTable.toUpperCase);\\r\\nSortableTable.prototype.addSortType(\\\"Date\\\", SortableTable.toDate);\\r\\nSortableTable.prototype.addSortType(\\\"String\\\");\\r\\n// None is a special case\\r\\n\"","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nmodule.exports = function(src) {\n\tfunction log(error) {\n\t\t(typeof console !== \"undefined\")\n\t\t&& (console.error || console.log)(\"[Script Loader]\", error);\n\t}\n\n\t// Check for IE =< 8\n\tfunction isIE() {\n\t\treturn typeof attachEvent !== \"undefined\" && typeof addEventListener === \"undefined\";\n\t}\n\n\ttry {\n\t\tif (typeof execScript !== \"undefined\" && isIE()) {\n\t\t\texecScript(src);\n\t\t} else if (typeof eval !== \"undefined\") {\n\t\t\teval.call(null, src);\n\t\t} else {\n\t\t\tlog(\"EvalError: No eval function available\");\n\t\t}\n\t} catch (error) {\n\t\tlog(error);\n\t}\n}\n","require(\"!!C:\\\\projects\\\\dev\\\\github\\\\TableFilter\\\\node_modules\\\\script-loader\\\\addScript.js\")(require(\"!!C:\\\\projects\\\\dev\\\\github\\\\TableFilter\\\\node_modules\\\\raw-loader\\\\index.js!C:\\\\projects\\\\dev\\\\github\\\\TableFilter\\\\libs\\\\sortabletable.js\")+\"\\n\\n// SCRIPT-LOADER FOOTER\\n//# sourceURL=script:///C:/projects/dev/github/TableFilter/libs/sortabletable.js\")","var map = {\n\t\"./array\": \"./src/array.js\",\n\t\"./array.js\": \"./src/array.js\",\n\t\"./const\": \"./src/const.js\",\n\t\"./const.js\": \"./src/const.js\",\n\t\"./cookie\": \"./src/cookie.js\",\n\t\"./cookie.js\": \"./src/cookie.js\",\n\t\"./dom\": \"./src/dom.js\",\n\t\"./dom.js\": \"./src/dom.js\",\n\t\"./emitter\": \"./src/emitter.js\",\n\t\"./emitter.js\": \"./src/emitter.js\",\n\t\"./event\": \"./src/event.js\",\n\t\"./event.js\": \"./src/event.js\",\n\t\"./extensions/advancedGrid/adapterEzEditTable\": \"./src/extensions/advancedGrid/adapterEzEditTable.js\",\n\t\"./extensions/advancedGrid/adapterEzEditTable.js\": \"./src/extensions/advancedGrid/adapterEzEditTable.js\",\n\t\"./extensions/advancedGrid/advancedGrid\": \"./src/extensions/advancedGrid/advancedGrid.js\",\n\t\"./extensions/advancedGrid/advancedGrid.js\": \"./src/extensions/advancedGrid/advancedGrid.js\",\n\t\"./extensions/colOps/colOps\": \"./src/extensions/colOps/colOps.js\",\n\t\"./extensions/colOps/colOps.js\": \"./src/extensions/colOps/colOps.js\",\n\t\"./extensions/colsVisibility/colsVisibility\": \"./src/extensions/colsVisibility/colsVisibility.js\",\n\t\"./extensions/colsVisibility/colsVisibility.js\": \"./src/extensions/colsVisibility/colsVisibility.js\",\n\t\"./extensions/filtersVisibility/filtersVisibility\": \"./src/extensions/filtersVisibility/filtersVisibility.js\",\n\t\"./extensions/filtersVisibility/filtersVisibility.js\": \"./src/extensions/filtersVisibility/filtersVisibility.js\",\n\t\"./extensions/sort/adapterSortabletable\": \"./src/extensions/sort/adapterSortabletable.js\",\n\t\"./extensions/sort/adapterSortabletable.js\": \"./src/extensions/sort/adapterSortabletable.js\",\n\t\"./extensions/sort/sort\": \"./src/extensions/sort/sort.js\",\n\t\"./extensions/sort/sort.js\": \"./src/extensions/sort/sort.js\",\n\t\"./feature\": \"./src/feature.js\",\n\t\"./feature.js\": \"./src/feature.js\",\n\t\"./modules/alternateRows\": \"./src/modules/alternateRows.js\",\n\t\"./modules/alternateRows.js\": \"./src/modules/alternateRows.js\",\n\t\"./modules/baseDropdown\": \"./src/modules/baseDropdown.js\",\n\t\"./modules/baseDropdown.js\": \"./src/modules/baseDropdown.js\",\n\t\"./modules/checkList\": \"./src/modules/checkList.js\",\n\t\"./modules/checkList.js\": \"./src/modules/checkList.js\",\n\t\"./modules/clearButton\": \"./src/modules/clearButton.js\",\n\t\"./modules/clearButton.js\": \"./src/modules/clearButton.js\",\n\t\"./modules/dateType\": \"./src/modules/dateType.js\",\n\t\"./modules/dateType.js\": \"./src/modules/dateType.js\",\n\t\"./modules/dropdown\": \"./src/modules/dropdown.js\",\n\t\"./modules/dropdown.js\": \"./src/modules/dropdown.js\",\n\t\"./modules/gridLayout\": \"./src/modules/gridLayout.js\",\n\t\"./modules/gridLayout.js\": \"./src/modules/gridLayout.js\",\n\t\"./modules/hash\": \"./src/modules/hash.js\",\n\t\"./modules/hash.js\": \"./src/modules/hash.js\",\n\t\"./modules/help\": \"./src/modules/help.js\",\n\t\"./modules/help.js\": \"./src/modules/help.js\",\n\t\"./modules/highlightKeywords\": \"./src/modules/highlightKeywords.js\",\n\t\"./modules/highlightKeywords.js\": \"./src/modules/highlightKeywords.js\",\n\t\"./modules/loader\": \"./src/modules/loader.js\",\n\t\"./modules/loader.js\": \"./src/modules/loader.js\",\n\t\"./modules/markActiveColumns\": \"./src/modules/markActiveColumns.js\",\n\t\"./modules/markActiveColumns.js\": \"./src/modules/markActiveColumns.js\",\n\t\"./modules/noResults\": \"./src/modules/noResults.js\",\n\t\"./modules/noResults.js\": \"./src/modules/noResults.js\",\n\t\"./modules/paging\": \"./src/modules/paging.js\",\n\t\"./modules/paging.js\": \"./src/modules/paging.js\",\n\t\"./modules/popupFilter\": \"./src/modules/popupFilter.js\",\n\t\"./modules/popupFilter.js\": \"./src/modules/popupFilter.js\",\n\t\"./modules/rowsCounter\": \"./src/modules/rowsCounter.js\",\n\t\"./modules/rowsCounter.js\": \"./src/modules/rowsCounter.js\",\n\t\"./modules/state\": \"./src/modules/state.js\",\n\t\"./modules/state.js\": \"./src/modules/state.js\",\n\t\"./modules/statusBar\": \"./src/modules/statusBar.js\",\n\t\"./modules/statusBar.js\": \"./src/modules/statusBar.js\",\n\t\"./modules/storage\": \"./src/modules/storage.js\",\n\t\"./modules/storage.js\": \"./src/modules/storage.js\",\n\t\"./modules/toolbar\": \"./src/modules/toolbar.js\",\n\t\"./modules/toolbar.js\": \"./src/modules/toolbar.js\",\n\t\"./number\": \"./src/number.js\",\n\t\"./number.js\": \"./src/number.js\",\n\t\"./root\": \"./src/root.js\",\n\t\"./root.js\": \"./src/root.js\",\n\t\"./settings\": \"./src/settings.js\",\n\t\"./settings.js\": \"./src/settings.js\",\n\t\"./sort\": \"./src/sort.js\",\n\t\"./sort.js\": \"./src/sort.js\",\n\t\"./string\": \"./src/string.js\",\n\t\"./string.js\": \"./src/string.js\",\n\t\"./tablefilter\": \"./src/tablefilter.js\",\n\t\"./tablefilter.js\": \"./src/tablefilter.js\",\n\t\"./types\": \"./src/types.js\",\n\t\"./types.js\": \"./src/types.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\tvar module = __webpack_require__(id);\n\treturn module;\n}\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) { // check for number or string\n\t\tvar e = new Error('Cannot find module \"' + req + '\".');\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn id;\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src sync recursive ^\\\\.\\\\/.*$\";","import {Feature} from '../../feature';\r\nimport {tag} from '../../dom';\r\nimport {INPUT} from '../../const';\r\nimport {defaultsStr} from '../../settings';\r\nimport {root} from '../../root';\r\n\r\nconst INSTANTIATION_ERROR = `Failed to instantiate EditTable object.\r\n \\n\"ezEditTable\" dependency not found.`;\r\n\r\n/**\r\n * Adapter module for ezEditTable, an external library providing advanced\r\n * grid features (selection and edition):\r\n * http://codecanyon.net/item/ezedittable-enhance-html-tables/2425123?ref=koalyptus\r\n */\r\nexport default class AdapterEzEditTable extends Feature {\r\n\r\n /**\r\n * Creates an instance of AdapterEzEditTable\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} cfg Configuration options for ezEditTable library\r\n */\r\n constructor(tf, cfg) {\r\n super(tf, cfg.name);\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(cfg.description, 'ezEditTable adapter');\r\n\r\n /**\r\n * Filename of ezEditTable library\r\n * @type {String}\r\n */\r\n this.filename = defaultsStr(cfg.filename, 'ezEditTable.js');\r\n\r\n /**\r\n * Path to ezEditTable library\r\n * @type {String}\r\n */\r\n this.vendorPath = cfg.vendor_path;\r\n\r\n /**\r\n * Load ezEditTable stylesheet\r\n * @type {Boolean}\r\n */\r\n this.loadStylesheet = Boolean(cfg.load_stylesheet);\r\n\r\n /**\r\n * Path to ezEditTable stylesheet\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(cfg.stylesheet,\r\n this.vendorPath + 'ezEditTable.css');\r\n\r\n /**\r\n * Name of ezEditTable stylesheet\r\n * @type {String}\r\n */\r\n this.stylesheetName = defaultsStr(cfg.stylesheet_name,\r\n 'ezEditTableCss');\r\n\r\n // Enable the ezEditTable's scroll into view behaviour if grid layout on\r\n cfg.scroll_into_view = cfg.scroll_into_view === false ?\r\n false : tf.gridLayout;\r\n\r\n /**\r\n * ezEditTable instance\r\n * @type {EditTable}\r\n * @private\r\n */\r\n this._ezEditTable = null;\r\n\r\n /**\r\n * ezEditTable configuration\r\n * @private\r\n */\r\n this.cfg = cfg;\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Conditionally load ezEditTable library and set advanced grid\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n if (root.EditTable) {\r\n this._setAdvancedGrid();\r\n } else {\r\n let path = this.vendorPath + this.filename;\r\n tf.import(this.filename, path, () => this._setAdvancedGrid());\r\n }\r\n if (this.loadStylesheet && !tf.isImported(this.stylesheet, 'link')) {\r\n tf.import(this.stylesheetName, this.stylesheet, null, 'link');\r\n }\r\n\r\n // TODO: hack to prevent ezEditTable enter key event hijaking.\r\n // Needs to be fixed in the vendor's library\r\n this.emitter.on(['filter-focus', 'filter-blur'],\r\n () => this._toggleForInputFilter());\r\n\r\n /**\r\n * @inherited\r\n */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Instantiate ezEditTable component for advanced grid features\r\n * @private\r\n */\r\n _setAdvancedGrid() {\r\n let tf = this.tf;\r\n\r\n //start row for EditTable constructor needs to be calculated\r\n let startRow,\r\n cfg = this.cfg,\r\n thead = tag(tf.dom(), 'thead');\r\n\r\n //if thead exists and startRow not specified, startRow is calculated\r\n //automatically by EditTable\r\n if (thead.length > 0 && !cfg.startRow) {\r\n startRow = undefined;\r\n }\r\n //otherwise startRow config property if any or TableFilter refRow\r\n else {\r\n startRow = cfg.startRow || tf.refRow;\r\n }\r\n\r\n cfg.base_path = cfg.base_path || tf.basePath + 'ezEditTable/';\r\n let editable = cfg.editable;\r\n let selectable = cfg.selection;\r\n\r\n if (selectable) {\r\n cfg.default_selection = cfg.default_selection || 'row';\r\n }\r\n //CSS Styles\r\n cfg.active_cell_css = cfg.active_cell_css || 'ezETSelectedCell';\r\n\r\n let _lastValidRowIndex = 0;\r\n let _lastRowIndex = 0;\r\n\r\n if (selectable) {\r\n //Row navigation needs to be calculated according to TableFilter's\r\n //validRowsIndex array\r\n let onAfterSelection = function (et, selectedElm, e) {\r\n let slc = et.Selection;\r\n //Next valid filtered row needs to be selected\r\n let doSelect = function (nextRowIndex) {\r\n if (et.defaultSelection === 'row') {\r\n /* eslint-disable */\r\n slc.SelectRowByIndex(nextRowIndex);\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n et.ClearSelections();\r\n /* eslint-enable */\r\n let cellIndex = selectedElm.cellIndex,\r\n row = tf.dom().rows[nextRowIndex];\r\n if (et.defaultSelection === 'both') {\r\n /* eslint-disable */\r\n slc.SelectRowByIndex(nextRowIndex);\r\n /* eslint-enable */\r\n }\r\n if (row) {\r\n /* eslint-disable */\r\n slc.SelectCell(row.cells[cellIndex]);\r\n /* eslint-enable */\r\n }\r\n }\r\n //Table is filtered\r\n if (tf.validRowsIndex.length !== tf.getRowsNb()) {\r\n let r = tf.dom().rows[nextRowIndex];\r\n if (r) {\r\n r.scrollIntoView(false);\r\n }\r\n if (cell) {\r\n if (cell.cellIndex === (tf.getCellsNb() - 1) &&\r\n tf.gridLayout) {\r\n tf.tblCont.scrollLeft = 100000000;\r\n }\r\n else if (cell.cellIndex === 0 && tf.gridLayout) {\r\n tf.tblCont.scrollLeft = 0;\r\n } else {\r\n cell.scrollIntoView(false);\r\n }\r\n }\r\n }\r\n };\r\n\r\n //table is not filtered\r\n if (!tf.validRowsIndex) {\r\n return;\r\n }\r\n let validIndexes = tf.validRowsIndex,\r\n validIdxLen = validIndexes.length,\r\n row = et.defaultSelection !== 'row' ?\r\n selectedElm.parentNode : selectedElm,\r\n //cell for default_selection = 'both' or 'cell'\r\n cell = selectedElm.nodeName === 'TD' ? selectedElm : null,\r\n /* eslint-disable */\r\n keyCode = e !== undefined ? et.Event.GetKey(e) : 0,\r\n /* eslint-enable */\r\n isRowValid = validIndexes.indexOf(row.rowIndex) !== -1,\r\n nextRowIndex,\r\n paging = tf.feature('paging'),\r\n //pgup/pgdown keys\r\n d = keyCode === 34 || keyCode === 33 ?\r\n (paging && paging.pageLength || et.nbRowsPerPage) :\r\n 1;\r\n\r\n //If next row is not valid, next valid filtered row needs to be\r\n //calculated\r\n if (!isRowValid) {\r\n //Selection direction up/down\r\n if (row.rowIndex > _lastRowIndex) {\r\n //last row\r\n if (row.rowIndex >= validIndexes[validIdxLen - 1]) {\r\n nextRowIndex = validIndexes[validIdxLen - 1];\r\n } else {\r\n let calcRowIndex = (_lastValidRowIndex + d);\r\n if (calcRowIndex > (validIdxLen - 1)) {\r\n nextRowIndex = validIndexes[validIdxLen - 1];\r\n } else {\r\n nextRowIndex = validIndexes[calcRowIndex];\r\n }\r\n }\r\n } else {\r\n //first row\r\n if (row.rowIndex <= validIndexes[0]) {\r\n nextRowIndex = validIndexes[0];\r\n } else {\r\n let v = validIndexes[_lastValidRowIndex - d];\r\n nextRowIndex = v ? v : validIndexes[0];\r\n }\r\n }\r\n _lastRowIndex = row.rowIndex;\r\n doSelect(nextRowIndex);\r\n } else {\r\n //If filtered row is valid, special calculation for\r\n //pgup/pgdown keys\r\n if (keyCode !== 34 && keyCode !== 33) {\r\n _lastValidRowIndex = validIndexes.indexOf(row.rowIndex);\r\n _lastRowIndex = row.rowIndex;\r\n } else {\r\n if (keyCode === 34) { //pgdown\r\n //last row\r\n if ((_lastValidRowIndex + d) <= (validIdxLen - 1)) {\r\n nextRowIndex = validIndexes[\r\n _lastValidRowIndex + d];\r\n } else {\r\n nextRowIndex = [validIdxLen - 1];\r\n }\r\n } else { //pgup\r\n //first row\r\n if ((_lastValidRowIndex - d) <= validIndexes[0]) {\r\n nextRowIndex = validIndexes[0];\r\n } else {\r\n nextRowIndex = validIndexes[\r\n _lastValidRowIndex - d];\r\n }\r\n }\r\n _lastRowIndex = nextRowIndex;\r\n _lastValidRowIndex = validIndexes.indexOf(nextRowIndex);\r\n doSelect(nextRowIndex);\r\n }\r\n }\r\n };\r\n\r\n //Page navigation has to be enforced whenever selected row is out of\r\n //the current page range\r\n let onBeforeSelection = function (et, selectedElm) {\r\n let row = et.defaultSelection !== 'row' ?\r\n selectedElm.parentNode : selectedElm;\r\n if (tf.paging) {\r\n if (tf.feature('paging').nbPages > 1) {\r\n let paging = tf.feature('paging');\r\n //page length is re-assigned in case it has changed\r\n et.nbRowsPerPage = paging.pageLength;\r\n let validIndexes = tf.validRowsIndex,\r\n validIdxLen = validIndexes.length,\r\n pagingEndRow = parseInt(paging.startPagingRow, 10) +\r\n parseInt(paging.pageLength, 10);\r\n let rowIndex = row.rowIndex;\r\n\r\n if ((rowIndex === validIndexes[validIdxLen - 1]) &&\r\n paging.currentPageNb !== paging.nbPages) {\r\n paging.setPage('last');\r\n }\r\n else if ((rowIndex === validIndexes[0]) &&\r\n paging.currentPageNb !== 1) {\r\n paging.setPage('first');\r\n }\r\n else if (rowIndex > validIndexes[pagingEndRow - 1] &&\r\n rowIndex < validIndexes[validIdxLen - 1]) {\r\n paging.setPage('next');\r\n }\r\n else if (\r\n rowIndex < validIndexes[paging.startPagingRow] &&\r\n rowIndex > validIndexes[0]) {\r\n paging.setPage('previous');\r\n }\r\n }\r\n }\r\n };\r\n\r\n //Selected row needs to be visible when paging is activated\r\n if (tf.paging) {\r\n tf.feature('paging').onAfterChangePage = function (paging) {\r\n let advGrid = paging.tf.extension('advancedGrid');\r\n let et = advGrid._ezEditTable;\r\n let slc = et.Selection;\r\n /* eslint-disable */\r\n let row = slc.GetActiveRow();\r\n /* eslint-enable */\r\n if (row) {\r\n row.scrollIntoView(false);\r\n }\r\n /* eslint-disable */\r\n let cell = slc.GetActiveCell();\r\n /* eslint-enable */\r\n if (cell) {\r\n cell.scrollIntoView(false);\r\n }\r\n };\r\n }\r\n\r\n //Rows navigation when rows are filtered is performed with the\r\n //EditTable row selection callback events\r\n if (cfg.default_selection === 'row') {\r\n let fnB = cfg.on_before_selected_row;\r\n cfg.on_before_selected_row = function () {\r\n var args = arguments;\r\n onBeforeSelection(args[0], args[1], args[2]);\r\n if (fnB) {\r\n fnB.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n let fnA = cfg.on_after_selected_row;\r\n cfg.on_after_selected_row = function () {\r\n var args = arguments;\r\n onAfterSelection(args[0], args[1], args[2]);\r\n if (fnA) {\r\n fnA.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n } else {\r\n let fnD = cfg.on_before_selected_cell;\r\n cfg.on_before_selected_cell = function () {\r\n var args = arguments;\r\n onBeforeSelection(args[0], args[1], args[2]);\r\n if (fnD) {\r\n fnD.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n let fnC = cfg.on_after_selected_cell;\r\n cfg.on_after_selected_cell = function () {\r\n var args = arguments;\r\n onAfterSelection(args[0], args[1], args[2]);\r\n if (fnC) {\r\n fnC.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n }\r\n }\r\n if (editable) {\r\n //Added or removed rows, TF rows number needs to be re-calculated\r\n let fnE = cfg.on_added_dom_row;\r\n cfg.on_added_dom_row = function () {\r\n var args = arguments;\r\n tf.nbFilterableRows++;\r\n if (!tf.paging) {\r\n tf.emitter.emit('rows-changed', tf, this);\r\n } else {\r\n tf.nbFilterableRows++;\r\n tf.paging = false;\r\n tf.feature('paging').destroy();\r\n tf.feature('paging').reset();\r\n }\r\n if (tf.alternateRows) {\r\n tf.feature('alternateRows').init();\r\n }\r\n if (fnE) {\r\n fnE.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n if (cfg.actions && cfg.actions['delete']) {\r\n let fnF = cfg.actions['delete'].on_after_submit;\r\n cfg.actions['delete'].on_after_submit = function () {\r\n var args = arguments;\r\n tf.nbFilterableRows--;\r\n if (!tf.paging) {\r\n tf.emitter.emit('rows-changed', tf, this);\r\n } else {\r\n tf.nbFilterableRows--;\r\n tf.paging = false;\r\n tf.feature('paging').destroy();\r\n tf.feature('paging').reset(false);\r\n }\r\n if (tf.alternateRows) {\r\n tf.feature('alternateRows').init();\r\n }\r\n if (fnF) {\r\n fnF.call(null, args[0], args[1]);\r\n }\r\n };\r\n }\r\n }\r\n\r\n try {\r\n /* eslint-disable */\r\n this._ezEditTable = new EditTable(tf.id, cfg, startRow);\r\n this._ezEditTable.Init();\r\n /* eslint-enable */\r\n } catch (e) { throw new Error(INSTANTIATION_ERROR); }\r\n\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Reset advanced grid when previously removed\r\n */\r\n reset() {\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable) {\r\n if (this.cfg.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Set();\r\n /* eslint-enable */\r\n }\r\n if (this.cfg.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Set();\r\n /* eslint-enable */\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Toggle behaviour\r\n */\r\n toggle() {\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Remove();\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Set();\r\n /* eslint-enable */\r\n }\r\n if (ezEditTable.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Remove();\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Set();\r\n /* eslint-enable */\r\n }\r\n }\r\n\r\n _toggleForInputFilter() {\r\n let tf = this.tf;\r\n if (!tf.getActiveFilterId()) {\r\n return;\r\n }\r\n let colIndex = tf.getColumnIndexFromFilterId(tf.getActiveFilterId());\r\n let filterType = tf.getFilterType(colIndex);\r\n if (filterType === INPUT) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n /**\r\n * Remove advanced grid\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable) {\r\n if (this.cfg.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.ClearSelections();\r\n ezEditTable.Selection.Remove();\r\n /* eslint-enable */\r\n }\r\n if (this.cfg.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Remove();\r\n /* eslint-enable */\r\n }\r\n }\r\n\r\n this.emitter.off(['filter-focus', 'filter-blur'],\r\n () => this._toggleForInputFilter());\r\n this.initialized = false;\r\n }\r\n}\r\n","import AdapterEzEditTable from './adapterEzEditTable';\r\n\r\nexport default AdapterEzEditTable;","import {Feature} from '../../feature';\r\nimport {createText, elm} from '../../dom';\r\nimport {isArray, isEmpty, EMPTY_FN} from '../../types';\r\nimport {numSortAsc} from '../../sort';\r\nimport {FORMATTED_NUMBER} from '../../const';\r\nimport formatNumber from 'format-number';\r\nimport {defaultsFn, defaultsArr} from '../../settings';\r\nimport {bound} from '../../event';\r\n\r\nconst EVENTS = [\r\n 'after-filtering',\r\n 'after-page-change',\r\n 'after-page-length-change'\r\n];\r\n\r\nconst SUM = 'sum';\r\nconst MEAN = 'mean';\r\nconst MIN = 'min';\r\nconst MAX = 'max';\r\nconst MEDIAN = 'median';\r\nconst Q1 = 'q1';\r\nconst Q3 = 'q3';\r\n\r\n/**\r\n * Column calculations extension\r\n */\r\nexport default class ColOps extends Feature {\r\n\r\n /**\r\n * Creates an instance of ColOps\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} opts Configuration object\r\n */\r\n constructor(tf, opts) {\r\n super(tf, opts.name);\r\n\r\n /**\r\n * Callback fired before columns operations start\r\n * @type {Function}\r\n */\r\n this.onBeforeOperation = defaultsFn(opts.on_before_operation, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after columns operations are completed\r\n * @type {Function}\r\n */\r\n this.onAfterOperation = defaultsFn(opts.on_after_operation, EMPTY_FN);\r\n\r\n /**\r\n * Configuration options\r\n * @type {Object}\r\n */\r\n this.opts = opts;\r\n\r\n /**\r\n * List of DOM element IDs containing column's calculation result\r\n * @type {Array}\r\n */\r\n this.labelIds = defaultsArr(opts.id, []);\r\n\r\n /**\r\n * List of columns' indexes for calculations\r\n * @type {Array}\r\n */\r\n this.colIndexes = defaultsArr(opts.col, []);\r\n\r\n /**\r\n * List of operations - possible values: 'sum', 'mean', 'min', 'max',\r\n * 'median', 'q1', 'q3'\r\n * @type {Array}\r\n */\r\n this.operations = defaultsArr(opts.operation, []);\r\n\r\n /**\r\n * List of write methods used to write the result - possible values:\r\n * 'innerHTML', 'setValue', 'createTextNode'\r\n * @type {Array}\r\n */\r\n this.outputTypes = defaultsArr(opts.write_method, []);\r\n\r\n /**\r\n * List of format objects used for formatting the result -\r\n * refer to https://github.com/componitable/format-number to check\r\n * configuration options\r\n * @type {Array}\r\n */\r\n this.formatResults = defaultsArr(opts.format_result, []);\r\n\r\n /**\r\n * List of row indexes displaying the results\r\n * @type {Array}\r\n */\r\n this.totRowIndexes = defaultsArr(opts.tot_row_index, []);\r\n\r\n /**\r\n * List of row indexes excluded from calculations\r\n * @type {Array}\r\n */\r\n this.excludeRows = defaultsArr(opts.exclude_row, []);\r\n\r\n /**\r\n * List of decimal precision for calculation results\r\n * @type {Array}\r\n */\r\n this.decimalPrecisions = defaultsArr(opts.decimal_precision, 2);\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initializes ColOps instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n // subscribe to events\r\n this.emitter.on(EVENTS, bound(this.calcAll, this));\r\n\r\n this.calcAll();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Calculates columns' values\r\n * Configuration options are stored in 'opts' property\r\n * - 'id' contains ids of elements showing result (array)\r\n * - 'col' contains the columns' indexes (array)\r\n * - 'operation' contains operation type (array, values: 'sum', 'mean',\r\n * 'min', 'max', 'median', 'q1', 'q3')\r\n * - 'write_method' array defines which method to use for displaying the\r\n * result (innerHTML, setValue, createTextNode) - default: 'innerHTML'\r\n * - 'tot_row_index' defines in which row results are displayed\r\n * (integers array)\r\n *\r\n * - changes made by Nuovella:\r\n * (1) optimized the routine (now it will only process each column once),\r\n * (2) added calculations for the median, lower and upper quartile.\r\n */\r\n calcAll() {\r\n let tf = this.tf;\r\n if (!tf.isInitialized()) {\r\n return;\r\n }\r\n\r\n this.onBeforeOperation(tf, this);\r\n this.emitter.emit('before-column-operation', tf, this);\r\n\r\n let { colIndexes, operations: colOperations, outputTypes,\r\n totRowIndexes, excludeRows, formatResults,\r\n decimalPrecisions } = this;\r\n\r\n //nuovella: determine unique list of columns to operate on\r\n let uIndexes = [];\r\n colIndexes.forEach((val) => {\r\n if (uIndexes.indexOf(val) === -1) {\r\n uIndexes.push(val);\r\n }\r\n });\r\n\r\n let nbCols = uIndexes.length,\r\n rows = tf.dom().rows,\r\n colValues = [];\r\n\r\n for (let u = 0; u < nbCols; u++) {\r\n //this retrieves col values\r\n //use uIndexes because we only want to pass through this loop\r\n //once for each column get the values in this unique column\r\n colValues.push(\r\n tf.getVisibleColumnData(uIndexes[u], false, excludeRows)\r\n );\r\n\r\n let curValues = colValues[u];\r\n\r\n //next: calculate all operations for this column\r\n let result = 0,\r\n operations = [],\r\n precisions = [],\r\n labels = [],\r\n writeType,\r\n formatResult = [],\r\n idx = 0;\r\n\r\n for (let k = 0; k < colIndexes.length; k++) {\r\n if (colIndexes[k] !== uIndexes[u]) {\r\n continue;\r\n }\r\n operations[idx] = (colOperations[k] || 'sum').toLowerCase();\r\n precisions[idx] = decimalPrecisions[k];\r\n labels[idx] = this.labelIds[k];\r\n writeType = isArray(outputTypes) ? outputTypes[k] : null;\r\n formatResult[idx] =\r\n this.configureFormat(uIndexes[u], formatResults[k]);\r\n idx++;\r\n }\r\n\r\n for (let i = 0; i < idx; i++) {\r\n // emit values before column calculation\r\n this.emitter.emit(\r\n 'before-column-calc',\r\n tf,\r\n this,\r\n uIndexes[u],\r\n curValues,\r\n operations[i],\r\n precisions[i]\r\n );\r\n\r\n result = Number(this.calc(curValues, operations[i], null));\r\n\r\n // emit column calculation result\r\n this.emitter.emit(\r\n 'column-calc',\r\n tf,\r\n this,\r\n uIndexes[u],\r\n result,\r\n operations[i],\r\n precisions[i]\r\n );\r\n\r\n // write result in expected DOM element\r\n this.writeResult(\r\n result,\r\n labels[i],\r\n writeType,\r\n precisions[i],\r\n formatResult[i]\r\n );\r\n\r\n }//for i\r\n\r\n // row(s) with result are always visible\r\n let totRow = totRowIndexes && totRowIndexes[u] ?\r\n rows[totRowIndexes[u]] : null;\r\n if (totRow) {\r\n totRow.style.display = '';\r\n }\r\n }//for u\r\n\r\n this.onAfterOperation(tf, this);\r\n this.emitter.emit('after-column-operation', tf, this);\r\n }\r\n\r\n /**\r\n * Make desired calculation on specified column.\r\n * @param {Number} colIndex Column index\r\n * @param {String} [operation=SUM] Operation type\r\n * @param {Number} precision Decimal precision\r\n * @returns {Number}\r\n */\r\n columnCalc(colIndex, operation = SUM, precision) {\r\n let excludeRows = this.excludeRows || [];\r\n let colValues = tf.getVisibleColumnData(colIndex, false, excludeRows);\r\n\r\n return Number(this.calc(colValues, operation, precision));\r\n }\r\n\r\n /**\r\n * Make calculation on passed values.\r\n * @param {Array} values List of values\r\n * @param {String} [operation=SUM] Optional operation type\r\n * @param {Number} precision Optional result precision\r\n * @returns {Number}\r\n * @private\r\n */\r\n calc(colValues, operation = SUM, precision) {\r\n let result = 0;\r\n\r\n if (operation === Q1 || operation === Q3 || operation === MEDIAN) {\r\n colValues = this.sortColumnValues(colValues, numSortAsc);\r\n }\r\n\r\n switch (operation) {\r\n case MEAN:\r\n result = this.calcMean(colValues);\r\n break;\r\n case SUM:\r\n result = this.calcSum(colValues);\r\n break;\r\n case MIN:\r\n result = this.calcMin(colValues);\r\n break;\r\n case MAX:\r\n result = this.calcMax(colValues);\r\n break;\r\n case MEDIAN:\r\n result = this.calcMedian(colValues);\r\n break;\r\n case Q1:\r\n result = this.calcQ1(colValues);\r\n break;\r\n case Q3:\r\n result = this.calcQ3(colValues);\r\n break;\r\n }\r\n\r\n return isEmpty(precision) ? result : result.toFixed(precision);\r\n }\r\n\r\n /**\r\n * Calculate the sum of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcSum(values = []) {\r\n if (isEmpty(values)) {\r\n return 0;\r\n }\r\n let result = values.reduce((x, y) => Number(x) + Number(y));\r\n return result;\r\n }\r\n\r\n /**\r\n * Calculate the mean of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMean(values = []) {\r\n let result = this.calcSum(values) / values.length;\r\n return Number(result);\r\n }\r\n\r\n /**\r\n * Calculate the max value of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMax(values = []) {\r\n return Math.max.apply(null, values);\r\n }\r\n\r\n /**\r\n * Calculate the min value of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMin(values = []) {\r\n return Math.min.apply(null, values);\r\n }\r\n\r\n /**\r\n * Calculate the median of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMedian(values = []) {\r\n let nbValues = values.length;\r\n let aux = 0;\r\n if (nbValues % 2 === 1) {\r\n aux = Math.floor(nbValues / 2);\r\n return Number(values[aux]);\r\n }\r\n return (Number(values[nbValues / 2]) +\r\n Number(values[((nbValues / 2) - 1)])) / 2;\r\n }\r\n\r\n /**\r\n * Calculate the lower quartile of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcQ1(values = []) {\r\n let nbValues = values.length;\r\n let posa = 0.0;\r\n posa = Math.floor(nbValues / 4);\r\n if (4 * posa === nbValues) {\r\n return (Number(values[posa - 1]) +\r\n Number(values[posa])) / 2;\r\n }\r\n return Number(values[posa]);\r\n }\r\n\r\n /**\r\n * Calculate the upper quartile of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcQ3(values = []) {\r\n let nbValues = values.length;\r\n let posa = 0.0;\r\n let posb = 0.0;\r\n posa = Math.floor(nbValues / 4);\r\n if (4 * posa === nbValues) {\r\n posb = 3 * posa;\r\n return (Number(values[posb]) +\r\n Number(values[posb - 1])) / 2;\r\n }\r\n return Number(values[nbValues - posa - 1]);\r\n }\r\n\r\n /**\r\n * Sort passed values with supplied sorter function.\r\n * @param {Array} [values=[]] List of values to be sorted\r\n * @param {Function} sorter Sorter function\r\n * @returns {Array}\r\n */\r\n sortColumnValues(values = [], sorter) {\r\n return values.sort(sorter);\r\n }\r\n\r\n /**\r\n * Write calculation result in passed DOM element with supplied write method\r\n * and decimal precision.\r\n * @param {Number} [result=0] Calculation result\r\n * @param {DOMElement} label DOM element\r\n * @param {String} [writeType='innerhtml'] Write method\r\n * @param {Number} [precision=2] Applied decimal precision\r\n * @private\r\n */\r\n writeResult(result = 0, label, writeType = 'innerhtml',\r\n precision = 2, format = {}) {\r\n let labelElm = elm(label);\r\n\r\n if (!labelElm) {\r\n return;\r\n }\r\n\r\n result = result.toFixed(precision);\r\n if (isNaN(result) || !isFinite(result)) {\r\n result = '';\r\n } else {\r\n result = formatNumber(format)(result);\r\n }\r\n\r\n switch (writeType.toLowerCase()) {\r\n case 'innerhtml':\r\n labelElm.innerHTML = result;\r\n break;\r\n case 'setvalue':\r\n labelElm.value = result;\r\n break;\r\n case 'createtextnode':\r\n let oldNode = labelElm.firstChild;\r\n let txtNode = createText(result);\r\n labelElm.replaceChild(txtNode, oldNode);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Configure the format options used to format the operation result based\r\n * on column type.\r\n * @param {Number} colIndex Column index\r\n * @param {Object} [format={}] Format object\r\n * @returns {Object}\r\n * @private\r\n */\r\n configureFormat(colIndex, format = {}) {\r\n let tf = this.tf;\r\n if (tf.hasType(colIndex, [FORMATTED_NUMBER])) {\r\n let colType = tf.colTypes[colIndex];\r\n if (colType.decimal && !format.decimal) {\r\n format.decimal = colType.decimal;\r\n }\r\n if (colType.thousands && !format.integerSeparator) {\r\n format.integerSeparator = colType.thousands;\r\n }\r\n } else {\r\n format.decimal = format.decimal || '';\r\n format.integerSeparator = format.integerSeparator || '';\r\n }\r\n return format;\r\n }\r\n\r\n /** Remove extension */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n // unsubscribe to events\r\n this.emitter.off(EVENTS, bound(this.calcAll, this));\r\n\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {\r\n addClass, removeClass, createCheckItem, createElm, elm, removeElm,\r\n getText, tag\r\n} from '../../dom';\r\nimport {isUndef, EMPTY_FN, isNull} from '../../types';\r\nimport {addEvt, targetEvt, removeEvt} from '../../event';\r\nimport {root} from '../../root';\r\nimport {NONE} from '../../const';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsFn, defaultsNb, defaultsArr\r\n} from '../../settings';\r\nimport {RIGHT} from '../../modules/toolbar';\r\n\r\n/**\r\n * Columns Visibility extension\r\n */\r\nexport default class ColsVisibility extends Feature {\r\n\r\n /**\r\n * Creates an instance of ColsVisibility\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} Configuration object\r\n */\r\n constructor(tf, f) {\r\n super(tf, f.name);\r\n\r\n // Configuration object\r\n let cfg = this.config;\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(f.description, 'Columns visibility manager');\r\n\r\n /**\r\n * show/hide columns container element\r\n * @private\r\n */\r\n this.spanEl = null;\r\n\r\n /**\r\n * show/hide columns button element\r\n * @private\r\n */\r\n this.btnEl = null;\r\n\r\n /**\r\n * show/hide columns main container element\r\n * @private\r\n */\r\n this.contEl = null;\r\n\r\n /**\r\n * Enable tick to hide a column, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.tickToHide = defaultsBool(f.tick_to_hide, true);\r\n\r\n /**\r\n * Enable columns manager UI, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.manager = defaultsBool(f.manager, true);\r\n\r\n /**\r\n * Headers HTML table reference only if headers are external\r\n * @type {DOMElement}\r\n */\r\n this.headersTbl = f.headers_table || null;\r\n\r\n /**\r\n * Headers row index only if headers are external\r\n * @type {Number}\r\n */\r\n this.headersIndex = defaultsNb(f.headers_index, 1);\r\n\r\n /**\r\n * ID of main container element\r\n * @type {String}\r\n */\r\n this.contElTgtId = defaultsStr(f.container_target_id, null);\r\n\r\n /**\r\n * Alternative text for column headers in column manager UI\r\n * @type {Array}\r\n */\r\n this.headersText = defaultsArr(f.headers_text, []);\r\n\r\n /**\r\n * ID of button's container element\r\n * @type {String}\r\n */\r\n this.btnTgtId = defaultsStr(f.btn_target_id, null);\r\n\r\n /**\r\n * Button's text, defaults to Columns▼\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, 'Columns▼');\r\n\r\n /**\r\n * Button's inner HTML\r\n * @type {String}\r\n */\r\n this.btnHtml = defaultsStr(f.btn_html, null);\r\n\r\n /**\r\n * Css class for button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'colVis');\r\n\r\n /**\r\n * Columns manager UI close link text, defaults to 'Close'\r\n * @type {String}\r\n */\r\n this.btnCloseText = defaultsStr(f.btn_close_text, 'Close');\r\n\r\n /**\r\n * Columns manager UI close link HTML\r\n * @type {String}\r\n */\r\n this.btnCloseHtml = defaultsStr(f.btn_close_html, null);\r\n\r\n /**\r\n * Css for columns manager UI close link\r\n * @type {String}\r\n */\r\n this.btnCloseCssClass = defaultsStr(f.btn_close_css_class,\r\n this.btnCssClass);\r\n\r\n /**\r\n * Extension's stylesheet filename\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(f.stylesheet, 'colsVisibility.css');\r\n\r\n /**\r\n * Css for columns manager UI span\r\n * @type {String}\r\n */\r\n this.spanCssClass = defaultsStr(f.span_css_class, 'colVisSpan');\r\n\r\n /**\r\n * Css for columns manager UI main container\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.cont_css_class, 'colVisCont');\r\n\r\n /**\r\n * Css for columns manager UI checklist (ul)\r\n * @type {String}\r\n */\r\n this.listCssClass = defaultsStr(cfg.list_css_class, 'cols_checklist');\r\n\r\n /**\r\n * Css for columns manager UI checklist item (li)\r\n * @type {String}\r\n */\r\n this.listItemCssClass = defaultsStr(cfg.checklist_item_css_class,\r\n 'cols_checklist_item');\r\n\r\n /**\r\n * Css for columns manager UI checklist item selected state (li)\r\n * @type {String}\r\n */\r\n this.listSlcItemCssClass = defaultsStr(\r\n cfg.checklist_selected_item_css_class,\r\n 'cols_checklist_slc_item'\r\n );\r\n\r\n /**\r\n * Text preceding the columns list, defaults to 'Hide' or 'Show'\r\n * depending on tick mode (tick_to_hide option)\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, this.tickToHide ? 'Hide: ' : 'Show: ');\r\n\r\n /**\r\n * List of columns indexes to be hidden at initialization\r\n * @type {Array}\r\n */\r\n this.atStart = defaultsArr(f.at_start, []);\r\n\r\n /**\r\n * Enable hover behaviour on columns manager button/link\r\n * @type {Boolean}\r\n */\r\n this.enableHover = Boolean(f.enable_hover);\r\n\r\n /**\r\n * Enable select all option, disabled by default\r\n * @type {Boolean}\r\n */\r\n this.enableTickAll = Boolean(f.enable_tick_all);\r\n\r\n /**\r\n * Text for select all option, defaults to 'Select all:'\r\n * @type {String}\r\n */\r\n this.tickAllText = defaultsStr(f.tick_all_text, 'Select all:');\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\r\n\r\n /**\r\n * List of indexes of hidden columns\r\n * @private\r\n */\r\n this.hiddenCols = [];\r\n\r\n /**\r\n * Bound mouseup wrapper\r\n * @private\r\n */\r\n this.boundMouseup = null;\r\n\r\n /**\r\n * Callback fired when the extension is initialized\r\n * @type {Function}\r\n */\r\n this.onLoaded = defaultsFn(f.on_loaded, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before the columns manager is opened\r\n * @type {Function}\r\n */\r\n this.onBeforeOpen = defaultsFn(f.on_before_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the columns manager is opened\r\n * @type {Function}\r\n */\r\n this.onAfterOpen = defaultsFn(f.on_after_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before the columns manager is closed\r\n * @type {Function}\r\n */\r\n this.onBeforeClose = defaultsFn(f.on_before_close, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the columns manager is closed\r\n * @type {Function}\r\n */\r\n this.onAfterClose = defaultsFn(f.on_after_close, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a column is hidden\r\n * @type {Function}\r\n */\r\n this.onBeforeColHidden = defaultsFn(f.on_before_col_hidden, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a column is hidden\r\n * @type {Function}\r\n */\r\n this.onAfterColHidden = defaultsFn(f.on_after_col_hidden, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a column is displayed\r\n * @type {Function}\r\n */\r\n this.onBeforeColDisplayed = defaultsFn(f.on_before_col_displayed,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a column is displayed\r\n * @type {Function}\r\n */\r\n this.onAfterColDisplayed = defaultsFn(f.on_after_col_displayed,\r\n EMPTY_FN);\r\n\r\n //Grid layout support\r\n if (tf.gridLayout) {\r\n this.headersTbl = tf.feature('gridLayout').headTbl; //headers table\r\n this.headersIndex = 0; //headers index\r\n }\r\n\r\n //Loads extension stylesheet\r\n tf.import(f.name + 'Style', tf.getStylePath() + this.stylesheet, null,\r\n 'link');\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Mouse-up event handler handling popup auto-close behaviour\r\n * @private\r\n */\r\n onMouseup(evt) {\r\n let targetElm = targetEvt(evt);\r\n\r\n while (targetElm && targetElm !== this.contEl\r\n && targetElm !== this.btnEl) {\r\n targetElm = targetElm.parentNode;\r\n }\r\n\r\n if (targetElm !== this.contEl && targetElm !== this.btnEl) {\r\n this.toggle();\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Toggle columns manager UI\r\n */\r\n toggle() {\r\n // ensure mouseup event handler is removed\r\n removeEvt(root, 'mouseup', this.boundMouseup);\r\n\r\n let contDisplay = this.contEl.style.display;\r\n\r\n if (contDisplay !== 'inline') {\r\n this.onBeforeOpen(this);\r\n }\r\n if (contDisplay === 'inline') {\r\n this.onBeforeClose(this);\r\n }\r\n\r\n this.contEl.style.display = contDisplay === 'inline' ?\r\n NONE : 'inline';\r\n\r\n if (contDisplay !== 'inline') {\r\n this.onAfterOpen(this);\r\n addEvt(root, 'mouseup', this.boundMouseup);\r\n }\r\n if (contDisplay === 'inline') {\r\n this.onAfterClose(this);\r\n }\r\n }\r\n\r\n /**\r\n * Check an item in columns manager UI\r\n * @private\r\n */\r\n checkItem(lbl) {\r\n let li = lbl.parentNode;\r\n if (!li || !lbl) {\r\n return;\r\n }\r\n let isChecked = lbl.firstChild.checked;\r\n let colIndex = lbl.firstChild.getAttribute('id').split('_')[1];\r\n colIndex = parseInt(colIndex, 10);\r\n if (isChecked) {\r\n addClass(li, this.listSlcItemCssClass);\r\n } else {\r\n removeClass(li, this.listSlcItemCssClass);\r\n }\r\n\r\n let hide = false;\r\n if ((this.tickToHide && isChecked) ||\r\n (!this.tickToHide && !isChecked)) {\r\n hide = true;\r\n }\r\n this.setHidden(colIndex, hide);\r\n }\r\n\r\n /**\r\n * Initializes ColsVisibility instance\r\n */\r\n init() {\r\n if (this.initialized || !this.manager) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-extension', this,\r\n !isNull(this.btnTgtId));\r\n\r\n this.emitter.on(['hide-column'],\r\n (tf, colIndex) => this.hideCol(colIndex));\r\n\r\n this.buildBtn();\r\n this.buildManager();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.boundMouseup = this.onMouseup.bind(this);\r\n\r\n this.emitter.emit('columns-visibility-initialized', this.tf, this);\r\n this.emitter.emit('extension-initialized', this);\r\n\r\n // Hide columns at start at very end of initialization, do not move\r\n // as order is important\r\n this._hideAtStart();\r\n }\r\n\r\n /**\r\n * Build main button UI\r\n */\r\n buildBtn() {\r\n if (this.btnEl) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let span = createElm('span');\r\n span.className = this.spanCssClass;\r\n\r\n // Container element (rdiv or custom element)\r\n let targetEl = !this.btnTgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.btnTgtId);\r\n\r\n if (!this.btnTgtId) {\r\n let firstChild = targetEl.firstChild;\r\n firstChild.parentNode.insertBefore(span, firstChild);\r\n } else {\r\n targetEl.appendChild(span);\r\n }\r\n\r\n if (!this.btnHtml) {\r\n let btn = createElm('a', ['href', 'javascript:;']);\r\n btn.className = this.btnCssClass;\r\n btn.title = this.desc;\r\n\r\n btn.innerHTML = this.btnText;\r\n span.appendChild(btn);\r\n if (!this.enableHover) {\r\n addEvt(btn, 'click', (evt) => this.toggle(evt));\r\n } else {\r\n addEvt(btn, 'mouseover', (evt) => this.toggle(evt));\r\n }\r\n } else { // Custom html\r\n span.innerHTML = this.btnHtml;\r\n let colVisEl = span.firstChild;\r\n if (!this.enableHover) {\r\n addEvt(colVisEl, 'click', (evt) => this.toggle(evt));\r\n } else {\r\n addEvt(colVisEl, 'mouseover', (evt) => this.toggle(evt));\r\n }\r\n }\r\n\r\n this.spanEl = span;\r\n this.btnEl = this.spanEl.firstChild;\r\n\r\n this.onLoaded(this);\r\n }\r\n\r\n /**\r\n * Build columns manager UI\r\n */\r\n buildManager() {\r\n let tf = this.tf;\r\n\r\n let container = !this.contElTgtId ?\r\n createElm('div') :\r\n elm(this.contElTgtId);\r\n container.className = this.contCssClass;\r\n\r\n //Extension description\r\n let extNameLabel = createElm('p');\r\n extNameLabel.innerHTML = this.text;\r\n container.appendChild(extNameLabel);\r\n\r\n //Headers list\r\n let ul = createElm('ul');\r\n ul.className = this.listCssClass;\r\n\r\n let tbl = this.headersTbl || tf.dom();\r\n let headerIndex = this.headersTbl ?\r\n this.headersIndex : tf.getHeadersRowIndex();\r\n let headerRow = tbl.rows[headerIndex];\r\n\r\n //Tick all option\r\n if (this.enableTickAll) {\r\n let li = createCheckItem('col__' + tf.id, this.tickAllText,\r\n this.tickAllText);\r\n addClass(li, this.listItemCssClass);\r\n ul.appendChild(li);\r\n li.check.checked = !this.tickToHide;\r\n\r\n addEvt(li.check, 'click', () => {\r\n for (let h = 0; h < headerRow.cells.length; h++) {\r\n let itm = elm('col_' + h + '_' + tf.id);\r\n if (itm && li.check.checked !== itm.checked) {\r\n itm.click();\r\n itm.checked = li.check.checked;\r\n }\r\n }\r\n });\r\n }\r\n\r\n for (let i = 0; i < headerRow.cells.length; i++) {\r\n let cell = headerRow.cells[i];\r\n let cellText = this.headersText[i] || this._getHeaderText(cell);\r\n let liElm = createCheckItem('col_' + i + '_' + tf.id, cellText,\r\n cellText);\r\n addClass(liElm, this.listItemCssClass);\r\n if (!this.tickToHide) {\r\n addClass(liElm, this.listSlcItemCssClass);\r\n }\r\n ul.appendChild(liElm);\r\n if (!this.tickToHide) {\r\n liElm.check.checked = true;\r\n }\r\n\r\n addEvt(liElm.check, 'click', (evt) => {\r\n let elm = targetEvt(evt);\r\n let lbl = elm.parentNode;\r\n this.checkItem(lbl);\r\n });\r\n }\r\n\r\n //separator\r\n let p = createElm('p', ['align', 'center']);\r\n let btn;\r\n //Close link\r\n if (!this.btnCloseHtml) {\r\n btn = createElm('a', ['href', 'javascript:;']);\r\n btn.className = this.btnCloseCssClass;\r\n btn.innerHTML = this.btnCloseText;\r\n addEvt(btn, 'click', (evt) => this.toggle(evt));\r\n p.appendChild(btn);\r\n } else {\r\n p.innerHTML = this.btnCloseHtml;\r\n btn = p.firstChild;\r\n addEvt(btn, 'click', (evt) => this.toggle(evt));\r\n }\r\n\r\n container.appendChild(ul);\r\n container.appendChild(p);\r\n\r\n this.btnEl.parentNode.insertBefore(container, this.btnEl);\r\n this.contEl = container;\r\n }\r\n\r\n /**\r\n * Hide or show specified columns\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} hide Hide column if true or show if false\r\n */\r\n setHidden(colIndex, hide) {\r\n let tf = this.tf;\r\n let tbl = tf.dom();\r\n\r\n if (hide) {\r\n this.onBeforeColHidden(this, colIndex);\r\n } else {\r\n this.onBeforeColDisplayed(this, colIndex);\r\n }\r\n\r\n this._hideElements(tbl, colIndex, hide);\r\n if (this.headersTbl) {\r\n this._hideElements(this.headersTbl, colIndex, hide);\r\n }\r\n\r\n let hiddenCols = this.hiddenCols;\r\n let itemIndex = hiddenCols.indexOf(colIndex);\r\n if (hide) {\r\n if (itemIndex === -1) {\r\n this.hiddenCols.push(colIndex);\r\n }\r\n } else {\r\n if (itemIndex !== -1) {\r\n this.hiddenCols.splice(itemIndex, 1);\r\n }\r\n }\r\n\r\n if (hide) {\r\n this.onAfterColHidden(this, colIndex);\r\n this.emitter.emit('column-hidden', tf, this, colIndex,\r\n this.hiddenCols);\r\n } else {\r\n this.onAfterColDisplayed(this, colIndex);\r\n this.emitter.emit('column-shown', tf, this, colIndex,\r\n this.hiddenCols);\r\n }\r\n }\r\n\r\n /**\r\n * Show specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n showCol(colIndex) {\r\n if (isUndef(colIndex) || !this.isColHidden(colIndex)) {\r\n return;\r\n }\r\n if (this.manager && this.contEl) {\r\n let itm = elm('col_' + colIndex + '_' + this.tf.id);\r\n if (itm) {\r\n itm.click();\r\n }\r\n } else {\r\n this.setHidden(colIndex, false);\r\n }\r\n }\r\n\r\n /**\r\n * Hide specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n hideCol(colIndex) {\r\n if (isUndef(colIndex) || this.isColHidden(colIndex)) {\r\n return;\r\n }\r\n if (this.manager && this.contEl) {\r\n let itm = elm('col_' + colIndex + '_' + this.tf.id);\r\n if (itm) {\r\n itm.click();\r\n }\r\n } else {\r\n this.setHidden(colIndex, true);\r\n }\r\n }\r\n\r\n /**\r\n * Determine if specified column is hidden\r\n * @param {Number} colIndex Column index\r\n */\r\n isColHidden(colIndex) {\r\n if (this.hiddenCols.indexOf(colIndex) !== -1) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Toggle visibility of specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n toggleCol(colIndex) {\r\n if (isUndef(colIndex) || this.isColHidden(colIndex)) {\r\n this.showCol(colIndex);\r\n } else {\r\n this.hideCol(colIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Return the indexes of the columns currently hidden\r\n * @return {Array} column indexes\r\n */\r\n getHiddenCols() {\r\n return this.hiddenCols;\r\n }\r\n\r\n /**\r\n * Remove the columns manager\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n if (elm(this.contElTgtId)) {\r\n elm(this.contElTgtId).innerHTML = '';\r\n } else {\r\n this.contEl.innerHTML = '';\r\n removeElm(this.contEl);\r\n this.contEl = null;\r\n }\r\n this.btnEl.innerHTML = '';\r\n removeElm(this.btnEl);\r\n this.btnEl = null;\r\n\r\n this.emitter.off(['hide-column'],\r\n (tf, colIndex) => this.hideCol(colIndex));\r\n\r\n this.boundMouseup = null;\r\n\r\n this.initialized = false;\r\n }\r\n\r\n _getHeaderText(cell) {\r\n if (!cell.hasChildNodes) {\r\n return '';\r\n }\r\n\r\n for (let i = 0; i < cell.childNodes.length; i++) {\r\n let n = cell.childNodes[i];\r\n if (n.nodeType === 3) {\r\n return n.nodeValue;\r\n } else if (n.nodeType === 1) {\r\n if (n.id && n.id.indexOf('popUp') !== -1) {\r\n continue;\r\n } else {\r\n return getText(n);\r\n }\r\n }\r\n continue;\r\n }\r\n return '';\r\n }\r\n\r\n _hideElements(tbl, colIdx, hide) {\r\n this._hideCells(tbl, colIdx, hide);\r\n this._hideCol(tbl, colIdx, hide);\r\n }\r\n\r\n _hideCells(tbl, colIdx, hide) {\r\n for (let i = 0; i < tbl.rows.length; i++) {\r\n let row = tbl.rows[i];\r\n let cell = row.cells[colIdx];\r\n if (cell) {\r\n cell.style.display = hide ? NONE : '';\r\n }\r\n }\r\n }\r\n\r\n _hideCol(tbl, colIdx, hide) {\r\n let colElms = tag(tbl, 'col');\r\n if (colElms.length === 0) {\r\n return;\r\n }\r\n colElms[colIdx].style.display = hide ? NONE : '';\r\n }\r\n\r\n _hideAtStart() {\r\n this.atStart.forEach((colIdx) => {\r\n this.hideCol(colIdx);\r\n });\r\n }\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {createElm, removeElm, elm} from '../../dom';\r\nimport {EMPTY_FN, isNull} from '../../types';\r\nimport {addEvt} from '../../event';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsFn, defaultsNb,\r\n} from '../../settings';\r\nimport {RIGHT} from '../../modules/toolbar';\r\n\r\n/**\r\n * Filters Visibility extension\r\n */\r\nexport default class FiltersVisibility extends Feature {\r\n\r\n /**\r\n * Creates an instance of FiltersVisibility\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} Configuration object\r\n */\r\n constructor(tf, f) {\r\n super(tf, f.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(f.description,\r\n 'Filters row visibility manager');\r\n\r\n /**\r\n * Extension's stylesheet filename\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(f.stylesheet , 'filtersVisibility.css');\r\n\r\n /**\r\n * Expand icon filename\r\n * @type {String}\r\n */\r\n this.icnExpand = defaultsStr(f.expand_icon_name, 'icn_exp.png');\r\n\r\n /**\r\n * Collapse icon filename\r\n * @type {String}\r\n */\r\n this.icnCollapse = defaultsStr(f.collapse_icon_name, 'icn_clp.png');\r\n\r\n /**\r\n * Main container element\r\n * @private\r\n */\r\n this.contEl = null;\r\n\r\n /**\r\n * Button element\r\n * @private\r\n */\r\n this.btnEl = null;\r\n\r\n /**\r\n * Expand icon HTML\r\n * @private\r\n */\r\n this.icnExpandHtml = '\"Expand';\r\n\r\n /**\r\n * Collapse icon HTML\r\n * @private\r\n */\r\n this.icnCollapseHtml = '\"Collapse';\r\n\r\n /**\r\n * Default text\r\n * @private\r\n */\r\n this.defaultText = 'Toggle filters';\r\n\r\n /**\r\n * ID of main container element\r\n * @type {String}\r\n */\r\n this.targetId = f.target_id || null;\r\n\r\n /**\r\n * Enable expand/collapse icon, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.enableIcon = defaultsBool(f.enable_icon, true);\r\n\r\n /**\r\n * Custom text for button\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, '');\r\n\r\n /**\r\n * Collapse button HTML\r\n * @private\r\n */\r\n this.collapseBtnHtml = this.enableIcon ?\r\n this.icnCollapseHtml + this.btnText :\r\n this.btnText || this.defaultText;\r\n\r\n /**\r\n * Expand button HTML\r\n * @private\r\n */\r\n this.expandBtnHtml = this.enableIcon ?\r\n this.icnExpandHtml + this.btnText :\r\n this.btnText || this.defaultText;\r\n\r\n /**\r\n * Button's custom HTML\r\n * @type {String}\r\n */\r\n this.btnHtml = defaultsStr(f.btn_html, null);\r\n\r\n /**\r\n * Css class for expand/collapse filters button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'btnExpClpFlt');\r\n\r\n /**\r\n * Css class for main container\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.cont_css_class, 'expClpFlt');\r\n\r\n /**\r\n * Filters row index\r\n * @type {Number}\r\n */\r\n this.filtersRowIndex = defaultsNb(f.filters_row_index,\r\n tf.getFiltersRowIndex());\r\n\r\n /**\r\n * Make filters visible at initialization, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.visibleAtStart = defaultsNb(f.visible_at_start, true);\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\r\n\r\n /**\r\n * Callback fired before filters row is shown\r\n * @type {Function}\r\n */\r\n this.onBeforeShow = defaultsFn(f.on_before_show, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filters row is shown\r\n * @type {Function}\r\n */\r\n this.onAfterShow = defaultsFn(f.on_after_show, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before filters row is hidden\r\n * @type {Function}\r\n */\r\n this.onBeforeHide = defaultsFn(f.on_before_hide, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filters row is hidden\r\n * @type {Function}\r\n */\r\n this.onAfterHide = defaultsFn(f.on_after_hide, EMPTY_FN);\r\n\r\n //Import extension's stylesheet\r\n tf.import(f.name + 'Style', tf.getStylePath() + this.stylesheet, null,\r\n 'link');\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initialise extension\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-extension', this,\r\n !isNull(this.targetId));\r\n\r\n this.buildUI();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.on(['show-filters'], (tf, visible) => this.show(visible));\r\n this.emitter.emit('filters-visibility-initialized', this.tf, this);\r\n this.emitter.emit('extension-initialized', this);\r\n }\r\n\r\n /**\r\n * Build UI elements\r\n */\r\n buildUI() {\r\n let tf = this.tf;\r\n let span = createElm('span');\r\n span.className = this.contCssClass;\r\n\r\n // Container element (rdiv or custom element)\r\n let targetEl = !this.targetId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n\r\n if (!this.targetId) {\r\n let firstChild = targetEl.firstChild;\r\n firstChild.parentNode.insertBefore(span, firstChild);\r\n } else {\r\n targetEl.appendChild(span);\r\n }\r\n\r\n let btn;\r\n if (!this.btnHtml) {\r\n btn = createElm('a', ['href', 'javascript:void(0);']);\r\n btn.className = this.btnCssClass;\r\n btn.title = this.btnText || this.defaultText;\r\n btn.innerHTML = this.collapseBtnHtml;\r\n span.appendChild(btn);\r\n } else { // Custom html\r\n span.innerHTML = this.btnHtml;\r\n btn = span.firstChild;\r\n }\r\n\r\n addEvt(btn, 'click', () => this.toggle());\r\n\r\n this.contEl = span;\r\n this.btnEl = btn;\r\n\r\n if (!this.visibleAtStart) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n /**\r\n * Toggle filters visibility\r\n */\r\n toggle() {\r\n let tf = this.tf;\r\n let tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();\r\n let fltRow = tbl.rows[this.filtersRowIndex];\r\n let isDisplayed = fltRow.style.display === '';\r\n\r\n this.show(!isDisplayed);\r\n }\r\n\r\n /**\r\n * Show or hide filters\r\n *\r\n * @param {boolean} [visible=true] Visibility flag\r\n */\r\n show(visible = true) {\r\n let tf = this.tf;\r\n let tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();\r\n let fltRow = tbl.rows[this.filtersRowIndex];\r\n\r\n if (visible) {\r\n this.onBeforeShow(this);\r\n }\r\n if (!visible) {\r\n this.onBeforeHide(this);\r\n }\r\n\r\n fltRow.style.display = visible ? '' : 'none';\r\n if (this.enableIcon && !this.btnHtml) {\r\n this.btnEl.innerHTML = visible ?\r\n this.collapseBtnHtml : this.expandBtnHtml;\r\n }\r\n\r\n if (visible) {\r\n this.onAfterShow(this);\r\n }\r\n if (!visible) {\r\n this.onAfterHide(this);\r\n }\r\n\r\n this.emitter.emit('filters-toggled', tf, this, visible);\r\n }\r\n\r\n /**\r\n * Destroy the UI\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.off(['show-filters'], (tf, visible) => this.show(visible));\r\n\r\n this.btnEl.innerHTML = '';\r\n removeElm(this.btnEl);\r\n this.btnEl = null;\r\n\r\n this.contEl.innerHTML = '';\r\n removeElm(this.contEl);\r\n this.contEl = null;\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {isUndef, isObj, EMPTY_FN} from '../../types';\r\nimport {createElm, elm, tag} from '../../dom';\r\nimport {addEvt, bound} from '../../event';\r\nimport {parse as parseNb} from '../../number';\r\nimport {\r\n NONE, CELL_TAG, HEADER_TAG, STRING, NUMBER, DATE, FORMATTED_NUMBER,\r\n IP_ADDRESS\r\n} from '../../const';\r\nimport {defaultsStr, defaultsFn, defaultsArr} from '../../settings';\r\n\r\n/**\r\n * SortableTable Adapter module\r\n */\r\nexport default class AdapterSortableTable extends Feature {\r\n\r\n /**\r\n * Creates an instance of AdapterSortableTable\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} opts Configuration object\r\n */\r\n constructor(tf, opts) {\r\n super(tf, opts.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = opts.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(opts.description, 'Sortable table');\r\n\r\n /**\r\n * Indicate whether table previously sorted\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.sorted = false;\r\n\r\n /**\r\n * List of sort type per column basis\r\n * @type {Array}\r\n */\r\n this.sortTypes = defaultsArr(opts.types, tf.colTypes);\r\n\r\n /**\r\n * Column to be sorted at initialization, ie:\r\n * sort_col_at_start: [1, true]\r\n * @type {Array}\r\n */\r\n this.sortColAtStart = defaultsArr(opts.sort_col_at_start, null);\r\n\r\n /**\r\n * Enable asynchronous sort, if triggers are external\r\n * @type {Boolean}\r\n */\r\n this.asyncSort = Boolean(opts.async_sort);\r\n\r\n /**\r\n * List of element IDs triggering sort on a per column basis\r\n * @type {Array}\r\n */\r\n this.triggerIds = defaultsArr(opts.trigger_ids, []);\r\n\r\n // edit .sort-arrow.descending / .sort-arrow.ascending in\r\n // tablefilter.css to reflect any path change\r\n /**\r\n * Path to images\r\n * @type {String}\r\n */\r\n this.imgPath = defaultsStr(opts.images_path, tf.themesPath);\r\n\r\n /**\r\n * Blank image file name\r\n * @type {String}\r\n */\r\n this.imgBlank = defaultsStr(opts.image_blank, 'blank.png');\r\n\r\n /**\r\n * Css class for sort indicator image\r\n * @type {String}\r\n */\r\n this.imgClassName = defaultsStr(opts.image_class_name, 'sort-arrow');\r\n\r\n /**\r\n * Css class for ascending sort indicator image\r\n * @type {String}\r\n */\r\n this.imgAscClassName = defaultsStr(opts.image_asc_class_name,\r\n 'ascending');\r\n\r\n /**\r\n * Css class for descending sort indicator image\r\n * @type {String}\r\n */\r\n this.imgDescClassName = defaultsStr(opts.image_desc_class_name,\r\n 'descending');\r\n\r\n /**\r\n * Cell attribute key storing custom value used for sorting\r\n * @type {String}\r\n */\r\n this.customKey = defaultsStr(opts.custom_key, 'data-tf-sortKey');\r\n\r\n /**\r\n * Callback fired when sort extension is instanciated\r\n * @type {Function}\r\n */\r\n this.onSortLoaded = defaultsFn(opts.on_sort_loaded, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a table column is sorted\r\n * @type {Function}\r\n */\r\n this.onBeforeSort = defaultsFn(opts.on_before_sort, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a table column is sorted\r\n * @type {Function}\r\n */\r\n this.onAfterSort = defaultsFn(opts.on_after_sort, EMPTY_FN);\r\n\r\n /**\r\n * SortableTable instance\r\n * @private\r\n */\r\n this.stt = null;\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initializes AdapterSortableTable instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let adpt = this;\r\n\r\n // SortableTable class sanity check (sortabletable.js)\r\n if (isUndef(SortableTable)) {\r\n throw new Error('SortableTable class not found.');\r\n }\r\n\r\n // Add any date format if needed\r\n this.emitter.emit('add-date-type-formats', this.tf, this.sortTypes);\r\n\r\n this.overrideSortableTable();\r\n this.setSortTypes();\r\n\r\n this.onSortLoaded(tf, this);\r\n\r\n /*** SortableTable callbacks ***/\r\n this.stt.onbeforesort = function () {\r\n adpt.onBeforeSort(tf, adpt.stt.sortColumn);\r\n\r\n /*** sort behaviour for paging ***/\r\n if (tf.paging) {\r\n tf.feature('paging').disable();\r\n }\r\n };\r\n\r\n this.stt.onsort = function () {\r\n adpt.sorted = true;\r\n\r\n //sort behaviour for paging\r\n if (tf.paging) {\r\n let paginator = tf.feature('paging');\r\n // recalculate valid rows index as sorting may have change it\r\n tf.getValidRows(true);\r\n paginator.enable();\r\n paginator.setPage(paginator.getPage());\r\n }\r\n\r\n adpt.onAfterSort(tf, adpt.stt.sortColumn, adpt.stt.descending);\r\n adpt.emitter.emit('column-sorted', tf, adpt.stt.sortColumn,\r\n adpt.stt.descending);\r\n };\r\n\r\n // Column sort at start\r\n let sortColAtStart = adpt.sortColAtStart;\r\n if (sortColAtStart) {\r\n this.stt.sort(sortColAtStart[0], sortColAtStart[1]);\r\n }\r\n\r\n this.emitter.on(['sort'], bound(this.sortByColumnIndexHandler, this));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('sort-initialized', tf, this);\r\n }\r\n\r\n /**\r\n * Sort specified column\r\n * @param {Number} colIdx Column index\r\n * @param {Boolean} desc Optional: descending manner\r\n */\r\n sortByColumnIndex(colIdx, desc) {\r\n this.stt.sort(colIdx, desc);\r\n }\r\n\r\n /** @private */\r\n sortByColumnIndexHandler(tf, colIdx, desc) {\r\n this.sortByColumnIndex(colIdx, desc);\r\n }\r\n\r\n /**\r\n * Set SortableTable overrides for TableFilter integration\r\n */\r\n overrideSortableTable() {\r\n let adpt = this,\r\n tf = this.tf;\r\n\r\n /**\r\n * Overrides headerOnclick method in order to handle th event\r\n * @param {Object} e [description]\r\n */\r\n SortableTable.prototype.headerOnclick = function (evt) {\r\n if (!adpt.initialized) {\r\n return;\r\n }\r\n\r\n // find Header element\r\n let el = evt.target || evt.srcElement;\r\n\r\n while (el.tagName !== CELL_TAG && el.tagName !== HEADER_TAG) {\r\n el = el.parentNode;\r\n }\r\n\r\n this.sort(\r\n SortableTable.msie ?\r\n SortableTable.getCellIndex(el) : el.cellIndex\r\n );\r\n };\r\n\r\n /**\r\n * Overrides getCellIndex IE returns wrong cellIndex when columns are\r\n * hidden\r\n * @param {Object} oTd TD element\r\n * @return {Number} Cell index\r\n */\r\n SortableTable.getCellIndex = function (oTd) {\r\n let cells = oTd.parentNode.cells,\r\n l = cells.length, i;\r\n for (i = 0; cells[i] !== oTd && i < l; i++) { }\r\n return i;\r\n };\r\n\r\n /**\r\n * Overrides initHeader in order to handle filters row position\r\n * @param {Array} oSortTypes\r\n */\r\n SortableTable.prototype.initHeader = function (oSortTypes) {\r\n let stt = this;\r\n if (!stt.tHead) {\r\n if (tf.gridLayout) {\r\n stt.tHead = tf.feature('gridLayout').headTbl.tHead;\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n stt.headersRow = tf.headersRow;\r\n let cells = stt.tHead.rows[stt.headersRow].cells;\r\n stt.sortTypes = oSortTypes || [];\r\n let l = cells.length;\r\n let img, c;\r\n\r\n for (let i = 0; i < l; i++) {\r\n c = cells[i];\r\n if (stt.sortTypes[i] !== null && stt.sortTypes[i] !== 'None') {\r\n c.style.cursor = 'pointer';\r\n img = createElm('img',\r\n ['src', adpt.imgPath + adpt.imgBlank]);\r\n c.appendChild(img);\r\n if (stt.sortTypes[i] !== null) {\r\n c.setAttribute('_sortType', stt.sortTypes[i]);\r\n }\r\n addEvt(c, 'click', stt._headerOnclick);\r\n } else {\r\n c.setAttribute('_sortType', oSortTypes[i]);\r\n c._sortType = 'None';\r\n }\r\n }\r\n stt.updateHeaderArrows();\r\n };\r\n\r\n /**\r\n * Overrides updateHeaderArrows in order to handle arrows indicators\r\n */\r\n SortableTable.prototype.updateHeaderArrows = function () {\r\n let stt = this;\r\n let cells, l, img;\r\n\r\n // external headers\r\n if (adpt.asyncSort && adpt.triggerIds.length > 0) {\r\n let triggers = adpt.triggerIds;\r\n cells = [];\r\n l = triggers.length;\r\n for (let j = 0; j < l; j++) {\r\n cells.push(elm(triggers[j]));\r\n }\r\n } else {\r\n if (!this.tHead) {\r\n return;\r\n }\r\n cells = stt.tHead.rows[stt.headersRow].cells;\r\n l = cells.length;\r\n }\r\n for (let i = 0; i < l; i++) {\r\n let cell = cells[i];\r\n if (!cell) {\r\n continue;\r\n }\r\n let cellAttr = cell.getAttribute('_sortType');\r\n if (cellAttr !== null && cellAttr !== 'None') {\r\n img = cell.lastChild || cell;\r\n if (img.nodeName.toLowerCase() !== 'img') {\r\n img = createElm('img',\r\n ['src', adpt.imgPath + adpt.imgBlank]);\r\n cell.appendChild(img);\r\n }\r\n if (i === stt.sortColumn) {\r\n img.className = adpt.imgClassName + ' ' +\r\n (this.descending ?\r\n adpt.imgDescClassName :\r\n adpt.imgAscClassName);\r\n } else {\r\n img.className = adpt.imgClassName;\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Overrides getRowValue for custom key value feature\r\n * @param {Object} oRow Row element\r\n * @param {String} sType\r\n * @param {Number} nColumn\r\n * @return {String}\r\n */\r\n SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\r\n let stt = this;\r\n // if we have defined a custom getRowValue use that\r\n let sortTypeInfo = stt._sortTypeInfo[sType];\r\n if (sortTypeInfo && sortTypeInfo.getRowValue) {\r\n return sortTypeInfo.getRowValue(oRow, nColumn);\r\n }\r\n let c = oRow.cells[nColumn];\r\n let s = SortableTable.getInnerText(c);\r\n return stt.getValueFromString(s, sType);\r\n };\r\n\r\n /**\r\n * Overrides getInnerText in order to avoid Firefox unexpected sorting\r\n * behaviour with untrimmed text elements\r\n * @param {Object} cell DOM element\r\n * @return {String} DOM element inner text\r\n */\r\n SortableTable.getInnerText = function (cell) {\r\n if (!cell) {\r\n return;\r\n }\r\n if (cell.getAttribute(adpt.customKey)) {\r\n return cell.getAttribute(adpt.customKey);\r\n } else {\r\n return tf.getCellValue(cell);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Adds a sort type\r\n */\r\n addSortType(...args) {\r\n // Extract the arguments\r\n let [id, caster, sorter, getRowValue] = args;\r\n SortableTable.prototype.addSortType(id, caster, sorter, getRowValue);\r\n }\r\n\r\n /**\r\n * Sets the sort types on a column basis\r\n * @private\r\n */\r\n setSortTypes() {\r\n let tf = this.tf,\r\n sortTypes = this.sortTypes,\r\n _sortTypes = [];\r\n\r\n tf.eachCol((i) => {\r\n let colType;\r\n if (sortTypes[i]) {\r\n colType = sortTypes[i];\r\n if (isObj(colType)) {\r\n if (colType.type === DATE) {\r\n colType = this._addDateType(i, sortTypes);\r\n }\r\n else if (colType.type === FORMATTED_NUMBER) {\r\n let decimal = colType.decimal || tf.decimalSeparator;\r\n colType = this._addNumberType(i, decimal);\r\n }\r\n } else {\r\n colType = colType.toLowerCase();\r\n if (colType === DATE) {\r\n colType = this._addDateType(i, sortTypes);\r\n }\r\n else if (colType === FORMATTED_NUMBER ||\r\n colType === NUMBER) {\r\n colType = this._addNumberType(i, tf.decimalSeparator);\r\n }\r\n else if (colType === NONE) {\r\n // TODO: normalise 'none' vs 'None'\r\n colType = 'None';\r\n }\r\n }\r\n } else {\r\n colType = STRING;\r\n }\r\n _sortTypes.push(colType);\r\n });\r\n\r\n //Public TF method to add sort type\r\n\r\n //Custom sort types\r\n this.addSortType('caseinsensitivestring', SortableTable.toUpperCase);\r\n this.addSortType(STRING);\r\n this.addSortType(IP_ADDRESS, ipAddress, sortIP);\r\n\r\n this.stt = new SortableTable(tf.dom(), _sortTypes);\r\n\r\n /*** external table headers adapter ***/\r\n if (this.asyncSort && this.triggerIds.length > 0) {\r\n let triggers = this.triggerIds;\r\n for (let j = 0; j < triggers.length; j++) {\r\n if (triggers[j] === null) {\r\n continue;\r\n }\r\n let trigger = elm(triggers[j]);\r\n if (trigger) {\r\n trigger.style.cursor = 'pointer';\r\n\r\n addEvt(trigger, 'click', (evt) => {\r\n let elm = evt.target;\r\n if (!this.tf.sort) {\r\n return;\r\n }\r\n this.stt.asyncSort(triggers.indexOf(elm.id));\r\n });\r\n trigger.setAttribute('_sortType', _sortTypes[j]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _addDateType(colIndex, types) {\r\n let tf = this.tf;\r\n let dateType = tf.feature('dateType');\r\n let locale = dateType.getOptions(colIndex, types).locale || tf.locale;\r\n let colType = `${DATE}-${locale}`;\r\n\r\n this.addSortType(colType, (value) => {\r\n let parsedDate = dateType.parse(value, locale);\r\n // Invalid date defaults to Wed Feb 04 -768 11:00:00\r\n return isNaN(+parsedDate) ? new Date(-86400000000000) : parsedDate;\r\n });\r\n return colType;\r\n }\r\n\r\n _addNumberType(colIndex, decimal) {\r\n let colType = `${FORMATTED_NUMBER}${decimal === '.' ? '' : '-custom'}`;\r\n\r\n this.addSortType(colType, (value) => {\r\n return parseNb(value, decimal);\r\n });\r\n return colType;\r\n }\r\n\r\n /**\r\n * Remove extension\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n this.emitter.off(['sort'], bound(this.sortByColumnIndexHandler, this));\r\n this.sorted = false;\r\n this.stt.destroy();\r\n\r\n let ids = tf.getFiltersId();\r\n for (let idx = 0; idx < ids.length; idx++) {\r\n let header = tf.getHeaderElement(idx);\r\n let img = tag(header, 'img');\r\n\r\n if (img.length === 1) {\r\n header.removeChild(img[0]);\r\n }\r\n }\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n\r\n//Converters\r\nfunction ipAddress(value) {\r\n let vals = value.split('.');\r\n for (let x in vals) {\r\n let val = vals[x];\r\n while (3 > val.length) {\r\n val = '0' + val;\r\n }\r\n vals[x] = val;\r\n }\r\n return vals.join('.');\r\n}\r\n\r\nfunction sortIP(a, b) {\r\n let aa = ipAddress(a.value.toLowerCase());\r\n let bb = ipAddress(b.value.toLowerCase());\r\n if (aa === bb) {\r\n return 0;\r\n } else if (aa < bb) {\r\n return -1;\r\n } else {\r\n return 1;\r\n }\r\n}\r\n","import AdapterSortableTable from './adapterSortabletable';\r\nimport {root} from '../../root';\r\n\r\nif (!root.SortableTable) {\r\n require('script-loader!sortabletable');\r\n}\r\n\r\nexport default AdapterSortableTable;\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/tablefilter/tf-0-8ba4e8f28dcb16cfc50b.js b/dist/tablefilter/tf-0-8ba4e8f28dcb16cfc50b.js new file mode 100644 index 00000000..042bf97d --- /dev/null +++ b/dist/tablefilter/tf-0-8ba4e8f28dcb16cfc50b.js @@ -0,0 +1,3480 @@ +(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],{ + +/***/ "./node_modules/format-number/index.js": +/*!*********************************************!*\ + !*** ./node_modules/format-number/index.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + + +module.exports = formatter; +module.exports.default = formatter; + +function formatter(options) { + options = options || {}; + + + // ********************************************************************************************* + // Set defaults for negatives + // options.negative, options.negativeOut, options.separator retained for backward compatibility + // ********************************************************************************************* + + // type of negative; default left + options.negativeType = options.negativeType || (options.negative === 'R' ? 'right' : 'left') + + // negative symbols '-' or '()' + if (typeof options.negativeLeftSymbol !== 'string') { + switch (options.negativeType) { + case 'left': + options.negativeLeftSymbol = '-'; + break; + case 'brackets': + options.negativeLeftSymbol = '('; + break; + default: + options.negativeLeftSymbol = ''; + } + } + if (typeof options.negativeRightSymbol !== 'string') { + switch (options.negativeType) { + case 'right': + options.negativeRightSymbol = '-'; + break; + case 'brackets': + options.negativeRightSymbol = ')'; + break; + default: + options.negativeRightSymbol = ''; + } + } + + // whether negative symbol should be inside/outside prefix and suffix + + if (typeof options.negativeLeftOut !== "boolean") { + options.negativeLeftOut = (options.negativeOut === false ? false : true); + } + if (typeof options.negativeRightOut !== "boolean") { + options.negativeRightOut = (options.negativeOut === false ? false : true); + } + + //prefix and suffix + options.prefix = options.prefix || ''; + options.suffix = options.suffix || ''; + + //separators + if (typeof options.integerSeparator !== 'string') { + options.integerSeparator = (typeof options.separator === 'string' ? options.separator : ','); + } + options.decimalsSeparator = typeof options.decimalsSeparator === 'string' ? options.decimalsSeparator : ''; + options.decimal = options.decimal || '.'; + + //padders + options.padLeft = options.padLeft || -1 //default no padding + options.padRight = options.padRight || -1 //default no padding + + function format(number, overrideOptions) { + overrideOptions = overrideOptions || {}; + + if (number || number === 0) { + number = '' + number;//convert number to string if it isn't already + } else { + return ''; + } + + //identify a negative number and make it absolute + var output = []; + var negative = number.charAt(0) === '-'; + number = number.replace(/^\-/g, ''); + + //Prepare output with left hand negative and/or prefix + if (!options.negativeLeftOut && !overrideOptions.noUnits) { + output.push(options.prefix); + } + if (negative) { + output.push(options.negativeLeftSymbol); + } + if (options.negativeLeftOut && !overrideOptions.noUnits) { + output.push(options.prefix); + } + + //Format core number + number = number.split('.'); + if (options.round != null) round(number, options.round); + if (options.truncate != null) number[1] = truncate(number[1], options.truncate); + if (options.padLeft > 0) number[0] = padLeft(number[0], options.padLeft); + if (options.padRight > 0) number[1] = padRight(number[1], options.padRight); + if (!overrideOptions.noSeparator && number[1]) number[1] = addDecimalSeparators(number[1], options.decimalsSeparator); + if (!overrideOptions.noSeparator && number[0]) number[0] = addIntegerSeparators(number[0], options.integerSeparator); + output.push(number[0]); + if (number[1]) { + output.push(options.decimal); + output.push(number[1]); + } + + //Prepare output with right hand negative and/or prefix + if (options.negativeRightOut && !overrideOptions.noUnits) { + output.push(options.suffix); + } + if (negative) { + output.push(options.negativeRightSymbol); + } + if (!options.negativeRightOut && !overrideOptions.noUnits) { + output.push(options.suffix); + } + + //join output and return + return output.join(''); + } + + format.negative = options.negative; + format.negativeOut = options.negativeOut; + format.negativeType = options.negativeType; + format.negativeLeftOut = options.negativeLeftOut; + format.negativeLeftSymbol = options.negativeLeftSymbol; + format.negativeRightOut = options.negativeRightOut; + format.negativeRightSymbol = options.negativeRightSymbol; + format.prefix = options.prefix; + format.suffix = options.suffix; + format.separate = options.separate; + format.integerSeparator = options.integerSeparator; + format.decimalsSeparator = options.decimalsSeparator; + format.decimal = options.decimal; + format.padLeft = options.padLeft; + format.padRight = options.padRight; + format.truncate = options.truncate; + format.round = options.round; + + function unformat(number, allowedSeparators) { + allowedSeparators = allowedSeparators || []; + if (options.allowedSeparators) { + options.allowedSeparators.forEach(function (s) { allowedSeparators.push (s); }); + } + allowedSeparators.push(options.integerSeparator); + allowedSeparators.push(options.decimalsSeparator); + number = number.replace(options.prefix, ''); + number = number.replace(options.suffix, ''); + var newNumber = number; + do { + number = newNumber; + for (var i = 0; i < allowedSeparators.length; i++) { + newNumber = newNumber.replace(allowedSeparators[i], ''); + } + } while (newNumber != number); + return number; + } + format.unformat = unformat; + + function validate(number, allowedSeparators) { + number = unformat(number, allowedSeparators); + number = number.split(options.decimal); + if (number.length > 2) { + return false; + } else if (options.truncate != null && number[1] && number[1].length > options.truncate) { + return false; + } else if (options.round != null && number[1] && number[1].length > options.round) { + return false; + } else { + return /^-?\d+\.?\d*$/.test(number); + } + } + return format; +} + +//where x is already the integer part of the number +function addIntegerSeparators(x, separator) { + x += ''; + if (!separator) return x; + var rgx = /(\d+)(\d{3})/; + while (rgx.test(x)) { + x = x.replace(rgx, '$1' + separator + '$2'); + } + return x; +} + +//where x is already the decimal part of the number +function addDecimalSeparators(x, separator) { + x += ''; + if (!separator) return x; + var rgx = /(\d{3})(\d+)/; + while (rgx.test(x)) { + x = x.replace(rgx, '$1' + separator + '$2'); + } + return x; +} + +//where x is the integer part of the number +function padLeft(x, padding) { + x = x + ''; + var buf = []; + while (buf.length + x.length < padding) { + buf.push('0'); + } + return buf.join('') + x; +} + +//where x is the decimals part of the number +function padRight(x, padding) { + if (x) { + x += ''; + } else { + x = ''; + } + var buf = []; + while (buf.length + x.length < padding) { + buf.push('0'); + } + return x + buf.join(''); +} +function truncate(x, length) { + if (x) { + x += ''; + } + if (x && x.length > length) { + return x.substr(0, length); + } else { + return x; + } +} + +//where number is an array with 0th item as integer string and 1st item as decimal string (no negatives) +function round(number, places) { + if (number[1] && places >= 0 && number[1].length > places) { + //truncate to correct number of decimal places + var decim = number[1].slice(0, places); + //if next digit was >= 5 we need to round up + if (+(number[1].substr(places, 1)) >= 5) { + //But first count leading zeros as converting to a number will loose them + var leadingzeros = ""; + while (decim.charAt(0)==="0") { + leadingzeros = leadingzeros + "0"; + decim = decim.substr(1); + } + //Then we can change decim to a number and add 1 before replacing leading zeros + decim = (+decim + 1) + ''; + decim = leadingzeros + decim; + if (decim.length > places) { + //adding one has made it longer + number[0] = (+number[0]+ +decim.charAt(0)) + ''; //add value of firstchar to the integer part + decim = decim.substring(1); //ignore the 1st char at the beginning which is the carry to the integer part + } + } + number[1] = decim; + } + return number; +} + + +/***/ }), + +/***/ "./node_modules/raw-loader/index.js!./libs/sortabletable.js": +/*!*********************************************************!*\ + !*** ./node_modules/raw-loader!./libs/sortabletable.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = "/*----------------------------------------------------------------------------\\\r\n| Sortable Table 1.12 |\r\n|-----------------------------------------------------------------------------|\r\n| Created by Erik Arvidsson |\r\n| (http://webfx.eae.net/contact.html#erik) |\r\n| For WebFX (http://webfx.eae.net/) |\r\n|-----------------------------------------------------------------------------|\r\n| A DOM 1 based script that allows an ordinary HTML table to be sortable. |\r\n|-----------------------------------------------------------------------------|\r\n| Copyright (c) 1998 - 2006 Erik Arvidsson |\r\n|-----------------------------------------------------------------------------|\r\n| Licensed under the Apache License, Version 2.0 (the \"License\"); you may not |\r\n| use this file except in compliance with the License. You may obtain a copy |\r\n| of the License at http://www.apache.org/licenses/LICENSE-2.0 |\r\n| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\r\n| Unless required by applicable law or agreed to in writing, software |\r\n| distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT |\r\n| WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |\r\n| License for the specific language governing permissions and limitations |\r\n| under the License. |\r\n|-----------------------------------------------------------------------------|\r\n| 2003-01-10 | First version |\r\n| 2003-01-19 | Minor changes to the date parsing |\r\n| 2003-01-28 | JScript 5.0 fixes (no support for 'in' operator) |\r\n| 2003-02-01 | Sloppy typo like error fixed in getInnerText |\r\n| 2003-07-04 | Added workaround for IE cellIndex bug. |\r\n| 2003-11-09 | The bDescending argument to sort was not correctly working |\r\n| | Using onclick DOM0 event if no support for addEventListener |\r\n| | or attachEvent |\r\n| 2004-01-13 | Adding addSortType and removeSortType which makes it a lot |\r\n| | easier to add new, custom sort types. |\r\n| 2004-01-27 | Switch to use descending = false as the default sort order. |\r\n| | Change defaultDescending to suit your needs. |\r\n| 2004-03-14 | Improved sort type None look and feel a bit |\r\n| 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you |\r\n| | can use another tHead or no tHead, and you can chose some |\r\n| | other tBody. |\r\n| 2006-04-25 | Changed license to Apache Software License 2.0 |\r\n|-----------------------------------------------------------------------------|\r\n| Created 2003-01-10 | All changes are in the log above. | Updated 2006-04-25 |\r\n\\----------------------------------------------------------------------------*/\r\n\r\n\r\nfunction SortableTable(oTable, oSortTypes) {\r\n\r\n\tthis.sortTypes = oSortTypes || [];\r\n\r\n\tthis.sortColumn = null;\r\n\tthis.descending = null;\r\n\r\n\tvar oThis = this;\r\n\tthis._headerOnclick = function (e) {\r\n\t\toThis.headerOnclick(e);\r\n\t};\r\n\r\n\tif (oTable) {\r\n\t\tthis.setTable( oTable );\r\n\t\tthis.document = oTable.ownerDocument || oTable.document;\r\n\t}\r\n\telse {\r\n\t\tthis.document = document;\r\n\t}\r\n\r\n\r\n\t// only IE needs this\r\n\tvar win = this.document.defaultView || this.document.parentWindow;\r\n\tthis._onunload = function () {\r\n\t\toThis.destroy();\r\n\t};\r\n\tif (win && typeof win.attachEvent != \"undefined\") {\r\n\t\twin.attachEvent(\"onunload\", this._onunload);\r\n\t}\r\n}\r\n\r\nSortableTable.gecko = navigator.product == \"Gecko\";\r\nSortableTable.msie = /msie/i.test(navigator.userAgent);\r\n// Mozilla is faster when doing the DOM manipulations on\r\n// an orphaned element. MSIE is not\r\nSortableTable.removeBeforeSort = SortableTable.gecko;\r\n\r\nSortableTable.prototype.onsort = function () {};\r\n\r\n// default sort order. true -> descending, false -> ascending\r\nSortableTable.prototype.defaultDescending = false;\r\n\r\n// shared between all instances. This is intentional to allow external files\r\n// to modify the prototype\r\nSortableTable.prototype._sortTypeInfo = {};\r\n\r\nSortableTable.prototype.setTable = function (oTable) {\r\n\tif ( this.tHead )\r\n\t\tthis.uninitHeader();\r\n\tthis.element = oTable;\r\n\tthis.setTHead( oTable.tHead );\r\n\tthis.setTBody( oTable.tBodies[0] );\r\n};\r\n\r\nSortableTable.prototype.setTHead = function (oTHead) {\r\n\tif (this.tHead && this.tHead != oTHead )\r\n\t\tthis.uninitHeader();\r\n\tthis.tHead = oTHead;\r\n\tthis.initHeader( this.sortTypes );\r\n};\r\n\r\nSortableTable.prototype.setTBody = function (oTBody) {\r\n\tthis.tBody = oTBody;\r\n};\r\n\r\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\r\n\tif ( this.tHead )\r\n\t\tthis.uninitHeader();\r\n\tthis.sortTypes = oSortTypes || [];\r\n\tif ( this.tHead )\r\n\t\tthis.initHeader( this.sortTypes );\r\n};\r\n\r\n// adds arrow containers and events\r\n// also binds sort type to the header cells so that reordering columns does\r\n// not break the sort types\r\nSortableTable.prototype.initHeader = function (oSortTypes) {\r\n\tif (!this.tHead) return;\r\n\tvar cells = this.tHead.rows[0].cells;\r\n\tvar doc = this.tHead.ownerDocument || this.tHead.document;\r\n\tthis.sortTypes = oSortTypes || [];\r\n\tvar l = cells.length;\r\n\tvar img, c;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tc = cells[i];\r\n\t\tif (this.sortTypes[i] != null && this.sortTypes[i] != \"None\") {\r\n\t\t\timg = doc.createElement(\"IMG\");\r\n\t\t\timg.src = \"images/blank.png\";\r\n\t\t\tc.appendChild(img);\r\n\t\t\tif (this.sortTypes[i] != null)\r\n\t\t\t\tc._sortType = this.sortTypes[i];\r\n\t\t\tif (typeof c.addEventListener != \"undefined\")\r\n\t\t\t\tc.addEventListener(\"click\", this._headerOnclick, false);\r\n\t\t\telse if (typeof c.attachEvent != \"undefined\")\r\n\t\t\t\tc.attachEvent(\"onclick\", this._headerOnclick);\r\n\t\t\telse\r\n\t\t\t\tc.onclick = this._headerOnclick;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tc.setAttribute( \"_sortType\", oSortTypes[i] );\r\n\t\t\tc._sortType = \"None\";\r\n\t\t}\r\n\t}\r\n\tthis.updateHeaderArrows();\r\n};\r\n\r\n// remove arrows and events\r\nSortableTable.prototype.uninitHeader = function () {\r\n\tif (!this.tHead) return;\r\n\tvar cells = this.tHead.rows[0].cells;\r\n\tvar l = cells.length;\r\n\tvar c;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tc = cells[i];\r\n\t\tif (c._sortType != null && c._sortType != \"None\") {\r\n\t\t\tc.removeChild(c.lastChild);\r\n\t\t\tif (typeof c.removeEventListener != \"undefined\")\r\n\t\t\t\tc.removeEventListener(\"click\", this._headerOnclick, false);\r\n\t\t\telse if (typeof c.detachEvent != \"undefined\")\r\n\t\t\t\tc.detachEvent(\"onclick\", this._headerOnclick);\r\n\t\t\tc._sortType = null;\r\n\t\t\tc.removeAttribute( \"_sortType\" );\r\n\t\t}\r\n\t}\r\n};\r\n\r\nSortableTable.prototype.updateHeaderArrows = function () {\r\n\tif (!this.tHead) return;\r\n\tvar cells = this.tHead.rows[0].cells;\r\n\tvar l = cells.length;\r\n\tvar img;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tif (cells[i]._sortType != null && cells[i]._sortType != \"None\") {\r\n\t\t\timg = cells[i].lastChild;\r\n\t\t\tif (i == this.sortColumn)\r\n\t\t\t\timg.className = \"sort-arrow \" + (this.descending ? \"descending\" : \"ascending\");\r\n\t\t\telse\r\n\t\t\t\timg.className = \"sort-arrow\";\r\n\t\t}\r\n\t}\r\n};\r\n\r\nSortableTable.prototype.headerOnclick = function (e) {\r\n\t// find TD element\r\n\tvar el = e.target || e.srcElement;\r\n\twhile (el.tagName != \"TD\")\r\n\t\tel = el.parentNode;\r\n\r\n\tthis.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\r\n};\r\n\r\n// IE returns wrong cellIndex when columns are hidden\r\nSortableTable.getCellIndex = function (oTd) {\r\n\tvar cells = oTd.parentNode.childNodes\r\n\tvar l = cells.length;\r\n\tvar i;\r\n\tfor (i = 0; cells[i] != oTd && i < l; i++)\r\n\t\t;\r\n\treturn i;\r\n};\r\n\r\nSortableTable.prototype.getSortType = function (nColumn) {\r\n\treturn this.sortTypes[nColumn] || \"String\";\r\n};\r\n\r\n// only nColumn is required\r\n// if bDescending is left out the old value is taken into account\r\n// if sSortType is left out the sort type is found from the sortTypes array\r\n\r\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\r\n\tif (!this.tBody) return;\r\n\tif (sSortType == null)\r\n\t\tsSortType = this.getSortType(nColumn);\r\n\r\n\t// exit if None\r\n\tif (sSortType == \"None\")\r\n\t\treturn;\r\n\r\n\tif (bDescending == null) {\r\n\t\tif (this.sortColumn != nColumn)\r\n\t\t\tthis.descending = this.defaultDescending;\r\n\t\telse\r\n\t\t\tthis.descending = !this.descending;\r\n\t}\r\n\telse\r\n\t\tthis.descending = bDescending;\r\n\r\n\tthis.sortColumn = nColumn;\r\n\r\n\tif (typeof this.onbeforesort == \"function\")\r\n\t\tthis.onbeforesort();\r\n\r\n\tvar f = this.getSortFunction(sSortType, nColumn);\r\n\tvar a = this.getCache(sSortType, nColumn);\r\n\tvar tBody = this.tBody;\r\n\r\n\ta.sort(f);\r\n\r\n\tif (this.descending)\r\n\t\ta.reverse();\r\n\r\n\tif (SortableTable.removeBeforeSort) {\r\n\t\t// remove from doc\r\n\t\tvar nextSibling = tBody.nextSibling;\r\n\t\tvar p = tBody.parentNode;\r\n\t\tp.removeChild(tBody);\r\n\t}\r\n\r\n\t// insert in the new order\r\n\tvar l = a.length;\r\n\tfor (var i = 0; i < l; i++)\r\n\t\ttBody.appendChild(a[i].element);\r\n\r\n\tif (SortableTable.removeBeforeSort) {\r\n\t\t// insert into doc\r\n\t\tp.insertBefore(tBody, nextSibling);\r\n\t}\r\n\r\n\tthis.updateHeaderArrows();\r\n\r\n\tthis.destroyCache(a);\r\n\r\n\tif (typeof this.onsort == \"function\")\r\n\t\tthis.onsort();\r\n};\r\n\r\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\r\n\tvar oThis = this;\r\n\tthis._asyncsort = function () {\r\n\t\toThis.sort(nColumn, bDescending, sSortType);\r\n\t};\r\n\twindow.setTimeout(this._asyncsort, 1);\r\n};\r\n\r\nSortableTable.prototype.getCache = function (sType, nColumn) {\r\n\tif (!this.tBody) return [];\r\n\tvar rows = this.tBody.rows;\r\n\tvar l = rows.length;\r\n\tvar a = new Array(l);\r\n\tvar r;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tr = rows[i];\r\n\t\ta[i] = {\r\n\t\t\tvalue:\t\tthis.getRowValue(r, sType, nColumn),\r\n\t\t\telement:\tr\r\n\t\t};\r\n\t};\r\n\treturn a;\r\n};\r\n\r\nSortableTable.prototype.destroyCache = function (oArray) {\r\n\tvar l = oArray.length;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\toArray[i].value = null;\r\n\t\toArray[i].element = null;\r\n\t\toArray[i] = null;\r\n\t}\r\n};\r\n\r\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\r\n\t// if we have defined a custom getRowValue use that\r\n\tif (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\r\n\t\treturn this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\r\n\r\n\tvar s;\r\n\tvar c = oRow.cells[nColumn];\r\n\tif (typeof c.innerText != \"undefined\")\r\n\t\ts = c.innerText;\r\n\telse\r\n\t\ts = SortableTable.getInnerText(c);\r\n\treturn this.getValueFromString(s, sType);\r\n};\r\n\r\nSortableTable.getInnerText = function (oNode) {\r\n\tvar s = \"\";\r\n\tvar cs = oNode.childNodes;\r\n\tvar l = cs.length;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tswitch (cs[i].nodeType) {\r\n\t\t\tcase 1: //ELEMENT_NODE\r\n\t\t\t\ts += SortableTable.getInnerText(cs[i]);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 3:\t//TEXT_NODE\r\n\t\t\t\ts += cs[i].nodeValue;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn s;\r\n};\r\n\r\nSortableTable.prototype.getValueFromString = function (sText, sType) {\r\n\tif (this._sortTypeInfo[sType])\r\n\t\treturn this._sortTypeInfo[sType].getValueFromString( sText );\r\n\treturn sText;\r\n\t/*\r\n\tswitch (sType) {\r\n\t\tcase \"Number\":\r\n\t\t\treturn Number(sText);\r\n\t\tcase \"CaseInsensitiveString\":\r\n\t\t\treturn sText.toUpperCase();\r\n\t\tcase \"Date\":\r\n\t\t\tvar parts = sText.split(\"-\");\r\n\t\t\tvar d = new Date(0);\r\n\t\t\td.setFullYear(parts[0]);\r\n\t\t\td.setDate(parts[2]);\r\n\t\t\td.setMonth(parts[1] - 1);\r\n\t\t\treturn d.valueOf();\r\n\t}\r\n\treturn sText;\r\n\t*/\r\n\t};\r\n\r\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\r\n\tif (this._sortTypeInfo[sType])\r\n\t\treturn this._sortTypeInfo[sType].compare;\r\n\treturn SortableTable.basicCompare;\r\n};\r\n\r\nSortableTable.prototype.destroy = function () {\r\n\tthis.uninitHeader();\r\n\tvar win = this.document.parentWindow;\r\n\tif (win && typeof win.detachEvent != \"undefined\") {\t// only IE needs this\r\n\t\twin.detachEvent(\"onunload\", this._onunload);\r\n\t}\r\n\tthis._onunload = null;\r\n\tthis.element = null;\r\n\tthis.tHead = null;\r\n\tthis.tBody = null;\r\n\tthis.document = null;\r\n\tthis._headerOnclick = null;\r\n\tthis.sortTypes = null;\r\n\tthis._asyncsort = null;\r\n\tthis.onsort = null;\r\n};\r\n\r\n// Adds a sort type to all instance of SortableTable\r\n// sType : String - the identifier of the sort type\r\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\r\n// string and casts it to a desired format. If left out the string is just\r\n// returned\r\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\r\n// compare function. Takes two values and compares them. If left out less than,\r\n// <, compare is used\r\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\r\n// that takes the row and the column index and returns the value used to compare.\r\n// If left out then the innerText is first taken for the cell and then the\r\n// fGetValueFromString is used to convert that string the desired value and type\r\n\r\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\r\n\tthis._sortTypeInfo[sType] = {\r\n\t\ttype:\t\t\t\tsType,\r\n\t\tgetValueFromString:\tfGetValueFromString || SortableTable.idFunction,\r\n\t\tcompare:\t\t\tfCompareFunction || SortableTable.basicCompare,\r\n\t\tgetRowValue:\t\tfGetRowValue\r\n\t};\r\n};\r\n\r\n// this removes the sort type from all instances of SortableTable\r\nSortableTable.prototype.removeSortType = function (sType) {\r\n\tdelete this._sortTypeInfo[sType];\r\n};\r\n\r\nSortableTable.basicCompare = function compare(n1, n2) {\r\n\tif (n1.value < n2.value)\r\n\t\treturn -1;\r\n\tif (n2.value < n1.value)\r\n\t\treturn 1;\r\n\treturn 0;\r\n};\r\n\r\nSortableTable.idFunction = function (x) {\r\n\treturn x;\r\n};\r\n\r\nSortableTable.toUpperCase = function (s) {\r\n\treturn s.toUpperCase();\r\n};\r\n\r\nSortableTable.toDate = function (s) {\r\n\tvar parts = s.split(\"-\");\r\n\tvar d = new Date(0);\r\n\td.setFullYear(parts[0]);\r\n\td.setDate(parts[2]);\r\n\td.setMonth(parts[1] - 1);\r\n\treturn d.valueOf();\r\n};\r\n\r\n\r\n// add sort types\r\nSortableTable.prototype.addSortType(\"Number\", Number);\r\nSortableTable.prototype.addSortType(\"CaseInsensitiveString\", SortableTable.toUpperCase);\r\nSortableTable.prototype.addSortType(\"Date\", SortableTable.toDate);\r\nSortableTable.prototype.addSortType(\"String\");\r\n// None is a special case\r\n" + +/***/ }), + +/***/ "./node_modules/script-loader/addScript.js": +/*!*************************************************!*\ + !*** ./node_modules/script-loader/addScript.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +module.exports = function(src) { + function log(error) { + (typeof console !== "undefined") + && (console.error || console.log)("[Script Loader]", error); + } + + // Check for IE =< 8 + function isIE() { + return typeof attachEvent !== "undefined" && typeof addEventListener === "undefined"; + } + + try { + if (typeof execScript !== "undefined" && isIE()) { + execScript(src); + } else if (typeof eval !== "undefined") { + eval.call(null, src); + } else { + log("EvalError: No eval function available"); + } + } catch (error) { + log(error); + } +} + + +/***/ }), + +/***/ "./node_modules/script-loader/index.js!./libs/sortabletable.js": +/*!************************************************************!*\ + !*** ./node_modules/script-loader!./libs/sortabletable.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(/*! !./node_modules/script-loader/addScript.js */ "./node_modules/script-loader/addScript.js")(__webpack_require__(/*! !./node_modules/raw-loader!./libs/sortabletable.js */ "./node_modules/raw-loader/index.js!./libs/sortabletable.js")+"\n\n// SCRIPT-LOADER FOOTER\n//# sourceURL=script:///C:/projects/dev/github/TableFilter/libs/sortabletable.js") + +/***/ }), + +/***/ "./src sync recursive ^\\.\\/.*$": +/*!***************************!*\ + !*** ./src sync ^\.\/.*$ ***! + \***************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var map = { + "./array": "./src/array.js", + "./array.js": "./src/array.js", + "./const": "./src/const.js", + "./const.js": "./src/const.js", + "./cookie": "./src/cookie.js", + "./cookie.js": "./src/cookie.js", + "./dom": "./src/dom.js", + "./dom.js": "./src/dom.js", + "./emitter": "./src/emitter.js", + "./emitter.js": "./src/emitter.js", + "./event": "./src/event.js", + "./event.js": "./src/event.js", + "./extensions/advancedGrid/adapterEzEditTable": "./src/extensions/advancedGrid/adapterEzEditTable.js", + "./extensions/advancedGrid/adapterEzEditTable.js": "./src/extensions/advancedGrid/adapterEzEditTable.js", + "./extensions/advancedGrid/advancedGrid": "./src/extensions/advancedGrid/advancedGrid.js", + "./extensions/advancedGrid/advancedGrid.js": "./src/extensions/advancedGrid/advancedGrid.js", + "./extensions/colOps/colOps": "./src/extensions/colOps/colOps.js", + "./extensions/colOps/colOps.js": "./src/extensions/colOps/colOps.js", + "./extensions/colsVisibility/colsVisibility": "./src/extensions/colsVisibility/colsVisibility.js", + "./extensions/colsVisibility/colsVisibility.js": "./src/extensions/colsVisibility/colsVisibility.js", + "./extensions/filtersVisibility/filtersVisibility": "./src/extensions/filtersVisibility/filtersVisibility.js", + "./extensions/filtersVisibility/filtersVisibility.js": "./src/extensions/filtersVisibility/filtersVisibility.js", + "./extensions/sort/adapterSortabletable": "./src/extensions/sort/adapterSortabletable.js", + "./extensions/sort/adapterSortabletable.js": "./src/extensions/sort/adapterSortabletable.js", + "./extensions/sort/sort": "./src/extensions/sort/sort.js", + "./extensions/sort/sort.js": "./src/extensions/sort/sort.js", + "./feature": "./src/feature.js", + "./feature.js": "./src/feature.js", + "./modules/alternateRows": "./src/modules/alternateRows.js", + "./modules/alternateRows.js": "./src/modules/alternateRows.js", + "./modules/baseDropdown": "./src/modules/baseDropdown.js", + "./modules/baseDropdown.js": "./src/modules/baseDropdown.js", + "./modules/checkList": "./src/modules/checkList.js", + "./modules/checkList.js": "./src/modules/checkList.js", + "./modules/clearButton": "./src/modules/clearButton.js", + "./modules/clearButton.js": "./src/modules/clearButton.js", + "./modules/dateType": "./src/modules/dateType.js", + "./modules/dateType.js": "./src/modules/dateType.js", + "./modules/dropdown": "./src/modules/dropdown.js", + "./modules/dropdown.js": "./src/modules/dropdown.js", + "./modules/gridLayout": "./src/modules/gridLayout.js", + "./modules/gridLayout.js": "./src/modules/gridLayout.js", + "./modules/hash": "./src/modules/hash.js", + "./modules/hash.js": "./src/modules/hash.js", + "./modules/help": "./src/modules/help.js", + "./modules/help.js": "./src/modules/help.js", + "./modules/highlightKeywords": "./src/modules/highlightKeywords.js", + "./modules/highlightKeywords.js": "./src/modules/highlightKeywords.js", + "./modules/loader": "./src/modules/loader.js", + "./modules/loader.js": "./src/modules/loader.js", + "./modules/markActiveColumns": "./src/modules/markActiveColumns.js", + "./modules/markActiveColumns.js": "./src/modules/markActiveColumns.js", + "./modules/noResults": "./src/modules/noResults.js", + "./modules/noResults.js": "./src/modules/noResults.js", + "./modules/paging": "./src/modules/paging.js", + "./modules/paging.js": "./src/modules/paging.js", + "./modules/popupFilter": "./src/modules/popupFilter.js", + "./modules/popupFilter.js": "./src/modules/popupFilter.js", + "./modules/rowsCounter": "./src/modules/rowsCounter.js", + "./modules/rowsCounter.js": "./src/modules/rowsCounter.js", + "./modules/state": "./src/modules/state.js", + "./modules/state.js": "./src/modules/state.js", + "./modules/statusBar": "./src/modules/statusBar.js", + "./modules/statusBar.js": "./src/modules/statusBar.js", + "./modules/storage": "./src/modules/storage.js", + "./modules/storage.js": "./src/modules/storage.js", + "./modules/toolbar": "./src/modules/toolbar.js", + "./modules/toolbar.js": "./src/modules/toolbar.js", + "./number": "./src/number.js", + "./number.js": "./src/number.js", + "./root": "./src/root.js", + "./root.js": "./src/root.js", + "./settings": "./src/settings.js", + "./settings.js": "./src/settings.js", + "./sort": "./src/sort.js", + "./sort.js": "./src/sort.js", + "./string": "./src/string.js", + "./string.js": "./src/string.js", + "./tablefilter": "./src/tablefilter.js", + "./tablefilter.js": "./src/tablefilter.js", + "./tfBase": "./src/tfBase.js", + "./tfBase.js": "./src/tfBase.js", + "./types": "./src/types.js", + "./types.js": "./src/types.js" +}; + + +function webpackContext(req) { + var id = webpackContextResolve(req); + var module = __webpack_require__(id); + return module; +} +function webpackContextResolve(req) { + var id = map[req]; + if(!(id + 1)) { // check for number or string + var e = new Error('Cannot find module "' + req + '".'); + e.code = 'MODULE_NOT_FOUND'; + throw e; + } + return id; +} +webpackContext.keys = function webpackContextKeys() { + return Object.keys(map); +}; +webpackContext.resolve = webpackContextResolve; +module.exports = webpackContext; +webpackContext.id = "./src sync recursive ^\\.\\/.*$"; + +/***/ }), + +/***/ "./src/extensions/advancedGrid/adapterEzEditTable.js": +/*!***********************************************************!*\ + !*** ./src/extensions/advancedGrid/adapterEzEditTable.js ***! + \***********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AdapterEzEditTable; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../const */ "./src/const.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../settings */ "./src/settings.js"); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../root */ "./src/root.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + +var INSTANTIATION_ERROR = "Failed to instantiate EditTable object.\n \n\"ezEditTable\" dependency not found."; +/** + * Adapter module for ezEditTable, an external library providing advanced + * grid features (selection and edition): + * http://codecanyon.net/item/ezedittable-enhance-html-tables/2425123?ref=koalyptus + */ + +var AdapterEzEditTable = +/*#__PURE__*/ +function (_Feature) { + _inherits(AdapterEzEditTable, _Feature); + + /** + * Creates an instance of AdapterEzEditTable + * + * @param {TableFilter} tf TableFilter instance + * @param {Object} cfg Configuration options for ezEditTable library + */ + function AdapterEzEditTable(tf, cfg) { + var _this; + + _classCallCheck(this, AdapterEzEditTable); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(AdapterEzEditTable).call(this, tf, cfg.name)); + /** + * Module description + * @type {String} + */ + + _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.description, 'ezEditTable adapter'); + /** + * Filename of ezEditTable library + * @type {String} + */ + + _this.filename = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.filename, 'ezEditTable.js'); + /** + * Path to ezEditTable library + * @type {String} + */ + + _this.vendorPath = cfg.vendor_path; + /** + * Load ezEditTable stylesheet + * @type {Boolean} + */ + + _this.loadStylesheet = Boolean(cfg.load_stylesheet); + /** + * Path to ezEditTable stylesheet + * @type {String} + */ + + _this.stylesheet = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.stylesheet, _this.vendorPath + 'ezEditTable.css'); + /** + * Name of ezEditTable stylesheet + * @type {String} + */ + + _this.stylesheetName = Object(_settings__WEBPACK_IMPORTED_MODULE_3__["defaultsStr"])(cfg.stylesheet_name, 'ezEditTableCss'); // Enable the ezEditTable's scroll into view behaviour if grid layout on + + cfg.scroll_into_view = cfg.scroll_into_view === false ? false : tf.gridLayout; + /** + * ezEditTable instance + * @type {EditTable} + * @private + */ + + _this._ezEditTable = null; + /** + * ezEditTable configuration + * @private + */ + + _this.cfg = cfg; + + _this.enable(); + + return _this; + } + /** + * Conditionally load ezEditTable library and set advanced grid + */ + + + _createClass(AdapterEzEditTable, [{ + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized) { + return; + } + + var tf = this.tf; + + if (_root__WEBPACK_IMPORTED_MODULE_4__["root"].EditTable) { + this._setAdvancedGrid(); + } else { + var path = this.vendorPath + this.filename; + tf.import(this.filename, path, function () { + return _this2._setAdvancedGrid(); + }); + } + + if (this.loadStylesheet && !tf.isImported(this.stylesheet, 'link')) { + tf.import(this.stylesheetName, this.stylesheet, null, 'link'); + } // TODO: hack to prevent ezEditTable enter key event hijaking. + // Needs to be fixed in the vendor's library + + + this.emitter.on(['filter-focus', 'filter-blur'], function () { + return _this2._toggleForInputFilter(); + }); + /** + * @inherited + */ + + this.initialized = true; + } + /** + * Instantiate ezEditTable component for advanced grid features + * @private + */ + + }, { + key: "_setAdvancedGrid", + value: function _setAdvancedGrid() { + var tf = this.tf; //start row for EditTable constructor needs to be calculated + + var startRow, + cfg = this.cfg, + thead = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(tf.dom(), 'thead'); //if thead exists and startRow not specified, startRow is calculated + //automatically by EditTable + + if (thead.length > 0 && !cfg.startRow) { + startRow = undefined; + } //otherwise startRow config property if any or TableFilter refRow + else { + startRow = cfg.startRow || tf.refRow; + } + + cfg.base_path = cfg.base_path || tf.basePath + 'ezEditTable/'; + var editable = cfg.editable; + var selectable = cfg.selection; + + if (selectable) { + cfg.default_selection = cfg.default_selection || 'row'; + } //CSS Styles + + + cfg.active_cell_css = cfg.active_cell_css || 'ezETSelectedCell'; + var _lastValidRowIndex = 0; + var _lastRowIndex = 0; + + if (selectable) { + //Row navigation needs to be calculated according to TableFilter's + //validRowsIndex array + var onAfterSelection = function onAfterSelection(et, selectedElm, e) { + var slc = et.Selection; //Next valid filtered row needs to be selected + + var doSelect = function doSelect(nextRowIndex) { + if (et.defaultSelection === 'row') { + /* eslint-disable */ + slc.SelectRowByIndex(nextRowIndex); + /* eslint-enable */ + } else { + /* eslint-disable */ + et.ClearSelections(); + /* eslint-enable */ + + var cellIndex = selectedElm.cellIndex, + _row = tf.dom().rows[nextRowIndex]; + + if (et.defaultSelection === 'both') { + /* eslint-disable */ + slc.SelectRowByIndex(nextRowIndex); + /* eslint-enable */ + } + + if (_row) { + /* eslint-disable */ + slc.SelectCell(_row.cells[cellIndex]); + /* eslint-enable */ + } + } //Table is filtered + + + if (tf.validRowsIndex.length !== tf.getRowsNb()) { + var r = tf.dom().rows[nextRowIndex]; + + if (r) { + r.scrollIntoView(false); + } + + if (cell) { + if (cell.cellIndex === tf.getCellsNb() - 1 && tf.gridLayout) { + tf.tblCont.scrollLeft = 100000000; + } else if (cell.cellIndex === 0 && tf.gridLayout) { + tf.tblCont.scrollLeft = 0; + } else { + cell.scrollIntoView(false); + } + } + } + }; //table is not filtered + + + if (!tf.validRowsIndex) { + return; + } + + var validIndexes = tf.validRowsIndex, + validIdxLen = validIndexes.length, + row = et.defaultSelection !== 'row' ? selectedElm.parentNode : selectedElm, + //cell for default_selection = 'both' or 'cell' + cell = selectedElm.nodeName === 'TD' ? selectedElm : null, + + /* eslint-disable */ + keyCode = e !== undefined ? et.Event.GetKey(e) : 0, + + /* eslint-enable */ + isRowValid = validIndexes.indexOf(row.rowIndex) !== -1, + nextRowIndex, + paging = tf.feature('paging'), + //pgup/pgdown keys + d = keyCode === 34 || keyCode === 33 ? paging && paging.pageLength || et.nbRowsPerPage : 1; //If next row is not valid, next valid filtered row needs to be + //calculated + + if (!isRowValid) { + //Selection direction up/down + if (row.rowIndex > _lastRowIndex) { + //last row + if (row.rowIndex >= validIndexes[validIdxLen - 1]) { + nextRowIndex = validIndexes[validIdxLen - 1]; + } else { + var calcRowIndex = _lastValidRowIndex + d; + + if (calcRowIndex > validIdxLen - 1) { + nextRowIndex = validIndexes[validIdxLen - 1]; + } else { + nextRowIndex = validIndexes[calcRowIndex]; + } + } + } else { + //first row + if (row.rowIndex <= validIndexes[0]) { + nextRowIndex = validIndexes[0]; + } else { + var v = validIndexes[_lastValidRowIndex - d]; + nextRowIndex = v ? v : validIndexes[0]; + } + } + + _lastRowIndex = row.rowIndex; + doSelect(nextRowIndex); + } else { + //If filtered row is valid, special calculation for + //pgup/pgdown keys + if (keyCode !== 34 && keyCode !== 33) { + _lastValidRowIndex = validIndexes.indexOf(row.rowIndex); + _lastRowIndex = row.rowIndex; + } else { + if (keyCode === 34) { + //pgdown + //last row + if (_lastValidRowIndex + d <= validIdxLen - 1) { + nextRowIndex = validIndexes[_lastValidRowIndex + d]; + } else { + nextRowIndex = [validIdxLen - 1]; + } + } else { + //pgup + //first row + if (_lastValidRowIndex - d <= validIndexes[0]) { + nextRowIndex = validIndexes[0]; + } else { + nextRowIndex = validIndexes[_lastValidRowIndex - d]; + } + } + + _lastRowIndex = nextRowIndex; + _lastValidRowIndex = validIndexes.indexOf(nextRowIndex); + doSelect(nextRowIndex); + } + } + }; //Page navigation has to be enforced whenever selected row is out of + //the current page range + + + var onBeforeSelection = function onBeforeSelection(et, selectedElm) { + var row = et.defaultSelection !== 'row' ? selectedElm.parentNode : selectedElm; + + if (tf.paging) { + if (tf.feature('paging').nbPages > 1) { + var paging = tf.feature('paging'); //page length is re-assigned in case it has changed + + et.nbRowsPerPage = paging.pageLength; + var validIndexes = tf.validRowsIndex, + validIdxLen = validIndexes.length, + pagingEndRow = parseInt(paging.startPagingRow, 10) + parseInt(paging.pageLength, 10); + var rowIndex = row.rowIndex; + + if (rowIndex === validIndexes[validIdxLen - 1] && paging.currentPageNb !== paging.nbPages) { + paging.setPage('last'); + } else if (rowIndex === validIndexes[0] && paging.currentPageNb !== 1) { + paging.setPage('first'); + } else if (rowIndex > validIndexes[pagingEndRow - 1] && rowIndex < validIndexes[validIdxLen - 1]) { + paging.setPage('next'); + } else if (rowIndex < validIndexes[paging.startPagingRow] && rowIndex > validIndexes[0]) { + paging.setPage('previous'); + } + } + } + }; //Selected row needs to be visible when paging is activated + + + if (tf.paging) { + tf.feature('paging').onAfterChangePage = function (paging) { + var advGrid = paging.tf.extension('advancedGrid'); + var et = advGrid._ezEditTable; + var slc = et.Selection; + /* eslint-disable */ + + var row = slc.GetActiveRow(); + /* eslint-enable */ + + if (row) { + row.scrollIntoView(false); + } + /* eslint-disable */ + + + var cell = slc.GetActiveCell(); + /* eslint-enable */ + + if (cell) { + cell.scrollIntoView(false); + } + }; + } //Rows navigation when rows are filtered is performed with the + //EditTable row selection callback events + + + if (cfg.default_selection === 'row') { + var fnB = cfg.on_before_selected_row; + + cfg.on_before_selected_row = function () { + var args = arguments; + onBeforeSelection(args[0], args[1], args[2]); + + if (fnB) { + fnB.call(null, args[0], args[1], args[2]); + } + }; + + var fnA = cfg.on_after_selected_row; + + cfg.on_after_selected_row = function () { + var args = arguments; + onAfterSelection(args[0], args[1], args[2]); + + if (fnA) { + fnA.call(null, args[0], args[1], args[2]); + } + }; + } else { + var fnD = cfg.on_before_selected_cell; + + cfg.on_before_selected_cell = function () { + var args = arguments; + onBeforeSelection(args[0], args[1], args[2]); + + if (fnD) { + fnD.call(null, args[0], args[1], args[2]); + } + }; + + var fnC = cfg.on_after_selected_cell; + + cfg.on_after_selected_cell = function () { + var args = arguments; + onAfterSelection(args[0], args[1], args[2]); + + if (fnC) { + fnC.call(null, args[0], args[1], args[2]); + } + }; + } + } + + if (editable) { + //Added or removed rows, TF rows number needs to be re-calculated + var fnE = cfg.on_added_dom_row; + + cfg.on_added_dom_row = function () { + var args = arguments; + tf.nbFilterableRows++; + + if (!tf.paging) { + tf.emitter.emit('rows-changed', tf, this); + } else { + tf.nbFilterableRows++; + tf.paging = false; + tf.feature('paging').destroy(); + tf.feature('paging').reset(); + } + + if (tf.alternateRows) { + tf.feature('alternateRows').init(); + } + + if (fnE) { + fnE.call(null, args[0], args[1], args[2]); + } + }; + + if (cfg.actions && cfg.actions['delete']) { + var fnF = cfg.actions['delete'].on_after_submit; + + cfg.actions['delete'].on_after_submit = function () { + var args = arguments; + tf.nbFilterableRows--; + + if (!tf.paging) { + tf.emitter.emit('rows-changed', tf, this); + } else { + tf.nbFilterableRows--; + tf.paging = false; + tf.feature('paging').destroy(); + tf.feature('paging').reset(false); + } + + if (tf.alternateRows) { + tf.feature('alternateRows').init(); + } + + if (fnF) { + fnF.call(null, args[0], args[1]); + } + }; + } + } + + try { + /* eslint-disable */ + this._ezEditTable = new EditTable(tf.id, cfg, startRow); + + this._ezEditTable.Init(); + /* eslint-enable */ + + } catch (e) { + throw new Error(INSTANTIATION_ERROR); + } + + this.initialized = true; + } + /** + * Reset advanced grid when previously removed + */ + + }, { + key: "reset", + value: function reset() { + var ezEditTable = this._ezEditTable; + + if (ezEditTable) { + if (this.cfg.selection) { + /* eslint-disable */ + ezEditTable.Selection.Set(); + /* eslint-enable */ + } + + if (this.cfg.editable) { + /* eslint-disable */ + ezEditTable.Editable.Set(); + /* eslint-enable */ + } + } + } + /** + * Toggle behaviour + */ + + }, { + key: "toggle", + value: function toggle() { + var ezEditTable = this._ezEditTable; + + if (ezEditTable.editable) { + /* eslint-disable */ + ezEditTable.Editable.Remove(); + /* eslint-enable */ + } else { + /* eslint-disable */ + ezEditTable.Editable.Set(); + /* eslint-enable */ + } + + if (ezEditTable.selection) { + /* eslint-disable */ + ezEditTable.Selection.Remove(); + /* eslint-enable */ + } else { + /* eslint-disable */ + ezEditTable.Selection.Set(); + /* eslint-enable */ + } + } + }, { + key: "_toggleForInputFilter", + value: function _toggleForInputFilter() { + var tf = this.tf; + + if (!tf.getActiveFilterId()) { + return; + } + + var colIndex = tf.getColumnIndexFromFilterId(tf.getActiveFilterId()); + var filterType = tf.getFilterType(colIndex); + + if (filterType === _const__WEBPACK_IMPORTED_MODULE_2__["INPUT"]) { + this.toggle(); + } + } + /** + * Remove advanced grid + */ + + }, { + key: "destroy", + value: function destroy() { + var _this3 = this; + + if (!this.initialized) { + return; + } + + var ezEditTable = this._ezEditTable; + + if (ezEditTable) { + if (this.cfg.selection) { + /* eslint-disable */ + ezEditTable.Selection.ClearSelections(); + ezEditTable.Selection.Remove(); + /* eslint-enable */ + } + + if (this.cfg.editable) { + /* eslint-disable */ + ezEditTable.Editable.Remove(); + /* eslint-enable */ + } + } + + this.emitter.off(['filter-focus', 'filter-blur'], function () { + return _this3._toggleForInputFilter(); + }); + this.initialized = false; + } + }]); + + return AdapterEzEditTable; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + + + +/***/ }), + +/***/ "./src/extensions/advancedGrid/advancedGrid.js": +/*!*****************************************************!*\ + !*** ./src/extensions/advancedGrid/advancedGrid.js ***! + \*****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _adapterEzEditTable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adapterEzEditTable */ "./src/extensions/advancedGrid/adapterEzEditTable.js"); + +/* harmony default export */ __webpack_exports__["default"] = (_adapterEzEditTable__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/***/ }), + +/***/ "./src/extensions/colOps/colOps.js": +/*!*****************************************!*\ + !*** ./src/extensions/colOps/colOps.js ***! + \*****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ColOps; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types */ "./src/types.js"); +/* harmony import */ var _sort__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../sort */ "./src/sort.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../const */ "./src/const.js"); +/* harmony import */ var format_number__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! format-number */ "./node_modules/format-number/index.js"); +/* harmony import */ var format_number__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(format_number__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../settings */ "./src/settings.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../event */ "./src/event.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + + + +var EVENTS = ['after-filtering', 'after-page-change', 'after-page-length-change']; +var SUM = 'sum'; +var MEAN = 'mean'; +var MIN = 'min'; +var MAX = 'max'; +var MEDIAN = 'median'; +var Q1 = 'q1'; +var Q3 = 'q3'; +/** + * Column calculations extension + */ + +var ColOps = +/*#__PURE__*/ +function (_Feature) { + _inherits(ColOps, _Feature); + + /** + * Creates an instance of ColOps + * + * @param {TableFilter} tf TableFilter instance + * @param {Object} opts Configuration object + */ + function ColOps(tf, opts) { + var _this; + + _classCallCheck(this, ColOps); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(ColOps).call(this, tf, opts.name)); + /** + * Callback fired before columns operations start + * @type {Function} + */ + + _this.onBeforeOperation = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_before_operation, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after columns operations are completed + * @type {Function} + */ + + _this.onAfterOperation = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_after_operation, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Configuration options + * @type {Object} + */ + + _this.opts = opts; + /** + * List of DOM element IDs containing column's calculation result + * @type {Array} + */ + + _this.labelIds = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.id, []); + /** + * List of columns' indexes for calculations + * @type {Array} + */ + + _this.colIndexes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.col, []); + /** + * List of operations - possible values: 'sum', 'mean', 'min', 'max', + * 'median', 'q1', 'q3' + * @type {Array} + */ + + _this.operations = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.operation, []); + /** + * List of write methods used to write the result - possible values: + * 'innerHTML', 'setValue', 'createTextNode' + * @type {Array} + */ + + _this.outputTypes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.write_method, []); + /** + * List of format objects used for formatting the result - + * refer to https://github.com/componitable/format-number to check + * configuration options + * @type {Array} + */ + + _this.formatResults = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.format_result, []); + /** + * List of row indexes displaying the results + * @type {Array} + */ + + _this.totRowIndexes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.tot_row_index, []); + /** + * List of row indexes excluded from calculations + * @type {Array} + */ + + _this.excludeRows = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.exclude_row, []); + /** + * List of decimal precision for calculation results + * @type {Array} + */ + + _this.decimalPrecisions = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.decimal_precision, 2); + + _this.enable(); + + return _this; + } + /** + * Initializes ColOps instance + */ + + + _createClass(ColOps, [{ + key: "init", + value: function init() { + if (this.initialized) { + return; + } // subscribe to events + + + this.emitter.on(EVENTS, Object(_event__WEBPACK_IMPORTED_MODULE_7__["bound"])(this.calcAll, this)); + this.calcAll(); + /** @inherited */ + + this.initialized = true; + } + /** + * Calculates columns' values + * Configuration options are stored in 'opts' property + * - 'id' contains ids of elements showing result (array) + * - 'col' contains the columns' indexes (array) + * - 'operation' contains operation type (array, values: 'sum', 'mean', + * 'min', 'max', 'median', 'q1', 'q3') + * - 'write_method' array defines which method to use for displaying the + * result (innerHTML, setValue, createTextNode) - default: 'innerHTML' + * - 'tot_row_index' defines in which row results are displayed + * (integers array) + * + * - changes made by Nuovella: + * (1) optimized the routine (now it will only process each column once), + * (2) added calculations for the median, lower and upper quartile. + */ + + }, { + key: "calcAll", + value: function calcAll() { + var tf = this.tf; + + if (!tf.isInitialized()) { + return; + } + + this.onBeforeOperation(tf, this); + this.emitter.emit('before-column-operation', tf, this); + var colIndexes = this.colIndexes, + colOperations = this.operations, + outputTypes = this.outputTypes, + totRowIndexes = this.totRowIndexes, + excludeRows = this.excludeRows, + formatResults = this.formatResults, + decimalPrecisions = this.decimalPrecisions; //nuovella: determine unique list of columns to operate on + + var uIndexes = []; + colIndexes.forEach(function (val) { + if (uIndexes.indexOf(val) === -1) { + uIndexes.push(val); + } + }); + var nbCols = uIndexes.length, + rows = tf.dom().rows, + colValues = []; + + for (var u = 0; u < nbCols; u++) { + //this retrieves col values + //use uIndexes because we only want to pass through this loop + //once for each column get the values in this unique column + colValues.push(tf.getVisibleColumnData(uIndexes[u], false, excludeRows)); + var curValues = colValues[u]; //next: calculate all operations for this column + + var result = 0, + operations = [], + precisions = [], + labels = [], + writeType = void 0, + formatResult = [], + idx = 0; + + for (var k = 0; k < colIndexes.length; k++) { + if (colIndexes[k] !== uIndexes[u]) { + continue; + } + + operations[idx] = (colOperations[k] || 'sum').toLowerCase(); + precisions[idx] = decimalPrecisions[k]; + labels[idx] = this.labelIds[k]; + writeType = Object(_types__WEBPACK_IMPORTED_MODULE_2__["isArray"])(outputTypes) ? outputTypes[k] : null; + formatResult[idx] = this.configureFormat(uIndexes[u], formatResults[k]); + idx++; + } + + for (var i = 0; i < idx; i++) { + // emit values before column calculation + this.emitter.emit('before-column-calc', tf, this, uIndexes[u], curValues, operations[i], precisions[i]); + result = Number(this.calc(curValues, operations[i], null)); // emit column calculation result + + this.emitter.emit('column-calc', tf, this, uIndexes[u], result, operations[i], precisions[i]); // write result in expected DOM element + + this.writeResult(result, labels[i], writeType, precisions[i], formatResult[i]); + } //for i + // row(s) with result are always visible + + + var totRow = totRowIndexes && totRowIndexes[u] ? rows[totRowIndexes[u]] : null; + + if (totRow) { + totRow.style.display = ''; + } + } //for u + + + this.onAfterOperation(tf, this); + this.emitter.emit('after-column-operation', tf, this); + } + /** + * Make desired calculation on specified column. + * @param {Number} colIndex Column index + * @param {String} [operation=SUM] Operation type + * @param {Number} precision Decimal precision + * @returns {Number} + */ + + }, { + key: "columnCalc", + value: function columnCalc(colIndex) { + var operation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SUM; + var precision = arguments.length > 2 ? arguments[2] : undefined; + var excludeRows = this.excludeRows || []; + var colValues = tf.getVisibleColumnData(colIndex, false, excludeRows); + return Number(this.calc(colValues, operation, precision)); + } + /** + * Make calculation on passed values. + * @param {Array} values List of values + * @param {String} [operation=SUM] Optional operation type + * @param {Number} precision Optional result precision + * @returns {Number} + * @private + */ + + }, { + key: "calc", + value: function calc(colValues) { + var operation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SUM; + var precision = arguments.length > 2 ? arguments[2] : undefined; + var result = 0; + + if (operation === Q1 || operation === Q3 || operation === MEDIAN) { + colValues = this.sortColumnValues(colValues, _sort__WEBPACK_IMPORTED_MODULE_3__["numSortAsc"]); + } + + switch (operation) { + case MEAN: + result = this.calcMean(colValues); + break; + + case SUM: + result = this.calcSum(colValues); + break; + + case MIN: + result = this.calcMin(colValues); + break; + + case MAX: + result = this.calcMax(colValues); + break; + + case MEDIAN: + result = this.calcMedian(colValues); + break; + + case Q1: + result = this.calcQ1(colValues); + break; + + case Q3: + result = this.calcQ3(colValues); + break; + } + + return Object(_types__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(precision) ? result : result.toFixed(precision); + } + /** + * Calculate the sum of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcSum", + value: function calcSum() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + + if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(values)) { + return 0; + } + + var result = values.reduce(function (x, y) { + return Number(x) + Number(y); + }); + return result; + } + /** + * Calculate the mean of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcMean", + value: function calcMean() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var result = this.calcSum(values) / values.length; + return Number(result); + } + /** + * Calculate the max value of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcMax", + value: function calcMax() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + return Math.max.apply(null, values); + } + /** + * Calculate the min value of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcMin", + value: function calcMin() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + return Math.min.apply(null, values); + } + /** + * Calculate the median of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcMedian", + value: function calcMedian() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var nbValues = values.length; + var aux = 0; + + if (nbValues % 2 === 1) { + aux = Math.floor(nbValues / 2); + return Number(values[aux]); + } + + return (Number(values[nbValues / 2]) + Number(values[nbValues / 2 - 1])) / 2; + } + /** + * Calculate the lower quartile of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcQ1", + value: function calcQ1() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var nbValues = values.length; + var posa = 0.0; + posa = Math.floor(nbValues / 4); + + if (4 * posa === nbValues) { + return (Number(values[posa - 1]) + Number(values[posa])) / 2; + } + + return Number(values[posa]); + } + /** + * Calculate the upper quartile of passed values. + * @param {Array} [values=[]] List of values + * @returns {Number} + */ + + }, { + key: "calcQ3", + value: function calcQ3() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var nbValues = values.length; + var posa = 0.0; + var posb = 0.0; + posa = Math.floor(nbValues / 4); + + if (4 * posa === nbValues) { + posb = 3 * posa; + return (Number(values[posb]) + Number(values[posb - 1])) / 2; + } + + return Number(values[nbValues - posa - 1]); + } + /** + * Sort passed values with supplied sorter function. + * @param {Array} [values=[]] List of values to be sorted + * @param {Function} sorter Sorter function + * @returns {Array} + */ + + }, { + key: "sortColumnValues", + value: function sortColumnValues() { + var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var sorter = arguments.length > 1 ? arguments[1] : undefined; + return values.sort(sorter); + } + /** + * Write calculation result in passed DOM element with supplied write method + * and decimal precision. + * @param {Number} [result=0] Calculation result + * @param {DOMElement} label DOM element + * @param {String} [writeType='innerhtml'] Write method + * @param {Number} [precision=2] Applied decimal precision + * @private + */ + + }, { + key: "writeResult", + value: function writeResult() { + var result = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + var label = arguments.length > 1 ? arguments[1] : undefined; + var writeType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'innerhtml'; + var precision = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 2; + var format = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; + var labelElm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(label); + + if (!labelElm) { + return; + } + + result = result.toFixed(precision); + + if (isNaN(result) || !isFinite(result)) { + result = ''; + } else { + result = format_number__WEBPACK_IMPORTED_MODULE_5___default()(format)(result); + } + + switch (writeType.toLowerCase()) { + case 'innerhtml': + labelElm.innerHTML = result; + break; + + case 'setvalue': + labelElm.value = result; + break; + + case 'createtextnode': + var oldNode = labelElm.firstChild; + var txtNode = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createText"])(result); + labelElm.replaceChild(txtNode, oldNode); + break; + } + } + /** + * Configure the format options used to format the operation result based + * on column type. + * @param {Number} colIndex Column index + * @param {Object} [format={}] Format object + * @returns {Object} + * @private + */ + + }, { + key: "configureFormat", + value: function configureFormat(colIndex) { + var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var tf = this.tf; + + if (tf.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_4__["FORMATTED_NUMBER"]])) { + var colType = tf.colTypes[colIndex]; + + if (colType.decimal && !format.decimal) { + format.decimal = colType.decimal; + } + + if (colType.thousands && !format.integerSeparator) { + format.integerSeparator = colType.thousands; + } + } else { + format.decimal = format.decimal || ''; + format.integerSeparator = format.integerSeparator || ''; + } + + return format; + } + /** Remove extension */ + + }, { + key: "destroy", + value: function destroy() { + if (!this.initialized) { + return; + } // unsubscribe to events + + + this.emitter.off(EVENTS, Object(_event__WEBPACK_IMPORTED_MODULE_7__["bound"])(this.calcAll, this)); + this.initialized = false; + } + }]); + + return ColOps; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + + + +/***/ }), + +/***/ "./src/extensions/colsVisibility/colsVisibility.js": +/*!*********************************************************!*\ + !*** ./src/extensions/colsVisibility/colsVisibility.js ***! + \*********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ColsVisibility; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types */ "./src/types.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../event */ "./src/event.js"); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../root */ "./src/root.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../const */ "./src/const.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../settings */ "./src/settings.js"); +/* harmony import */ var _modules_toolbar__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../modules/toolbar */ "./src/modules/toolbar.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + + + +/** + * Columns Visibility extension + */ + +var ColsVisibility = +/*#__PURE__*/ +function (_Feature) { + _inherits(ColsVisibility, _Feature); + + /** + * Creates an instance of ColsVisibility + * @param {TableFilter} tf TableFilter instance + * @param {Object} Configuration object + */ + function ColsVisibility(tf, f) { + var _this; + + _classCallCheck(this, ColsVisibility); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(ColsVisibility).call(this, tf, f.name)); // Configuration object + + var cfg = _this.config; + /** + * Module name + * @type {String} + */ + + _this.name = f.name; + /** + * Module description + * @type {String} + */ + + _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.description, 'Columns visibility manager'); + /** + * show/hide columns container element + * @private + */ + + _this.spanEl = null; + /** + * show/hide columns button element + * @private + */ + + _this.btnEl = null; + /** + * show/hide columns main container element + * @private + */ + + _this.contEl = null; + /** + * Enable tick to hide a column, defaults to true + * @type {Boolean} + */ + + _this.tickToHide = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsBool"])(f.tick_to_hide, true); + /** + * Enable columns manager UI, defaults to true + * @type {Boolean} + */ + + _this.manager = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsBool"])(f.manager, true); + /** + * Headers HTML table reference only if headers are external + * @type {DOMElement} + */ + + _this.headersTbl = f.headers_table || null; + /** + * Headers row index only if headers are external + * @type {Number} + */ + + _this.headersIndex = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsNb"])(f.headers_index, 1); + /** + * ID of main container element + * @type {String} + */ + + _this.contElTgtId = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.container_target_id, null); + /** + * Alternative text for column headers in column manager UI + * @type {Array} + */ + + _this.headersText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(f.headers_text, []); + /** + * ID of button's container element + * @type {String} + */ + + _this.btnTgtId = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_target_id, null); + /** + * Button's text, defaults to Columns▼ + * @type {String} + */ + + _this.btnText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_text, 'Columns▼'); + /** + * Button's inner HTML + * @type {String} + */ + + _this.btnHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_html, null); + /** + * Css class for button + * @type {String} + */ + + _this.btnCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_css_class, 'colVis'); + /** + * Columns manager UI close link text, defaults to 'Close' + * @type {String} + */ + + _this.btnCloseText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_close_text, 'Close'); + /** + * Columns manager UI close link HTML + * @type {String} + */ + + _this.btnCloseHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_close_html, null); + /** + * Css for columns manager UI close link + * @type {String} + */ + + _this.btnCloseCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.btn_close_css_class, _this.btnCssClass); + /** + * Extension's stylesheet filename + * @type {String} + */ + + _this.stylesheet = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.stylesheet, 'colsVisibility.css'); + /** + * Css for columns manager UI span + * @type {String} + */ + + _this.spanCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.span_css_class, 'colVisSpan'); + /** + * Css for columns manager UI main container + * @type {String} + */ + + _this.contCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.cont_css_class, 'colVisCont'); + /** + * Css for columns manager UI checklist (ul) + * @type {String} + */ + + _this.listCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(cfg.list_css_class, 'cols_checklist'); + /** + * Css for columns manager UI checklist item (li) + * @type {String} + */ + + _this.listItemCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(cfg.checklist_item_css_class, 'cols_checklist_item'); + /** + * Css for columns manager UI checklist item selected state (li) + * @type {String} + */ + + _this.listSlcItemCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(cfg.checklist_selected_item_css_class, 'cols_checklist_slc_item'); + /** + * Text preceding the columns list, defaults to 'Hide' or 'Show' + * depending on tick mode (tick_to_hide option) + * @type {String} + */ + + _this.text = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.text, _this.tickToHide ? 'Hide: ' : 'Show: '); + /** + * List of columns indexes to be hidden at initialization + * @type {Array} + */ + + _this.atStart = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(f.at_start, []); + /** + * Enable hover behaviour on columns manager button/link + * @type {Boolean} + */ + + _this.enableHover = Boolean(f.enable_hover); + /** + * Enable select all option, disabled by default + * @type {Boolean} + */ + + _this.enableTickAll = Boolean(f.enable_tick_all); + /** + * Text for select all option, defaults to 'Select all:' + * @type {String} + */ + + _this.tickAllText = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.tick_all_text, 'Select all:'); + /** + * Default position in toolbar ('left'|'center'|'right') + * @type {String} + */ + + _this.toolbarPosition = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(f.toolbar_position, _modules_toolbar__WEBPACK_IMPORTED_MODULE_7__["RIGHT"]); + /** + * List of indexes of hidden columns + * @private + */ + + _this.hiddenCols = []; + /** + * Bound mouseup wrapper + * @private + */ + + _this.boundMouseup = null; + /** + * Callback fired when the extension is initialized + * @type {Function} + */ + + _this.onLoaded = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_loaded, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired before the columns manager is opened + * @type {Function} + */ + + _this.onBeforeOpen = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_open, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after the columns manager is opened + * @type {Function} + */ + + _this.onAfterOpen = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_open, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired before the columns manager is closed + * @type {Function} + */ + + _this.onBeforeClose = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_close, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after the columns manager is closed + * @type {Function} + */ + + _this.onAfterClose = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_close, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired before a column is hidden + * @type {Function} + */ + + _this.onBeforeColHidden = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_col_hidden, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after a column is hidden + * @type {Function} + */ + + _this.onAfterColHidden = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_col_hidden, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired before a column is displayed + * @type {Function} + */ + + _this.onBeforeColDisplayed = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_before_col_displayed, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after a column is displayed + * @type {Function} + */ + + _this.onAfterColDisplayed = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(f.on_after_col_displayed, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); //Grid layout support + + if (tf.gridLayout) { + _this.headersTbl = tf.feature('gridLayout').headTbl; //headers table + + _this.headersIndex = 0; //headers index + } //Loads extension stylesheet + + + tf.import(f.name + 'Style', tf.getStylePath() + _this.stylesheet, null, 'link'); + + _this.enable(); + + return _this; + } + /** + * Mouse-up event handler handling popup auto-close behaviour + * @private + */ + + + _createClass(ColsVisibility, [{ + key: "onMouseup", + value: function onMouseup(evt) { + var targetElm = Object(_event__WEBPACK_IMPORTED_MODULE_3__["targetEvt"])(evt); + + while (targetElm && targetElm !== this.contEl && targetElm !== this.btnEl) { + targetElm = targetElm.parentNode; + } + + if (targetElm !== this.contEl && targetElm !== this.btnEl) { + this.toggle(); + } + + return; + } + /** + * Toggle columns manager UI + */ + + }, { + key: "toggle", + value: function toggle() { + // ensure mouseup event handler is removed + Object(_event__WEBPACK_IMPORTED_MODULE_3__["removeEvt"])(_root__WEBPACK_IMPORTED_MODULE_4__["root"], 'mouseup', this.boundMouseup); + var contDisplay = this.contEl.style.display; + + if (contDisplay !== 'inline') { + this.onBeforeOpen(this); + } + + if (contDisplay === 'inline') { + this.onBeforeClose(this); + } + + this.contEl.style.display = contDisplay === 'inline' ? _const__WEBPACK_IMPORTED_MODULE_5__["NONE"] : 'inline'; + + if (contDisplay !== 'inline') { + this.onAfterOpen(this); + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(_root__WEBPACK_IMPORTED_MODULE_4__["root"], 'mouseup', this.boundMouseup); + } + + if (contDisplay === 'inline') { + this.onAfterClose(this); + } + } + /** + * Check an item in columns manager UI + * @private + */ + + }, { + key: "checkItem", + value: function checkItem(lbl) { + var li = lbl.parentNode; + + if (!li || !lbl) { + return; + } + + var isChecked = lbl.firstChild.checked; + var colIndex = lbl.firstChild.getAttribute('id').split('_')[1]; + colIndex = parseInt(colIndex, 10); + + if (isChecked) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(li, this.listSlcItemCssClass); + } else { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeClass"])(li, this.listSlcItemCssClass); + } + + var hide = false; + + if (this.tickToHide && isChecked || !this.tickToHide && !isChecked) { + hide = true; + } + + this.setHidden(colIndex, hide); + } + /** + * Initializes ColsVisibility instance + */ + + }, { + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized || !this.manager) { + return; + } + + this.emitter.emit('initializing-extension', this, !Object(_types__WEBPACK_IMPORTED_MODULE_2__["isNull"])(this.btnTgtId)); + this.emitter.on(['hide-column'], function (tf, colIndex) { + return _this2.hideCol(colIndex); + }); + this.buildBtn(); + this.buildManager(); + /** @inherited */ + + this.initialized = true; + this.boundMouseup = this.onMouseup.bind(this); + this.emitter.emit('columns-visibility-initialized', this.tf, this); + this.emitter.emit('extension-initialized', this); // Hide columns at start at very end of initialization, do not move + // as order is important + + this._hideAtStart(); + } + /** + * Build main button UI + */ + + }, { + key: "buildBtn", + value: function buildBtn() { + var _this3 = this; + + if (this.btnEl) { + return; + } + + var tf = this.tf; + var span = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span'); + span.className = this.spanCssClass; // Container element (rdiv or custom element) + + var targetEl = !this.btnTgtId ? tf.feature('toolbar').container(this.toolbarPosition) : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.btnTgtId); + + if (!this.btnTgtId) { + var firstChild = targetEl.firstChild; + firstChild.parentNode.insertBefore(span, firstChild); + } else { + targetEl.appendChild(span); + } + + if (!this.btnHtml) { + var btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:;']); + btn.className = this.btnCssClass; + btn.title = this.desc; + btn.innerHTML = this.btnText; + span.appendChild(btn); + + if (!this.enableHover) { + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function (evt) { + return _this3.toggle(evt); + }); + } else { + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'mouseover', function (evt) { + return _this3.toggle(evt); + }); + } + } else { + // Custom html + span.innerHTML = this.btnHtml; + var colVisEl = span.firstChild; + + if (!this.enableHover) { + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(colVisEl, 'click', function (evt) { + return _this3.toggle(evt); + }); + } else { + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(colVisEl, 'mouseover', function (evt) { + return _this3.toggle(evt); + }); + } + } + + this.spanEl = span; + this.btnEl = this.spanEl.firstChild; + this.onLoaded(this); + } + /** + * Build columns manager UI + */ + + }, { + key: "buildManager", + value: function buildManager() { + var _this4 = this; + + var tf = this.tf; + var container = !this.contElTgtId ? Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('div') : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contElTgtId); + container.className = this.contCssClass; //Extension description + + var extNameLabel = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('p'); + extNameLabel.innerHTML = this.text; + container.appendChild(extNameLabel); //Headers list + + var ul = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('ul'); + ul.className = this.listCssClass; + var tbl = this.headersTbl || tf.dom(); + var headerIndex = this.headersTbl ? this.headersIndex : tf.getHeadersRowIndex(); + var headerRow = tbl.rows[headerIndex]; //Tick all option + + if (this.enableTickAll) { + var li = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createCheckItem"])('col__' + tf.id, this.tickAllText, this.tickAllText); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(li, this.listItemCssClass); + ul.appendChild(li); + li.check.checked = !this.tickToHide; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(li.check, 'click', function () { + for (var h = 0; h < headerRow.cells.length; h++) { + var itm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])('col_' + h + '_' + tf.id); + + if (itm && li.check.checked !== itm.checked) { + itm.click(); + itm.checked = li.check.checked; + } + } + }); + } + + for (var i = 0; i < headerRow.cells.length; i++) { + var cell = headerRow.cells[i]; + + var cellText = this.headersText[i] || this._getHeaderText(cell); + + var liElm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createCheckItem"])('col_' + i + '_' + tf.id, cellText, cellText); + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(liElm, this.listItemCssClass); + + if (!this.tickToHide) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["addClass"])(liElm, this.listSlcItemCssClass); + } + + ul.appendChild(liElm); + + if (!this.tickToHide) { + liElm.check.checked = true; + } + + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(liElm.check, 'click', function (evt) { + var elm = Object(_event__WEBPACK_IMPORTED_MODULE_3__["targetEvt"])(evt); + var lbl = elm.parentNode; + + _this4.checkItem(lbl); + }); + } //separator + + + var p = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('p', ['align', 'center']); + var btn; //Close link + + if (!this.btnCloseHtml) { + btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:;']); + btn.className = this.btnCloseCssClass; + btn.innerHTML = this.btnCloseText; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function (evt) { + return _this4.toggle(evt); + }); + p.appendChild(btn); + } else { + p.innerHTML = this.btnCloseHtml; + btn = p.firstChild; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function (evt) { + return _this4.toggle(evt); + }); + } + + container.appendChild(ul); + container.appendChild(p); + this.btnEl.parentNode.insertBefore(container, this.btnEl); + this.contEl = container; + } + /** + * Hide or show specified columns + * @param {Number} colIndex Column index + * @param {Boolean} hide Hide column if true or show if false + */ + + }, { + key: "setHidden", + value: function setHidden(colIndex, hide) { + var tf = this.tf; + var tbl = tf.dom(); + + if (hide) { + this.onBeforeColHidden(this, colIndex); + } else { + this.onBeforeColDisplayed(this, colIndex); + } + + this._hideElements(tbl, colIndex, hide); + + if (this.headersTbl) { + this._hideElements(this.headersTbl, colIndex, hide); + } + + var hiddenCols = this.hiddenCols; + var itemIndex = hiddenCols.indexOf(colIndex); + + if (hide) { + if (itemIndex === -1) { + this.hiddenCols.push(colIndex); + } + } else { + if (itemIndex !== -1) { + this.hiddenCols.splice(itemIndex, 1); + } + } + + if (hide) { + this.onAfterColHidden(this, colIndex); + this.emitter.emit('column-hidden', tf, this, colIndex, this.hiddenCols); + } else { + this.onAfterColDisplayed(this, colIndex); + this.emitter.emit('column-shown', tf, this, colIndex, this.hiddenCols); + } + } + /** + * Show specified column + * @param {Number} colIndex Column index + */ + + }, { + key: "showCol", + value: function showCol(colIndex) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isUndef"])(colIndex) || !this.isColHidden(colIndex)) { + return; + } + + if (this.manager && this.contEl) { + var itm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])('col_' + colIndex + '_' + this.tf.id); + + if (itm) { + itm.click(); + } + } else { + this.setHidden(colIndex, false); + } + } + /** + * Hide specified column + * @param {Number} colIndex Column index + */ + + }, { + key: "hideCol", + value: function hideCol(colIndex) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isUndef"])(colIndex) || this.isColHidden(colIndex)) { + return; + } + + if (this.manager && this.contEl) { + var itm = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])('col_' + colIndex + '_' + this.tf.id); + + if (itm) { + itm.click(); + } + } else { + this.setHidden(colIndex, true); + } + } + /** + * Determine if specified column is hidden + * @param {Number} colIndex Column index + */ + + }, { + key: "isColHidden", + value: function isColHidden(colIndex) { + if (this.hiddenCols.indexOf(colIndex) !== -1) { + return true; + } + + return false; + } + /** + * Toggle visibility of specified column + * @param {Number} colIndex Column index + */ + + }, { + key: "toggleCol", + value: function toggleCol(colIndex) { + if (Object(_types__WEBPACK_IMPORTED_MODULE_2__["isUndef"])(colIndex) || this.isColHidden(colIndex)) { + this.showCol(colIndex); + } else { + this.hideCol(colIndex); + } + } + /** + * Return the indexes of the columns currently hidden + * @return {Array} column indexes + */ + + }, { + key: "getHiddenCols", + value: function getHiddenCols() { + return this.hiddenCols; + } + /** + * Remove the columns manager + */ + + }, { + key: "destroy", + value: function destroy() { + var _this5 = this; + + if (!this.initialized) { + return; + } + + if (Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contElTgtId)) { + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.contElTgtId).innerHTML = ''; + } else { + this.contEl.innerHTML = ''; + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.contEl); + this.contEl = null; + } + + this.btnEl.innerHTML = ''; + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.btnEl); + this.btnEl = null; + this.emitter.off(['hide-column'], function (tf, colIndex) { + return _this5.hideCol(colIndex); + }); + this.boundMouseup = null; + this.initialized = false; + } + }, { + key: "_getHeaderText", + value: function _getHeaderText(cell) { + if (!cell.hasChildNodes) { + return ''; + } + + for (var i = 0; i < cell.childNodes.length; i++) { + var n = cell.childNodes[i]; + + if (n.nodeType === 3) { + return n.nodeValue; + } else if (n.nodeType === 1) { + if (n.id && n.id.indexOf('popUp') !== -1) { + continue; + } else { + return Object(_dom__WEBPACK_IMPORTED_MODULE_1__["getText"])(n); + } + } + + continue; + } + + return ''; + } + }, { + key: "_hideElements", + value: function _hideElements(tbl, colIdx, hide) { + this._hideCells(tbl, colIdx, hide); + + this._hideCol(tbl, colIdx, hide); + } + }, { + key: "_hideCells", + value: function _hideCells(tbl, colIdx, hide) { + for (var i = 0; i < tbl.rows.length; i++) { + var row = tbl.rows[i]; + var cell = row.cells[colIdx]; + + if (cell) { + cell.style.display = hide ? _const__WEBPACK_IMPORTED_MODULE_5__["NONE"] : ''; + } + } + } + }, { + key: "_hideCol", + value: function _hideCol(tbl, colIdx, hide) { + var colElms = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["tag"])(tbl, 'col'); + + if (colElms.length === 0) { + return; + } + + colElms[colIdx].style.display = hide ? _const__WEBPACK_IMPORTED_MODULE_5__["NONE"] : ''; + } + }, { + key: "_hideAtStart", + value: function _hideAtStart() { + var _this6 = this; + + this.atStart.forEach(function (colIdx) { + _this6.hideCol(colIdx); + }); + } + }]); + + return ColsVisibility; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + + + +/***/ }), + +/***/ "./src/extensions/filtersVisibility/filtersVisibility.js": +/*!***************************************************************!*\ + !*** ./src/extensions/filtersVisibility/filtersVisibility.js ***! + \***************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return FiltersVisibility; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../dom */ "./src/dom.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types */ "./src/types.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../event */ "./src/event.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../settings */ "./src/settings.js"); +/* harmony import */ var _modules_toolbar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../modules/toolbar */ "./src/modules/toolbar.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + +/** + * Filters Visibility extension + */ + +var FiltersVisibility = +/*#__PURE__*/ +function (_Feature) { + _inherits(FiltersVisibility, _Feature); + + /** + * Creates an instance of FiltersVisibility + * @param {TableFilter} tf TableFilter instance + * @param {Object} Configuration object + */ + function FiltersVisibility(tf, f) { + var _this; + + _classCallCheck(this, FiltersVisibility); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(FiltersVisibility).call(this, tf, f.name)); + /** + * Module name + * @type {String} + */ + + _this.name = f.name; + /** + * Module description + * @type {String} + */ + + _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.description, 'Filters row visibility manager'); + /** + * Extension's stylesheet filename + * @type {String} + */ + + _this.stylesheet = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.stylesheet, 'filtersVisibility.css'); + /** + * Expand icon filename + * @type {String} + */ + + _this.icnExpand = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.expand_icon_name, 'icn_exp.png'); + /** + * Collapse icon filename + * @type {String} + */ + + _this.icnCollapse = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.collapse_icon_name, 'icn_clp.png'); + /** + * Main container element + * @private + */ + + _this.contEl = null; + /** + * Button element + * @private + */ + + _this.btnEl = null; + /** + * Expand icon HTML + * @private + */ + + _this.icnExpandHtml = 'Expand filters'; + /** + * Collapse icon HTML + * @private + */ + + _this.icnCollapseHtml = 'Collapse filters'; + /** + * Default text + * @private + */ + + _this.defaultText = 'Toggle filters'; + /** + * ID of main container element + * @type {String} + */ + + _this.targetId = f.target_id || null; + /** + * Enable expand/collapse icon, defaults to true + * @type {Boolean} + */ + + _this.enableIcon = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsBool"])(f.enable_icon, true); + /** + * Custom text for button + * @type {String} + */ + + _this.btnText = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.btn_text, ''); + /** + * Collapse button HTML + * @private + */ + + _this.collapseBtnHtml = _this.enableIcon ? _this.icnCollapseHtml + _this.btnText : _this.btnText || _this.defaultText; + /** + * Expand button HTML + * @private + */ + + _this.expandBtnHtml = _this.enableIcon ? _this.icnExpandHtml + _this.btnText : _this.btnText || _this.defaultText; + /** + * Button's custom HTML + * @type {String} + */ + + _this.btnHtml = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.btn_html, null); + /** + * Css class for expand/collapse filters button + * @type {String} + */ + + _this.btnCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.btn_css_class, 'btnExpClpFlt'); + /** + * Css class for main container + * @type {String} + */ + + _this.contCssClass = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.cont_css_class, 'expClpFlt'); + /** + * Filters row index + * @type {Number} + */ + + _this.filtersRowIndex = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsNb"])(f.filters_row_index, tf.getFiltersRowIndex()); + /** + * Make filters visible at initialization, defaults to true + * @type {Boolean} + */ + + _this.visibleAtStart = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsNb"])(f.visible_at_start, true); + /** + * Default position in toolbar ('left'|'center'|'right') + * @type {String} + */ + + _this.toolbarPosition = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsStr"])(f.toolbar_position, _modules_toolbar__WEBPACK_IMPORTED_MODULE_5__["RIGHT"]); + /** + * Callback fired before filters row is shown + * @type {Function} + */ + + _this.onBeforeShow = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_before_show, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after filters row is shown + * @type {Function} + */ + + _this.onAfterShow = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_after_show, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired before filters row is hidden + * @type {Function} + */ + + _this.onBeforeHide = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_before_hide, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); + /** + * Callback fired after filters row is hidden + * @type {Function} + */ + + _this.onAfterHide = Object(_settings__WEBPACK_IMPORTED_MODULE_4__["defaultsFn"])(f.on_after_hide, _types__WEBPACK_IMPORTED_MODULE_2__["EMPTY_FN"]); //Import extension's stylesheet + + tf.import(f.name + 'Style', tf.getStylePath() + _this.stylesheet, null, 'link'); + + _this.enable(); + + return _this; + } + /** + * Initialise extension + */ + + + _createClass(FiltersVisibility, [{ + key: "init", + value: function init() { + var _this2 = this; + + if (this.initialized) { + return; + } + + this.emitter.emit('initializing-extension', this, !Object(_types__WEBPACK_IMPORTED_MODULE_2__["isNull"])(this.targetId)); + this.buildUI(); + /** @inherited */ + + this.initialized = true; + this.emitter.on(['show-filters'], function (tf, visible) { + return _this2.show(visible); + }); + this.emitter.emit('filters-visibility-initialized', this.tf, this); + this.emitter.emit('extension-initialized', this); + } + /** + * Build UI elements + */ + + }, { + key: "buildUI", + value: function buildUI() { + var _this3 = this; + + var tf = this.tf; + var span = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('span'); + span.className = this.contCssClass; // Container element (rdiv or custom element) + + var targetEl = !this.targetId ? tf.feature('toolbar').container(this.toolbarPosition) : Object(_dom__WEBPACK_IMPORTED_MODULE_1__["elm"])(this.targetId); + + if (!this.targetId) { + var firstChild = targetEl.firstChild; + firstChild.parentNode.insertBefore(span, firstChild); + } else { + targetEl.appendChild(span); + } + + var btn; + + if (!this.btnHtml) { + btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])('a', ['href', 'javascript:void(0);']); + btn.className = this.btnCssClass; + btn.title = this.btnText || this.defaultText; + btn.innerHTML = this.collapseBtnHtml; + span.appendChild(btn); + } else { + // Custom html + span.innerHTML = this.btnHtml; + btn = span.firstChild; + } + + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(btn, 'click', function () { + return _this3.toggle(); + }); + this.contEl = span; + this.btnEl = btn; + + if (!this.visibleAtStart) { + this.toggle(); + } + } + /** + * Toggle filters visibility + */ + + }, { + key: "toggle", + value: function toggle() { + var tf = this.tf; + var tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom(); + var fltRow = tbl.rows[this.filtersRowIndex]; + var isDisplayed = fltRow.style.display === ''; + this.show(!isDisplayed); + } + /** + * Show or hide filters + * + * @param {boolean} [visible=true] Visibility flag + */ + + }, { + key: "show", + value: function show() { + var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var tf = this.tf; + var tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom(); + var fltRow = tbl.rows[this.filtersRowIndex]; + + if (visible) { + this.onBeforeShow(this); + } + + if (!visible) { + this.onBeforeHide(this); + } + + fltRow.style.display = visible ? '' : 'none'; + + if (this.enableIcon && !this.btnHtml) { + this.btnEl.innerHTML = visible ? this.collapseBtnHtml : this.expandBtnHtml; + } + + if (visible) { + this.onAfterShow(this); + } + + if (!visible) { + this.onAfterHide(this); + } + + this.emitter.emit('filters-toggled', tf, this, visible); + } + /** + * Destroy the UI + */ + + }, { + key: "destroy", + value: function destroy() { + var _this4 = this; + + if (!this.initialized) { + return; + } + + this.emitter.off(['show-filters'], function (tf, visible) { + return _this4.show(visible); + }); + this.btnEl.innerHTML = ''; + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.btnEl); + this.btnEl = null; + this.contEl.innerHTML = ''; + Object(_dom__WEBPACK_IMPORTED_MODULE_1__["removeElm"])(this.contEl); + this.contEl = null; + this.initialized = false; + } + }]); + + return FiltersVisibility; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); + + + +/***/ }), + +/***/ "./src/extensions/sort/adapterSortabletable.js": +/*!*****************************************************!*\ + !*** ./src/extensions/sort/adapterSortabletable.js ***! + \*****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AdapterSortableTable; }); +/* harmony import */ var _feature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../feature */ "./src/feature.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../types */ "./src/types.js"); +/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../dom */ "./src/dom.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../event */ "./src/event.js"); +/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../number */ "./src/number.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../const */ "./src/const.js"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../settings */ "./src/settings.js"); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + + + + + + + + +/** + * SortableTable Adapter module + */ + +var AdapterSortableTable = +/*#__PURE__*/ +function (_Feature) { + _inherits(AdapterSortableTable, _Feature); + + /** + * Creates an instance of AdapterSortableTable + * @param {TableFilter} tf TableFilter instance + * @param {Object} opts Configuration object + */ + function AdapterSortableTable(tf, opts) { + var _this; + + _classCallCheck(this, AdapterSortableTable); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(AdapterSortableTable).call(this, tf, opts.name)); + /** + * Module name + * @type {String} + */ + + _this.name = opts.name; + /** + * Module description + * @type {String} + */ + + _this.desc = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.description, 'Sortable table'); + /** + * Indicate whether table previously sorted + * @type {Boolean} + * @private + */ + + _this.sorted = false; + /** + * List of sort type per column basis + * @type {Array} + */ + + _this.sortTypes = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.types, tf.colTypes); + /** + * Column to be sorted at initialization, ie: + * sort_col_at_start: [1, true] + * @type {Array} + */ + + _this.sortColAtStart = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.sort_col_at_start, null); + /** + * Enable asynchronous sort, if triggers are external + * @type {Boolean} + */ + + _this.asyncSort = Boolean(opts.async_sort); + /** + * List of element IDs triggering sort on a per column basis + * @type {Array} + */ + + _this.triggerIds = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsArr"])(opts.trigger_ids, []); // edit .sort-arrow.descending / .sort-arrow.ascending in + // tablefilter.css to reflect any path change + + /** + * Path to images + * @type {String} + */ + + _this.imgPath = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.images_path, tf.themesPath); + /** + * Blank image file name + * @type {String} + */ + + _this.imgBlank = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_blank, 'blank.png'); + /** + * Css class for sort indicator image + * @type {String} + */ + + _this.imgClassName = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_class_name, 'sort-arrow'); + /** + * Css class for ascending sort indicator image + * @type {String} + */ + + _this.imgAscClassName = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_asc_class_name, 'ascending'); + /** + * Css class for descending sort indicator image + * @type {String} + */ + + _this.imgDescClassName = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.image_desc_class_name, 'descending'); + /** + * Cell attribute key storing custom value used for sorting + * @type {String} + */ + + _this.customKey = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsStr"])(opts.custom_key, 'data-tf-sortKey'); + /** + * Callback fired when sort extension is instanciated + * @type {Function} + */ + + _this.onSortLoaded = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_sort_loaded, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]); + /** + * Callback fired before a table column is sorted + * @type {Function} + */ + + _this.onBeforeSort = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_before_sort, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]); + /** + * Callback fired after a table column is sorted + * @type {Function} + */ + + _this.onAfterSort = Object(_settings__WEBPACK_IMPORTED_MODULE_6__["defaultsFn"])(opts.on_after_sort, _types__WEBPACK_IMPORTED_MODULE_1__["EMPTY_FN"]); + /** + * SortableTable instance + * @private + */ + + _this.stt = null; + + _this.enable(); + + return _this; + } + /** + * Initializes AdapterSortableTable instance + */ + + + _createClass(AdapterSortableTable, [{ + key: "init", + value: function init() { + if (this.initialized) { + return; + } + + var tf = this.tf; + var adpt = this; // SortableTable class sanity check (sortabletable.js) + + if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isUndef"])(SortableTable)) { + throw new Error('SortableTable class not found.'); + } // Add any date format if needed + + + this.emitter.emit('add-date-type-formats', this.tf, this.sortTypes); + this.overrideSortableTable(); + this.setSortTypes(); + this.onSortLoaded(tf, this); + /*** SortableTable callbacks ***/ + + this.stt.onbeforesort = function () { + adpt.onBeforeSort(tf, adpt.stt.sortColumn); + /*** sort behaviour for paging ***/ + + if (tf.paging) { + tf.feature('paging').disable(); + } + }; + + this.stt.onsort = function () { + adpt.sorted = true; //sort behaviour for paging + + if (tf.paging) { + var paginator = tf.feature('paging'); // recalculate valid rows index as sorting may have change it + + tf.getValidRows(true); + paginator.enable(); + paginator.setPage(paginator.getPage()); + } + + adpt.onAfterSort(tf, adpt.stt.sortColumn, adpt.stt.descending); + adpt.emitter.emit('column-sorted', tf, adpt.stt.sortColumn, adpt.stt.descending); + }; // Column sort at start + + + var sortColAtStart = adpt.sortColAtStart; + + if (sortColAtStart) { + this.stt.sort(sortColAtStart[0], sortColAtStart[1]); + } + + this.emitter.on(['sort'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.sortByColumnIndexHandler, this)); + /** @inherited */ + + this.initialized = true; + this.emitter.emit('sort-initialized', tf, this); + } + /** + * Sort specified column + * @param {Number} colIdx Column index + * @param {Boolean} desc Optional: descending manner + */ + + }, { + key: "sortByColumnIndex", + value: function sortByColumnIndex(colIdx, desc) { + this.stt.sort(colIdx, desc); + } + /** @private */ + + }, { + key: "sortByColumnIndexHandler", + value: function sortByColumnIndexHandler(tf, colIdx, desc) { + this.sortByColumnIndex(colIdx, desc); + } + /** + * Set SortableTable overrides for TableFilter integration + */ + + }, { + key: "overrideSortableTable", + value: function overrideSortableTable() { + var adpt = this, + tf = this.tf; + /** + * Overrides headerOnclick method in order to handle th event + * @param {Object} e [description] + */ + + SortableTable.prototype.headerOnclick = function (evt) { + if (!adpt.initialized) { + return; + } // find Header element + + + var el = evt.target || evt.srcElement; + + while (el.tagName !== _const__WEBPACK_IMPORTED_MODULE_5__["CELL_TAG"] && el.tagName !== _const__WEBPACK_IMPORTED_MODULE_5__["HEADER_TAG"]) { + el = el.parentNode; + } + + this.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex); + }; + /** + * Overrides getCellIndex IE returns wrong cellIndex when columns are + * hidden + * @param {Object} oTd TD element + * @return {Number} Cell index + */ + + + SortableTable.getCellIndex = function (oTd) { + var cells = oTd.parentNode.cells, + l = cells.length, + i; + + for (i = 0; cells[i] !== oTd && i < l; i++) {} + + return i; + }; + /** + * Overrides initHeader in order to handle filters row position + * @param {Array} oSortTypes + */ + + + SortableTable.prototype.initHeader = function (oSortTypes) { + var stt = this; + + if (!stt.tHead) { + if (tf.gridLayout) { + stt.tHead = tf.feature('gridLayout').headTbl.tHead; + } else { + return; + } + } + + stt.headersRow = tf.headersRow; + var cells = stt.tHead.rows[stt.headersRow].cells; + stt.sortTypes = oSortTypes || []; + var l = cells.length; + var img, c; + + for (var i = 0; i < l; i++) { + c = cells[i]; + + if (stt.sortTypes[i] !== null && stt.sortTypes[i] !== 'None') { + c.style.cursor = 'pointer'; + img = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createElm"])('img', ['src', adpt.imgPath + adpt.imgBlank]); + c.appendChild(img); + + if (stt.sortTypes[i] !== null) { + c.setAttribute('_sortType', stt.sortTypes[i]); + } + + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(c, 'click', stt._headerOnclick); + } else { + c.setAttribute('_sortType', oSortTypes[i]); + c._sortType = 'None'; + } + } + + stt.updateHeaderArrows(); + }; + /** + * Overrides updateHeaderArrows in order to handle arrows indicators + */ + + + SortableTable.prototype.updateHeaderArrows = function () { + var stt = this; + var cells, l, img; // external headers + + if (adpt.asyncSort && adpt.triggerIds.length > 0) { + var triggers = adpt.triggerIds; + cells = []; + l = triggers.length; + + for (var j = 0; j < l; j++) { + cells.push(Object(_dom__WEBPACK_IMPORTED_MODULE_2__["elm"])(triggers[j])); + } + } else { + if (!this.tHead) { + return; + } + + cells = stt.tHead.rows[stt.headersRow].cells; + l = cells.length; + } + + for (var i = 0; i < l; i++) { + var cell = cells[i]; + + if (!cell) { + continue; + } + + var cellAttr = cell.getAttribute('_sortType'); + + if (cellAttr !== null && cellAttr !== 'None') { + img = cell.lastChild || cell; + + if (img.nodeName.toLowerCase() !== 'img') { + img = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["createElm"])('img', ['src', adpt.imgPath + adpt.imgBlank]); + cell.appendChild(img); + } + + if (i === stt.sortColumn) { + img.className = adpt.imgClassName + ' ' + (this.descending ? adpt.imgDescClassName : adpt.imgAscClassName); + } else { + img.className = adpt.imgClassName; + } + } + } + }; + /** + * Overrides getRowValue for custom key value feature + * @param {Object} oRow Row element + * @param {String} sType + * @param {Number} nColumn + * @return {String} + */ + + + SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) { + var stt = this; // if we have defined a custom getRowValue use that + + var sortTypeInfo = stt._sortTypeInfo[sType]; + + if (sortTypeInfo && sortTypeInfo.getRowValue) { + return sortTypeInfo.getRowValue(oRow, nColumn); + } + + var c = oRow.cells[nColumn]; + var s = SortableTable.getInnerText(c); + return stt.getValueFromString(s, sType); + }; + /** + * Overrides getInnerText in order to avoid Firefox unexpected sorting + * behaviour with untrimmed text elements + * @param {Object} cell DOM element + * @return {String} DOM element inner text + */ + + + SortableTable.getInnerText = function (cell) { + if (!cell) { + return; + } + + if (cell.getAttribute(adpt.customKey)) { + return cell.getAttribute(adpt.customKey); + } else { + return tf.getCellValue(cell); + } + }; + } + /** + * Adds a sort type + */ + + }, { + key: "addSortType", + value: function addSortType() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + // Extract the arguments + var id = args[0], + caster = args[1], + sorter = args[2], + getRowValue = args[3]; + SortableTable.prototype.addSortType(id, caster, sorter, getRowValue); + } + /** + * Sets the sort types on a column basis + * @private + */ + + }, { + key: "setSortTypes", + value: function setSortTypes() { + var _this2 = this; + + var tf = this.tf, + sortTypes = this.sortTypes, + _sortTypes = []; + tf.eachCol(function (i) { + var colType; + + if (sortTypes[i]) { + colType = sortTypes[i]; + + if (Object(_types__WEBPACK_IMPORTED_MODULE_1__["isObj"])(colType)) { + if (colType.type === _const__WEBPACK_IMPORTED_MODULE_5__["DATE"]) { + colType = _this2._addDateType(i, sortTypes); + } else if (colType.type === _const__WEBPACK_IMPORTED_MODULE_5__["FORMATTED_NUMBER"]) { + var decimal = colType.decimal || tf.decimalSeparator; + colType = _this2._addNumberType(i, decimal); + } + } else { + colType = colType.toLowerCase(); + + if (colType === _const__WEBPACK_IMPORTED_MODULE_5__["DATE"]) { + colType = _this2._addDateType(i, sortTypes); + } else if (colType === _const__WEBPACK_IMPORTED_MODULE_5__["FORMATTED_NUMBER"] || colType === _const__WEBPACK_IMPORTED_MODULE_5__["NUMBER"]) { + colType = _this2._addNumberType(i, tf.decimalSeparator); + } else if (colType === _const__WEBPACK_IMPORTED_MODULE_5__["NONE"]) { + // TODO: normalise 'none' vs 'None' + colType = 'None'; + } + } + } else { + colType = _const__WEBPACK_IMPORTED_MODULE_5__["STRING"]; + } + + _sortTypes.push(colType); + }); //Public TF method to add sort type + //Custom sort types + + this.addSortType('caseinsensitivestring', SortableTable.toUpperCase); + this.addSortType(_const__WEBPACK_IMPORTED_MODULE_5__["STRING"]); + this.addSortType(_const__WEBPACK_IMPORTED_MODULE_5__["IP_ADDRESS"], ipAddress, sortIP); + this.stt = new SortableTable(tf.dom(), _sortTypes); + /*** external table headers adapter ***/ + + if (this.asyncSort && this.triggerIds.length > 0) { + (function () { + var triggers = _this2.triggerIds; + + for (var j = 0; j < triggers.length; j++) { + if (triggers[j] === null) { + continue; + } + + var trigger = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["elm"])(triggers[j]); + + if (trigger) { + trigger.style.cursor = 'pointer'; + Object(_event__WEBPACK_IMPORTED_MODULE_3__["addEvt"])(trigger, 'click', function (evt) { + var elm = evt.target; + + if (!_this2.tf.sort) { + return; + } + + _this2.stt.asyncSort(triggers.indexOf(elm.id)); + }); + trigger.setAttribute('_sortType', _sortTypes[j]); + } + } + })(); + } + } + }, { + key: "_addDateType", + value: function _addDateType(colIndex, types) { + var tf = this.tf; + var dateType = tf.feature('dateType'); + var locale = dateType.getOptions(colIndex, types).locale || tf.locale; + var colType = "".concat(_const__WEBPACK_IMPORTED_MODULE_5__["DATE"], "-").concat(locale); + this.addSortType(colType, function (value) { + var parsedDate = dateType.parse(value, locale); // Invalid date defaults to Wed Feb 04 -768 11:00:00 + + return isNaN(+parsedDate) ? new Date(-86400000000000) : parsedDate; + }); + return colType; + } + }, { + key: "_addNumberType", + value: function _addNumberType(colIndex, decimal) { + var colType = "".concat(_const__WEBPACK_IMPORTED_MODULE_5__["FORMATTED_NUMBER"]).concat(decimal === '.' ? '' : '-custom'); + this.addSortType(colType, function (value) { + return Object(_number__WEBPACK_IMPORTED_MODULE_4__["parse"])(value, decimal); + }); + return colType; + } + /** + * Remove extension + */ + + }, { + key: "destroy", + value: function destroy() { + if (!this.initialized) { + return; + } + + var tf = this.tf; + this.emitter.off(['sort'], Object(_event__WEBPACK_IMPORTED_MODULE_3__["bound"])(this.sortByColumnIndexHandler, this)); + this.sorted = false; + this.stt.destroy(); + var ids = tf.getFiltersId(); + + for (var idx = 0; idx < ids.length; idx++) { + var header = tf.getHeaderElement(idx); + var img = Object(_dom__WEBPACK_IMPORTED_MODULE_2__["tag"])(header, 'img'); + + if (img.length === 1) { + header.removeChild(img[0]); + } + } + + this.initialized = false; + } + }]); + + return AdapterSortableTable; +}(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); //Converters + + + + +function ipAddress(value) { + var vals = value.split('.'); + + for (var x in vals) { + var val = vals[x]; + + while (3 > val.length) { + val = '0' + val; + } + + vals[x] = val; + } + + return vals.join('.'); +} + +function sortIP(a, b) { + var aa = ipAddress(a.value.toLowerCase()); + var bb = ipAddress(b.value.toLowerCase()); + + if (aa === bb) { + return 0; + } else if (aa < bb) { + return -1; + } else { + return 1; + } +} + +/***/ }), + +/***/ "./src/extensions/sort/sort.js": +/*!*************************************!*\ + !*** ./src/extensions/sort/sort.js ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _adapterSortabletable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adapterSortabletable */ "./src/extensions/sort/adapterSortabletable.js"); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../root */ "./src/root.js"); + + + +if (!_root__WEBPACK_IMPORTED_MODULE_1__["root"].SortableTable) { + __webpack_require__(/*! script-loader!sortabletable */ "./node_modules/script-loader/index.js!./libs/sortabletable.js"); +} + +/* harmony default export */ __webpack_exports__["default"] = (_adapterSortabletable__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/***/ }) + +}]); +//# sourceMappingURL=tf-0-8ba4e8f28dcb16cfc50b.js.map \ No newline at end of file diff --git a/dist/tablefilter/tf-0-8ba4e8f28dcb16cfc50b.js.map b/dist/tablefilter/tf-0-8ba4e8f28dcb16cfc50b.js.map new file mode 100644 index 00000000..147d561c --- /dev/null +++ b/dist/tablefilter/tf-0-8ba4e8f28dcb16cfc50b.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./node_modules/format-number/index.js","webpack:///./libs/sortabletable.js","webpack:///./node_modules/script-loader/addScript.js","webpack:///./libs/sortabletable.js?8203","webpack:///./src sync ^\\.\\/.*$","webpack:///./src/extensions/advancedGrid/adapterEzEditTable.js","webpack:///./src/extensions/advancedGrid/advancedGrid.js","webpack:///./src/extensions/colOps/colOps.js","webpack:///./src/extensions/colsVisibility/colsVisibility.js","webpack:///./src/extensions/filtersVisibility/filtersVisibility.js","webpack:///./src/extensions/sort/adapterSortabletable.js","webpack:///./src/extensions/sort/sort.js"],"names":["INSTANTIATION_ERROR","AdapterEzEditTable","tf","cfg","name","desc","description","filename","vendorPath","vendor_path","loadStylesheet","Boolean","load_stylesheet","stylesheet","stylesheetName","stylesheet_name","scroll_into_view","gridLayout","_ezEditTable","enable","initialized","EditTable","_setAdvancedGrid","path","import","isImported","emitter","on","_toggleForInputFilter","startRow","thead","dom","length","undefined","refRow","base_path","basePath","editable","selectable","selection","default_selection","active_cell_css","_lastValidRowIndex","_lastRowIndex","onAfterSelection","et","selectedElm","e","slc","Selection","doSelect","nextRowIndex","defaultSelection","SelectRowByIndex","ClearSelections","cellIndex","row","rows","SelectCell","cells","validRowsIndex","getRowsNb","r","scrollIntoView","cell","getCellsNb","tblCont","scrollLeft","validIndexes","validIdxLen","parentNode","nodeName","keyCode","Event","GetKey","isRowValid","indexOf","rowIndex","paging","feature","d","pageLength","nbRowsPerPage","calcRowIndex","v","onBeforeSelection","nbPages","pagingEndRow","parseInt","startPagingRow","currentPageNb","setPage","onAfterChangePage","advGrid","extension","GetActiveRow","GetActiveCell","fnB","on_before_selected_row","args","arguments","call","fnA","on_after_selected_row","fnD","on_before_selected_cell","fnC","on_after_selected_cell","fnE","on_added_dom_row","nbFilterableRows","emit","destroy","reset","alternateRows","init","actions","fnF","on_after_submit","id","Init","Error","ezEditTable","Set","Editable","Remove","getActiveFilterId","colIndex","getColumnIndexFromFilterId","filterType","getFilterType","toggle","off","EVENTS","SUM","MEAN","MIN","MAX","MEDIAN","Q1","Q3","ColOps","opts","onBeforeOperation","on_before_operation","onAfterOperation","on_after_operation","labelIds","colIndexes","col","operations","operation","outputTypes","write_method","formatResults","format_result","totRowIndexes","tot_row_index","excludeRows","exclude_row","decimalPrecisions","decimal_precision","calcAll","isInitialized","colOperations","uIndexes","forEach","val","push","nbCols","colValues","u","getVisibleColumnData","curValues","result","precisions","labels","writeType","formatResult","idx","k","toLowerCase","configureFormat","i","Number","calc","writeResult","totRow","style","display","precision","sortColumnValues","calcMean","calcSum","calcMin","calcMax","calcMedian","calcQ1","calcQ3","toFixed","values","reduce","x","y","Math","max","apply","min","nbValues","aux","floor","posa","posb","sorter","sort","label","format","labelElm","isNaN","isFinite","innerHTML","value","oldNode","firstChild","txtNode","replaceChild","hasType","colType","colTypes","decimal","thousands","integerSeparator","ColsVisibility","f","config","spanEl","btnEl","contEl","tickToHide","tick_to_hide","manager","headersTbl","headers_table","headersIndex","headers_index","contElTgtId","container_target_id","headersText","headers_text","btnTgtId","btn_target_id","btnText","btn_text","btnHtml","btn_html","btnCssClass","btn_css_class","btnCloseText","btn_close_text","btnCloseHtml","btn_close_html","btnCloseCssClass","btn_close_css_class","spanCssClass","span_css_class","contCssClass","cont_css_class","listCssClass","list_css_class","listItemCssClass","checklist_item_css_class","listSlcItemCssClass","checklist_selected_item_css_class","text","atStart","at_start","enableHover","enable_hover","enableTickAll","enable_tick_all","tickAllText","tick_all_text","toolbarPosition","toolbar_position","hiddenCols","boundMouseup","onLoaded","on_loaded","onBeforeOpen","on_before_open","onAfterOpen","on_after_open","onBeforeClose","on_before_close","onAfterClose","on_after_close","onBeforeColHidden","on_before_col_hidden","onAfterColHidden","on_after_col_hidden","onBeforeColDisplayed","on_before_col_displayed","onAfterColDisplayed","on_after_col_displayed","headTbl","getStylePath","evt","targetElm","removeEvt","contDisplay","addEvt","lbl","li","isChecked","checked","getAttribute","split","addClass","removeClass","hide","setHidden","hideCol","buildBtn","buildManager","onMouseup","bind","_hideAtStart","span","className","targetEl","container","insertBefore","appendChild","btn","title","colVisEl","extNameLabel","ul","tbl","headerIndex","getHeadersRowIndex","headerRow","check","h","itm","click","cellText","_getHeaderText","liElm","elm","checkItem","p","_hideElements","itemIndex","splice","isColHidden","showCol","removeElm","hasChildNodes","childNodes","n","nodeType","nodeValue","colIdx","_hideCells","_hideCol","colElms","FiltersVisibility","icnExpand","expand_icon_name","icnCollapse","collapse_icon_name","icnExpandHtml","themesPath","icnCollapseHtml","defaultText","targetId","target_id","enableIcon","enable_icon","collapseBtnHtml","expandBtnHtml","filtersRowIndex","filters_row_index","getFiltersRowIndex","visibleAtStart","visible_at_start","onBeforeShow","on_before_show","onAfterShow","on_after_show","onBeforeHide","on_before_hide","onAfterHide","on_after_hide","buildUI","visible","show","fltRow","isDisplayed","AdapterSortableTable","sorted","sortTypes","types","sortColAtStart","sort_col_at_start","asyncSort","async_sort","triggerIds","trigger_ids","imgPath","images_path","imgBlank","image_blank","imgClassName","image_class_name","imgAscClassName","image_asc_class_name","imgDescClassName","image_desc_class_name","customKey","custom_key","onSortLoaded","on_sort_loaded","onBeforeSort","on_before_sort","onAfterSort","on_after_sort","stt","adpt","SortableTable","overrideSortableTable","setSortTypes","onbeforesort","sortColumn","disable","onsort","paginator","getValidRows","getPage","descending","sortByColumnIndexHandler","sortByColumnIndex","prototype","headerOnclick","el","target","srcElement","tagName","msie","getCellIndex","oTd","l","initHeader","oSortTypes","tHead","headersRow","img","c","cursor","setAttribute","_headerOnclick","_sortType","updateHeaderArrows","triggers","j","cellAttr","lastChild","getRowValue","oRow","sType","nColumn","sortTypeInfo","_sortTypeInfo","s","getInnerText","getValueFromString","getCellValue","caster","addSortType","_sortTypes","eachCol","type","_addDateType","decimalSeparator","_addNumberType","toUpperCase","ipAddress","sortIP","trigger","dateType","locale","getOptions","parsedDate","parse","Date","ids","getFiltersId","header","getHeaderElement","removeChild","vals","join","a","b","aa","bb","require"],"mappings":";;;;;;;;;;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2BAA2B;AAC3B,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAsD,4BAA4B,EAAE;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8BAA8B;AACnD;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,EAAE;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAC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","file":"tf-0-8ba4e8f28dcb16cfc50b.js","sourcesContent":["\nmodule.exports = formatter;\nmodule.exports.default = formatter;\n\nfunction formatter(options) {\n options = options || {};\n\n\n // *********************************************************************************************\n // Set defaults for negatives\n // options.negative, options.negativeOut, options.separator retained for backward compatibility\n // *********************************************************************************************\n\n // type of negative; default left\n options.negativeType = options.negativeType || (options.negative === 'R' ? 'right' : 'left')\n\n // negative symbols '-' or '()'\n if (typeof options.negativeLeftSymbol !== 'string') {\n switch (options.negativeType) {\n case 'left':\n options.negativeLeftSymbol = '-';\n break;\n case 'brackets':\n options.negativeLeftSymbol = '(';\n break;\n default:\n options.negativeLeftSymbol = '';\n }\n }\n if (typeof options.negativeRightSymbol !== 'string') {\n switch (options.negativeType) {\n case 'right':\n options.negativeRightSymbol = '-';\n break;\n case 'brackets':\n options.negativeRightSymbol = ')';\n break;\n default:\n options.negativeRightSymbol = '';\n }\n }\n\n // whether negative symbol should be inside/outside prefix and suffix\n\n if (typeof options.negativeLeftOut !== \"boolean\") {\n options.negativeLeftOut = (options.negativeOut === false ? false : true);\n }\n if (typeof options.negativeRightOut !== \"boolean\") {\n options.negativeRightOut = (options.negativeOut === false ? false : true);\n }\n\n //prefix and suffix\n options.prefix = options.prefix || '';\n options.suffix = options.suffix || '';\n\n //separators\n if (typeof options.integerSeparator !== 'string') {\n options.integerSeparator = (typeof options.separator === 'string' ? options.separator : ',');\n }\n options.decimalsSeparator = typeof options.decimalsSeparator === 'string' ? options.decimalsSeparator : '';\n options.decimal = options.decimal || '.';\n\n //padders\n options.padLeft = options.padLeft || -1 //default no padding\n options.padRight = options.padRight || -1 //default no padding\n\n function format(number, overrideOptions) {\n overrideOptions = overrideOptions || {};\n\n if (number || number === 0) {\n number = '' + number;//convert number to string if it isn't already\n } else {\n return '';\n }\n\n //identify a negative number and make it absolute\n var output = [];\n var negative = number.charAt(0) === '-';\n number = number.replace(/^\\-/g, '');\n\n //Prepare output with left hand negative and/or prefix\n if (!options.negativeLeftOut && !overrideOptions.noUnits) {\n output.push(options.prefix);\n }\n if (negative) {\n output.push(options.negativeLeftSymbol);\n }\n if (options.negativeLeftOut && !overrideOptions.noUnits) {\n output.push(options.prefix);\n }\n\n //Format core number\n number = number.split('.');\n if (options.round != null) round(number, options.round);\n if (options.truncate != null) number[1] = truncate(number[1], options.truncate);\n if (options.padLeft > 0) number[0] = padLeft(number[0], options.padLeft);\n if (options.padRight > 0) number[1] = padRight(number[1], options.padRight);\n if (!overrideOptions.noSeparator && number[1]) number[1] = addDecimalSeparators(number[1], options.decimalsSeparator);\n if (!overrideOptions.noSeparator && number[0]) number[0] = addIntegerSeparators(number[0], options.integerSeparator);\n output.push(number[0]);\n if (number[1]) {\n output.push(options.decimal);\n output.push(number[1]);\n }\n\n //Prepare output with right hand negative and/or prefix\n if (options.negativeRightOut && !overrideOptions.noUnits) {\n output.push(options.suffix);\n }\n if (negative) {\n output.push(options.negativeRightSymbol);\n }\n if (!options.negativeRightOut && !overrideOptions.noUnits) {\n output.push(options.suffix);\n }\n\n //join output and return\n return output.join('');\n }\n\n format.negative = options.negative;\n format.negativeOut = options.negativeOut;\n format.negativeType = options.negativeType;\n format.negativeLeftOut = options.negativeLeftOut;\n format.negativeLeftSymbol = options.negativeLeftSymbol;\n format.negativeRightOut = options.negativeRightOut;\n format.negativeRightSymbol = options.negativeRightSymbol;\n format.prefix = options.prefix;\n format.suffix = options.suffix;\n format.separate = options.separate;\n format.integerSeparator = options.integerSeparator;\n format.decimalsSeparator = options.decimalsSeparator;\n format.decimal = options.decimal;\n format.padLeft = options.padLeft;\n format.padRight = options.padRight;\n format.truncate = options.truncate;\n format.round = options.round;\n\n function unformat(number, allowedSeparators) {\n allowedSeparators = allowedSeparators || [];\n if (options.allowedSeparators) {\n options.allowedSeparators.forEach(function (s) { allowedSeparators.push (s); });\n }\n allowedSeparators.push(options.integerSeparator);\n allowedSeparators.push(options.decimalsSeparator);\n number = number.replace(options.prefix, '');\n number = number.replace(options.suffix, '');\n var newNumber = number;\n do {\n number = newNumber;\n for (var i = 0; i < allowedSeparators.length; i++) {\n newNumber = newNumber.replace(allowedSeparators[i], '');\n }\n } while (newNumber != number);\n return number;\n }\n format.unformat = unformat;\n\n function validate(number, allowedSeparators) {\n number = unformat(number, allowedSeparators);\n number = number.split(options.decimal);\n if (number.length > 2) {\n return false;\n } else if (options.truncate != null && number[1] && number[1].length > options.truncate) {\n return false;\n } else if (options.round != null && number[1] && number[1].length > options.round) {\n return false;\n } else {\n return /^-?\\d+\\.?\\d*$/.test(number);\n }\n }\n return format;\n}\n\n//where x is already the integer part of the number\nfunction addIntegerSeparators(x, separator) {\n x += '';\n if (!separator) return x;\n var rgx = /(\\d+)(\\d{3})/;\n while (rgx.test(x)) {\n x = x.replace(rgx, '$1' + separator + '$2');\n }\n return x;\n}\n\n//where x is already the decimal part of the number\nfunction addDecimalSeparators(x, separator) {\n x += '';\n if (!separator) return x;\n var rgx = /(\\d{3})(\\d+)/;\n while (rgx.test(x)) {\n x = x.replace(rgx, '$1' + separator + '$2');\n }\n return x;\n}\n\n//where x is the integer part of the number\nfunction padLeft(x, padding) {\n x = x + '';\n var buf = [];\n while (buf.length + x.length < padding) {\n buf.push('0');\n }\n return buf.join('') + x;\n}\n\n//where x is the decimals part of the number\nfunction padRight(x, padding) {\n if (x) {\n x += '';\n } else {\n x = '';\n }\n var buf = [];\n while (buf.length + x.length < padding) {\n buf.push('0');\n }\n return x + buf.join('');\n}\nfunction truncate(x, length) {\n if (x) {\n x += '';\n }\n if (x && x.length > length) {\n return x.substr(0, length);\n } else {\n return x;\n }\n}\n\n//where number is an array with 0th item as integer string and 1st item as decimal string (no negatives)\nfunction round(number, places) {\n if (number[1] && places >= 0 && number[1].length > places) {\n //truncate to correct number of decimal places\n var decim = number[1].slice(0, places);\n //if next digit was >= 5 we need to round up\n if (+(number[1].substr(places, 1)) >= 5) {\n //But first count leading zeros as converting to a number will loose them\n var leadingzeros = \"\";\n while (decim.charAt(0)===\"0\") {\n leadingzeros = leadingzeros + \"0\";\n decim = decim.substr(1);\n }\n //Then we can change decim to a number and add 1 before replacing leading zeros\n decim = (+decim + 1) + '';\n decim = leadingzeros + decim;\n if (decim.length > places) {\n //adding one has made it longer\n number[0] = (+number[0]+ +decim.charAt(0)) + ''; //add value of firstchar to the integer part\n decim = decim.substring(1); //ignore the 1st char at the beginning which is the carry to the integer part\n }\n }\n number[1] = decim;\n }\n return number;\n}\n","module.exports = \"/*----------------------------------------------------------------------------\\\\\\r\\n| Sortable Table 1.12 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created by Erik Arvidsson |\\r\\n| (http://webfx.eae.net/contact.html#erik) |\\r\\n| For WebFX (http://webfx.eae.net/) |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| A DOM 1 based script that allows an ordinary HTML table to be sortable. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Copyright (c) 1998 - 2006 Erik Arvidsson |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not |\\r\\n| use this file except in compliance with the License. You may obtain a copy |\\r\\n| of the License at http://www.apache.org/licenses/LICENSE-2.0 |\\r\\n| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\\r\\n| Unless required by applicable law or agreed to in writing, software |\\r\\n| distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT |\\r\\n| WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |\\r\\n| License for the specific language governing permissions and limitations |\\r\\n| under the License. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| 2003-01-10 | First version |\\r\\n| 2003-01-19 | Minor changes to the date parsing |\\r\\n| 2003-01-28 | JScript 5.0 fixes (no support for 'in' operator) |\\r\\n| 2003-02-01 | Sloppy typo like error fixed in getInnerText |\\r\\n| 2003-07-04 | Added workaround for IE cellIndex bug. |\\r\\n| 2003-11-09 | The bDescending argument to sort was not correctly working |\\r\\n| | Using onclick DOM0 event if no support for addEventListener |\\r\\n| | or attachEvent |\\r\\n| 2004-01-13 | Adding addSortType and removeSortType which makes it a lot |\\r\\n| | easier to add new, custom sort types. |\\r\\n| 2004-01-27 | Switch to use descending = false as the default sort order. |\\r\\n| | Change defaultDescending to suit your needs. |\\r\\n| 2004-03-14 | Improved sort type None look and feel a bit |\\r\\n| 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you |\\r\\n| | can use another tHead or no tHead, and you can chose some |\\r\\n| | other tBody. |\\r\\n| 2006-04-25 | Changed license to Apache Software License 2.0 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created 2003-01-10 | All changes are in the log above. | Updated 2006-04-25 |\\r\\n\\\\----------------------------------------------------------------------------*/\\r\\n\\r\\n\\r\\nfunction SortableTable(oTable, oSortTypes) {\\r\\n\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\r\\n\\tthis.sortColumn = null;\\r\\n\\tthis.descending = null;\\r\\n\\r\\n\\tvar oThis = this;\\r\\n\\tthis._headerOnclick = function (e) {\\r\\n\\t\\toThis.headerOnclick(e);\\r\\n\\t};\\r\\n\\r\\n\\tif (oTable) {\\r\\n\\t\\tthis.setTable( oTable );\\r\\n\\t\\tthis.document = oTable.ownerDocument || oTable.document;\\r\\n\\t}\\r\\n\\telse {\\r\\n\\t\\tthis.document = document;\\r\\n\\t}\\r\\n\\r\\n\\r\\n\\t// only IE needs this\\r\\n\\tvar win = this.document.defaultView || this.document.parentWindow;\\r\\n\\tthis._onunload = function () {\\r\\n\\t\\toThis.destroy();\\r\\n\\t};\\r\\n\\tif (win && typeof win.attachEvent != \\\"undefined\\\") {\\r\\n\\t\\twin.attachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n}\\r\\n\\r\\nSortableTable.gecko = navigator.product == \\\"Gecko\\\";\\r\\nSortableTable.msie = /msie/i.test(navigator.userAgent);\\r\\n// Mozilla is faster when doing the DOM manipulations on\\r\\n// an orphaned element. MSIE is not\\r\\nSortableTable.removeBeforeSort = SortableTable.gecko;\\r\\n\\r\\nSortableTable.prototype.onsort = function () {};\\r\\n\\r\\n// default sort order. true -> descending, false -> ascending\\r\\nSortableTable.prototype.defaultDescending = false;\\r\\n\\r\\n// shared between all instances. This is intentional to allow external files\\r\\n// to modify the prototype\\r\\nSortableTable.prototype._sortTypeInfo = {};\\r\\n\\r\\nSortableTable.prototype.setTable = function (oTable) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.element = oTable;\\r\\n\\tthis.setTHead( oTable.tHead );\\r\\n\\tthis.setTBody( oTable.tBodies[0] );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTHead = function (oTHead) {\\r\\n\\tif (this.tHead && this.tHead != oTHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.tHead = oTHead;\\r\\n\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTBody = function (oTBody) {\\r\\n\\tthis.tBody = oTBody;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\n// adds arrow containers and events\\r\\n// also binds sort type to the header cells so that reordering columns does\\r\\n// not break the sort types\\r\\nSortableTable.prototype.initHeader = function (oSortTypes) {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar doc = this.tHead.ownerDocument || this.tHead.document;\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img, c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (this.sortTypes[i] != null && this.sortTypes[i] != \\\"None\\\") {\\r\\n\\t\\t\\timg = doc.createElement(\\\"IMG\\\");\\r\\n\\t\\t\\timg.src = \\\"images/blank.png\\\";\\r\\n\\t\\t\\tc.appendChild(img);\\r\\n\\t\\t\\tif (this.sortTypes[i] != null)\\r\\n\\t\\t\\t\\tc._sortType = this.sortTypes[i];\\r\\n\\t\\t\\tif (typeof c.addEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.addEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.attachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.attachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\tc.onclick = this._headerOnclick;\\r\\n\\t\\t}\\r\\n\\t\\telse\\r\\n\\t\\t{\\r\\n\\t\\t\\tc.setAttribute( \\\"_sortType\\\", oSortTypes[i] );\\r\\n\\t\\t\\tc._sortType = \\\"None\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\tthis.updateHeaderArrows();\\r\\n};\\r\\n\\r\\n// remove arrows and events\\r\\nSortableTable.prototype.uninitHeader = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (c._sortType != null && c._sortType != \\\"None\\\") {\\r\\n\\t\\t\\tc.removeChild(c.lastChild);\\r\\n\\t\\t\\tif (typeof c.removeEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.removeEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.detachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.detachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\tc._sortType = null;\\r\\n\\t\\t\\tc.removeAttribute( \\\"_sortType\\\" );\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.updateHeaderArrows = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tif (cells[i]._sortType != null && cells[i]._sortType != \\\"None\\\") {\\r\\n\\t\\t\\timg = cells[i].lastChild;\\r\\n\\t\\t\\tif (i == this.sortColumn)\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow \\\" + (this.descending ? \\\"descending\\\" : \\\"ascending\\\");\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.headerOnclick = function (e) {\\r\\n\\t// find TD element\\r\\n\\tvar el = e.target || e.srcElement;\\r\\n\\twhile (el.tagName != \\\"TD\\\")\\r\\n\\t\\tel = el.parentNode;\\r\\n\\r\\n\\tthis.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\\r\\n};\\r\\n\\r\\n// IE returns wrong cellIndex when columns are hidden\\r\\nSortableTable.getCellIndex = function (oTd) {\\r\\n\\tvar cells = oTd.parentNode.childNodes\\r\\n\\tvar l = cells.length;\\r\\n\\tvar i;\\r\\n\\tfor (i = 0; cells[i] != oTd && i < l; i++)\\r\\n\\t\\t;\\r\\n\\treturn i;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getSortType = function (nColumn) {\\r\\n\\treturn this.sortTypes[nColumn] || \\\"String\\\";\\r\\n};\\r\\n\\r\\n// only nColumn is required\\r\\n// if bDescending is left out the old value is taken into account\\r\\n// if sSortType is left out the sort type is found from the sortTypes array\\r\\n\\r\\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\\r\\n\\tif (!this.tBody) return;\\r\\n\\tif (sSortType == null)\\r\\n\\t\\tsSortType = this.getSortType(nColumn);\\r\\n\\r\\n\\t// exit if None\\r\\n\\tif (sSortType == \\\"None\\\")\\r\\n\\t\\treturn;\\r\\n\\r\\n\\tif (bDescending == null) {\\r\\n\\t\\tif (this.sortColumn != nColumn)\\r\\n\\t\\t\\tthis.descending = this.defaultDescending;\\r\\n\\t\\telse\\r\\n\\t\\t\\tthis.descending = !this.descending;\\r\\n\\t}\\r\\n\\telse\\r\\n\\t\\tthis.descending = bDescending;\\r\\n\\r\\n\\tthis.sortColumn = nColumn;\\r\\n\\r\\n\\tif (typeof this.onbeforesort == \\\"function\\\")\\r\\n\\t\\tthis.onbeforesort();\\r\\n\\r\\n\\tvar f = this.getSortFunction(sSortType, nColumn);\\r\\n\\tvar a = this.getCache(sSortType, nColumn);\\r\\n\\tvar tBody = this.tBody;\\r\\n\\r\\n\\ta.sort(f);\\r\\n\\r\\n\\tif (this.descending)\\r\\n\\t\\ta.reverse();\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// remove from doc\\r\\n\\t\\tvar nextSibling = tBody.nextSibling;\\r\\n\\t\\tvar p = tBody.parentNode;\\r\\n\\t\\tp.removeChild(tBody);\\r\\n\\t}\\r\\n\\r\\n\\t// insert in the new order\\r\\n\\tvar l = a.length;\\r\\n\\tfor (var i = 0; i < l; i++)\\r\\n\\t\\ttBody.appendChild(a[i].element);\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// insert into doc\\r\\n\\t\\tp.insertBefore(tBody, nextSibling);\\r\\n\\t}\\r\\n\\r\\n\\tthis.updateHeaderArrows();\\r\\n\\r\\n\\tthis.destroyCache(a);\\r\\n\\r\\n\\tif (typeof this.onsort == \\\"function\\\")\\r\\n\\t\\tthis.onsort();\\r\\n};\\r\\n\\r\\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\\r\\n\\tvar oThis = this;\\r\\n\\tthis._asyncsort = function () {\\r\\n\\t\\toThis.sort(nColumn, bDescending, sSortType);\\r\\n\\t};\\r\\n\\twindow.setTimeout(this._asyncsort, 1);\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getCache = function (sType, nColumn) {\\r\\n\\tif (!this.tBody) return [];\\r\\n\\tvar rows = this.tBody.rows;\\r\\n\\tvar l = rows.length;\\r\\n\\tvar a = new Array(l);\\r\\n\\tvar r;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tr = rows[i];\\r\\n\\t\\ta[i] = {\\r\\n\\t\\t\\tvalue:\\t\\tthis.getRowValue(r, sType, nColumn),\\r\\n\\t\\t\\telement:\\tr\\r\\n\\t\\t};\\r\\n\\t};\\r\\n\\treturn a;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroyCache = function (oArray) {\\r\\n\\tvar l = oArray.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\toArray[i].value = null;\\r\\n\\t\\toArray[i].element = null;\\r\\n\\t\\toArray[i] = null;\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\\r\\n\\t// if we have defined a custom getRowValue use that\\r\\n\\tif (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\\r\\n\\t\\treturn this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\\r\\n\\r\\n\\tvar s;\\r\\n\\tvar c = oRow.cells[nColumn];\\r\\n\\tif (typeof c.innerText != \\\"undefined\\\")\\r\\n\\t\\ts = c.innerText;\\r\\n\\telse\\r\\n\\t\\ts = SortableTable.getInnerText(c);\\r\\n\\treturn this.getValueFromString(s, sType);\\r\\n};\\r\\n\\r\\nSortableTable.getInnerText = function (oNode) {\\r\\n\\tvar s = \\\"\\\";\\r\\n\\tvar cs = oNode.childNodes;\\r\\n\\tvar l = cs.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tswitch (cs[i].nodeType) {\\r\\n\\t\\t\\tcase 1: //ELEMENT_NODE\\r\\n\\t\\t\\t\\ts += SortableTable.getInnerText(cs[i]);\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\tcase 3:\\t//TEXT_NODE\\r\\n\\t\\t\\t\\ts += cs[i].nodeValue;\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\treturn s;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getValueFromString = function (sText, sType) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].getValueFromString( sText );\\r\\n\\treturn sText;\\r\\n\\t/*\\r\\n\\tswitch (sType) {\\r\\n\\t\\tcase \\\"Number\\\":\\r\\n\\t\\t\\treturn Number(sText);\\r\\n\\t\\tcase \\\"CaseInsensitiveString\\\":\\r\\n\\t\\t\\treturn sText.toUpperCase();\\r\\n\\t\\tcase \\\"Date\\\":\\r\\n\\t\\t\\tvar parts = sText.split(\\\"-\\\");\\r\\n\\t\\t\\tvar d = new Date(0);\\r\\n\\t\\t\\td.setFullYear(parts[0]);\\r\\n\\t\\t\\td.setDate(parts[2]);\\r\\n\\t\\t\\td.setMonth(parts[1] - 1);\\r\\n\\t\\t\\treturn d.valueOf();\\r\\n\\t}\\r\\n\\treturn sText;\\r\\n\\t*/\\r\\n\\t};\\r\\n\\r\\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].compare;\\r\\n\\treturn SortableTable.basicCompare;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroy = function () {\\r\\n\\tthis.uninitHeader();\\r\\n\\tvar win = this.document.parentWindow;\\r\\n\\tif (win && typeof win.detachEvent != \\\"undefined\\\") {\\t// only IE needs this\\r\\n\\t\\twin.detachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n\\tthis._onunload = null;\\r\\n\\tthis.element = null;\\r\\n\\tthis.tHead = null;\\r\\n\\tthis.tBody = null;\\r\\n\\tthis.document = null;\\r\\n\\tthis._headerOnclick = null;\\r\\n\\tthis.sortTypes = null;\\r\\n\\tthis._asyncsort = null;\\r\\n\\tthis.onsort = null;\\r\\n};\\r\\n\\r\\n// Adds a sort type to all instance of SortableTable\\r\\n// sType : String - the identifier of the sort type\\r\\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\\r\\n// string and casts it to a desired format. If left out the string is just\\r\\n// returned\\r\\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\\r\\n// compare function. Takes two values and compares them. If left out less than,\\r\\n// <, compare is used\\r\\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\\r\\n// that takes the row and the column index and returns the value used to compare.\\r\\n// If left out then the innerText is first taken for the cell and then the\\r\\n// fGetValueFromString is used to convert that string the desired value and type\\r\\n\\r\\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\\r\\n\\tthis._sortTypeInfo[sType] = {\\r\\n\\t\\ttype:\\t\\t\\t\\tsType,\\r\\n\\t\\tgetValueFromString:\\tfGetValueFromString || SortableTable.idFunction,\\r\\n\\t\\tcompare:\\t\\t\\tfCompareFunction || SortableTable.basicCompare,\\r\\n\\t\\tgetRowValue:\\t\\tfGetRowValue\\r\\n\\t};\\r\\n};\\r\\n\\r\\n// this removes the sort type from all instances of SortableTable\\r\\nSortableTable.prototype.removeSortType = function (sType) {\\r\\n\\tdelete this._sortTypeInfo[sType];\\r\\n};\\r\\n\\r\\nSortableTable.basicCompare = function compare(n1, n2) {\\r\\n\\tif (n1.value < n2.value)\\r\\n\\t\\treturn -1;\\r\\n\\tif (n2.value < n1.value)\\r\\n\\t\\treturn 1;\\r\\n\\treturn 0;\\r\\n};\\r\\n\\r\\nSortableTable.idFunction = function (x) {\\r\\n\\treturn x;\\r\\n};\\r\\n\\r\\nSortableTable.toUpperCase = function (s) {\\r\\n\\treturn s.toUpperCase();\\r\\n};\\r\\n\\r\\nSortableTable.toDate = function (s) {\\r\\n\\tvar parts = s.split(\\\"-\\\");\\r\\n\\tvar d = new Date(0);\\r\\n\\td.setFullYear(parts[0]);\\r\\n\\td.setDate(parts[2]);\\r\\n\\td.setMonth(parts[1] - 1);\\r\\n\\treturn d.valueOf();\\r\\n};\\r\\n\\r\\n\\r\\n// add sort types\\r\\nSortableTable.prototype.addSortType(\\\"Number\\\", Number);\\r\\nSortableTable.prototype.addSortType(\\\"CaseInsensitiveString\\\", SortableTable.toUpperCase);\\r\\nSortableTable.prototype.addSortType(\\\"Date\\\", SortableTable.toDate);\\r\\nSortableTable.prototype.addSortType(\\\"String\\\");\\r\\n// None is a special case\\r\\n\"","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nmodule.exports = function(src) {\n\tfunction log(error) {\n\t\t(typeof console !== \"undefined\")\n\t\t&& (console.error || console.log)(\"[Script Loader]\", error);\n\t}\n\n\t// Check for IE =< 8\n\tfunction isIE() {\n\t\treturn typeof attachEvent !== \"undefined\" && typeof addEventListener === \"undefined\";\n\t}\n\n\ttry {\n\t\tif (typeof execScript !== \"undefined\" && isIE()) {\n\t\t\texecScript(src);\n\t\t} else if (typeof eval !== \"undefined\") {\n\t\t\teval.call(null, src);\n\t\t} else {\n\t\t\tlog(\"EvalError: No eval function available\");\n\t\t}\n\t} catch (error) {\n\t\tlog(error);\n\t}\n}\n","require(\"!!C:\\\\projects\\\\dev\\\\github\\\\TableFilter\\\\node_modules\\\\script-loader\\\\addScript.js\")(require(\"!!C:\\\\projects\\\\dev\\\\github\\\\TableFilter\\\\node_modules\\\\raw-loader\\\\index.js!C:\\\\projects\\\\dev\\\\github\\\\TableFilter\\\\libs\\\\sortabletable.js\")+\"\\n\\n// SCRIPT-LOADER FOOTER\\n//# sourceURL=script:///C:/projects/dev/github/TableFilter/libs/sortabletable.js\")","var map = {\n\t\"./array\": \"./src/array.js\",\n\t\"./array.js\": \"./src/array.js\",\n\t\"./const\": \"./src/const.js\",\n\t\"./const.js\": \"./src/const.js\",\n\t\"./cookie\": \"./src/cookie.js\",\n\t\"./cookie.js\": \"./src/cookie.js\",\n\t\"./dom\": \"./src/dom.js\",\n\t\"./dom.js\": \"./src/dom.js\",\n\t\"./emitter\": \"./src/emitter.js\",\n\t\"./emitter.js\": \"./src/emitter.js\",\n\t\"./event\": \"./src/event.js\",\n\t\"./event.js\": \"./src/event.js\",\n\t\"./extensions/advancedGrid/adapterEzEditTable\": \"./src/extensions/advancedGrid/adapterEzEditTable.js\",\n\t\"./extensions/advancedGrid/adapterEzEditTable.js\": \"./src/extensions/advancedGrid/adapterEzEditTable.js\",\n\t\"./extensions/advancedGrid/advancedGrid\": \"./src/extensions/advancedGrid/advancedGrid.js\",\n\t\"./extensions/advancedGrid/advancedGrid.js\": \"./src/extensions/advancedGrid/advancedGrid.js\",\n\t\"./extensions/colOps/colOps\": \"./src/extensions/colOps/colOps.js\",\n\t\"./extensions/colOps/colOps.js\": \"./src/extensions/colOps/colOps.js\",\n\t\"./extensions/colsVisibility/colsVisibility\": \"./src/extensions/colsVisibility/colsVisibility.js\",\n\t\"./extensions/colsVisibility/colsVisibility.js\": \"./src/extensions/colsVisibility/colsVisibility.js\",\n\t\"./extensions/filtersVisibility/filtersVisibility\": \"./src/extensions/filtersVisibility/filtersVisibility.js\",\n\t\"./extensions/filtersVisibility/filtersVisibility.js\": \"./src/extensions/filtersVisibility/filtersVisibility.js\",\n\t\"./extensions/sort/adapterSortabletable\": \"./src/extensions/sort/adapterSortabletable.js\",\n\t\"./extensions/sort/adapterSortabletable.js\": \"./src/extensions/sort/adapterSortabletable.js\",\n\t\"./extensions/sort/sort\": \"./src/extensions/sort/sort.js\",\n\t\"./extensions/sort/sort.js\": \"./src/extensions/sort/sort.js\",\n\t\"./feature\": \"./src/feature.js\",\n\t\"./feature.js\": \"./src/feature.js\",\n\t\"./modules/alternateRows\": \"./src/modules/alternateRows.js\",\n\t\"./modules/alternateRows.js\": \"./src/modules/alternateRows.js\",\n\t\"./modules/baseDropdown\": \"./src/modules/baseDropdown.js\",\n\t\"./modules/baseDropdown.js\": \"./src/modules/baseDropdown.js\",\n\t\"./modules/checkList\": \"./src/modules/checkList.js\",\n\t\"./modules/checkList.js\": \"./src/modules/checkList.js\",\n\t\"./modules/clearButton\": \"./src/modules/clearButton.js\",\n\t\"./modules/clearButton.js\": \"./src/modules/clearButton.js\",\n\t\"./modules/dateType\": \"./src/modules/dateType.js\",\n\t\"./modules/dateType.js\": \"./src/modules/dateType.js\",\n\t\"./modules/dropdown\": \"./src/modules/dropdown.js\",\n\t\"./modules/dropdown.js\": \"./src/modules/dropdown.js\",\n\t\"./modules/gridLayout\": \"./src/modules/gridLayout.js\",\n\t\"./modules/gridLayout.js\": \"./src/modules/gridLayout.js\",\n\t\"./modules/hash\": \"./src/modules/hash.js\",\n\t\"./modules/hash.js\": \"./src/modules/hash.js\",\n\t\"./modules/help\": \"./src/modules/help.js\",\n\t\"./modules/help.js\": \"./src/modules/help.js\",\n\t\"./modules/highlightKeywords\": \"./src/modules/highlightKeywords.js\",\n\t\"./modules/highlightKeywords.js\": \"./src/modules/highlightKeywords.js\",\n\t\"./modules/loader\": \"./src/modules/loader.js\",\n\t\"./modules/loader.js\": \"./src/modules/loader.js\",\n\t\"./modules/markActiveColumns\": \"./src/modules/markActiveColumns.js\",\n\t\"./modules/markActiveColumns.js\": \"./src/modules/markActiveColumns.js\",\n\t\"./modules/noResults\": \"./src/modules/noResults.js\",\n\t\"./modules/noResults.js\": \"./src/modules/noResults.js\",\n\t\"./modules/paging\": \"./src/modules/paging.js\",\n\t\"./modules/paging.js\": \"./src/modules/paging.js\",\n\t\"./modules/popupFilter\": \"./src/modules/popupFilter.js\",\n\t\"./modules/popupFilter.js\": \"./src/modules/popupFilter.js\",\n\t\"./modules/rowsCounter\": \"./src/modules/rowsCounter.js\",\n\t\"./modules/rowsCounter.js\": \"./src/modules/rowsCounter.js\",\n\t\"./modules/state\": \"./src/modules/state.js\",\n\t\"./modules/state.js\": \"./src/modules/state.js\",\n\t\"./modules/statusBar\": \"./src/modules/statusBar.js\",\n\t\"./modules/statusBar.js\": \"./src/modules/statusBar.js\",\n\t\"./modules/storage\": \"./src/modules/storage.js\",\n\t\"./modules/storage.js\": \"./src/modules/storage.js\",\n\t\"./modules/toolbar\": \"./src/modules/toolbar.js\",\n\t\"./modules/toolbar.js\": \"./src/modules/toolbar.js\",\n\t\"./number\": \"./src/number.js\",\n\t\"./number.js\": \"./src/number.js\",\n\t\"./root\": \"./src/root.js\",\n\t\"./root.js\": \"./src/root.js\",\n\t\"./settings\": \"./src/settings.js\",\n\t\"./settings.js\": \"./src/settings.js\",\n\t\"./sort\": \"./src/sort.js\",\n\t\"./sort.js\": \"./src/sort.js\",\n\t\"./string\": \"./src/string.js\",\n\t\"./string.js\": \"./src/string.js\",\n\t\"./tablefilter\": \"./src/tablefilter.js\",\n\t\"./tablefilter.js\": \"./src/tablefilter.js\",\n\t\"./tfBase\": \"./src/tfBase.js\",\n\t\"./tfBase.js\": \"./src/tfBase.js\",\n\t\"./types\": \"./src/types.js\",\n\t\"./types.js\": \"./src/types.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\tvar module = __webpack_require__(id);\n\treturn module;\n}\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) { // check for number or string\n\t\tvar e = new Error('Cannot find module \"' + req + '\".');\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn id;\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src sync recursive ^\\\\.\\\\/.*$\";","import {Feature} from '../../feature';\r\nimport {tag} from '../../dom';\r\nimport {INPUT} from '../../const';\r\nimport {defaultsStr} from '../../settings';\r\nimport {root} from '../../root';\r\n\r\nconst INSTANTIATION_ERROR = `Failed to instantiate EditTable object.\r\n \\n\"ezEditTable\" dependency not found.`;\r\n\r\n/**\r\n * Adapter module for ezEditTable, an external library providing advanced\r\n * grid features (selection and edition):\r\n * http://codecanyon.net/item/ezedittable-enhance-html-tables/2425123?ref=koalyptus\r\n */\r\nexport default class AdapterEzEditTable extends Feature {\r\n\r\n /**\r\n * Creates an instance of AdapterEzEditTable\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} cfg Configuration options for ezEditTable library\r\n */\r\n constructor(tf, cfg) {\r\n super(tf, cfg.name);\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(cfg.description, 'ezEditTable adapter');\r\n\r\n /**\r\n * Filename of ezEditTable library\r\n * @type {String}\r\n */\r\n this.filename = defaultsStr(cfg.filename, 'ezEditTable.js');\r\n\r\n /**\r\n * Path to ezEditTable library\r\n * @type {String}\r\n */\r\n this.vendorPath = cfg.vendor_path;\r\n\r\n /**\r\n * Load ezEditTable stylesheet\r\n * @type {Boolean}\r\n */\r\n this.loadStylesheet = Boolean(cfg.load_stylesheet);\r\n\r\n /**\r\n * Path to ezEditTable stylesheet\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(cfg.stylesheet,\r\n this.vendorPath + 'ezEditTable.css');\r\n\r\n /**\r\n * Name of ezEditTable stylesheet\r\n * @type {String}\r\n */\r\n this.stylesheetName = defaultsStr(cfg.stylesheet_name,\r\n 'ezEditTableCss');\r\n\r\n // Enable the ezEditTable's scroll into view behaviour if grid layout on\r\n cfg.scroll_into_view = cfg.scroll_into_view === false ?\r\n false : tf.gridLayout;\r\n\r\n /**\r\n * ezEditTable instance\r\n * @type {EditTable}\r\n * @private\r\n */\r\n this._ezEditTable = null;\r\n\r\n /**\r\n * ezEditTable configuration\r\n * @private\r\n */\r\n this.cfg = cfg;\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Conditionally load ezEditTable library and set advanced grid\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n if (root.EditTable) {\r\n this._setAdvancedGrid();\r\n } else {\r\n let path = this.vendorPath + this.filename;\r\n tf.import(this.filename, path, () => this._setAdvancedGrid());\r\n }\r\n if (this.loadStylesheet && !tf.isImported(this.stylesheet, 'link')) {\r\n tf.import(this.stylesheetName, this.stylesheet, null, 'link');\r\n }\r\n\r\n // TODO: hack to prevent ezEditTable enter key event hijaking.\r\n // Needs to be fixed in the vendor's library\r\n this.emitter.on(['filter-focus', 'filter-blur'],\r\n () => this._toggleForInputFilter());\r\n\r\n /**\r\n * @inherited\r\n */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Instantiate ezEditTable component for advanced grid features\r\n * @private\r\n */\r\n _setAdvancedGrid() {\r\n let tf = this.tf;\r\n\r\n //start row for EditTable constructor needs to be calculated\r\n let startRow,\r\n cfg = this.cfg,\r\n thead = tag(tf.dom(), 'thead');\r\n\r\n //if thead exists and startRow not specified, startRow is calculated\r\n //automatically by EditTable\r\n if (thead.length > 0 && !cfg.startRow) {\r\n startRow = undefined;\r\n }\r\n //otherwise startRow config property if any or TableFilter refRow\r\n else {\r\n startRow = cfg.startRow || tf.refRow;\r\n }\r\n\r\n cfg.base_path = cfg.base_path || tf.basePath + 'ezEditTable/';\r\n let editable = cfg.editable;\r\n let selectable = cfg.selection;\r\n\r\n if (selectable) {\r\n cfg.default_selection = cfg.default_selection || 'row';\r\n }\r\n //CSS Styles\r\n cfg.active_cell_css = cfg.active_cell_css || 'ezETSelectedCell';\r\n\r\n let _lastValidRowIndex = 0;\r\n let _lastRowIndex = 0;\r\n\r\n if (selectable) {\r\n //Row navigation needs to be calculated according to TableFilter's\r\n //validRowsIndex array\r\n let onAfterSelection = function (et, selectedElm, e) {\r\n let slc = et.Selection;\r\n //Next valid filtered row needs to be selected\r\n let doSelect = function (nextRowIndex) {\r\n if (et.defaultSelection === 'row') {\r\n /* eslint-disable */\r\n slc.SelectRowByIndex(nextRowIndex);\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n et.ClearSelections();\r\n /* eslint-enable */\r\n let cellIndex = selectedElm.cellIndex,\r\n row = tf.dom().rows[nextRowIndex];\r\n if (et.defaultSelection === 'both') {\r\n /* eslint-disable */\r\n slc.SelectRowByIndex(nextRowIndex);\r\n /* eslint-enable */\r\n }\r\n if (row) {\r\n /* eslint-disable */\r\n slc.SelectCell(row.cells[cellIndex]);\r\n /* eslint-enable */\r\n }\r\n }\r\n //Table is filtered\r\n if (tf.validRowsIndex.length !== tf.getRowsNb()) {\r\n let r = tf.dom().rows[nextRowIndex];\r\n if (r) {\r\n r.scrollIntoView(false);\r\n }\r\n if (cell) {\r\n if (cell.cellIndex === (tf.getCellsNb() - 1) &&\r\n tf.gridLayout) {\r\n tf.tblCont.scrollLeft = 100000000;\r\n }\r\n else if (cell.cellIndex === 0 && tf.gridLayout) {\r\n tf.tblCont.scrollLeft = 0;\r\n } else {\r\n cell.scrollIntoView(false);\r\n }\r\n }\r\n }\r\n };\r\n\r\n //table is not filtered\r\n if (!tf.validRowsIndex) {\r\n return;\r\n }\r\n let validIndexes = tf.validRowsIndex,\r\n validIdxLen = validIndexes.length,\r\n row = et.defaultSelection !== 'row' ?\r\n selectedElm.parentNode : selectedElm,\r\n //cell for default_selection = 'both' or 'cell'\r\n cell = selectedElm.nodeName === 'TD' ? selectedElm : null,\r\n /* eslint-disable */\r\n keyCode = e !== undefined ? et.Event.GetKey(e) : 0,\r\n /* eslint-enable */\r\n isRowValid = validIndexes.indexOf(row.rowIndex) !== -1,\r\n nextRowIndex,\r\n paging = tf.feature('paging'),\r\n //pgup/pgdown keys\r\n d = keyCode === 34 || keyCode === 33 ?\r\n (paging && paging.pageLength || et.nbRowsPerPage) :\r\n 1;\r\n\r\n //If next row is not valid, next valid filtered row needs to be\r\n //calculated\r\n if (!isRowValid) {\r\n //Selection direction up/down\r\n if (row.rowIndex > _lastRowIndex) {\r\n //last row\r\n if (row.rowIndex >= validIndexes[validIdxLen - 1]) {\r\n nextRowIndex = validIndexes[validIdxLen - 1];\r\n } else {\r\n let calcRowIndex = (_lastValidRowIndex + d);\r\n if (calcRowIndex > (validIdxLen - 1)) {\r\n nextRowIndex = validIndexes[validIdxLen - 1];\r\n } else {\r\n nextRowIndex = validIndexes[calcRowIndex];\r\n }\r\n }\r\n } else {\r\n //first row\r\n if (row.rowIndex <= validIndexes[0]) {\r\n nextRowIndex = validIndexes[0];\r\n } else {\r\n let v = validIndexes[_lastValidRowIndex - d];\r\n nextRowIndex = v ? v : validIndexes[0];\r\n }\r\n }\r\n _lastRowIndex = row.rowIndex;\r\n doSelect(nextRowIndex);\r\n } else {\r\n //If filtered row is valid, special calculation for\r\n //pgup/pgdown keys\r\n if (keyCode !== 34 && keyCode !== 33) {\r\n _lastValidRowIndex = validIndexes.indexOf(row.rowIndex);\r\n _lastRowIndex = row.rowIndex;\r\n } else {\r\n if (keyCode === 34) { //pgdown\r\n //last row\r\n if ((_lastValidRowIndex + d) <= (validIdxLen - 1)) {\r\n nextRowIndex = validIndexes[\r\n _lastValidRowIndex + d];\r\n } else {\r\n nextRowIndex = [validIdxLen - 1];\r\n }\r\n } else { //pgup\r\n //first row\r\n if ((_lastValidRowIndex - d) <= validIndexes[0]) {\r\n nextRowIndex = validIndexes[0];\r\n } else {\r\n nextRowIndex = validIndexes[\r\n _lastValidRowIndex - d];\r\n }\r\n }\r\n _lastRowIndex = nextRowIndex;\r\n _lastValidRowIndex = validIndexes.indexOf(nextRowIndex);\r\n doSelect(nextRowIndex);\r\n }\r\n }\r\n };\r\n\r\n //Page navigation has to be enforced whenever selected row is out of\r\n //the current page range\r\n let onBeforeSelection = function (et, selectedElm) {\r\n let row = et.defaultSelection !== 'row' ?\r\n selectedElm.parentNode : selectedElm;\r\n if (tf.paging) {\r\n if (tf.feature('paging').nbPages > 1) {\r\n let paging = tf.feature('paging');\r\n //page length is re-assigned in case it has changed\r\n et.nbRowsPerPage = paging.pageLength;\r\n let validIndexes = tf.validRowsIndex,\r\n validIdxLen = validIndexes.length,\r\n pagingEndRow = parseInt(paging.startPagingRow, 10) +\r\n parseInt(paging.pageLength, 10);\r\n let rowIndex = row.rowIndex;\r\n\r\n if ((rowIndex === validIndexes[validIdxLen - 1]) &&\r\n paging.currentPageNb !== paging.nbPages) {\r\n paging.setPage('last');\r\n }\r\n else if ((rowIndex === validIndexes[0]) &&\r\n paging.currentPageNb !== 1) {\r\n paging.setPage('first');\r\n }\r\n else if (rowIndex > validIndexes[pagingEndRow - 1] &&\r\n rowIndex < validIndexes[validIdxLen - 1]) {\r\n paging.setPage('next');\r\n }\r\n else if (\r\n rowIndex < validIndexes[paging.startPagingRow] &&\r\n rowIndex > validIndexes[0]) {\r\n paging.setPage('previous');\r\n }\r\n }\r\n }\r\n };\r\n\r\n //Selected row needs to be visible when paging is activated\r\n if (tf.paging) {\r\n tf.feature('paging').onAfterChangePage = function (paging) {\r\n let advGrid = paging.tf.extension('advancedGrid');\r\n let et = advGrid._ezEditTable;\r\n let slc = et.Selection;\r\n /* eslint-disable */\r\n let row = slc.GetActiveRow();\r\n /* eslint-enable */\r\n if (row) {\r\n row.scrollIntoView(false);\r\n }\r\n /* eslint-disable */\r\n let cell = slc.GetActiveCell();\r\n /* eslint-enable */\r\n if (cell) {\r\n cell.scrollIntoView(false);\r\n }\r\n };\r\n }\r\n\r\n //Rows navigation when rows are filtered is performed with the\r\n //EditTable row selection callback events\r\n if (cfg.default_selection === 'row') {\r\n let fnB = cfg.on_before_selected_row;\r\n cfg.on_before_selected_row = function () {\r\n var args = arguments;\r\n onBeforeSelection(args[0], args[1], args[2]);\r\n if (fnB) {\r\n fnB.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n let fnA = cfg.on_after_selected_row;\r\n cfg.on_after_selected_row = function () {\r\n var args = arguments;\r\n onAfterSelection(args[0], args[1], args[2]);\r\n if (fnA) {\r\n fnA.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n } else {\r\n let fnD = cfg.on_before_selected_cell;\r\n cfg.on_before_selected_cell = function () {\r\n var args = arguments;\r\n onBeforeSelection(args[0], args[1], args[2]);\r\n if (fnD) {\r\n fnD.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n let fnC = cfg.on_after_selected_cell;\r\n cfg.on_after_selected_cell = function () {\r\n var args = arguments;\r\n onAfterSelection(args[0], args[1], args[2]);\r\n if (fnC) {\r\n fnC.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n }\r\n }\r\n if (editable) {\r\n //Added or removed rows, TF rows number needs to be re-calculated\r\n let fnE = cfg.on_added_dom_row;\r\n cfg.on_added_dom_row = function () {\r\n var args = arguments;\r\n tf.nbFilterableRows++;\r\n if (!tf.paging) {\r\n tf.emitter.emit('rows-changed', tf, this);\r\n } else {\r\n tf.nbFilterableRows++;\r\n tf.paging = false;\r\n tf.feature('paging').destroy();\r\n tf.feature('paging').reset();\r\n }\r\n if (tf.alternateRows) {\r\n tf.feature('alternateRows').init();\r\n }\r\n if (fnE) {\r\n fnE.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n if (cfg.actions && cfg.actions['delete']) {\r\n let fnF = cfg.actions['delete'].on_after_submit;\r\n cfg.actions['delete'].on_after_submit = function () {\r\n var args = arguments;\r\n tf.nbFilterableRows--;\r\n if (!tf.paging) {\r\n tf.emitter.emit('rows-changed', tf, this);\r\n } else {\r\n tf.nbFilterableRows--;\r\n tf.paging = false;\r\n tf.feature('paging').destroy();\r\n tf.feature('paging').reset(false);\r\n }\r\n if (tf.alternateRows) {\r\n tf.feature('alternateRows').init();\r\n }\r\n if (fnF) {\r\n fnF.call(null, args[0], args[1]);\r\n }\r\n };\r\n }\r\n }\r\n\r\n try {\r\n /* eslint-disable */\r\n this._ezEditTable = new EditTable(tf.id, cfg, startRow);\r\n this._ezEditTable.Init();\r\n /* eslint-enable */\r\n } catch (e) { throw new Error(INSTANTIATION_ERROR); }\r\n\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Reset advanced grid when previously removed\r\n */\r\n reset() {\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable) {\r\n if (this.cfg.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Set();\r\n /* eslint-enable */\r\n }\r\n if (this.cfg.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Set();\r\n /* eslint-enable */\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Toggle behaviour\r\n */\r\n toggle() {\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Remove();\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Set();\r\n /* eslint-enable */\r\n }\r\n if (ezEditTable.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Remove();\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Set();\r\n /* eslint-enable */\r\n }\r\n }\r\n\r\n _toggleForInputFilter() {\r\n let tf = this.tf;\r\n if (!tf.getActiveFilterId()) {\r\n return;\r\n }\r\n let colIndex = tf.getColumnIndexFromFilterId(tf.getActiveFilterId());\r\n let filterType = tf.getFilterType(colIndex);\r\n if (filterType === INPUT) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n /**\r\n * Remove advanced grid\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable) {\r\n if (this.cfg.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.ClearSelections();\r\n ezEditTable.Selection.Remove();\r\n /* eslint-enable */\r\n }\r\n if (this.cfg.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Remove();\r\n /* eslint-enable */\r\n }\r\n }\r\n\r\n this.emitter.off(['filter-focus', 'filter-blur'],\r\n () => this._toggleForInputFilter());\r\n this.initialized = false;\r\n }\r\n}\r\n","import AdapterEzEditTable from './adapterEzEditTable';\r\n\r\nexport default AdapterEzEditTable;","import {Feature} from '../../feature';\r\nimport {createText, elm} from '../../dom';\r\nimport {isArray, isEmpty, EMPTY_FN} from '../../types';\r\nimport {numSortAsc} from '../../sort';\r\nimport {FORMATTED_NUMBER} from '../../const';\r\nimport formatNumber from 'format-number';\r\nimport {defaultsFn, defaultsArr} from '../../settings';\r\nimport {bound} from '../../event';\r\n\r\nconst EVENTS = [\r\n 'after-filtering',\r\n 'after-page-change',\r\n 'after-page-length-change'\r\n];\r\n\r\nconst SUM = 'sum';\r\nconst MEAN = 'mean';\r\nconst MIN = 'min';\r\nconst MAX = 'max';\r\nconst MEDIAN = 'median';\r\nconst Q1 = 'q1';\r\nconst Q3 = 'q3';\r\n\r\n/**\r\n * Column calculations extension\r\n */\r\nexport default class ColOps extends Feature {\r\n\r\n /**\r\n * Creates an instance of ColOps\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} opts Configuration object\r\n */\r\n constructor(tf, opts) {\r\n super(tf, opts.name);\r\n\r\n /**\r\n * Callback fired before columns operations start\r\n * @type {Function}\r\n */\r\n this.onBeforeOperation = defaultsFn(opts.on_before_operation, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after columns operations are completed\r\n * @type {Function}\r\n */\r\n this.onAfterOperation = defaultsFn(opts.on_after_operation, EMPTY_FN);\r\n\r\n /**\r\n * Configuration options\r\n * @type {Object}\r\n */\r\n this.opts = opts;\r\n\r\n /**\r\n * List of DOM element IDs containing column's calculation result\r\n * @type {Array}\r\n */\r\n this.labelIds = defaultsArr(opts.id, []);\r\n\r\n /**\r\n * List of columns' indexes for calculations\r\n * @type {Array}\r\n */\r\n this.colIndexes = defaultsArr(opts.col, []);\r\n\r\n /**\r\n * List of operations - possible values: 'sum', 'mean', 'min', 'max',\r\n * 'median', 'q1', 'q3'\r\n * @type {Array}\r\n */\r\n this.operations = defaultsArr(opts.operation, []);\r\n\r\n /**\r\n * List of write methods used to write the result - possible values:\r\n * 'innerHTML', 'setValue', 'createTextNode'\r\n * @type {Array}\r\n */\r\n this.outputTypes = defaultsArr(opts.write_method, []);\r\n\r\n /**\r\n * List of format objects used for formatting the result -\r\n * refer to https://github.com/componitable/format-number to check\r\n * configuration options\r\n * @type {Array}\r\n */\r\n this.formatResults = defaultsArr(opts.format_result, []);\r\n\r\n /**\r\n * List of row indexes displaying the results\r\n * @type {Array}\r\n */\r\n this.totRowIndexes = defaultsArr(opts.tot_row_index, []);\r\n\r\n /**\r\n * List of row indexes excluded from calculations\r\n * @type {Array}\r\n */\r\n this.excludeRows = defaultsArr(opts.exclude_row, []);\r\n\r\n /**\r\n * List of decimal precision for calculation results\r\n * @type {Array}\r\n */\r\n this.decimalPrecisions = defaultsArr(opts.decimal_precision, 2);\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initializes ColOps instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n // subscribe to events\r\n this.emitter.on(EVENTS, bound(this.calcAll, this));\r\n\r\n this.calcAll();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Calculates columns' values\r\n * Configuration options are stored in 'opts' property\r\n * - 'id' contains ids of elements showing result (array)\r\n * - 'col' contains the columns' indexes (array)\r\n * - 'operation' contains operation type (array, values: 'sum', 'mean',\r\n * 'min', 'max', 'median', 'q1', 'q3')\r\n * - 'write_method' array defines which method to use for displaying the\r\n * result (innerHTML, setValue, createTextNode) - default: 'innerHTML'\r\n * - 'tot_row_index' defines in which row results are displayed\r\n * (integers array)\r\n *\r\n * - changes made by Nuovella:\r\n * (1) optimized the routine (now it will only process each column once),\r\n * (2) added calculations for the median, lower and upper quartile.\r\n */\r\n calcAll() {\r\n let tf = this.tf;\r\n if (!tf.isInitialized()) {\r\n return;\r\n }\r\n\r\n this.onBeforeOperation(tf, this);\r\n this.emitter.emit('before-column-operation', tf, this);\r\n\r\n let { colIndexes, operations: colOperations, outputTypes,\r\n totRowIndexes, excludeRows, formatResults,\r\n decimalPrecisions } = this;\r\n\r\n //nuovella: determine unique list of columns to operate on\r\n let uIndexes = [];\r\n colIndexes.forEach((val) => {\r\n if (uIndexes.indexOf(val) === -1) {\r\n uIndexes.push(val);\r\n }\r\n });\r\n\r\n let nbCols = uIndexes.length,\r\n rows = tf.dom().rows,\r\n colValues = [];\r\n\r\n for (let u = 0; u < nbCols; u++) {\r\n //this retrieves col values\r\n //use uIndexes because we only want to pass through this loop\r\n //once for each column get the values in this unique column\r\n colValues.push(\r\n tf.getVisibleColumnData(uIndexes[u], false, excludeRows)\r\n );\r\n\r\n let curValues = colValues[u];\r\n\r\n //next: calculate all operations for this column\r\n let result = 0,\r\n operations = [],\r\n precisions = [],\r\n labels = [],\r\n writeType,\r\n formatResult = [],\r\n idx = 0;\r\n\r\n for (let k = 0; k < colIndexes.length; k++) {\r\n if (colIndexes[k] !== uIndexes[u]) {\r\n continue;\r\n }\r\n operations[idx] = (colOperations[k] || 'sum').toLowerCase();\r\n precisions[idx] = decimalPrecisions[k];\r\n labels[idx] = this.labelIds[k];\r\n writeType = isArray(outputTypes) ? outputTypes[k] : null;\r\n formatResult[idx] =\r\n this.configureFormat(uIndexes[u], formatResults[k]);\r\n idx++;\r\n }\r\n\r\n for (let i = 0; i < idx; i++) {\r\n // emit values before column calculation\r\n this.emitter.emit(\r\n 'before-column-calc',\r\n tf,\r\n this,\r\n uIndexes[u],\r\n curValues,\r\n operations[i],\r\n precisions[i]\r\n );\r\n\r\n result = Number(this.calc(curValues, operations[i], null));\r\n\r\n // emit column calculation result\r\n this.emitter.emit(\r\n 'column-calc',\r\n tf,\r\n this,\r\n uIndexes[u],\r\n result,\r\n operations[i],\r\n precisions[i]\r\n );\r\n\r\n // write result in expected DOM element\r\n this.writeResult(\r\n result,\r\n labels[i],\r\n writeType,\r\n precisions[i],\r\n formatResult[i]\r\n );\r\n\r\n }//for i\r\n\r\n // row(s) with result are always visible\r\n let totRow = totRowIndexes && totRowIndexes[u] ?\r\n rows[totRowIndexes[u]] : null;\r\n if (totRow) {\r\n totRow.style.display = '';\r\n }\r\n }//for u\r\n\r\n this.onAfterOperation(tf, this);\r\n this.emitter.emit('after-column-operation', tf, this);\r\n }\r\n\r\n /**\r\n * Make desired calculation on specified column.\r\n * @param {Number} colIndex Column index\r\n * @param {String} [operation=SUM] Operation type\r\n * @param {Number} precision Decimal precision\r\n * @returns {Number}\r\n */\r\n columnCalc(colIndex, operation = SUM, precision) {\r\n let excludeRows = this.excludeRows || [];\r\n let colValues = tf.getVisibleColumnData(colIndex, false, excludeRows);\r\n\r\n return Number(this.calc(colValues, operation, precision));\r\n }\r\n\r\n /**\r\n * Make calculation on passed values.\r\n * @param {Array} values List of values\r\n * @param {String} [operation=SUM] Optional operation type\r\n * @param {Number} precision Optional result precision\r\n * @returns {Number}\r\n * @private\r\n */\r\n calc(colValues, operation = SUM, precision) {\r\n let result = 0;\r\n\r\n if (operation === Q1 || operation === Q3 || operation === MEDIAN) {\r\n colValues = this.sortColumnValues(colValues, numSortAsc);\r\n }\r\n\r\n switch (operation) {\r\n case MEAN:\r\n result = this.calcMean(colValues);\r\n break;\r\n case SUM:\r\n result = this.calcSum(colValues);\r\n break;\r\n case MIN:\r\n result = this.calcMin(colValues);\r\n break;\r\n case MAX:\r\n result = this.calcMax(colValues);\r\n break;\r\n case MEDIAN:\r\n result = this.calcMedian(colValues);\r\n break;\r\n case Q1:\r\n result = this.calcQ1(colValues);\r\n break;\r\n case Q3:\r\n result = this.calcQ3(colValues);\r\n break;\r\n }\r\n\r\n return isEmpty(precision) ? result : result.toFixed(precision);\r\n }\r\n\r\n /**\r\n * Calculate the sum of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcSum(values = []) {\r\n if (isEmpty(values)) {\r\n return 0;\r\n }\r\n let result = values.reduce((x, y) => Number(x) + Number(y));\r\n return result;\r\n }\r\n\r\n /**\r\n * Calculate the mean of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMean(values = []) {\r\n let result = this.calcSum(values) / values.length;\r\n return Number(result);\r\n }\r\n\r\n /**\r\n * Calculate the max value of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMax(values = []) {\r\n return Math.max.apply(null, values);\r\n }\r\n\r\n /**\r\n * Calculate the min value of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMin(values = []) {\r\n return Math.min.apply(null, values);\r\n }\r\n\r\n /**\r\n * Calculate the median of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMedian(values = []) {\r\n let nbValues = values.length;\r\n let aux = 0;\r\n if (nbValues % 2 === 1) {\r\n aux = Math.floor(nbValues / 2);\r\n return Number(values[aux]);\r\n }\r\n return (Number(values[nbValues / 2]) +\r\n Number(values[((nbValues / 2) - 1)])) / 2;\r\n }\r\n\r\n /**\r\n * Calculate the lower quartile of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcQ1(values = []) {\r\n let nbValues = values.length;\r\n let posa = 0.0;\r\n posa = Math.floor(nbValues / 4);\r\n if (4 * posa === nbValues) {\r\n return (Number(values[posa - 1]) +\r\n Number(values[posa])) / 2;\r\n }\r\n return Number(values[posa]);\r\n }\r\n\r\n /**\r\n * Calculate the upper quartile of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcQ3(values = []) {\r\n let nbValues = values.length;\r\n let posa = 0.0;\r\n let posb = 0.0;\r\n posa = Math.floor(nbValues / 4);\r\n if (4 * posa === nbValues) {\r\n posb = 3 * posa;\r\n return (Number(values[posb]) +\r\n Number(values[posb - 1])) / 2;\r\n }\r\n return Number(values[nbValues - posa - 1]);\r\n }\r\n\r\n /**\r\n * Sort passed values with supplied sorter function.\r\n * @param {Array} [values=[]] List of values to be sorted\r\n * @param {Function} sorter Sorter function\r\n * @returns {Array}\r\n */\r\n sortColumnValues(values = [], sorter) {\r\n return values.sort(sorter);\r\n }\r\n\r\n /**\r\n * Write calculation result in passed DOM element with supplied write method\r\n * and decimal precision.\r\n * @param {Number} [result=0] Calculation result\r\n * @param {DOMElement} label DOM element\r\n * @param {String} [writeType='innerhtml'] Write method\r\n * @param {Number} [precision=2] Applied decimal precision\r\n * @private\r\n */\r\n writeResult(result = 0, label, writeType = 'innerhtml',\r\n precision = 2, format = {}) {\r\n let labelElm = elm(label);\r\n\r\n if (!labelElm) {\r\n return;\r\n }\r\n\r\n result = result.toFixed(precision);\r\n if (isNaN(result) || !isFinite(result)) {\r\n result = '';\r\n } else {\r\n result = formatNumber(format)(result);\r\n }\r\n\r\n switch (writeType.toLowerCase()) {\r\n case 'innerhtml':\r\n labelElm.innerHTML = result;\r\n break;\r\n case 'setvalue':\r\n labelElm.value = result;\r\n break;\r\n case 'createtextnode':\r\n let oldNode = labelElm.firstChild;\r\n let txtNode = createText(result);\r\n labelElm.replaceChild(txtNode, oldNode);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Configure the format options used to format the operation result based\r\n * on column type.\r\n * @param {Number} colIndex Column index\r\n * @param {Object} [format={}] Format object\r\n * @returns {Object}\r\n * @private\r\n */\r\n configureFormat(colIndex, format = {}) {\r\n let tf = this.tf;\r\n if (tf.hasType(colIndex, [FORMATTED_NUMBER])) {\r\n let colType = tf.colTypes[colIndex];\r\n if (colType.decimal && !format.decimal) {\r\n format.decimal = colType.decimal;\r\n }\r\n if (colType.thousands && !format.integerSeparator) {\r\n format.integerSeparator = colType.thousands;\r\n }\r\n } else {\r\n format.decimal = format.decimal || '';\r\n format.integerSeparator = format.integerSeparator || '';\r\n }\r\n return format;\r\n }\r\n\r\n /** Remove extension */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n // unsubscribe to events\r\n this.emitter.off(EVENTS, bound(this.calcAll, this));\r\n\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {\r\n addClass, removeClass, createCheckItem, createElm, elm, removeElm,\r\n getText, tag\r\n} from '../../dom';\r\nimport {isUndef, EMPTY_FN, isNull} from '../../types';\r\nimport {addEvt, targetEvt, removeEvt} from '../../event';\r\nimport {root} from '../../root';\r\nimport {NONE} from '../../const';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsFn, defaultsNb, defaultsArr\r\n} from '../../settings';\r\nimport {RIGHT} from '../../modules/toolbar';\r\n\r\n/**\r\n * Columns Visibility extension\r\n */\r\nexport default class ColsVisibility extends Feature {\r\n\r\n /**\r\n * Creates an instance of ColsVisibility\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} Configuration object\r\n */\r\n constructor(tf, f) {\r\n super(tf, f.name);\r\n\r\n // Configuration object\r\n let cfg = this.config;\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(f.description, 'Columns visibility manager');\r\n\r\n /**\r\n * show/hide columns container element\r\n * @private\r\n */\r\n this.spanEl = null;\r\n\r\n /**\r\n * show/hide columns button element\r\n * @private\r\n */\r\n this.btnEl = null;\r\n\r\n /**\r\n * show/hide columns main container element\r\n * @private\r\n */\r\n this.contEl = null;\r\n\r\n /**\r\n * Enable tick to hide a column, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.tickToHide = defaultsBool(f.tick_to_hide, true);\r\n\r\n /**\r\n * Enable columns manager UI, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.manager = defaultsBool(f.manager, true);\r\n\r\n /**\r\n * Headers HTML table reference only if headers are external\r\n * @type {DOMElement}\r\n */\r\n this.headersTbl = f.headers_table || null;\r\n\r\n /**\r\n * Headers row index only if headers are external\r\n * @type {Number}\r\n */\r\n this.headersIndex = defaultsNb(f.headers_index, 1);\r\n\r\n /**\r\n * ID of main container element\r\n * @type {String}\r\n */\r\n this.contElTgtId = defaultsStr(f.container_target_id, null);\r\n\r\n /**\r\n * Alternative text for column headers in column manager UI\r\n * @type {Array}\r\n */\r\n this.headersText = defaultsArr(f.headers_text, []);\r\n\r\n /**\r\n * ID of button's container element\r\n * @type {String}\r\n */\r\n this.btnTgtId = defaultsStr(f.btn_target_id, null);\r\n\r\n /**\r\n * Button's text, defaults to Columns▼\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, 'Columns▼');\r\n\r\n /**\r\n * Button's inner HTML\r\n * @type {String}\r\n */\r\n this.btnHtml = defaultsStr(f.btn_html, null);\r\n\r\n /**\r\n * Css class for button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'colVis');\r\n\r\n /**\r\n * Columns manager UI close link text, defaults to 'Close'\r\n * @type {String}\r\n */\r\n this.btnCloseText = defaultsStr(f.btn_close_text, 'Close');\r\n\r\n /**\r\n * Columns manager UI close link HTML\r\n * @type {String}\r\n */\r\n this.btnCloseHtml = defaultsStr(f.btn_close_html, null);\r\n\r\n /**\r\n * Css for columns manager UI close link\r\n * @type {String}\r\n */\r\n this.btnCloseCssClass = defaultsStr(f.btn_close_css_class,\r\n this.btnCssClass);\r\n\r\n /**\r\n * Extension's stylesheet filename\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(f.stylesheet, 'colsVisibility.css');\r\n\r\n /**\r\n * Css for columns manager UI span\r\n * @type {String}\r\n */\r\n this.spanCssClass = defaultsStr(f.span_css_class, 'colVisSpan');\r\n\r\n /**\r\n * Css for columns manager UI main container\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.cont_css_class, 'colVisCont');\r\n\r\n /**\r\n * Css for columns manager UI checklist (ul)\r\n * @type {String}\r\n */\r\n this.listCssClass = defaultsStr(cfg.list_css_class, 'cols_checklist');\r\n\r\n /**\r\n * Css for columns manager UI checklist item (li)\r\n * @type {String}\r\n */\r\n this.listItemCssClass = defaultsStr(cfg.checklist_item_css_class,\r\n 'cols_checklist_item');\r\n\r\n /**\r\n * Css for columns manager UI checklist item selected state (li)\r\n * @type {String}\r\n */\r\n this.listSlcItemCssClass = defaultsStr(\r\n cfg.checklist_selected_item_css_class,\r\n 'cols_checklist_slc_item'\r\n );\r\n\r\n /**\r\n * Text preceding the columns list, defaults to 'Hide' or 'Show'\r\n * depending on tick mode (tick_to_hide option)\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, this.tickToHide ? 'Hide: ' : 'Show: ');\r\n\r\n /**\r\n * List of columns indexes to be hidden at initialization\r\n * @type {Array}\r\n */\r\n this.atStart = defaultsArr(f.at_start, []);\r\n\r\n /**\r\n * Enable hover behaviour on columns manager button/link\r\n * @type {Boolean}\r\n */\r\n this.enableHover = Boolean(f.enable_hover);\r\n\r\n /**\r\n * Enable select all option, disabled by default\r\n * @type {Boolean}\r\n */\r\n this.enableTickAll = Boolean(f.enable_tick_all);\r\n\r\n /**\r\n * Text for select all option, defaults to 'Select all:'\r\n * @type {String}\r\n */\r\n this.tickAllText = defaultsStr(f.tick_all_text, 'Select all:');\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\r\n\r\n /**\r\n * List of indexes of hidden columns\r\n * @private\r\n */\r\n this.hiddenCols = [];\r\n\r\n /**\r\n * Bound mouseup wrapper\r\n * @private\r\n */\r\n this.boundMouseup = null;\r\n\r\n /**\r\n * Callback fired when the extension is initialized\r\n * @type {Function}\r\n */\r\n this.onLoaded = defaultsFn(f.on_loaded, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before the columns manager is opened\r\n * @type {Function}\r\n */\r\n this.onBeforeOpen = defaultsFn(f.on_before_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the columns manager is opened\r\n * @type {Function}\r\n */\r\n this.onAfterOpen = defaultsFn(f.on_after_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before the columns manager is closed\r\n * @type {Function}\r\n */\r\n this.onBeforeClose = defaultsFn(f.on_before_close, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the columns manager is closed\r\n * @type {Function}\r\n */\r\n this.onAfterClose = defaultsFn(f.on_after_close, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a column is hidden\r\n * @type {Function}\r\n */\r\n this.onBeforeColHidden = defaultsFn(f.on_before_col_hidden, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a column is hidden\r\n * @type {Function}\r\n */\r\n this.onAfterColHidden = defaultsFn(f.on_after_col_hidden, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a column is displayed\r\n * @type {Function}\r\n */\r\n this.onBeforeColDisplayed = defaultsFn(f.on_before_col_displayed,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a column is displayed\r\n * @type {Function}\r\n */\r\n this.onAfterColDisplayed = defaultsFn(f.on_after_col_displayed,\r\n EMPTY_FN);\r\n\r\n //Grid layout support\r\n if (tf.gridLayout) {\r\n this.headersTbl = tf.feature('gridLayout').headTbl; //headers table\r\n this.headersIndex = 0; //headers index\r\n }\r\n\r\n //Loads extension stylesheet\r\n tf.import(f.name + 'Style', tf.getStylePath() + this.stylesheet, null,\r\n 'link');\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Mouse-up event handler handling popup auto-close behaviour\r\n * @private\r\n */\r\n onMouseup(evt) {\r\n let targetElm = targetEvt(evt);\r\n\r\n while (targetElm && targetElm !== this.contEl\r\n && targetElm !== this.btnEl) {\r\n targetElm = targetElm.parentNode;\r\n }\r\n\r\n if (targetElm !== this.contEl && targetElm !== this.btnEl) {\r\n this.toggle();\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Toggle columns manager UI\r\n */\r\n toggle() {\r\n // ensure mouseup event handler is removed\r\n removeEvt(root, 'mouseup', this.boundMouseup);\r\n\r\n let contDisplay = this.contEl.style.display;\r\n\r\n if (contDisplay !== 'inline') {\r\n this.onBeforeOpen(this);\r\n }\r\n if (contDisplay === 'inline') {\r\n this.onBeforeClose(this);\r\n }\r\n\r\n this.contEl.style.display = contDisplay === 'inline' ?\r\n NONE : 'inline';\r\n\r\n if (contDisplay !== 'inline') {\r\n this.onAfterOpen(this);\r\n addEvt(root, 'mouseup', this.boundMouseup);\r\n }\r\n if (contDisplay === 'inline') {\r\n this.onAfterClose(this);\r\n }\r\n }\r\n\r\n /**\r\n * Check an item in columns manager UI\r\n * @private\r\n */\r\n checkItem(lbl) {\r\n let li = lbl.parentNode;\r\n if (!li || !lbl) {\r\n return;\r\n }\r\n let isChecked = lbl.firstChild.checked;\r\n let colIndex = lbl.firstChild.getAttribute('id').split('_')[1];\r\n colIndex = parseInt(colIndex, 10);\r\n if (isChecked) {\r\n addClass(li, this.listSlcItemCssClass);\r\n } else {\r\n removeClass(li, this.listSlcItemCssClass);\r\n }\r\n\r\n let hide = false;\r\n if ((this.tickToHide && isChecked) ||\r\n (!this.tickToHide && !isChecked)) {\r\n hide = true;\r\n }\r\n this.setHidden(colIndex, hide);\r\n }\r\n\r\n /**\r\n * Initializes ColsVisibility instance\r\n */\r\n init() {\r\n if (this.initialized || !this.manager) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-extension', this,\r\n !isNull(this.btnTgtId));\r\n\r\n this.emitter.on(['hide-column'],\r\n (tf, colIndex) => this.hideCol(colIndex));\r\n\r\n this.buildBtn();\r\n this.buildManager();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.boundMouseup = this.onMouseup.bind(this);\r\n\r\n this.emitter.emit('columns-visibility-initialized', this.tf, this);\r\n this.emitter.emit('extension-initialized', this);\r\n\r\n // Hide columns at start at very end of initialization, do not move\r\n // as order is important\r\n this._hideAtStart();\r\n }\r\n\r\n /**\r\n * Build main button UI\r\n */\r\n buildBtn() {\r\n if (this.btnEl) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let span = createElm('span');\r\n span.className = this.spanCssClass;\r\n\r\n // Container element (rdiv or custom element)\r\n let targetEl = !this.btnTgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.btnTgtId);\r\n\r\n if (!this.btnTgtId) {\r\n let firstChild = targetEl.firstChild;\r\n firstChild.parentNode.insertBefore(span, firstChild);\r\n } else {\r\n targetEl.appendChild(span);\r\n }\r\n\r\n if (!this.btnHtml) {\r\n let btn = createElm('a', ['href', 'javascript:;']);\r\n btn.className = this.btnCssClass;\r\n btn.title = this.desc;\r\n\r\n btn.innerHTML = this.btnText;\r\n span.appendChild(btn);\r\n if (!this.enableHover) {\r\n addEvt(btn, 'click', (evt) => this.toggle(evt));\r\n } else {\r\n addEvt(btn, 'mouseover', (evt) => this.toggle(evt));\r\n }\r\n } else { // Custom html\r\n span.innerHTML = this.btnHtml;\r\n let colVisEl = span.firstChild;\r\n if (!this.enableHover) {\r\n addEvt(colVisEl, 'click', (evt) => this.toggle(evt));\r\n } else {\r\n addEvt(colVisEl, 'mouseover', (evt) => this.toggle(evt));\r\n }\r\n }\r\n\r\n this.spanEl = span;\r\n this.btnEl = this.spanEl.firstChild;\r\n\r\n this.onLoaded(this);\r\n }\r\n\r\n /**\r\n * Build columns manager UI\r\n */\r\n buildManager() {\r\n let tf = this.tf;\r\n\r\n let container = !this.contElTgtId ?\r\n createElm('div') :\r\n elm(this.contElTgtId);\r\n container.className = this.contCssClass;\r\n\r\n //Extension description\r\n let extNameLabel = createElm('p');\r\n extNameLabel.innerHTML = this.text;\r\n container.appendChild(extNameLabel);\r\n\r\n //Headers list\r\n let ul = createElm('ul');\r\n ul.className = this.listCssClass;\r\n\r\n let tbl = this.headersTbl || tf.dom();\r\n let headerIndex = this.headersTbl ?\r\n this.headersIndex : tf.getHeadersRowIndex();\r\n let headerRow = tbl.rows[headerIndex];\r\n\r\n //Tick all option\r\n if (this.enableTickAll) {\r\n let li = createCheckItem('col__' + tf.id, this.tickAllText,\r\n this.tickAllText);\r\n addClass(li, this.listItemCssClass);\r\n ul.appendChild(li);\r\n li.check.checked = !this.tickToHide;\r\n\r\n addEvt(li.check, 'click', () => {\r\n for (let h = 0; h < headerRow.cells.length; h++) {\r\n let itm = elm('col_' + h + '_' + tf.id);\r\n if (itm && li.check.checked !== itm.checked) {\r\n itm.click();\r\n itm.checked = li.check.checked;\r\n }\r\n }\r\n });\r\n }\r\n\r\n for (let i = 0; i < headerRow.cells.length; i++) {\r\n let cell = headerRow.cells[i];\r\n let cellText = this.headersText[i] || this._getHeaderText(cell);\r\n let liElm = createCheckItem('col_' + i + '_' + tf.id, cellText,\r\n cellText);\r\n addClass(liElm, this.listItemCssClass);\r\n if (!this.tickToHide) {\r\n addClass(liElm, this.listSlcItemCssClass);\r\n }\r\n ul.appendChild(liElm);\r\n if (!this.tickToHide) {\r\n liElm.check.checked = true;\r\n }\r\n\r\n addEvt(liElm.check, 'click', (evt) => {\r\n let elm = targetEvt(evt);\r\n let lbl = elm.parentNode;\r\n this.checkItem(lbl);\r\n });\r\n }\r\n\r\n //separator\r\n let p = createElm('p', ['align', 'center']);\r\n let btn;\r\n //Close link\r\n if (!this.btnCloseHtml) {\r\n btn = createElm('a', ['href', 'javascript:;']);\r\n btn.className = this.btnCloseCssClass;\r\n btn.innerHTML = this.btnCloseText;\r\n addEvt(btn, 'click', (evt) => this.toggle(evt));\r\n p.appendChild(btn);\r\n } else {\r\n p.innerHTML = this.btnCloseHtml;\r\n btn = p.firstChild;\r\n addEvt(btn, 'click', (evt) => this.toggle(evt));\r\n }\r\n\r\n container.appendChild(ul);\r\n container.appendChild(p);\r\n\r\n this.btnEl.parentNode.insertBefore(container, this.btnEl);\r\n this.contEl = container;\r\n }\r\n\r\n /**\r\n * Hide or show specified columns\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} hide Hide column if true or show if false\r\n */\r\n setHidden(colIndex, hide) {\r\n let tf = this.tf;\r\n let tbl = tf.dom();\r\n\r\n if (hide) {\r\n this.onBeforeColHidden(this, colIndex);\r\n } else {\r\n this.onBeforeColDisplayed(this, colIndex);\r\n }\r\n\r\n this._hideElements(tbl, colIndex, hide);\r\n if (this.headersTbl) {\r\n this._hideElements(this.headersTbl, colIndex, hide);\r\n }\r\n\r\n let hiddenCols = this.hiddenCols;\r\n let itemIndex = hiddenCols.indexOf(colIndex);\r\n if (hide) {\r\n if (itemIndex === -1) {\r\n this.hiddenCols.push(colIndex);\r\n }\r\n } else {\r\n if (itemIndex !== -1) {\r\n this.hiddenCols.splice(itemIndex, 1);\r\n }\r\n }\r\n\r\n if (hide) {\r\n this.onAfterColHidden(this, colIndex);\r\n this.emitter.emit('column-hidden', tf, this, colIndex,\r\n this.hiddenCols);\r\n } else {\r\n this.onAfterColDisplayed(this, colIndex);\r\n this.emitter.emit('column-shown', tf, this, colIndex,\r\n this.hiddenCols);\r\n }\r\n }\r\n\r\n /**\r\n * Show specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n showCol(colIndex) {\r\n if (isUndef(colIndex) || !this.isColHidden(colIndex)) {\r\n return;\r\n }\r\n if (this.manager && this.contEl) {\r\n let itm = elm('col_' + colIndex + '_' + this.tf.id);\r\n if (itm) {\r\n itm.click();\r\n }\r\n } else {\r\n this.setHidden(colIndex, false);\r\n }\r\n }\r\n\r\n /**\r\n * Hide specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n hideCol(colIndex) {\r\n if (isUndef(colIndex) || this.isColHidden(colIndex)) {\r\n return;\r\n }\r\n if (this.manager && this.contEl) {\r\n let itm = elm('col_' + colIndex + '_' + this.tf.id);\r\n if (itm) {\r\n itm.click();\r\n }\r\n } else {\r\n this.setHidden(colIndex, true);\r\n }\r\n }\r\n\r\n /**\r\n * Determine if specified column is hidden\r\n * @param {Number} colIndex Column index\r\n */\r\n isColHidden(colIndex) {\r\n if (this.hiddenCols.indexOf(colIndex) !== -1) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Toggle visibility of specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n toggleCol(colIndex) {\r\n if (isUndef(colIndex) || this.isColHidden(colIndex)) {\r\n this.showCol(colIndex);\r\n } else {\r\n this.hideCol(colIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Return the indexes of the columns currently hidden\r\n * @return {Array} column indexes\r\n */\r\n getHiddenCols() {\r\n return this.hiddenCols;\r\n }\r\n\r\n /**\r\n * Remove the columns manager\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n if (elm(this.contElTgtId)) {\r\n elm(this.contElTgtId).innerHTML = '';\r\n } else {\r\n this.contEl.innerHTML = '';\r\n removeElm(this.contEl);\r\n this.contEl = null;\r\n }\r\n this.btnEl.innerHTML = '';\r\n removeElm(this.btnEl);\r\n this.btnEl = null;\r\n\r\n this.emitter.off(['hide-column'],\r\n (tf, colIndex) => this.hideCol(colIndex));\r\n\r\n this.boundMouseup = null;\r\n\r\n this.initialized = false;\r\n }\r\n\r\n _getHeaderText(cell) {\r\n if (!cell.hasChildNodes) {\r\n return '';\r\n }\r\n\r\n for (let i = 0; i < cell.childNodes.length; i++) {\r\n let n = cell.childNodes[i];\r\n if (n.nodeType === 3) {\r\n return n.nodeValue;\r\n } else if (n.nodeType === 1) {\r\n if (n.id && n.id.indexOf('popUp') !== -1) {\r\n continue;\r\n } else {\r\n return getText(n);\r\n }\r\n }\r\n continue;\r\n }\r\n return '';\r\n }\r\n\r\n _hideElements(tbl, colIdx, hide) {\r\n this._hideCells(tbl, colIdx, hide);\r\n this._hideCol(tbl, colIdx, hide);\r\n }\r\n\r\n _hideCells(tbl, colIdx, hide) {\r\n for (let i = 0; i < tbl.rows.length; i++) {\r\n let row = tbl.rows[i];\r\n let cell = row.cells[colIdx];\r\n if (cell) {\r\n cell.style.display = hide ? NONE : '';\r\n }\r\n }\r\n }\r\n\r\n _hideCol(tbl, colIdx, hide) {\r\n let colElms = tag(tbl, 'col');\r\n if (colElms.length === 0) {\r\n return;\r\n }\r\n colElms[colIdx].style.display = hide ? NONE : '';\r\n }\r\n\r\n _hideAtStart() {\r\n this.atStart.forEach((colIdx) => {\r\n this.hideCol(colIdx);\r\n });\r\n }\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {createElm, removeElm, elm} from '../../dom';\r\nimport {EMPTY_FN, isNull} from '../../types';\r\nimport {addEvt} from '../../event';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsFn, defaultsNb,\r\n} from '../../settings';\r\nimport {RIGHT} from '../../modules/toolbar';\r\n\r\n/**\r\n * Filters Visibility extension\r\n */\r\nexport default class FiltersVisibility extends Feature {\r\n\r\n /**\r\n * Creates an instance of FiltersVisibility\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} Configuration object\r\n */\r\n constructor(tf, f) {\r\n super(tf, f.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(f.description,\r\n 'Filters row visibility manager');\r\n\r\n /**\r\n * Extension's stylesheet filename\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(f.stylesheet , 'filtersVisibility.css');\r\n\r\n /**\r\n * Expand icon filename\r\n * @type {String}\r\n */\r\n this.icnExpand = defaultsStr(f.expand_icon_name, 'icn_exp.png');\r\n\r\n /**\r\n * Collapse icon filename\r\n * @type {String}\r\n */\r\n this.icnCollapse = defaultsStr(f.collapse_icon_name, 'icn_clp.png');\r\n\r\n /**\r\n * Main container element\r\n * @private\r\n */\r\n this.contEl = null;\r\n\r\n /**\r\n * Button element\r\n * @private\r\n */\r\n this.btnEl = null;\r\n\r\n /**\r\n * Expand icon HTML\r\n * @private\r\n */\r\n this.icnExpandHtml = '\"Expand';\r\n\r\n /**\r\n * Collapse icon HTML\r\n * @private\r\n */\r\n this.icnCollapseHtml = '\"Collapse';\r\n\r\n /**\r\n * Default text\r\n * @private\r\n */\r\n this.defaultText = 'Toggle filters';\r\n\r\n /**\r\n * ID of main container element\r\n * @type {String}\r\n */\r\n this.targetId = f.target_id || null;\r\n\r\n /**\r\n * Enable expand/collapse icon, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.enableIcon = defaultsBool(f.enable_icon, true);\r\n\r\n /**\r\n * Custom text for button\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, '');\r\n\r\n /**\r\n * Collapse button HTML\r\n * @private\r\n */\r\n this.collapseBtnHtml = this.enableIcon ?\r\n this.icnCollapseHtml + this.btnText :\r\n this.btnText || this.defaultText;\r\n\r\n /**\r\n * Expand button HTML\r\n * @private\r\n */\r\n this.expandBtnHtml = this.enableIcon ?\r\n this.icnExpandHtml + this.btnText :\r\n this.btnText || this.defaultText;\r\n\r\n /**\r\n * Button's custom HTML\r\n * @type {String}\r\n */\r\n this.btnHtml = defaultsStr(f.btn_html, null);\r\n\r\n /**\r\n * Css class for expand/collapse filters button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'btnExpClpFlt');\r\n\r\n /**\r\n * Css class for main container\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.cont_css_class, 'expClpFlt');\r\n\r\n /**\r\n * Filters row index\r\n * @type {Number}\r\n */\r\n this.filtersRowIndex = defaultsNb(f.filters_row_index,\r\n tf.getFiltersRowIndex());\r\n\r\n /**\r\n * Make filters visible at initialization, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.visibleAtStart = defaultsNb(f.visible_at_start, true);\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\r\n\r\n /**\r\n * Callback fired before filters row is shown\r\n * @type {Function}\r\n */\r\n this.onBeforeShow = defaultsFn(f.on_before_show, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filters row is shown\r\n * @type {Function}\r\n */\r\n this.onAfterShow = defaultsFn(f.on_after_show, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before filters row is hidden\r\n * @type {Function}\r\n */\r\n this.onBeforeHide = defaultsFn(f.on_before_hide, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filters row is hidden\r\n * @type {Function}\r\n */\r\n this.onAfterHide = defaultsFn(f.on_after_hide, EMPTY_FN);\r\n\r\n //Import extension's stylesheet\r\n tf.import(f.name + 'Style', tf.getStylePath() + this.stylesheet, null,\r\n 'link');\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initialise extension\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-extension', this,\r\n !isNull(this.targetId));\r\n\r\n this.buildUI();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.on(['show-filters'], (tf, visible) => this.show(visible));\r\n this.emitter.emit('filters-visibility-initialized', this.tf, this);\r\n this.emitter.emit('extension-initialized', this);\r\n }\r\n\r\n /**\r\n * Build UI elements\r\n */\r\n buildUI() {\r\n let tf = this.tf;\r\n let span = createElm('span');\r\n span.className = this.contCssClass;\r\n\r\n // Container element (rdiv or custom element)\r\n let targetEl = !this.targetId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n\r\n if (!this.targetId) {\r\n let firstChild = targetEl.firstChild;\r\n firstChild.parentNode.insertBefore(span, firstChild);\r\n } else {\r\n targetEl.appendChild(span);\r\n }\r\n\r\n let btn;\r\n if (!this.btnHtml) {\r\n btn = createElm('a', ['href', 'javascript:void(0);']);\r\n btn.className = this.btnCssClass;\r\n btn.title = this.btnText || this.defaultText;\r\n btn.innerHTML = this.collapseBtnHtml;\r\n span.appendChild(btn);\r\n } else { // Custom html\r\n span.innerHTML = this.btnHtml;\r\n btn = span.firstChild;\r\n }\r\n\r\n addEvt(btn, 'click', () => this.toggle());\r\n\r\n this.contEl = span;\r\n this.btnEl = btn;\r\n\r\n if (!this.visibleAtStart) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n /**\r\n * Toggle filters visibility\r\n */\r\n toggle() {\r\n let tf = this.tf;\r\n let tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();\r\n let fltRow = tbl.rows[this.filtersRowIndex];\r\n let isDisplayed = fltRow.style.display === '';\r\n\r\n this.show(!isDisplayed);\r\n }\r\n\r\n /**\r\n * Show or hide filters\r\n *\r\n * @param {boolean} [visible=true] Visibility flag\r\n */\r\n show(visible = true) {\r\n let tf = this.tf;\r\n let tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();\r\n let fltRow = tbl.rows[this.filtersRowIndex];\r\n\r\n if (visible) {\r\n this.onBeforeShow(this);\r\n }\r\n if (!visible) {\r\n this.onBeforeHide(this);\r\n }\r\n\r\n fltRow.style.display = visible ? '' : 'none';\r\n if (this.enableIcon && !this.btnHtml) {\r\n this.btnEl.innerHTML = visible ?\r\n this.collapseBtnHtml : this.expandBtnHtml;\r\n }\r\n\r\n if (visible) {\r\n this.onAfterShow(this);\r\n }\r\n if (!visible) {\r\n this.onAfterHide(this);\r\n }\r\n\r\n this.emitter.emit('filters-toggled', tf, this, visible);\r\n }\r\n\r\n /**\r\n * Destroy the UI\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.off(['show-filters'], (tf, visible) => this.show(visible));\r\n\r\n this.btnEl.innerHTML = '';\r\n removeElm(this.btnEl);\r\n this.btnEl = null;\r\n\r\n this.contEl.innerHTML = '';\r\n removeElm(this.contEl);\r\n this.contEl = null;\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {isUndef, isObj, EMPTY_FN} from '../../types';\r\nimport {createElm, elm, tag} from '../../dom';\r\nimport {addEvt, bound} from '../../event';\r\nimport {parse as parseNb} from '../../number';\r\nimport {\r\n NONE, CELL_TAG, HEADER_TAG, STRING, NUMBER, DATE, FORMATTED_NUMBER,\r\n IP_ADDRESS\r\n} from '../../const';\r\nimport {defaultsStr, defaultsFn, defaultsArr} from '../../settings';\r\n\r\n/**\r\n * SortableTable Adapter module\r\n */\r\nexport default class AdapterSortableTable extends Feature {\r\n\r\n /**\r\n * Creates an instance of AdapterSortableTable\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} opts Configuration object\r\n */\r\n constructor(tf, opts) {\r\n super(tf, opts.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = opts.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(opts.description, 'Sortable table');\r\n\r\n /**\r\n * Indicate whether table previously sorted\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.sorted = false;\r\n\r\n /**\r\n * List of sort type per column basis\r\n * @type {Array}\r\n */\r\n this.sortTypes = defaultsArr(opts.types, tf.colTypes);\r\n\r\n /**\r\n * Column to be sorted at initialization, ie:\r\n * sort_col_at_start: [1, true]\r\n * @type {Array}\r\n */\r\n this.sortColAtStart = defaultsArr(opts.sort_col_at_start, null);\r\n\r\n /**\r\n * Enable asynchronous sort, if triggers are external\r\n * @type {Boolean}\r\n */\r\n this.asyncSort = Boolean(opts.async_sort);\r\n\r\n /**\r\n * List of element IDs triggering sort on a per column basis\r\n * @type {Array}\r\n */\r\n this.triggerIds = defaultsArr(opts.trigger_ids, []);\r\n\r\n // edit .sort-arrow.descending / .sort-arrow.ascending in\r\n // tablefilter.css to reflect any path change\r\n /**\r\n * Path to images\r\n * @type {String}\r\n */\r\n this.imgPath = defaultsStr(opts.images_path, tf.themesPath);\r\n\r\n /**\r\n * Blank image file name\r\n * @type {String}\r\n */\r\n this.imgBlank = defaultsStr(opts.image_blank, 'blank.png');\r\n\r\n /**\r\n * Css class for sort indicator image\r\n * @type {String}\r\n */\r\n this.imgClassName = defaultsStr(opts.image_class_name, 'sort-arrow');\r\n\r\n /**\r\n * Css class for ascending sort indicator image\r\n * @type {String}\r\n */\r\n this.imgAscClassName = defaultsStr(opts.image_asc_class_name,\r\n 'ascending');\r\n\r\n /**\r\n * Css class for descending sort indicator image\r\n * @type {String}\r\n */\r\n this.imgDescClassName = defaultsStr(opts.image_desc_class_name,\r\n 'descending');\r\n\r\n /**\r\n * Cell attribute key storing custom value used for sorting\r\n * @type {String}\r\n */\r\n this.customKey = defaultsStr(opts.custom_key, 'data-tf-sortKey');\r\n\r\n /**\r\n * Callback fired when sort extension is instanciated\r\n * @type {Function}\r\n */\r\n this.onSortLoaded = defaultsFn(opts.on_sort_loaded, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a table column is sorted\r\n * @type {Function}\r\n */\r\n this.onBeforeSort = defaultsFn(opts.on_before_sort, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a table column is sorted\r\n * @type {Function}\r\n */\r\n this.onAfterSort = defaultsFn(opts.on_after_sort, EMPTY_FN);\r\n\r\n /**\r\n * SortableTable instance\r\n * @private\r\n */\r\n this.stt = null;\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initializes AdapterSortableTable instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let adpt = this;\r\n\r\n // SortableTable class sanity check (sortabletable.js)\r\n if (isUndef(SortableTable)) {\r\n throw new Error('SortableTable class not found.');\r\n }\r\n\r\n // Add any date format if needed\r\n this.emitter.emit('add-date-type-formats', this.tf, this.sortTypes);\r\n\r\n this.overrideSortableTable();\r\n this.setSortTypes();\r\n\r\n this.onSortLoaded(tf, this);\r\n\r\n /*** SortableTable callbacks ***/\r\n this.stt.onbeforesort = function () {\r\n adpt.onBeforeSort(tf, adpt.stt.sortColumn);\r\n\r\n /*** sort behaviour for paging ***/\r\n if (tf.paging) {\r\n tf.feature('paging').disable();\r\n }\r\n };\r\n\r\n this.stt.onsort = function () {\r\n adpt.sorted = true;\r\n\r\n //sort behaviour for paging\r\n if (tf.paging) {\r\n let paginator = tf.feature('paging');\r\n // recalculate valid rows index as sorting may have change it\r\n tf.getValidRows(true);\r\n paginator.enable();\r\n paginator.setPage(paginator.getPage());\r\n }\r\n\r\n adpt.onAfterSort(tf, adpt.stt.sortColumn, adpt.stt.descending);\r\n adpt.emitter.emit('column-sorted', tf, adpt.stt.sortColumn,\r\n adpt.stt.descending);\r\n };\r\n\r\n // Column sort at start\r\n let sortColAtStart = adpt.sortColAtStart;\r\n if (sortColAtStart) {\r\n this.stt.sort(sortColAtStart[0], sortColAtStart[1]);\r\n }\r\n\r\n this.emitter.on(['sort'], bound(this.sortByColumnIndexHandler, this));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('sort-initialized', tf, this);\r\n }\r\n\r\n /**\r\n * Sort specified column\r\n * @param {Number} colIdx Column index\r\n * @param {Boolean} desc Optional: descending manner\r\n */\r\n sortByColumnIndex(colIdx, desc) {\r\n this.stt.sort(colIdx, desc);\r\n }\r\n\r\n /** @private */\r\n sortByColumnIndexHandler(tf, colIdx, desc) {\r\n this.sortByColumnIndex(colIdx, desc);\r\n }\r\n\r\n /**\r\n * Set SortableTable overrides for TableFilter integration\r\n */\r\n overrideSortableTable() {\r\n let adpt = this,\r\n tf = this.tf;\r\n\r\n /**\r\n * Overrides headerOnclick method in order to handle th event\r\n * @param {Object} e [description]\r\n */\r\n SortableTable.prototype.headerOnclick = function (evt) {\r\n if (!adpt.initialized) {\r\n return;\r\n }\r\n\r\n // find Header element\r\n let el = evt.target || evt.srcElement;\r\n\r\n while (el.tagName !== CELL_TAG && el.tagName !== HEADER_TAG) {\r\n el = el.parentNode;\r\n }\r\n\r\n this.sort(\r\n SortableTable.msie ?\r\n SortableTable.getCellIndex(el) : el.cellIndex\r\n );\r\n };\r\n\r\n /**\r\n * Overrides getCellIndex IE returns wrong cellIndex when columns are\r\n * hidden\r\n * @param {Object} oTd TD element\r\n * @return {Number} Cell index\r\n */\r\n SortableTable.getCellIndex = function (oTd) {\r\n let cells = oTd.parentNode.cells,\r\n l = cells.length, i;\r\n for (i = 0; cells[i] !== oTd && i < l; i++) { }\r\n return i;\r\n };\r\n\r\n /**\r\n * Overrides initHeader in order to handle filters row position\r\n * @param {Array} oSortTypes\r\n */\r\n SortableTable.prototype.initHeader = function (oSortTypes) {\r\n let stt = this;\r\n if (!stt.tHead) {\r\n if (tf.gridLayout) {\r\n stt.tHead = tf.feature('gridLayout').headTbl.tHead;\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n stt.headersRow = tf.headersRow;\r\n let cells = stt.tHead.rows[stt.headersRow].cells;\r\n stt.sortTypes = oSortTypes || [];\r\n let l = cells.length;\r\n let img, c;\r\n\r\n for (let i = 0; i < l; i++) {\r\n c = cells[i];\r\n if (stt.sortTypes[i] !== null && stt.sortTypes[i] !== 'None') {\r\n c.style.cursor = 'pointer';\r\n img = createElm('img',\r\n ['src', adpt.imgPath + adpt.imgBlank]);\r\n c.appendChild(img);\r\n if (stt.sortTypes[i] !== null) {\r\n c.setAttribute('_sortType', stt.sortTypes[i]);\r\n }\r\n addEvt(c, 'click', stt._headerOnclick);\r\n } else {\r\n c.setAttribute('_sortType', oSortTypes[i]);\r\n c._sortType = 'None';\r\n }\r\n }\r\n stt.updateHeaderArrows();\r\n };\r\n\r\n /**\r\n * Overrides updateHeaderArrows in order to handle arrows indicators\r\n */\r\n SortableTable.prototype.updateHeaderArrows = function () {\r\n let stt = this;\r\n let cells, l, img;\r\n\r\n // external headers\r\n if (adpt.asyncSort && adpt.triggerIds.length > 0) {\r\n let triggers = adpt.triggerIds;\r\n cells = [];\r\n l = triggers.length;\r\n for (let j = 0; j < l; j++) {\r\n cells.push(elm(triggers[j]));\r\n }\r\n } else {\r\n if (!this.tHead) {\r\n return;\r\n }\r\n cells = stt.tHead.rows[stt.headersRow].cells;\r\n l = cells.length;\r\n }\r\n for (let i = 0; i < l; i++) {\r\n let cell = cells[i];\r\n if (!cell) {\r\n continue;\r\n }\r\n let cellAttr = cell.getAttribute('_sortType');\r\n if (cellAttr !== null && cellAttr !== 'None') {\r\n img = cell.lastChild || cell;\r\n if (img.nodeName.toLowerCase() !== 'img') {\r\n img = createElm('img',\r\n ['src', adpt.imgPath + adpt.imgBlank]);\r\n cell.appendChild(img);\r\n }\r\n if (i === stt.sortColumn) {\r\n img.className = adpt.imgClassName + ' ' +\r\n (this.descending ?\r\n adpt.imgDescClassName :\r\n adpt.imgAscClassName);\r\n } else {\r\n img.className = adpt.imgClassName;\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Overrides getRowValue for custom key value feature\r\n * @param {Object} oRow Row element\r\n * @param {String} sType\r\n * @param {Number} nColumn\r\n * @return {String}\r\n */\r\n SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\r\n let stt = this;\r\n // if we have defined a custom getRowValue use that\r\n let sortTypeInfo = stt._sortTypeInfo[sType];\r\n if (sortTypeInfo && sortTypeInfo.getRowValue) {\r\n return sortTypeInfo.getRowValue(oRow, nColumn);\r\n }\r\n let c = oRow.cells[nColumn];\r\n let s = SortableTable.getInnerText(c);\r\n return stt.getValueFromString(s, sType);\r\n };\r\n\r\n /**\r\n * Overrides getInnerText in order to avoid Firefox unexpected sorting\r\n * behaviour with untrimmed text elements\r\n * @param {Object} cell DOM element\r\n * @return {String} DOM element inner text\r\n */\r\n SortableTable.getInnerText = function (cell) {\r\n if (!cell) {\r\n return;\r\n }\r\n if (cell.getAttribute(adpt.customKey)) {\r\n return cell.getAttribute(adpt.customKey);\r\n } else {\r\n return tf.getCellValue(cell);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Adds a sort type\r\n */\r\n addSortType(...args) {\r\n // Extract the arguments\r\n let [id, caster, sorter, getRowValue] = args;\r\n SortableTable.prototype.addSortType(id, caster, sorter, getRowValue);\r\n }\r\n\r\n /**\r\n * Sets the sort types on a column basis\r\n * @private\r\n */\r\n setSortTypes() {\r\n let tf = this.tf,\r\n sortTypes = this.sortTypes,\r\n _sortTypes = [];\r\n\r\n tf.eachCol((i) => {\r\n let colType;\r\n if (sortTypes[i]) {\r\n colType = sortTypes[i];\r\n if (isObj(colType)) {\r\n if (colType.type === DATE) {\r\n colType = this._addDateType(i, sortTypes);\r\n }\r\n else if (colType.type === FORMATTED_NUMBER) {\r\n let decimal = colType.decimal || tf.decimalSeparator;\r\n colType = this._addNumberType(i, decimal);\r\n }\r\n } else {\r\n colType = colType.toLowerCase();\r\n if (colType === DATE) {\r\n colType = this._addDateType(i, sortTypes);\r\n }\r\n else if (colType === FORMATTED_NUMBER ||\r\n colType === NUMBER) {\r\n colType = this._addNumberType(i, tf.decimalSeparator);\r\n }\r\n else if (colType === NONE) {\r\n // TODO: normalise 'none' vs 'None'\r\n colType = 'None';\r\n }\r\n }\r\n } else {\r\n colType = STRING;\r\n }\r\n _sortTypes.push(colType);\r\n });\r\n\r\n //Public TF method to add sort type\r\n\r\n //Custom sort types\r\n this.addSortType('caseinsensitivestring', SortableTable.toUpperCase);\r\n this.addSortType(STRING);\r\n this.addSortType(IP_ADDRESS, ipAddress, sortIP);\r\n\r\n this.stt = new SortableTable(tf.dom(), _sortTypes);\r\n\r\n /*** external table headers adapter ***/\r\n if (this.asyncSort && this.triggerIds.length > 0) {\r\n let triggers = this.triggerIds;\r\n for (let j = 0; j < triggers.length; j++) {\r\n if (triggers[j] === null) {\r\n continue;\r\n }\r\n let trigger = elm(triggers[j]);\r\n if (trigger) {\r\n trigger.style.cursor = 'pointer';\r\n\r\n addEvt(trigger, 'click', (evt) => {\r\n let elm = evt.target;\r\n if (!this.tf.sort) {\r\n return;\r\n }\r\n this.stt.asyncSort(triggers.indexOf(elm.id));\r\n });\r\n trigger.setAttribute('_sortType', _sortTypes[j]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _addDateType(colIndex, types) {\r\n let tf = this.tf;\r\n let dateType = tf.feature('dateType');\r\n let locale = dateType.getOptions(colIndex, types).locale || tf.locale;\r\n let colType = `${DATE}-${locale}`;\r\n\r\n this.addSortType(colType, (value) => {\r\n let parsedDate = dateType.parse(value, locale);\r\n // Invalid date defaults to Wed Feb 04 -768 11:00:00\r\n return isNaN(+parsedDate) ? new Date(-86400000000000) : parsedDate;\r\n });\r\n return colType;\r\n }\r\n\r\n _addNumberType(colIndex, decimal) {\r\n let colType = `${FORMATTED_NUMBER}${decimal === '.' ? '' : '-custom'}`;\r\n\r\n this.addSortType(colType, (value) => {\r\n return parseNb(value, decimal);\r\n });\r\n return colType;\r\n }\r\n\r\n /**\r\n * Remove extension\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n this.emitter.off(['sort'], bound(this.sortByColumnIndexHandler, this));\r\n this.sorted = false;\r\n this.stt.destroy();\r\n\r\n let ids = tf.getFiltersId();\r\n for (let idx = 0; idx < ids.length; idx++) {\r\n let header = tf.getHeaderElement(idx);\r\n let img = tag(header, 'img');\r\n\r\n if (img.length === 1) {\r\n header.removeChild(img[0]);\r\n }\r\n }\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n\r\n//Converters\r\nfunction ipAddress(value) {\r\n let vals = value.split('.');\r\n for (let x in vals) {\r\n let val = vals[x];\r\n while (3 > val.length) {\r\n val = '0' + val;\r\n }\r\n vals[x] = val;\r\n }\r\n return vals.join('.');\r\n}\r\n\r\nfunction sortIP(a, b) {\r\n let aa = ipAddress(a.value.toLowerCase());\r\n let bb = ipAddress(b.value.toLowerCase());\r\n if (aa === bb) {\r\n return 0;\r\n } else if (aa < bb) {\r\n return -1;\r\n } else {\r\n return 1;\r\n }\r\n}\r\n","import AdapterSortableTable from './adapterSortabletable';\r\nimport {root} from '../../root';\r\n\r\nif (!root.SortableTable) {\r\n require('script-loader!sortabletable');\r\n}\r\n\r\nexport default AdapterSortableTable;\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/package.json b/package.json index 5f1dd304..283d936e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tablefilter", - "version": "0.6.76", + "version": "0.6.77", "description": "A Javascript library making HTML tables filterable and a bit more", "license": "MIT", "author": { diff --git a/src/feature.js b/src/feature.js index ed6288f1..213d6ff3 100644 --- a/src/feature.js +++ b/src/feature.js @@ -1,16 +1,19 @@ +import {TfBase} from './tfBase'; const NOT_IMPLEMENTED = 'Not implemented.'; /** * Base class defining the interface of a TableFilter feature */ -export class Feature { +export class Feature extends TfBase { /** * Creates an instance of Feature * @param {Object} tf TableFilter instance * @param {String} feature Feature name known by TableFilter */ - constructor(tf, feature) { + constructor(tf, feature, cls) { + super(tf, cls); + /** * TableFilter instance * @type {TableFilter} diff --git a/src/modules/clearButton.js b/src/modules/clearButton.js index 8cacbe14..913b43ad 100644 --- a/src/modules/clearButton.js +++ b/src/modules/clearButton.js @@ -137,3 +137,6 @@ export class ClearButton extends Feature { this.initialized = false; } } + +// TODO: remove as soon as feature name is fixed +ClearButton.altName = 'btnReset'; diff --git a/src/modules/help.js b/src/modules/help.js index 4398beae..666cfcd8 100644 --- a/src/modules/help.js +++ b/src/modules/help.js @@ -238,3 +238,6 @@ export class Help extends Feature { } } + +// TODO: remove as soon as feature name is fixed +Help.alwaysInstantiate = true; diff --git a/src/modules/highlightKeywords.js b/src/modules/highlightKeywords.js index daadaa7c..54891bf8 100644 --- a/src/modules/highlightKeywords.js +++ b/src/modules/highlightKeywords.js @@ -172,3 +172,6 @@ export class HighlightKeyword { this.highlight(cell, term, this.highlightCssClass); } } + +// TODO: remove as soon as feature name is fixed +HighlightKeyword.altName = 'highlightKeywords'; diff --git a/src/modules/popupFilter.js b/src/modules/popupFilter.js index 6c2a1498..db85c04f 100644 --- a/src/modules/popupFilter.js +++ b/src/modules/popupFilter.js @@ -456,3 +456,6 @@ export class PopupFilter extends Feature { } } + +// TODO: remove as soon as feature name is fixed +PopupFilter.altName = 'popupFilters'; diff --git a/src/modules/rowsCounter.js b/src/modules/rowsCounter.js index fdcabdc9..4c4f3284 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', RowsCounter); // TableFilter configuration let f = this.config.rows_counter || {}; diff --git a/src/modules/toolbar.js b/src/modules/toolbar.js index d8afa3ef..9f2e119d 100644 --- a/src/modules/toolbar.js +++ b/src/modules/toolbar.js @@ -219,3 +219,6 @@ export class Toolbar extends Feature { this.initialized = false; } } + +// TODO: remove as soon as feature name is fixed +Toolbar.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..ae752d2b 100644 --- a/src/tablefilter.js +++ b/src/tablefilter.js @@ -919,6 +919,7 @@ export class TableFilter { * @private */ this.Mod = {}; + this._mod_ = []; /** * Extensions registry diff --git a/src/tfBase.js b/src/tfBase.js new file mode 100644 index 00000000..90499f1b --- /dev/null +++ b/src/tfBase.js @@ -0,0 +1,21 @@ +import {defaultsStr} from './settings'; +import {toCamelCase} from './string'; + +export class TfBase { + constructor(tf, cls = {}) { + /** + * TableFilter instance + * @type {TableFilter} + */ + this.tf = tf; + + /** + * Feature name, retrieved from alternate class name if found or from + * camelised class name + * @type {String} + */ + this.feature = defaultsStr(cls.altName, toCamelCase(cls.name)); + + this.tf._mod_.push(this.feature); + } +} \ No newline at end of file