diff --git a/dist/tablefilter/tablefilter.js b/dist/tablefilter/tablefilter.js index ef65c0d5..2e46f710 100644 --- a/dist/tablefilter/tablefilter.js +++ b/dist/tablefilter/tablefilter.js @@ -102,7 +102,7 @@ return /******/ (function(modules) { // webpackBootstrap /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } -/******/ script.src = __webpack_require__.p + "tf-" + ({}[chunkId]||chunkId) + "-" + {"0":"973b3f20052aa524e437"}[chunkId] + ".js"; +/******/ script.src = __webpack_require__.p + "tf-" + ({}[chunkId]||chunkId) + "-" + {"0":"0c56575d9b568fc4dedd"}[chunkId] + ".js"; /******/ var timeout = setTimeout(function(){ /******/ onScriptComplete({ type: 'timeout', target: script }); /******/ }, 120000); @@ -15647,35 +15647,21 @@ __webpack_require__.r(__webpack_exports__); /* 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"); - - - - - - - - - - - - - - +// import {DateType} from './modules/dateType'; +// import {Help} from './modules/help'; +// import {State} from './modules/state'; +// import {GridLayout} from './modules/gridLayout'; +// import {Loader} from './modules/loader'; +// import {HighlightKeyword} from './modules/highlightKeywords'; +// import {PopupFilter} from './modules/popupFilter'; +// import {MarkActiveColumns} from './modules/markActiveColumns'; +// import {RowsCounter} from './modules/rowsCounter'; +// import {StatusBar} from './modules/statusBar'; +// import {ClearButton} from './modules/clearButton'; +// import {AlternateRows} from './modules/alternateRows'; +// import {NoResults} from './modules/noResults'; +// import {Paging} from './modules/paging'; +// import {Toolbar} from './modules/toolbar'; /** * Filter types @@ -15685,7 +15671,6 @@ __webpack_require__.r(__webpack_exports__); * Input filter type * @type {String} */ - var INPUT = 'input'; /** * Select filter type @@ -15807,76 +15792,76 @@ var IP_ADDRESS = 'ipaddress'; var AUTO_FILTER_DELAY = 750; /** * TableFilter features definitions - * @type {Object} + * @type {Array} */ -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 - } -}; +var FEATURES = []; // export const FEATURES = { +// dateType: { +// class: DateType, +// name: 'dateType' +// }, +// help: { +// class: Help, +// name: 'help', +// enforce: true +// }, +// state: { +// class: State, +// name: 'state' +// }, +// markActiveColumns: { +// class: MarkActiveColumns, +// name: 'markActiveColumns' +// }, +// gridLayout: { +// class: GridLayout, +// name: 'gridLayout' +// }, +// loader: { +// class: Loader, +// name: 'loader' +// }, +// highlightKeyword: { +// class: HighlightKeyword, +// name: 'highlightKeyword', +// property: 'highlightKeywords' +// }, +// popupFilter: { +// class: PopupFilter, +// name: 'popupFilter', +// property: 'popupFilters' +// }, +// rowsCounter: { +// class: RowsCounter, +// name: 'rowsCounter' +// }, +// statusBar: { +// class: StatusBar, +// name: 'statusBar' +// }, +// clearButton: { +// class: ClearButton, +// name: 'clearButton', +// property: 'btnReset' +// }, +// alternateRows: { +// class: AlternateRows, +// name: 'alternateRows' +// }, +// noResults: { +// class: NoResults, +// name: 'noResults' +// }, +// paging: { +// class: Paging, +// name: 'paging' +// }, +// toolbar: { +// class: Toolbar, +// name: 'toolbar', +// enforce: true +// } +// }; /***/ }), @@ -16462,9 +16447,9 @@ function (_Register) { /** * Creates an instance of Feature * @param {Object} tf TableFilter instance - * @param {String} feature Feature name known by TableFilter + * @param {Class} feature Feature class for TableFilter registration */ - function Feature(tf, feature, cls) { + function Feature(tf, cls) { var _this; _classCallCheck(this, Feature); @@ -16474,20 +16459,20 @@ function (_Register) { * TableFilter instance * @type {TableFilter} */ + //this.tf = tf; - _this.tf = tf; /** * Feature name * @type {String} */ + // this.feature = feature; - _this.feature = feature; /** * TableFilter feature setting * @type {Boolean} */ - _this.enabled = tf[feature]; + _this.enabled = tf[_this.feature]; /** * TableFilter configuration * @type {Object} @@ -16633,7 +16618,7 @@ function (_Feature) { _classCallCheck(this, AlternateRows); - _this = _possibleConstructorReturn(this, _getPrototypeOf(AlternateRows).call(this, tf, 'alternateRows')); + _this = _possibleConstructorReturn(this, _getPrototypeOf(AlternateRows).call(this, tf, AlternateRows)); var config = _this.config; /** * Css class for even rows (default: 'even') @@ -16837,14 +16822,14 @@ function (_Feature) { _classCallCheck(this, BaseDropdown); - _this = _possibleConstructorReturn(this, _getPrototypeOf(BaseDropdown).call(this, tf, '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 + _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 and CheckList /** * Has custom options @@ -17056,7 +17041,7 @@ function (_BaseDropdown) { _classCallCheck(this, CheckList); - _this = _possibleConstructorReturn(this, _getPrototypeOf(CheckList).call(this, tf, 'checkList')); + _this = _possibleConstructorReturn(this, _getPrototypeOf(CheckList).call(this, tf, CheckList)); var f = _this.config; /** * List of container DOM elements @@ -17640,7 +17625,7 @@ function (_Feature) { _classCallCheck(this, ClearButton); - _this = _possibleConstructorReturn(this, _getPrototypeOf(ClearButton).call(this, tf, 'btnReset')); + _this = _possibleConstructorReturn(this, _getPrototypeOf(ClearButton).call(this, tf, ClearButton)); var f = _this.config.btn_reset || {}; /** * Container element ID @@ -17774,7 +17759,9 @@ function (_Feature) { return ClearButton; }(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); // TODO: remove as soon as feature name is fixed -ClearButton.altName = 'btnReset'; +ClearButton.meta = { + altName: 'btnReset' +}; /***/ }), @@ -17840,7 +17827,7 @@ function (_Feature) { _classCallCheck(this, DateType); - _this = _possibleConstructorReturn(this, _getPrototypeOf(DateType).call(this, tf, 'dateType')); + _this = _possibleConstructorReturn(this, _getPrototypeOf(DateType).call(this, tf, DateType)); /** * Global locale * @type {String} @@ -18062,7 +18049,7 @@ function (_BaseDropdown) { _classCallCheck(this, Dropdown); - _this = _possibleConstructorReturn(this, _getPrototypeOf(Dropdown).call(this, tf, 'dropdown')); // Configuration object + _this = _possibleConstructorReturn(this, _getPrototypeOf(Dropdown).call(this, tf, Dropdown)); // Configuration object var f = _this.config; /** @@ -18512,7 +18499,7 @@ function (_Feature) { _classCallCheck(this, GridLayout); - _this = _possibleConstructorReturn(this, _getPrototypeOf(GridLayout).call(this, tf, 'gridLayout')); + _this = _possibleConstructorReturn(this, _getPrototypeOf(GridLayout).call(this, tf, GridLayout)); var f = _this.config.grid_layout || {}; /** * Grid-layout container width as CSS string @@ -19125,7 +19112,7 @@ function () { this.lastHash = hash; } /** - * Converts a URL hash into a state JSON object + * Converts a URL hash into a JSON object * * @param {String} hash URL hash fragment * @returns {Object} JSON object @@ -19246,7 +19233,7 @@ function (_Feature) { _classCallCheck(this, Help); - _this = _possibleConstructorReturn(this, _getPrototypeOf(Help).call(this, tf, 'help')); + _this = _possibleConstructorReturn(this, _getPrototypeOf(Help).call(this, tf, Help)); var f = _this.config.help_instructions || {}; /** * ID of main custom container element @@ -19468,7 +19455,9 @@ function (_Feature) { return Help; }(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); // TODO: remove as soon as feature name is fixed -Help.alwaysInstantiate = true; +Help.meta = { + alwaysInstantiate: true +}; /***/ }), @@ -19682,7 +19671,9 @@ function () { return HighlightKeyword; }(); // TODO: remove as soon as feature name is fixed -HighlightKeyword.altName = 'highlightKeywords'; +HighlightKeyword.meta = { + altName: 'highlightKeywords' +}; /***/ }), @@ -19751,7 +19742,7 @@ function (_Feature) { _classCallCheck(this, Loader); - _this = _possibleConstructorReturn(this, _getPrototypeOf(Loader).call(this, tf, 'loader')); + _this = _possibleConstructorReturn(this, _getPrototypeOf(Loader).call(this, tf, Loader)); var f = _this.config.loader || {}; /** * ID of custom container element @@ -19970,7 +19961,7 @@ function (_Feature) { _classCallCheck(this, MarkActiveColumns); - _this = _possibleConstructorReturn(this, _getPrototypeOf(MarkActiveColumns).call(this, tf, 'markActiveColumns')); + _this = _possibleConstructorReturn(this, _getPrototypeOf(MarkActiveColumns).call(this, tf, MarkActiveColumns)); var config = _this.config.mark_active_columns || {}; /** * Css class for filtered (active) columns @@ -20183,7 +20174,7 @@ function (_Feature) { _classCallCheck(this, NoResults); - _this = _possibleConstructorReturn(this, _getPrototypeOf(NoResults).call(this, tf, 'noResults')); //configuration object + _this = _possibleConstructorReturn(this, _getPrototypeOf(NoResults).call(this, tf, NoResults)); //configuration object var f = _this.config.no_results_message || {}; /** @@ -20439,7 +20430,7 @@ function (_Feature) { _classCallCheck(this, Paging); - _this = _possibleConstructorReturn(this, _getPrototypeOf(Paging).call(this, tf, 'paging')); // Configuration object + _this = _possibleConstructorReturn(this, _getPrototypeOf(Paging).call(this, tf, Paging)); // Configuration object var f = _this.config.paging || {}; /** @@ -21413,7 +21404,7 @@ function (_Feature) { _classCallCheck(this, PopupFilter); - _this = _possibleConstructorReturn(this, _getPrototypeOf(PopupFilter).call(this, tf, 'popupFilters')); // Configuration object + _this = _possibleConstructorReturn(this, _getPrototypeOf(PopupFilter).call(this, tf, PopupFilter)); // Configuration object var f = _this.config.popup_filters || {}; /** @@ -21913,7 +21904,9 @@ function (_Feature) { return PopupFilter; }(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); // TODO: remove as soon as feature name is fixed -PopupFilter.altName = 'popupFilters'; +PopupFilter.meta = { + altName: 'popupFilters' +}; /***/ }), @@ -21976,7 +21969,7 @@ function (_Feature) { _classCallCheck(this, RowsCounter); - _this = _possibleConstructorReturn(this, _getPrototypeOf(RowsCounter).call(this, tf, 'rowsCounter', RowsCounter)); // TableFilter configuration + _this = _possibleConstructorReturn(this, _getPrototypeOf(RowsCounter).call(this, tf, RowsCounter)); // TableFilter configuration var f = _this.config.rows_counter || {}; /** @@ -22233,7 +22226,7 @@ function (_Feature) { _classCallCheck(this, State); - _this = _possibleConstructorReturn(this, _getPrototypeOf(State).call(this, tf, 'state')); + _this = _possibleConstructorReturn(this, _getPrototypeOf(State).call(this, tf, State)); var cfg = _this.config.state || {}; /** * Determines whether state is persisted with URL hash @@ -22890,7 +22883,7 @@ function (_Feature) { _classCallCheck(this, StatusBar); - _this = _possibleConstructorReturn(this, _getPrototypeOf(StatusBar).call(this, tf, 'statusBar')); // Configuration object + _this = _possibleConstructorReturn(this, _getPrototypeOf(StatusBar).call(this, tf, StatusBar)); // Configuration object var f = _this.config.status_bar || {}; /** @@ -23479,7 +23472,7 @@ function (_Feature) { _classCallCheck(this, Toolbar); - _this = _possibleConstructorReturn(this, _getPrototypeOf(Toolbar).call(this, tf, 'toolbar')); // Configuration object + _this = _possibleConstructorReturn(this, _getPrototypeOf(Toolbar).call(this, tf, Toolbar)); // Configuration object var f = _this.config.toolbar || {}; /** @@ -23680,7 +23673,9 @@ function (_Feature) { return Toolbar; }(_feature__WEBPACK_IMPORTED_MODULE_0__["Feature"]); // TODO: remove as soon as feature name is fixed -Toolbar.alwaysInstantiate = true; +Toolbar.meta = { + alwaysInstantiate: true +}; /***/ }), @@ -23730,27 +23725,26 @@ var parse = function parse(value) { /*!*************************!*\ !*** ./src/register.js ***! \*************************/ -/*! exports provided: FeaturesRegistry, Register */ +/*! exports provided: Register */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FeaturesRegistry", function() { return FeaturesRegistry; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Register", function() { return Register; }); /* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./settings */ "./src/settings.js"); /* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./string */ "./src/string.js"); -function _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); } - +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./const */ "./src/const.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var FeaturesRegistry = {}; + var Register = function Register(tf) { var cls = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; _classCallCheck(this, Register); + cls.meta = cls.meta || {}; console.log(tf, cls); /** * TableFilter instance @@ -23759,28 +23753,16 @@ var Register = function Register(tf) { this.tf = tf; /** - * Feature name, retrieved from alternate class name - * if found defined or from camelised class name + * Feature name, retrieved from alternate class name if found or from + * camelised class name as per TableFilter convention * @type {String} */ - this.feature = Object(_settings__WEBPACK_IMPORTED_MODULE_0__["defaultsStr"])(cls.altName, Object(_string__WEBPACK_IMPORTED_MODULE_1__["toCamelCase"])(cls.name)); - console.log(cls !== {}, _typeof({}), _typeof(cls)); + this.feature = Object(_settings__WEBPACK_IMPORTED_MODULE_0__["defaultsStr"])(cls.meta.altName, Object(_string__WEBPACK_IMPORTED_MODULE_1__["toCamelCase"])(cls.name)); + cls.meta.name = this.feature; // this.tf._mod_[this.feature] = cls; - if (cls !== {}) { - this.tf._mod_[this.feature] = cls; - } // this.instantiate(cls, this.feature); - -} // instantiate(cls, name) { -// let Cls = cls; -// console.log(Boolean(this.tf[name]), -// Boolean(Cls.alwaysInstantiate)); -// if (!this.tf.hasConfig || Boolean(this.tf[name]) -// || Boolean(cls.alwaysInstantiate)) { -// this.tf.Mod[name] = this.tf.Mod[name] || new Cls(tf); -// } -// } -; + _const__WEBPACK_IMPORTED_MODULE_2__["FEATURES"][this.feature] = cls; +}; /***/ }), @@ -24137,8 +24119,22 @@ __webpack_require__.r(__webpack_exports__); /* 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"); -/* harmony import */ var _modules_rowsCounter__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./modules/rowsCounter */ "./src/modules/rowsCounter.js"); +/* harmony import */ var _modules_dateType__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./modules/dateType */ "./src/modules/dateType.js"); +/* harmony import */ var _modules_help__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./modules/help */ "./src/modules/help.js"); +/* harmony import */ var _modules_state__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modules/state */ "./src/modules/state.js"); +/* harmony import */ var _modules_gridLayout__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./modules/gridLayout */ "./src/modules/gridLayout.js"); +/* harmony import */ var _modules_loader__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./modules/loader */ "./src/modules/loader.js"); +/* harmony import */ var _modules_highlightKeywords__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./modules/highlightKeywords */ "./src/modules/highlightKeywords.js"); +/* harmony import */ var _modules_popupFilter__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./modules/popupFilter */ "./src/modules/popupFilter.js"); +/* harmony import */ var _modules_markActiveColumns__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./modules/markActiveColumns */ "./src/modules/markActiveColumns.js"); +/* harmony import */ var _modules_rowsCounter__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./modules/rowsCounter */ "./src/modules/rowsCounter.js"); +/* harmony import */ var _modules_statusBar__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./modules/statusBar */ "./src/modules/statusBar.js"); +/* harmony import */ var _modules_clearButton__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./modules/clearButton */ "./src/modules/clearButton.js"); +/* harmony import */ var _modules_alternateRows__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./modules/alternateRows */ "./src/modules/alternateRows.js"); +/* harmony import */ var _modules_noResults__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./modules/noResults */ "./src/modules/noResults.js"); +/* harmony import */ var _modules_paging__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./modules/paging */ "./src/modules/paging.js"); +/* harmony import */ var _modules_toolbar__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./modules/toolbar */ "./src/modules/toolbar.js"); +/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_25__ = __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"); } } @@ -24152,6 +24148,20 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d + + + + + + + + + + + + + + @@ -24303,7 +24313,7 @@ function () { 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(); + return !colType ? _const__WEBPACK_IMPORTED_MODULE_25__["INPUT"] : colType.toLowerCase(); }); /** * Base path for static assets @@ -24342,7 +24352,7 @@ function () { * @type {String} */ - this.fltCellTag = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.filters_cell_tag, _const__WEBPACK_IMPORTED_MODULE_10__["CELL_TAG"]); + this.fltCellTag = Object(_settings__WEBPACK_IMPORTED_MODULE_5__["defaultsStr"])(f.filters_cell_tag, _const__WEBPACK_IMPORTED_MODULE_25__["CELL_TAG"]); /** * List of filters IDs * @type {Array} @@ -24881,7 +24891,7 @@ function () { * @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"]; + 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_25__["AUTO_FILTER_DELAY"]; /** * Indicate whether user is typing * @type {Boolean} @@ -25049,7 +25059,6 @@ function () { */ this.Mod = {}; - this._mod_ = {}; /** * Extensions registry * @private @@ -25057,9 +25066,9 @@ function () { 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]; - })); // console.log(this.Mod, this._mod_); + this.instantiateFeatures( // //Object.keys(FEATURES).map((item) => FEATURES[item]) + // //FEATURES + [_modules_toolbar__WEBPACK_IMPORTED_MODULE_24__["Toolbar"]]); } /** * Initialise features and layout @@ -25080,25 +25089,20 @@ function () { 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; - console.log(this.Mod, this._mod_); //explicitly initialise features in given order + this.loadThemes(); // const { dateType, help, state, markActiveColumns, gridLayout, loader, + // highlightKeyword, popupFilter, rowsCounter, statusBar, clearButton, + // alternateRows, noResults, paging, toolbar } = FEATURES; + //explicitly initialise features in given order - this.initFeatures([dateType, help, state, markActiveColumns, gridLayout, loader, highlightKeyword, popupFilter]); //filters grid is not generated + this.initFeatures([// dateType, + // help, + // state, + // markActiveColumns, + // gridLayout, + // loader, + // highlightKeyword, + // popupFilter + _modules_dateType__WEBPACK_IMPORTED_MODULE_10__["DateType"], _modules_help__WEBPACK_IMPORTED_MODULE_11__["Help"], _modules_state__WEBPACK_IMPORTED_MODULE_12__["State"], _modules_markActiveColumns__WEBPACK_IMPORTED_MODULE_17__["MarkActiveColumns"], _modules_gridLayout__WEBPACK_IMPORTED_MODULE_13__["GridLayout"], _modules_loader__WEBPACK_IMPORTED_MODULE_14__["Loader"], _modules_highlightKeywords__WEBPACK_IMPORTED_MODULE_15__["HighlightKeyword"], _modules_popupFilter__WEBPACK_IMPORTED_MODULE_16__["PopupFilter"]]); //filters grid is not generated if (!this.fltGrid) { this._initNoFilters(); @@ -25125,16 +25129,16 @@ function () { 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"]; + col = _const__WEBPACK_IMPORTED_MODULE_25__["INPUT"]; inpclass = this.singleFltCssClass; } //drop-down filters - if (col === _const__WEBPACK_IMPORTED_MODULE_10__["SELECT"] || col === _const__WEBPACK_IMPORTED_MODULE_10__["MULTIPLE"]) { + if (col === _const__WEBPACK_IMPORTED_MODULE_25__["SELECT"] || col === _const__WEBPACK_IMPORTED_MODULE_25__["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"]) { + else if (col === _const__WEBPACK_IMPORTED_MODULE_25__["CHECKLIST"]) { Mod.checkList = Mod.checkList || new _modules_checkList__WEBPACK_IMPORTED_MODULE_9__["CheckList"](this); Mod.checkList.init(i, this.isExternalFlt(), fltCell); } else { @@ -25164,7 +25168,14 @@ function () { this.setExcludeRows(); } - this.initFeatures([rowsCounter, statusBar, clearButton, alternateRows, noResults, paging, toolbar]); + this.initFeatures([// rowsCounter, + // statusBar, + // clearButton, + // alternateRows, + // noResults, + // paging, + // toolbar + _modules_rowsCounter__WEBPACK_IMPORTED_MODULE_18__["RowsCounter"], _modules_statusBar__WEBPACK_IMPORTED_MODULE_19__["StatusBar"], _modules_clearButton__WEBPACK_IMPORTED_MODULE_20__["ClearButton"], _modules_alternateRows__WEBPACK_IMPORTED_MODULE_21__["AlternateRows"], _modules_noResults__WEBPACK_IMPORTED_MODULE_22__["NoResults"], _modules_paging__WEBPACK_IMPORTED_MODULE_23__["Paging"], _modules_toolbar__WEBPACK_IMPORTED_MODULE_24__["Toolbar"]]); this.setColWidths(); //TF css class is added to table if (!this.gridLayout) { @@ -25202,7 +25213,7 @@ function () { return; } - if (Object(_event__WEBPACK_IMPORTED_MODULE_0__["isKeyPressed"])(evt, [_const__WEBPACK_IMPORTED_MODULE_10__["ENTER_KEY"]])) { + if (Object(_event__WEBPACK_IMPORTED_MODULE_0__["isKeyPressed"])(evt, [_const__WEBPACK_IMPORTED_MODULE_25__["ENTER_KEY"]])) { this.filter(); Object(_event__WEBPACK_IMPORTED_MODULE_0__["cancelEvt"])(evt); Object(_event__WEBPACK_IMPORTED_MODULE_0__["stopEvt"])(evt); @@ -25237,7 +25248,7 @@ function () { } } - 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"]])) { + if (Object(_event__WEBPACK_IMPORTED_MODULE_0__["isKeyPressed"])(evt, [_const__WEBPACK_IMPORTED_MODULE_25__["ENTER_KEY"], _const__WEBPACK_IMPORTED_MODULE_25__["TAB_KEY"], _const__WEBPACK_IMPORTED_MODULE_25__["ESC_KEY"], _const__WEBPACK_IMPORTED_MODULE_25__["UP_ARROW_KEY"], _const__WEBPACK_IMPORTED_MODULE_25__["DOWN_ARROW_KEY"]])) { _root__WEBPACK_IMPORTED_MODULE_6__["root"].clearInterval(this.autoFilterTimer); this.autoFilterTimer = null; } else { @@ -25310,7 +25321,7 @@ function () { fltrow.className = this.fltsRowCssClass; if (this.isExternalFlt()) { - fltrow.style.display = _const__WEBPACK_IMPORTED_MODULE_10__["NONE"]; + fltrow.style.display = _const__WEBPACK_IMPORTED_MODULE_25__["NONE"]; } this.emitter.emit('filters-row-inserted', this, fltrow); @@ -25344,8 +25355,8 @@ function () { 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]); + var inpType = col === _const__WEBPACK_IMPORTED_MODULE_25__["INPUT"] ? 'text' : 'hidden'; + var inp = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])(_const__WEBPACK_IMPORTED_MODULE_25__["INPUT"], ['id', this.buildFilterId(colIndex)], ['type', inpType], ['ct', colIndex]); if (inpType !== 'hidden' && this.watermark) { inp.setAttribute('placeholder', this.isWatermarkArray ? this.watermark[colIndex] || '' : this.watermark); @@ -25386,7 +25397,7 @@ function () { 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]); + var btn = Object(_dom__WEBPACK_IMPORTED_MODULE_1__["createElm"])(_const__WEBPACK_IMPORTED_MODULE_25__["INPUT"], ['type', 'button'], ['value', this.btnText]); btn.className = this.btnCssClass; //filter is appended in container element container.appendChild(btn); @@ -25395,14 +25406,10 @@ function () { }); } /** - * Istantiate the collection of features required by the - * configuration and add them to the features registry. A feature is - * described by a `class` and `name` fields and and optional `property` - * field: - * { - * class: AClass, - * name: 'aClass' - * } + * Conditionally istantiate each feature class in passed collection if + * required by configuration and add it to the features registry. A feature + * class meta information contains a `name` field and optional `altName` and + * `alwaysInstantiate` fields * @param {Array} [features=[]] * @private */ @@ -25413,27 +25420,31 @@ function () { 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; + // features.forEach((feature) => { + // // TODO: remove the property field. + // // Due to naming convention inconsistencies, a `property` + // // field is added to allow a conditional instanciation based + // // on that property on TableFilter, if supplied. + // feature.property = feature.property || feature.name; + // if (!this.hasConfig || this[feature.property] === true || + // feature.enforce === true) { + // let {class: Cls, name} = feature; + // this.Mod[name] = this.Mod[name] || new Cls(this); + // } + // }); + features.forEach(function (featureCls) { + var Cls = featureCls; + var inst = new Cls(_this5); + var meta = Cls.meta; + var name = meta.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); + if (!_this5.hasConfig || _this5[name] === true || Boolean(meta.alwaysInstantiate)) { + _this5.Mod[name] = _this5.Mod[name] || inst; } }); } /** - * Initialise the passed features collection. A feature is described by a - * `class` and `name` fields and and optional `property` field: - * { - * class: AClass, - * name: 'aClass' - * } + * Initialise each feature class in passed collection. * @param {Array} [features=[]] * @private */ @@ -25444,11 +25455,19 @@ function () { var _this6 = this; var features = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - features.forEach(function (feature) { - var property = feature.property, - name = feature.name; + // features.forEach((feature) => { + // let {property, name} = feature; + // if (this[property] === true && this.Mod[name]) { + // this.Mod[name].init(); + // } + // }); + // this.instantiateFeatures(features); + features.forEach(function (featureCls) { + _this6.instantiateFeatures([featureCls]); - if (_this6[property] === true && _this6.Mod[name]) { + var name = featureCls.meta.name; + + if (_this6[name] === true && _this6.Mod[name]) { _this6.Mod[name].init(); } }); @@ -25911,7 +25930,7 @@ function () { hasNM = reNm === term, hasRE = reRe.test(term); // Check for dates or resolve date type - if (this.hasType(colIdx, [_const__WEBPACK_IMPORTED_MODULE_10__["DATE"]])) { + if (this.hasType(colIdx, [_const__WEBPACK_IMPORTED_MODULE_25__["DATE"]])) { var dte1, dte2; var dateType = this.Mod.dateType; var isValidDate = dateType.isValid.bind(dateType); @@ -26021,7 +26040,7 @@ function () { } 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) { + if (numData && this.hasType(colIdx, [_const__WEBPACK_IMPORTED_MODULE_25__["NUMBER"], _const__WEBPACK_IMPORTED_MODULE_25__["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 @@ -26127,13 +26146,13 @@ function () { var fltColType = this.getFilterType(index); - if (fltColType !== _const__WEBPACK_IMPORTED_MODULE_10__["MULTIPLE"] && fltColType !== _const__WEBPACK_IMPORTED_MODULE_10__["CHECKLIST"]) { + if (fltColType !== _const__WEBPACK_IMPORTED_MODULE_25__["MULTIPLE"] && fltColType !== _const__WEBPACK_IMPORTED_MODULE_25__["CHECKLIST"]) { fltValue = flt.value; } //mutiple select - else if (fltColType === _const__WEBPACK_IMPORTED_MODULE_10__["MULTIPLE"]) { + else if (fltColType === _const__WEBPACK_IMPORTED_MODULE_25__["MULTIPLE"]) { fltValue = this.feature('dropdown').getValues(index); } //checklist - else if (fltColType === _const__WEBPACK_IMPORTED_MODULE_10__["CHECKLIST"]) { + else if (fltColType === _const__WEBPACK_IMPORTED_MODULE_25__["CHECKLIST"]) { fltValue = this.feature('checkList').getValues(index); } //return an empty string if collection is empty or contains a single //empty string @@ -26299,11 +26318,11 @@ function () { var colIndex = cell.cellIndex; var value = this.getCellValue(cell); - if (this.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_10__["FORMATTED_NUMBER"]])) { + if (this.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_25__["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"]])) { + } else if (this.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_25__["NUMBER"]])) { return Number(value); - } else if (this.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_10__["DATE"]])) { + } else if (this.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_25__["DATE"]])) { var dateType = this.Mod.dateType; return dateType.parse(value, dateType.getLocale(colIndex)); } @@ -26641,7 +26660,7 @@ function () { isValid = true; } - var displayFlag = isValid ? '' : _const__WEBPACK_IMPORTED_MODULE_10__["NONE"], + var displayFlag = isValid ? '' : _const__WEBPACK_IMPORTED_MODULE_25__["NONE"], validFlag = isValid ? 'true' : 'false'; row.style.display = displayFlag; @@ -26698,7 +26717,7 @@ function () { } //multiple selects - if (fltColType === _const__WEBPACK_IMPORTED_MODULE_10__["MULTIPLE"]) { + if (fltColType === _const__WEBPACK_IMPORTED_MODULE_25__["MULTIPLE"]) { var values = Object(_types__WEBPACK_IMPORTED_MODULE_3__["isArray"])(query) ? query : query.split(' ' + this.orOperator + ' '); if (this.loadFltOnDemand && !this.initialized) { @@ -26707,7 +26726,7 @@ function () { this.emitter.emit('select-options', this, index, values); } //checklist - else if (fltColType === _const__WEBPACK_IMPORTED_MODULE_10__["CHECKLIST"]) { + else if (fltColType === _const__WEBPACK_IMPORTED_MODULE_25__["CHECKLIST"]) { var _values = []; if (this.loadFltOnDemand && !this.initialized) { @@ -26941,7 +26960,7 @@ function () { key: "isExactMatch", value: function isExactMatch(colIndex) { var fltType = this.getFilterType(colIndex); - return this.exactMatchByCol[colIndex] || this.exactMatch || fltType !== _const__WEBPACK_IMPORTED_MODULE_10__["INPUT"]; + return this.exactMatchByCol[colIndex] || this.exactMatch || fltType !== _const__WEBPACK_IMPORTED_MODULE_25__["INPUT"]; } /** * Check if passed row is valid @@ -27178,7 +27197,7 @@ function () { var eachRow = this.eachRow(); eachRow(function (row) { if (!_this19.paging) { - if (_this19.getRowDisplay(row) !== _const__WEBPACK_IMPORTED_MODULE_10__["NONE"]) { + if (_this19.getRowDisplay(row) !== _const__WEBPACK_IMPORTED_MODULE_25__["NONE"]) { _this19.validRowsIndex.push(row.rowIndex); } } else { @@ -27362,7 +27381,7 @@ function () { value: function getDecimal(colIndex) { var decimal = this.decimalSeparator; - if (this.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_10__["FORMATTED_NUMBER"]])) { + if (this.hasType(colIndex, [_const__WEBPACK_IMPORTED_MODULE_25__["FORMATTED_NUMBER"]])) { var colType = this.colTypes[colIndex]; if (colType.hasOwnProperty('decimal')) { diff --git a/dist/tablefilter/tablefilter.js.map b/dist/tablefilter/tablefilter.js.map index 324e4fa3..97d2e8e4 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/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/register.js","webpack:///./src/root.js","webpack:///./src/settings.js","webpack:///./src/sort.js","webpack:///./src/string.js","webpack:///./src/tablefilter.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","FeaturesRegistry","Register","log","_mod_","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","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","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","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;;A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","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\":\"973b3f20052aa524e437\"}[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 {Register} from './register';\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 Register {\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","import {defaultsStr} from './settings';\r\nimport {toCamelCase} from './string';\r\n\r\nexport const FeaturesRegistry = {};\r\n\r\nexport class Register {\r\n constructor(tf, cls = {}) {\r\n console.log(tf, cls);\r\n /**\r\n * TableFilter instance\r\n * @type {TableFilter}\r\n */\r\n this.tf = tf;\r\n\r\n /**\r\n * Feature name, retrieved from alternate class name\r\n * if found defined or from camelised class name\r\n * @type {String}\r\n */\r\n this.feature = defaultsStr(cls.altName, toCamelCase(cls.name));\r\n console.log(cls !== {}, typeof {}, typeof cls);\r\n if (cls !== {}) {\r\n this.tf._mod_[this.feature] = cls;\r\n }\r\n\r\n // this.instantiate(cls, this.feature);\r\n }\r\n\r\n // instantiate(cls, name) {\r\n // let Cls = cls;\r\n // console.log(Boolean(this.tf[name]),\r\n // Boolean(Cls.alwaysInstantiate));\r\n // if (!this.tf.hasConfig || Boolean(this.tf[name])\r\n // || Boolean(cls.alwaysInstantiate)) {\r\n // this.tf.Mod[name] = this.tf.Mod[name] || new Cls(tf);\r\n // }\r\n // }\r\n}","/**\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 = '') => {\r\n return text.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) => {\r\n if (p2) {\r\n return p2.toUpperCase();\r\n }\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\nimport { RowsCounter } from './modules/rowsCounter';\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 // console.log(this.Mod, this._mod_);\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 console.log(this.Mod, this._mod_);\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","\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 +{"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/register.js","webpack:///./src/root.js","webpack:///./src/settings.js","webpack:///./src/sort.js","webpack:///./src/string.js","webpack:///./src/tablefilter.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","doc","document","write","name","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","enabled","feature","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","paging","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","meta","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","state","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","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","gridLayout","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","help","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","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","Register","log","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","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","alternateRows","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","markActiveColumns","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","rowsCounter","statusBar","displayBtn","btnReset","onBeforeReset","on_before_reset","onAfterReset","on_after_reset","autoFilter","auto_filter","autoFilterDelay","isUserTyping","autoFilterTimer","highlight_keywords","noResults","dateType","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","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","featureCls","Cls","inst","exts","__webpack_public_path__","ext","loadExtension","hasExtension","modulePath","require","mod","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","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;;A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","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\":\"0c56575d9b568fc4dedd\"}[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\n// import {Help} from './modules/help';\r\n// import {State} from './modules/state';\r\n// import {GridLayout} from './modules/gridLayout';\r\n// import {Loader} from './modules/loader';\r\n// import {HighlightKeyword} from './modules/highlightKeywords';\r\n// import {PopupFilter} from './modules/popupFilter';\r\n// import {MarkActiveColumns} from './modules/markActiveColumns';\r\n// import {RowsCounter} from './modules/rowsCounter';\r\n// import {StatusBar} from './modules/statusBar';\r\n// import {ClearButton} from './modules/clearButton';\r\n// import {AlternateRows} from './modules/alternateRows';\r\n// import {NoResults} from './modules/noResults';\r\n// import {Paging} from './modules/paging';\r\n// import {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 {Array}\r\n */\r\nexport const FEATURES = [];\r\n// export 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 {Register} from './register';\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 Register {\r\n /**\r\n * Creates an instance of Feature\r\n * @param {Object} tf TableFilter instance\r\n * @param {Class} feature Feature class for TableFilter registration\r\n */\r\n constructor(tf, 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[this.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 /**\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 and 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, ClearButton);\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.meta = {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 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.meta = {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.meta = {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, PopupFilter);\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.meta = {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);\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.meta = {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","import {defaultsStr} from './settings';\r\nimport {toCamelCase} from './string';\r\nimport {FEATURES} from './const';\r\n\r\nexport class Register {\r\n constructor(tf, cls = {}) {\r\n cls.meta = cls.meta || {};\r\n console.log(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, retrieved from alternate class name if found or from\r\n * camelised class name as per TableFilter convention\r\n * @type {String}\r\n */\r\n this.feature = defaultsStr(cls.meta.altName, toCamelCase(cls.name));\r\n\r\n cls.meta.name = this.feature;\r\n\r\n // this.tf._mod_[this.feature] = cls;\r\n FEATURES[this.feature] = cls;\r\n\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 = '') => {\r\n return text.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) => {\r\n if (p2) {\r\n return p2.toUpperCase();\r\n }\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\nimport {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\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\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 // //FEATURES\r\n [Toolbar]\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 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 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 * Conditionally istantiate each feature class in passed collection if\r\n * required by configuration and add it to the features registry. A feature\r\n * class meta information contains a `name` field and optional `altName` and\r\n * `alwaysInstantiate` fields\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 features.forEach(featureCls => {\r\n let Cls = featureCls;\r\n let inst = new Cls(this);\r\n\r\n let {meta} = Cls;\r\n let {name} = meta;\r\n\r\n if (!this.hasConfig || this[name] === true\r\n || Boolean(meta.alwaysInstantiate)) {\r\n this.Mod[name] = this.Mod[name] || inst;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Initialise each feature class in passed collection.\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 // this.instantiateFeatures(features);\r\n\r\n features.forEach(featureCls => {\r\n this.instantiateFeatures([featureCls]);\r\n\r\n let {name} = featureCls.meta;\r\n\r\n if (this[name] === 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","\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/src/const.js b/src/const.js index 219f4f2d..81ee3d33 100644 --- a/src/const.js +++ b/src/const.js @@ -1,18 +1,18 @@ -import {DateType} from './modules/dateType'; -import {Help} from './modules/help'; -import {State} from './modules/state'; -import {GridLayout} from './modules/gridLayout'; -import {Loader} from './modules/loader'; -import {HighlightKeyword} from './modules/highlightKeywords'; -import {PopupFilter} from './modules/popupFilter'; -import {MarkActiveColumns} from './modules/markActiveColumns'; -import {RowsCounter} from './modules/rowsCounter'; -import {StatusBar} from './modules/statusBar'; -import {ClearButton} from './modules/clearButton'; -import {AlternateRows} from './modules/alternateRows'; -import {NoResults} from './modules/noResults'; -import {Paging} from './modules/paging'; -import {Toolbar} from './modules/toolbar'; +// import {DateType} from './modules/dateType'; +// import {Help} from './modules/help'; +// import {State} from './modules/state'; +// import {GridLayout} from './modules/gridLayout'; +// import {Loader} from './modules/loader'; +// import {HighlightKeyword} from './modules/highlightKeywords'; +// import {PopupFilter} from './modules/popupFilter'; +// import {MarkActiveColumns} from './modules/markActiveColumns'; +// import {RowsCounter} from './modules/rowsCounter'; +// import {StatusBar} from './modules/statusBar'; +// import {ClearButton} from './modules/clearButton'; +// import {AlternateRows} from './modules/alternateRows'; +// import {NoResults} from './modules/noResults'; +// import {Paging} from './modules/paging'; +// import {Toolbar} from './modules/toolbar'; /** * Filter types @@ -135,72 +135,73 @@ export const AUTO_FILTER_DELAY = 750; /** * TableFilter features definitions - * @type {Object} + * @type {Array} */ -export const FEATURES = { - dateType: { - class: DateType, - name: 'dateType' - }, - help: { - class: Help, - name: 'help', - enforce: true - }, - state: { - class: State, - name: 'state' - }, - markActiveColumns: { - class: MarkActiveColumns, - name: 'markActiveColumns' - }, - gridLayout: { - class: GridLayout, - name: 'gridLayout' - }, - loader: { - class: Loader, - name: 'loader' - }, - highlightKeyword: { - class: HighlightKeyword, - name: 'highlightKeyword', - property: 'highlightKeywords' - }, - popupFilter: { - class: PopupFilter, - name: 'popupFilter', - property: 'popupFilters' - }, - rowsCounter: { - class: RowsCounter, - name: 'rowsCounter' - }, - statusBar: { - class: StatusBar, - name: 'statusBar' - }, - clearButton: { - class: ClearButton, - name: 'clearButton', - property: 'btnReset' - }, - alternateRows: { - class: AlternateRows, - name: 'alternateRows' - }, - noResults: { - class: NoResults, - name: 'noResults' - }, - paging: { - class: Paging, - name: 'paging' - }, - toolbar: { - class: Toolbar, - name: 'toolbar', - enforce: true - } -}; +export const FEATURES = []; +// export const FEATURES = { +// dateType: { +// class: DateType, +// name: 'dateType' +// }, +// help: { +// class: Help, +// name: 'help', +// enforce: true +// }, +// state: { +// class: State, +// name: 'state' +// }, +// markActiveColumns: { +// class: MarkActiveColumns, +// name: 'markActiveColumns' +// }, +// gridLayout: { +// class: GridLayout, +// name: 'gridLayout' +// }, +// loader: { +// class: Loader, +// name: 'loader' +// }, +// highlightKeyword: { +// class: HighlightKeyword, +// name: 'highlightKeyword', +// property: 'highlightKeywords' +// }, +// popupFilter: { +// class: PopupFilter, +// name: 'popupFilter', +// property: 'popupFilters' +// }, +// rowsCounter: { +// class: RowsCounter, +// name: 'rowsCounter' +// }, +// statusBar: { +// class: StatusBar, +// name: 'statusBar' +// }, +// clearButton: { +// class: ClearButton, +// name: 'clearButton', +// property: 'btnReset' +// }, +// alternateRows: { +// class: AlternateRows, +// name: 'alternateRows' +// }, +// noResults: { +// class: NoResults, +// name: 'noResults' +// }, +// paging: { +// class: Paging, +// name: 'paging' +// }, +// toolbar: { +// class: Toolbar, +// name: 'toolbar', +// enforce: true +// } +// }; diff --git a/src/extensions/advancedGrid/adapterEzEditTable.js b/src/extensions/advancedGrid/adapterEzEditTable.js index 7760d84b..00520df5 100644 --- a/src/extensions/advancedGrid/adapterEzEditTable.js +++ b/src/extensions/advancedGrid/adapterEzEditTable.js @@ -21,7 +21,7 @@ export default class AdapterEzEditTable extends Feature { * @param {Object} cfg Configuration options for ezEditTable library */ constructor(tf, cfg) { - super(tf, cfg.name); + super(tf, AdapterEzEditTable); /** * Module description @@ -505,3 +505,5 @@ export default class AdapterEzEditTable extends Feature { this.initialized = false; } } + +AdapterEzEditTable.meta = {altName: 'advancedGrid'}; diff --git a/src/extensions/colOps/colOps.js b/src/extensions/colOps/colOps.js index 784ab282..5db13c14 100644 --- a/src/extensions/colOps/colOps.js +++ b/src/extensions/colOps/colOps.js @@ -33,7 +33,7 @@ export default class ColOps extends Feature { * @param {Object} opts Configuration object */ constructor(tf, opts) { - super(tf, opts.name); + super(tf, ColOps); /** * Callback fired before columns operations start diff --git a/src/extensions/colsVisibility/colsVisibility.js b/src/extensions/colsVisibility/colsVisibility.js index 6bd3fc94..80a18533 100644 --- a/src/extensions/colsVisibility/colsVisibility.js +++ b/src/extensions/colsVisibility/colsVisibility.js @@ -23,7 +23,7 @@ export default class ColsVisibility extends Feature { * @param {Object} Configuration object */ constructor(tf, f) { - super(tf, f.name); + super(tf, ColsVisibility); // Configuration object let cfg = this.config; diff --git a/src/extensions/filtersVisibility/filtersVisibility.js b/src/extensions/filtersVisibility/filtersVisibility.js index 5b3467e6..4d9545d2 100644 --- a/src/extensions/filtersVisibility/filtersVisibility.js +++ b/src/extensions/filtersVisibility/filtersVisibility.js @@ -18,7 +18,7 @@ export default class FiltersVisibility extends Feature { * @param {Object} Configuration object */ constructor(tf, f) { - super(tf, f.name); + super(tf, FiltersVisibility); /** * Module name diff --git a/src/extensions/sort/adapterSortabletable.js b/src/extensions/sort/adapterSortabletable.js index dddd2ad0..4850a738 100644 --- a/src/extensions/sort/adapterSortabletable.js +++ b/src/extensions/sort/adapterSortabletable.js @@ -20,7 +20,7 @@ export default class AdapterSortableTable extends Feature { * @param {Object} opts Configuration object */ constructor(tf, opts) { - super(tf, opts.name); + super(tf, AdapterSortableTable); /** * Module name @@ -508,6 +508,8 @@ export default class AdapterSortableTable extends Feature { } +AdapterSortableTable.meta = {altName: 'sort'}; + //Converters function ipAddress(value) { let vals = value.split('.'); diff --git a/src/feature.js b/src/feature.js index ed677de7..1f91483a 100644 --- a/src/feature.js +++ b/src/feature.js @@ -9,28 +9,28 @@ export class Feature extends Register { /** * Creates an instance of Feature * @param {Object} tf TableFilter instance - * @param {String} feature Feature name known by TableFilter + * @param {Class} feature Feature class for TableFilter registration */ - constructor(tf, feature, cls) { + constructor(tf, cls) { super(tf, cls); /** * TableFilter instance * @type {TableFilter} */ - this.tf = tf; + //this.tf = tf; /** * Feature name * @type {String} */ - this.feature = feature; + // this.feature = feature; /** * TableFilter feature setting * @type {Boolean} */ - this.enabled = tf[feature]; + this.enabled = tf[this.feature]; /** * TableFilter configuration diff --git a/src/modules/alternateRows.js b/src/modules/alternateRows.js index ea4a9c94..ea84d052 100644 --- a/src/modules/alternateRows.js +++ b/src/modules/alternateRows.js @@ -14,9 +14,10 @@ export class AlternateRows extends Feature { * @param {Object} tf TableFilter instance */ constructor(tf) { - super(tf, 'alternateRows'); + super(tf, AlternateRows); let config = this.config; + /** * Css class for even rows (default: 'even') * @type {String} diff --git a/src/modules/baseDropdown.js b/src/modules/baseDropdown.js index b36639d6..2f3d9901 100644 --- a/src/modules/baseDropdown.js +++ b/src/modules/baseDropdown.js @@ -19,7 +19,7 @@ export class BaseDropdown extends Feature { * @param {TableFilter} tf */ constructor(tf) { - super(tf, 'baseDropdown'); + super(tf, BaseDropdown); let f = this.config; @@ -33,7 +33,7 @@ export class BaseDropdown extends Feature { f.filter_options_sorter : null; - // TODO: move here all properties shared by Dropdown CheckList + // TODO: move here all properties shared by Dropdown and CheckList /** * Has custom options diff --git a/src/modules/checkList.js b/src/modules/checkList.js index 7bb13102..5cf6ef09 100644 --- a/src/modules/checkList.js +++ b/src/modules/checkList.js @@ -22,7 +22,7 @@ export class CheckList extends BaseDropdown { * @param {TableFilter} tf TableFilter instance */ constructor(tf) { - super(tf, 'checkList'); + super(tf, CheckList); let f = this.config; diff --git a/src/modules/clearButton.js b/src/modules/clearButton.js index 913b43ad..6a16036e 100644 --- a/src/modules/clearButton.js +++ b/src/modules/clearButton.js @@ -15,7 +15,7 @@ export class ClearButton extends Feature { * @param {TableFilter} tf TableFilter instance */ constructor(tf) { - super(tf, 'btnReset'); + super(tf, ClearButton); let f = this.config.btn_reset || {}; @@ -139,4 +139,4 @@ export class ClearButton extends Feature { } // TODO: remove as soon as feature name is fixed -ClearButton.altName = 'btnReset'; +ClearButton.meta = {altName: 'btnReset'}; diff --git a/src/modules/dateType.js b/src/modules/dateType.js index 6485d4f2..4bd164bd 100644 --- a/src/modules/dateType.js +++ b/src/modules/dateType.js @@ -17,7 +17,7 @@ export class DateType extends Feature { * @param {TableFilter} tf TableFilter instance */ constructor(tf) { - super(tf, 'dateType'); + super(tf, DateType); /** * Global locale diff --git a/src/modules/dropdown.js b/src/modules/dropdown.js index eca8da8a..1a9b38fe 100644 --- a/src/modules/dropdown.js +++ b/src/modules/dropdown.js @@ -19,7 +19,7 @@ export class Dropdown extends BaseDropdown { * @param {TableFilter} tf TableFilter instance */ constructor(tf) { - super(tf, 'dropdown'); + super(tf, Dropdown); // Configuration object let f = this.config; diff --git a/src/modules/gridLayout.js b/src/modules/gridLayout.js index da0f0259..13a22936 100644 --- a/src/modules/gridLayout.js +++ b/src/modules/gridLayout.js @@ -17,7 +17,7 @@ export class GridLayout extends Feature { * @param {TableFilter} tf TableFilter instance */ constructor(tf) { - super(tf, 'gridLayout'); + super(tf, GridLayout); let f = this.config.grid_layout || {}; diff --git a/src/modules/hash.js b/src/modules/hash.js index 9e47c0a1..8b23e9e9 100644 --- a/src/modules/hash.js +++ b/src/modules/hash.js @@ -86,7 +86,7 @@ export class Hash { } /** - * Converts a URL hash into a state JSON object + * Converts a URL hash into a JSON object * * @param {String} hash URL hash fragment * @returns {Object} JSON object diff --git a/src/modules/help.js b/src/modules/help.js index 666cfcd8..a598b90f 100644 --- a/src/modules/help.js +++ b/src/modules/help.js @@ -21,7 +21,7 @@ export class Help extends Feature { * @param {TableFilter} tf TableFilter instance */ constructor(tf) { - super(tf, 'help'); + super(tf, Help); let f = this.config.help_instructions || {}; @@ -240,4 +240,4 @@ export class Help extends Feature { } // TODO: remove as soon as feature name is fixed -Help.alwaysInstantiate = true; +Help.meta = {alwaysInstantiate: true}; diff --git a/src/modules/highlightKeywords.js b/src/modules/highlightKeywords.js index 54891bf8..5d584ba2 100644 --- a/src/modules/highlightKeywords.js +++ b/src/modules/highlightKeywords.js @@ -174,4 +174,4 @@ export class HighlightKeyword { } // TODO: remove as soon as feature name is fixed -HighlightKeyword.altName = 'highlightKeywords'; +HighlightKeyword.meta = {altName: 'highlightKeywords'}; diff --git a/src/modules/loader.js b/src/modules/loader.js index d715c508..38dbffb1 100644 --- a/src/modules/loader.js +++ b/src/modules/loader.js @@ -44,7 +44,7 @@ export class Loader extends Feature { * @param {TableFilter} tf TableFilter instance */ constructor(tf) { - super(tf, 'loader'); + super(tf, Loader); let f = this.config.loader || {}; diff --git a/src/modules/markActiveColumns.js b/src/modules/markActiveColumns.js index 05084ff9..049190b8 100644 --- a/src/modules/markActiveColumns.js +++ b/src/modules/markActiveColumns.js @@ -16,7 +16,7 @@ export class MarkActiveColumns extends Feature { * @param {TableFilter} tf TableFilter instance */ constructor(tf) { - super(tf, 'markActiveColumns'); + super(tf, MarkActiveColumns); let config = this.config.mark_active_columns || {}; diff --git a/src/modules/noResults.js b/src/modules/noResults.js index df357c10..f943c122 100644 --- a/src/modules/noResults.js +++ b/src/modules/noResults.js @@ -17,7 +17,7 @@ export class NoResults extends Feature { * @param {TableFilter} tf TableFilter instance */ constructor(tf) { - super(tf, 'noResults'); + super(tf, NoResults); //configuration object let f = this.config.no_results_message || {}; diff --git a/src/modules/paging.js b/src/modules/paging.js index 1d6156cd..f9f35096 100644 --- a/src/modules/paging.js +++ b/src/modules/paging.js @@ -21,7 +21,7 @@ export class Paging extends Feature { * @param {TableFilter} tf TableFilter instance */ constructor(tf) { - super(tf, 'paging'); + super(tf, Paging); // Configuration object let f = this.config.paging || {}; diff --git a/src/modules/popupFilter.js b/src/modules/popupFilter.js index db85c04f..0e1e9f1f 100644 --- a/src/modules/popupFilter.js +++ b/src/modules/popupFilter.js @@ -19,7 +19,7 @@ export class PopupFilter extends Feature { * @param {TableFilter} tf TableFilter instance */ constructor(tf) { - super(tf, 'popupFilters'); + super(tf, PopupFilter); // Configuration object let f = this.config.popup_filters || {}; @@ -458,4 +458,4 @@ export class PopupFilter extends Feature { } // TODO: remove as soon as feature name is fixed -PopupFilter.altName = 'popupFilters'; +PopupFilter.meta = {altName: 'popupFilters'}; diff --git a/src/modules/rowsCounter.js b/src/modules/rowsCounter.js index 4c4f3284..b40dfa97 100644 --- a/src/modules/rowsCounter.js +++ b/src/modules/rowsCounter.js @@ -17,7 +17,7 @@ export class RowsCounter extends Feature { * @param {TableFilter} tf TableFilter instance */ constructor(tf) { - super(tf, 'rowsCounter', RowsCounter); + super(tf, RowsCounter); // TableFilter configuration let f = this.config.rows_counter || {}; diff --git a/src/modules/state.js b/src/modules/state.js index 579944f0..e95fae91 100644 --- a/src/modules/state.js +++ b/src/modules/state.js @@ -19,7 +19,7 @@ export class State extends Feature { * @param {TableFilter} tf TableFilter instance */ constructor(tf) { - super(tf, 'state'); + super(tf, State); let cfg = this.config.state || {}; diff --git a/src/modules/statusBar.js b/src/modules/statusBar.js index 0336c17a..a929d4d9 100644 --- a/src/modules/statusBar.js +++ b/src/modules/statusBar.js @@ -30,7 +30,7 @@ export class StatusBar extends Feature { * @param {TableFilter} tf TableFilter instance */ constructor(tf) { - super(tf, 'statusBar'); + super(tf, StatusBar); // Configuration object let f = this.config.status_bar || {}; diff --git a/src/modules/toolbar.js b/src/modules/toolbar.js index 9f2e119d..78c6a380 100644 --- a/src/modules/toolbar.js +++ b/src/modules/toolbar.js @@ -29,7 +29,7 @@ export class Toolbar extends Feature { * @memberof Toolbar */ constructor(tf) { - super(tf, 'toolbar'); + super(tf, Toolbar); // Configuration object let f = this.config.toolbar || {}; @@ -221,4 +221,4 @@ export class Toolbar extends Feature { } // TODO: remove as soon as feature name is fixed -Toolbar.alwaysInstantiate = true; +Toolbar.meta = {alwaysInstantiate: true}; diff --git a/src/register.js b/src/register.js index d1d9da53..6fa7f863 100644 --- a/src/register.js +++ b/src/register.js @@ -1,11 +1,11 @@ import {defaultsStr} from './settings'; import {toCamelCase} from './string'; - -export const FeaturesRegistry = {}; +import {FEATURES} from './const'; export class Register { constructor(tf, cls = {}) { - console.log(tf, cls); + cls.meta = cls.meta || {}; + /** * TableFilter instance * @type {TableFilter} @@ -13,24 +13,15 @@ export class Register { this.tf = tf; /** - * Feature name, retrieved from alternate class name - * if found defined or from camelised class name + * Feature name, retrieved from alternate class name if found or from + * camelised class name as per TableFilter convention * @type {String} */ - this.feature = defaultsStr(cls.altName, toCamelCase(cls.name)); + this.feature = defaultsStr(cls.meta.altName, toCamelCase(cls.name)); - this.tf._mod_[this.feature] = cls; + cls.meta.name = this.feature; + + FEATURES[this.feature] = cls; - // this.instantiate(cls, this.feature); } - - // instantiate(cls, name) { - // let Cls = cls; - // console.log(Boolean(this.tf[name]), - // Boolean(Cls.alwaysInstantiate)); - // if (!this.tf.hasConfig || Boolean(this.tf[name]) - // || Boolean(cls.alwaysInstantiate)) { - // this.tf.Mod[name] = this.tf.Mod[name] || new Cls(tf); - // } - // } } \ No newline at end of file diff --git a/src/tablefilter.js b/src/tablefilter.js index a1e5a4ff..dd1b0d1f 100644 --- a/src/tablefilter.js +++ b/src/tablefilter.js @@ -17,6 +17,21 @@ import {root} from './root'; import {Emitter} from './emitter'; import {Dropdown} from './modules/dropdown'; import {CheckList} from './modules/checkList'; +import {DateType} from './modules/dateType'; +import {Help} from './modules/help'; +import {State} from './modules/state'; +import {GridLayout} from './modules/gridLayout'; +import {Loader} from './modules/loader'; +import {HighlightKeyword} from './modules/highlightKeywords'; +import {PopupFilter} from './modules/popupFilter'; +import {MarkActiveColumns} from './modules/markActiveColumns'; +import {RowsCounter} from './modules/rowsCounter'; +import {StatusBar} from './modules/statusBar'; +import {ClearButton} from './modules/clearButton'; +import {AlternateRows} from './modules/alternateRows'; +import {NoResults} from './modules/noResults'; +import {Paging} from './modules/paging'; +import {Toolbar} from './modules/toolbar'; import { INPUT, SELECT, MULTIPLE, CHECKLIST, NONE, @@ -24,7 +39,6 @@ import { CELL_TAG, AUTO_FILTER_DELAY, NUMBER, DATE, FORMATTED_NUMBER, FEATURES } from './const'; -import { RowsCounter } from './modules/rowsCounter'; let doc = root.document; @@ -920,7 +934,6 @@ export class TableFilter { * @private */ this.Mod = {}; - this._mod_ = {}; /** * Extensions registry @@ -930,9 +943,10 @@ export class TableFilter { // conditionally instantiate required features this.instantiateFeatures( - Object.keys(FEATURES).map((item) => FEATURES[item]) + // //Object.keys(FEATURES).map((item) => FEATURES[item]) + // //FEATURES + [Toolbar] ); - // console.log(this.Mod, this._mod_); } /** @@ -952,20 +966,28 @@ export class TableFilter { //loads theme this.loadThemes(); - const { dateType, help, state, markActiveColumns, gridLayout, loader, - highlightKeyword, popupFilter, rowsCounter, statusBar, clearButton, - alternateRows, noResults, paging, toolbar } = FEATURES; - console.log(this.Mod, this._mod_); + // const { dateType, help, state, markActiveColumns, gridLayout, loader, + // highlightKeyword, popupFilter, rowsCounter, statusBar, clearButton, + // alternateRows, noResults, paging, toolbar } = FEATURES; + //explicitly initialise features in given order this.initFeatures([ - dateType, - help, - state, - markActiveColumns, - gridLayout, - loader, - highlightKeyword, - popupFilter + // dateType, + // help, + // state, + // markActiveColumns, + // gridLayout, + // loader, + // highlightKeyword, + // popupFilter + DateType, + Help, + State, + MarkActiveColumns, + GridLayout, + Loader, + HighlightKeyword, + PopupFilter ]); //filters grid is not generated @@ -1038,13 +1060,20 @@ export class TableFilter { } this.initFeatures([ - rowsCounter, - statusBar, - clearButton, - alternateRows, - noResults, - paging, - toolbar + // rowsCounter, + // statusBar, + // clearButton, + // alternateRows, + // noResults, + // paging, + // toolbar + RowsCounter, + StatusBar, + ClearButton, + AlternateRows, + NoResults, + Paging, + Toolbar ]); this.setColWidths(); @@ -1253,47 +1282,61 @@ export class TableFilter { } /** - * Istantiate the collection of features required by the - * configuration and add them to the features registry. A feature is - * described by a `class` and `name` fields and and optional `property` - * field: - * { - * class: AClass, - * name: 'aClass' - * } + * Conditionally istantiate each feature class in passed collection if + * required by configuration and add it to the features registry. A feature + * class meta information contains a `name` field and optional `altName` and + * `alwaysInstantiate` fields * @param {Array} [features=[]] * @private */ instantiateFeatures(features = []) { - features.forEach((feature) => { - // TODO: remove the property field. - // Due to naming convention inconsistencies, a `property` - // field is added to allow a conditional instanciation based - // on that property on TableFilter, if supplied. - feature.property = feature.property || feature.name; - if (!this.hasConfig || this[feature.property] === true || - feature.enforce === true) { - let {class: Cls, name} = feature; + // features.forEach((feature) => { + // // TODO: remove the property field. + // // Due to naming convention inconsistencies, a `property` + // // field is added to allow a conditional instanciation based + // // on that property on TableFilter, if supplied. + // feature.property = feature.property || feature.name; + // if (!this.hasConfig || this[feature.property] === true || + // feature.enforce === true) { + // let {class: Cls, name} = feature; - this.Mod[name] = this.Mod[name] || new Cls(this); + // this.Mod[name] = this.Mod[name] || new Cls(this); + // } + // }); + features.forEach(featureCls => { + let Cls = featureCls; + let inst = new Cls(this); + + let {meta} = Cls; + let {name} = meta; + + if (!this.hasConfig || this[name] === true + || Boolean(meta.alwaysInstantiate)) { + this.Mod[name] = this.Mod[name] || inst; } }); } /** - * Initialise the passed features collection. A feature is described by a - * `class` and `name` fields and and optional `property` field: - * { - * class: AClass, - * name: 'aClass' - * } + * Initialise each feature class in passed collection. * @param {Array} [features=[]] * @private */ initFeatures(features = []) { - features.forEach((feature) => { - let {property, name} = feature; - if (this[property] === true && this.Mod[name]) { + // features.forEach((feature) => { + // let {property, name} = feature; + // if (this[property] === true && this.Mod[name]) { + // this.Mod[name].init(); + // } + // }); + // this.instantiateFeatures(features); + + features.forEach(featureCls => { + this.instantiateFeatures([featureCls]); + + let {name} = featureCls.meta; + + if (this[name] === true && this.Mod[name]) { this.Mod[name].init(); } });