@easydata/crud 1.4.17 → 1.4.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/easydata.crud.cjs.js +22 -0
- package/dist/easydata.crud.cjs.js.map +1 -0
- package/dist/easydata.crud.es.js +22 -0
- package/dist/easydata.crud.es.js.map +1 -0
- package/package.json +15 -50
- package/api-easydata.js +0 -5
- package/dist/assets/css/ed-view.css +0 -107
- package/dist/browser/easydata.css +0 -2190
- package/dist/browser/easydata.css.map +0 -1
- package/dist/browser/easydata.js +0 -12214
- package/dist/browser/easydata.js.map +0 -1
- package/dist/browser/easydata.min.css +0 -3
- package/dist/browser/easydata.min.js +0 -3
- package/dist/browser/easydata.min.js.LICENSE.txt +0 -9
- package/dist/browser/easydata.min.js.map +0 -1
- package/dist/bundles/easydata.crud.js +0 -8517
- package/dist/bundles/easydata.crud.js.map +0 -1
- package/dist/bundles/easydata.crud.min.js +0 -3
- package/dist/bundles/easydata.crud.min.js.LICENSE.txt +0 -1
- package/dist/bundles/easydata.crud.min.js.map +0 -1
- package/dist/lib/filter/data_filter.js +0 -2
- package/dist/lib/filter/data_filter.js.map +0 -1
- package/dist/lib/filter/text_data_filter.js +0 -123
- package/dist/lib/filter/text_data_filter.js.map +0 -1
- package/dist/lib/form/entity_edit_form.js +0 -134
- package/dist/lib/form/entity_edit_form.js.map +0 -1
- package/dist/lib/form/entity_form_builder.js +0 -441
- package/dist/lib/form/entity_form_builder.js.map +0 -1
- package/dist/lib/i18n/text_resources.js +0 -32
- package/dist/lib/i18n/text_resources.js.map +0 -1
- package/dist/lib/main/data_context.js +0 -168
- package/dist/lib/main/data_context.js.map +0 -1
- package/dist/lib/main/easy_data_server_loader.js +0 -44
- package/dist/lib/main/easy_data_server_loader.js.map +0 -1
- package/dist/lib/public_api.js +0 -17
- package/dist/lib/public_api.js.map +0 -1
- package/dist/lib/utils/utils.js +0 -25
- package/dist/lib/utils/utils.js.map +0 -1
- package/dist/lib/validators/datetime_validator.js +0 -46
- package/dist/lib/validators/datetime_validator.js.map +0 -1
- package/dist/lib/validators/required_validator.js +0 -37
- package/dist/lib/validators/required_validator.js.map +0 -1
- package/dist/lib/validators/type_validator.js +0 -47
- package/dist/lib/validators/type_validator.js.map +0 -1
- package/dist/lib/validators/validator.js +0 -7
- package/dist/lib/validators/validator.js.map +0 -1
- package/dist/lib/views/easy_data_view_dispatcher.js +0 -114
- package/dist/lib/views/easy_data_view_dispatcher.js.map +0 -1
- package/dist/lib/views/entity_data_view.js +0 -225
- package/dist/lib/views/entity_data_view.js.map +0 -1
- package/dist/lib/views/options.js +0 -2
- package/dist/lib/views/options.js.map +0 -1
- package/dist/lib/views/root_data_view.js +0 -49
- package/dist/lib/views/root_data_view.js.map +0 -1
- package/dist/lib/widgets/progress_bar.js +0 -16
- package/dist/lib/widgets/progress_bar.js.map +0 -1
- package/dist/lib/widgets/text_filter_widget.js +0 -214
- package/dist/lib/widgets/text_filter_widget.js.map +0 -1
- package/styles-easydata.js +0 -4
- package/tsconfig.json +0 -23
- package/webpack.config.js +0 -137
- /package/dist/{lib → types}/filter/data_filter.d.ts +0 -0
- /package/dist/{lib → types}/filter/text_data_filter.d.ts +0 -0
- /package/dist/{lib → types}/form/entity_edit_form.d.ts +0 -0
- /package/dist/{lib → types}/form/entity_form_builder.d.ts +0 -0
- /package/dist/{lib → types}/i18n/text_resources.d.ts +0 -0
- /package/dist/{lib → types}/main/data_context.d.ts +0 -0
- /package/dist/{lib → types}/main/easy_data_server_loader.d.ts +0 -0
- /package/dist/{lib → types}/public_api.d.ts +0 -0
- /package/dist/{lib → types}/utils/utils.d.ts +0 -0
- /package/dist/{lib → types}/validators/datetime_validator.d.ts +0 -0
- /package/dist/{lib → types}/validators/required_validator.d.ts +0 -0
- /package/dist/{lib → types}/validators/type_validator.d.ts +0 -0
- /package/dist/{lib → types}/validators/validator.d.ts +0 -0
- /package/dist/{lib → types}/views/easy_data_view_dispatcher.d.ts +0 -0
- /package/dist/{lib → types}/views/entity_data_view.d.ts +0 -0
- /package/dist/{lib → types}/views/options.d.ts +0 -0
- /package/dist/{lib → types}/views/root_data_view.d.ts +0 -0
- /package/dist/{lib → types}/widgets/progress_bar.d.ts +0 -0
- /package/dist/{lib → types}/widgets/text_filter_widget.d.ts +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"easydata.crud.min.js","mappings":"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","sources":["webpack://easydataCRUD/webpack/universalModuleDefinition","webpack://easydataCRUD/../ui/dist/lib/utils/browser_utils.js","webpack://easydataCRUD/webpack/bootstrap","webpack://easydataCRUD/webpack/runtime/define property getters","webpack://easydataCRUD/webpack/runtime/hasOwnProperty shorthand","webpack://easydataCRUD/webpack/runtime/make namespace object","webpack://easydataCRUD/../core/dist/lib/types/data_type.js","webpack://easydataCRUD/../core/dist/lib/types/entity_attr_kind.js","webpack://easydataCRUD/../core/dist/lib/types/editor_tag.js","webpack://easydataCRUD/../core/dist/lib/http/http_method.js","webpack://easydataCRUD/../core/dist/lib/http/http_request.js","webpack://easydataCRUD/../core/dist/lib/i18n/i18n.js","webpack://easydataCRUD/../core/dist/lib/utils/utils.js","webpack://easydataCRUD/../core/dist/lib/utils/string_utils.js","webpack://easydataCRUD/../core/dist/lib/http/http_action_result.js","webpack://easydataCRUD/../core/dist/lib/http/http_client.js","webpack://easydataCRUD/../core/dist/lib/data/data_column.js","webpack://easydataCRUD/../core/dist/lib/meta/meta_entity.js","webpack://easydataCRUD/../core/dist/lib/meta/value_editor.js","webpack://easydataCRUD/../core/dist/lib/meta/meta_data.js","webpack://easydataCRUD/../core/dist/lib/data/aggr_settings.js","webpack://easydataCRUD/../core/dist/lib/utils/liquid.js","webpack://easydataCRUD/../core/dist/lib/data/data_row.js","webpack://easydataCRUD/../core/dist/lib/data/easy_data_table.js","webpack://easydataCRUD/../core/dist/lib/utils/easy_guid.js","webpack://easydataCRUD/../core/dist/lib/event/event_emitter.js","webpack://easydataCRUD/../core/dist/lib/i18n/load_default_locale_settings.js","webpack://easydataCRUD/../core/dist/lib/public_api.js","webpack://easydataCRUD/./src/filter/text_data_filter.ts","webpack://easydataCRUD/../ui/dist/lib/utils/ui-utils.js","webpack://easydataCRUD/../ui/dist/lib/utils/dom_elem_builder.js","webpack://easydataCRUD/../ui/dist/lib/utils/mask.js","webpack://easydataCRUD/../ui/dist/lib/utils/drag_manager.js","webpack://easydataCRUD/../ui/dist/lib/grid/easy_grid_options.js","webpack://easydataCRUD/../ui/dist/lib/grid/easy_grid_cell_renderer.js","webpack://easydataCRUD/../ui/dist/lib/grid/easy_grid_columns.js","webpack://easydataCRUD/../ui/dist/lib/dialogs/dialog_service.js","webpack://easydataCRUD/../ui/dist/lib/grid/easy_grid.js","webpack://easydataCRUD/../ui/dist/lib/datetimepicker/calendar.js","webpack://easydataCRUD/../ui/dist/lib/datetimepicker/date_time_picker.js","webpack://easydataCRUD/../ui/dist/lib/datetimepicker/default_calendar.js","webpack://easydataCRUD/../ui/dist/lib/datetimepicker/time_picker.js","webpack://easydataCRUD/../ui/dist/lib/datetimepicker/default_time_picker.js","webpack://easydataCRUD/../ui/dist/lib/datetimepicker/default_date_time_picker.js","webpack://easydataCRUD/../ui/dist/lib/dialogs/default_dialog_service.js","webpack://easydataCRUD/../ui/dist/lib/i18n/text_resources.js","webpack://easydataCRUD/../ui/dist/lib/public_api.js","webpack://easydataCRUD/./src/utils/utils.ts","webpack://easydataCRUD/./src/validators/validator.ts","webpack://easydataCRUD/./src/validators/datetime_validator.ts","webpack://easydataCRUD/./src/form/entity_edit_form.ts","webpack://easydataCRUD/./src/widgets/text_filter_widget.ts","webpack://easydataCRUD/./src/form/entity_form_builder.ts","webpack://easydataCRUD/./src/widgets/progress_bar.ts","webpack://easydataCRUD/./src/main/easy_data_server_loader.ts","webpack://easydataCRUD/./src/main/data_context.ts","webpack://easydataCRUD/./src/validators/type_validator.ts","webpack://easydataCRUD/./src/validators/required_validator.ts","webpack://easydataCRUD/./src/views/entity_data_view.ts","webpack://easydataCRUD/./src/views/root_data_view.ts","webpack://easydataCRUD/./src/views/easy_data_view_dispatcher.ts","webpack://easydataCRUD/./src/i18n/text_resources.ts"],"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(\"easydataCRUD\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"easydataCRUD\"] = factory();\n\telse\n\t\troot[\"easydataCRUD\"] = factory();\n})(self, () => {\nreturn ","export var browserUtils;\n(function (browserUtils) {\n var _isFirefox = null;\n var _isIE = null;\n function IsIE() {\n // return eval('/*@cc_on!@*/false || !!document.documentMode');\n if (_isIE === null) {\n var ua = navigator.userAgent;\n /* MSIE used to detect old browsers and Trident used to newer ones*/\n _isIE = ua.indexOf(\"MSIE \") > -1 || ua.indexOf(\"Trident/\") > -1;\n }\n return _isIE;\n }\n browserUtils.IsIE = IsIE;\n function IsEdge() {\n return !IsIE() && eval('!!window.StyleMedia');\n }\n browserUtils.IsEdge = IsEdge;\n function IsFirefox() {\n if (_isFirefox === null) {\n var ua = navigator.userAgent;\n _isFirefox = ua.toLowerCase().indexOf('firefox') > -1;\n }\n return _isFirefox;\n }\n browserUtils.IsFirefox = IsFirefox;\n var _detectedIsMobileMode = false;\n var _isMobileMode = undefined;\n var detectIsMobileMode = function () {\n var oldValue = isMobileMode();\n _detectedIsMobileMode = window.matchMedia('only screen and (max-width: 840px)').matches\n || window.matchMedia('only screen and (max-height: 420px)').matches;\n var newValue = isMobileMode();\n if (newValue !== oldValue && mobileModeChangeHandler) {\n mobileModeChangeHandler(newValue);\n }\n };\n detectIsMobileMode();\n window.addEventListener('resize', function () { return detectIsMobileMode(); });\n function isMobileMode() {\n if (_isMobileMode !== undefined) {\n return _isMobileMode;\n }\n else {\n return _detectedIsMobileMode;\n }\n }\n browserUtils.isMobileMode = isMobileMode;\n function setIsMobileMode(value) {\n var oldValue = isMobileMode();\n _isMobileMode = value;\n var newValue = isMobileMode();\n if (newValue !== oldValue && mobileModeChangeHandler) {\n mobileModeChangeHandler(newValue);\n }\n }\n browserUtils.setIsMobileMode = setIsMobileMode;\n var mobileModeChangeHandler;\n function onMobileModeChanged(callback) {\n mobileModeChangeHandler = callback;\n }\n browserUtils.onMobileModeChanged = onMobileModeChanged;\n function getMobileCssClass() {\n return isMobileMode() ? 'k-mobile' : null;\n }\n browserUtils.getMobileCssClass = getMobileCssClass;\n})(browserUtils || (browserUtils = {}));\n//# sourceMappingURL=browser_utils.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/** Represents the common types of the data. */\nexport var DataType;\n(function (DataType) {\n /** Unknown type value*/\n DataType[DataType[\"Unknown\"] = 0] = \"Unknown\";\n /** String value*/\n DataType[DataType[\"String\"] = 1] = \"String\";\n /** 8-bit integer value */\n DataType[DataType[\"Byte\"] = 2] = \"Byte\";\n /** 16-bit integer value */\n DataType[DataType[\"Word\"] = 3] = \"Word\";\n /** 32-bit integer value */\n DataType[DataType[\"Int32\"] = 4] = \"Int32\";\n /** 64-bit integer value */\n DataType[DataType[\"Int64\"] = 5] = \"Int64\";\n /** Boolean value */\n DataType[DataType[\"Bool\"] = 6] = \"Bool\";\n /** Floating-point numeric value */\n DataType[DataType[\"Float\"] = 7] = \"Float\";\n /** Money value */\n DataType[DataType[\"Currency\"] = 8] = \"Currency\";\n /** Binary-coded decimal value */\n DataType[DataType[\"BCD\"] = 9] = \"BCD\";\n /** Date value */\n DataType[DataType[\"Date\"] = 10] = \"Date\";\n /** Time value */\n DataType[DataType[\"Time\"] = 11] = \"Time\";\n /** Date and time value */\n DataType[DataType[\"DateTime\"] = 12] = \"DateTime\";\n /** Autoincrement 32-bit integer value */\n DataType[DataType[\"Autoinc\"] = 13] = \"Autoinc\";\n /** MEMO value (text with unlimited length) */\n DataType[DataType[\"Memo\"] = 14] = \"Memo\";\n /** BLOB value (any data with unlimited length) */\n DataType[DataType[\"Blob\"] = 15] = \"Blob\";\n /** Fixed character value */\n DataType[DataType[\"FixedChar\"] = 16] = \"FixedChar\";\n /** The unique identifier */\n DataType[DataType[\"Guid\"] = 17] = \"Guid\";\n /*-------- Spatial data types ----------*/\n /** Any geometry data */\n DataType[DataType[\"Geometry\"] = 18] = \"Geometry\";\n /** Any data that represents some geography objects</summary> */\n DataType[DataType[\"Geography\"] = 19] = \"Geography\";\n})(DataType || (DataType = {}));\n//# sourceMappingURL=data_type.js.map","export var EntityAttrKind;\n(function (EntityAttrKind) {\n EntityAttrKind[EntityAttrKind[\"Data\"] = 0] = \"Data\";\n EntityAttrKind[EntityAttrKind[\"Virtual\"] = 1] = \"Virtual\";\n EntityAttrKind[EntityAttrKind[\"Lookup\"] = 2] = \"Lookup\";\n})(EntityAttrKind || (EntityAttrKind = {}));\n//# sourceMappingURL=entity_attr_kind.js.map","export var EditorTag = {\n /** Unknown tag value */\n Unknown: \"Unknown\",\n /** Edit tag value */\n Edit: \"EDIT\",\n /** DateTime tag value */\n DateTime: \"DATETIME\",\n /** List tag value */\n List: \"LIST\",\n /** CustomList tag value */\n CustomList: \"CUSTOMLIST\",\n /** File tag value */\n File: \"FILE\"\n};\n//# sourceMappingURL=editor_tag.js.map","export var HttpMethod;\n(function (HttpMethod) {\n HttpMethod[\"Trace\"] = \"TRACE\";\n HttpMethod[\"Options\"] = \"OPTIONS\";\n HttpMethod[\"Get\"] = \"GET\";\n HttpMethod[\"Put\"] = \"PUT\";\n HttpMethod[\"Post\"] = \"POST\";\n HttpMethod[\"Delete\"] = \"DELETE\";\n})(HttpMethod || (HttpMethod = {}));\n//# sourceMappingURL=http_method.js.map","var HttpRequest = /** @class */ (function () {\n function HttpRequest(xhr, descriptor) {\n this.xhr = xhr;\n this.method = descriptor.method;\n this.url = descriptor.url;\n this.headers = descriptor.headers;\n this.queryParams = descriptor.queryParams;\n this.data = descriptor.data;\n }\n HttpRequest.prototype.setHeader = function (name, value) {\n this.headers[name] = value;\n };\n HttpRequest.prototype.setQueryParam = function (name, value) {\n this.queryParams[name] = value;\n };\n HttpRequest.prototype.getXMLHttpRequest = function () {\n return this.xhr;\n };\n HttpRequest.prototype.getResponseHeaders = function () {\n if (this.xhr.readyState == this.xhr.HEADERS_RECEIVED) {\n var headers = this.xhr.getAllResponseHeaders();\n var arr = headers.trim().split(/[\\r\\n]+/);\n // Create a map of header names to values\n var headerMap = {};\n for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) {\n var line = arr_1[_i];\n var parts = line.split(': ');\n var header = parts.shift();\n var value = parts.join(': ');\n headerMap[header] = value;\n }\n return headerMap;\n }\n return {};\n };\n HttpRequest.prototype.open = function () {\n var _this = this;\n if (this.xhr.readyState !== this.xhr.UNSENT)\n return;\n var url = this.url;\n if (this.queryParams && Object.keys(this.queryParams).length > 0) {\n url += encodeURI('?' + Object.keys(this.queryParams)\n .map(function (param) { return param + '=' + _this.queryParams[param]; })\n .join('&'));\n }\n this.xhr.open(this.method, url, true);\n this.xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n for (var header in this.headers) {\n this.xhr.setRequestHeader(header, this.headers[header]);\n }\n };\n HttpRequest.prototype.abort = function () {\n this.xhr.abort();\n };\n return HttpRequest;\n}());\nexport { HttpRequest };\n//# sourceMappingURL=http_request.js.map","import { DataType } from '../types/data_type';\nimport { utils } from '../utils/utils';\n/**\n * Contains internatialization functionality.\n */\nexport var i18n;\n(function (i18n) {\n var englishUSLocaleSettings = {\n shortDateFormat: 'MM/dd/yyyy',\n longDateFormat: 'dd MMM, yyyy',\n editDateFormat: 'MM/dd/yyyy',\n shortTimeFormat: 'HH:mm',\n editTimeFormat: 'HH:mm',\n longTimeFormat: 'HH:mm:ss',\n shortMonthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n longMonthNames: ['January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'],\n shortWeekDayNames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n longWeekDayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n decimalSeparator: '.',\n currency: 'USD'\n };\n var defaultLocale = {\n localeId: 'en-US',\n englishName: 'English',\n displayName: 'English',\n texts: {\n ButtonOK: 'OK',\n ButtonCancel: 'Cancel',\n Yes: 'Yes',\n No: 'No',\n True: 'True',\n False: 'False'\n },\n settings: englishUSLocaleSettings\n };\n var allLocales = {\n 'en-US': defaultLocale\n };\n var currentLocale;\n var mappers = [];\n function mapInfo(info) {\n for (var _i = 0, mappers_1 = mappers; _i < mappers_1.length; _i++) {\n var mapper = mappers_1[_i];\n mapper(info);\n }\n }\n function addMapper(mapper) {\n mappers.push(mapper);\n }\n i18n.addMapper = addMapper;\n /**\n * Gets added locales with their names.\n * @returns The locales.\n */\n function getLocales() {\n var result = [];\n for (var locale in allLocales) {\n result.push({\n locale: locale,\n englishName: allLocales[locale].englishName,\n displayName: allLocales[locale].displayName\n });\n }\n return result.sort(function (a, b) {\n if (a.englishName > b.englishName) {\n return 1;\n }\n else if (a.englishName === b.englishName) {\n return 0;\n }\n return -1;\n });\n }\n i18n.getLocales = getLocales;\n /**\n * Gets the current locale ID.\n * @returns The locale.\n */\n function getCurrentLocale() {\n return currentLocale.localeId;\n }\n i18n.getCurrentLocale = getCurrentLocale;\n /**\n * Sets the curent locale.\n * @deprecated Use setCurrentLocale instead\n * @param l The locale.\n */\n function setLocale(l) {\n console.warn('This method is deprecated. Use setCurrentLocale instead');\n setCurrentLocale(l);\n }\n i18n.setLocale = setLocale;\n /**\n * Sets the curent locale.\n * @param localeId The locale.\n */\n function setCurrentLocale(localeId) {\n var newLocale = allLocales[localeId];\n if (newLocale) {\n utils.assignDeep(currentLocale, newLocale);\n }\n else {\n currentLocale.englishName = localeId;\n currentLocale.displayName = localeId;\n currentLocale.texts = utils.assignDeep({}, defaultLocale.texts);\n }\n currentLocale.localeId = localeId;\n }\n i18n.setCurrentLocale = setCurrentLocale;\n /**\n * Returns localized text by the key defined in parameter.\n * Here we get the text of the resource string assigned to CmdClickToAddCondition key:\n *\n ```\n const text = i18n.getText('CmdClickToAddCondition')\n ```\n * @param args The keys of the resource string.\n * @returns Text of the resource defined by key or null if the key is not found\n *\n */\n function getText() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var textsObj = currentLocale.texts;\n var resText = '';\n if (args && args.length) {\n var argLength = args.length;\n for (var i = 0; i < argLength; i++) {\n resText = textsObj[args[i]];\n if (typeof resText === 'object') {\n textsObj = resText;\n }\n else {\n break;\n }\n }\n }\n return resText;\n }\n i18n.getText = getText;\n function getLocaleSettings() {\n return currentLocale.settings;\n }\n i18n.getLocaleSettings = getLocaleSettings;\n function getOneLocaleSetting(key) {\n return currentLocale.settings[key];\n }\n i18n.getOneLocaleSetting = getOneLocaleSetting;\n function getShortMonthName(monthNum) {\n var settings = getLocaleSettings();\n if (monthNum > 0 && monthNum < 13) {\n return settings.shortMonthNames[monthNum - 1];\n }\n else {\n throw 'Wrong month number: ' + monthNum;\n }\n }\n i18n.getShortMonthName = getShortMonthName;\n function getLongMonthName(monthNum) {\n var settings = getLocaleSettings();\n if (monthNum > 0 && monthNum < 13) {\n return settings.longMonthNames[monthNum - 1];\n }\n else {\n throw 'Wrong month number: ' + monthNum;\n }\n }\n i18n.getLongMonthName = getLongMonthName;\n function getShortWeekDayName(dayNum) {\n var settings = getLocaleSettings();\n if (dayNum > 0 && dayNum < 8) {\n return settings.shortWeekDayNames.length >= dayNum\n ? settings.shortWeekDayNames[dayNum - 1]\n : dayNum.toString();\n }\n else {\n throw 'Wrong month number: ' + dayNum;\n }\n }\n i18n.getShortWeekDayName = getShortWeekDayName;\n function getLongWeekDayName(dayNum) {\n var settings = getLocaleSettings();\n if (dayNum > 0 && dayNum < 8) {\n return settings.longWeekDayNames.length >= dayNum\n ? settings.longWeekDayNames[dayNum - 1]\n : dayNum.toString();\n }\n else {\n throw 'Wrong month number: ' + dayNum;\n }\n }\n i18n.getLongWeekDayName = getLongWeekDayName;\n /**\n * Updates the locale settings (date/time formats, separators, etc) for the specified locale.\n * @param settingsToUpdate a LocaleSettings object\n */\n function updateLocaleSettings(settingsToUpdate) {\n if (!currentLocale.settings) {\n currentLocale.settings = utils.assignDeep({}, englishUSLocaleSettings);\n }\n currentLocale.settings = utils.assignDeep(currentLocale.settings, settingsToUpdate);\n }\n i18n.updateLocaleSettings = updateLocaleSettings;\n /**\n * Updates the texts for the current locale\n * @param texts A plain JS object that contains textual resources\n */\n function updateLocaleTexts(texts) {\n if (typeof texts !== 'object') {\n console.error('Wrong parameter type in updateLocaleTexts function call.' +\n 'The first parameter (localeId) is not necessary. Use updateLocaleTexts(texts) instead');\n return;\n }\n mapInfo({ localeId: currentLocale.localeId, texts: texts });\n utils.assignDeep(currentLocale.texts, texts);\n }\n i18n.updateLocaleTexts = updateLocaleTexts;\n function updateDefaultTexts(texts) {\n for (var localeId in allLocales) {\n var locale = allLocales[localeId];\n locale.texts = utils.assignDeep({}, texts, locale.texts);\n }\n currentLocale.texts = utils.assignDeep({}, texts, currentLocale.texts);\n }\n i18n.updateDefaultTexts = updateDefaultTexts;\n /**\n * Updates the information for the specified locale.\n * @param localeId The locale ID (like 'en', 'de', 'uk', etc).\n * If the locale does exist yet - it will be added\n * @param localeInfo a LocaleInfo object that contains the locale settings and textual resources\n */\n function updateLocaleInfo(localeId, localeData) {\n mapInfo(localeData);\n var localeInfoToUpdate = currentLocale;\n if (localeId) {\n if (!localeData.localeId) {\n localeData.localeId = localeId;\n }\n localeInfoToUpdate = allLocales[localeId];\n if (!localeInfoToUpdate) {\n localeInfoToUpdate = utils.assignDeep({}, defaultLocale);\n allLocales[localeId] = localeInfoToUpdate;\n }\n }\n utils.assignDeep(localeInfoToUpdate, localeData);\n }\n i18n.updateLocaleInfo = updateLocaleInfo;\n /**\n * Adds the locale.\n * @param localeId The locale ID (like 'en', 'de', 'uk', etc).\n * If the locale does exist yet - it will be created\n * @param localeInfo - a LocaleInfo object that contains the locale settings and textual resources\n */\n function addLocale(localeId, localeInfo) {\n updateLocaleInfo(localeId, localeInfo);\n }\n i18n.addLocale = addLocale;\n /**\n * Overwrites some locale settings (date/time formats) with the formats used in browser's current language\n */\n function determineSettingsByLocale(localeId) {\n var now = new Date(2020, 5, 7, 19, 34, 56, 88);\n var dateOptions = { year: 'numeric', month: 'numeric', day: 'numeric' };\n var timeOptions = { hour: 'numeric', minute: 'numeric', second: 'numeric' };\n var dateStr = now.toLocaleDateString(localeId, dateOptions);\n var timeStr = now.toLocaleTimeString(localeId, timeOptions);\n var dateFormat = dateStr\n .replace('07', 'dd')\n .replace('7', 'd')\n .replace('06', 'MM')\n .replace('6', 'M')\n .replace('2020', 'yyyy')\n .replace('20', 'yy');\n var timeFormat = timeStr\n .replace('19', 'HH')\n .replace('07', 'hh')\n .replace('7', 'h')\n .replace('34', 'mm')\n .replace('56', 'ss')\n .replace('PM', 'tt');\n if (!currentLocale.settings) {\n currentLocale.settings = {};\n }\n var localeSettings = {\n shortDateFormat: dateFormat,\n shortTimeFormat: timeFormat\n };\n updateLocaleSettings(localeSettings);\n }\n function loadBrowserLocaleSettings() {\n var lang = typeof navigator === 'object' ? navigator.language : undefined;\n determineSettingsByLocale(lang);\n }\n function resetLocales() {\n if (!currentLocale) {\n currentLocale = utils.assignDeep({}, defaultLocale);\n loadBrowserLocaleSettings();\n }\n }\n i18n.resetLocales = resetLocales;\n function dateTimeToStr(dateTime, dataType, format) {\n if (format) {\n if (format == 'd') {\n format = buildShortDateTimeFormat(DataType.Date);\n }\n else if (format == 'D') {\n format = buildLongDateTimeFormat(DataType.Date);\n }\n else if (format == 'f') {\n format = buildShortDateTimeFormat(DataType.DateTime);\n }\n else if (format == 'F') {\n format = buildLongDateTimeFormat(DataType.DateTime);\n }\n }\n else {\n format = buildShortDateTimeFormat(dataType);\n }\n return utils.dateTimeToStr(dateTime, format);\n }\n i18n.dateTimeToStr = dateTimeToStr;\n function buildShortDateTimeFormat(dataType) {\n var localeSettings = getLocaleSettings();\n var format;\n switch (dataType) {\n case DataType.Date:\n format = localeSettings.shortDateFormat;\n break;\n case DataType.Time:\n format = localeSettings.shortTimeFormat;\n break;\n default:\n format = localeSettings.shortDateFormat + ' ' + localeSettings.shortTimeFormat;\n break;\n }\n return format;\n }\n function buildLongDateTimeFormat(dataType) {\n var localeSettings = getLocaleSettings();\n var format;\n switch (dataType) {\n case DataType.Date:\n format = localeSettings.longDateFormat;\n break;\n case DataType.Time:\n format = localeSettings.longTimeFormat;\n break;\n default:\n format = localeSettings.longDateFormat + ' ' + localeSettings.longTimeFormat;\n break;\n }\n return format;\n }\n function numberToStr(number, format) {\n if (format && format.length > 0) {\n var type = format.charAt(0).toUpperCase();\n if (type === 'S') {\n return formatWithSequence(number, format.slice(1));\n }\n else if (['D', 'F', 'C'].indexOf(type) >= 0) {\n var locale = getCurrentLocale();\n return number.toLocaleString(locale, getNumberFormatOptions(format));\n }\n else {\n return convertWithMask(Math.trunc(number), format);\n }\n }\n var localeSettings = getLocaleSettings();\n return utils.numberToStr(number, localeSettings.decimalSeparator);\n }\n i18n.numberToStr = numberToStr;\n function booleanToStr(bool, format) {\n if (format && format.length > 0) {\n var type = format.charAt(0).toUpperCase();\n if (type === 'S') {\n var values = format.slice(1).split('|');\n if (values.length > 1) {\n var value = values[(bool) ? 1 : 0];\n return i18n.getText(value) || value;\n }\n }\n }\n return \"\".concat(bool);\n }\n i18n.booleanToStr = booleanToStr;\n var cachedSequenceFormats = {};\n function formatWithSequence(number, format) {\n if (!cachedSequenceFormats[format]) {\n // parse and save in cache format values \n var values_2 = format.split('|')\n .filter(function (v) { return v.length > 0; })\n .map(function (v) { return v.split('='); });\n cachedSequenceFormats[format] = {};\n if (values_2.length > 0) {\n if (values_2[0].length > 1) {\n for (var _i = 0, values_1 = values_2; _i < values_1.length; _i++) {\n var value = values_1[_i];\n cachedSequenceFormats[format][Number.parseInt(value[1])] = value[0];\n }\n }\n else {\n values_2.forEach(function (value, index) {\n cachedSequenceFormats[format][index] = value[0];\n });\n }\n }\n }\n var values = cachedSequenceFormats[format];\n if (values[number] !== undefined) {\n var value = values[number];\n return i18n.getText(value) || value;\n }\n return number.toString();\n }\n function convertWithMask(number, mask) {\n var value = number.toString();\n var result = '';\n var index = value.length - 1;\n for (var i = mask.length - 1; i >= 0; i--) {\n var ch = mask.charAt(i);\n if (ch === '#' || ch === '0') {\n if (index >= 0) {\n result += value.charAt(index);\n index--;\n }\n else {\n if (ch === '0') {\n result += 0;\n }\n }\n }\n else {\n result += ch;\n }\n }\n return result.split('').reverse().join('');\n }\n function getNumberFormatOptions(format) {\n var localeSettings = getLocaleSettings();\n var type = format[0].toUpperCase();\n var digits = (format.length > 1)\n ? Number.parseInt(format.slice(1))\n : type == 'D' ? 1 : 2;\n switch (type) {\n case 'D':\n return {\n style: 'decimal',\n useGrouping: false,\n minimumIntegerDigits: digits\n };\n case 'C':\n return {\n style: 'currency',\n currency: localeSettings.currency,\n minimumFractionDigits: digits\n };\n default:\n return {\n style: 'decimal',\n minimumFractionDigits: digits,\n maximumFractionDigits: digits\n };\n }\n }\n})(i18n || (i18n = {}));\n//# sourceMappingURL=i18n.js.map","import * as strf from './string_utils';\nimport { DataType } from '../types/data_type';\nimport { i18n } from '../i18n/i18n';\nexport var utils;\n(function (utils) {\n function getAllDataTypes() {\n return Object.values(DataType).filter(function (item) { return typeof item === \"number\"; });\n }\n utils.getAllDataTypes = getAllDataTypes;\n function getDateDataTypes() {\n return [DataType.Time, DataType.Date, DataType.DateTime];\n }\n utils.getDateDataTypes = getDateDataTypes;\n function getStringDataTypes() {\n return [DataType.String, DataType.Memo, DataType.FixedChar];\n }\n utils.getStringDataTypes = getStringDataTypes;\n var _numericTypes = [DataType.Byte, DataType.Word, DataType.Int32,\n DataType.Int64, DataType.Float, DataType.Currency, DataType.Autoinc];\n function getNumericDataTypes() {\n return _numericTypes;\n }\n utils.getNumericDataTypes = getNumericDataTypes;\n var _intTypes = [DataType.Byte, DataType.Word, DataType.Int32, DataType.Int64, DataType.Autoinc];\n //-------------- object functions -------------------\n /**\n * Copy the content of all objests passed in `args` parameters into `target`\n * and returns the result\n * NB: This function copies only the first level properties.\n * For a deep copy please use `assignDeep`\n * @param target - the target object\n * @param args - an array of the source objects\n */\n function assign(target) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n for (var i = 0; i < args.length; i++) {\n var source = args[i];\n if (source) {\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n target[key] = source[key];\n }\n }\n }\n }\n return target;\n }\n utils.assign = assign;\n /**\n * Copy the content of all objests passed in `args` parameters into `target`\n * and returns the result\n * NB: This function make a deep copy -\n * so `assignDeep` will be called recursively for all object properties\n * on the first level.\n * @param target - the target object\n * @param sources - an array of the source objects\n */\n function assignDeep(target) {\n var sources = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sources[_i - 1] = arguments[_i];\n }\n return assignDeepCore(new WeakMap(), target, sources);\n }\n utils.assignDeep = assignDeep;\n function assignDeepCore(hashSet, target, sources) {\n if (!target) {\n target = {};\n }\n for (var _i = 0, sources_1 = sources; _i < sources_1.length; _i++) {\n var source = sources_1[_i];\n if (source) {\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n var sourceVal = source[key];\n if (sourceVal !== null && typeof sourceVal === 'object') {\n if (hashSet.has(sourceVal)) {\n target[key] = hashSet.get(sourceVal);\n }\n else {\n if (Array.isArray(sourceVal)) {\n target[key] = createArrayFrom(sourceVal);\n hashSet.set(sourceVal, target[key]);\n }\n else {\n if (typeof target[key] == 'undefined' || target[key] == null) {\n target[key] = Object.create(Object.getPrototypeOf(sourceVal));\n }\n hashSet.set(sourceVal, target[key]);\n assignDeepCore(hashSet, target[key], [sourceVal]);\n }\n }\n }\n else {\n target[key] = sourceVal;\n }\n }\n }\n }\n }\n return target;\n }\n function getIfDefined(value, defaultValue) {\n return (typeof value !== 'undefined') ? value : defaultValue;\n }\n utils.getIfDefined = getIfDefined;\n function IsDefinedAndNotNull(value) {\n return typeof value !== 'undefined' && value !== null;\n }\n utils.IsDefinedAndNotNull = IsDefinedAndNotNull;\n function copyArrayTo(collection1, collection2) {\n var len1 = collection1.length;\n var len2 = collection2.length;\n for (var i = 0; i < len1 && i < len2; i++) {\n collection2[i] = collection1[i];\n }\n }\n utils.copyArrayTo = copyArrayTo;\n function createArrayFrom(collection) {\n var result = [];\n for (var _i = 0, collection_1 = collection; _i < collection_1.length; _i++) {\n var item = collection_1[_i];\n result.push(item);\n }\n return result;\n }\n utils.createArrayFrom = createArrayFrom;\n /**\n * Searches an array of the objects which implement ItemWithId by ID\n * Returs the found object or null.\n * @param array\n * @param id\n */\n function findItemById(array, id) {\n var arrLength = array.length;\n for (var idx = 0; idx < arrLength; idx++) {\n if (array[idx].id === id)\n return array[idx];\n }\n return null;\n }\n utils.findItemById = findItemById;\n function findItemIndexById(array, id) {\n var arrLength = array.length;\n for (var idx = 0; idx < arrLength; idx++) {\n if (array[idx].id === id)\n return idx;\n }\n return -1;\n }\n utils.findItemIndexById = findItemIndexById;\n /**\n * Searches an array of the objects which implement ItemWithId by ID\n * Returs the index of the found element, or -1 if nothing was found.\n * @param array\n * @param id\n */\n function indexOfArrayItem(arr, item) {\n if (arr.indexOf) {\n return arr.indexOf(item);\n }\n else {\n var len = arr.length;\n for (var i = 0; i < len; i++) {\n if (item == arr[i]) {\n return i;\n }\n }\n return -1;\n }\n }\n utils.indexOfArrayItem = indexOfArrayItem;\n /**\n * Moves an item in some array to a new position\n * @param array\n * @param index1\n * @param index2\n */\n function moveArrayItem(array, index1, index2) {\n if (index1 >= array.length) {\n throw 'Index out of bounds: ' + index1;\n }\n if (index2 >= array.length) {\n index2 = array.length - 1;\n }\n var item = array.splice(index1, 1)[0];\n array.splice(index2, 0, item);\n }\n utils.moveArrayItem = moveArrayItem;\n /**\n * Searches for a particular item in the array are removes that item if found.\n * @param arr\n * @param value\n */\n function removeArrayItem(arr, value) {\n var index = arr.indexOf(value);\n if (index != -1) {\n return arr.splice(index, 1)[0];\n }\n }\n utils.removeArrayItem = removeArrayItem;\n function insertArrayItem(arr, index, value) {\n arr.splice(index, 0, value);\n }\n utils.insertArrayItem = insertArrayItem;\n function fillArray(arr, value, start, end) {\n if (start === void 0) { start = 0; }\n var len = arr.length >>> 0;\n var relativeStart = start >> 0;\n var k = relativeStart < 0 ?\n Math.max(len + relativeStart, 0) :\n Math.min(relativeStart, len);\n var relativeEnd = end === undefined ?\n len : end >> 0;\n var final = relativeEnd < 0 ?\n Math.max(len + relativeEnd, 0) :\n Math.min(relativeEnd, len);\n while (k < final) {\n arr[k] = value;\n k++;\n }\n return arr;\n }\n utils.fillArray = fillArray;\n //------------ DOM utils ------------\n /**\n * Calculates the shift on which we need to move our element horizontally\n * to find current window\n * @param absLeft\n * @param width\n */\n function shiftToFitWindow(absLeft, width) {\n var body = document.getElementsByTagName('body')[0];\n var winWidth = window.innerWidth || document.documentElement.clientWidth || body.clientWidth;\n var absRight = absLeft + width;\n var shift = 0;\n if (absRight > winWidth) {\n shift = winWidth - absRight - 10;\n if (absLeft + shift < 0) {\n shift = 10 - absLeft;\n }\n }\n return shift;\n }\n utils.shiftToFitWindow = shiftToFitWindow;\n /**\n * Returns `true` if the value passed in the parameter is an object\n * @param val\n */\n function isObject(val) {\n if (val === null) {\n return false;\n }\n return ((typeof val === 'function') || (typeof val === 'object'));\n }\n utils.isObject = isObject;\n /**\n * Returns `true` if the `DataType` value passed in the parameter\n * represents some numeric type\n * @param dtype\n */\n function isNumericType(dtype) {\n var index = _numericTypes.indexOf(dtype);\n return (index >= 0);\n }\n utils.isNumericType = isNumericType;\n /**\n * Returns `true` if the `DataType` value passed in the parameter\n * represents some numeric type\n * @param dtype\n */\n function isIntType(dtype) {\n var index = _intTypes.indexOf(dtype);\n return (index >= 0);\n }\n utils.isIntType = isIntType;\n /**\n * Returns `true` if the value passed in the parameter is an a numeric value\n * @param val\n */\n function isNumeric(val) {\n return !isNaN(parseFloat(val)) && isFinite(val);\n }\n utils.isNumeric = isNumeric;\n /**\n * Returns `true` if two data types passed in parameters\n * are compatible - so it's safe to copy the values between\n * two expressions with these two types\n * @param type1\n * @param type2\n */\n function areCompatibleDataTypes(type1, type2) {\n return typeof type1 == \"undefined\" || typeof type2 == \"undefined\" || type1 == DataType.Unknown || type2 == DataType.Unknown\n || (type1 == type2) || (type1 == DataType.Date && type2 == DataType.DateTime)\n || (type1 == DataType.DateTime && type2 == DataType.Date);\n }\n utils.areCompatibleDataTypes = areCompatibleDataTypes;\n /**\n * Returns `true` if the property with named `propName`\n * in the object `obj` has some value\n * @param obj\n * @param propName\n */\n function isPropSet(obj, propName) {\n return obj[propName] || obj[propName.toLowerCase()] || obj[propName.toUpperCase()];\n }\n utils.isPropSet = isPropSet;\n //-------------- ID generator -----------\n var prefixIdLen = 4;\n var symbols = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n var magicTicks = 636712160627685350;\n /**\n * Generates an unique ID\n */\n function generateId(prefix) {\n if (!prefix) {\n prefix = 'easy';\n }\n var prfx = (prefix.length > prefixIdLen) ? squeezeMoniker(prefix, prefixIdLen) : prefix;\n if (prfx && prfx.length > 0) {\n prfx += \"-\";\n }\n //adding 2 random symbols\n var randValue = strf.repeatString(\"\", 2);\n ;\n var maxSymbolIndex = symbols.length - 1;\n randValue = replaceAtString(randValue, 0, symbols[getRandomInt(0, maxSymbolIndex)]);\n randValue = replaceAtString(randValue, 1, symbols[getRandomInt(0, maxSymbolIndex)]);\n //generating main ID part (64-base representation of the current value of the time ticks)\n var ticksNum64 = intToNum36(getNowTicks() - magicTicks);\n return prfx + randValue + ticksNum64;\n }\n utils.generateId = generateId;\n function intToNum36(value) {\n var targetBase = 36;\n var i = 14;\n var buffer = strf.repeatString(\"\", i);\n var rest = value;\n do {\n buffer = replaceAtString(buffer, i--, symbols[rest % targetBase]);\n rest = Math.floor(rest /= targetBase);\n } while (rest > 0);\n return strf.reverseString(buffer.trim());\n }\n function squeezeMoniker(str, maxlen) {\n var parts = str.split('-');\n var pml = 1;\n var ptt = maxlen;\n if (parts.length < maxlen) {\n pml = maxlen / parts.length;\n ptt = parts.length;\n }\n var result = \"\";\n for (var i = 0; i < ptt; i++) {\n result += squeeze(parts[i], pml);\n }\n return result;\n }\n function squeeze(str, maxlen) {\n var len = str.length;\n if (len > maxlen) {\n var step = len / maxlen;\n var result = \"\";\n result += str[0];\n var nextIndex = step;\n var ch = void 0;\n for (var i = 1; i < len; i++) {\n ch = str[i];\n if (i + 1 > nextIndex) {\n result += ch;\n nextIndex += step;\n }\n }\n return result;\n }\n else {\n return str;\n }\n }\n function replaceAtString(str, index, value) {\n return str.substr(0, index) + value + str.substr(index + value.length);\n }\n function getRandomInt(min, max) {\n return Math.floor(Math.random() * (max - min)) + min;\n }\n function getNowTicks() {\n return (621355968e9 + (new Date()).getTime() * 1e4);\n }\n function safeParseInt(str) {\n var res = parseInt(str);\n if (isNaN(res))\n throw \"\\\"\".concat(str, \"\\\" is not a valid number\");\n return res;\n }\n function getDaysInMonth(month, year) {\n return new Date(year, month + 1, 0).getDate();\n }\n // ------------- date/time functions -------------------\n // TO DO: improve to process all datetime cases\n function strToDateTime(value, format) {\n if (!value || value.length == 0)\n return new Date();\n var normalizedValue = value.replace(/[^a-zA-Z0-9_]/g, '-');\n var normalizedFormat = format.replace(/[^a-zA-Z0-9_]/g, '-');\n var formatItems = normalizedFormat.split('-');\n var dateItems = normalizedValue.split('-');\n var monthIndex = formatItems.indexOf(\"MM\");\n var dayIndex = formatItems.indexOf(\"dd\");\n var yearIndex = formatItems.indexOf(\"yyyy\");\n var hourIndex = formatItems.indexOf(\"HH\");\n var minutesIndex = formatItems.indexOf(\"mm\");\n var secondsIndex = formatItems.indexOf(\"ss\");\n var today = new Date();\n try {\n var year = yearIndex > -1 && yearIndex < dateItems.length\n ? safeParseInt(dateItems[yearIndex])\n : today.getFullYear();\n var month = monthIndex > -1 && monthIndex < dateItems.length\n ? safeParseInt(dateItems[monthIndex]) - 1\n : today.getMonth() - 1;\n if (month > 11)\n throw '';\n var day = dayIndex > -1 && dayIndex < dateItems.length\n ? safeParseInt(dateItems[dayIndex])\n : today.getDate();\n if (day > getDaysInMonth(month, year))\n throw '';\n var hour = hourIndex > -1 && hourIndex < dateItems.length\n ? safeParseInt(dateItems[hourIndex])\n : 0;\n if (hour > 23)\n throw '';\n var minute = minutesIndex > -1 && minutesIndex < dateItems.length\n ? safeParseInt(dateItems[minutesIndex])\n : 0;\n if (minute > 59)\n throw '';\n var second = secondsIndex > -1 && secondsIndex < dateItems.length\n ? safeParseInt(dateItems[secondsIndex])\n : 0;\n if (second > 59)\n throw '';\n return new Date(year, month, day, hour, minute, second);\n }\n catch (_a) {\n throw \"\".concat(value, \" is not a valid date.\");\n }\n }\n utils.strToDateTime = strToDateTime;\n function strToTime(str) {\n var timeItems = str.split(':');\n try {\n var hour = timeItems.length > 0 ? safeParseInt(timeItems[0]) : 0;\n if (hour > 23)\n throw '';\n var minute = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0;\n if (minute > 59)\n throw '';\n var second = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0;\n if (second > 59)\n throw '';\n return new Date(0, 0, 0, hour, minute, second);\n }\n catch (_a) {\n throw \"\".concat(str, \" is not a valid time.\");\n }\n }\n utils.strToTime = strToTime;\n var DT_FORMAT_RGEX = /\\[([^\\]]+)]|y{2,4}|M{1,4}|d{1,2}|H{1,2}|h{1,2}|m{2}|s{2}|t{2}/g;\n /**\n * Returns string representation of the date/time value according to the custom format (second parameter)\n * The format is compatible with the one used in .NET: https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings\n * @param date\n * @param format\n */\n function dateTimeToStr(date, format) {\n var year = date.getFullYear();\n var yearStr = year.toString();\n var month = date.getMonth() + 1;\n var day = date.getDate();\n var hour = date.getHours();\n var minute = date.getMinutes();\n var second = date.getSeconds();\n var hour12 = hour % 12 || 12; //the remainder of the division by 12. Or 12 if it's 0\n var isPm = hour > 11;\n var matches = {\n yyyy: yearStr,\n yy: yearStr.substring(yearStr.length - 2),\n MMMM: i18n.getLongMonthName(month),\n MMM: i18n.getShortMonthName(month),\n MM: (month < 10) ? '0' + month : month.toString(),\n M: month.toString(),\n dd: (day < 10) ? '0' + day : day.toString(),\n d: day.toString(),\n HH: (hour < 10) ? '0' + hour : hour.toString(),\n H: hour.toString(),\n hh: (hour12 < 10) ? '0' + hour12 : hour12.toString(),\n h: hour12.toString(),\n tt: isPm ? 'PM' : 'AM',\n mm: (minute < 10) ? '0' + minute : minute.toString(),\n ss: (second < 10) ? '0' + second : second.toString()\n };\n return format.replace(DT_FORMAT_RGEX, function (match, $1) {\n return $1 || matches[match];\n });\n }\n utils.dateTimeToStr = dateTimeToStr;\n /**\n * Converts a numeric value to the string taking into the account the decimal separator\n * @param value - the number to convert\n * @param decimalSeparator - the symbol that represents decimal separator. If not specified the function gets the one from the current locale settings.\n */\n function numberToStr(number, decimalSeparator) {\n decimalSeparator = decimalSeparator || i18n.getLocaleSettings().decimalSeparator;\n return number.toString().replace('.', decimalSeparator);\n }\n utils.numberToStr = numberToStr;\n})(utils || (utils = {}));\n//# sourceMappingURL=utils.js.map","export function repeatString(str, times) {\n var result = \"\";\n for (var i = 0; i < times; i++) {\n result += str;\n }\n return result;\n}\nexport function reverseString(str) {\n return str.split(\"\").reverse().join(\"\");\n}\nexport function strEndsWith(str, symbol) {\n return str && str.lastIndexOf(symbol) == (str.length - symbol.length);\n}\n/**\n * Adds two paths and returns the result\n * Correctly processes leading and trailing slashes\n * @param path1\n * @param path2\n */\nexport function combinePath(path1, path2) {\n var result = path1;\n if (result != null && result.length > 0) {\n if (result.charAt(result.length - 1) != '/')\n result += \"/\";\n result += path2;\n }\n else {\n result = path2;\n }\n return result;\n}\n//# sourceMappingURL=string_utils.js.map","var HttpActionResult = /** @class */ (function () {\n function HttpActionResult(request, promise) {\n this.request = request;\n this.promise = promise;\n }\n HttpActionResult.prototype.getPromise = function () {\n return this.promise;\n };\n HttpActionResult.prototype.getRequest = function () {\n return this.request;\n };\n HttpActionResult.prototype.then = function (onfulfilled, onrejected) {\n return this.promise.then(onfulfilled, onrejected);\n };\n HttpActionResult.prototype.catch = function (onrejected) {\n return this.promise.catch(onrejected);\n };\n HttpActionResult.prototype.finally = function (onfinally) {\n return this.promise.finally(onfinally);\n };\n return HttpActionResult;\n}());\nexport { HttpActionResult };\n//# sourceMappingURL=http_action_result.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { utils } from '../utils/utils';\nimport { HttpActionResult } from './http_action_result';\nimport { HttpMethod } from './http_method';\nimport { HttpRequest } from './http_request';\nvar HttpResponseError = /** @class */ (function (_super) {\n __extends(HttpResponseError, _super);\n function HttpResponseError(status, message) {\n var _this = _super.call(this, message) || this;\n _this.status = status;\n return _this;\n }\n return HttpResponseError;\n}(Error));\nexport { HttpResponseError };\nvar HttpClient = /** @class */ (function () {\n function HttpClient() {\n this.defaultHeaders = {};\n this.customPayload = undefined;\n }\n Object.defineProperty(HttpClient.prototype, \"responseBody\", {\n /** Gets the response body for the latest request */\n get: function () {\n return this._responseBody;\n },\n enumerable: false,\n configurable: true\n });\n HttpClient.prototype.get = function (url, options) {\n return this.send(HttpMethod.Get, url, null, options);\n };\n HttpClient.prototype.post = function (url, data, options) {\n return this.send(HttpMethod.Post, url, data, options);\n };\n HttpClient.prototype.put = function (url, data, options) {\n return this.send(HttpMethod.Put, url, data, options);\n };\n HttpClient.prototype.delete = function (url, data, options) {\n return this.send(HttpMethod.Delete, url, data, options);\n };\n HttpClient.prototype.send = function (method, url, data, options) {\n var _this = this;\n options = options || {};\n var dataType = options.dataType || 'json';\n var contentType = options.contentType || (dataType !== 'form-data')\n ? 'application/json'\n : null;\n if (data && dataType != 'form-data' && this.customPayload) {\n data.data = utils.assignDeep(data.data || {}, this.customPayload);\n }\n var XHR = ('onload' in new XMLHttpRequest())\n ? XMLHttpRequest\n : window[\"XDomainRequest\"]; //IE support\n var xhr = new XHR();\n var desc = {\n method: method,\n url: url,\n headers: __assign(__assign({}, this.defaultHeaders), options.headers || {}),\n queryParams: options.queryParams || {},\n data: data\n };\n if (contentType)\n desc.headers['Content-Type'] = contentType;\n var request = new HttpRequest(xhr, desc);\n if (this.beforeEachRequest) {\n console.warn(\"HttpClient: 'beforeEachRequest' is deprecated and will be removed in future updates.\\n Use 'onRequest' instead\");\n this.beforeEachRequest(request);\n }\n if (this.onRequest) {\n this.onRequest(request);\n }\n var dataToSend = (request.data && typeof request.data !== 'string'\n && dataType == 'json')\n ? JSON.stringify(request.data)\n : request.data;\n request.open();\n return new HttpActionResult(request, new Promise(function (resolve, reject) {\n if (options.responseType)\n xhr.responseType = options.responseType;\n xhr.onerror = function (error) {\n reject(new HttpResponseError(xhr.status, xhr.responseText));\n };\n xhr.onreadystatechange = function () {\n if (xhr.readyState != 4)\n return; //we process only the state change to DONE(4)\n var responseContentType = xhr.getResponseHeader('Content-Type') || '';\n var status = xhr.status;\n if (status === 0) {\n reject(new HttpResponseError(status, \"Network error or the request was aborted\"));\n }\n else if (status >= 200 && status < 400) {\n //Success\n var responseObj = (xhr.responseType === 'arraybuffer' || xhr.responseType === 'blob')\n ? xhr.response\n : (responseContentType.indexOf('application/json') == 0\n ? JSON.parse(xhr.responseText)\n : xhr.responseText);\n _this._responseBody = responseObj;\n if (_this.onResponse) {\n _this.onResponse(xhr);\n }\n resolve(responseObj);\n }\n else {\n //Error\n var rtPromise = (xhr.responseType === 'arraybuffer' || xhr.responseType === 'blob')\n ? HttpClient.decodeArrayBuffer(xhr.response)\n : Promise.resolve(xhr.responseText);\n rtPromise.then(function (responseText) {\n var responseObj = (responseContentType.indexOf('application/json') == 0)\n ? JSON.parse(responseText)\n : responseText;\n _this._responseBody = responseObj;\n var message = responseObj.message ||\n (status == 404\n ? \"No such endpoint: \".concat(url)\n : responseObj);\n reject(new HttpResponseError(status, message));\n });\n }\n };\n xhr.send(dataToSend);\n }));\n };\n HttpClient.decodeArrayBuffer = function (uintArray) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n reader.onloadend = function () {\n if (reader.readyState == FileReader.DONE) {\n resolve(reader.result);\n }\n };\n reader.readAsText(new Blob([uintArray]));\n });\n };\n return HttpClient;\n}());\nexport { HttpClient };\n//# sourceMappingURL=http_client.js.map","import { DataType } from '../types/data_type';\nimport { utils } from '../utils/utils';\nexport var ColumnAlignment;\n(function (ColumnAlignment) {\n ColumnAlignment[ColumnAlignment[\"None\"] = 0] = \"None\";\n ColumnAlignment[ColumnAlignment[\"Left\"] = 1] = \"Left\";\n ColumnAlignment[ColumnAlignment[\"Center\"] = 2] = \"Center\";\n ColumnAlignment[ColumnAlignment[\"Right\"] = 3] = \"Right\";\n})(ColumnAlignment || (ColumnAlignment = {}));\nvar DataColumn = /** @class */ (function () {\n function DataColumn(desc) {\n if (!desc)\n throw Error(\"Options are required\");\n if (!desc.id)\n throw Error(\"Field Id is required\");\n if (!desc.label)\n throw Error(\"Label is required\");\n this.id = desc.id;\n this.type = utils.getIfDefined(desc.type, DataType.String);\n this.label = desc.label;\n this.originAttrId = desc.originAttrId;\n this.isAggr = desc.isAggr || false;\n this.displayFormat = desc.dfmt;\n this.groupFooterColumnTemplate = desc.gfct;\n this.style = desc.style || {};\n this.description = desc.description;\n this.calculatedWidth = 0;\n }\n return DataColumn;\n}());\nexport { DataColumn };\nvar DataColumnList = /** @class */ (function () {\n function DataColumnList() {\n this.items = [];\n this.mapper = {};\n this._dateColumnIdx = [];\n }\n Object.defineProperty(DataColumnList.prototype, \"count\", {\n get: function () {\n return this.items.length;\n },\n enumerable: false,\n configurable: true\n });\n DataColumnList.prototype.add = function (colOrDesc) {\n var col;\n if (colOrDesc instanceof DataColumn) {\n col = colOrDesc;\n }\n else {\n col = new DataColumn(colOrDesc);\n }\n var index = this.items.length;\n this.items.push(col);\n this.mapper[col.id] = index;\n if ([DataType.Date, DataType.DateTime, DataType.Time].indexOf(col.type) >= 0) {\n this._dateColumnIdx.push(index);\n }\n return index;\n };\n DataColumnList.prototype.updateDateColumnIdx = function () {\n this._dateColumnIdx = this.getItems()\n .filter(function (col) { return [DataType.Date, DataType.DateTime, DataType.Time].indexOf(col.type) >= 0; })\n .map(function (col, index) { return index; });\n };\n DataColumnList.prototype.put = function (index, col) {\n if (index >= 0 && index < this.count) {\n this.items[index] = col;\n this.updateDateColumnIdx();\n }\n };\n DataColumnList.prototype.move = function (col, newIndex) {\n var oldIndex = this.items.indexOf(col);\n if (oldIndex >= 0 && oldIndex != newIndex) {\n utils.moveArrayItem(this.items, oldIndex, newIndex);\n this.updateDateColumnIdx();\n }\n };\n DataColumnList.prototype.get = function (index) {\n if (index >= 0 && index < this.count) {\n return this.items[index];\n }\n else {\n return null;\n }\n };\n DataColumnList.prototype.getIndex = function (id) {\n return this.mapper[id];\n };\n DataColumnList.prototype.getItems = function () {\n return this.items;\n };\n DataColumnList.prototype.getDateColumnIndexes = function () {\n return this._dateColumnIdx;\n };\n DataColumnList.prototype.removeAt = function (index) {\n var col = this.get(index);\n this.items.splice(index, 1);\n var removeDate = this._dateColumnIdx.indexOf(index);\n if (removeDate >= 0) {\n this._dateColumnIdx.splice(removeDate, 1);\n }\n delete this.mapper[col.id];\n };\n DataColumnList.prototype.clear = function () {\n this.items = [];\n this._dateColumnIdx = [];\n this.mapper = {};\n };\n return DataColumnList;\n}());\nexport { DataColumnList };\n//# sourceMappingURL=data_column.js.map","import { DataType } from '../types/data_type';\nimport { EntityAttrKind } from '../types/entity_attr_kind';\nimport { utils } from '../utils/utils';\n/**\n * Represents one entity.\n */\nvar MetaEntity = /** @class */ (function () {\n /** The default constructor. */\n function MetaEntity(parent) {\n /** Returns false if this entity is read-only */\n this.isEditable = true;\n this.name = \"\";\n this.caption = \"\";\n this.description = \"\";\n this.parent = parent;\n this.attributes = new Array();\n this.subEntities = new Array();\n }\n /**\n * Loads entity from its JSON representation object.\n * @param model The Data Model.\n * @param dto The JSON representation object.\n */\n MetaEntity.prototype.loadFromData = function (model, dto) {\n if (dto) {\n this.id = dto.id;\n this.name = dto.name;\n this.captionPlural = dto.namePlur;\n this.caption = dto.name;\n this.description = dto.desc;\n if (typeof (dto.ied) !== 'undefined')\n this.isEditable = dto.ied;\n this.subEntities = new Array();\n if (dto.ents) {\n for (var i = 0; i < dto.ents.length; i++) {\n var newEntity = model.createEntity(this);\n newEntity.loadFromData(model, dto.ents[i]);\n this.subEntities.push(newEntity);\n }\n }\n this.attributes = new Array();\n if (dto.attrs) {\n for (var i = 0; i < dto.attrs.length; i++) {\n var newAttr = model.createEntityAttr(this);\n newAttr.loadFromData(model, dto.attrs[i]);\n this.attributes.push(newAttr);\n }\n }\n }\n };\n MetaEntity.prototype.scan = function (processAttribute, processEntity) {\n var opts = { stop: false };\n var internalProcessEntity = function (entity) {\n if (processEntity)\n processEntity(entity, opts);\n if (entity.attributes) {\n var attrCount = entity.attributes.length;\n for (var i = 0; (i < attrCount) && !opts.stop; i++) {\n var attr = entity.attributes[i];\n if (processAttribute) {\n processAttribute(attr, opts);\n }\n if (opts.stop)\n return;\n }\n }\n if (entity.subEntities) {\n var subEntityCount = entity.subEntities.length;\n for (var i = 0; (i < subEntityCount) && !opts.stop; i++) {\n internalProcessEntity(entity.subEntities[i]);\n }\n }\n };\n internalProcessEntity(this);\n };\n MetaEntity.prototype.getFirstPrimaryAttr = function () {\n return this.getPrimaryAttrs()[0];\n };\n MetaEntity.prototype.getPrimaryAttrs = function () {\n return this.attributes.filter(function (attr) { return attr.isPrimaryKey; });\n };\n return MetaEntity;\n}());\nexport { MetaEntity };\nvar MetaEntityAttr = /** @class */ (function () {\n /** The default constructor. */\n function MetaEntityAttr(entity) {\n this.id = \"\";\n this.caption = \"{Unrecognized attribute}\";\n this.dataType = DataType.String;\n this.size = 0;\n this.isPrimaryKey = false;\n this.isForeignKey = false;\n this.isNullable = true;\n this.showOnView = true;\n this.isEditable = true;\n this.showOnCreate = true;\n this.showOnEdit = true;\n this.showInLookup = false;\n this.lookupAttr = \"\";\n this.expr = \"\";\n this.entity = entity;\n this.kind = EntityAttrKind.Data;\n }\n /**\n * Loads entity attribute from JSON representation object.\n * @param model The Data Model.\n * @param dto The JSON representation object.\n */\n MetaEntityAttr.prototype.loadFromData = function (model, dto) {\n if (dto) {\n this.id = dto.id;\n this.description = dto.desc;\n this.caption = dto.cptn;\n this.dataType = dto.dtype;\n this.isPrimaryKey = dto.ipk;\n this.isForeignKey = dto.ifk;\n this.size = dto.size;\n this.lookupAttr = dto.lattr;\n this.lookupEntity = dto.lent;\n this.dataAttr = dto.dattr;\n this.lookupDataAttr = dto.ldattr;\n var isDataType = utils.getDateDataTypes().indexOf(this.dataType);\n this.defaultValue = dto.defVal && isDataType ? new Date(dto.defVal) : dto.defVal;\n this.isNullable = utils.getIfDefined(dto.nul, this.isNullable);\n this.isEditable = utils.getIfDefined(dto.ied, this.isEditable);\n this.showOnView = utils.getIfDefined(dto.ivis || dto.sov, this.showOnView);\n this.showOnCreate = utils.getIfDefined(dto.soc, this.showOnCreate);\n this.showOnEdit = utils.getIfDefined(dto.soe, this.showOnEdit);\n this.showInLookup = utils.getIfDefined(dto.sil, this.showInLookup);\n this.kind = dto.kind;\n this.displayFormat = dto.dfmt;\n if (dto.udata)\n this.userData = dto.udata;\n if (dto.edtr) {\n this.defaultEditor = model.getEditorById(dto.edtr) || model.createValueEditor();\n }\n }\n };\n return MetaEntityAttr;\n}());\nexport { MetaEntityAttr };\n//# sourceMappingURL=meta_entity.js.map","import { EditorTag } from '../types/editor_tag';\nimport { DataType } from '../types/data_type';\n/**\n * Represents a value editor.\n */\nvar ValueEditor = /** @class */ (function () {\n /** The default constructor. */\n function ValueEditor() {\n this.id = \"\";\n this.tag = EditorTag.Unknown;\n this.resType = DataType.Unknown;\n this.defValue = \"\";\n }\n /**\n * Loads value editor from its JSON representation object.\n * @param data The JSON representation object.\n */\n ValueEditor.prototype.loadFromData = function (data) {\n if (data) {\n this.id = data.id;\n this.tag = data.tag;\n this.defValue = data.defval;\n this.resType = data.rtype;\n this.accept = data.accept;\n this.multiline = data.multiline;\n if (data.subType) {\n this.resType = data.subType;\n }\n if (data.name) {\n this.name = data.name;\n }\n if (data.values) {\n this.values = data.values;\n }\n }\n };\n ValueEditor.prototype.getValueText = function (value) {\n var result = \"\";\n if (!this.values)\n return result;\n if (Array.isArray(value)) {\n for (var _i = 0, _a = this.values; _i < _a.length; _i++) {\n var item = _a[_i];\n if (value.indexOf(item.id) >= 0) {\n result += item.text + ',';\n }\n }\n }\n else {\n for (var _b = 0, _c = this.values; _b < _c.length; _b++) {\n var item = _c[_b];\n if (item.id === value) {\n result += item.text + ',';\n }\n }\n }\n if (result) {\n result = result.substring(0, result.length - 1);\n }\n return result;\n };\n return ValueEditor;\n}());\nexport { ValueEditor };\n//# sourceMappingURL=value_editor.js.map","import { i18n } from '../i18n/i18n';\nimport { utils } from '../utils/utils';\nimport { EditorTag } from '../types/editor_tag';\nimport { DataType } from '../types/data_type';\nimport { MetaEntity, MetaEntityAttr } from './meta_entity';\nimport { ValueEditor } from './value_editor';\n/**\n * Represents a data model\n */\nvar MetaData = /** @class */ (function () {\n /** The default constructor. */\n function MetaData() {\n this.mainEntity = null;\n this.id = '__none';\n this.name = 'Empty model';\n this.rootEntity = this.createEntity();\n this.displayFormats = new Map();\n }\n /**\n * Gets the main entity of model\n * @return The main entity.\n */\n MetaData.prototype.getMainEntity = function () {\n return this.mainEntity;\n };\n MetaData.prototype.createEntity = function (parent) {\n return new MetaEntity(parent);\n };\n MetaData.prototype.createEntityAttr = function (parent) {\n return new MetaEntityAttr(parent);\n };\n MetaData.prototype.createValueEditor = function () {\n return new ValueEditor();\n };\n /**\n * Loads data model from JSON.\n * @param stringJson The JSON string.\n */\n MetaData.prototype.loadFromJSON = function (stringJson) {\n var model = JSON.parse(stringJson);\n this.loadFromData(model);\n };\n /**\n * Loads data model from its JSON representation object.\n * @param data The JSON representation object.\n */\n MetaData.prototype.loadFromData = function (data) {\n this.id = data.id;\n this.name = data.name;\n this.version = data.vers;\n //Editors\n this.editors = new Array();\n if (data.editors) {\n for (var i = 0; i < data.editors.length; i++) {\n var newEditor = this.createValueEditor();\n newEditor.loadFromData(data.editors[i]);\n this.editors.push(newEditor);\n }\n }\n //rootEntity\n this.rootEntity.loadFromData(this, data.entroot);\n //DataFormats\n this.displayFormats = new Map();\n if (data.displayFormats) {\n for (var dtypeStr in data.displayFormats) {\n var dtype = DataType[dtypeStr];\n var formats = data.displayFormats[dtypeStr] || new Array();\n this.displayFormats.set(dtype, formats);\n }\n }\n };\n /**\n * Gets the display formats.\n * @returns The display formats.\n */\n MetaData.prototype.getDisplayFormats = function () {\n return this.displayFormats;\n };\n /**\n * Gets the display formats for type\n * @param type The type\n * @returns An array of display formats\n */\n MetaData.prototype.getDisplayFormatsForType = function (type) {\n if (this.displayFormats.has(type)) {\n return this.displayFormats.get(type);\n }\n return [];\n };\n /**\n * Gets the default display format for the provided type\n * @param type The type\n * @returns The default type format or null\n */\n MetaData.prototype.getDefaultFormat = function (type) {\n if (this.displayFormats.has(type)) {\n return this.displayFormats.get(type).filter(function (f) { return f.isdef; })[0];\n }\n return null;\n };\n /**\n * Sets data to data model.\n * @param model Its JSON representation object or JSON string.\n */\n MetaData.prototype.setData = function (model) {\n if (typeof model === 'string') {\n this.loadFromJSON(model);\n }\n else {\n this.loadFromData(model);\n }\n };\n /**\n * Checks wether the data model is empty.\n * @returns `true` if the data model is empty, otherwise `false`.\n */\n MetaData.prototype.isEmpty = function () {\n return this.rootEntity.subEntities.length === 0 && this.rootEntity.attributes.length === 0;\n };\n /**\n * Gets ID of the data model.\n * @returns The ID.\n */\n MetaData.prototype.getId = function () {\n return this.id;\n };\n /**\n * Gets name of the data model.\n * @returns The name.\n */\n MetaData.prototype.getName = function () {\n return this.name;\n };\n /**\n * Gets root entity of the data model.\n * @returns The root entity.\n */\n MetaData.prototype.getRootEntity = function () {\n return this.rootEntity;\n };\n /**\n * Finds editor by its ID.\n * @param editorId The editor ID.\n * @returns The value editor or `null`.\n */\n MetaData.prototype.getEditorById = function (editorId) {\n for (var _i = 0, _a = this.editors; _i < _a.length; _i++) {\n var editor = _a[_i];\n if (editor.id === editorId) {\n return editor;\n }\n }\n return null;\n };\n /**\n * Gets entity attribute by its ID.\n * This function runs through all attributes inside specified model (it's root entity and all its sub-entities).\n * @param attrId The attribute ID.\n * @returns The attribute or `null`.\n */\n MetaData.prototype.getAttributeById = function (attrId) {\n var attr = this.getEntityAttrById(this.getRootEntity(), attrId);\n if (!attr) {\n return null;\n }\n return attr;\n };\n /**\n * Checks wether attribute contains such property.\n * @param attrId The attribute ID.\n * @param propName The property name.\n * @returns `true` if the attribute contains the property, otherwise `false`.\n */\n MetaData.prototype.checkAttrProperty = function (attrId, propName) {\n var attribute = this.getAttributeById(attrId);\n if (attribute) {\n if (typeof attribute[propName] === 'undefined') {\n throw 'No such property: ' + propName;\n }\n if (attribute[propName]) {\n return true;\n }\n else if (attribute.lookupAttr) {\n attrId = attribute.lookupAttr;\n attribute = this.getAttributeById(attrId);\n return attribute && attribute[propName];\n }\n else {\n return false;\n }\n }\n else\n return false;\n };\n /**\n * Gets entity attribute by its ID.\n * This function runs through all attributes inside specified entity and all its sub-entities.\n * @param entity\n * @param attrId\n * @returns The attribute or `null`.\n */\n MetaData.prototype.getEntityAttrById = function (entity, attrId) {\n var idx;\n if (entity.attributes) {\n var attrCount = entity.attributes.length;\n for (idx = 0; idx < attrCount; idx++) {\n if (entity.attributes[idx].id == attrId) {\n return entity.attributes[idx];\n }\n }\n }\n var res;\n if (entity.subEntities) {\n var subEntityCount = entity.subEntities.length;\n for (idx = 0; idx < subEntityCount; idx++) {\n res = this.getEntityAttrById(entity.subEntities[idx], attrId);\n if (res)\n return res;\n }\n }\n return null;\n };\n MetaData.prototype.listByEntityWithFilter = function (entity, filterFunc) {\n var result = new Array();\n var caption;\n var ent = null;\n if (entity.subEntities) {\n var subEntityCount = entity.subEntities.length;\n for (var entIdx = 0; entIdx < subEntityCount; entIdx++) {\n ent = entity.subEntities[entIdx];\n if (!filterFunc || filterFunc(ent, null)) {\n caption = i18n.getText('Entities', ent.name);\n if (!caption) {\n caption = ent.caption;\n }\n var newEnt = utils.assign(this.createEntity(), { id: ent.name, text: caption, items: [], isEntity: true });\n newEnt.items = this.listByEntityWithFilter(ent, filterFunc);\n if (newEnt.items.length > 0)\n result.push(newEnt);\n }\n }\n }\n var attr = null;\n if (entity.attributes) {\n var attrCount = entity.attributes.length;\n for (var attrIdx = 0; attrIdx < attrCount; attrIdx++) {\n attr = entity.attributes[attrIdx];\n if (!filterFunc || filterFunc(entity, attr)) {\n caption = i18n.getText('Attributes', attr.id);\n if (!caption)\n caption = attr.caption;\n var newEnt = utils.assign(this.createEntity(), { id: attr.id, text: caption, dataType: attr.dataType });\n result.push(newEnt);\n }\n }\n }\n return result;\n };\n MetaData.prototype.listByEntity = function (entity, opts, filterFunc) {\n opts = opts || {};\n var resultEntities = [];\n var resultAttributes = [];\n var caption;\n var ent = null;\n if (entity.subEntities) {\n var subEntityCount = entity.subEntities.length;\n for (var entIdx = 0; entIdx < subEntityCount; entIdx++) {\n ent = entity.subEntities[entIdx];\n if (!filterFunc || filterFunc(ent, null)) {\n caption = i18n.getText('Entities', ent.name) || ent.caption;\n var newEnt = utils.assign(this.createEntity(), {\n id: ent.name,\n text: caption,\n items: [],\n isEntity: true,\n description: ent.description\n });\n var newOpts = utils.assign({}, opts);\n newOpts.includeRootData = false;\n newEnt.items = this.listByEntity(ent, newOpts, filterFunc);\n if (newEnt.items.length > 0) {\n resultEntities.push(newEnt);\n }\n }\n }\n }\n var attr = null;\n if (entity.attributes) {\n var attrCount = entity.attributes.length;\n for (var attrIdx = 0; attrIdx < attrCount; attrIdx++) {\n attr = entity.attributes[attrIdx];\n if (!filterFunc || filterFunc(entity, attr)) {\n caption = i18n.getText('Attributes', attr.id) || attr.caption;\n resultAttributes.push(utils.assign(this.createEntityAttr(entity), {\n id: attr.id, text: caption,\n dataType: attr.dataType, lookupAttr: attr.lookupAttr,\n description: attr.description\n }));\n }\n }\n }\n var sortCheck = function (a, b) {\n if (a.text.toLowerCase() == b.text.toLowerCase()) {\n return 0;\n }\n if (a.text.toLowerCase() > b.text.toLowerCase()) {\n return 1;\n }\n return -1;\n };\n if (opts.sortEntities) {\n resultEntities.sort(sortCheck);\n resultAttributes.sort(sortCheck);\n }\n var result;\n if (!opts.attrPlacement || opts.attrPlacement == 0) {\n result = resultEntities.concat(resultAttributes);\n }\n else {\n result = resultAttributes.concat(resultEntities);\n }\n if (opts.attrPlacement == 2) {\n result.sort(sortCheck);\n }\n if (opts.includeRootData) {\n caption = i18n.getText('Entities', entity.name);\n if (!caption)\n caption = entity.caption;\n return { id: entity.name, text: caption, items: result };\n }\n else {\n return result;\n }\n };\n /**\n * Clears data model.\n */\n MetaData.prototype.clear = function () {\n this.rootEntity = this.createEntity();\n this.editors = [];\n this.version = '';\n };\n /**\n * Add default value editors.\n */\n MetaData.prototype.addDefaultValueEditors = function () {\n var ve;\n ve = this.addOrUpdateValueEditor('_DTE', EditorTag.Edit, DataType.String);\n ve.defValue = '';\n this.addOrUpdateValueEditor('_DPDE', EditorTag.DateTime, DataType.DateTime);\n this.addOrUpdateValueEditor('_DPTE', EditorTag.DateTime, DataType.DateTime);\n };\n /**\n * Add or update a value editor.\n * @param id The id.\n * @param tag The tag.\n * @param resType The result type.\n * @returns The value editor.\n */\n MetaData.prototype.addOrUpdateValueEditor = function (id, tag, resType) {\n var ve = utils.findItemById(this.editors, id);\n if (!ve) {\n ve = this.createValueEditor();\n ve.id = id;\n this.editors.push(ve);\n }\n ve.tag = tag;\n ve.resType = resType;\n return ve;\n };\n /**\n * Gets entities tree.\n * @param opts The options.\n * @param filterFunc The filter function.\n * Takes two parameters, Entity and EntityAttr (second parameter will be null for entities), and returns boolean (true if the corresponding entity or attribute).\n * @returns The tree of the entities and their attributes according to options and the filter function\n */\n MetaData.prototype.getEntitiesTree = function (opts, filterFunc) {\n return this.listByEntity(this.getRootEntity(), opts, filterFunc);\n };\n /**\n * Gets entities tree due to filter.\n * @param filterFunc The filter function.\n * Takes two parameters, Entity and EntityAttr (second parameter will be null for entities), and returns boolean (true if the corresponding entity or attribute).\n * @returns The tree of the entities and their attributes according to the filter function\n */\n MetaData.prototype.getEntitiesTreeWithFilter = function (filterFunc) {\n return this.listByEntityWithFilter(this.getRootEntity(), filterFunc);\n };\n /**\n * Finds full entity path by attribute\n * @param attrId The attribute id.\n * @param sep The separator.\n * @returns The path.\n */\n MetaData.prototype.getFullEntityPathByAttr = function (attrId, sep) {\n sep = sep || ' ';\n return this.getEntityPathByAttr(this.getRootEntity(), attrId, sep, true);\n };\n /**\n * Finds entity path by attribute\n * @param entity The entity.\n * @param attrId The attribute id.\n * @param sep The separator.\n * @param root The root option.\n * @returns The path.\n */\n MetaData.prototype.getEntityPathByAttr = function (entity, attrId, sep, root) {\n if (!entity)\n return '';\n sep = sep || ' ';\n var entityCaption = '';\n if (entity.caption && !root) {\n var entityText = i18n.getText('Entities', entity.caption);\n entityCaption = entityText ? entityText : entity.caption;\n }\n if (entity.attributes) {\n var attrCount = entity.attributes.length;\n for (var i = 0; i < attrCount; i++) {\n if (entity.attributes[i].id == attrId) {\n return entityCaption;\n }\n }\n }\n if (entity.subEntities) {\n var subEntityCount = entity.subEntities.length;\n for (var i = 0; i < subEntityCount; i++) {\n var ent = entity.subEntities[i];\n var res = this.getEntityPathByAttr(ent, attrId, sep, false);\n if (res !== '') {\n if (entityCaption !== '')\n res = entityCaption + sep + res;\n return res;\n }\n }\n }\n return '';\n };\n /**\n * Gets the attribute text.\n * @param attr The attribute.\n * @param format The format.\n * @returns Formatted text.\n */\n MetaData.prototype.getAttributeText = function (attr, format) {\n var attrText = i18n.getText('Attributes', attr.id);\n if (!attrText) {\n attrText = attr.caption;\n }\n if (!format) {\n return attrText;\n }\n var result = '';\n var entityPath = this.getFullEntityPathByAttr(attr.id, ' ');\n if (entityPath) {\n result = format.replace(new RegExp('{attr}', 'g'), attrText);\n result = result.replace(new RegExp('{entity}', 'g'), entityPath);\n }\n else {\n result = attrText;\n }\n return result.trim();\n };\n /**\n * Scans model's entity tree and calls the callback functions for each attribute and entity.\n * @param processAttribute The callback function which is called for each attribute in model's entity tree.\n * The processed attribute is passed in the first function parameter.\n * @param processEntity The callback function which is called for each entity in tree.\n * The processed entity is passed in the first function parameter.\n */\n MetaData.prototype.runThroughEntities = function (processAttribute, processEntity) {\n this.getRootEntity().scan(processAttribute, processEntity);\n };\n /**\n * Finds first attribute by filter.\n * @param filterFunc The filter function. Takes EntityAttr object in parameter and returns boolean\n */\n MetaData.prototype.getFirstAttributeByFilter = function (filterFunc) {\n var res = null;\n this.runThroughEntities(function (attr, opts) {\n if (filterFunc(attr)) {\n opts.stop = true;\n res = attr;\n }\n }, null);\n return res;\n };\n return MetaData;\n}());\nexport { MetaData };\n//# sourceMappingURL=meta_data.js.map","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n/**\n * Defines aggregations settings for the current context.\n * Group, aggregate columns, grand totals, etc.\n */\nvar AggregationSettings = /** @class */ (function () {\n function AggregationSettings(colStore) {\n this.colStore = colStore;\n this.aggregates = [];\n this.groups = [];\n this.useGrandTotals = false;\n this.useRecordCount = false;\n this._caseSensitiveGroups = false;\n this.COUNT_FIELD_NAME = 'GRPRECCNT';\n }\n Object.defineProperty(AggregationSettings.prototype, \"caseSensitiveGroups\", {\n get: function () {\n return this._caseSensitiveGroups;\n },\n set: function (value) {\n this._caseSensitiveGroups = value;\n this.updateCompareProc();\n },\n enumerable: false,\n configurable: true\n });\n AggregationSettings.prototype.updateCompareProc = function () {\n this.compareValues = this._caseSensitiveGroups\n ? this.strictCompare\n : this.caseInsensitiveCompare;\n };\n AggregationSettings.prototype.addGroup = function (settings) {\n var cols = settings.columns || this.colStore.getColumnIds(settings.from, settings.to);\n if (!this.colStore.validateColumns(cols))\n throw \"Invalid columns: \" + cols;\n if (this.hasColumnsInUse(cols))\n throw \"Can't add same columns to different groups/aggregates\";\n this.groups.push(__assign({ columns: cols }, settings));\n return this;\n };\n AggregationSettings.prototype.addAggregateColumn = function (colIndexOrId, funcId) {\n var colId = typeof colIndexOrId == 'string'\n ? colIndexOrId\n : this.colStore.getColumnIds(colIndexOrId, colIndexOrId)[0];\n if (this.hasColumnsInUse([colId]) || !this.colStore.validateAggregate(colId, funcId))\n throw 'Invalid aggregation function for the column: ' + colId;\n this.aggregates.push({ colId: colId, funcId: funcId });\n return this;\n };\n AggregationSettings.prototype.addGrandTotals = function () {\n this.useGrandTotals = true;\n return this;\n };\n AggregationSettings.prototype.addCounts = function () {\n this.useRecordCount = true;\n return this;\n };\n AggregationSettings.prototype.getGroups = function () {\n var _this = this;\n var cols = [];\n var mappedGrops = this.groups.map(function (grp) {\n cols = cols.concat(grp.columns);\n return __assign(__assign({}, grp), { columns: Array.from(cols), aggregates: Array.from(_this.aggregates) });\n });\n return mappedGrops;\n };\n AggregationSettings.prototype.getInternalGroups = function () {\n return this.groups;\n };\n AggregationSettings.prototype.lastGroup = function () {\n var groups = this.getGroups();\n return groups[groups.length - 1];\n };\n AggregationSettings.prototype.getAggregates = function () {\n return this.aggregates;\n };\n AggregationSettings.prototype.hasAggregates = function () {\n return this.aggregates.length > 0;\n };\n AggregationSettings.prototype.hasGroups = function () {\n return this.groups.length > 0;\n };\n AggregationSettings.prototype.hasGrandTotals = function () {\n return this.useGrandTotals;\n };\n AggregationSettings.prototype.hasRecordCount = function () {\n return this.useRecordCount;\n };\n AggregationSettings.prototype.isEmpty = function () {\n return !(this.hasAggregates() || this.hasGroups() ||\n this.hasAggregates() || this.hasRecordCount());\n };\n AggregationSettings.prototype.drop = function () {\n console.warn('\"drop()\" method is obsolete. Use \"clear()\" instead');\n this.clear();\n };\n AggregationSettings.prototype.clear = function () {\n this.groups = [];\n this.aggregates = [];\n this.useGrandTotals = false;\n this.useRecordCount = false;\n this.caseSensitiveGroups = false;\n return this;\n };\n /**\n * Checks if all columns from the list passed in the parameter are \"unused\".\n * Here \"unused column\" means a column that is included neither in any group nor in the aggregates list.\n * @param cols - the array of column IDs\n * @returns true if all columns in the list are not used anywhere, othervise - fals\n */\n AggregationSettings.prototype.hasColumnsInUse = function (cols) {\n for (var _i = 0, _a = this.groups; _i < _a.length; _i++) {\n var group = _a[_i];\n var interCols = group.columns\n .filter(function (c) { return cols.indexOf(c) >= 0; });\n if (interCols.length > 0)\n return true;\n }\n for (var _b = 0, _c = this.aggregates; _b < _c.length; _b++) {\n var aggr = _c[_b];\n if (cols.indexOf(aggr.colId) >= 0)\n return true;\n }\n return false;\n };\n AggregationSettings.prototype.needAggrCalculation = function () {\n return (this.hasAggregates() || this.hasRecordCount())\n && (this.hasGrandTotals() || this.hasGroups());\n };\n AggregationSettings.prototype.saveToData = function () {\n return {\n groups: Array.from(this.groups),\n ugt: this.useGrandTotals,\n urc: this.useRecordCount,\n csg: this.caseSensitiveGroups,\n aggregates: Array.from(this.aggregates)\n };\n };\n AggregationSettings.prototype.loadFromData = function (data) {\n if (data) {\n if (typeof data.ugt !== 'undefined')\n this.useGrandTotals = data.ugt;\n if (typeof data.urc !== 'undefined')\n this.useRecordCount = data.urc;\n if (typeof data.csg !== 'undefined')\n this.caseSensitiveGroups = data.csg;\n if (data.groups) {\n this.groups = Array.from(data.groups);\n }\n if (data.aggregates) {\n this.aggregates = Array.from(data.aggregates);\n }\n }\n };\n AggregationSettings.prototype.buildGroupKey = function (group, row) {\n var caseInsensitive = !this.caseSensitiveGroups;\n var result = {};\n if (group) {\n for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {\n var colId = _a[_i];\n var keyVal = row.getValue(colId);\n if (caseInsensitive && typeof (keyVal) === 'string') {\n keyVal = keyVal.toLowerCase();\n }\n result[colId] = keyVal;\n }\n }\n return result;\n };\n //returns true if value1 == value2\n AggregationSettings.prototype.strictCompare = function (value1, value2) {\n if (value1 instanceof Date) {\n return value1.getTime() === value2.getTime();\n }\n else\n return value1 === value2;\n };\n //makes a case insensative comparision of two values and return true if there are equal\n AggregationSettings.prototype.caseInsensitiveCompare = function (value1, value2) {\n if (value1 instanceof Date) {\n return value1.getTime() === value2.getTime();\n }\n else {\n var val1 = (typeof value1 === 'string') ? value1.toLowerCase() : value1;\n var val2 = (typeof value2 === 'string') ? value2.toLowerCase() : value2;\n return val1 === val2;\n }\n };\n return AggregationSettings;\n}());\nexport { AggregationSettings };\n//# sourceMappingURL=aggr_settings.js.map","export var liquid;\n(function (liquid) {\n function renderLiquidTemplate(template, vars) {\n var result = template;\n if (vars) {\n for (var v in vars) {\n var liquidVarRegexp = new RegExp('\\{\\{' + v + '\\}\\}', 'g');\n result = result.replace(liquidVarRegexp, vars[v]);\n }\n }\n return result;\n }\n liquid.renderLiquidTemplate = renderLiquidTemplate;\n})(liquid || (liquid = {}));\n//# sourceMappingURL=liquid.js.map","var DataRow = /** @class */ (function () {\n function DataRow(columns, values) {\n this.columns = columns;\n this.values = values;\n }\n DataRow.prototype.toArray = function () {\n return Array.from(this.values);\n };\n DataRow.prototype.size = function () {\n return this.values.length;\n };\n DataRow.prototype.getValue = function (colIdOrIndex) {\n var index;\n if (typeof colIdOrIndex === \"string\") {\n index = this.columns.getIndex(colIdOrIndex);\n if (index === undefined) {\n throw new RangeError(\"No column with id '\".concat(colIdOrIndex, \"'\"));\n }\n }\n else {\n index = colIdOrIndex;\n }\n if (index >= this.values.length)\n throw new RangeError(\"Out of range: \" + index);\n return this.values[index];\n };\n DataRow.prototype.setValue = function (colIdOrIndex, value) {\n var index;\n if (typeof colIdOrIndex === \"string\") {\n index = this.columns.getIndex(colIdOrIndex);\n if (index === undefined) {\n throw new RangeError(\"No column with id '\".concat(colIdOrIndex, \"'\"));\n }\n }\n else {\n index = colIdOrIndex;\n }\n if (index >= this.values.length)\n throw new RangeError(\"Out of range: \" + index);\n this.values[index] = value;\n };\n return DataRow;\n}());\nexport { DataRow };\n//# sourceMappingURL=data_row.js.map","import { DataColumnList } from './data_column';\nimport { DataRow } from './data_row';\nimport { DataType } from '../types/data_type';\nimport { utils } from '../utils/utils';\nvar EasyDataTable = /** @class */ (function () {\n function EasyDataTable(options) {\n this._chunkSize = 1000;\n this._elasticChunks = false;\n this.cachedRows = [];\n this.total = 0;\n this.loader = null;\n this.needTotal = true;\n this.isInMemory = false;\n options = options || {};\n this._chunkSize = options.chunkSize || this._chunkSize;\n this._elasticChunks = options.elasticChunks || this._elasticChunks;\n this.loader = options.loader;\n if (typeof options.inMemory !== 'undefined') {\n this.isInMemory = options.inMemory;\n }\n if (this.isInMemory) {\n this.needTotal = false;\n }\n this._columns = new DataColumnList();\n this.onUpdate = options.onUpdate;\n if (options.columns) {\n for (var _i = 0, _a = options.columns; _i < _a.length; _i++) {\n var colDesc = _a[_i];\n this._columns.add(colDesc);\n }\n }\n if (options.rows) {\n for (var _b = 0, _c = options.rows; _b < _c.length; _b++) {\n var rowData = _c[_b];\n var row = this.createRow(rowData);\n this.addRow(row);\n }\n }\n this.needTotal = !this._elasticChunks;\n }\n Object.defineProperty(EasyDataTable.prototype, \"columns\", {\n get: function () {\n return this._columns;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(EasyDataTable.prototype, \"chunkSize\", {\n get: function () {\n return this._chunkSize;\n },\n set: function (value) {\n this._chunkSize = value;\n this.total = 0;\n this.needTotal = !this.elasticChunks;\n this.cachedRows = [];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(EasyDataTable.prototype, \"elasticChunks\", {\n get: function () {\n return this._elasticChunks;\n },\n set: function (value) {\n this._elasticChunks = value;\n this.total = 0;\n this.needTotal = !this.elasticChunks;\n this.cachedRows = [];\n },\n enumerable: false,\n configurable: true\n });\n EasyDataTable.prototype.getRows = function (params) {\n var _this = this;\n var fromIndex = 0, count = this._chunkSize;\n if (params) {\n if ('page' in params) {\n fromIndex = params.pageSize * (params.page - 1);\n count = params.pageSize;\n }\n else {\n fromIndex = params.offset;\n count = params.limit;\n }\n }\n var endIndex = fromIndex + count; //the first index of the next page\n //if we don't calculate total on this request\n if (!this.needTotal && !this.elasticChunks) {\n if (fromIndex >= this.total) {\n return Promise.resolve([]);\n }\n if (endIndex > this.total) {\n endIndex = this.total;\n }\n }\n if (this.isInMemory && endIndex > this.cachedRows.length) {\n endIndex = this.cachedRows.length;\n }\n var allChunksCached = endIndex <= this.cachedRows.length;\n if (allChunksCached) {\n return Promise.resolve(this.cachedRows.slice(fromIndex, endIndex));\n }\n //if loader is not defined\n if (!this.loader) {\n throw \"Loader is not defined. Can't get the rows from \".concat(fromIndex, \" to \").concat(endIndex);\n }\n // we need total only for the first request\n var needTotal = this.needTotal;\n if (this.needTotal) {\n this.needTotal = false;\n }\n var offset = this.cachedRows.length;\n var limit = endIndex - offset;\n if (limit < this._chunkSize) {\n limit = this._chunkSize;\n }\n var resultPromise = this.loader.loadChunk({\n offset: offset,\n limit: limit,\n needTotal: needTotal\n })\n .then(function (result) {\n if (needTotal) {\n _this.total = result.total;\n }\n Array.prototype.push.apply(_this.cachedRows, result.table.getCachedRows());\n if (endIndex > _this.cachedRows.length) {\n endIndex = _this.cachedRows.length;\n }\n if (_this.elasticChunks) {\n var count_1 = result.table.getCachedCount();\n if (count_1 < limit) {\n _this.total = _this.cachedRows.length;\n }\n }\n _this.fireUpdated();\n return _this.cachedRows.slice(fromIndex, endIndex);\n });\n return resultPromise;\n };\n EasyDataTable.prototype.getRow = function (index) {\n return this.getRows({ offset: index, limit: 1 })\n .then(function (rows) { return rows.length > 0 ? rows[0] : null; });\n };\n EasyDataTable.prototype.getTotal = function () {\n return this.total;\n };\n EasyDataTable.prototype.setTotal = function (total) {\n this.total = total;\n this.needTotal = false;\n };\n EasyDataTable.prototype.getCachedCount = function () {\n return this.cachedRows.length;\n };\n EasyDataTable.prototype.clear = function () {\n this.columns.clear();\n this.cachedRows = [];\n this.total = 0;\n this.needTotal = !this._elasticChunks;\n this.fireUpdated();\n };\n EasyDataTable.prototype.createRow = function (dataOrRow) {\n var _this = this;\n var dateIdx = this._columns.getDateColumnIndexes();\n var values = new Array(this._columns.count);\n var getValue = dataOrRow instanceof DataRow\n ? function (colId) { return dataOrRow.getValue(colId); }\n : function (colId) { return dataOrRow[colId]; };\n if (dataOrRow) {\n this.columns.getItems().forEach(function (column) {\n var value = getValue(column.id);\n var index = _this.columns.getIndex(column.id);\n values[index] = (dateIdx.indexOf(index) >= 0)\n ? _this.mapDate(value, column.type)\n : value;\n });\n }\n return new DataRow(this._columns, values);\n };\n EasyDataTable.prototype.mapDate = function (value, dtype) {\n if (value) {\n var result = new Date(value);\n if (isNaN(result.getTime())\n && dtype == DataType.Time) {\n result = utils.strToTime(value);\n }\n return result;\n }\n return null;\n };\n EasyDataTable.prototype.addRow = function (rowOrValues) {\n var newRow;\n if (Array.isArray(rowOrValues)) {\n var values = rowOrValues;\n var dateIdx = this._columns.getDateColumnIndexes();\n if (dateIdx.length > 0) {\n for (var _i = 0, dateIdx_1 = dateIdx; _i < dateIdx_1.length; _i++) {\n var idx = dateIdx_1[_i];\n if (values[idx]) {\n values[idx] = this.mapDate(values[idx], this._columns.get(idx).type);\n }\n }\n }\n newRow = new DataRow(this._columns, values);\n }\n else {\n newRow = this.createRow(rowOrValues);\n }\n this.cachedRows.push(newRow);\n var cachedTotal = this.getCachedCount();\n if (cachedTotal > this.total) {\n this.total = cachedTotal;\n }\n return newRow;\n };\n EasyDataTable.prototype.getCachedRows = function () {\n return this.cachedRows;\n };\n EasyDataTable.prototype.totalIsKnown = function () {\n if (this.elasticChunks) {\n var count = this.getCachedCount();\n return count === this.total;\n }\n return !this.needTotal;\n };\n EasyDataTable.prototype.fireUpdated = function () {\n if (this.onUpdate) {\n this.onUpdate(this);\n }\n };\n return EasyDataTable;\n}());\nexport { EasyDataTable };\n//# sourceMappingURL=easy_data_table.js.map","/**\n * EasyData representation of GUID.\n */\nvar EasyGuid = /** @class */ (function () {\n function EasyGuid() {\n }\n /**\n * Generates new GUID.\n * @returns The string representation of GUID.\n */\n EasyGuid.newGuid = function () {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n return EasyGuid;\n}());\nexport { EasyGuid };\n//# sourceMappingURL=easy_guid.js.map","import { EasyGuid } from '../utils/easy_guid';\n/**\n * The representation of event emitter.\n */\nvar EventEmitter = /** @class */ (function () {\n /**\n * The default constructor.\n * @param source The source.\n */\n function EventEmitter(source) {\n this.silentMode = 0;\n this.events = new Array();\n this.source = source;\n }\n /**\n * Subscries to the event.\n * @param eventType The event type.\n * @param callback The callback.\n * @returns The subscribtion ID.\n */\n EventEmitter.prototype.subscribe = function (eventType, callback) {\n var event = this.getEventRecByType(eventType);\n var eventCallback = {\n id: EasyGuid.newGuid(),\n callback: callback\n };\n if (event) {\n event.eventCallbacks.push(eventCallback);\n }\n else {\n event = {\n type: eventType,\n eventCallbacks: new Array(eventCallback)\n };\n this.events.push(event);\n }\n return eventCallback.id;\n };\n /**\n * Unsubsribes from the event.\n * @param eventType The event type.\n * @param callbackId The subscribtion ID.\n */\n EventEmitter.prototype.unsubscribe = function (eventType, callbackId) {\n var event = this.getEventRecByType(eventType);\n if (event) {\n var index = -1;\n for (index = 0; index < event.eventCallbacks.length; index++) {\n if (event.eventCallbacks[index].id === callbackId) {\n break;\n }\n }\n if (index >= 0) {\n event.eventCallbacks.splice(index, 1);\n }\n }\n };\n /**\n * Fires the event.\n * @param eventType The event type.\n * @param data The event data.\n * @param postpone The postpone.\n * @param force To fire force. If value is `true`, ignores silent mode.\n */\n EventEmitter.prototype.fire = function (eventType, data, postpone, force) {\n if (postpone === void 0) { postpone = 0; }\n if (force === void 0) { force = false; }\n if (this.silentMode && !force) {\n return;\n }\n var eventRec = this.getEventRecByType(eventType);\n if (eventRec) {\n var eqevent_1 = {\n type: eventType,\n source: this.source,\n data: data\n };\n var emitAllFunc = function () {\n for (var _i = 0, _a = eventRec.eventCallbacks; _i < _a.length; _i++) {\n var callback = _a[_i];\n callback.callback(eqevent_1);\n }\n };\n if (postpone > 0) {\n setTimeout(emitAllFunc, postpone);\n }\n else {\n emitAllFunc();\n }\n }\n };\n /**\n * Enters to silent mode.\n */\n EventEmitter.prototype.enterSilentMode = function () {\n this.silentMode++;\n };\n /**\n * Exits from silent mode.\n */\n EventEmitter.prototype.exitSilentMode = function () {\n if (this.silentMode) {\n this.silentMode--;\n }\n };\n /**\n * Checks if emitter is in silent mode.\n * @return `true`, if silent mode is enable.\n */\n EventEmitter.prototype.isSilent = function () {\n return this.silentMode > 0;\n };\n EventEmitter.prototype.getEventRecByType = function (eventType) {\n for (var _i = 0, _a = this.events; _i < _a.length; _i++) {\n var event_1 = _a[_i];\n if (event_1.type == eventType) {\n return event_1;\n }\n }\n return null;\n };\n return EventEmitter;\n}());\nexport { EventEmitter };\n//# sourceMappingURL=event_emitter.js.map","import { i18n } from './i18n';\ni18n.resetLocales();\n//# sourceMappingURL=load_default_locale_settings.js.map","//types\nexport * from './types/data_type';\nexport * from './types/entity_attr_kind';\nexport * from './types/editor_tag';\n//http\nexport * from './http/http_method';\nexport * from './http/http_request';\nexport * from './http/http_client';\n//meta data dto\nexport * from './meta/dto/meta_data_dto';\nexport * from './meta/dto/meta_entity_dto';\nexport * from './meta/dto/value_editor_dto';\n//meta data\nexport * from './meta/meta_data';\nexport * from './meta/meta_entity';\nexport * from './meta/value_editor';\n//data\nexport * from './data/aggr_structures';\nexport * from './data/aggr_settings';\nexport * from './data/data_column';\nexport * from './data/data_loader';\nexport * from './data/data_row';\nexport * from './data/easy_data_table';\n//event\nexport * from './event/event_emitter';\n//i18n\nexport * from './i18n/i18n';\n//utils\nexport * from './utils/easy_guid';\nexport * from './utils/string_utils';\nexport * from './utils/utils';\nexport * from './utils/liquid';\nimport './i18n/load_default_locale_settings';\nif (typeof Object.values !== 'function') {\n Object.values = function (obj) {\n return Object.keys(obj).map(function (key) { return obj[key]; });\n };\n}\nif (typeof Math.trunc !== 'function') {\n Math.trunc = function (x) {\n if (isNaN(x)) {\n return NaN;\n }\n if (x > 0) {\n return Math.floor(x);\n }\n return Math.ceil(x);\n };\n}\n//# sourceMappingURL=public_api.js.map","import { \r\n DataLoader, DataRow, \r\n EasyDataTable, utils as dataUtils \r\n} from '@easydata/core';\r\n\r\nimport { DataFilter } from './data_filter';\r\n\r\nexport class TextDataFilter implements DataFilter {\r\n private filterValue = '';\r\n\r\n //turns off client-side search\r\n //for test purposes\r\n private justServerSide = false;\r\n\r\n constructor (\r\n private loader: DataLoader, \r\n private sourceTable: EasyDataTable, \r\n private sourceId: string,\r\n private isLookup = false) {\r\n }\r\n\r\n public getValue() {\r\n return this.filterValue;\r\n }\r\n \r\n public apply(value: string): Promise<EasyDataTable> {\r\n this.filterValue = value;\r\n\r\n if (this.filterValue) {\r\n return this.applyCore();\r\n }\r\n else {\r\n return this.clear();\r\n }\r\n }\r\n\r\n public clear(): Promise<EasyDataTable> {\r\n this.filterValue = '';\r\n return Promise.resolve(this.sourceTable);\r\n }\r\n\r\n private applyCore(): Promise<EasyDataTable> {\r\n if (this.sourceTable.getTotal() == this.sourceTable.getCachedCount() && !this.justServerSide) {\r\n return this.applyInMemoryFilter();\r\n }\r\n else {\r\n const filters = [\r\n { class: \"__substring\", value: this.filterValue }\r\n ]\r\n return this.loader.loadChunk({ \r\n offset: 0, \r\n limit: this.sourceTable.chunkSize, \r\n needTotal: true, \r\n filters: filters,\r\n sourceId: this.sourceId,\r\n lookup: this.isLookup\r\n } as any)\r\n .then(data => {\r\n const filteredTable = new EasyDataTable({\r\n chunkSize: this.sourceTable.chunkSize,\r\n loader: {\r\n loadChunk: (params) => this.loader\r\n .loadChunk({ ...params, filters: filters, sourceId: this.sourceId, lookup: this.isLookup } as any)\r\n }\r\n });\r\n\r\n for (const col of this.sourceTable.columns.getItems()) {\r\n filteredTable.columns.add(col);\r\n }\r\n\r\n filteredTable.setTotal(data.total);\r\n\r\n for (const row of data.table.getCachedRows()) {\r\n filteredTable.addRow(row);\r\n }\r\n\r\n return filteredTable;\r\n })\r\n }\r\n }\r\n\r\n private applyInMemoryFilter(): Promise<EasyDataTable> {\r\n return new Promise((resolve, reject) => {\r\n const filteredTable = new EasyDataTable({\r\n chunkSize: this.sourceTable.chunkSize,\r\n inMemory: true\r\n });\r\n\r\n for(const col of this.sourceTable.columns.getItems()) {\r\n filteredTable.columns.add(col);\r\n } \r\n \r\n const words = this.filterValue.split('||').map(w => w.trim().toLowerCase());\r\n const suitableColumns = this.sourceTable.columns.getItems()\r\n .filter(col => dataUtils.isNumericType(col.type) \r\n || dataUtils.getStringDataTypes().indexOf(col.type) >= 0)\r\n const hasEnterance = (row: DataRow) => {\r\n for (const col of suitableColumns) {\r\n const value = row.getValue(col.id);\r\n if (value) {\r\n const normalized = value.toString().toLowerCase();\r\n\r\n for(const word of words) {\r\n if (normalized.indexOf(word) >= 0) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n for (const row of this.sourceTable.getCachedRows()) {\r\n if (hasEnterance(row)) {\r\n filteredTable.addRow(row); \r\n }\r\n }\r\n\r\n filteredTable.setTotal(filteredTable.getCachedCount());\r\n\r\n resolve(filteredTable);\r\n });\r\n } \r\n}","import { browserUtils } from './browser_utils';\n/**\n * Wraps all the elements inside \"parent\" by \"wrapper\" element\n * @param parent The element to add wrapper to.\n * @param wrapper The element that will wrap child elements.\n */\nexport function wrapInner(parent, wrapper) {\n parent.appendChild(wrapper);\n while (parent.firstChild !== wrapper) {\n wrapper.appendChild(parent.firstChild);\n }\n}\n/**\n * Creates ands adds a new [[HTMLElement]] to \"parent\"\n * @param parent The element to add new element to.\n * @param tag Html tag of the new element.\n * @param options The options. In particular, options.cssClass sets the new element class.\n * @returns New element.\n */\nexport function addElement(parent, tag, options) {\n var element = document.createElement(tag);\n var opts = options || {};\n if (opts.cssClass) {\n element.className = opts.cssClass;\n }\n parent.appendChild(element);\n return element;\n}\n/**\n * Adds css class to the html element.\n * @param element The element to add css class to.\n * @param className The name of the css class to be added.\n */\nexport function addCssClass(element, className) {\n element.className = (element.className)\n ? element.className + ' ' + className\n : className;\n}\n/**\n * Hides the html element.\n * @param element The element to be hidden.\n */\nexport function hideElement(element) {\n element.style.display = 'none';\n}\n/**\n * Shows the html element.\n * @param element The element to be shown.\n * @param display The value of \"display\" style to be set. Default value is \"block\".\n */\nexport function showElement(element, display) {\n if (!display) {\n display = '';\n }\n element.style.display = display;\n}\n/**\n * Hides the \"first\" element and shows the \"second\".\n * @param first The element to be hidden.\n * @param second The element to be shown.\n * @param options The options. The following options are applied:\n * - display - the value of \"display\" style to be set. Default value is \"block\"\n * - duration - the duration of fading in and out\n * - complete - the callback to be called when toggle is complete\n */\nexport function toggleVisibility(first, second, options) {\n if (!options) {\n options = {};\n }\n if (!options.display) {\n options.display = '';\n }\n if (!options.duration) {\n options.duration = 200;\n }\n //TODO: later we need to make it fading in and out\n hideElement(first);\n showElement(second, options.display);\n if (options.complete) {\n options.complete();\n }\n}\n/**\n * Checks if element is visible\n * @param element The element to check.\n * @returns `true` if visible, otherwise - `false`.\n */\nexport function isVisible(element) {\n return element.style.display != 'none'\n && element.offsetWidth != 0\n && element.offsetHeight != 0;\n}\nexport function createBrowserEvent(eventName) {\n var event;\n if (typeof (Event) === 'function') {\n event = new Event(eventName);\n }\n else {\n event = document.createEvent('Event');\n event.initEvent(eventName, true, true);\n }\n return event;\n}\nexport function getViewportSize() {\n var width = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\n var height = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);\n return {\n width: width,\n height: height\n };\n}\nexport function getDocSize() {\n if (browserUtils.IsIE())\n return getWinSize();\n var width = Math.max(document.documentElement.clientWidth, document.body.clientWidth || 0);\n var height = Math.max(document.documentElement.clientHeight, document.body.clientHeight || 0);\n return {\n width: width,\n height: height\n };\n}\nexport function getScrollPos() {\n var body = document.body;\n var docElem = document.documentElement;\n return {\n top: window.pageYOffset || docElem.scrollTop || body.scrollTop,\n left: window.pageXOffset || docElem.scrollLeft || body.scrollLeft\n };\n}\nexport function getElementAbsolutePos(element) {\n var res = { x: 0, y: 0 };\n if (element !== null) {\n var position = offset(element);\n res = { x: position.left, y: position.top };\n }\n return res;\n}\nfunction offset(element) {\n var defaultBoundingClientRect = { top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 };\n var box;\n try {\n box = element.getBoundingClientRect();\n }\n catch (_a) {\n box = defaultBoundingClientRect;\n }\n var body = document.body;\n var docElem = document.documentElement;\n var scollPos = getScrollPos();\n var scrollTop = scollPos.top;\n var scrollLeft = scollPos.left;\n var clientTop = docElem.clientTop || body.clientTop || 0;\n var clientLeft = docElem.clientLeft || body.clientLeft || 0;\n var top = box.top + scrollTop - clientTop;\n var left = box.left + scrollLeft - clientLeft;\n return { top: Math.round(top), left: Math.round(left) };\n}\nexport function getWinSize() {\n return {\n width: window.innerWidth,\n height: window.innerHeight\n };\n}\nexport function slideDown(target, duration, callback) {\n target.style.removeProperty('display');\n var display = window.getComputedStyle(target).display;\n if (display === 'none')\n display = 'block';\n target.style.display = display;\n var height = target.offsetHeight;\n target.style.overflow = 'hidden';\n target.style.height = 0 + 'px';\n target.style.paddingTop = 0 + 'px';\n target.style.paddingBottom = 0 + 'px';\n target.style.marginTop = 0 + 'px';\n target.style.marginBottom = 0 + 'px';\n target.offsetHeight;\n target.style.boxSizing = 'border-box';\n target.style.transitionProperty = \"height, margin, padding\";\n target.style.transitionDuration = duration + 'ms';\n target.style.height = height + 'px';\n target.style.removeProperty('padding-top');\n target.style.removeProperty('padding-bottom');\n target.style.removeProperty('margin-top');\n target.style.removeProperty('margin-bottom');\n window.setTimeout(function () {\n target.style.removeProperty('height');\n target.style.removeProperty('overflow');\n target.style.removeProperty('transition-duration');\n target.style.removeProperty('transition-property');\n target.style.removeProperty('box-sizing');\n if (callback) {\n callback();\n }\n }, duration);\n}\nexport function slideUp(target, duration, callback) {\n target.style.transitionProperty = 'height, margin, padding';\n target.style.transitionDuration = duration + 'ms';\n target.style.boxSizing = 'border-box';\n target.style.height = target.offsetHeight + 'px';\n target.offsetHeight;\n target.style.overflow = 'hidden';\n target.style.height = 0 + 'px';\n target.style.paddingTop = 0 + 'px';\n target.style.paddingBottom = 0 + 'px';\n target.style.marginTop = 0 + 'px';\n target.style.marginBottom = 0 + 'px';\n window.setTimeout(function () {\n target.style.display = 'none';\n target.style.removeProperty('height');\n target.style.removeProperty('padding-top');\n target.style.removeProperty('padding-bottom');\n target.style.removeProperty('margin-top');\n target.style.removeProperty('margin-bottom');\n target.style.removeProperty('overflow');\n target.style.removeProperty('transition-duration');\n target.style.removeProperty('transition-property');\n target.style.removeProperty('box-sizing');\n if (callback) {\n callback();\n }\n }, duration);\n}\nexport var eqCssPrefix = 'eqjs';\nexport var eqCssMobile = 'eqjs-mobile';\n//# sourceMappingURL=ui-utils.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { mask } from './mask';\nvar DomElementBuilder = /** @class */ (function () {\n function DomElementBuilder(tag, parent) {\n if (typeof tag === \"string\") {\n this.element = document.createElement(tag);\n }\n else {\n this.element = tag;\n }\n if (parent && this.element.parentElement !== parent) {\n parent.appendChild(this.element);\n }\n }\n DomElementBuilder.prototype.addChild = function (tag, childBuilder) {\n var builder = domel(tag, this.element);\n if (childBuilder) {\n childBuilder(builder);\n }\n return this;\n };\n DomElementBuilder.prototype.addChildElement = function (element) {\n if (element) {\n this.element.appendChild(element);\n }\n return this;\n };\n DomElementBuilder.prototype.attr = function (attrId, attrValue) {\n this.element.setAttribute(attrId, attrValue);\n return this;\n };\n DomElementBuilder.prototype.id = function (value) {\n return this.attr(\"id\", value);\n };\n DomElementBuilder.prototype.focus = function () {\n this.element.focus();\n return this;\n };\n DomElementBuilder.prototype.title = function (value) {\n return this.attr('title', value);\n };\n DomElementBuilder.prototype.data = function (dataId, dataValue) {\n if (dataValue === void 0) { dataValue = null; }\n if (dataValue === null) {\n this.element.removeAttribute('data-' + dataId);\n return this;\n }\n else {\n return this.attr('data-' + dataId, dataValue);\n }\n };\n DomElementBuilder.prototype.show = function () {\n return this.removeStyle('display');\n };\n DomElementBuilder.prototype.hide = function (toHide) {\n if (toHide === void 0) { toHide = true; }\n return (toHide) ? this.setStyle('display', 'none') : this;\n };\n DomElementBuilder.prototype.visible = function (isVisible) {\n if (isVisible === void 0) { isVisible = true; }\n return isVisible ? this.setStyle('visibility', 'visible') : this.setStyle('visibility', 'hidden');\n };\n DomElementBuilder.prototype.isVisible = function () {\n return !!(this.element.offsetWidth || this.element.offsetHeight || this.element.getClientRects().length);\n };\n DomElementBuilder.prototype.addClass = function (className) {\n var classNames = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n classNames[_i - 1] = arguments[_i];\n }\n if (className) {\n var fullList = __spreadArray(__spreadArray([], className.trim().split(\" \"), true), classNames, true);\n for (var i = 0; i < fullList.length; i++)\n this.element.classList.add(fullList[i]);\n }\n return this;\n };\n DomElementBuilder.prototype.removeClass = function (className) {\n var classNames = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n classNames[_i - 1] = arguments[_i];\n }\n if (className) {\n var fullList = __spreadArray(__spreadArray([], className.trim().split(\" \"), true), classNames, true);\n for (var i = 0; i < fullList.length; i++)\n this.element.classList.remove(fullList[i]);\n }\n return this;\n };\n DomElementBuilder.prototype.toggleClass = function (className, force) {\n if (force === void 0) { force = undefined; }\n if (className) {\n this.element.classList.toggle(className, force);\n }\n return this;\n };\n DomElementBuilder.prototype.on = function (eventType, listener) {\n var eventTypes = eventType.split(' ');\n for (var i = 0; i < eventTypes.length; i++) {\n this.element.addEventListener(eventTypes[i], listener);\n }\n return this;\n };\n DomElementBuilder.prototype.off = function (eventType, listener) {\n var eventTypes = eventType.split(' ');\n for (var i = 0; i < eventTypes.length; i++) {\n this.element.removeEventListener(eventTypes[i], listener);\n }\n return this;\n };\n DomElementBuilder.prototype.setStyle = function (styleId, styleValue) {\n this.element.style.setProperty(styleId, styleValue);\n return this;\n };\n DomElementBuilder.prototype.removeStyle = function (styleId) {\n this.element.style.removeProperty(styleId);\n return this;\n };\n DomElementBuilder.prototype.text = function (text) {\n this.element.innerText = text;\n return this;\n };\n DomElementBuilder.prototype.html = function (html) {\n this.element.innerHTML = html;\n return this;\n };\n DomElementBuilder.prototype.clear = function () {\n var oldElem = this.element;\n this.element = document.createElement(this.element.tagName);\n oldElem.replaceWith(this.element);\n };\n DomElementBuilder.prototype.addText = function (text) {\n var textEl = document.createTextNode(text);\n this.element.appendChild(textEl);\n return this;\n };\n DomElementBuilder.prototype.addHtml = function (html) {\n this.element.innerHTML += html;\n return this;\n };\n DomElementBuilder.prototype.toDOM = function () {\n return this.element;\n };\n DomElementBuilder.prototype.appendTo = function (parent) {\n if (parent) {\n parent.appendChild(this.element);\n }\n return this;\n };\n return DomElementBuilder;\n}());\nexport { DomElementBuilder };\nvar DomTextAreaElementBuilder = /** @class */ (function (_super) {\n __extends(DomTextAreaElementBuilder, _super);\n function DomTextAreaElementBuilder(element, parent) {\n var _this = this;\n if (element) {\n _this = _super.call(this, element, parent) || this;\n }\n else {\n _this = _super.call(this, \"textarea\", parent) || this;\n }\n return _this;\n }\n DomTextAreaElementBuilder.prototype.name = function (value) {\n this.element.name = value;\n return this;\n };\n DomTextAreaElementBuilder.prototype.rows = function (rows) {\n this.element.rows = rows;\n return this;\n };\n DomTextAreaElementBuilder.prototype.cols = function (cols) {\n this.element.cols = cols;\n return this;\n };\n DomTextAreaElementBuilder.prototype.value = function (value) {\n this.element.value = value;\n return this;\n };\n return DomTextAreaElementBuilder;\n}(DomElementBuilder));\nexport { DomTextAreaElementBuilder };\nvar DomInputElementBuilder = /** @class */ (function (_super) {\n __extends(DomInputElementBuilder, _super);\n function DomInputElementBuilder(element, parent) {\n var _this = this;\n if (element) {\n _this = _super.call(this, element, parent) || this;\n }\n else {\n _this = _super.call(this, \"input\", parent) || this;\n }\n return _this;\n }\n DomInputElementBuilder.prototype.name = function (value) {\n this.element.name = value;\n return this;\n };\n DomInputElementBuilder.prototype.type = function (value) {\n this.element.type = value;\n return this;\n };\n DomInputElementBuilder.prototype.size = function (value) {\n this.element.size = value;\n return this;\n };\n DomInputElementBuilder.prototype.value = function (value) {\n if (value instanceof Date) {\n this.element.valueAsDate = value;\n }\n else if (typeof value === \"number\") {\n this.element.valueAsNumber = value;\n }\n else {\n this.element.value = value;\n }\n return this;\n };\n DomInputElementBuilder.prototype.mask = function (maskPattern) {\n mask(this.element, maskPattern);\n return this;\n };\n return DomInputElementBuilder;\n}(DomElementBuilder));\nexport { DomInputElementBuilder };\nvar DomSelectElementBuilder = /** @class */ (function (_super) {\n __extends(DomSelectElementBuilder, _super);\n function DomSelectElementBuilder(element, parent) {\n var _this = this;\n if (element) {\n _this = _super.call(this, element, parent) || this;\n }\n else {\n _this = _super.call(this, \"select\", parent) || this;\n }\n return _this;\n }\n DomSelectElementBuilder.prototype.addOption = function (value) {\n var option = document.createElement('option');\n if (typeof value === \"string\") {\n option.value = value;\n option.innerHTML = value;\n }\n else {\n option.value = value.value;\n option.innerHTML = value.title || value.value;\n option.selected = value.selected || false;\n }\n this.element.appendChild(option);\n return this;\n };\n DomSelectElementBuilder.prototype.value = function (value) {\n this.element.value = value;\n return this;\n };\n return DomSelectElementBuilder;\n}(DomElementBuilder));\nexport { DomSelectElementBuilder };\nexport function domel(tag, parent) {\n if (tag === \"div\" || tag instanceof HTMLDivElement) {\n return new DomElementBuilder(tag, parent);\n }\n if (tag === \"span\" || tag instanceof HTMLSpanElement) {\n return new DomElementBuilder(tag, parent);\n }\n else if (tag === \"a\" || tag instanceof HTMLAnchorElement) {\n return new DomElementBuilder(tag, parent);\n }\n else if (tag === \"button\" || tag instanceof HTMLButtonElement) {\n return new DomElementBuilder(tag, parent);\n }\n else if (tag === \"img\" || tag instanceof HTMLImageElement) {\n return new DomElementBuilder(tag, parent);\n }\n else if (tag === \"input\" || tag instanceof HTMLInputElement) {\n return new DomInputElementBuilder(tag instanceof HTMLInputElement ? tag : null, parent);\n }\n else if (tag === \"textarea\" || tag instanceof HTMLTextAreaElement) {\n return new DomTextAreaElementBuilder(tag instanceof HTMLTextAreaElement ? tag : null, parent);\n }\n else if (tag === \"select\" || tag instanceof HTMLSelectElement) {\n return new DomSelectElementBuilder(tag instanceof HTMLSelectElement ? tag : null, parent);\n }\n return new DomElementBuilder(tag, parent);\n}\n//# sourceMappingURL=dom_elem_builder.js.map","export function mask(input, maskPattern) {\n var d = { 9: '[0-9]', a: '[a-z]' };\n var mask = maskPattern.split('');\n var keyDownHandler = function (e) {\n // backspace key or delete key\n if (e.keyCode === 8 || e.keyCode === 46) {\n e.preventDefault();\n var mskd = [];\n var startSelection = input.selectionStart;\n if (startSelection == 0)\n return;\n var selection = startSelection;\n var onlyLodash = true;\n for (var index = mask.length - 1; index >= 0; index--) {\n var el = mask[index];\n if (d[el]) {\n var t = new RegExp(d[el], 'i').test(input.value.charAt(index));\n if (t && index != startSelection - 1) {\n onlyLodash = false;\n }\n if (index === startSelection - 1)\n selection--;\n mskd.push(t && index != startSelection - 1\n ? input.value.charAt(index)\n : '_');\n }\n else {\n if (index === selection - 1)\n selection--;\n if (startSelection - 1 === index)\n startSelection--;\n mskd.push(el);\n }\n }\n input.value = !onlyLodash ? mskd.reverse().join('') : '';\n input.selectionStart = input.selectionEnd = selection < 0 ? 0 : selection;\n var event_1 = document.createEvent('Event');\n event_1.initEvent('input', true, true);\n input.dispatchEvent(event_1);\n }\n };\n var keyPressHandler = function (e) {\n var char = String.fromCharCode(e.charCode);\n if (char) {\n e.preventDefault();\n var mskd_1 = [];\n var selectionStart_1 = input.selectionStart;\n var selection_1 = selectionStart_1;\n mask.forEach(function (el, index) {\n if (d[el]) {\n var ch = (index != selectionStart_1)\n ? input.value.charAt(index)\n : char;\n var t = new RegExp(d[el], 'i').test(ch);\n mskd_1.push(t ? ch : '_');\n if (t && selectionStart_1 === index)\n selection_1++;\n }\n else {\n mskd_1.push(el);\n if (selection_1 === index)\n selection_1++;\n if (selectionStart_1 === index)\n selectionStart_1++;\n }\n });\n input.value = mskd_1.join('');\n input.selectionStart = input.selectionEnd = selection_1;\n var event_2 = document.createEvent('Event');\n event_2.initEvent('input', true, true);\n input.dispatchEvent(event_2);\n }\n };\n var inputHandler = function (e) {\n if (e.type === 'focus' && input.value !== '')\n return;\n var mskd = [];\n var startSelection = input.selectionStart;\n mask.forEach(function (el, index) {\n if (d[el]) {\n var t = new RegExp(d[el], 'i').test(input.value.charAt(index));\n mskd.push(t ? input.value.charAt(index) : '_');\n }\n else {\n mskd.push(el);\n }\n });\n input.value = mskd.join('');\n input.selectionStart = input.selectionEnd = startSelection;\n };\n input.addEventListener('keydown', keyDownHandler);\n input.addEventListener('keypress', keyPressHandler);\n input.addEventListener('input', inputHandler);\n input.addEventListener('focus', inputHandler);\n}\n//# sourceMappingURL=mask.js.map","import { utils } from '@easydata/core';\nimport { getElementAbsolutePos } from './ui-utils';\nimport { domel } from '../utils/dom_elem_builder';\nvar touchEventIsDefined = typeof TouchEvent !== 'undefined';\nexport var DropEffect;\n(function (DropEffect) {\n DropEffect[\"None\"] = \"none\";\n DropEffect[\"Allow\"] = \"allow\";\n DropEffect[\"Forbid\"] = \"forbid\";\n})(DropEffect || (DropEffect = {}));\nvar EqDragEvent = /** @class */ (function () {\n function EqDragEvent(item, dragImage, sourceEvent) {\n this.dropEffect = DropEffect.Allow;\n this.pageX = 0;\n this.pageY = 0;\n this.item = item;\n this.dragImage = dragImage;\n this.data = item.data;\n this.sourceEvent = sourceEvent;\n if (sourceEvent && sourceEvent instanceof MouseEvent) {\n this.pageX = sourceEvent.pageX,\n this.pageY = sourceEvent.pageY;\n }\n if (sourceEvent && touchEventIsDefined && sourceEvent instanceof TouchEvent\n && sourceEvent.touches[0]) {\n this.pageX = sourceEvent.touches[0].pageX,\n this.pageY = sourceEvent.touches[0].pageY;\n }\n }\n return EqDragEvent;\n}());\nexport { EqDragEvent };\nvar Position = /** @class */ (function () {\n function Position(ev) {\n if (ev && ev instanceof MouseEvent) {\n this.x = ev.pageX,\n this.y = ev.pageY;\n }\n if (ev && touchEventIsDefined && ev instanceof TouchEvent && ev.touches[0]) {\n this.x = ev.touches[0].pageX,\n this.y = ev.touches[0].pageY;\n }\n }\n return Position;\n}());\nvar DragManager = /** @class */ (function () {\n function DragManager() {\n this.delta = 5;\n this.draggableItem = null;\n this.dragImage = null;\n this.finishedSuccessfully = false;\n this.mouseDownPosition = null;\n this.containerDescriptors = [];\n this.containerDescriptorIndex = -1;\n this.dropEffect = DropEffect.None;\n this.classPrefix = 'eqjs-drop';\n this.DRAG_DISABLED_ATTR = 'drag-disabled';\n }\n DragManager.prototype.registerDraggableItem = function (descriptor) {\n var _this = this;\n var element = descriptor.element;\n if (!element) {\n throw Error(\"Element in draggle item is null or undefined\");\n }\n element.ondragstart = function () {\n return false;\n };\n var detectDragging = function (ev) {\n if (element.hasAttribute(_this.DRAG_DISABLED_ATTR)) {\n return;\n }\n ev.preventDefault();\n if (ev instanceof MouseEvent) {\n ev.stopPropagation();\n }\n var cursorPosition = new Position(ev);\n if (Math.abs(cursorPosition.x - _this.mouseDownPosition.x) > _this.delta\n || Math.abs(cursorPosition.y - _this.mouseDownPosition.y) > _this.delta) {\n startDragging(ev);\n }\n };\n var mouseMoveEventListener = function (ev) {\n _this.mouseMoveDragListener(ev);\n };\n var startDragging = function (ev) {\n ev.preventDefault();\n ev.stopPropagation();\n element.removeEventListener('mousemove', detectDragging);\n element.removeEventListener('touchmove', detectDragging);\n _this.finishedSuccessfully = false;\n if (descriptor.beforeDragStart)\n descriptor.beforeDragStart();\n _this.dragImage = domel('div')\n .setStyle('position', 'absolute')\n .setStyle('z-index', '65530')\n .toDOM();\n document.body.appendChild(_this.dragImage);\n _this.dragImage.appendChild(element.cloneNode(true));\n if (descriptor.renderer) {\n descriptor.renderer(_this.dragImage);\n }\n _this.dropEffect = DropEffect.None;\n _this.updateCusror(_this.dropEffect);\n _this.updateImageClass(_this.dropEffect);\n _this.draggableItem = {\n element: element,\n scope: descriptor.scope,\n data: descriptor.data\n };\n _this.updateDragItemPosition(ev);\n var event = new EqDragEvent(_this.draggableItem, _this.dragImage, ev);\n event.dropEffect = _this.dropEffect;\n if (descriptor.onDragStart) {\n descriptor.onDragStart(event);\n }\n if (_this.dropEffect !== event.dropEffect) {\n _this.dropEffect = event.dropEffect;\n _this.updateImageClass(_this.dropEffect);\n }\n document.addEventListener('mousemove', mouseMoveEventListener, true);\n document.addEventListener('touchmove', mouseMoveEventListener, true);\n };\n var mouseDownListener = function (ev) {\n if (touchEventIsDefined && ev instanceof TouchEvent) {\n ev.preventDefault();\n }\n _this.mouseDownPosition = new Position(ev);\n element.addEventListener('mousemove', detectDragging);\n element.addEventListener('touchmove', detectDragging);\n document.addEventListener('mouseup', mouseUpListener);\n document.addEventListener('touchend', mouseUpListener);\n };\n element.addEventListener('mousedown', mouseDownListener);\n element.addEventListener('touchstart', mouseDownListener);\n var mouseUpListener = function (ev) {\n _this.mouseDownPosition = null;\n element.removeEventListener('mousemove', detectDragging);\n element.removeEventListener('touchmove', detectDragging);\n document.removeEventListener('mousemove', mouseMoveEventListener, true);\n document.removeEventListener('touchmove', mouseMoveEventListener, true);\n if (_this.draggableItem) {\n endDraggind(ev);\n }\n };\n var endDraggind = function (ev) {\n try {\n if (_this.containerDescriptorIndex >= 0) {\n var dropContDesc = _this.containerDescriptors[_this.containerDescriptorIndex];\n var container = {\n element: dropContDesc.element,\n scopes: dropContDesc.scopes,\n data: dropContDesc.data\n };\n var event_1 = new EqDragEvent(_this.draggableItem, _this.dragImage, ev);\n try {\n if (container.scopes.indexOf(_this.draggableItem.scope) >= 0\n && _this.dropEffect === DropEffect.Allow) {\n _this.finishedSuccessfully = true;\n if (dropContDesc.onDrop) {\n dropContDesc.onDrop(container, event_1);\n }\n }\n }\n finally {\n if (dropContDesc.onDragLeave) {\n dropContDesc.onDragLeave(container, event_1);\n }\n }\n }\n }\n finally {\n try {\n var event_2 = new EqDragEvent(_this.draggableItem, _this.dragImage, ev);\n event_2.data.finishedSuccessfully = _this.finishedSuccessfully;\n if (descriptor.onDragEnd) {\n descriptor.onDragEnd(event_2);\n }\n }\n finally {\n _this.draggableItem = null;\n if (_this.dragImage && _this.dragImage.parentElement) {\n _this.dragImage.parentElement.removeChild(_this.dragImage);\n }\n _this.dragImage = null;\n _this.finishedSuccessfully = false;\n document.removeEventListener('mouseup', mouseUpListener);\n document.removeEventListener('touchend', mouseUpListener);\n }\n }\n };\n };\n DragManager.prototype.registerDropContainer = function (descriptor) {\n var element = descriptor.element;\n if (!element) {\n throw Error(\"Element in drop container is null or undefined\");\n }\n this.containerDescriptors.push(descriptor);\n };\n DragManager.prototype.removeDropContainer = function (descriptorOrSlot) {\n var descs = this.containerDescriptors\n .filter(function (desc) { return desc === descriptorOrSlot\n || desc.element == descriptorOrSlot; });\n if (descs) {\n for (var _i = 0, descs_1 = descs; _i < descs_1.length; _i++) {\n var desc = descs_1[_i];\n utils.removeArrayItem(this.containerDescriptors, desc);\n }\n }\n };\n DragManager.prototype.mouseMoveDragListener = function (ev) {\n if (ev instanceof MouseEvent) {\n ev.preventDefault();\n }\n ev.stopPropagation();\n this.updateDragItemPosition(ev);\n if (this.containerDescriptorIndex == -1) {\n for (var i = 0; i < this.containerDescriptors.length; i++) {\n var descriptor = this.containerDescriptors[i];\n if (this.detectDragEnterEvent(descriptor.element, ev)) {\n this.containerDescriptorIndex = i;\n break;\n }\n }\n if (this.containerDescriptorIndex >= 0) {\n this.dragEnterEvent(ev);\n }\n }\n else {\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\n if (this.detectDragLeaveEvent(descriptor.element, ev)) {\n this.dragLeaveEvent(ev);\n this.containerDescriptorIndex = -1;\n }\n }\n if (this.containerDescriptorIndex >= 0) {\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\n var container = {\n element: descriptor.element,\n scopes: descriptor.scopes,\n data: descriptor.data\n };\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\n var event_3 = new EqDragEvent(this.draggableItem, this.dragImage, ev);\n event_3.dropEffect = this.dropEffect;\n if (descriptor.onDragOver) {\n descriptor.onDragOver(container, event_3);\n }\n }\n }\n };\n DragManager.prototype.updateCusror = function (dropEffect) {\n switch (dropEffect) {\n case DropEffect.Allow:\n this.setCursorStyle(this.dragImage, 'grabbing');\n break;\n case DropEffect.Forbid:\n this.setCursorStyle(this.dragImage, 'no-drop');\n break;\n default:\n this.setCursorStyle(this.dragImage, 'grabbing');\n break;\n }\n };\n DragManager.prototype.updateImageClass = function (dropEffect) {\n this.dragImage.classList.remove(\"\".concat(this.classPrefix, \"-allow\"));\n this.dragImage.classList.remove(\"\".concat(this.classPrefix, \"-forbid\"));\n this.dragImage.classList.remove(\"\".concat(this.classPrefix, \"-none\"));\n switch (dropEffect) {\n case DropEffect.Allow:\n this.dragImage.classList.add(\"\".concat(this.classPrefix, \"-allow\"));\n break;\n case DropEffect.None:\n this.dragImage.classList.add(\"\".concat(this.classPrefix, \"-none\"));\n break;\n case DropEffect.Forbid:\n this.dragImage.classList.add(\"\".concat(this.classPrefix, \"-forbid\"));\n break;\n default:\n this.dragImage.classList.add(\"\".concat(this.classPrefix, \"-none\"));\n break;\n }\n };\n DragManager.prototype.setCursorStyle = function (element, cursor) {\n if (element) {\n element.style.cursor = cursor;\n for (var i = 0; i < element.children.length; i++) {\n this.setCursorStyle(element.children[i], cursor);\n }\n }\n };\n DragManager.prototype.updateDragItemPosition = function (ev) {\n if (this.dragImage) {\n var pos = new Position(ev);\n this.dragImage.style.top = (pos.y - this.dragImage.offsetHeight / 2) + 'px';\n this.dragImage.style.left = (pos.x - this.dragImage.offsetWidth / 2) + 'px';\n }\n };\n DragManager.prototype.dragEnterEvent = function (ev) {\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\n var container = {\n element: descriptor.element,\n scopes: descriptor.scopes,\n data: descriptor.data\n };\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\n var event_4 = new EqDragEvent(this.draggableItem, this.dragImage, ev);\n event_4.dropEffect = DropEffect.Allow;\n if (descriptor.onDragEnter) {\n descriptor.onDragEnter(container, event_4);\n }\n this.dropEffect = event_4.dropEffect;\n this.updateCusror(this.dropEffect);\n this.updateImageClass(this.dropEffect);\n }\n else {\n if (this.dropEffect !== DropEffect.Forbid) {\n this.dropEffect = DropEffect.None;\n this.updateCusror(this.dropEffect);\n this.updateImageClass(this.dropEffect);\n }\n }\n };\n DragManager.prototype.dragLeaveEvent = function (ev) {\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\n var container = {\n element: descriptor.element,\n scopes: descriptor.scopes,\n data: descriptor.data\n };\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\n var event_5 = new EqDragEvent(this.draggableItem, this.dragImage, ev);\n event_5.dropEffect = DropEffect.None;\n if (descriptor.onDragLeave) {\n descriptor.onDragLeave(container, event_5);\n }\n this.dropEffect = event_5.dropEffect;\n this.updateCusror(this.dropEffect);\n this.updateImageClass(this.dropEffect);\n }\n };\n DragManager.prototype.detectDragEnterEvent = function (container, ev) {\n var containerPos = getElementAbsolutePos(container);\n var pos = new Position(ev);\n if (pos.y < containerPos.y || pos.y > containerPos.y + container.offsetHeight) {\n return false;\n }\n if (pos.x < containerPos.x || pos.x > containerPos.x + container.offsetWidth) {\n return false;\n }\n return true;\n };\n DragManager.prototype.detectDragLeaveEvent = function (container, ev) {\n var containerPos = getElementAbsolutePos(container);\n var pos = new Position(ev);\n if (pos.y > containerPos.y && pos.y < containerPos.y + container.offsetHeight\n && pos.x > containerPos.x && pos.x < containerPos.x + container.offsetWidth) {\n return false;\n }\n return true;\n };\n return DragManager;\n}());\nexport { DragManager };\n//global variable\nexport var eqDragManager = new DragManager();\n//# sourceMappingURL=drag_manager.js.map","export var AutoResizeColumns;\n(function (AutoResizeColumns) {\n AutoResizeColumns[AutoResizeColumns[\"Always\"] = 0] = \"Always\";\n AutoResizeColumns[AutoResizeColumns[\"Once\"] = 1] = \"Once\";\n AutoResizeColumns[AutoResizeColumns[\"Never\"] = 2] = \"Never\";\n})(AutoResizeColumns || (AutoResizeColumns = {}));\n//# sourceMappingURL=easy_grid_options.js.map","import { i18n, DataType } from '@easydata/core';\nimport { GridColumnAlign } from './easy_grid_columns';\nvar cssPrefix = \"keg\";\nexport var DFMT_REGEX = /{0:(.*?)}/g;\nexport var CellRendererType;\n(function (CellRendererType) {\n CellRendererType[CellRendererType[\"STRING\"] = 1] = \"STRING\";\n CellRendererType[CellRendererType[\"NUMBER\"] = 2] = \"NUMBER\";\n CellRendererType[CellRendererType[\"DATETIME\"] = 3] = \"DATETIME\";\n CellRendererType[CellRendererType[\"BOOL\"] = 4] = \"BOOL\";\n})(CellRendererType || (CellRendererType = {}));\nvar StringCellRendererDefault = function (value, column, cellValueElement, rowElement) {\n var text = value ? value.toString().replace(/\\n/g, '\\u21B5 ') : '';\n cellValueElement.innerText = text;\n cellValueElement.title = text;\n if (column.align == GridColumnAlign.NONE) {\n cellValueElement.classList.add(\"\".concat(cssPrefix, \"-cell-value-align-left\"));\n }\n};\nvar NumberCellRendererDefault = function (value, column, cellValueElement, rowElement) {\n var strValue = (value || '').toString();\n if (typeof value == 'number') {\n if (column.dataColumn && column.dataColumn.displayFormat\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\n strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, function (_, $1) {\n return i18n.numberToStr(value, $1);\n });\n }\n else {\n strValue = value.toLocaleString();\n }\n }\n cellValueElement.innerText = strValue;\n cellValueElement.title = strValue;\n if (column.align == GridColumnAlign.NONE) {\n cellValueElement.classList.add(\"\".concat(cssPrefix, \"-cell-value-align-right\"));\n }\n};\nvar DateTimeCellRendererDefault = function (value, column, cellValueElement, rowElement) {\n var isDate = Object.prototype.toString.call(value) === '[object Date]';\n var strValue = (value || '').toString();\n if (isDate) {\n if (column.dataColumn && column.dataColumn.displayFormat\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\n strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, function (_, $1) {\n return i18n.dateTimeToStr(value, column.type, $1);\n });\n }\n else {\n var locale = i18n.getCurrentLocale();\n var timeOptions = { hour: 'numeric', minute: 'numeric', second: 'numeric' };\n switch (column.type) {\n case DataType.Date:\n strValue = value.toLocaleDateString(locale);\n break;\n case DataType.Time:\n strValue = value.toLocaleTimeString(locale, timeOptions);\n break;\n case DataType.DateTime:\n strValue = \"\".concat(value.toLocaleDateString(locale), \" \").concat(value.toLocaleTimeString(locale, timeOptions));\n break;\n }\n }\n }\n cellValueElement.innerText = strValue;\n cellValueElement.title = strValue;\n if (column.align == GridColumnAlign.NONE) {\n cellValueElement.classList.add(\"\".concat(cssPrefix, \"-cell-value-align-right\"));\n }\n};\nvar BoolCellRendererDefault = function (value, column, cellValueElement, rowElement) {\n if (column.dataColumn && column.dataColumn.displayFormat\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\n var strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, function (_, $1) {\n return i18n.booleanToStr(value, $1);\n });\n return StringCellRendererDefault(strValue, column, cellValueElement, rowElement);\n }\n else {\n cellValueElement.classList.add(\"\".concat(cssPrefix, \"-cell-value-bool\"));\n cellValueElement.classList.add(\"\".concat(cssPrefix, \"-\").concat(value ? 'cell-value-true' : 'cell-value-false'));\n }\n};\nvar GridCellRendererStore = /** @class */ (function () {\n function GridCellRendererStore(options) {\n this.renderers = {};\n this.defaultRenderers = {};\n this.registerRenderer('StringDefault', StringCellRendererDefault);\n this.setDefaultRenderer(CellRendererType.STRING, StringCellRendererDefault);\n this.registerRenderer('NumberDefault', NumberCellRendererDefault);\n this.setDefaultRenderer(CellRendererType.NUMBER, NumberCellRendererDefault);\n this.registerRenderer('DateTimeDefault', DateTimeCellRendererDefault);\n this.setDefaultRenderer(CellRendererType.DATETIME, DateTimeCellRendererDefault);\n this.registerRenderer('BoolDefault', BoolCellRendererDefault);\n this.setDefaultRenderer(CellRendererType.BOOL, BoolCellRendererDefault);\n }\n GridCellRendererStore.prototype.getDefaultRenderer = function (columnType) {\n var cellType = this.getCellType(columnType);\n return this.defaultRenderers[CellRendererType[cellType]];\n };\n GridCellRendererStore.prototype.getDefaultRendererByType = function (rendererType) {\n return this.defaultRenderers[CellRendererType[rendererType]];\n };\n GridCellRendererStore.prototype.setDefaultRenderer = function (cellType, renderer) {\n if (renderer) {\n this.defaultRenderers[CellRendererType[cellType]] = renderer;\n }\n };\n GridCellRendererStore.prototype.getRenderer = function (name) {\n return this.renderers[name];\n };\n GridCellRendererStore.prototype.registerRenderer = function (name, renderer) {\n this.renderers[name] = renderer;\n };\n GridCellRendererStore.prototype.getCellType = function (dataType) {\n switch (dataType) {\n case DataType.Autoinc:\n case DataType.Byte:\n case DataType.Word:\n case DataType.Currency:\n case DataType.Float:\n case DataType.Int32:\n case DataType.Int64:\n return CellRendererType.NUMBER;\n case DataType.Date:\n case DataType.DateTime:\n case DataType.Time:\n return CellRendererType.DATETIME;\n case DataType.Bool:\n return CellRendererType.BOOL;\n default:\n return CellRendererType.STRING;\n }\n };\n return GridCellRendererStore;\n}());\nexport { GridCellRendererStore };\n//# sourceMappingURL=easy_grid_cell_renderer.js.map","import { utils, ColumnAlignment } from '@easydata/core';\nimport { CellRendererType } from \"./easy_grid_cell_renderer\";\nvar DEFAULT_WIDTH_STRING = 250;\nvar ROW_NUM_WIDTH = 60;\nexport var GridColumnAlign;\n(function (GridColumnAlign) {\n GridColumnAlign[GridColumnAlign[\"NONE\"] = 1] = \"NONE\";\n GridColumnAlign[GridColumnAlign[\"LEFT\"] = 2] = \"LEFT\";\n GridColumnAlign[GridColumnAlign[\"CENTER\"] = 3] = \"CENTER\";\n GridColumnAlign[GridColumnAlign[\"RIGHT\"] = 4] = \"RIGHT\";\n})(GridColumnAlign || (GridColumnAlign = {}));\nfunction MapAlignment(alignment) {\n switch (alignment) {\n case ColumnAlignment.Left:\n return GridColumnAlign.LEFT;\n case ColumnAlignment.Center:\n return GridColumnAlign.CENTER;\n case ColumnAlignment.Right:\n return GridColumnAlign.RIGHT;\n default:\n return GridColumnAlign.NONE;\n }\n}\nvar GridColumn = /** @class */ (function () {\n function GridColumn(column, grid, isRowNum) {\n if (isRowNum === void 0) { isRowNum = false; }\n this._label = null;\n this._description = null;\n //public left: number;\n this.align = GridColumnAlign.NONE;\n this.isVisible = true;\n this.isRowNum = false;\n this.dataColumn = column;\n this.grid = grid;\n var widthOptions = grid.options.columnWidths || {};\n if (column) {\n if (column.style.alignment) {\n this.align = MapAlignment(column.style.alignment);\n }\n this.width = (widthOptions && widthOptions[this.type]) ? widthOptions[this.type].default : DEFAULT_WIDTH_STRING;\n this.cellRenderer = this.grid.cellRendererStore.getDefaultRenderer(column.type);\n this._description = column.description;\n }\n else if (isRowNum) {\n this.isRowNum = true;\n this.width = (widthOptions && widthOptions.rowNumColumn) ? widthOptions.rowNumColumn.default : ROW_NUM_WIDTH;\n this._label = '';\n this.cellRenderer = this.grid.cellRendererStore.getDefaultRendererByType(CellRendererType.NUMBER);\n }\n if (grid && grid.options && grid.options.onGetCellRenderer) {\n this.cellRenderer = grid.options.onGetCellRenderer(this, this.cellRenderer) || this.cellRenderer;\n }\n }\n Object.defineProperty(GridColumn.prototype, \"label\", {\n get: function () {\n return this._label ? this._label : this.isRowNum ? '' : this.dataColumn.label;\n },\n set: function (value) {\n this._label = this.label;\n },\n enumerable: false,\n configurable: true\n });\n ;\n Object.defineProperty(GridColumn.prototype, \"description\", {\n /** Get column description. */\n get: function () {\n return this._description;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(GridColumn.prototype, \"type\", {\n get: function () {\n return this.dataColumn ? this.dataColumn.type : null;\n },\n enumerable: false,\n configurable: true\n });\n return GridColumn;\n}());\nexport { GridColumn };\nvar GridColumnList = /** @class */ (function () {\n function GridColumnList(columnList, grid) {\n this.items = [];\n this.grid = grid;\n this.sync(columnList);\n }\n GridColumnList.prototype.sync = function (columnList, hasRowNumCol) {\n if (hasRowNumCol === void 0) { hasRowNumCol = true; }\n this.clear();\n var rowNumCol = new GridColumn(null, this.grid, true);\n this.add(rowNumCol);\n if (!hasRowNumCol) {\n rowNumCol.isVisible = false;\n }\n if (columnList) {\n for (var _i = 0, _a = columnList.getItems(); _i < _a.length; _i++) {\n var column = _a[_i];\n var col = new GridColumn(column, this.grid);\n if (this.grid.options.onSyncGridColumn) {\n this.grid.options.onSyncGridColumn(col);\n }\n this.add(col);\n }\n }\n };\n Object.defineProperty(GridColumnList.prototype, \"count\", {\n get: function () {\n return this.items.length;\n },\n enumerable: false,\n configurable: true\n });\n GridColumnList.prototype.add = function (col) {\n var index = this.items.length;\n this.items.push(col);\n return index;\n };\n GridColumnList.prototype.put = function (index, col) {\n if (index >= 0 && index < this.items.length) {\n this.items[index] = col;\n }\n };\n GridColumnList.prototype.move = function (col, newIndex) {\n var oldIndex = this.items.indexOf(col);\n if (oldIndex >= 0 && oldIndex != newIndex)\n utils.moveArrayItem(this.items, oldIndex, newIndex);\n };\n GridColumnList.prototype.get = function (index) {\n if (index >= 0 && index < this.items.length) {\n return this.items[index];\n }\n else {\n return null;\n }\n };\n // public getIndex(name: string) : number {\n // return this.mapper[name];\n // }\n GridColumnList.prototype.getItems = function () {\n return this.items;\n };\n GridColumnList.prototype.removeAt = function (index) {\n var col = this.get(index);\n this.items.splice(index, 1);\n //delete this.mapper[col.name];\n };\n GridColumnList.prototype.clear = function () {\n this.items = [];\n //this.mapper = {};\n };\n return GridColumnList;\n}());\nexport { GridColumnList };\n//# sourceMappingURL=easy_grid_columns.js.map","export var DialogFooterAlignment;\n(function (DialogFooterAlignment) {\n DialogFooterAlignment[DialogFooterAlignment[\"Left\"] = 1] = \"Left\";\n DialogFooterAlignment[DialogFooterAlignment[\"Center\"] = 2] = \"Center\";\n DialogFooterAlignment[DialogFooterAlignment[\"Right\"] = 3] = \"Right\";\n})(DialogFooterAlignment || (DialogFooterAlignment = {}));\n//# sourceMappingURL=dialog_service.js.map","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { EventEmitter, DataRow, utils, i18n, DataType } from '@easydata/core';\nimport { eqDragManager, DropEffect } from '../utils/drag_manager';\nimport { domel } from '../utils/dom_elem_builder';\nimport { getElementAbsolutePos, eqCssPrefix } from '../utils/ui-utils';\nimport { AutoResizeColumns } from './easy_grid_options';\nimport { GridColumnList, GridColumnAlign } from './easy_grid_columns';\nimport { GridCellRendererStore } from './easy_grid_cell_renderer';\nvar DEFAULT_ROW_HEIGHT = 36;\nvar DEFAULT_ROW_COUNT = 15;\n/** Represents a grid widget with columns rows, paging, custom rendering and more */\nvar EasyGrid = /** @class */ (function () {\n /** Creates and initializes all internal properties of the grid object */\n function EasyGrid(options) {\n this.cssPrefix = \"keg\";\n this.pagination = { page: 1, pageSize: 30, total: 0 };\n this.paginationOptions = {\n maxButtonCount: 10,\n useBootstrap: false //true\n };\n this.defaultDataGridOptions = {\n slot: null,\n dataTable: null,\n fixHeightOnFirstRender: false,\n syncGridColumns: true,\n useRowNumeration: true,\n allowDragDrop: false,\n aggregates: {\n settings: null,\n calculator: null\n },\n paging: {\n enabled: true,\n pageSize: 30,\n pageSizeItems: [20, 30, 50, 100, 200]\n },\n columnWidths: {\n autoResize: AutoResizeColumns.Always,\n stringColumns: {\n min: 100,\n max: 500,\n default: 250\n },\n numberColumns: {\n min: 60,\n default: 120\n },\n boolColumns: {\n min: 50,\n default: 80\n },\n dateColumns: {\n min: 80,\n default: 200\n },\n otherColumns: {\n min: 100,\n max: 500,\n default: 250\n },\n rowNumColumn: {\n min: 40,\n default: 60\n }\n },\n showPlusButton: false,\n viewportRowsCount: null,\n showActiveRow: true\n };\n this.rowsOnPagePromise = null;\n this.containerInitialHeight = 0;\n this.firstRender = true;\n this.prevRowTotals = null;\n this.landingIndex = -1;\n this.landingSlot = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-col-landing-slot\"))\n .addChildElement(domel('div')\n .toDOM())\n .toDOM();\n this._activeRowIndex = -1;\n if (options && options.paging) {\n options.paging = utils.assign(this.defaultDataGridOptions.paging, options.paging);\n }\n this.options = this.mergeOptions(options);\n this.processColumnWidthsOptions();\n if (!this.options.slot)\n throw Error('\"slot\" parameter is required to initialize EasyDataGrid');\n if (!this.options.dataTable)\n throw Error('\"dataTable\" parameter is required to initialize EasyDataGrid');\n this.dataTable = options.dataTable;\n this.eventEmitter = new EventEmitter(this);\n this.cellRendererStore = new GridCellRendererStore(options);\n this.columns = new GridColumnList(this.dataTable.columns, this);\n this.setSlot(this.options.slot);\n this.init(this.options);\n }\n EasyGrid.prototype.mergeOptions = function (options) {\n var colWidthOptions = utils.assignDeep({}, this.defaultDataGridOptions.columnWidths, options.columnWidths);\n var pagingOptions = utils.assignDeep({}, this.defaultDataGridOptions.paging, options.paging);\n var result = utils.assign({}, this.defaultDataGridOptions, options);\n result.columnWidths = colWidthOptions;\n result.paging = pagingOptions;\n return result;\n };\n EasyGrid.prototype.processColumnWidthsOptions = function () {\n var widthOptions = this.options.columnWidths;\n if (!widthOptions)\n return;\n //string columns\n utils.getStringDataTypes().forEach(function (dataType) {\n widthOptions[dataType] = __assign(__assign({}, widthOptions.stringColumns), widthOptions[dataType]);\n });\n //numeric columns\n utils.getNumericDataTypes().forEach(function (dataType) {\n widthOptions[dataType] = __assign(__assign({}, widthOptions.numberColumns), widthOptions[dataType]);\n });\n //bool columns\n widthOptions[DataType.Bool] = __assign(__assign({}, widthOptions.boolColumns), widthOptions[DataType.Bool]);\n //date columns\n utils.getDateDataTypes().forEach(function (dataType) {\n widthOptions[dataType] = __assign(__assign({}, widthOptions.dateColumns), widthOptions[dataType]);\n });\n //other columns\n var knownTypes = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], utils.getStringDataTypes(), true), utils.getNumericDataTypes(), true), utils.getDateDataTypes(), true), [\n DataType.Bool\n ], false);\n utils.getAllDataTypes().forEach(function (dataType) {\n if (!(dataType in knownTypes)) {\n widthOptions[dataType] = __assign(__assign({}, widthOptions.otherColumns), widthOptions[dataType]);\n }\n });\n widthOptions[DataType.Unknown] = widthOptions.otherColumns;\n };\n EasyGrid.prototype.setSlot = function (slot) {\n if (typeof slot === 'string') {\n if (slot.length) {\n if (slot[0] === '#') {\n this.slot = document.getElementById(slot.substring(1));\n }\n else if (slot[0] === '.') {\n var result = document.getElementsByClassName(slot.substring(1));\n if (result.length)\n this.slot = result[0];\n }\n else {\n throw Error('Unrecognized slot parameter ' +\n '(Must be id, class or HTMLElement): ' + slot);\n }\n }\n }\n else {\n this.slot = slot;\n }\n };\n /** Initializes grid widget according to the options passed in the parameter */\n EasyGrid.prototype.init = function (options) {\n var _this = this;\n if (options.onInit) {\n this.addEventListener('init', options.onInit);\n }\n if (options.onRowClick) {\n this.addEventListener('rowClick', options.onRowClick);\n }\n if (options.onRowDbClick) {\n this.addEventListener('rowDbClick', options.onRowDbClick);\n }\n if (options.onPlusButtonClick) {\n this.addEventListener('plusButtonClick', options.onPlusButtonClick);\n }\n if (options.onColumnChanged) {\n this.addEventListener('columnChanged', options.onColumnChanged);\n }\n if (options.onColumnDeleted) {\n this.addEventListener('columnDeleted', options.onColumnDeleted);\n }\n if (options.onColumnMoved) {\n this.addEventListener('columnMoved', options.onColumnMoved);\n }\n if (options.onPageChanged) {\n this.addEventListener('pageChanged', options.onPageChanged);\n }\n if (options.onActiveRowChanged) {\n this.addEventListener('activeRowChanged', options.onActiveRowChanged);\n }\n this.addEventListener('pageChanged', function (ev) { return _this.activeRowIndex = -1; });\n utils.assignDeep(this.paginationOptions, options.pagination);\n this.pagination.pageSize = this.options.paging.pageSize\n || this.pagination.pageSize;\n if (this.options.allowDragDrop) {\n eqDragManager.registerDropContainer({\n element: this.slot,\n scopes: [\"gridColumnMove\"],\n onDragEnter: function (_, ev) {\n _this.slot.classList.add(\"\".concat(eqCssPrefix, \"-drophover\"));\n _this.showLandingSlot(ev.pageX, ev.pageY);\n },\n onDragOver: function (_, ev) {\n _this.showLandingSlot(ev.pageX, ev.pageY);\n },\n onDragLeave: function (_, ev) {\n ev.dropEffect = DropEffect.Forbid;\n _this.slot.classList.remove(\"\".concat(eqCssPrefix, \"-drophover\"));\n _this.hideLandingSlot();\n },\n onDrop: function (_, ev) {\n _this.dataTable.columns.move(ev.data.column, _this.landingIndex);\n _this.refresh();\n _this.fireEvent({\n type: 'columnMoved',\n columnId: ev.data.column.id,\n newIndex: _this.landingIndex\n });\n }\n });\n }\n this.refresh();\n this.fireEvent('init');\n };\n /** Fires a grid event. You can pass either an event type\n * (like 'init', 'rowClick', 'pageChanged', etc )\n * or a ready-to-use grid event object\n * */\n EasyGrid.prototype.fireEvent = function (event) {\n if (typeof event === \"string\") {\n this.eventEmitter.fire(event);\n }\n else {\n this.eventEmitter.fire(event.type, event);\n }\n };\n /** Allows to set the data (represented by a EasyDataTable object)\n * or to replace the existing one associated with the grid */\n EasyGrid.prototype.setData = function (data) {\n this.dataTable = data;\n this.clear();\n this.refresh();\n };\n /** Returns the EasyDataTable object associated with the grid via `setData()` call */\n EasyGrid.prototype.getData = function () {\n return this.dataTable;\n };\n /** Gets the list of grid columns */\n EasyGrid.prototype.getColumns = function () {\n return this.columns;\n };\n /** This function is called when the grid is destroyed */\n EasyGrid.prototype.destroy = function () {\n this.slot.innerHTML = \"\";\n };\n /** Clears the current DOM object and re-renders everything from the scratch */\n EasyGrid.prototype.refresh = function () {\n this.clearDOM();\n this.render();\n };\n EasyGrid.prototype.clearDOM = function () {\n this.slot.innerHTML = '';\n };\n /** Clears all DOM object in the grid and return it to its initial state */\n EasyGrid.prototype.clear = function () {\n this.pagination.page = 1;\n this.clearDOM();\n };\n /** Renders the grid */\n EasyGrid.prototype.render = function () {\n var _this = this;\n if (!this.hasData() && !this.options.showPlusButton)\n return;\n this.containerInitialHeight = this.slot.clientHeight;\n this.rootDiv = document.createElement('div');\n this.rootDiv.style.width = '100%';\n this.rootDiv.classList.add(\"\".concat(this.cssPrefix, \"-root\"));\n this.columns.sync(this.dataTable.columns, this.options.useRowNumeration);\n this.renderHeader();\n this.rootDiv.appendChild(this.headerDiv);\n this.renderBody();\n this.rootDiv.appendChild(this.bodyDiv);\n this.renderFooter();\n this.rootDiv.appendChild(this.footerDiv);\n var gridContainer = document.createElement('div');\n gridContainer.classList.add(\"\".concat(this.cssPrefix, \"-container\"));\n gridContainer.appendChild(this.rootDiv);\n this.slot.appendChild(gridContainer);\n var needAutoResize = this.options.columnWidths.autoResize !== AutoResizeColumns.Never;\n if (this.rowsOnPagePromise) {\n this.rowsOnPagePromise\n .then(function () { return _this.updateHeight(); })\n .then(function () {\n _this.firstRender = false;\n _this.rowsOnPagePromise = null;\n });\n }\n else {\n setTimeout(function () {\n _this.updateHeight()\n .then(function () {\n _this.firstRender = false;\n if (needAutoResize) {\n _this.resizeColumns();\n }\n });\n }, 100);\n }\n };\n EasyGrid.prototype.updateHeight = function () {\n var _this = this;\n return new Promise(function (resolve) {\n if (_this.options.viewportRowsCount) {\n var firstRow = _this.bodyCellContainerDiv.firstElementChild;\n var rowHeight = firstRow ? firstRow.offsetHeight : DEFAULT_ROW_HEIGHT;\n var rowCount = _this.options.viewportRowsCount; // || DEFAULT_ROW_COUNT;\n var viewportHeight_1 = rowHeight * rowCount;\n domel(_this.bodyViewportDiv)\n .setStyle('height', \"\".concat(viewportHeight_1, \"px\"));\n setTimeout(function () {\n var sbHeight = _this.bodyViewportDiv.offsetHeight - _this.bodyViewportDiv.clientHeight;\n viewportHeight_1 = viewportHeight_1 + sbHeight;\n domel(_this.bodyViewportDiv)\n .setStyle('height', \"\".concat(viewportHeight_1, \"px\"));\n resolve();\n }, 100);\n return;\n }\n else if (_this.containerInitialHeight > 0) {\n // comment for now since it does not work in all cases\n // const bodyHeight = this.containerInitialHeight - this.headerDiv.offsetHeight - this.footerDiv.offsetHeight;\n // domel(this.bodyDiv)\n // .setStyle('height', `${bodyHeight}px`);\n }\n resolve();\n })\n .then(function () {\n if (_this.options.fixHeightOnFirstRender && _this.firstRender) {\n _this.slot.style.height = \"\".concat(_this.slot.offsetHeight, \"px\");\n }\n });\n };\n EasyGrid.prototype.getContainerWidth = function () {\n return this.columns.getItems()\n .filter(function (col) { return col.isVisible; })\n .map(function (col) { return col.width; })\n .reduce(function (sum, current) { return sum + current; });\n };\n EasyGrid.prototype.renderHeader = function () {\n var _this = this;\n this.headerDiv = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-header\"))\n .toDOM();\n this.headerViewportDiv = domel('div', this.headerDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-header-viewport\"))\n .toDOM();\n this.headerCellContainerDiv = domel('div', this.headerViewportDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-header-cell-container\"))\n .toDOM();\n this.headerRowDiv = domel('div', this.headerCellContainerDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-header-row\"))\n .toDOM();\n this.columns.getItems().forEach(function (column, index) {\n if (!column.isVisible) {\n return;\n }\n var hd = _this.renderColumnHeader(column, index);\n _this.headerRowDiv.appendChild(hd);\n if (column.isRowNum) {\n domel(hd)\n .addChildElement(_this.renderHeaderButtons());\n }\n });\n var containerWidth = this.getContainerWidth();\n domel(this.headerCellContainerDiv)\n .setStyle('width', \"\".concat(containerWidth, \"px\"));\n };\n EasyGrid.prototype.hasData = function () {\n return this.dataTable.columns.count > 0;\n };\n EasyGrid.prototype.renderColumnHeader = function (column, index) {\n var _this = this;\n var colBuilder = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-header-cell\"))\n .data('col-idx', \"\".concat(index))\n .setStyle('width', \"\".concat(column.width, \"px\"));\n if (column.dataColumn) {\n colBuilder\n .data('col-id', \"\".concat(column.dataColumn.id));\n }\n var colDiv = colBuilder.toDOM();\n domel('div', colDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-header-cell-resize\"));\n if (!column.isRowNum) {\n domel('div', colDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-header-cell-label\"))\n .text(column.label);\n }\n if (column.description) {\n domel('div', colDiv)\n .addClass('question-mark')\n .title(column.description);\n }\n if (this.options.allowDragDrop) {\n eqDragManager.registerDraggableItem({\n element: colDiv,\n scope: \"gridColumnMove\",\n data: { column: column },\n renderer: function (dragImage) {\n dragImage.innerHTML = '';\n var attrLabel = document.createElement('div');\n attrLabel.innerText = column.label;\n dragImage.classList.add(\"\".concat(_this.cssPrefix, \"-sortable-helper\"));\n dragImage.appendChild(attrLabel);\n },\n onDragStart: function (ev) {\n ev.dropEffect = DropEffect.Allow;\n }\n });\n }\n return colDiv;\n };\n EasyGrid.prototype.renderBody = function () {\n var _this = this;\n this.bodyDiv = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-body\"))\n .toDOM();\n this.bodyViewportDiv = domel('div', this.bodyDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-body-viewport\"))\n .attr('tabIndex', '0')\n .toDOM();\n this.bodyCellContainerDiv = domel('div', this.bodyViewportDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-cell-container\"))\n .toDOM();\n var showAggrs = this.canShowAggregates();\n if (this.dataTable) {\n this.showProgress();\n this.rowsOnPagePromise = this.getRowsToRender()\n .then(function (rows) {\n _this.pagination.total = _this.dataTable.getTotal();\n _this.hideProgress();\n //prevent double rendering (bad solution, we have to figure out how to avoid this behavior properly)\n _this.bodyCellContainerDiv.innerHTML = '';\n _this.prevRowTotals = null;\n var rowsToRender = 0;\n if (rows.length) {\n var groups_1 = showAggrs\n ? _this.options.aggregates.settings.getGroups()\n : [];\n rowsToRender = (rows.length < _this.pagination.pageSize)\n ? rows.length\n : _this.pagination.pageSize;\n rows.forEach(function (row, index) {\n if (showAggrs)\n _this.updateTotalsState(groups_1, row);\n //we don't actually render the last row\n if (index < rowsToRender) {\n var tr = _this.renderRow(row, index);\n _this.bodyCellContainerDiv.appendChild(tr);\n }\n });\n var showGrandTotalsOnEachPage = _this.options.aggregates && _this.options.aggregates.showGrandTotalsOnEachPage;\n if (showAggrs && (_this.isLastPage() || showGrandTotalsOnEachPage)) {\n var row = new DataRow(_this.dataTable.columns, new Array(_this.dataTable.columns.count));\n _this.updateTotalsState(groups_1, row, true);\n }\n }\n var needAutoResize = _this.options.columnWidths.autoResize !== AutoResizeColumns.Never;\n if (needAutoResize) {\n _this.resizeColumns();\n }\n else {\n var containerWidth = _this.getContainerWidth();\n domel(_this.bodyCellContainerDiv)\n .setStyle('width', \"\".concat(containerWidth, \"px\"));\n }\n return rowsToRender;\n })\n .catch(function (error) { console.error(error); return 0; });\n }\n this.bodyViewportDiv.addEventListener('scroll', function (ev) {\n domel(_this.headerViewportDiv)\n .setStyle('margin-left', \"-\".concat(_this.bodyViewportDiv.scrollLeft, \"px\"));\n });\n this.bodyViewportDiv.addEventListener('keydown', this.onViewportKeydown.bind(this));\n };\n EasyGrid.prototype.isLastPage = function () {\n if (this.dataTable.elasticChunks) {\n return this.dataTable.totalIsKnown()\n && (this.pagination.page * this.pagination.pageSize) >= this.pagination.total;\n }\n return this.pagination.page * this.pagination.pageSize >= this.pagination.total;\n };\n EasyGrid.prototype.canShowAggregates = function () {\n if (!this.options || !this.options.aggregates || !this.options.aggregates.settings)\n return false;\n var aggrSettings = this.options.aggregates.settings;\n var result = (aggrSettings.hasAggregates() || aggrSettings.hasRecordCount())\n && (aggrSettings.hasGroups() || aggrSettings.hasGrandTotals());\n return result;\n };\n EasyGrid.prototype.updateTotalsState = function (groups, newRow, isLast) {\n if (isLast === void 0) { isLast = false; }\n var aggrSettings = this.options.aggregates.settings;\n if (this.prevRowTotals && aggrSettings.hasGroups()) {\n var changeLevel = -1;\n for (var level = 1; level <= groups.length; level++) {\n var group = groups[level - 1];\n for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n if (!aggrSettings.compareValues(this.prevRowTotals.getValue(col), newRow.getValue(col))) {\n changeLevel = level;\n break;\n }\n }\n if (changeLevel !== -1)\n break;\n }\n if (changeLevel !== -1) {\n for (var level = groups.length; level >= changeLevel; level--) {\n var row = new DataRow(this.dataTable.columns, this.prevRowTotals.toArray());\n var tr = this.renderTotalsRow(level, row);\n this.bodyCellContainerDiv.appendChild(tr);\n }\n }\n }\n if (isLast && aggrSettings.hasGrandTotals() && aggrSettings.hasAggregates()) {\n var tr = this.renderTotalsRow(0, newRow);\n this.bodyCellContainerDiv.appendChild(tr);\n }\n this.prevRowTotals = newRow;\n };\n EasyGrid.prototype.applyGroupColumnTemplate = function (template, value, count) {\n var result = template.replace(/{{\\s*GroupValue\\s*}}/g, value ? \"\".concat(value) : '-');\n result = result.replace(/{{\\s*GroupCount\\s*}}/g, count ? \"\".concat(count) : '-');\n return result;\n };\n EasyGrid.prototype.renderTotalsRow = function (level, row) {\n var _this = this;\n var aggrSettings = this.options.aggregates.settings;\n var group = (level > 0)\n ? aggrSettings.getGroups()[level - 1]\n : { columns: [], aggregates: aggrSettings.getAggregates() };\n var rowBuilder = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-row\"))\n .addClass(\"\".concat(this.cssPrefix, \"-row-totals\"))\n .addClass(\"\".concat(this.cssPrefix, \"-totals-lv\").concat(level))\n .data('totals-level', \"\".concat(level))\n .attr('tabindex', '-1');\n var rowElement = rowBuilder.toDOM();\n this.columns.getItems().forEach(function (column, index) {\n if (!column.isVisible) {\n return;\n }\n var val = '';\n var colIndex = !column.isRowNum\n ? _this.dataTable.columns.getIndex(column.dataColumn.id)\n : -1;\n if (!column.isRowNum && column.dataColumn) {\n if (group.columns.indexOf(column.dataColumn.id) >= 0) {\n val = row.getValue(colIndex);\n }\n ;\n }\n if (colIndex == _this.dataTable.columns.count - 1) {\n val = '. . . . . .';\n }\n rowElement.appendChild(_this.renderCell(column, index, val, rowElement));\n });\n var aggrContainer = this.options.aggregates.calculator.getAggrContainer();\n var aggrCols = aggrSettings.getAggregates().map(function (c) { return c.colId; });\n var key = aggrSettings.buildGroupKey(group, row);\n aggrContainer.getAggregateData(level, key)\n .then(function (values) {\n for (var _i = 0, aggrCols_1 = aggrCols; _i < aggrCols_1.length; _i++) {\n var aggrColId = aggrCols_1[_i];\n row.setValue(aggrColId, values[aggrColId]);\n }\n rowElement.innerHTML = '';\n _this.columns.getItems().forEach(function (column, index) {\n if (!column.isVisible) {\n return;\n }\n var val = '';\n var colIndex = !column.isRowNum\n ? _this.dataTable.columns.getIndex(column.dataColumn.id)\n : -1;\n if (!column.isRowNum) {\n var isLastGroupColumn = false;\n if (column.dataColumn) {\n var groupColIndex = group.columns.indexOf(column.dataColumn.id);\n var aggrColIndex = aggrCols.indexOf(column.dataColumn.id);\n if (level > 0) {\n isLastGroupColumn = groupColIndex == group.columns.length - 1;\n }\n else {\n //if it's a grand total row consider first column as the last group column\n isLastGroupColumn = colIndex == 0;\n }\n if (groupColIndex >= 0 || aggrColIndex >= 0) {\n val = row.getValue(colIndex);\n }\n ;\n }\n var groupFooterTemplate = '';\n if (level > 0) {\n groupFooterTemplate = column.dataColumn.groupFooterColumnTemplate;\n //set the default template for the last grouping column\n if (!groupFooterTemplate && aggrSettings.hasRecordCount() && isLastGroupColumn) {\n groupFooterTemplate = '{{GroupValue}} ({{GroupCount}})';\n }\n }\n if (groupFooterTemplate) {\n var cellDiv_1 = _this.renderCell(column, index, val, rowElement);\n var innerCell = cellDiv_1.firstChild;\n val = innerCell.innerHTML;\n val = _this.applyGroupColumnTemplate(groupFooterTemplate, val, values[aggrSettings.COUNT_FIELD_NAME]);\n }\n }\n var cellDiv = _this.renderCell(column, index, val, rowElement);\n rowElement.appendChild(cellDiv);\n });\n })\n .catch(function (error) { return console.error(error); });\n return rowElement;\n };\n EasyGrid.prototype.onViewportKeydown = function (ev) {\n if (this.options.showActiveRow) {\n var rowCount = this.bodyCellContainerDiv.querySelectorAll(\".\".concat(this.cssPrefix, \"-row\")).length;\n var newValue = void 0;\n switch (ev.key) {\n case 'ArrowLeft':\n break;\n case 'ArrowRight':\n break;\n case 'ArrowUp':\n ev.preventDefault();\n newValue = this.activeRowIndex < 0 || this.activeRowIndex >= rowCount ? rowCount - 1 : this.activeRowIndex - 1;\n this.activeRowIndex = newValue >= 0 ? newValue : 0;\n break;\n case 'ArrowDown':\n ev.preventDefault();\n newValue = this.activeRowIndex < 0 || this.activeRowIndex >= rowCount ? 0 : this.activeRowIndex + 1;\n this.activeRowIndex = newValue < rowCount ? newValue : rowCount - 1;\n break;\n }\n }\n };\n EasyGrid.prototype.ensureRowVisibility = function (rowOrIndex) {\n var row = typeof rowOrIndex === 'number'\n ? this.getDataRow(rowOrIndex)\n : rowOrIndex;\n if (row) {\n var rowRect = row.getBoundingClientRect();\n var viewportRect = this.bodyViewportDiv.getBoundingClientRect();\n var rowTop = rowRect.top - viewportRect.top;\n var rowBottom = rowRect.bottom - viewportRect.top;\n var viewportHeight = this.bodyViewportDiv.clientHeight;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n if (rowTop > 0 &&\n rowBottom <= viewportHeight &&\n rowRect.top > 0 &&\n rowRect.bottom < windowHeight) {\n return;\n }\n if (rowTop < 0) {\n this.bodyViewportDiv.scrollTop = this.bodyViewportDiv.scrollTop + rowTop;\n }\n else if (rowBottom > viewportHeight) {\n this.bodyViewportDiv.scrollTop = this.bodyViewportDiv.scrollTop + rowBottom - viewportHeight;\n }\n rowRect = row.getBoundingClientRect();\n if (rowRect.top < 0) {\n document.documentElement.scrollTop = document.documentElement.scrollTop + rowRect.top;\n }\n else if (rowRect.bottom > windowHeight) {\n document.documentElement.scrollTop = document.documentElement.scrollTop + rowRect.bottom - windowHeight;\n }\n }\n };\n /** Returns a promise with the list of the rows to render on one page.\n * The list contains pageSize+1 row to make it possible\n * to render the totals row (if it appears to be on the edge between pages)\n */\n EasyGrid.prototype.getRowsToRender = function () {\n if (this.options.paging.enabled === false) {\n return Promise.resolve(this.dataTable.getCachedRows());\n }\n return this.dataTable.getRows({\n offset: (this.pagination.page - 1) * this.pagination.pageSize,\n limit: this.pagination.pageSize + 1\n })\n .catch(function (error) {\n console.error(error);\n return [];\n });\n };\n EasyGrid.prototype.renderFooter = function () {\n var _this = this;\n this.footerDiv = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-footer\"))\n .toDOM();\n if (this.rowsOnPagePromise) {\n this.rowsOnPagePromise.then(function (count) {\n _this.footerDiv.innerHTML = '';\n _this.footerPaginateDiv = _this.renderPageNavigator();\n _this.footerDiv.appendChild(_this.footerPaginateDiv);\n var pageInfoBlock = _this.renderPageInfoBlock(count);\n _this.footerDiv.appendChild(pageInfoBlock);\n });\n }\n };\n EasyGrid.prototype.renderPageInfoBlock = function (count) {\n var pageInfoDiv = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-page-info\"))\n .toDOM();\n var rowCount = this.dataTable.getTotal();\n if (rowCount > 0) {\n var fistPageRecordNum = count\n ? (this.pagination.page - 1) * this.pagination.pageSize + 1\n : 0;\n var lastPageRecordNum = count\n ? fistPageRecordNum + count - 1\n : 0;\n var totalStr = this.dataTable.getTotal().toString();\n if (this.dataTable.elasticChunks) {\n var count_1 = this.dataTable.getCachedCount();\n var total = this.dataTable.getTotal();\n if (count_1 !== total)\n totalStr = '?';\n }\n pageInfoDiv.innerHTML = i18n.getText('GridPageInfo')\n .replace('{FirstPageRecordNum}', \"<span>\".concat(fistPageRecordNum.toString(), \"</span>\"))\n .replace('{LastPageRecordNum}', \"<span>\".concat(lastPageRecordNum.toString(), \"</span>\"))\n .replace('{Total}', \"<span>\".concat(totalStr, \"</span>\"));\n }\n return pageInfoDiv;\n };\n EasyGrid.prototype.showProgress = function () {\n };\n EasyGrid.prototype.hideProgress = function () {\n };\n EasyGrid.prototype.getLocalIndexByGlobal = function (index) {\n if (this.pagination) {\n return index % this.pagination.pageSize;\n }\n else {\n return index;\n }\n };\n EasyGrid.prototype.getGlobalIndexByLocal = function (index) {\n if (this.pagination) {\n return (this.pagination.page - 1) * this.pagination.pageSize + index;\n }\n else {\n return index;\n }\n };\n EasyGrid.prototype.renderRow = function (row, index) {\n var _this = this;\n var indexGlobal = this.getGlobalIndexByLocal(index);\n var rowBuilder = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-row\"))\n .addClass(\"\".concat(this.cssPrefix, \"-row-\").concat(index % 2 == 1 ? 'odd' : 'even'))\n .data('row-idx', \"\".concat(indexGlobal))\n .attr('tabindex', '-1')\n .on('click', function (ev) {\n _this.activeRowIndex = index;\n _this.fireEvent({\n type: 'rowClick',\n row: row,\n rowIndex: index,\n sourceEvent: ev\n });\n })\n .on('dblclick', function (ev) {\n _this.fireEvent({\n type: 'rowDbClick',\n row: row,\n rowIndex: index,\n sourceEvent: ev\n });\n });\n if (index == 0) {\n rowBuilder.addClass(\"\".concat(this.cssPrefix, \"-row-first\"));\n }\n var rowElement = rowBuilder.toDOM();\n if (this.options.showActiveRow && index == this.activeRowIndex) {\n rowBuilder.addClass(\"\".concat(this.cssPrefix, \"-row-active\"));\n }\n this.columns.getItems().forEach(function (column, index) {\n if (!column.isVisible) {\n return;\n }\n var colindex = column.isRowNum ? -1 : _this.dataTable.columns.getIndex(column.dataColumn.id);\n var val = column.isRowNum ? indexGlobal + 1 : row.getValue(colindex);\n rowElement.appendChild(_this.renderCell(column, index, val, rowElement));\n });\n return rowElement;\n };\n EasyGrid.prototype.renderCell = function (column, colIndex, value, rowElement) {\n var builder = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-cell\"))\n .data('col-idx', \"\".concat(colIndex))\n .attr('tabindex', '-1')\n .setStyle('width', \"\".concat(column.width, \"px\"));\n if (column.align == GridColumnAlign.LEFT) {\n builder.addClass(\"\".concat(this.cssPrefix, \"-cell-align-left\"));\n }\n else if (column.align == GridColumnAlign.RIGHT) {\n builder.addClass(\"\".concat(this.cssPrefix, \"-cell-align-right\"));\n }\n else if (column.align == GridColumnAlign.CENTER) {\n builder.addClass(\"\".concat(this.cssPrefix, \"-cell-align-center\"));\n }\n var cellElement = builder.toDOM();\n var valueCell = cellElement.appendChild(domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-cell-value\"))\n .toDOM());\n if (column.cellRenderer) {\n column.cellRenderer(value, column, valueCell, rowElement);\n }\n return cellElement;\n };\n /** Sets current grid pages (if paging is used) */\n EasyGrid.prototype.setPage = function (page) {\n this.pagination.page = page;\n this.fireEvent({ type: \"pageChanged\", page: page });\n this.refresh();\n this.bodyViewportDiv.focus();\n };\n EasyGrid.prototype.renderPageNavigator = function () {\n var _this = this;\n var paginateDiv = document.createElement('div');\n paginateDiv.className = \"\".concat(this.cssPrefix, \"-pagination-wrapper\");\n var rowCount = this.dataTable.getTotal();\n if (this.options.paging && this.options.paging.enabled && rowCount > 0) {\n var prefix_1 = this.paginationOptions.useBootstrap ? '' : \"\".concat(this.cssPrefix, \"-\");\n var buttonClickHandler_1 = function (ev) {\n var element = ev.target;\n if (element.hasAttribute('data-page')) {\n var page = parseInt(element.getAttribute('data-page'));\n _this.setPage(page);\n }\n };\n var renderPageCell = function (pageIndex, content, disabled, extreme, active) {\n var li = document.createElement('li');\n li.className = \"\".concat(prefix_1, \"page-item\");\n if (!extreme) {\n if (active) {\n li.className += ' active';\n }\n var a_1 = document.createElement('a');\n a_1.setAttribute('href', 'javascript:void(0)');\n a_1.innerHTML = content || pageIndex.toString();\n a_1.setAttribute(\"data-page\", \"\".concat(pageIndex));\n a_1.className = \"\".concat(prefix_1, \"page-link\");\n a_1.addEventListener(\"click\", buttonClickHandler_1);\n li.appendChild(a_1);\n return li;\n }\n var a = document.createElement('span');\n a.setAttribute('aria-hidden', 'true');\n a.className = \"\".concat(prefix_1, \"page-link\");\n if (disabled) {\n li.className += ' disabled';\n }\n else {\n if (_this.paginationOptions.useBootstrap) {\n a = document.createElement('a');\n a.setAttribute('href', 'javascript:void(0)');\n a.setAttribute(\"data-page\", \"\".concat(pageIndex));\n }\n else {\n var newA = document.createElement('a');\n newA.setAttribute('href', 'javascript:void(0)');\n newA.setAttribute('data-page', \"\".concat(pageIndex));\n a = newA;\n }\n a.className = \"\".concat(prefix_1, \"page-link\");\n a.addEventListener(\"click\", buttonClickHandler_1);\n }\n a.innerHTML = content;\n li.appendChild(a);\n return li;\n };\n if (this.dataTable.elasticChunks) {\n var pageIndex = this.pagination.page || 1;\n var ul = document.createElement('ul');\n ul.className = \"\".concat(prefix_1, \"pagination\");\n var cell = renderPageCell(pageIndex - 1, '«', pageIndex == 1, true, false);\n ul.appendChild(cell);\n cell = renderPageCell(pageIndex + 1, '»', this.isLastPage(), true, false);\n ul.appendChild(cell);\n paginateDiv.appendChild(ul);\n }\n else {\n if (this.pagination.total > this.pagination.pageSize) {\n var pageIndex = this.pagination.page || 1;\n var pageCount = Math.ceil(this.pagination.total / this.pagination.pageSize) || 1;\n var maxButtonCount = this.paginationOptions.maxButtonCount || 10;\n var zeroBasedIndex = pageIndex - 1;\n var firstPageIndex = zeroBasedIndex - (zeroBasedIndex % maxButtonCount) + 1;\n var lastPageIndex = firstPageIndex + maxButtonCount - 1;\n if (lastPageIndex > pageCount) {\n lastPageIndex = pageCount;\n }\n var ul = document.createElement('ul');\n ul.className = \"\".concat(prefix_1, \"pagination\");\n var cell = renderPageCell(firstPageIndex - 1, '«', firstPageIndex == 1, true, false);\n ul.appendChild(cell);\n for (var i = firstPageIndex; i <= lastPageIndex; i++) {\n cell = renderPageCell(i, i.toString(), false, false, i == pageIndex);\n ul.appendChild(cell);\n }\n cell = renderPageCell(lastPageIndex + 1, '»', lastPageIndex == pageCount, true, false);\n ul.appendChild(cell);\n paginateDiv.appendChild(ul);\n }\n }\n if (this.options.paging.allowPageSizeChange) {\n var selectChangeHandler = function (ev) {\n var newValue = parseInt(ev.target.value);\n _this.pagination.pageSize = newValue;\n _this.pagination.page = 1;\n _this.refresh();\n };\n var pageSizes = document.createElement('div');\n pageSizes.className = \"\".concat(this.cssPrefix, \"-page-sizes\");\n var selectSize = document.createElement('div');\n selectSize.className = \"kfrm-select \".concat(this.cssPrefix, \"-page-sizes-select\");\n pageSizes.appendChild(selectSize);\n var sel_1 = document.createElement('select');\n var selOptions = this.options.paging.pageSizeItems || [];\n var selSet = new Set(selOptions);\n selSet.add(this.options.paging.pageSize || 20);\n Array.from(selSet).forEach(function (el) {\n var option = document.createElement(\"option\");\n option.value = el.toString();\n option.text = el.toString();\n sel_1.appendChild(option);\n });\n sel_1.value = (this.pagination.pageSize || 20).toString();\n selectSize.appendChild(sel_1);\n sel_1.addEventListener('change', selectChangeHandler);\n var labelDiv = document.createElement('div');\n labelDiv.className = \"\".concat(this.cssPrefix, \"-page-sizes-label\");\n pageSizes.appendChild(labelDiv);\n var label = document.createElement('span');\n label.innerText = i18n.getText('GridItemsPerPage');\n labelDiv.appendChild(label);\n paginateDiv.appendChild(pageSizes);\n }\n }\n return paginateDiv;\n };\n EasyGrid.prototype.addEventListener = function (eventType, handler) {\n return this.eventEmitter.subscribe(eventType, function (event) { return handler(event.data); });\n };\n EasyGrid.prototype.removeEventListener = function (eventType, handlerId) {\n this.eventEmitter.unsubscribe(eventType, handlerId);\n };\n EasyGrid.prototype.renderHeaderButtons = function () {\n var _this = this;\n if (this.options.showPlusButton) {\n return domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-header-btn-plus\"))\n .title(this.options.plusButtonTitle || 'Add')\n .addChild('a', function (builder) { return builder\n .attr('href', 'javascript:void(0)')\n .on('click', function (e) {\n e.preventDefault();\n _this.fireEvent({\n type: 'plusButtonClick',\n sourceEvent: e\n });\n }); })\n .toDOM();\n }\n return domel('span')\n .addText('#')\n .toDOM();\n };\n EasyGrid.prototype.showLandingSlot = function (pageX, pageY) {\n var colElems = this.headerRowDiv.querySelectorAll(\"[class*=\".concat(this.cssPrefix, \"-table-col]\"));\n var cols = [];\n for (var i = 1; i < colElems.length; i++) {\n var rowElem = colElems[i];\n if (rowElem.style.display === 'none')\n continue;\n cols.push(rowElem);\n }\n if (cols.length === 0) {\n this.landingIndex = 0;\n this.headerRowDiv.appendChild(this.landingSlot);\n return;\n }\n var landingPos = getElementAbsolutePos(this.landingSlot);\n if (pageX >= landingPos.x && pageX <= landingPos.x + this.landingSlot.offsetWidth) {\n return;\n }\n var newLandingIndex = this.landingIndex;\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\n var col = cols_1[_i];\n var colPos = getElementAbsolutePos(col);\n var width = col.offsetWidth;\n if (pageX > colPos.x && pageX < colPos.x + width) {\n // -1 as we don't need to count add button here\n newLandingIndex = parseInt(col.getAttribute('data-col-idx')) - 1;\n }\n }\n if (newLandingIndex != this.landingIndex) {\n this.landingIndex = newLandingIndex;\n if (this.landingIndex < cols.length) {\n this.headerRowDiv.insertBefore(this.landingSlot, cols[this.landingIndex]);\n }\n else {\n this.headerRowDiv.appendChild(this.landingSlot);\n }\n }\n };\n EasyGrid.prototype.hideLandingSlot = function () {\n var _this = this;\n this.landingIndex = -1;\n setTimeout(function () {\n if (_this.landingSlot.parentElement) {\n _this.landingSlot.parentElement.removeChild(_this.landingSlot);\n }\n }, 10);\n };\n Object.defineProperty(EasyGrid.prototype, \"activeRowIndex\", {\n get: function () {\n return this._activeRowIndex;\n },\n set: function (value) {\n if (value !== this._activeRowIndex) {\n var oldValue = this._activeRowIndex;\n this._activeRowIndex = value;\n this.updateActiveRow();\n this.fireEvent({\n type: 'activeRowChanged',\n oldValue: oldValue,\n newValue: this.activeRowIndex,\n rowIndex: this.getGlobalIndexByLocal(this.activeRowIndex)\n });\n }\n },\n enumerable: false,\n configurable: true\n });\n EasyGrid.prototype.updateActiveRow = function () {\n var _this = this;\n if (this.options.showActiveRow) {\n var rows = this.bodyCellContainerDiv.querySelectorAll(\"[class*=\".concat(this.cssPrefix, \"-row-active]\"));\n rows.forEach(function (el) { el.classList.remove(\"\".concat(_this.cssPrefix, \"-row-active\")); });\n var activeRow = this.getActiveRow();\n if (activeRow) {\n activeRow.classList.add(\"\".concat(this.cssPrefix, \"-row-active\"));\n this.ensureRowVisibility(this.activeRowIndex);\n }\n }\n };\n EasyGrid.prototype.getActiveRow = function () {\n return this.getDataRow(this.activeRowIndex);\n };\n EasyGrid.prototype.getDataRow = function (index) {\n var rows = Array.from(this.bodyCellContainerDiv.querySelectorAll(\".\".concat(this.cssPrefix, \"-row:not(.\").concat(this.cssPrefix, \"-row-totals)\")));\n if (index >= 0 && index < rows.length)\n return rows[index];\n return null;\n };\n /** Makes the grid focused for keyboard events */\n EasyGrid.prototype.focus = function () {\n this.bodyViewportDiv.focus();\n };\n /** Resizes columns according to the data they represent */\n EasyGrid.prototype.resizeColumns = function () {\n if (this.options.columnWidths.autoResize === AutoResizeColumns.Never)\n return;\n var containerWidth = this.bodyCellContainerDiv.style.width;\n this.bodyCellContainerDiv.style.visibility = 'hidden';\n this.bodyCellContainerDiv.style.width = '1px';\n //this.headerRowDiv.style.visibility = 'hidden';\n this.headerRowDiv.style.width = '1px';\n var sumWidth = 0;\n var columns = this.columns.getItems();\n var headerCells = this.headerCellContainerDiv.querySelectorAll(\".\".concat(this.cssPrefix, \"-header-cell\"));\n var headerIdx = 0;\n var _loop_1 = function (idx) {\n var column = columns[idx];\n if (!column.isVisible)\n return \"continue\";\n var calculatedWidth = this_1.options.columnWidths.autoResize !== AutoResizeColumns.Always && column.dataColumn\n ? column.dataColumn.calculatedWidth\n : 0;\n var cellValues = this_1.bodyCellContainerDiv.querySelectorAll(\".\".concat(this_1.cssPrefix, \"-cell[data-col-idx=\\\"\").concat(idx, \"\\\"] > .\").concat(this_1.cssPrefix, \"-cell-value\"));\n var maxWidth = 0;\n if (calculatedWidth > 0) {\n sumWidth += calculatedWidth;\n column.width = calculatedWidth;\n cellValues.forEach(function (value) {\n value.parentElement.style.width = \"\".concat(calculatedWidth, \"px\");\n });\n headerCells[headerIdx].style.width = \"\".concat(calculatedWidth, \"px\");\n }\n else {\n if (cellValues.length == 0) {\n headerCells[headerIdx].style.width = null;\n headerCells[headerIdx].style.whiteSpace = 'nowrap';\n }\n maxWidth = headerCells[headerIdx].offsetWidth;\n if (cellValues.length > 0) {\n cellValues.forEach(function (value) {\n value.parentElement.style.width = null;\n var width = value.parentElement.offsetWidth;\n if (width > maxWidth) {\n maxWidth = width;\n }\n });\n maxWidth += 3;\n var maxOption = column.isRowNum\n ? this_1.options.columnWidths.rowNumColumn.max || 500\n : this_1.options.columnWidths[column.dataColumn.type].max || 2000;\n var minOption = column.isRowNum\n ? this_1.options.columnWidths.rowNumColumn.min || 0\n : this_1.options.columnWidths[column.dataColumn.type].min || 20;\n if (maxWidth > maxOption) {\n maxWidth = maxOption;\n }\n if (maxWidth < minOption) {\n maxWidth = minOption;\n }\n if (utils.isNumericType(column.type)) {\n //increase the calculated width in 1.3 times for numeric columns\n maxWidth = Math.round(maxWidth * 1.3);\n }\n sumWidth += maxWidth;\n column.width = maxWidth;\n cellValues.forEach(function (value) {\n value.parentElement.style.width = \"\".concat(maxWidth, \"px\");\n });\n headerCells[headerIdx].style.width = \"\".concat(maxWidth, \"px\");\n if (column.dataColumn) {\n column.dataColumn.calculatedWidth = maxWidth;\n }\n }\n else {\n sumWidth += maxWidth;\n }\n }\n headerIdx++;\n };\n var this_1 = this;\n for (var idx = 0; idx < this.columns.count; idx++) {\n _loop_1(idx);\n }\n if (sumWidth > 0) {\n this.bodyCellContainerDiv.style.width = \"\".concat(sumWidth, \"px\");\n this.headerCellContainerDiv.style.width = \"\".concat(sumWidth, \"px\");\n }\n else {\n this.bodyCellContainerDiv.style.width = containerWidth;\n this.headerCellContainerDiv.style.width = containerWidth;\n }\n this.bodyCellContainerDiv.style.visibility = null;\n this.headerRowDiv.removeAttribute('style');\n };\n return EasyGrid;\n}());\nexport { EasyGrid };\n//# sourceMappingURL=easy_grid.js.map","var Calendar = /** @class */ (function () {\n function Calendar(slot, options) {\n this.slot = slot;\n this.options = options || {};\n if (!this.options.yearRange) {\n this.options.yearRange = 'c-10:c+10';\n }\n }\n Object.defineProperty(Calendar.prototype, \"cssPrefix\", {\n get: function () {\n return 'kdtp-cal';\n },\n enumerable: false,\n configurable: true\n });\n Calendar.prototype.setDate = function (date) {\n this.currentDate = new Date(date);\n };\n Calendar.prototype.getDate = function () {\n return new Date(this.currentDate);\n };\n Calendar.prototype.dateChanged = function (apply) {\n if (this.options.onDateChanged) {\n this.options.onDateChanged(this.currentDate, apply);\n }\n };\n return Calendar;\n}());\nexport { Calendar };\n//# sourceMappingURL=calendar.js.map","import { getElementAbsolutePos } from '../utils/ui-utils';\nvar DateTimePicker = /** @class */ (function () {\n function DateTimePicker(options) {\n this.calendar = null;\n this.timePicker = null;\n this.options = options;\n this.render();\n }\n Object.defineProperty(DateTimePicker.prototype, \"cssPrefix\", {\n get: function () {\n return 'kdtp';\n },\n enumerable: false,\n configurable: true\n });\n DateTimePicker.prototype.setDateTime = function (dateTime) {\n this.currentDateTime = new Date(dateTime);\n if (this.calendar) {\n this.calendar.setDate(this.currentDateTime);\n }\n if (this.timePicker) {\n this.timePicker.setTime(this.currentDateTime);\n }\n };\n DateTimePicker.prototype.getDateTime = function () {\n return new Date(this.currentDateTime);\n };\n DateTimePicker.prototype.render = function () {\n var _this = this;\n if (this.options.showCalendar) {\n this.calendar = this.createCalendar({\n yearRange: this.options.yearRange,\n showDateTimeInput: this.options.showDateTimeInput,\n timePickerIsUsed: this.options.showTimePicker,\n oneClickDateSelection: this.options.oneClickDateSelection,\n onDateChanged: function (date, apply) {\n _this.currentDateTime = date;\n if (_this.timePicker) {\n _this.timePicker.setTime(_this.currentDateTime);\n }\n if (_this.options.showTimePicker) {\n _this.dateTimeChanged();\n }\n if (apply) {\n _this.apply(_this.currentDateTime);\n }\n }\n });\n if (this.calendar)\n this.calendar.render();\n }\n if (this.options.showTimePicker) {\n this.timePicker = this.createTimePicker({\n onTimeChanged: function (time) {\n _this.currentDateTime.setHours(time.getHours());\n _this.currentDateTime.setMinutes(time.getMinutes());\n if (_this.calendar) {\n _this.calendar.setDate(_this.currentDateTime);\n }\n _this.dateTimeChanged();\n }\n });\n if (this.timePicker)\n this.timePicker.render();\n }\n this.setDateTime(new Date());\n };\n DateTimePicker.prototype.createCalendar = function (options) {\n return null;\n };\n DateTimePicker.prototype.createTimePicker = function (options) {\n return null;\n };\n DateTimePicker.prototype.show = function (anchor) {\n if (this.options.beforeShow) {\n this.options.beforeShow();\n }\n var pos = getElementAbsolutePos(anchor || document.body);\n this.slot.style.top = pos.y + anchor.clientHeight + 'px';\n this.slot.style.left = pos.x + 'px';\n };\n DateTimePicker.prototype.apply = function (date) {\n if (this.options.onApply) {\n this.options.onApply(date);\n }\n this.destroy();\n };\n DateTimePicker.prototype.cancel = function () {\n if (this.options.onCancel) {\n this.options.onCancel();\n }\n this.destroy();\n };\n DateTimePicker.prototype.destroy = function () {\n if (this.slot && this.slot.parentElement) {\n this.slot.parentElement.removeChild(this.slot);\n }\n };\n DateTimePicker.prototype.dateTimeChanged = function () {\n if (this.options.onDateTimeChanged) {\n this.options.onDateTimeChanged(this.currentDateTime);\n }\n };\n return DateTimePicker;\n}());\nexport { DateTimePicker };\n//# sourceMappingURL=date_time_picker.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { i18n, utils as dataUtils } from '@easydata/core';\nimport { domel } from '../utils/dom_elem_builder';\nimport { Calendar } from './calendar';\nvar DefaultCalendar = /** @class */ (function (_super) {\n __extends(DefaultCalendar, _super);\n function DefaultCalendar(slot, options) {\n var _this = _super.call(this, slot, options) || this;\n _this.daysOfWeek = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n _this.months = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n _this.calendarBody = null;\n _this.isManualInputChanging = false;\n for (var i = 0; i < _this.daysOfWeek.length; i++) {\n _this.daysOfWeek[i] = i18n.getShortWeekDayName(i + 1);\n }\n for (var i = 0; i < _this.months.length; i++) {\n _this.months[i] = i18n.getLongMonthName(i + 1);\n }\n return _this;\n }\n DefaultCalendar.prototype.setDate = function (date) {\n _super.prototype.setDate.call(this, date);\n this.selectedMonth = this.currentDate.getMonth();\n this.selectedYear = this.currentDate.getFullYear();\n this.rerenderMonth();\n };\n DefaultCalendar.prototype.render = function () {\n var _this = this;\n var header = domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-header\"));\n if (this.options.showDateTimeInput) {\n header\n .addChildElement(this.renderManualDateInput());\n }\n else {\n header\n .addChild('span', function (builder) { return _this.headerTextElem = builder.toDOM(); });\n }\n domel(this.slot)\n .addChildElement(this.renderCalendarButtons());\n this.calendarBody = domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-body\"))\n .toDOM();\n };\n DefaultCalendar.prototype.getInputDateFormat = function () {\n var settings = i18n.getLocaleSettings();\n return (this.options.timePickerIsUsed)\n ? \"\".concat(settings.editDateFormat, \" \").concat(settings.editTimeFormat)\n : settings.editDateFormat;\n };\n DefaultCalendar.prototype.renderManualDateInput = function () {\n var _this = this;\n var format = this.getInputDateFormat();\n var builder = domel('input')\n .attr('placeholder', format)\n .addClass(\"\".concat(this.cssPrefix, \"-header-input\"));\n builder\n .mask(format.replace('yyyy', '9999')\n .replace('MM', '99')\n .replace('dd', '99')\n .replace('HH', '99')\n .replace('mm', '99')\n .replace('ss', '99'))\n .on('input', function (ev) {\n builder.removeClass('error');\n try {\n _this.isManualInputChanging = true;\n var newDate = dataUtils.strToDateTime(_this.manualInputElem.value, format);\n _this.currentDate = newDate;\n _this.jump(_this.currentDate.getFullYear(), _this.currentDate.getMonth());\n _this.dateChanged(false);\n }\n catch (e) {\n builder.addClass('error');\n }\n finally {\n _this.isManualInputChanging = false;\n }\n })\n .on('keydown', function (ev) {\n if (ev.keyCode === 13) {\n ev.preventDefault();\n ev.stopPropagation();\n if (_this.manualInputElem.className.indexOf('error') < 0\n && !_this.isManualInputChanging)\n _this.dateChanged(true);\n }\n })\n .on('focus', function () {\n setTimeout(function () {\n _this.manualInputElem.selectionStart = 0;\n _this.manualInputElem.selectionEnd = 0;\n }, 50);\n });\n this.manualInputElem = builder.toDOM();\n return this.manualInputElem;\n };\n DefaultCalendar.prototype.updateDisplayedDateValue = function () {\n if (this.manualInputElem) {\n if (!this.isManualInputChanging) {\n var format = this.getInputDateFormat();\n this.manualInputElem.value = dataUtils.dateTimeToStr(this.currentDate, format);\n this.manualInputElem.focus();\n }\n }\n else if (this.headerTextElem) {\n var locale = i18n.getCurrentLocale();\n this.headerTextElem.innerText = this.currentDate.toLocaleString(locale == 'en' ? undefined : locale, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n }\n };\n DefaultCalendar.prototype.renderCalendarButtons = function () {\n var _this = this;\n var builder = domel('nav')\n .addClass(\"\".concat(this.cssPrefix, \"-nav\"))\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-nav-prev\"))\n .on('click', function () {\n _this.prev();\n })\n .addChild('span', function (builder) { return builder.html('‹'); }); })\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-nav-selectors\"))\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-nav-month\"))\n .addChild('select', function (builder) {\n builder\n .on('change', function () {\n _this.jump(_this.selectedYear, parseInt(_this.selectMonthElem.value));\n });\n var _loop_1 = function (i) {\n builder.addChild('option', function (builder) { return builder\n .attr('value', i.toString())\n .text(_this.months[i]); });\n };\n for (var i = 0; i < _this.months.length; i++) {\n _loop_1(i);\n }\n _this.selectMonthElem = builder.toDOM();\n }); })\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-nav-year\"))\n .addChild('select', function (builder) { return _this.selectYearElem = builder\n .on('change', function () {\n _this.jump(parseInt(_this.selectYearElem.value), _this.selectedMonth);\n })\n .toDOM(); }); }); })\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-nav-next\"))\n .on('click', function () {\n _this.next();\n })\n .addChild('span', function (builder) { return builder.html('›'); }); });\n return builder.toDOM();\n };\n DefaultCalendar.prototype.prev = function () {\n this.selectedYear = (this.selectedMonth === 0) ? this.selectedYear - 1 : this.selectedYear;\n this.selectedMonth = (this.selectedMonth === 0) ? 11 : this.selectedMonth - 1;\n this.rerenderMonth();\n };\n DefaultCalendar.prototype.next = function () {\n this.selectedYear = (this.selectedMonth === 11) ? this.selectedYear + 1 : this.selectedYear;\n this.selectedMonth = (this.selectedMonth + 1) % 12;\n this.rerenderMonth();\n };\n DefaultCalendar.prototype.rerenderSelectYear = function () {\n var match = /c-(\\d*):c\\+(\\d*)/g.exec(this.options.yearRange);\n var minusYear = 0;\n var plusYear = 1;\n if (match !== null) {\n minusYear = parseInt(match[1]);\n plusYear = parseInt(match[2]);\n }\n this.selectYearElem.innerHTML = '';\n for (var i = 0; i <= minusYear + plusYear; i++) {\n var op = document.createElement(\"option\");\n var year = this.selectedYear - minusYear + i;\n op.value = year.toString();\n op.innerText = year.toString();\n this.selectYearElem.appendChild(op);\n }\n };\n DefaultCalendar.prototype.jump = function (year, month) {\n this.selectedYear = year;\n this.selectedMonth = month;\n this.rerenderMonth();\n };\n DefaultCalendar.prototype.rerenderMonth = function () {\n var _this = this;\n //header text\n this.updateDisplayedDateValue();\n this.rerenderSelectYear();\n var firstDay = (new Date(this.selectedYear, this.selectedMonth)).getDay();\n var daysInMonth = new Date(this.selectedYear, this.selectedMonth + 1, 0).getDate();\n this.calendarBody.innerHTML = \"\";\n this.selectYearElem.value = this.selectedYear.toString();\n this.selectMonthElem.value = this.selectedMonth.toString();\n this.daysOfWeek.forEach(function (day, idx) {\n domel('div', _this.calendarBody)\n .addClass(\"\".concat(_this.cssPrefix, \"-weekday\"))\n .addClass(idx == 0 || idx == 6 ? \"\".concat(_this.cssPrefix, \"-weekend\") : '')\n .text(day);\n });\n // Add empty cells before first day\n for (var i = 0; i < firstDay; i++) {\n domel('div', this.calendarBody)\n .addClass(\"\".concat(this.cssPrefix, \"-day-empty\"));\n }\n // Add all month days\n var today = new Date();\n for (var day = 1; day <= daysInMonth; day++) {\n var builder = domel('div', this.calendarBody)\n .addClass(\"\".concat(this.cssPrefix, \"-day\"))\n .attr('data-date', day.toString())\n .text(day.toString())\n .on('click', function (e) {\n _this.currentDate.setFullYear(_this.selectedYear);\n _this.currentDate.setMonth(_this.selectedMonth);\n _this.currentDate.setDate(parseInt(e.target.getAttribute('data-date')));\n _this.dateChanged(_this.options.oneClickDateSelection);\n });\n if (day === today.getDate() && this.selectedYear === today.getFullYear() && this.selectedMonth === today.getMonth()) {\n builder.addClass(\"\".concat(this.cssPrefix, \"-day-current\"));\n }\n if (day === this.currentDate.getDate() && this.selectedYear === this.currentDate.getFullYear() && this.selectedMonth === this.currentDate.getMonth()) {\n builder.addClass(\"\".concat(this.cssPrefix, \"-day-selected\"));\n }\n var dayOfWeek = (firstDay + day - 1) % 7;\n if (dayOfWeek == 0 || dayOfWeek == 6) {\n builder.addClass(\"\".concat(this.cssPrefix, \"-weekend\"));\n }\n }\n // Add empty cells after last day\n var cellsDrawnInLastRow = (firstDay + daysInMonth) % 7;\n var cellsToDraw = cellsDrawnInLastRow == 0 ? 0 : 7 - cellsDrawnInLastRow;\n for (var i = 0; i < cellsToDraw; i++) {\n domel('div', this.calendarBody)\n .addClass(\"\".concat(this.cssPrefix, \"-day-empty\"));\n }\n };\n DefaultCalendar.prototype.dateChanged = function (apply) {\n _super.prototype.dateChanged.call(this, apply);\n this.rerenderMonth();\n };\n return DefaultCalendar;\n}(Calendar));\nexport { DefaultCalendar };\n//# sourceMappingURL=default_calendar.js.map","var TimePicker = /** @class */ (function () {\n function TimePicker(slot, options) {\n this.slot = slot;\n this.options = options || {};\n }\n Object.defineProperty(TimePicker.prototype, \"cssPrefix\", {\n get: function () {\n return 'kdtp-tp';\n },\n enumerable: false,\n configurable: true\n });\n TimePicker.prototype.setTime = function (time) {\n this.currentTime = new Date(time);\n };\n TimePicker.prototype.getTime = function () {\n return new Date(this.currentTime);\n };\n TimePicker.prototype.timeChanged = function () {\n if (this.options.onTimeChanged) {\n this.options.onTimeChanged(this.currentTime);\n }\n };\n return TimePicker;\n}());\nexport { TimePicker };\n//# sourceMappingURL=time_picker.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { i18n } from '@easydata/core';\nimport { domel } from '../utils/dom_elem_builder';\nimport { TimePicker } from './time_picker';\nvar DefaultTimePicker = /** @class */ (function (_super) {\n __extends(DefaultTimePicker, _super);\n function DefaultTimePicker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DefaultTimePicker.prototype.setTime = function (time) {\n _super.prototype.setTime.call(this, time);\n this.updateDisplayedTime();\n this.hoursInput.valueAsNumber = time.getHours();\n this.minutesInput.valueAsNumber = time.getMinutes();\n };\n DefaultTimePicker.prototype.render = function () {\n var _this = this;\n domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-time\"))\n .addChild('span', function (builder) { return _this.timeText = builder.toDOM(); })\n .toDOM();\n var slidersBuilder = domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-sliders\"));\n slidersBuilder\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-time-row\"))\n .title('Hours')\n .addChild('input', function (builder) { return _this.hoursInput = builder\n .addClass(\"\".concat(_this.cssPrefix, \"-input-hours\"))\n .type('range')\n .attr('min', '0')\n .attr('max', '23')\n .attr('step', '1')\n .on('input', function (e) {\n _this.currentTime.setHours(_this.hoursInput.valueAsNumber);\n _this.updateDisplayedTime();\n _this.timeChanged();\n })\n .toDOM(); }); });\n slidersBuilder\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-time-row\"))\n .title('Minutes')\n .addChild('input', function (builder) { return _this.minutesInput = builder\n .addClass(\"\".concat(_this.cssPrefix, \"-input-minutes\"))\n .type('range')\n .attr('min', '0')\n .attr('max', '59')\n .attr('step', '1')\n .on('input', function (e) {\n _this.currentTime.setMinutes(_this.minutesInput.valueAsNumber);\n _this.updateDisplayedTime();\n _this.timeChanged();\n })\n .toDOM(); }); });\n return this.slot;\n };\n DefaultTimePicker.prototype.updateDisplayedTime = function () {\n var locale = i18n.getCurrentLocale();\n var timeToDraw = this.currentTime.toLocaleString(locale == 'en' ? undefined : locale, {\n hour: \"numeric\",\n minute: \"numeric\"\n });\n this.timeText.innerText = timeToDraw;\n };\n return DefaultTimePicker;\n}(TimePicker));\nexport { DefaultTimePicker };\n//# sourceMappingURL=default_time_picker.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { i18n } from '@easydata/core';\nimport { domel } from '../utils/dom_elem_builder';\nimport { DateTimePicker } from './date_time_picker';\nimport { DefaultCalendar } from './default_calendar';\nimport { DefaultTimePicker } from './default_time_picker';\nimport { getElementAbsolutePos } from '../utils/ui-utils';\nvar DefaultDateTimePicker = /** @class */ (function (_super) {\n __extends(DefaultDateTimePicker, _super);\n function DefaultDateTimePicker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DefaultDateTimePicker.prototype.render = function () {\n var _this = this;\n var sb = domel('div', document.body)\n .addClass(\"\".concat(this.cssPrefix))\n .attr('tabIndex', '0')\n .setStyle('position', 'absolute')\n .setStyle('top', '-1000px')\n .setStyle('left', '-1000px')\n .on('keydown', function (ev) {\n if (ev.keyCode === 27) { // ESC is pressed\n _this.cancel();\n }\n else if (ev.keyCode === 13) { // Enter is pressed\n _this.apply(_this.getDateTime());\n }\n return false;\n });\n if (this.options.zIndex) {\n sb.setStyle('z-index', \"\".concat(this.options.zIndex));\n }\n this.slot = sb.toDOM();\n _super.prototype.render.call(this);\n this.renderButtons();\n this.globalMouseDownHandler = function (e) {\n var event = window.event || e;\n var o = event.srcElement || event.target;\n var isOutside = !_this.slot.contains(event.target);\n if (isOutside) {\n document.removeEventListener('mousedown', _this.globalMouseDownHandler, true);\n _this.cancel();\n }\n return true;\n };\n };\n DefaultDateTimePicker.prototype.renderButtons = function () {\n var _this = this;\n var builder = domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-buttons\"))\n .addChild('button', function (b) { return _this.nowButton = b\n .addClass(\"\".concat(_this.cssPrefix, \"-button \").concat(_this.cssPrefix, \"-button-now\"))\n .text(i18n.getText('ButtonNow'))\n .on('click', function () {\n _this.setDateTime(new Date());\n _this.dateTimeChanged();\n return false;\n })\n .toDOM(); });\n if (this.options.showTimePicker || !this.options.oneClickDateSelection) {\n builder.addChild('button', function (b) { return _this.submitButton = b\n .addClass(\"\".concat(_this.cssPrefix, \"-button \").concat(_this.cssPrefix, \"-button-apply\"))\n .text(i18n.getText('ButtonApply'))\n .on('click', function () {\n _this.apply(_this.getDateTime());\n return false;\n })\n .toDOM(); });\n }\n builder.addChild('button', function (b) { return _this.submitButton = b\n .addClass(\"\".concat(_this.cssPrefix, \"-button \").concat(_this.cssPrefix, \"-button-cancel\"))\n .text(i18n.getText('ButtonCancel'))\n .on('click', function () {\n _this.cancel();\n return false;\n })\n .toDOM(); });\n };\n DefaultDateTimePicker.prototype.createCalendar = function (options) {\n this.calendarSlot =\n domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-cal\"))\n .toDOM();\n return new DefaultCalendar(this.calendarSlot, options);\n };\n DefaultDateTimePicker.prototype.createTimePicker = function (options) {\n this.timePickerSlot =\n domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-tp\"))\n .toDOM();\n return new DefaultTimePicker(this.timePickerSlot, options);\n };\n DefaultDateTimePicker.prototype.show = function (anchor) {\n var _this = this;\n if (this.options.showDateTimeInput) {\n if (this.options.beforeShow) {\n this.options.beforeShow();\n }\n var anchorPos = getElementAbsolutePos(anchor || document.body);\n var parentPos = getElementAbsolutePos(anchor ? anchor.parentElement || anchor : document.body);\n this.slot.style.top = parentPos.y + 'px';\n this.slot.style.left = anchorPos.x + 'px';\n }\n else {\n _super.prototype.show.call(this, anchor);\n this.slot.focus();\n }\n setTimeout(function () {\n document.addEventListener('mousedown', _this.globalMouseDownHandler, true);\n }, 1);\n };\n return DefaultDateTimePicker;\n}(DateTimePicker));\nexport { DefaultDateTimePicker };\n//# sourceMappingURL=default_date_time_picker.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { i18n, utils, liquid } from '@easydata/core';\nimport { DialogFooterAlignment } from './dialog_service';\nimport { domel } from '../utils/dom_elem_builder';\nvar cssPrefix = \"kdlg\";\nexport var DefaultDialogService = /** @class */ (function () {\n function DefaultDialogService() {\n }\n DefaultDialogService.prototype.openConfirm = function (title, content, callback) {\n var _this = this;\n var template = \"<div id=\\\"\".concat(cssPrefix, \"-dialog-confirm\\\">\").concat(content, \"</div>\");\n var options = {\n title: title,\n closable: false,\n submitable: true,\n cancelable: true,\n body: template\n };\n if (callback) {\n options.onSubmit = function () {\n callback(true);\n };\n options.onCancel = function () {\n callback(false);\n };\n this.open(options);\n return;\n }\n return new Promise(function (resolve) {\n options.onSubmit = function () {\n resolve(true);\n };\n options.onCancel = function () {\n resolve(false);\n };\n _this.open(options);\n });\n };\n DefaultDialogService.prototype.openPrompt = function (title, content, defVal, callback) {\n var _this = this;\n var template = \"<div id=\\\"\".concat(cssPrefix, \"-dialog-form\\\" class=\\\"kfrm-form\\\">\\n <div class=\\\"kfrm-fields label-above\\\">\\n <label for=\\\"\").concat(cssPrefix, \"-dialog-form-input\\\" id=\\\"\").concat(cssPrefix, \"-dialog-form-content\\\">\").concat(content, \"</label>\\n <input type=\\\"text\\\" name=\\\"\").concat(cssPrefix, \"-dialog-form-input\\\" id=\\\"\").concat(cssPrefix, \"-dialog-form-input\\\" />\\n </div>\\n </div>\");\n var options = {\n title: title,\n submitable: true,\n closable: true,\n cancelable: true,\n submitOnEnter: true,\n body: template,\n arrangeParents: false,\n beforeOpen: function () {\n var input = document.getElementById(\"\".concat(cssPrefix, \"-dialog-form-input\"));\n if (defVal) {\n input.value = defVal;\n }\n input.focus();\n }\n };\n var processInput = function (callback) {\n var input = document.getElementById(\"\".concat(cssPrefix, \"-dialog-form-input\"));\n var result = input.value;\n if (result && result.replace(/\\s/g, '').length > 0) {\n callback(result);\n return true;\n }\n input.classList.add('eqjs-invalid');\n return false;\n };\n if (callback) {\n options.onSubmit = function () {\n return processInput(callback);\n };\n options.onCancel = function () {\n callback(\"\");\n };\n this.open(options);\n return;\n }\n return new Promise(function (resolve) {\n options.onSubmit = function () {\n return processInput(resolve);\n };\n options.onCancel = function () {\n resolve(\"\");\n };\n _this.open(options);\n });\n };\n DefaultDialogService.prototype.open = function (options, data) {\n var _this = this;\n var dialog = new DefaultDialog(options, data);\n var onDestroy = options.onDestroy;\n options.onDestroy = function (dlg) {\n _this.untrack(dlg);\n onDestroy && onDestroy(dlg);\n };\n dialog.open();\n this.track(dialog);\n return dialog;\n };\n DefaultDialogService.prototype.createSet = function (options) {\n return new DefaultDialogSet(options, this);\n };\n DefaultDialogService.prototype.untrack = function (dlg) {\n var index = DefaultDialogService.openDialogs.indexOf(dlg);\n if (index >= 0) {\n DefaultDialogService.openDialogs.splice(index, 1);\n }\n };\n DefaultDialogService.prototype.track = function (dlg) {\n DefaultDialogService.openDialogs.push(dlg);\n };\n DefaultDialogService.prototype.openProgress = function (options) {\n var _this = this;\n var dialog = new DefaultProgressDialog(options);\n var onDestroy = options.onDestroy;\n options.onDestroy = function (dlg) {\n _this.untrack(dlg);\n onDestroy && onDestroy(dlg);\n };\n dialog.open();\n this.track(dialog);\n return dialog;\n };\n DefaultDialogService.prototype.getAllDialogs = function () {\n return Array.from(DefaultDialogService.openDialogs);\n };\n DefaultDialogService.prototype.closeAllDialogs = function () {\n for (var _i = 0, _a = Array.from(DefaultDialogService.openDialogs); _i < _a.length; _i++) {\n var dialog = _a[_i];\n dialog.close();\n }\n };\n DefaultDialogService.openDialogs = [];\n return DefaultDialogService;\n}());\nvar DefaultDialog = /** @class */ (function () {\n function DefaultDialog(options, data) {\n var _this = this;\n this.options = options;\n this.submitHandler = function (token) {\n if (_this.options.onSubmit && _this.options.onSubmit(_this, token) === false) {\n return false;\n }\n _this.destroy();\n return true;\n };\n this.cancelHandler = function () {\n if (_this.options.onCancel) {\n _this.options.onCancel(_this);\n }\n _this.destroy();\n };\n this.keydownHandler = function (ev) {\n if (ev.keyCode == 13 && _this.isActiveDialog()) {\n ev.preventDefault();\n ev.stopPropagation();\n if (_this.submitHandler()) {\n window.removeEventListener('keydown', _this.keydownHandler, false);\n return false;\n }\n }\n return true;\n };\n this.dialogId = utils.generateId('dlg');\n this.data = data;\n this.slot =\n domel('div', document.body)\n .attr('tab-index', '-1')\n .data('dialog-id', this.dialogId)\n .addClass(\"\".concat(cssPrefix, \"-modal\"), 'is-active')\n .focus()\n .addChild('div', function (b) { return b\n .addClass('kdlg-modal-background'); })\n .addChild('div', function (b) { return _this.windowElement = b\n .addClass(\"\".concat(cssPrefix, \"-modal-window\"))\n .addChild('header', function (b) {\n _this.headerElement = b\n .addClass(\"\".concat(cssPrefix, \"-header\"))\n .addChild('p', function (b) { return b\n .addClass(\"\".concat(cssPrefix, \"-header-title\"))\n .addText(options.title); })\n .toDOM();\n if (options.closable !== false)\n b.addChild('button', function (b) { return b\n .addClass(\"\".concat(cssPrefix, \"-modal-close\"))\n .on('click', function () {\n _this.cancelHandler();\n })\n .focus(); });\n })\n .addChild('div', function (b) {\n b.addClass(\"\".concat(cssPrefix, \"-alert-container\"));\n _this.alertElement = b.toDOM();\n })\n .addChild('section', function (b) {\n _this.bodyElement = b\n .addClass(\"\".concat(cssPrefix, \"-body\"))\n .toDOM();\n if (typeof options.body === 'string') {\n var html = liquid.renderLiquidTemplate(options.body, data);\n b.addHtml(html);\n }\n else {\n b.addChildElement(options.body);\n }\n })\n .addChild('footer', function (b) {\n var alignClass = null;\n if (options.footerAlignment && options.footerAlignment == DialogFooterAlignment.Center) {\n alignClass = 'align-center';\n }\n else {\n alignClass = 'align-right';\n }\n _this.footerElement = b\n .addClass(\"\".concat(cssPrefix, \"-footer\"))\n .toDOM();\n b.addClass(alignClass);\n if (options.submitable === false)\n return;\n b.addChild('button', function (bb) {\n bb.id(_this.dialogId + '-btn-submit')\n .addClass('kfrm-button', 'is-info')\n .addText(options.submitButtonText || i18n.getText('ButtonOK'));\n if (options.recaptchaSiteKey) {\n bb.data('sitekey', options.recaptchaSiteKey);\n bb.addClass('g-recaptcha');\n bb.on('click', function (e) {\n if (grecaptcha) {\n grecaptcha.ready(function () {\n grecaptcha.execute(options.recaptchaSiteKey, { action: 'submit' })\n .then(function (token) {\n _this.submitHandler(token);\n });\n });\n }\n else {\n _this.submitHandler();\n }\n });\n }\n else {\n bb.on('click', function (e) {\n _this.submitHandler();\n });\n }\n bb.focus();\n });\n if (options.cancelable !== false)\n b.addChild('button', function (bb) { return bb\n .id(_this.dialogId + '-btn-cancel')\n .addClass('kfrm-button')\n .addText(options.cancelButtonText || i18n.getText('ButtonCancel'))\n .on('click', function (e) {\n _this.cancelHandler();\n }); });\n })\n .toDOM(); })\n .toDOM();\n }\n DefaultDialog.prototype.getData = function () {\n return this.data;\n };\n DefaultDialog.prototype.getRootElement = function () {\n return this.slot;\n };\n DefaultDialog.prototype.getSubmitButtonElement = function () {\n return document.getElementById(this.dialogId + '-btn-submit');\n };\n DefaultDialog.prototype.getCancelButtonElement = function () {\n return document.getElementById(this.dialogId + '-btn-cancel');\n };\n DefaultDialog.prototype.open = function () {\n var _this = this;\n if (this.options.beforeOpen) {\n this.options.beforeOpen(this);\n }\n domel(this.slot).show();\n if (this.options.arrangeParents) {\n this.arrangeParents(true);\n }\n var windowDiv = this.slot\n .querySelector(\".\".concat(cssPrefix, \"-modal-window\"));\n if (this.options.height) {\n windowDiv.style.height = typeof this.options.height === 'string'\n ? this.options.height\n : \"\".concat(this.options.height, \"px\");\n }\n if (this.options.width) {\n windowDiv.style.width = typeof this.options.width === 'string'\n ? this.options.width\n : \"\".concat(this.options.width, \"px\");\n }\n if (this.options.submitOnEnter) {\n window.addEventListener('keydown', this.keydownHandler, false);\n }\n //clear alert on change in any input element \n this.slot.querySelectorAll('input')\n .forEach(function (element) {\n return element.addEventListener('input', function () {\n _this.clearAlert();\n if (_this.options.onInput) {\n _this.options.onInput(_this);\n }\n });\n });\n if (this.options.onShow) {\n this.options.onShow(this);\n }\n };\n DefaultDialog.prototype.submit = function () {\n this.submitHandler();\n };\n DefaultDialog.prototype.cancel = function () {\n this.cancelHandler();\n };\n DefaultDialog.prototype.close = function () {\n this.destroy();\n };\n DefaultDialog.prototype.disableButtons = function () {\n var buttons = this.slot.querySelectorAll('button');\n buttons.forEach(function (button) { return button.disabled = true; });\n };\n DefaultDialog.prototype.enableButtons = function () {\n var buttons = this.slot.querySelectorAll('button');\n buttons.forEach(function (button) { return button.disabled = false; });\n };\n DefaultDialog.prototype.showAlert = function (text, reason, replace) {\n var alert = domel('div')\n .addClass(\"\".concat(cssPrefix, \"-alert \").concat(reason || ''))\n .addChild('span', function (b) { return b\n .addClass(\"\".concat(cssPrefix, \"-alert-closebtn\"))\n .text('×')\n .on('click', function (ev) {\n var alert = ev.target.parentElement;\n alert.parentElement.removeChild(alert);\n }); })\n .addText(text)\n .toDOM();\n if (replace === true) {\n this.clearAlert();\n }\n this.alertElement.appendChild(alert);\n };\n DefaultDialog.prototype.clearAlert = function () {\n this.alertElement.innerHTML = '';\n };\n DefaultDialog.prototype.destroy = function () {\n var elem = document.querySelectorAll(\"[data-dialog-id=\\\"\".concat(this.dialogId, \"\\\"]\"));\n if (elem.length <= 0)\n return;\n if (this.options.arrangeParents) {\n this.arrangeParents(false);\n }\n document.body.removeChild(this.slot);\n if (this.options.submitOnEnter) {\n window.removeEventListener('keydown', this.keydownHandler, false);\n }\n if (this.options.onDestroy) {\n this.options.onDestroy(this);\n }\n };\n DefaultDialog.prototype.isActiveDialog = function () {\n var windowDivs = document.documentElement.querySelectorAll('.kdlg-modal');\n return windowDivs[windowDivs.length - 1] === this.slot;\n };\n DefaultDialog.prototype.arrangeParents = function (turnOn) {\n var windowDivs = document.documentElement.querySelectorAll('.kdlg-modal-window');\n for (var i = 0; i < windowDivs.length - 1; i++) {\n if (turnOn) {\n var offset = i == 0 ? 20 : i * 40 + 20;\n domel(windowDivs[i])\n .setStyle('margin-top', \"\".concat(offset, \"px\"))\n .setStyle('margin-left', \"\".concat(offset, \"px\"));\n }\n else {\n domel(windowDivs[i])\n .removeStyle('margin-top')\n .removeStyle('margin-left');\n }\n }\n };\n return DefaultDialog;\n}());\nexport { DefaultDialog };\nvar DefaultProgressDialog = /** @class */ (function (_super) {\n __extends(DefaultProgressDialog, _super);\n function DefaultProgressDialog(options, data) {\n var _this = this;\n var contentElement;\n var progressElement;\n var body = domel('div')\n .addChild('div', function (b) { return contentElement = b\n .text(options.content || '')\n .toDOM(); })\n .addChild('div', function (b) {\n b\n .addClass(\"\".concat(cssPrefix, \"-progress-line\"))\n .addChild('div', function (b) {\n progressElement = b\n .addClass('fill')\n .toDOM();\n if (options.determinated) {\n b.setStyle('width', '0%');\n }\n else {\n b.addClass('indeterminate');\n }\n });\n })\n .toDOM();\n _this = _super.call(this, {\n title: options.title,\n body: body,\n beforeOpen: options.beforeOpen,\n onSubmit: options.onSubmit,\n width: options.width,\n height: options.height,\n submitable: false,\n cancelable: false,\n closable: false,\n onDestroy: options.onDestroy\n }, data) || this;\n _this.contentElement = contentElement;\n _this.progressElement = progressElement;\n return _this;\n }\n DefaultProgressDialog.prototype.updateContent = function (content) {\n this.contentElement.innerText = content;\n };\n DefaultProgressDialog.prototype.updateProgress = function (progress) {\n var _this = this;\n progress = this.in01(progress);\n this.progressElement.style.width = \"\".concat(progress * 100, \"%\");\n if (progress === 1) {\n // postpone for 0.5s for smooth closing\n setTimeout(function () {\n _this.submit();\n }, 500);\n }\n };\n DefaultProgressDialog.prototype.in01 = function (num) {\n if (num > 1)\n return 1;\n if (num < 0)\n return 0;\n return num;\n };\n return DefaultProgressDialog;\n}(DefaultDialog));\nexport { DefaultProgressDialog };\nvar DefaultDialogSet = /** @class */ (function () {\n function DefaultDialogSet(options, dialogService) {\n this.options = options;\n this.dialogService = dialogService;\n this.currentDialog = null;\n this.currentIndex = 0;\n this.options = options;\n this.dialogService = dialogService;\n }\n DefaultDialogSet.prototype.getCurrent = function () {\n return this.currentDialog;\n };\n DefaultDialogSet.prototype.openNext = function (data) {\n return this.open(this.currentIndex + 1, data);\n };\n DefaultDialogSet.prototype.openPrev = function (data) {\n return this.open(this.currentIndex - 1, data);\n };\n DefaultDialogSet.prototype.open = function (page, data) {\n if (page < 0) {\n this.currentIndex = 0;\n }\n else if (page >= this.options.length) {\n this.currentIndex = this.options.length - 1;\n }\n else {\n this.currentIndex = page;\n }\n if (this.currentDialog) {\n try {\n this.currentDialog.close();\n }\n catch (e) { }\n }\n var dlgOptions = this.options[this.currentIndex];\n this.currentDialog = this.dialogService.open(dlgOptions, data);\n return this.currentDialog;\n };\n DefaultDialogSet.prototype.close = function () {\n if (this.currentDialog) {\n this.currentDialog.close();\n this.currentDialog = null;\n }\n };\n return DefaultDialogSet;\n}());\nexport { DefaultDialogSet };\n//# sourceMappingURL=default_dialog_service.js.map","import { i18n } from '@easydata/core';\nfunction addEasyDataUITexts() {\n i18n.updateDefaultTexts({\n GridPageInfo: '{FirstPageRecordNum} - {LastPageRecordNum} of {Total} records',\n GridItemsPerPage: 'items per page',\n ButtonOK: \"OK\",\n ButtonCancel: \"Cancel\",\n ButtonApply: 'Apply',\n ButtonNow: 'Now',\n LblTotal: 'Total'\n });\n}\naddEasyDataUITexts();\n//# sourceMappingURL=text_resources.js.map","// grid\nexport * from './grid/easy_grid';\nexport * from './grid/easy_grid_events';\nexport * from './grid/easy_grid_options';\nexport * from './grid/easy_grid_columns';\nexport * from './grid/easy_grid_cell_renderer';\n//datetimepicker\nexport * from './datetimepicker/calendar';\nexport * from './datetimepicker/date_time_picker';\nexport * from './datetimepicker/date_time_picker_options';\nexport * from './datetimepicker/default_calendar';\nexport * from './datetimepicker/default_date_time_picker';\nexport * from './datetimepicker/default_time_picker';\nexport * from './datetimepicker/time_picker';\n// utils\nexport * from './utils/browser_utils';\nexport * from './utils/dom_elem_builder';\nexport * from './utils/drag_manager';\nexport * from './utils/mask';\nexport * from './utils/ui-utils';\n//dialogs\nexport * from './dialogs/default_dialog_service';\nexport * from './dialogs/dialog_service';\nimport './i18n/text_resources';\nimport { DefaultDialogService } from './dialogs/default_dialog_service';\n// export dialogs to use outside of context as global\nvar dialogs = new DefaultDialogService();\nexport { dialogs };\n//# sourceMappingURL=public_api.js.map","import { i18n } from '@easydata/core';\r\nimport { DataType } from '@easydata/core';\r\n\r\nconst internalDateFormat = 'yyyy-MM-dd';\r\nconst internalTimeFormat = 'HH:mm';\r\n\r\nexport const getInternalDateTimeFormat = (dtype: DataType): string => {\r\n if (dtype == DataType.Date)\r\n return internalDateFormat;\r\n\r\n if (dtype == DataType.Time)\r\n return internalTimeFormat;\r\n\r\n return `${internalDateFormat}T${internalTimeFormat}`;\r\n}\r\n\r\nexport const getEditDateTimeFormat = (dtype: DataType): string => {\r\n const settings = i18n.getLocaleSettings();\r\n if (dtype == DataType.Date)\r\n return settings.editDateFormat;\r\n\r\n if (dtype == DataType.Time)\r\n return settings.editTimeFormat;\r\n\r\n return `${settings.editDateFormat} ${settings.editTimeFormat}`;\r\n}\r\n\r\nexport const setLocation = (path: string) => {\r\n const state = window.history.state;\r\n history.pushState(state, document.title, path)\r\n window.dispatchEvent(new Event('ed_set_location'));\r\n}","import { MetaEntityAttr } from '@easydata/core';\r\n\r\nexport interface ValidationResult {\r\n successed: boolean;\r\n messages?: string[];\r\n}\r\n\r\nexport abstract class Validator {\r\n\r\n public name: string;\r\n\r\n public abstract validate(attr: MetaEntityAttr, value: any): ValidationResult;\r\n \r\n}","import { MetaEntityAttr, i18n, utils as dataUtils } from '@easydata/core';\r\nimport { ValidationResult, Validator } from './validator';\r\n\r\nimport { getEditDateTimeFormat } from '../utils/utils';\r\n\r\nexport class DateTimeValidator extends Validator {\r\n\r\n constructor() {\r\n super();\r\n this.name = 'DateTime';\r\n }\r\n\r\n public validate(attr: MetaEntityAttr, value: any): ValidationResult {\r\n\r\n if (!dataUtils.IsDefinedAndNotNull(value) || value == '')\r\n return { successed: true };\r\n\r\n if (dataUtils.getDateDataTypes().indexOf(attr.dataType) >= 0) {\r\n try {\r\n const editFormat = getEditDateTimeFormat(attr.dataType);\r\n const newDate = dataUtils.strToDateTime(value, editFormat);\r\n }\r\n catch {\r\n return {\r\n successed: false,\r\n messages: [i18n.getText('DateTimeError')]\r\n }\r\n }\r\n }\r\n\r\n \r\n return { successed: true };\r\n }\r\n}","import { \r\n DataType, utils as dataUtils, \r\n MetaEntityAttr, \r\n} from '@easydata/core';\r\n\r\nimport { domel } from '@easydata/ui';\r\n\r\nimport { DataContext } from '../main/data_context';\r\n\r\nimport { ValidationResult, Validator } from '../validators/validator';\r\n\r\nimport * as crudUtils from '../utils/utils';\r\nimport { DateTimeValidator } from '../validators/datetime_validator';\r\n\r\nexport class EntityEditForm {\r\n private errorsDiv: HTMLElement;\r\n\r\n private html: HTMLElement;\r\n\r\n constructor(private context: DataContext) { \r\n }\r\n\r\n private validators: Validator[] = [ new DateTimeValidator() ];\r\n\r\n public getHtml() {\r\n return this.html;\r\n }\r\n\r\n private setHtmlInt(html: HTMLElement) {\r\n this.html = html;\r\n this.errorsDiv = this.html.querySelector('.errors-block');\r\n }\r\n\r\n public validate(): boolean {\r\n this.clearErrors();\r\n\r\n const inputs = Array.from(this.html.querySelectorAll<HTMLInputElement | HTMLSelectElement>('input, select'));\r\n let isValid = true;\r\n for(const input of inputs) {\r\n const attr = this.context.getMetaData().getAttributeById(input.name);\r\n\r\n if (input.type === 'checkbox')\r\n continue;\r\n\r\n const result = this.validateValue(attr, input.value);\r\n if (!result.successed) {\r\n if (isValid) {\r\n domel(this.errorsDiv)\r\n .addChild('ul');\r\n }\r\n\r\n isValid = false;\r\n\r\n for(const message of result.messages) {\r\n this.errorsDiv.firstElementChild.innerHTML += `<li>${attr.caption}: ${message}</li>`;\r\n }\r\n }\r\n \r\n this.markInputValid(input, result.successed);\r\n }\r\n\r\n return isValid;\r\n }\r\n\r\n public getData(): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n const filePromises: Promise<any>[] = [];\r\n const inputs = Array.from(this.html\r\n .querySelectorAll<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>('input, select, textarea'));\r\n\r\n let obj = {};\r\n for (const input of inputs) {\r\n const property = input.name.substring(input.name.lastIndexOf('.') + 1);\r\n const attr = this.context.getMetaData().getAttributeById(input.name);\r\n\r\n if (input.type === 'checkbox') {\r\n obj[property] = (input as HTMLInputElement).checked;\r\n }\r\n else if (input.type === 'file') {\r\n filePromises.push(this.fileToBase64((input as HTMLInputElement).files[0])\r\n .then(content => obj[property] = content));\r\n }\r\n else {\r\n obj[property] = this.mapValue(attr.dataType, input.value);\r\n }\r\n }\r\n\r\n Promise.all(filePromises)\r\n .then(() => resolve(obj))\r\n .catch((e) => reject(e));\r\n });\r\n }\r\n\r\n private fileToBase64(file: File): Promise<string> {\r\n return new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => {\r\n const result = reader.result.toString();\r\n resolve(result.substring(result.indexOf(',') + 1));\r\n } \r\n reader.onerror = error => reject(error);\r\n })\r\n }\r\n\r\n public useValidator(...validator: Validator[]) {\r\n this.useValidators(validator);\r\n }\r\n\r\n public useValidators(validators: Validator[]) {\r\n this.validators = this.validators.concat(validators);\r\n }\r\n\r\n private mapValue(type: DataType, value: string) {\r\n if (dataUtils.getDateDataTypes().indexOf(type) >= 0) {\r\n if (type !== DataType.Time && value && value.length) {\r\n const editFormat = crudUtils.getEditDateTimeFormat(type);\r\n const internalFormat = crudUtils.getInternalDateTimeFormat(type);\r\n\r\n const date = dataUtils.strToDateTime(value, editFormat);\r\n return dataUtils.dateTimeToStr(date, internalFormat)\r\n } \r\n\r\n return value && value.length ? value : null;\r\n }\r\n\r\n if (dataUtils.isIntType(type))\r\n return parseInt(value);\r\n\r\n if (dataUtils.isNumericType(type))\r\n return parseFloat(value);\r\n\r\n return value;\r\n }\r\n\r\n private clearErrors() {\r\n this.errorsDiv.innerHTML = '';\r\n\r\n this.html.querySelectorAll('input, select').forEach(el => {\r\n el.classList.remove('is-valid');\r\n el.classList.remove('is-invalid');\r\n });\r\n }\r\n\r\n private markInputValid(input: HTMLElement, valid: boolean) {\r\n input.classList.add(valid ? 'is-valid' : 'is-invalid');\r\n }\r\n\r\n private validateValue(attr: MetaEntityAttr, value: any): ValidationResult {\r\n const result = { successed: true, messages: []}\r\n for(const validator of this.validators) {\r\n const res = validator.validate(attr, value);\r\n if (!res.successed) {\r\n result.successed = false;\r\n result.messages = result.messages.concat(res.messages);\r\n }\r\n }\r\n\r\n return result;\r\n } \r\n}\r\n","import { i18n, utils as dataUtils } from '@easydata/core';\r\nimport { \r\n browserUtils, CellRendererType,\r\n domel, EasyGrid, \r\n GridCellRenderer, GridColumn, DFMT_REGEX\r\n} from '@easydata/ui';\r\nimport { DataFilter } from '../filter/data_filter';\r\n\r\nexport interface TextFilterWidgetOptions {\r\n focus?: boolean,\r\n instantMode?: boolean;\r\n instantTimeout?: number\r\n}\r\n\r\nexport class TextFilterWidget {\r\n private options = {\r\n focus: false,\r\n instantMode: false,\r\n instantTimeout: 1000\r\n }\r\n\r\n constructor(\r\n private slot: HTMLElement, \r\n private grid: EasyGrid, \r\n private filter: DataFilter,\r\n options?: TextFilterWidgetOptions) {\r\n\r\n this.options = dataUtils.assignDeep(this.options, options || {});\r\n\r\n const stringDefRenderer = this.grid.cellRendererStore\r\n .getDefaultRendererByType(CellRendererType.STRING);\r\n this.grid.cellRendererStore\r\n .setDefaultRenderer(CellRendererType.STRING, (value, column, cellElement, rowElement) => \r\n this.highlightCellRenderer(stringDefRenderer, value, column, cellElement, rowElement));\r\n\r\n const numDefRenderer = this.grid.cellRendererStore\r\n .getDefaultRendererByType(CellRendererType.NUMBER);\r\n this.grid.cellRendererStore\r\n .setDefaultRenderer(CellRendererType.NUMBER, (value, column, cellElement, rowElement) => \r\n this.highlightCellRenderer(numDefRenderer, value, column, cellElement, rowElement));\r\n\r\n this.render();\r\n }\r\n\r\n private filterInput: HTMLInputElement;\r\n\r\n private render() { \r\n const horizClass = browserUtils.IsIE() \r\n ? 'kfrm-fields-ie is-horizontal' \r\n : 'kfrm-fields is-horizontal';\r\n\r\n const isEdgeOrIE = browserUtils.IsIE() || browserUtils.IsEdge();\r\n \r\n domel(this.slot)\r\n .addClass(horizClass)\r\n .addChild('div', b => {\r\n b\r\n .addClass('control')\r\n .addChild('input', b => { \r\n this.filterInput = b.toDOM();\r\n b \r\n .attr('placeholder', i18n.getText('SearchInputPlaceholder'))\r\n .type('text')\r\n\r\n b.on('keydown', this.inputKeydownHandler.bind(this))\r\n\r\n if (this.options.instantMode) {\r\n b.on('keyup', this.inputKeyupHandler.bind(this));\r\n }\r\n });\r\n\r\n if (!isEdgeOrIE) {\r\n b \r\n .addClass('has-icons-right')\r\n .addChild('span', b => {\r\n b\r\n .addClass('icon')\r\n .addClass('is-right')\r\n .addClass('is-clickable')\r\n .html('🗙')\r\n .on('click', this.clearButtonClickHander.bind(this));\r\n });\r\n }\r\n });\r\n\r\n if (!this.options.instantMode) {\r\n domel(this.slot)\r\n .addChild('button', b => b\r\n .addClass('kfrm-button')\r\n .addText(i18n.getText('SearchBtn'))\r\n .on('click', this.searchButtonClickHandler.bind(this))\r\n );\r\n }\r\n\r\n if (this.options.focus) {\r\n this.filterInput.focus();\r\n }\r\n }\r\n\r\n private applyFilterTimeout: any;\r\n\r\n private inputKeydownHandler(ev: Event) {\r\n if ((ev as KeyboardEvent).keyCode == 13) {\r\n this.applyFilter(true);\r\n }\r\n }\r\n\r\n private inputKeyupHandler() {\r\n if (this.applyFilterTimeout) {\r\n clearTimeout(this.applyFilterTimeout);\r\n }\r\n\r\n this.applyFilterTimeout = setTimeout(() => {\r\n this.applyFilter(true);\r\n }, this.options.instantTimeout);\r\n }\r\n\r\n private clearButtonClickHander() {\r\n this.filterInput.value = '';\r\n this.filterInput.focus();\r\n\r\n this.applyFilter(true);\r\n }\r\n\r\n private searchButtonClickHandler() {\r\n this.applyFilter(true);\r\n }\r\n\r\n public applyFilter(checkChange : boolean) : boolean {\r\n if (this.applyFilterTimeout) {\r\n clearTimeout(this.applyFilterTimeout);\r\n }\r\n\r\n const filterValue = this.filter.getValue();\r\n if (!checkChange || filterValue != this.filterInput.value) {\r\n this.filter.apply(this.filterInput.value)\r\n .then(data => {\r\n this.grid.setData(data);\r\n });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private highlightCellRenderer(defaultRenderer: GridCellRenderer, value: any, column: GridColumn, cellElement: HTMLElement, rowElement: HTMLElement) { \r\n if (dataUtils.isNumericType(column.type) \r\n || dataUtils.getStringDataTypes().indexOf(column.type) >= 0) \r\n {\r\n if (value) {\r\n if (column.dataColumn && column.dataColumn.displayFormat\r\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\r\n value = column.dataColumn.displayFormat.replace(DFMT_REGEX, (_, $1) => {\r\n return i18n.numberToStr(value, $1);\r\n });\r\n }\r\n else {\r\n value = value.toLocaleString();\r\n }\r\n\r\n \r\n const result = this.highlightText(value.toString());\r\n if (result instanceof HTMLElement) {\r\n cellElement.title = value;\r\n cellElement.appendChild(result);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n defaultRenderer(value, column, cellElement, rowElement);\r\n }\r\n\r\n private highlightText(content: string): HTMLElement | string{\r\n const normalizedContent = content.toLowerCase();\r\n const filterValue = this.filter.getValue().toString();\r\n if (filterValue && filterValue.length > 0 && content && content.length > 0) {\r\n \r\n const indexInMas = [];\r\n const words = filterValue.split('||').map(w => w.trim().toLowerCase());\r\n for(let i = 0; i < words.length; i++) {\r\n let pos = 0;\r\n const lowerWord = words[i];\r\n if (!lowerWord.length)\r\n continue;\r\n if (lowerWord === normalizedContent) {\r\n const highlightSpan = document.createElement('span');\r\n highlightSpan.style.backgroundColor = 'yellow';\r\n highlightSpan.innerText = content;\r\n \r\n return highlightSpan;\r\n }\r\n while (pos < content.length - 1) {\r\n const index = normalizedContent.indexOf(lowerWord, pos);\r\n if (index >= 0) {\r\n indexInMas.push({index: index, length: words[i].length});\r\n pos = index + lowerWord.length;\r\n } else {\r\n pos++;\r\n }\r\n }\r\n }\r\n \r\n if (indexInMas.length > 0) {\r\n \r\n //sort array item by index\r\n indexInMas.sort((item1, item2) => {\r\n \r\n if (item1.index > item2.index) {\r\n return 1;\r\n } \r\n else if (item1.index == item2.index2) {\r\n return 0;\r\n } \r\n else {\r\n return -1;\r\n }\r\n \r\n });\r\n \r\n //remove intersecting gaps\r\n for(let i = 0; i < indexInMas.length - 1;) {\r\n const delta = indexInMas[i + 1].index - (indexInMas[i].index + indexInMas[i].length);\r\n if (delta < 0) {\r\n const addDelta = indexInMas[i + 1].length + delta;\r\n if (addDelta > 0) {\r\n indexInMas[i].length += addDelta;\r\n }\r\n indexInMas.splice(i + 1, 1);\r\n } else {\r\n i++;\r\n }\r\n }\r\n \r\n const div = document.createElement('div');\r\n for (let i = 0; i < indexInMas.length; i++) {\r\n if (i === 0) {\r\n const text = document.createTextNode(content.substring(0, indexInMas[i].index));\r\n div.appendChild(text);\r\n }\r\n \r\n const highlightSpan = document.createElement('span');\r\n highlightSpan.style.backgroundColor = 'yellow';\r\n highlightSpan.innerText = content.substring(indexInMas[i].index,\r\n indexInMas[i].index + indexInMas[i].length)\r\n \r\n div.appendChild(highlightSpan);\r\n\r\n const text = (i < indexInMas.length - 1) \r\n ? document.createTextNode(content.substring(indexInMas[i].index\r\n + indexInMas[i].length, indexInMas[i + 1].index))\r\n : document.createTextNode(content.substring(indexInMas[i].index\r\n + indexInMas[i].length));\r\n\r\n div.appendChild(text);\r\n }\r\n \r\n return div;\r\n }\r\n }\r\n\r\n return content;\r\n }\r\n}","import { \r\n DataRow, DataType, EasyDataTable, \r\n EditorTag, EntityAttrKind, i18n, \r\n MetaEntityAttr, utils as dataUtils,\r\n ValueEditor\r\n} from '@easydata/core';\r\n\r\nimport { \r\n browserUtils, DateTimePickerOptions, \r\n DefaultDateTimePicker, DefaultDialogService, \r\n domel, DomElementBuilder, EasyGrid \r\n} from '@easydata/ui';\r\n\r\nimport * as crudUtils from '../utils/utils';\r\n\r\nimport { DataContext } from '../main/data_context';\r\nimport { EntityEditForm } from './entity_edit_form';\r\nimport { TextFilterWidget } from '../widgets/text_filter_widget';\r\n\r\nconst isIE = browserUtils.IsIE();\r\n\r\nexport type FormBuildParams = {\r\n values?: DataRow,\r\n isEditForm?: boolean;\r\n};\r\n\r\nexport class EntityEditFormBuilder {\r\n private form: EntityEditForm;\r\n\r\n constructor(private context: DataContext, private params?: FormBuildParams) {\r\n this.params = params || {};\r\n this.reset();\r\n }\r\n\r\n public reset() {\r\n this.form = new EntityEditForm(this.context);\r\n }\r\n\r\n private setupLookupField(parent: HTMLElement, attr: MetaEntityAttr, readOnly: boolean, value: any): void {\r\n const lookupEntity = this.context.getMetaData().getRootEntity()\r\n .subEntities.filter(ent => ent.id == attr.lookupEntity)[0];\r\n const dataAttr = this.context.getMetaData().getAttributeById(attr.dataAttr);\r\n\r\n if (!dataAttr) return;\r\n\r\n readOnly = readOnly || !dataAttr.isEditable;\r\n\r\n value = this.params.values\r\n ? this.params.values.getValue(dataAttr.id)\r\n : undefined;\r\n\r\n const horizClass = isIE\r\n ? 'kfrm-fields-ie is-horizontal'\r\n : 'kfrm-fields is-horizontal';\r\n\r\n let inputEl: HTMLInputElement;\r\n domel(parent)\r\n .addChild('div', b => {\r\n b\r\n .addClass(horizClass)\r\n .addChild('input', b => {\r\n inputEl = b.toDOM();\r\n b.attr('readonly', '');\r\n\r\n b.name(dataAttr.id)\r\n b.type(this.resolveInputType(dataAttr.dataType));\r\n\r\n b.value(dataUtils.IsDefinedAndNotNull(value)\r\n ? value.toString() : '');\r\n });\r\n\r\n if (!readOnly)\r\n b.addChild('button', b => b\r\n .addClass('kfrm-button')\r\n .attr('title', i18n.getText('NavigationBtnTitle'))\r\n .addText('...')\r\n .on('click', (ev) => {\r\n const lookupTable = new EasyDataTable({\r\n loader: {\r\n loadChunk: (chunkParams) => this.context.getDataLoader()\r\n .loadChunk({ ...chunkParams, id: lookupEntity.id } as any)\r\n }\r\n });\r\n\r\n this.context.getDataLoader()\r\n .loadChunk({ offset: 0, limit: 1000, needTotal: true, sourceId: lookupEntity.id } as any)\r\n .then(data => {\r\n for (const col of data.table.columns.getItems()) {\r\n const attrs = lookupEntity.attributes.filter(attr =>\r\n attr.id == col.id && (attr.isPrimaryKey || attr.showInLookup));\r\n\r\n if (attrs.length) {\r\n lookupTable.columns.add(col);\r\n }\r\n }\r\n\r\n lookupTable.setTotal(data.total);\r\n\r\n for (const row of data.table.getCachedRows()) {\r\n lookupTable.addRow(row);\r\n }\r\n\r\n const ds = new DefaultDialogService();\r\n let gridSlot: HTMLElement = null;\r\n\r\n let selectedSlot: HTMLElement = null;\r\n\r\n let widgetSlot: HTMLElement;\r\n const slot = domel('div')\r\n .addClass(`kfrm-form`)\r\n .addChild('div', b => b\r\n .addClass(`kfrm-field`)\r\n .addChild('label', b => b\r\n .addText(i18n.getText('LookupSelectedItem'))\r\n .toDOM()\r\n )\r\n .addChild('div', b => selectedSlot = b\r\n .addText('None')\r\n .toDOM()\r\n )\r\n )\r\n .addChild('div', b => widgetSlot = b.toDOM())\r\n .addChild('div', b => b\r\n .addClass('kfrm-control')\r\n .addChild('div', b => gridSlot = b.toDOM())\r\n )\r\n .toDOM();\r\n\r\n let selectedValue = inputEl.value;\r\n\r\n const getValue = (row: DataRow | any, colId: string) => {\r\n\r\n if (row instanceof DataRow) {\r\n return row.getValue(colId);\r\n }\r\n\r\n const property = colId.substring(colId.lastIndexOf('.') + 1);\r\n return row[property]\r\n }\r\n\r\n const updateSelectedValue = (row: DataRow | any) => {\r\n selectedSlot.innerHTML = lookupTable.columns\r\n .getItems()\r\n .map(col => {\r\n return `<b>${col.label}:</b> ${getValue(row, col.id)}`\r\n })\r\n .join(', ');\r\n }\r\n\r\n if (selectedValue) {\r\n const attr = lookupEntity.getFirstPrimaryAttr();\r\n const key = attr.id.substring(attr.id.lastIndexOf('.') + 1);\r\n this.context.fetchRecord({[key]: selectedValue}, lookupEntity.id)\r\n .then(data => {\r\n if (data.entity) {\r\n updateSelectedValue(data.entity);\r\n }\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n });\r\n }\r\n\r\n const lookupGrid = new EasyGrid({\r\n slot: gridSlot,\r\n dataTable: lookupTable,\r\n fixHeightOnFirstRender: true,\r\n paging: {\r\n pageSize: 10\r\n },\r\n onActiveRowChanged: (ev) => {\r\n lookupGrid.getData().getRow(ev.rowIndex)\r\n .then((row) => {\r\n selectedValue = row.getValue(attr.lookupDataAttr);\r\n updateSelectedValue(row);\r\n });\r\n }\r\n });\r\n\r\n ds.open({\r\n title: i18n.getText('LookupDlgCaption')\r\n .replace('{entity}', lookupEntity.caption),\r\n body: slot,\r\n arrangeParents: true,\r\n beforeOpen: () => {\r\n const dataFilter = this.context.createFilter(lookupEntity.id, lookupGrid.getData(), true);\r\n new TextFilterWidget(widgetSlot, lookupGrid, dataFilter,\r\n { instantMode: true, focus: true });\r\n },\r\n onSubmit: () => {\r\n inputEl.value = selectedValue;\r\n return true;\r\n },\r\n onDestroy: () => {\r\n lookupGrid.destroy();\r\n // return focus on button\r\n b.toDOM().focus();\r\n }\r\n });\r\n });\r\n })\r\n );\r\n });\r\n }\r\n\r\n private setupDateTimeField(parent: HTMLElement, attr: MetaEntityAttr, value: any, readOnly: boolean, hidden: boolean) {\r\n const horizClass = isIE\r\n ? 'kfrm-fields-ie is-horizontal'\r\n : 'kfrm-fields is-horizontal';\r\n\r\n const editFormat = crudUtils.getEditDateTimeFormat(attr.dataType);\r\n\r\n let inputEl: HTMLInputElement;\r\n let btnEl: HTMLButtonElement;\r\n\r\n const mask = editFormat\r\n .replace('yyyy', '9999')\r\n .replace('MM', '99')\r\n .replace('dd', '99')\r\n .replace('HH', '99')\r\n .replace('mm', '99')\r\n .replace('ss', '99')\r\n\r\n domel(parent)\r\n .addChild('div', b => {\r\n b\r\n .addClass(horizClass)\r\n .addChild('input', b => {\r\n inputEl = b.toDOM();\r\n\r\n b.name(attr.id)\r\n b.type(hidden ? 'hidden' : this.resolveInputType(attr.dataType));\r\n\r\n if (readOnly) {\r\n b.attr('readonly', '');\r\n }\r\n else {\r\n b.mask(mask)\r\n b.on('keypress', (ev) => this.applySumbit(ev as KeyboardEvent))\r\n .on('input', ev => {\r\n b.removeClass('is-invalid');\r\n try {\r\n const newDate = dataUtils.strToDateTime(inputEl.value, editFormat);\r\n }\r\n catch (e) {\r\n b.addClass('is-invalid');\r\n }\r\n finally {\r\n\r\n }\r\n })\r\n .on('blur', ev => {\r\n if (inputEl.value === mask.replace(/[9]/g, '_')) {\r\n inputEl.value = '';\r\n }\r\n });\r\n }\r\n\r\n b.value((dataUtils.IsDefinedAndNotNull(value)\r\n ? dataUtils.dateTimeToStr(value, editFormat)\r\n : ''))\r\n });\r\n\r\n if (!readOnly)\r\n b.addChild('button', b => btnEl = b\r\n .addClass('kfrm-button')\r\n .attr('title', i18n.getText(attr.dataType !== DataType.Time\r\n ? 'CalendarBtnTitle'\r\n : 'TimerBtnTitle'))\r\n .addChild('i', b => b.addClass(attr.dataType !== DataType.Time\r\n ? 'ed-calendar-icon'\r\n : 'ed-timer-icon'))\r\n .on('click', (ev) => {\r\n\r\n let value: Date;\r\n try {\r\n value = inputEl.value.length\r\n ? attr.dataType !== DataType.Time\r\n ? dataUtils.strToDateTime(inputEl.value, editFormat)\r\n : dataUtils.strToTime(inputEl.value)\r\n : new Date(new Date().setSeconds(0));\r\n }\r\n catch {\r\n value = new Date(new Date().setSeconds(0));\r\n }\r\n\r\n const pickerOptions: DateTimePickerOptions = {\r\n zIndex: 9999999999,\r\n showCalendar: attr.dataType !== DataType.Time,\r\n showTimePicker: attr.dataType !== DataType.Date,\r\n onApply: (dateTime: Date) => {\r\n dateTime.setSeconds(0);\r\n dateTime.setMilliseconds(0);\r\n\r\n inputEl.value = dataUtils.dateTimeToStr(dateTime, editFormat);\r\n\r\n }\r\n };\r\n\r\n const dtp = new DefaultDateTimePicker(pickerOptions);\r\n dtp.setDateTime(value);\r\n dtp.show(ev.target as HTMLElement);\r\n\r\n }).toDOM()\r\n );\r\n });\r\n }\r\n\r\n private setupListField(parent: HTMLElement, attr: MetaEntityAttr, value: any, values: any, readOnly: boolean) {\r\n domel(parent)\r\n .addChild('div', b => b\r\n .addClass('kfrm-select full-width')\r\n .addChild('select', b => {\r\n if (readOnly)\r\n b.attr('readonly', '');\r\n b.attr('name', attr.id)\r\n b.on('keypress', (ev) => this.applySumbit(ev as KeyboardEvent))\r\n if (values) {\r\n for (let i = 0; i < values.length; i++) {\r\n const val = values[i];\r\n b.addOption({\r\n value: val.id,\r\n title: val.text,\r\n selected: i === 0\r\n });\r\n }\r\n }\r\n b.value(value);\r\n })\r\n );\r\n }\r\n\r\n private setupFileField(parent: HTMLElement, attr: MetaEntityAttr, readOnly: boolean, accept: string) {\r\n domel(parent)\r\n .addChild('input', b => {\r\n if (readOnly)\r\n b.attr('readonly', '');\r\n\r\n b.name(attr.id)\r\n .type(this.resolveInputType(attr.dataType));\r\n\r\n b.attr('accept', accept);\r\n });\r\n }\r\n\r\n private setupTextField(parent: HTMLElement, attr: MetaEntityAttr, value: any, readOnly: boolean, hidden : boolean) {\r\n domel(parent)\r\n .addChild('input', b => {\r\n if (readOnly) {\r\n b.attr('readonly', '');\r\n }\r\n b.type(hidden ? 'hidden' : this.resolveInputType(attr.dataType));\r\n\r\n b.name(attr.id)\r\n .type(this.resolveInputType(attr.dataType));\r\n\r\n if (attr.dataType == DataType.Bool) {\r\n if (value)\r\n b.attr('checked', '');\r\n } \r\n else {\r\n b.on('keypress', (ev) => this.applySumbit(ev as KeyboardEvent))\r\n .value(dataUtils.IsDefinedAndNotNull(value)\r\n ? value.toString()\r\n : '');\r\n }\r\n });\r\n }\r\n\r\n private setupTextArea(parent: HTMLElement, attr: MetaEntityAttr, value: any, readOnly: boolean) {\r\n // feature: modify size in value editor ??\r\n domel(parent)\r\n .addChild('textarea', b => {\r\n if (readOnly)\r\n b.attr('readonly', '');\r\n \r\n b.attr('name', attr.id)\r\n b.setStyle('height', `120px`)\r\n b.value(dataUtils.IsDefinedAndNotNull(value)\r\n ? value.toString()\r\n : '');\r\n });\r\n }\r\n\r\n private addFormField(parent: HTMLElement, attr: MetaEntityAttr) {\r\n const value = (this.params.values && attr.kind !== EntityAttrKind.Lookup)\r\n ? this.params.values.getValue(attr.id)\r\n : !this.params.isEditForm\r\n ? attr.defaultValue\r\n : undefined;\r\n\r\n const editor = this.resolveEditor(attr);\r\n\r\n const readOnly = this.params.isEditForm && (attr.isPrimaryKey || !attr.isEditable);\r\n const required = !attr.isNullable;\r\n \r\n if (isIE) {\r\n parent = domel('div', parent)\r\n .addClass('kfrm-field-ie')\r\n .toDOM();\r\n }\r\n\r\n domel(parent)\r\n .addChild('label', b => {\r\n b.attr('for', attr.id);\r\n b.addHtml(`${attr.caption} ${required ? '<sup style=\"color: red\">*</sup>' : ''}: `);\r\n\r\n if (attr.description) {\r\n b.addChild('div', b => b\r\n .attr('title', attr.description)\r\n .addClass('question-mark')\r\n .setStyle('vertical-align', 'middle')\r\n .setStyle('display', 'inline-block')\r\n );\r\n }\r\n });\r\n \r\n const hidden = attr.isPrimaryKey;\r\n \r\n if (attr.kind === EntityAttrKind.Lookup) {\r\n this.setupLookupField(parent, attr, readOnly, value);\r\n return;\r\n }\r\n\r\n switch (editor.tag) {\r\n case EditorTag.DateTime:\r\n this.setupDateTimeField(parent, attr, value, readOnly, hidden);\r\n break;\r\n\r\n case EditorTag.List:\r\n this.setupListField(parent, attr, value, editor.values, readOnly);\r\n break;\r\n\r\n case EditorTag.File:\r\n this.setupFileField(parent, attr, readOnly, editor.accept);\r\n break;\r\n\r\n case EditorTag.Edit:\r\n default:\r\n if (editor.multiline) {\r\n this.setupTextArea(parent, attr, value, readOnly);\r\n }\r\n else {\r\n this.setupTextField(parent, attr, value, readOnly, hidden);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private resolveInputType(dataType: DataType): string {\r\n if (dataType === DataType.Bool)\r\n return 'checkbox';\r\n\r\n if (dataType === DataType.Blob)\r\n return 'file';\r\n\r\n return 'text';\r\n }\r\n\r\n private resolveEditor(attr: MetaEntityAttr): ValueEditor {\r\n let editor = attr.defaultEditor || new ValueEditor();\r\n if (editor.tag == EditorTag.Unknown) {\r\n if (dataUtils.getDateDataTypes().indexOf(attr.dataType) >= 0) {\r\n editor.tag = EditorTag.DateTime;\r\n }\r\n else {\r\n editor.tag = EditorTag.Edit;\r\n }\r\n }\r\n\r\n return editor;\r\n }\r\n\r\n private applySumbit(ev: KeyboardEvent): boolean {\r\n if (ev.keyCode === 13) {\r\n this.sumbitCallback && this.sumbitCallback();\r\n return false;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private sumbitCallback: () => void;\r\n\r\n public onSubmit(sumbitCallback: () => void) {\r\n this.sumbitCallback = sumbitCallback;\r\n return this;\r\n }\r\n\r\n public build(): EntityEditForm {\r\n let fb: DomElementBuilder<HTMLDivElement>;\r\n const formHtml =\r\n domel('div')\r\n .addClass('kfrm-form')\r\n .addChild('div', b => b\r\n .addClass(`errors-block`)\r\n .toDOM()\r\n )\r\n .addChild('div', b => {\r\n b.addClass(`${isIE\r\n ? 'kfrm-fields-ie col-ie-1-4 label-align-right'\r\n : 'kfrm-fields col-a-1 label-align-right'}`);\r\n\r\n fb = b;\r\n })\r\n .toDOM();\r\n\r\n this.form['setHtmlInt'](formHtml);\r\n\r\n for (const attr of this.context.getActiveEntity().attributes) { \r\n if (!this.params.isEditForm && !attr.showOnCreate)\r\n continue;\r\n\r\n if (!attr.isPrimaryKey && this.params.isEditForm && !attr.showOnEdit) {\r\n continue;\r\n }\r\n\r\n this.addFormField(fb.toDOM(), attr)\r\n }\r\n\r\n return this.form;\r\n }\r\n}","export class ProgressBar {\r\n\r\n constructor(private slot: HTMLElement) {\r\n this.hide();\r\n this.slot.classList.add('ed-progress-bar');\r\n }\r\n\r\n public show() {\r\n this.slot.style.removeProperty('display');\r\n }\r\n\r\n public hide() {\r\n this.slot.style.display = 'none';\r\n }\r\n}","import { \r\n DataChunkDescriptor, \r\n DataLoader, EasyDataTable \r\n} from '@easydata/core';\r\n\r\nimport { DataContext } from './data_context';\r\n\r\nexport class EasyDataServerLoader implements DataLoader {\r\n constructor(protected context: DataContext) {\r\n\r\n }\r\n\r\n loadChunk(params: DataChunkDescriptor | any) {\r\n const url = this.context.resolveEndpoint('FetchDataset', \r\n { sourceId: params.sourceId || this.context.getActiveEntity().id });\r\n delete params.sourceId;\r\n\r\n this.context.startProcess();\r\n const http = this.context.getHttpClient();\r\n return http.post(url, params)\r\n .then((result) => {\r\n\r\n const dataTable = new EasyDataTable({\r\n chunkSize: 1000\r\n });\r\n\r\n const resultSet = result.resultSet;\r\n for(const col of resultSet.cols) {\r\n dataTable.columns.add(col);\r\n }\r\n\r\n for(const row of resultSet.rows) {\r\n dataTable.addRow(row);\r\n }\r\n \r\n let totalRecords = 0;\r\n if (result.meta && result.meta.totalRecords) {\r\n totalRecords = result.meta.totalRecords; \r\n }\r\n\r\n return {\r\n table: dataTable,\r\n total: totalRecords,\r\n hasNext: !params.needTotal \r\n || params.offset + params.limit < totalRecords\r\n }\r\n \r\n })\r\n .finally(() => {\r\n this.context.endProcess();\r\n });\r\n }\r\n\r\n}","import { \r\n HttpClient, MetaData,\r\n MetaEntity, combinePath, \r\n EasyDataTable, EasyDataTableOptions,\r\n DataLoader\r\n} from '@easydata/core';\r\nimport { DataFilter } from '../filter/data_filter';\r\nimport { TextDataFilter } from '../filter/text_data_filter';\r\n\r\nimport { EasyDataServerLoader } from './easy_data_server_loader';\r\n\r\ntype EasyDataEndpointKey = \r\n 'GetMetaData' |\r\n 'FetchDataset' | \r\n 'FetchRecord' |\r\n 'CreateRecord' |\r\n 'UpdateRecord' |\r\n 'DeleteRecord' ;\r\n\r\n\r\ninterface CompoundRecordKey { \r\n [key: string]: string \r\n}\r\n \r\nexport interface EasyDataContextOptions {\r\n metaDataId?: string;\r\n endpoint?: string;\r\n dataTable?: EasyDataTableOptions,\r\n onProcessStart?: () => void;\r\n onProcessEnd?: () => void;\r\n}\r\n\r\nexport class DataContext {\r\n private endpoints: Map<string, string> = new Map<string, string>();\r\n\r\n private http: HttpClient;\r\n\r\n private model: MetaData;\r\n\r\n private data: EasyDataTable;\r\n\r\n private dataLoader: EasyDataServerLoader;\r\n\r\n private activeEntity: MetaEntity;\r\n\r\n private options: EasyDataContextOptions;\r\n\r\n constructor(options?: EasyDataContextOptions) {\r\n this.options = options || {};\r\n\r\n this.http = new HttpClient();\r\n this.model = new MetaData();\r\n this.model.id = options.metaDataId || '__default';\r\n\r\n this.dataLoader = new EasyDataServerLoader(this);\r\n const dataTableOptions = {\r\n loader: this.dataLoader,\r\n ...options.dataTable\r\n };\r\n\r\n this.data = new EasyDataTable(dataTableOptions);\r\n\r\n this.setDefaultEndpoints(this.options.endpoint || '/api/easydata');\r\n }\r\n\r\n public getActiveEntity() {\r\n return this.activeEntity;\r\n }\r\n\r\n public setActiveSource(entityId: string) {\r\n this.activeEntity = this.model.getRootEntity().subEntities\r\n .filter(e => e.id == entityId)[0];\r\n }\r\n\r\n public getMetaData(): MetaData {\r\n return this.model;\r\n }\r\n\r\n public getData() {\r\n return this.data;\r\n }\r\n\r\n public getDataLoader(): DataLoader {\r\n return this.dataLoader;\r\n }\r\n\r\n public createFilter(): DataFilter\r\n public createFilter(sourceId: string, data: EasyDataTable, isLookup?: boolean): DataFilter\r\n public createFilter(sourceId?: string, data?: EasyDataTable, isLookup?: boolean): DataFilter {\r\n return new TextDataFilter(\r\n this.dataLoader, \r\n data || this.getData(), \r\n sourceId || this.activeEntity.id, \r\n isLookup);\r\n }\r\n\r\n public loadMetaData(): Promise<MetaData> {\r\n const url = this.resolveEndpoint('GetMetaData');\r\n this.startProcess();\r\n return this.http.get(url) \r\n .then(result => {\r\n if (result.model) {\r\n this.model.loadFromData(result.model);\r\n }\r\n\r\n return this.model;\r\n })\r\n .catch(error => { \r\n console.error(`Error: ${error.message}. Source: ${error.sourceError}`);\r\n return null;\r\n })\r\n .finally(() => {\r\n this.endProcess();\r\n });\r\n }\r\n\r\n public getHttpClient() {\r\n return this.http;\r\n }\r\n\r\n public fetchDataset() {\r\n this.data.clear();\r\n return this.dataLoader.loadChunk({offset: 0, limit: this.data.chunkSize, needTotal: true})\r\n .then(result => { \r\n for(const col of result.table.columns.getItems()) {\r\n this.data.columns.add(col);\r\n }\r\n\r\n this.data.setTotal(result.total);\r\n\r\n for(const row of result.table.getCachedRows()) {\r\n this.data.addRow(row);\r\n }\r\n\r\n return this.data;\r\n })\r\n }\r\n\r\n public fetchRecord(keys : CompoundRecordKey, sourceId?: string) {\r\n const url = this.resolveEndpoint('FetchRecord', { sourceId: sourceId || this.activeEntity.id });\r\n \r\n this.startProcess();\r\n return this.http.get(url, { queryParams: keys})\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public createRecord(obj: any, sourceId?: string) {\r\n const url = this.resolveEndpoint('CreateRecord', \r\n { sourceId: sourceId || this.activeEntity.id });\r\n\r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json' })\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public updateRecord(obj: any, sourceId?: string) {\r\n const url = this.resolveEndpoint('UpdateRecord', { sourceId: sourceId || this.activeEntity.id });\r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json' })\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public deleteRecord(obj: any, sourceId?: string) {\r\n const url = this.resolveEndpoint('DeleteRecord', { sourceId: sourceId || this.activeEntity.id });\r\n\r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json'})\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public setEndpoint(key: EasyDataEndpointKey, value: string) : void\r\n public setEndpoint(key: EasyDataEndpointKey | string, value: string) : void {\r\n this.endpoints.set(key, value);\r\n }\r\n\r\n public setEnpointIfNotExist(key: EasyDataEndpointKey, value: string): void\r\n public setEnpointIfNotExist(key: EasyDataEndpointKey | string, value: string): void {\r\n if (!this.endpoints.has(key))\r\n this.endpoints.set(key, value);\r\n }\r\n\r\n private endpointVarsRegex = /\\{.*?\\}/g;\r\n\r\n public resolveEndpoint(endpointKey: EasyDataEndpointKey, options?: any): string \r\n public resolveEndpoint(endpointKey: EasyDataEndpointKey | string, options?: any) : string {\r\n options = options || {};\r\n\r\n let result = this.endpoints.get(endpointKey);\r\n if (!result) {\r\n throw endpointKey + ' endpoint is not defined'; \r\n }\r\n\r\n let matches = result.match(this.endpointVarsRegex);\r\n if (matches) {\r\n for (let match of matches) {\r\n let opt = match.substring(1, match.length - 1);\r\n let optVal = options[opt];\r\n if (!optVal) {\r\n if (opt == 'modelId') {\r\n optVal = this.model.getId();\r\n }\r\n else if (opt == 'sourceId') {\r\n optVal = this.activeEntity.id;\r\n }\r\n else {\r\n throw `Parameter [${opt}] is not defined`;\r\n }\r\n }\r\n \r\n result = result.replace(match, optVal);\r\n }\r\n }\r\n \r\n return result;\r\n }\r\n\r\n public startProcess() {\r\n if (this.options.onProcessStart)\r\n this.options.onProcessStart();\r\n }\r\n\r\n public endProcess() {\r\n if (this.options.onProcessEnd)\r\n this.options.onProcessEnd();\r\n }\r\n\r\n private setDefaultEndpoints(endpointBase : string) {\r\n this.setEnpointIfNotExist('GetMetaData', combinePath(endpointBase, 'models/{modelId}'));\r\n this.setEnpointIfNotExist('FetchDataset', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/fetch'));\r\n this.setEnpointIfNotExist('FetchRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/fetch'));\r\n this.setEnpointIfNotExist('CreateRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/create'));\r\n this.setEnpointIfNotExist('UpdateRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/update'));\r\n this.setEnpointIfNotExist('DeleteRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/delete'));\r\n }\r\n}","import { MetaEntityAttr, i18n, utils as dataUtils } from '@easydata/core';\r\nimport { ValidationResult, Validator } from './validator';\r\n\r\nexport class TypeValidator extends Validator {\r\n\r\n constructor() {\r\n super();\r\n this.name = 'Type';\r\n }\r\n\r\n public validate(attr: MetaEntityAttr, value: any): ValidationResult {\r\n \r\n if (!dataUtils.IsDefinedAndNotNull(value) || value == '')\r\n return { successed: true };\r\n\r\n if (dataUtils.isNumericType(attr.dataType)) {\r\n if (!dataUtils.isNumeric(value))\r\n return { \r\n successed: false, \r\n messages: [ i18n.getText('NumberError') ]\r\n };\r\n\r\n\r\n if (dataUtils.isIntType(attr.dataType) \r\n && !Number.isInteger(Number.parseFloat(value))) {\r\n return {\r\n successed: false,\r\n messages: [ i18n.getText('IntNumberError') ]\r\n }\r\n }\r\n }\r\n\r\n return { successed: true };\r\n }\r\n}","import { MetaEntityAttr, i18n, utils as dataUtils } from '@easydata/core';\r\nimport { ValidationResult, Validator } from \"./validator\";\r\n\r\nexport class RequiredValidator extends Validator {\r\n\r\n constructor() {\r\n super();\r\n this.name = 'Required';\r\n }\r\n\r\n public validate(attr: MetaEntityAttr, value: any): ValidationResult {\r\n \r\n if (!attr.isNullable && (\r\n !dataUtils.IsDefinedAndNotNull(value)\r\n || value === ''))\r\n\r\n return {\r\n successed: false,\r\n messages: [ i18n.getText('RequiredError') ]\r\n }\r\n\r\n return { successed: true };\r\n }\r\n}","import { DataRow, i18n, utils as dataUtils } from '@easydata/core';\r\n\r\nimport { \r\n DefaultDialogService, \r\n DialogService, domel, EasyGrid, \r\n GridCellRenderer, GridColumn, RowClickEvent \r\n} from '@easydata/ui';\r\n\r\nimport { EntityEditFormBuilder } from '../form/entity_form_builder';\r\nimport { TextFilterWidget } from '../widgets/text_filter_widget';\r\n\r\nimport { DataContext } from '../main/data_context';\r\nimport { RequiredValidator } from '../validators/required_validator';\r\nimport { TypeValidator } from '../validators/type_validator';\r\nimport { Validator } from '../validators/validator';\r\nimport { EasyDataViewOptions } from './options';\r\nimport { setLocation } from '../utils/utils';\r\n\r\nexport class EntityDataView {\r\n private options: EasyDataViewOptions = {\r\n showFilterBox: true,\r\n showBackToEntities: true\r\n }\r\n\r\n private dlg: DialogService;\r\n\r\n private grid: EasyGrid;\r\n\r\n private filterWidget : TextFilterWidget;\r\n\r\n private defaultValidators: Validator[] = [ new RequiredValidator(), new TypeValidator()];\r\n\r\n constructor (\r\n private slot: HTMLElement, \r\n private context: DataContext, \r\n private basePath: string,\r\n options: EasyDataViewOptions) \r\n {\r\n this.options = dataUtils.assignDeep(this.options, options || {});\r\n\r\n this.dlg = new DefaultDialogService();\r\n\r\n const ent = this.context.getActiveEntity();\r\n if (!ent) {\r\n throw \"Can't find active entity for \" + window.location.pathname;\r\n }\r\n \r\n this.slot.innerHTML += `<h1>${ent.captionPlural || ent.caption}</h1>`;\r\n if (this.options.showBackToEntities) {\r\n domel(this.slot)\r\n .addChild('a', b => b\r\n .attr('href', 'javascript:void(0)')\r\n .text(`← ${i18n.getText('BackToEntities')}`)\r\n .on('click', (e) => {\r\n e.preventDefault();\r\n setLocation(this.basePath);\r\n })\r\n );\r\n }\r\n\r\n this.renderGrid();\r\n }\r\n\r\n private syncGridColumnHandler(column: GridColumn) {\r\n if (column.dataColumn) {\r\n const attr = this.context.getMetaData().getAttributeById(column.dataColumn.id);\r\n if (attr) {\r\n column.isVisible = attr.showOnView;\r\n }\r\n }\r\n }\r\n\r\n private renderGrid() {\r\n this.context.fetchDataset()\r\n .then(result => {\r\n const gridSlot = document.createElement('div');\r\n this.slot.appendChild(gridSlot);\r\n gridSlot.id = 'Grid';\r\n this.grid = new EasyGrid(dataUtils.assignDeep({\r\n slot: gridSlot,\r\n dataTable: result,\r\n paging: {\r\n pageSize: 15,\r\n allowPageSizeChange: true,\r\n pageSizeItems: [15, 30, 50, 100, 200]\r\n },\r\n showPlusButton: this.context.getActiveEntity().isEditable,\r\n plusButtonTitle: i18n.getText('AddRecordBtnTitle'),\r\n showActiveRow: false,\r\n onPlusButtonClick: this.addClickHandler.bind(this),\r\n onGetCellRenderer: this.manageCellRenderer.bind(this),\r\n onRowDbClick: this.rowDbClickHandler.bind(this),\r\n onSyncGridColumn: this.syncGridColumnHandler.bind(this)\r\n }, this.options.grid || {}));\r\n\r\n if (this.options.showFilterBox) {\r\n let filterWidgetSlot: HTMLElement;\r\n const filterBarDiv = domel('div')\r\n .addClass(`kfrm-form`)\r\n .setStyle('margin', '10px 0px')\r\n .addChild('div', b => \r\n filterWidgetSlot = b.toDOM()\r\n ).toDOM();\r\n \r\n this.slot.insertBefore(filterBarDiv, gridSlot);\r\n \r\n const dataFilter = this.context.createFilter();\r\n this.filterWidget = new TextFilterWidget(filterWidgetSlot, this.grid, dataFilter); \r\n }\r\n });\r\n }\r\n\r\n private manageCellRenderer(column: GridColumn, defaultRenderer: GridCellRenderer) {\r\n if (column.isRowNum) {\r\n column.width = 110;\r\n return (value: any, column: GridColumn, cell: HTMLElement, rowEl: HTMLElement) => {\r\n const b = domel('div', cell)\r\n .addClass(`keg-cell-value`);\r\n \r\n if (this.context.getActiveEntity().isEditable) {\r\n b.addChild('a', b => b\r\n .attr('href', 'javascript:void(0)')\r\n .text(i18n.getText('EditBtn'))\r\n .on('click', (ev) => this.editClickHandler(ev as MouseEvent, \r\n parseInt(rowEl.getAttribute('data-row-idx'))))\r\n )\r\n .addChild('span', b => b.text(' | '))\r\n .addChild('a', b => b\r\n .attr('href', 'javascript:void(0)')\r\n .text(i18n.getText('DeleteBtn'))\r\n .on('click', (ev) => \r\n this.deleteClickHandler(ev as MouseEvent, \r\n parseInt(rowEl.getAttribute('data-row-idx'))))\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private addClickHandler() {\r\n const activeEntity = this.context.getActiveEntity();\r\n const form = new EntityEditFormBuilder(this.context)\r\n .onSubmit(() => dlg.submit())\r\n .build();\r\n\r\n form.useValidators(this.defaultValidators);\r\n\r\n const dlg = this.dlg.open({\r\n title: i18n.getText('AddDlgCaption')\r\n .replace('{entity}', activeEntity.caption),\r\n body: form.getHtml(),\r\n onSubmit: () => {\r\n if (!form.validate())\r\n return false;\r\n \r\n form.getData()\r\n .then(obj => this.context.createRecord(obj))\r\n .then(() => {\r\n return this.refreshData();\r\n })\r\n .catch((error) => {\r\n this.processError(error);\r\n });\r\n }\r\n });\r\n }\r\n\r\n private editClickHandler(ev: MouseEvent, rowIndex: number) {\r\n this.grid.getData().getRow(rowIndex)\r\n .then(row => {\r\n if (row) {\r\n this.showEditForm(row);\r\n }\r\n })\r\n }\r\n\r\n private showEditForm(row: DataRow) {\r\n const activeEntity = this.context.getActiveEntity();\r\n\r\n const form = new EntityEditFormBuilder(this.context, { isEditForm: true, values: row })\r\n .onSubmit(() => dlg.submit())\r\n .build();\r\n \r\n form.useValidators(this.defaultValidators);\r\n\r\n const dlg = this.dlg.open({\r\n title: i18n.getText('EditDlgCaption')\r\n .replace('{entity}', activeEntity.caption),\r\n body: form.getHtml(),\r\n onSubmit: () => {\r\n if (!form.validate())\r\n return false;\r\n\r\n form.getData()\r\n .then(obj => this.context.updateRecord(obj))\r\n .then(() => { \r\n return this.refreshData();\r\n }) \r\n .catch((error) => {\r\n this.processError(error);\r\n });\r\n }\r\n })\r\n }\r\n\r\n private rowDbClickHandler(ev: RowClickEvent) {\r\n if (this.context.getActiveEntity().isEditable) {\r\n this.showEditForm(ev.row);\r\n }\r\n }\r\n\r\n private deleteClickHandler(ev: MouseEvent, rowIndex: number) {\r\n this.grid.getData().getRow(rowIndex)\r\n .then(row => {\r\n if (row) {\r\n const activeEntity = this.context.getActiveEntity();\r\n const keyAttrs = activeEntity.getPrimaryAttrs();\r\n const keyVals = keyAttrs.map(attr => row.getValue(attr.id));\r\n const keys = keyAttrs.reduce((val, attr, index) => { \r\n const property = attr.id.substring(attr.id.lastIndexOf('.') + 1);\r\n val[property] = keyVals[index];\r\n return val; \r\n }, {});\r\n this.dlg.openConfirm(\r\n i18n.getText('DeleteDlgCaption')\r\n .replace('{entity}', activeEntity.caption), \r\n i18n.getText('DeleteDlgMessage')\r\n .replace('{recordId}', Object.keys(keys)\r\n .map(key => `${key}:${keys[key]}`).join(';')), \r\n )\r\n .then((result) => {\r\n if (result) {\r\n this.context.deleteRecord(keys)\r\n .then(() => {\r\n return this.refreshData();\r\n })\r\n .catch((error) => {\r\n this.processError(error);\r\n });\r\n }\r\n })\r\n }\r\n });\r\n }\r\n\r\n private processError(error) {\r\n this.dlg.open({\r\n title: 'Ooops, something went wrong',\r\n body: error.message,\r\n closable: true,\r\n cancelable: false\r\n });\r\n }\r\n\r\n private refreshData(): Promise<void> {\r\n return this.context.fetchDataset()\r\n .then(() => {\r\n let processed = false;\r\n if (this.filterWidget) { \r\n processed = this.filterWidget.applyFilter(false);\r\n }\r\n\r\n if (!processed) {\r\n this.grid.refresh();\r\n }\r\n });\r\n }\r\n}","import { i18n, MetaData } from '@easydata/core';\r\nimport { domel } from '@easydata/ui';\r\nimport { setLocation } from '../utils/utils';\r\nimport { DataContext } from '../main/data_context';\r\n\r\nexport class RootDataView {\r\n private metaData: MetaData;\r\n\r\n constructor (\r\n private slot: HTMLElement, \r\n private context: DataContext, \r\n private basePath: string) {\r\n\r\n this.metaData = this.context.getMetaData();\r\n this.slot.innerHTML += `<h1>${i18n.getText('RootViewTitle')}</h1>`;\r\n\r\n this.renderEntitySelector();\r\n }\r\n\r\n private renderEntitySelector() {\r\n const entities = this.metaData.getRootEntity().subEntities;\r\n if (this.slot) {\r\n domel(this.slot)\r\n .addChild('div', b => b\r\n .addClass('ed-root')\r\n .addChild('div', b => b\r\n .addClass('ed-menu-description')\r\n .addText(i18n.getText(!this.metaData.isEmpty() ? 'EntityMenuDesc' : 'ModelIsEmpty'))\r\n )\r\n .addChild('ul', b => {\r\n b.addClass('ed-entity-menu');\r\n entities.forEach(ent => {\r\n b.addChild('li', b => {\r\n b.addClass('ed-entity-item')\r\n .on('click', () => {\r\n setLocation(`${this.basePath}/${decodeURIComponent(ent.id)}`);\r\n })\r\n .addChild('div', b => {\r\n b.addClass('ed-entity-item-caption')\r\n .addText(ent.captionPlural || ent.caption);\r\n });\r\n\r\n if (ent.description) {\r\n b.addChild('div', b => {\r\n b.addClass('ed-entity-item-descr')\r\n .addText(`${ent.description}`);\r\n });\r\n }\r\n });\r\n });\r\n })\r\n );\r\n }\r\n }\r\n}","import { utils as dataUtils } from '@easydata/core';\r\n\r\nimport { ProgressBar } from '../widgets/progress_bar';\r\nimport { DataContext } from '../main/data_context';\r\nimport { EntityDataView } from './entity_data_view';\r\nimport { EasyDataViewDispatcherOptions } from './options';\r\nimport { RootDataView } from './root_data_view';\r\n\r\nexport class EasyDataViewDispatcher {\r\n private context: DataContext;\r\n private basePath: string;\r\n\r\n private container: HTMLElement;\r\n\r\n private options: EasyDataViewDispatcherOptions = {\r\n container: '#EasyDataContainer',\r\n basePath: 'easydata' \r\n };\r\n\r\n constructor(options?: EasyDataViewDispatcherOptions) {\r\n this.options = dataUtils.assign(this.options, options || {});\r\n\r\n if (this.options.rootEntity) {\r\n this.options.showBackToEntities = false;\r\n this.basePath = '/';\r\n }\r\n else {\r\n this.basePath = this.normalizeBasePath(this.options.basePath);\r\n }\r\n\r\n this.setContainer(this.options.container);\r\n\r\n const progressBarSlot = document.createElement('div');\r\n const bar = new ProgressBar(progressBarSlot); \r\n \r\n const parent = this.container.parentElement;\r\n parent.insertBefore(progressBarSlot, parent.firstElementChild);\r\n \r\n this.context = new DataContext({\r\n endpoint: this.options.endpoint,\r\n dataTable: this.options.dataTable,\r\n onProcessStart: () => bar.show(),\r\n onProcessEnd: () => bar.hide()\r\n });\r\n\r\n }\r\n \r\n private normalizeBasePath(basePath: string): string {\r\n basePath = this.trimSlashes(basePath);\r\n const fullPath = decodeURIComponent(window.location.pathname);\r\n const idx = fullPath.toLocaleLowerCase().indexOf(basePath);\r\n return idx >= 0 ? fullPath.substring(0, idx + basePath.length) : '/';\r\n }\r\n\r\n private trimSlashes(path: string): string {\r\n return path.replace(/^\\/|\\/$/g, '')\r\n }\r\n\r\n private setContainer(container: HTMLElement | string) {\r\n if (!container) {\r\n throw 'Container is undefined';\r\n }\r\n\r\n if (typeof container === 'string') {\r\n if (container.length){\r\n if (container[0] === '.') {\r\n const result = document.getElementsByClassName(container.substring(1));\r\n if (result.length) \r\n this.container = result[0] as HTMLElement;\r\n }\r\n else {\r\n if (container[0] === '#') {\r\n container = container.substring(1);\r\n }\r\n this.container = document.getElementById(container);\r\n }\r\n if (!this.container) {\r\n throw Error('Unrecognized `container` parameter: ' + container + '\\n' \r\n + 'It must be an element ID, a class name (starting with .) or an HTMLElement object itself.');\r\n }\r\n }\r\n }\r\n else {\r\n this.container = container;\r\n }\r\n }\r\n\r\n private getActiveSourceId(): string | null {\r\n if (this.options.rootEntity) \r\n return this.options.rootEntity;\r\n\r\n const path = decodeURIComponent(window.location.pathname);\r\n const idIndex = this.basePath.length + 1;\r\n return idIndex < path.length ? path.substring(idIndex) : null;\r\n }\r\n\r\n run(): Promise<void> { \r\n this.attach();\r\n\r\n return this.context.loadMetaData()\r\n .then(() => {\r\n this.setActiveView();\r\n })\r\n .catch(error => console.error(error))\r\n }\r\n\r\n private setActiveView() {\r\n this.clear();\r\n\r\n const sourceId = this.getActiveSourceId();\r\n if (sourceId) {\r\n this.context.setActiveSource(sourceId);\r\n window['EDView'] = new EntityDataView(this.container, this.context,\r\n this.basePath, this.options);\r\n }\r\n else {\r\n window['EDView'] = new RootDataView(this.container, this.context, this.basePath);\r\n }\r\n }\r\n\r\n private clear() {\r\n this.container.innerHTML = '';\r\n this.context.getData().clear();\r\n }\r\n\r\n private onSetLocation = () => {\r\n this.setActiveView();\r\n }\r\n\r\n private attach = () => {\r\n window.addEventListener('ed_set_location', this.onSetLocation);\r\n window.addEventListener('popstate', this.onSetLocation);\r\n }\r\n\r\n detach() {\r\n window.removeEventListener('ed_set_location', this.onSetLocation);\r\n window.removeEventListener('popstate', this.onSetLocation);\r\n }\r\n}","import { i18n } from '@easydata/core';\r\n\r\n\r\nfunction addEasyDataCRUDTexts() {\r\n i18n.updateDefaultTexts({\r\n RequiredError: 'Value is required.',\r\n NumberError: 'Value should be a number',\r\n IntNumberError: 'Value should be an integer number',\r\n DateTimeError: 'Invalid date or time value',\r\n LookupSelectedItem: 'Selected item: ',\r\n LookupDlgCaption: 'Select {entity}',\r\n None: 'None',\r\n NavigationBtnTitle: 'Navigation values',\r\n CalendarBtnTitle: 'Open calendar',\r\n TimerBtnTitle: 'Open timer',\r\n AddBtnTitle: 'Add',\r\n AddRecordBtnTitle: 'Add record',\r\n EditBtn: 'Edit',\r\n DeleteBtn: 'Delete',\r\n SelectLink: '[ select ]',\r\n AddDlgCaption: 'Create {entity}',\r\n EditDlgCaption: 'Edit {entity}',\r\n DeleteDlgCaption: 'Delete {entity}',\r\n DeleteDlgMessage: 'Are you sure you want to remove this record: {{recordId}}?',\r\n EntityMenuDesc: 'Click on an entity to view/edit its content',\r\n BackToEntities: 'Back to entities',\r\n SearchBtn: 'Search',\r\n SearchInputPlaceholder: 'Search...',\r\n RootViewTitle: 'Entities',\r\n ModelIsEmpty: 'No entity was found.'\r\n });\r\n}\r\n\r\naddEasyDataCRUDTexts();"],"names":["root","factory","exports","module","define","amd","self","browserUtils","_isFirefox","_isIE","IsIE","ua","navigator","userAgent","indexOf","IsEdge","eval","IsFirefox","toLowerCase","_detectedIsMobileMode","_isMobileMode","undefined","detectIsMobileMode","oldValue","isMobileMode","window","matchMedia","matches","newValue","mobileModeChangeHandler","setIsMobileMode","value","onMobileModeChanged","callback","getMobileCssClass","addEventListener","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","d","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","DataType","EntityAttrKind","HttpMethod","EditorTag","i18n","utils","HttpRequest","xhr","descriptor","this","method","url","headers","queryParams","data","setHeader","name","setQueryParam","getXMLHttpRequest","getResponseHeaders","readyState","HEADERS_RECEIVED","headerMap","_i","arr_1","getAllResponseHeaders","trim","split","length","parts","header","shift","join","open","_this","UNSENT","keys","encodeURI","map","param","setRequestHeader","abort","repeatString","str","times","result","i","combinePath","path1","path2","charAt","currentLocale","englishUSLocaleSettings","shortDateFormat","longDateFormat","editDateFormat","shortTimeFormat","editTimeFormat","longTimeFormat","shortMonthNames","longMonthNames","shortWeekDayNames","longWeekDayNames","decimalSeparator","currency","defaultLocale","localeId","englishName","displayName","texts","ButtonOK","ButtonCancel","Yes","No","True","False","settings","allLocales","mappers","mapInfo","info","mappers_1","mapper","getCurrentLocale","setCurrentLocale","newLocale","assignDeep","getLocaleSettings","updateLocaleSettings","settingsToUpdate","updateLocaleInfo","localeData","localeInfoToUpdate","loadBrowserLocaleSettings","now","dateStr","timeStr","dateFormat","timeFormat","lang","language","Date","toLocaleDateString","year","month","day","toLocaleTimeString","hour","minute","second","replace","buildShortDateTimeFormat","dataType","format","localeSettings","Time","buildLongDateTimeFormat","addMapper","push","getLocales","locale","sort","a","b","setLocale","l","console","warn","getText","args","arguments","textsObj","resText","argLength","getOneLocaleSetting","getShortMonthName","monthNum","getLongMonthName","getShortWeekDayName","dayNum","toString","getLongWeekDayName","updateLocaleTexts","error","updateDefaultTexts","addLocale","localeInfo","resetLocales","dateTimeToStr","dateTime","DateTime","numberToStr","number","type","toUpperCase","cachedSequenceFormats","values_2","filter","v","values_1","Number","parseInt","forEach","index","values","formatWithSequence","slice","toLocaleString","digits","style","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","getNumberFormatOptions","mask","ch","reverse","convertWithMask","Math","trunc","booleanToStr","bool","concat","getAllDataTypes","item","getDateDataTypes","getStringDataTypes","String","Memo","FixedChar","_numericTypes","Byte","Word","Int32","Int64","Float","Currency","Autoinc","getNumericDataTypes","_intTypes","assignDeepCore","hashSet","target","sources","sources_1","source","sourceVal","has","Array","isArray","createArrayFrom","set","create","getPrototypeOf","collection","collection_1","assign","WeakMap","getIfDefined","defaultValue","IsDefinedAndNotNull","copyArrayTo","collection1","collection2","len1","len2","findItemById","array","id","arrLength","idx","findItemIndexById","indexOfArrayItem","arr","len","moveArrayItem","index1","index2","splice","removeArrayItem","insertArrayItem","fillArray","start","end","relativeStart","k","max","min","relativeEnd","final","shiftToFitWindow","absLeft","width","body","document","getElementsByTagName","winWidth","innerWidth","documentElement","clientWidth","absRight","isObject","val","isNumericType","dtype","isIntType","isNumeric","isNaN","parseFloat","isFinite","areCompatibleDataTypes","type1","type2","Unknown","isPropSet","propName","symbols","squeeze","maxlen","step","nextIndex","replaceAtString","substr","getRandomInt","floor","random","safeParseInt","res","generateId","prefix","prfx","pml","ptt","squeezeMoniker","randValue","maxSymbolIndex","targetBase","buffer","rest","intToNum36","getTime","strToDateTime","normalizedValue","formatItems","dateItems","monthIndex","dayIndex","yearIndex","hourIndex","minutesIndex","secondsIndex","today","getFullYear","getMonth","getDate","getDaysInMonth","_a","strToTime","timeItems","DT_FORMAT_RGEX","date","yearStr","getHours","getMinutes","getSeconds","hour12","isPm","yyyy","yy","substring","MMMM","MMM","MM","M","dd","HH","H","hh","h","tt","mm","ss","match","$1","extendStatics","ColumnAlignment","HttpActionResult","request","promise","getPromise","getRequest","then","onfulfilled","onrejected","catch","finally","onfinally","__extends","setPrototypeOf","__proto__","p","TypeError","__","constructor","__assign","t","s","n","apply","HttpResponseError","_super","status","message","Error","HttpClient","defaultHeaders","customPayload","_responseBody","configurable","options","send","Get","post","Post","put","Put","delete","Delete","contentType","XMLHttpRequest","desc","beforeEachRequest","onRequest","dataToSend","JSON","stringify","Promise","resolve","reject","responseType","onerror","responseText","onreadystatechange","responseContentType","getResponseHeader","responseObj","response","parse","onResponse","decodeArrayBuffer","uintArray","reader","FileReader","onloadend","DONE","readAsText","Blob","MetaEntity","parent","isEditable","caption","description","attributes","subEntities","loadFromData","model","dto","captionPlural","namePlur","ied","ents","newEntity","createEntity","attrs","newAttr","createEntityAttr","scan","processAttribute","processEntity","opts","stop","internalProcessEntity","entity","attrCount","attr","subEntityCount","getFirstPrimaryAttr","getPrimaryAttrs","isPrimaryKey","MetaEntityAttr","size","isForeignKey","isNullable","showOnView","showOnCreate","showOnEdit","showInLookup","lookupAttr","expr","kind","Data","cptn","ipk","ifk","lattr","lookupEntity","lent","dataAttr","dattr","lookupDataAttr","ldattr","isDataType","defVal","nul","ivis","sov","soc","soe","sil","displayFormat","dfmt","udata","userData","edtr","defaultEditor","getEditorById","createValueEditor","ValueEditor","tag","resType","defValue","defval","rtype","accept","multiline","subType","getValueText","text","_b","_c","MetaData","mainEntity","rootEntity","displayFormats","Map","getMainEntity","loadFromJSON","stringJson","version","vers","editors","newEditor","entroot","dtypeStr","formats","getDisplayFormats","getDisplayFormatsForType","getDefaultFormat","f","isdef","setData","isEmpty","getId","getName","getRootEntity","editorId","editor","getAttributeById","attrId","getEntityAttrById","checkAttrProperty","attribute","listByEntityWithFilter","filterFunc","ent","entIdx","newEnt","items","isEntity","attrIdx","listByEntity","resultEntities","resultAttributes","newOpts","includeRootData","sortCheck","sortEntities","attrPlacement","clear","addDefaultValueEditors","addOrUpdateValueEditor","ve","getEntitiesTree","getEntitiesTreeWithFilter","getFullEntityPathByAttr","sep","getEntityPathByAttr","entityCaption","entityText","getAttributeText","attrText","entityPath","RegExp","runThroughEntities","getFirstAttributeByFilter","AggregationSettings","colStore","aggregates","groups","useGrandTotals","useRecordCount","_caseSensitiveGroups","COUNT_FIELD_NAME","updateCompareProc","compareValues","strictCompare","caseInsensitiveCompare","addGroup","cols","columns","getColumnIds","from","to","validateColumns","hasColumnsInUse","addAggregateColumn","colIndexOrId","funcId","colId","validateAggregate","addGrandTotals","addCounts","getGroups","grp","getInternalGroups","lastGroup","getAggregates","hasAggregates","hasGroups","hasGrandTotals","hasRecordCount","drop","caseSensitiveGroups","c","aggr","needAggrCalculation","saveToData","ugt","urc","csg","buildGroupKey","group","row","caseInsensitive","keyVal","getValue","value1","value2","liquid","DataColumn","label","originAttrId","isAggr","groupFooterColumnTemplate","gfct","calculatedWidth","DataColumnList","_dateColumnIdx","add","colOrDesc","col","updateDateColumnIdx","getItems","count","move","newIndex","oldIndex","getIndex","getDateColumnIndexes","removeAt","removeDate","DataRow","toArray","colIdOrIndex","RangeError","setValue","EasyDataTable","_chunkSize","_elasticChunks","cachedRows","total","loader","needTotal","isInMemory","chunkSize","elasticChunks","inMemory","_columns","onUpdate","colDesc","rows","rowData","createRow","addRow","getRows","params","fromIndex","pageSize","page","offset","limit","endIndex","loadChunk","table","getCachedRows","getCachedCount","fireUpdated","getRow","getTotal","setTotal","dataOrRow","dateIdx","column","mapDate","rowOrValues","newRow","dateIdx_1","cachedTotal","totalIsKnown","EasyGuid","newGuid","EventEmitter","silentMode","events","subscribe","eventType","event","getEventRecByType","eventCallback","eventCallbacks","unsubscribe","callbackId","fire","postpone","force","eventRec","eqevent_1","emitAllFunc","setTimeout","enterSilentMode","exitSilentMode","isSilent","event_1","renderLiquidTemplate","template","vars","liquidVarRegexp","x","NaN","ceil","sourceTable","sourceId","isLookup","filterValue","justServerSide","applyCore","class","filters","lookup","filteredTable","applyInMemoryFilter","words","w","suitableColumns","hasEnterance","normalized","word","getElementAbsolutePos","element","y","position","box","defaultBoundingClientRect","top","right","bottom","left","height","getBoundingClientRect","docElem","scollPos","pageYOffset","scrollTop","pageXOffset","scrollLeft","getScrollPos","clientTop","clientLeft","round","eqCssPrefix","__spreadArray","pack","ar","DomElementBuilder","createElement","parentElement","appendChild","addChild","childBuilder","builder","domel","addChildElement","attrValue","setAttribute","focus","title","dataId","dataValue","removeAttribute","show","removeStyle","hide","toHide","setStyle","visible","isVisible","offsetWidth","offsetHeight","getClientRects","addClass","className","classNames","fullList","classList","removeClass","remove","toggleClass","toggle","on","listener","eventTypes","off","removeEventListener","styleId","styleValue","setProperty","removeProperty","innerText","html","innerHTML","oldElem","tagName","replaceWith","addText","textEl","createTextNode","addHtml","toDOM","appendTo","DomTextAreaElementBuilder","DomInputElementBuilder","valueAsDate","valueAsNumber","maskPattern","input","inputHandler","e","mskd","startSelection","selectionStart","el","test","selectionEnd","keyCode","preventDefault","selection","onlyLodash","createEvent","initEvent","dispatchEvent","char","fromCharCode","charCode","mskd_1","selectionStart_1","selection_1","event_2","DomSelectElementBuilder","addOption","option","selected","HTMLDivElement","HTMLSpanElement","HTMLAnchorElement","HTMLButtonElement","HTMLImageElement","HTMLInputElement","HTMLTextAreaElement","HTMLSelectElement","DropEffect","touchEventIsDefined","TouchEvent","AutoResizeColumns","EqDragEvent","dragImage","sourceEvent","dropEffect","Allow","pageX","pageY","MouseEvent","touches","Position","ev","eqDragManager","DragManager","delta","draggableItem","finishedSuccessfully","mouseDownPosition","containerDescriptors","containerDescriptorIndex","None","classPrefix","DRAG_DISABLED_ATTR","registerDraggableItem","ondragstart","detectDragging","hasAttribute","stopPropagation","cursorPosition","abs","startDragging","mouseMoveEventListener","mouseMoveDragListener","beforeDragStart","cloneNode","renderer","updateCusror","updateImageClass","scope","updateDragItemPosition","onDragStart","mouseDownListener","mouseUpListener","endDraggind","dropContDesc","container","scopes","onDrop","onDragLeave","onDragEnd","removeChild","registerDropContainer","removeDropContainer","descriptorOrSlot","descs","descs_1","detectDragEnterEvent","dragEnterEvent","detectDragLeaveEvent","dragLeaveEvent","event_3","onDragOver","setCursorStyle","Forbid","cursor","children","pos","event_4","onDragEnter","event_5","containerPos","CellRendererType","cssPrefix","DFMT_REGEX","GridColumnAlign","StringCellRendererDefault","cellValueElement","rowElement","align","NONE","NumberCellRendererDefault","strValue","dataColumn","_","DateTimeCellRendererDefault","isDate","timeOptions","BoolCellRendererDefault","GridCellRendererStore","renderers","defaultRenderers","registerRenderer","setDefaultRenderer","STRING","NUMBER","DATETIME","BOOL","getDefaultRenderer","columnType","cellType","getCellType","getDefaultRendererByType","rendererType","getRenderer","Bool","DialogFooterAlignment","GridColumn","grid","isRowNum","_label","_description","widthOptions","columnWidths","alignment","Left","LEFT","Center","CENTER","Right","RIGHT","MapAlignment","default","cellRenderer","cellRendererStore","rowNumColumn","onGetCellRenderer","GridColumnList","columnList","sync","hasRowNumCol","rowNumCol","onSyncGridColumn","EasyGrid","pagination","paginationOptions","maxButtonCount","useBootstrap","defaultDataGridOptions","slot","dataTable","fixHeightOnFirstRender","syncGridColumns","useRowNumeration","allowDragDrop","calculator","paging","enabled","pageSizeItems","autoResize","Always","stringColumns","numberColumns","boolColumns","dateColumns","otherColumns","showPlusButton","viewportRowsCount","showActiveRow","rowsOnPagePromise","containerInitialHeight","firstRender","prevRowTotals","landingIndex","landingSlot","_activeRowIndex","mergeOptions","processColumnWidthsOptions","eventEmitter","setSlot","init","colWidthOptions","pagingOptions","knownTypes","getElementById","getElementsByClassName","onInit","onRowClick","onRowDbClick","onPlusButtonClick","onColumnChanged","onColumnDeleted","onColumnMoved","onPageChanged","onActiveRowChanged","activeRowIndex","showLandingSlot","hideLandingSlot","refresh","fireEvent","columnId","getData","getColumns","destroy","clearDOM","render","hasData","clientHeight","rootDiv","renderHeader","headerDiv","renderBody","bodyDiv","renderFooter","footerDiv","gridContainer","needAutoResize","Never","updateHeight","resizeColumns","firstRow","bodyCellContainerDiv","firstElementChild","viewportHeight_1","bodyViewportDiv","sbHeight","getContainerWidth","reduce","sum","current","headerViewportDiv","headerCellContainerDiv","headerRowDiv","hd","renderColumnHeader","renderHeaderButtons","containerWidth","colBuilder","colDiv","attrLabel","showAggrs","canShowAggregates","showProgress","getRowsToRender","hideProgress","rowsToRender","groups_1","updateTotalsState","tr","renderRow","showGrandTotalsOnEachPage","isLastPage","onViewportKeydown","bind","aggrSettings","isLast","changeLevel","level","renderTotalsRow","applyGroupColumnTemplate","colIndex","renderCell","aggrContainer","getAggrContainer","aggrCols","getAggregateData","aggrCols_1","aggrColId","isLastGroupColumn","groupColIndex","aggrColIndex","groupFooterTemplate","firstChild","cellDiv","rowCount","querySelectorAll","ensureRowVisibility","rowOrIndex","getDataRow","rowRect","viewportRect","rowTop","rowBottom","viewportHeight","windowHeight","innerHeight","footerPaginateDiv","renderPageNavigator","pageInfoBlock","renderPageInfoBlock","pageInfoDiv","fistPageRecordNum","lastPageRecordNum","totalStr","getLocalIndexByGlobal","getGlobalIndexByLocal","indexGlobal","rowBuilder","rowIndex","colindex","cellElement","valueCell","setPage","paginateDiv","prefix_1","buttonClickHandler_1","getAttribute","renderPageCell","pageIndex","content","disabled","extreme","active","li","a_1","newA","ul","cell","pageCount","zeroBasedIndex","firstPageIndex","lastPageIndex","allowPageSizeChange","pageSizes","selectSize","sel_1","selOptions","selSet","Set","labelDiv","handler","handlerId","plusButtonTitle","colElems","rowElem","display","landingPos","newLandingIndex","cols_1","colPos","insertBefore","updateActiveRow","activeRow","getActiveRow","visibility","sumWidth","headerCells","headerIdx","_loop_1","this_1","cellValues","maxWidth","whiteSpace","maxOption","minOption","Calendar","yearRange","setDate","currentDate","dateChanged","onDateChanged","DateTimePicker","calendar","timePicker","setDateTime","currentDateTime","setTime","getDateTime","showCalendar","createCalendar","showDateTimeInput","timePickerIsUsed","showTimePicker","oneClickDateSelection","dateTimeChanged","createTimePicker","onTimeChanged","time","setHours","setMinutes","anchor","beforeShow","onApply","cancel","onCancel","onDateTimeChanged","DefaultCalendar","daysOfWeek","months","calendarBody","isManualInputChanging","selectedMonth","selectedYear","rerenderMonth","renderManualDateInput","headerTextElem","renderCalendarButtons","getInputDateFormat","newDate","manualInputElem","jump","updateDisplayedDateValue","prev","selectMonthElem","selectYearElem","next","rerenderSelectYear","exec","minusYear","plusYear","op","firstDay","getDay","daysInMonth","setFullYear","setMonth","dayOfWeek","cellsDrawnInLastRow","cellsToDraw","TimePicker","currentTime","timeChanged","DefaultTimePicker","updateDisplayedTime","hoursInput","minutesInput","timeText","slidersBuilder","timeToDraw","DefaultDateTimePicker","sb","zIndex","renderButtons","globalMouseDownHandler","srcElement","contains","nowButton","submitButton","calendarSlot","timePickerSlot","anchorPos","parentPos","DefaultDialogService","openConfirm","closable","submitable","cancelable","onSubmit","openPrompt","submitOnEnter","arrangeParents","beforeOpen","processInput","dialog","DefaultDialog","onDestroy","dlg","untrack","track","createSet","DefaultDialogSet","openDialogs","openProgress","DefaultProgressDialog","getAllDialogs","closeAllDialogs","close","submitHandler","token","cancelHandler","keydownHandler","isActiveDialog","dialogId","windowElement","headerElement","alertElement","bodyElement","alignClass","footerAlignment","footerElement","bb","submitButtonText","recaptchaSiteKey","grecaptcha","ready","execute","action","cancelButtonText","getRootElement","getSubmitButtonElement","getCancelButtonElement","windowDiv","querySelector","clearAlert","onInput","onShow","submit","disableButtons","button","enableButtons","showAlert","reason","alert","windowDivs","turnOn","contentElement","progressElement","determinated","updateContent","updateProgress","progress","in01","num","dialogService","currentDialog","currentIndex","getCurrent","openNext","openPrev","dlgOptions","GridPageInfo","GridItemsPerPage","ButtonApply","ButtonNow","LblTotal","internalDateFormat","internalTimeFormat","getEditDateTimeFormat","setLocation","path","state","history","pushState","Event","validate","successed","editFormat","messages","Validator","context","validators","DateTimeValidator","getHtml","setHtmlInt","errorsDiv","clearErrors","isValid","getMetaData","validateValue","markInputValid","filePromises","inputs","property","lastIndexOf","checked","fileToBase64","files","mapValue","all","file","readAsDataURL","onload","useValidator","useValidators","validator","internalFormat","valid","instantMode","instantTimeout","stringDefRenderer","highlightCellRenderer","numDefRenderer","horizClass","isEdgeOrIE","filterInput","inputKeydownHandler","inputKeyupHandler","clearButtonClickHander","searchButtonClickHandler","applyFilter","applyFilterTimeout","clearTimeout","checkChange","defaultRenderer","highlightText","HTMLElement","normalizedContent","indexInMas","lowerWord","highlightSpan","backgroundColor","item1","item2","addDelta","div","isIE","reset","form","EntityEditForm","setupLookupField","readOnly","inputEl","resolveInputType","lookupTable","chunkParams","getDataLoader","widgetSlot","ds","gridSlot","selectedSlot","selectedValue","updateSelectedValue","fetchRecord","lookupGrid","dataFilter","createFilter","TextFilterWidget","setupDateTimeField","hidden","applySumbit","setSeconds","pickerOptions","setMilliseconds","dtp","setupListField","setupFileField","setupTextField","setupTextArea","addFormField","Lookup","isEditForm","resolveEditor","required","sumbitCallback","build","fb","formHtml","getActiveEntity","resolveEndpoint","startProcess","getHttpClient","resultSet","totalRecords","meta","hasNext","endProcess","endpoints","endpointVarsRegex","http","metaDataId","dataLoader","EasyDataServerLoader","dataTableOptions","setDefaultEndpoints","endpoint","activeEntity","setActiveSource","entityId","TextDataFilter","loadMetaData","sourceError","fetchDataset","createRecord","updateRecord","deleteRecord","setEndpoint","setEnpointIfNotExist","endpointKey","opt","optVal","onProcessStart","onProcessEnd","endpointBase","isInteger","basePath","showFilterBox","showBackToEntities","defaultValidators","RequiredValidator","TypeValidator","location","pathname","renderGrid","syncGridColumnHandler","addClickHandler","manageCellRenderer","rowDbClickHandler","filterBarDiv","filterWidget","rowEl","editClickHandler","deleteClickHandler","EntityEditFormBuilder","refreshData","processError","showEditForm","keyAttrs","processed","metaData","renderEntitySelector","entities","decodeURIComponent","onSetLocation","setActiveView","attach","normalizeBasePath","setContainer","progressBarSlot","bar","ProgressBar","DataContext","trimSlashes","fullPath","toLocaleLowerCase","getActiveSourceId","idIndex","run","EntityDataView","RootDataView","detach","RequiredError","NumberError","IntNumberError","DateTimeError","LookupSelectedItem","LookupDlgCaption","NavigationBtnTitle","CalendarBtnTitle","TimerBtnTitle","AddBtnTitle","AddRecordBtnTitle","EditBtn","DeleteBtn","SelectLink","AddDlgCaption","EditDlgCaption","DeleteDlgCaption","DeleteDlgMessage","EntityMenuDesc","BackToEntities","SearchBtn","SearchInputPlaceholder","RootViewTitle","ModelIsEmpty"],"sourceRoot":""}
|