diff --git a/easydata.js/packs/core/__tests__/assign-deep.test.ts b/easydata.js/packs/core/__tests__/assign-deep.test.ts index bcd09527..763aa2b6 100644 --- a/easydata.js/packs/core/__tests__/assign-deep.test.ts +++ b/easydata.js/packs/core/__tests__/assign-deep.test.ts @@ -1,6 +1,7 @@ import { expect, test } from 'vitest' import {utils} from "../src/public_api" +// Create a fake DOM for testing with $.ajax test('AssignDeep', () => { let object1 = { data: { @@ -30,4 +31,4 @@ test('AssignDeep', () => { expect(result.val).toBe(object1.val); expect(result.prop).toBe(object2.prop); expect(result.column).toBe(object3.column); -}) \ No newline at end of file +}) diff --git a/easydata.js/packs/core/__tests__/assign-deep2.test.ts b/easydata.js/packs/core/__tests__/assign-deep2.test.ts new file mode 100644 index 00000000..bd1933d2 --- /dev/null +++ b/easydata.js/packs/core/__tests__/assign-deep2.test.ts @@ -0,0 +1,37 @@ +import { expect, test } from 'vitest' +import {utils} from "../src/public_api" + +test('should deeply assign properties from source to target', () => { + const source = { + scalar: 'value', + refObject: { + nested: 'nestedValue', + array: [1, 2, 3], + html: document.createElement('div'), + }, + refArray: [{nested: 'nestedValue'}, 1, 'two'], + refArrayRef: [{nested: 'nestedValueRef'}, 1, 'two'], + htmlRef: document.createElement('div'), + }; + + // @ts-ignore + source.refArray[3] = source.refArray; + + const target = utils.assignDeep({}, source); + + expect(target).toEqual({ + scalar: 'value', + refObject: { + nested: 'nestedValue', + array: [1, 2, 3], + html: document.createElement('div'), + }, + refArray: [{nested: 'nestedValue'}, 1, 'two', target.refArray], + refArrayRef: [{nested: 'nestedValueRef'}, 1, 'two'], + htmlRef: document.createElement('div'), + }); + expect(target.refObject).not.toBe(source.refObject); + expect(target.refObject.html).toBe(source.refObject.html); + expect(target.refArray[0]).toBe(source.refArray[0]); + expect(target.refArray[3]).toBe(source.refArray); +}); diff --git a/easydata.js/packs/core/package.json b/easydata.js/packs/core/package.json index 25140cd1..8b144aee 100644 --- a/easydata.js/packs/core/package.json +++ b/easydata.js/packs/core/package.json @@ -30,4 +30,4 @@ "files": [ "dist" ] -} \ No newline at end of file +} diff --git a/easydata.js/packs/core/src/i18n/i18n.ts b/easydata.js/packs/core/src/i18n/i18n.ts index 8e6c1370..cc76ecae 100644 --- a/easydata.js/packs/core/src/i18n/i18n.ts +++ b/easydata.js/packs/core/src/i18n/i18n.ts @@ -427,6 +427,12 @@ export namespace i18n { else if (format == 'F') { format = buildLongDateTimeFormat(DataType.DateTime); } + else if (format == 'u') { + format = buildUniversalDateTimeFormat(dataType); + } + else { + format = buildUniversalDateTimeFormat(dataType); + } } else { format = buildShortDateTimeFormat(dataType); @@ -471,6 +477,25 @@ export namespace i18n { return format; } + function buildUniversalDateTimeFormat(dataType: DataType): string { + const localeSettings = getLocaleSettings(); + let format: string; + const dateFormat = 'yyyy-MM-dd'; + switch (dataType) { + case DataType.Date: + format = dateFormat; + break; + case DataType.Time: + format = localeSettings.shortTimeFormat; + break; + default: + format = dateFormat + ' ' + localeSettings.shortTimeFormat; + break; + } + + return format; + } + /** * Converts a numeric value to the string taking into the account the decimal separator * @param num - the number to convert diff --git a/easydata.js/packs/core/src/utils/utils.ts b/easydata.js/packs/core/src/utils/utils.ts index 35c6edff..1646e2a3 100644 --- a/easydata.js/packs/core/src/utils/utils.ts +++ b/easydata.js/packs/core/src/utils/utils.ts @@ -8,18 +8,18 @@ export namespace utils { export function getDateDataTypes(): DataType[] { return [DataType.Time, DataType.Date, DataType.DateTime] } - + export function getStringDataTypes(): DataType[] { return [DataType.String, DataType.Memo, DataType.FixedChar] } - const _numericTypes = [DataType.Byte, DataType.Word, DataType.Int32, + const _numericTypes = [DataType.Byte, DataType.Word, DataType.Int32, DataType.Int64, DataType.Float, DataType.Currency, DataType.Autoinc]; export function getNumericDataTypes(): DataType[] { return _numericTypes; } - + const _intTypes = [DataType.Byte, DataType.Word, DataType.Int32, DataType.Int64, DataType.Autoinc]; @@ -28,16 +28,16 @@ export namespace utils { /** * Copy the content of all objests passed in `args` parameters into `target` * and returns the result - * NB: This function copies only the first level properties. - * For a deep copy please use `assignDeep` - * @param target - the target object + * NB: This function copies only the first level properties. + * For a deep copy please use `assignDeep` + * @param target - the target object * @param args - an array of the source objects */ export function assign(target: any, ...args: any[]): any { if (!target) { target = {}; } - + for (let i = 0; i < args.length; i++) { let source = args[i]; if (source && source.hasOwnProperty) { @@ -45,7 +45,7 @@ export namespace utils { if (source.hasOwnProperty(key)) { target[key] = source[key]; } - } + } } } @@ -55,10 +55,10 @@ export namespace utils { /** * Copy the content of all objests passed in `args` parameters into `target` * and returns the result - * NB: This function make a deep copy - + * NB: This function make a deep copy - * so `assignDeep` will be called recursively for all object properties - * on the first level. - * @param target - the target object + * on the first level. + * @param target - the target object * @param sources - an array of the source objects */ export function assignDeep(target: any, ...sources:any[]): any { @@ -72,40 +72,40 @@ export namespace utils { for (let source of sources) { if (source && source.hasOwnProperty) { - for (let key in source) { + for (let key in source) { if (source.hasOwnProperty(key)) { let sourceVal = source[key]; //we don't make a deep copy of HTML elements and any other property marked as a 'reference' (ends with 'Ref') - if (sourceVal !== null && typeof sourceVal === 'object' - && !key.endsWith('Ref') && !(sourceVal instanceof HTMLElement)) + if (sourceVal !== null && typeof sourceVal === 'object' + && !key.endsWith('Ref') && !(sourceVal instanceof HTMLElement)) { if (hashSet.has(sourceVal)) { target[key] = hashSet.get(sourceVal); - } + } else { if (Array.isArray(sourceVal)) { target[key] = createArrayFrom(sourceVal); hashSet.set(sourceVal, target[key]); - } + } else { if (typeof target[key] == 'undefined' || target[key] == null) { target[key] = Object.create(Object.getPrototypeOf(sourceVal)); } - + hashSet.set(sourceVal, target[key]); - assignDeepCore(hashSet, target[key], [sourceVal]); + assignDeepCore(hashSet, target[key], [sourceVal]); } } - } + } else { target[key] = sourceVal; } } - } + } } } - + return target; } @@ -146,8 +146,8 @@ export namespace utils { /** * Searches an array of the objects which implement ItemWithId by ID * Returs the found object or null. - * @param array - * @param id + * @param array + * @param id */ export function findItemById(array: Array, id): T { var arrLength = array.length; @@ -172,8 +172,8 @@ export namespace utils { /** * Searches an array of the objects which implement ItemWithId by ID * Returs the index of the found element, or -1 if nothing was found. - * @param array - * @param id + * @param array + * @param id */ export function indexOfArrayItem(arr: Array, item: T): number { if (arr.indexOf) { @@ -192,9 +192,9 @@ export namespace utils { /** * Moves an item in some array to a new position - * @param array - * @param index1 - * @param index2 + * @param array + * @param index1 + * @param index2 */ export function moveArrayItem(array: Array, index1: number, index2: number) { if (index1 >= array.length) { @@ -210,9 +210,9 @@ export namespace utils { } /** - * Searches for a particular item in the array are removes that item if found. + * Searches for a particular item in the array are removes that item if found. * @param arr - * @param value + * @param value */ export function removeArrayItem(arr: Array, value: T): T { let index = arr.indexOf(value); @@ -222,13 +222,13 @@ export namespace utils { } export function insertArrayItem(arr: Array, index: number, value: T) { - arr.splice(index, 0, value); + arr.splice(index, 0, value); } export function fillArray(arr: Array, value: T, start: number = 0, end?: number) { let len = arr.length >>> 0; var relativeStart = start >> 0; - + var k = relativeStart < 0 ? Math.max(len + relativeStart, 0) : Math.min(relativeStart, len); @@ -250,12 +250,12 @@ export namespace utils { //------------ DOM utils ------------ /** - * Calculates the shift on which we need to move our element horizontally + * Calculates the shift on which we need to move our element horizontally * to find current window - * @param absLeft - * @param width + * @param absLeft + * @param width */ - export function shiftToFitWindow(absLeft: number, width: number): number { + export function shiftToFitWindow(absLeft: number, width: number): number { let body = document.getElementsByTagName('body')[0]; let winWidth = window.innerWidth || document.documentElement.clientWidth || body.clientWidth; @@ -282,9 +282,9 @@ export namespace utils { } /** - * Returns `true` if the `DataType` value passed in the parameter - * represents some numeric type - * @param dtype + * Returns `true` if the `DataType` value passed in the parameter + * represents some numeric type + * @param dtype */ export function isNumericType(dtype: DataType): boolean { const index = _numericTypes.indexOf(dtype); @@ -292,9 +292,9 @@ export namespace utils { } /** - * Returns `true` if the `DataType` value passed in the parameter - * represents some numeric type - * @param dtype + * Returns `true` if the `DataType` value passed in the parameter + * represents some numeric type + * @param dtype */ export function isIntType(dtype: DataType): boolean { const index = _intTypes.indexOf(dtype); @@ -312,24 +312,24 @@ export namespace utils { } /** - * Returns `true` if two data types passed in parameters - * are compatible - so it's safe to copy the values between - * two expressions with these two types - * @param type1 - * @param type2 + * Returns `true` if two data types passed in parameters + * are compatible - so it's safe to copy the values between + * two expressions with these two types + * @param type1 + * @param type2 */ export function areCompatibleDataTypes(type1: DataType, type2: DataType): boolean { - return typeof type1 == "undefined" || typeof type2 == "undefined" || type1 == DataType.Unknown || type2 == DataType.Unknown - || (type1 == type2) || (type1 == DataType.Date && type2 == DataType.DateTime) + return typeof type1 == "undefined" || typeof type2 == "undefined" || type1 == DataType.Unknown || type2 == DataType.Unknown + || (type1 == type2) || (type1 == DataType.Date && type2 == DataType.DateTime) || (type1 == DataType.DateTime && type2 == DataType.Date); } /** - * Returns `true` if the property with named `propName` - * in the object `obj` has some value + * Returns `true` if the property with named `propName` + * in the object `obj` has some value * @param obj - * @param propName + * @param propName */ export function isPropSet(obj, propName) { return obj[propName] || obj[propName.toLowerCase()] || obj[propName.toUpperCase()]; @@ -338,13 +338,13 @@ export namespace utils { //-------------- ID generator ----------- - + const prefixIdLen = 4; const symbols = "0123456789abcdefghijklmnopqrstuvwxyz"; const magicTicks = 636712160627685350; /** - * Generates an unique ID + * Generates an unique ID */ export function generateId(prefix : string) : string { if (!prefix) { @@ -356,12 +356,12 @@ export namespace utils { } //adding 3 random symbols - var randCharPart = symbols[getRandomInt(0, symbols.length)] + + var randCharPart = symbols[getRandomInt(0, symbols.length)] + symbols[getRandomInt(0, symbols.length)] + symbols[getRandomInt(0, symbols.length)]; - + var randInt = getRandomInt(0, 10000); - //generating main ID part + //generating main ID part //it's a 36-base representation of some random number based on current value of ticks let ticksNum36 = intToNumBase(getNowTicks() - magicTicks - randInt); return prfx + randCharPart + ticksNum36; @@ -430,7 +430,7 @@ export namespace utils { function getNowTicks(): number { return (621355968e9 + (new Date()).getTime() * 1e4) } - + function safeParseInt(str: string) { const res = parseInt(str); if (isNaN(res)) @@ -453,50 +453,50 @@ export namespace utils { const normalizedFormat = format.replace(/[^a-zA-Z0-9_]/g, '-'); const formatItems = normalizedFormat.split('-'); const dateItems = normalizedValue.split('-'); - + const monthIndex = formatItems.indexOf("MM"); const dayIndex = formatItems.indexOf("dd"); const yearIndex = formatItems.indexOf("yyyy"); const hourIndex = formatItems.indexOf("HH"); const minutesIndex = formatItems.indexOf("mm"); const secondsIndex = formatItems.indexOf("ss"); - + const today = new Date(); - + try { - const year = yearIndex > -1 && yearIndex < dateItems.length - ? safeParseInt(dateItems[yearIndex]) + const year = yearIndex > -1 && yearIndex < dateItems.length + ? safeParseInt(dateItems[yearIndex]) : today.getFullYear(); - const month = monthIndex > -1 && monthIndex < dateItems.length - ? safeParseInt(dateItems[monthIndex]) - 1 + const month = monthIndex > -1 && monthIndex < dateItems.length + ? safeParseInt(dateItems[monthIndex]) - 1 : today.getMonth() - 1; if (month > 11) throw ''; - const day = dayIndex > -1 && dayIndex < dateItems.length - ? safeParseInt(dateItems[dayIndex]) + const day = dayIndex > -1 && dayIndex < dateItems.length + ? safeParseInt(dateItems[dayIndex]) : today.getDate(); - if (day > getDaysInMonth(month, year)) + if (day > getDaysInMonth(month, year)) throw ''; - + const hour = hourIndex > -1 && hourIndex < dateItems.length - ? safeParseInt(dateItems[hourIndex]) + ? safeParseInt(dateItems[hourIndex]) : 0; - if (hour > 23) + if (hour > 23) throw ''; - const minute = minutesIndex > -1 && minutesIndex < dateItems.length - ? safeParseInt(dateItems[minutesIndex]) + const minute = minutesIndex > -1 && minutesIndex < dateItems.length + ? safeParseInt(dateItems[minutesIndex]) : 0; if (minute > 59) throw ''; - const second = secondsIndex > -1 && secondsIndex < dateItems.length - ? safeParseInt(dateItems[secondsIndex]) + const second = secondsIndex > -1 && secondsIndex < dateItems.length + ? safeParseInt(dateItems[secondsIndex]) : 0; if (second > 59) throw ''; @@ -515,16 +515,16 @@ export namespace utils { const hour = timeItems.length > 0 ? safeParseInt(timeItems[0]) : 0; if (hour > 23) throw ''; - + const minute = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0; if (minute > 59) throw ''; - + const second = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0 if (second > 59) throw ''; - - return new Date(0, 0, 0, hour, minute, second); + + return new Date(0, 0, 0, hour, minute, second); } catch { throw `${str} is not a valid time.` diff --git a/easydata.js/packs/core/vitest.config.ts b/easydata.js/packs/core/vitest.config.ts new file mode 100644 index 00000000..fad459ba --- /dev/null +++ b/easydata.js/packs/core/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + environment: 'jsdom', + }, +}); \ No newline at end of file diff --git a/easydata.js/packs/ui/assets/css/easy-grid.css b/easydata.js/packs/ui/assets/css/easy-grid.css index a2c638b8..1ee08a0f 100644 --- a/easydata.js/packs/ui/assets/css/easy-grid.css +++ b/easydata.js/packs/ui/assets/css/easy-grid.css @@ -184,6 +184,7 @@ /* Pagination */ .keg-pagination-wrapper { display: inline-flex; + margin-left: 10px; } .keg-pagination { diff --git a/easydata.js/packs/ui/src/grid/easy_grid.ts b/easydata.js/packs/ui/src/grid/easy_grid.ts index 81710d90..feb102cc 100644 --- a/easydata.js/packs/ui/src/grid/easy_grid.ts +++ b/easydata.js/packs/ui/src/grid/easy_grid.ts @@ -865,17 +865,17 @@ export class EasyGrid implements EasyGridBase { this.footerDiv = domel('div') .addClass(`${this.cssPrefix}-footer`) .toDOM(); - + if (this.rowsOnPagePromise) { this.rowsOnPagePromise.then(count => { this.footerDiv.innerHTML = ''; - + this.footerPaginateDiv = this.renderPageNavigator(); this.footerDiv.appendChild(this.footerPaginateDiv); const pageInfoBlock = this.renderPageInfoBlock(count); this.footerDiv.appendChild(pageInfoBlock); }); - } + } } protected renderPageInfoBlock(count: number): HTMLDivElement { @@ -894,7 +894,6 @@ export class EasyGrid implements EasyGridBase { : 0; let totalStr = this.dataTable.getTotal().toString(); - if (this.dataTable.elasticChunks) { const count = this.dataTable.getCachedCount(); const total = this.dataTable.getTotal(); @@ -1048,158 +1047,204 @@ export class EasyGrid implements EasyGridBase { paginateDiv.className = `${this.cssPrefix}-pagination-wrapper`; const rowCount = this.dataTable.getTotal(); + const totalRows = this.dataTable.getTotal() + const pageSize = this.pagination.pageSize + const totalPages = Math.ceil(totalRows / pageSize) + const distance: number = 8, islandSize = 3 + const prefix = this.paginationOptions.useBootstrap ? '' : `${this.cssPrefix}-` - if (this.options.paging && this.options.paging.enabled && rowCount > 0) { - const prefix = this.paginationOptions.useBootstrap ? '' : `${this.cssPrefix}-`; + if (!this.options.paging || !this.options.paging.enabled || rowCount <= pageSize) { + return paginateDiv + } - const buttonClickHandler = (ev: MouseEvent) => { - const element = ev.target as HTMLElement; - if (element.hasAttribute('data-page')) { - const page = parseInt(element.getAttribute('data-page')); - this.setPage(page); + const buttonClickHandler = (ev: MouseEvent) => { + const element = ev.target as HTMLElement; + if (element.hasAttribute('data-page')) { + const page = parseInt(element.getAttribute('data-page')); + this.setPage(page); + } + }; + + const renderPaginationItem = ( + pageIndex: number, + content?: string, + disabled?: boolean, + extreme?: boolean, + active?: boolean, + title?: string + ): HTMLElement => { + const li = document.createElement('li'); + li.className = `${prefix}page-item`; + + if (!extreme) { + if (active) { + li.className += ' active'; } - }; - - const renderPageCell = (pageIndex: number, content?: string, - disabled?: boolean, extreme?: boolean, active?: boolean): HTMLElement => - { - const li = document.createElement('li'); - li.className = `${prefix}page-item`; - - if (!extreme) { - if (active) { - li.className += ' active'; - } - const a = document.createElement('a'); - a.setAttribute('href', 'javascript:void(0)'); - a.innerHTML = content || pageIndex.toString(); - a.setAttribute("data-page", `${pageIndex}`); - a.className = `${prefix}page-link`; - a.addEventListener("click", buttonClickHandler); - li.appendChild(a); - return li; + const a = document.createElement('a'); + a.setAttribute('href', 'javascript:void(0)'); + a.innerHTML = content || pageIndex.toString(); + a.setAttribute("data-page", `${pageIndex}`); + a.className = `${prefix}page-link`; + a.addEventListener("click", buttonClickHandler); + if (title) { + a.setAttribute("title", title) } + li.appendChild(a); + return li; + } - let a: HTMLElement = document.createElement('span'); - a.setAttribute('aria-hidden', 'true'); + let a: HTMLElement = document.createElement('span'); + a.setAttribute('aria-hidden', 'true'); - a.className = `${prefix}page-link`; + a.className = `${prefix}page-link`; - if (disabled) { - li.className += ' disabled'; + if (disabled) { + li.className += ' disabled'; + } + else { + if (this.paginationOptions.useBootstrap) { + a = document.createElement('a'); + a.setAttribute('href', 'javascript:void(0)'); + a.setAttribute("data-page", `${pageIndex}`); } - else { - if (this.paginationOptions.useBootstrap) { - a = document.createElement('a'); - a.setAttribute('href', 'javascript:void(0)'); - a.setAttribute("data-page", `${pageIndex}`); - } - else { - let newA = document.createElement('a'); - newA.setAttribute('href', 'javascript:void(0)'); - newA.setAttribute('data-page', `${pageIndex}`); - a = newA; - } - a.className = `${prefix}page-link`; - a.addEventListener("click", buttonClickHandler); + else { + let newA = document.createElement('a'); + newA.setAttribute('href', 'javascript:void(0)'); + newA.setAttribute('data-page', `${pageIndex}`); + a = newA; } - a.innerHTML = content; - - li.appendChild(a); - - return li; + a.className = `${prefix}page-link`; + a.addEventListener("click", buttonClickHandler); } + a.innerHTML = content; + if (title) { + a.setAttribute("title", title) + } + li.appendChild(a); - if (this.dataTable.elasticChunks) { - const pageIndex = this.pagination.page || 1; - - let ul = document.createElement('ul'); - ul.className = `${prefix}pagination`; + return li; + } - let cell = renderPageCell(pageIndex - 1, '«', pageIndex == 1, true, false); - ul.appendChild(cell); + const pageIndex = this.pagination.page || 1; + let ul = document.createElement('ul'); + ul.className = `${prefix}pagination`; + ul.style.userSelect = 'none' + paginateDiv.appendChild(ul); - cell = renderPageCell(pageIndex + 1, '»', this.isLastPage(), true, false); - ul.appendChild(cell); + if (this.dataTable.elasticChunks) { + let cell = renderPaginationItem(pageIndex - 1, '«', pageIndex == 1, true, false); + ul.appendChild(cell); - paginateDiv.appendChild(ul); + cell = renderPaginationItem(pageIndex + 1, '»', this.isLastPage(), true, false); + ul.appendChild(cell); + } + else { + if (totalPages > 10) { + ul.appendChild(renderPaginationItem(pageIndex - 10, '«', pageIndex <= 10, true, false, "Jump left on 10 pages")); } + + ul.appendChild(renderPaginationItem(pageIndex - 1, '‹', pageIndex == 1, true, false, "Prev Page")); + + ul.appendChild(renderPaginationItem(1, '1', pageIndex == 1, false, pageIndex === 1)); + + if (distance === 0 || totalPages <= 10) { + for (let i = 2; i < totalPages; i++) { + ul.appendChild(renderPaginationItem(i, `${i}`, pageIndex === i, false, pageIndex === i)); + } + } else { - if (this.pagination.total > this.pagination.pageSize) { - const pageIndex = this.pagination.page || 1; - const pageCount = Math.ceil(this.pagination.total / this.pagination.pageSize) || 1; - - const maxButtonCount = this.paginationOptions.maxButtonCount || 10; - const zeroBasedIndex = pageIndex - 1; - let firstPageIndex = zeroBasedIndex - (zeroBasedIndex % maxButtonCount) + 1; - let lastPageIndex = firstPageIndex + maxButtonCount - 1; - if (lastPageIndex > pageCount) { - lastPageIndex = pageCount; + if (pageIndex < distance) { + for (let i = 2; i <= distance; i++) { + ul.appendChild(renderPaginationItem(i, `${i}`, false, false, pageIndex === i)); } - let ul = document.createElement('ul'); - ul.className = `${prefix}pagination`; - - let cell = renderPageCell(firstPageIndex - 1, '«', - firstPageIndex == 1, true, false); - ul.appendChild(cell); + if (totalPages > distance) { + ul.appendChild(renderPaginationItem(-1, `...`, true, true, false)) + } + } + else if (pageIndex <= totalPages && pageIndex > totalPages - distance + 1) { + if (totalPages > distance) { + ul.appendChild(renderPaginationItem(-1, `...`, true, true, false)) + } - for (let i = firstPageIndex; i <= lastPageIndex; i++) { - cell = renderPageCell(i, i.toString(), - false, false, i == pageIndex); - ul.appendChild(cell); + for (let i = totalPages - distance + 1; i < totalPages; i++) { + ul.appendChild(renderPaginationItem(i, `${i}`, pageIndex === i, false, pageIndex === i)); } + } + else { + ul.appendChild(renderPaginationItem(-1, `...`, true, true, false)) - cell = renderPageCell(lastPageIndex + 1, '»', lastPageIndex == pageCount, true, false); - ul.appendChild(cell); + // Island Left Side + for(let i = islandSize; i > 0; i--) { + ul.appendChild(renderPaginationItem(pageIndex - i, `${pageIndex - i}`, false, false, false)) + } + + // Center of Island + ul.appendChild(renderPaginationItem(pageIndex, `${pageIndex}`, false, false, true)) + + // Island Right Size + for (let i = 1; i <= islandSize; i++) { + ul.appendChild(renderPaginationItem(pageIndex + i, `${pageIndex + i}`, false, false, false)) + } - paginateDiv.appendChild(ul); + ul.appendChild(renderPaginationItem(-1, `...`, true, true, false)) } } + + if (totalPages > 1 || pageIndex < totalPages) { + ul.appendChild(renderPaginationItem(totalPages, `${totalPages}`, pageIndex === totalPages, false, pageIndex === totalPages)) + } - if (this.options.paging.allowPageSizeChange) { - const selectChangeHandler = (ev: Event) => { - const newValue = parseInt((ev.target as HTMLOptionElement).value); - this.pagination.pageSize = newValue; - this.pagination.page = 1; - this.refresh(); - }; + ul.appendChild(renderPaginationItem(pageIndex + 1, '›', pageIndex == totalPages, true, false, "Next Page")); - const pageSizes = document.createElement('div'); - pageSizes.className = `${this.cssPrefix}-page-sizes`; + if (totalPages > 10) { + ul.appendChild(renderPaginationItem(pageIndex + 10, '»', pageIndex >= totalPages - 10, true, false, "Jump right on 10 pages")); + } - const selectSize = document.createElement('div'); - selectSize.className = `kfrm-select ${this.cssPrefix}-page-sizes-select`; - pageSizes.appendChild(selectSize); + } - const sel = document.createElement('select'); - const selOptions = this.options.paging.pageSizeItems || []; - const selSet = new Set(selOptions); - selSet.add(this.options.paging.pageSize || 20); + if (this.options.paging.allowPageSizeChange) { + const selectChangeHandler = (ev: Event) => { + const newValue = parseInt((ev.target as HTMLOptionElement).value); + this.pagination.pageSize = newValue; + this.pagination.page = 1; + this.refresh(); + }; + const pageSizes = document.createElement('div'); + pageSizes.className = `${this.cssPrefix}-page-sizes`; - Array.from(selSet).forEach(el => { - const option = document.createElement("option"); - option.value = el.toString(); - option.text = el.toString(); - sel.appendChild(option); - }); + const selectSize = document.createElement('div'); + selectSize.className = `kfrm-select ${this.cssPrefix}-page-sizes-select`; + pageSizes.appendChild(selectSize); + + const sel = document.createElement('select'); + const selOptions = this.options.paging.pageSizeItems || []; + const selSet = new Set(selOptions); + selSet.add(this.options.paging.pageSize || 20); - sel.value = (this.pagination.pageSize || 20).toString(); - selectSize.appendChild(sel); - sel.addEventListener('change', selectChangeHandler); - const labelDiv = document.createElement('div'); - labelDiv.className = `${this.cssPrefix}-page-sizes-label`; - pageSizes.appendChild(labelDiv); + Array.from(selSet).forEach(el => { + const option = document.createElement("option"); + option.value = el.toString(); + option.text = el.toString(); + sel.appendChild(option); + }); - const label = document.createElement('span'); - label.innerText = i18n.getText('GridItemsPerPage'); - labelDiv.appendChild(label); + sel.value = (this.pagination.pageSize || 20).toString(); + selectSize.appendChild(sel); + sel.addEventListener('change', selectChangeHandler); - paginateDiv.appendChild(pageSizes); - } - } + const labelDiv = document.createElement('div'); + labelDiv.className = `${this.cssPrefix}-page-sizes-label`; + pageSizes.appendChild(labelDiv); + + const label = document.createElement('span'); + label.innerText = i18n.getText('GridItemsPerPage'); + labelDiv.appendChild(label); + + paginateDiv.appendChild(pageSizes); + } return paginateDiv; } diff --git a/easydata.js/packs/ui/src/utils/browser_utils.ts b/easydata.js/packs/ui/src/utils/browser_utils.ts index 8320ccca..e03e5ba0 100644 --- a/easydata.js/packs/ui/src/utils/browser_utils.ts +++ b/easydata.js/packs/ui/src/utils/browser_utils.ts @@ -1,5 +1,4 @@ export namespace browserUtils { - let _isFirefox: boolean = null; let _isIE: boolean = null; @@ -69,5 +68,4 @@ export namespace browserUtils { export function onMobileModeChanged(callback: (newValue: boolean) => void) { mobileModeChangeHandler = callback; } - } \ No newline at end of file diff --git a/easydata.js/version.json b/easydata.js/version.json index 053227ed..62dc4052 100644 --- a/easydata.js/version.json +++ b/easydata.js/version.json @@ -1,6 +1,6 @@ { - "version": "1.5.2", - "baseVersion": "1.5.2", - "assetVersion": "01_05_02", + "version": "1.5.3", + "baseVersion": "1.5.3", + "assetVersion": "01_05_03", "tag": "latest" } diff --git a/easydata.net/src/EasyData.Core/DisplayFormatStore.cs b/easydata.net/src/EasyData.Core/DisplayFormatStore.cs index 65a46b7a..af05527e 100644 --- a/easydata.net/src/EasyData.Core/DisplayFormatStore.cs +++ b/easydata.net/src/EasyData.Core/DisplayFormatStore.cs @@ -6,7 +6,6 @@ namespace EasyData { public class DisplayFormatDescriptor { - public DisplayFormatDescriptor(string name, string format) { Name = name; @@ -22,13 +21,10 @@ public DisplayFormatDescriptor(string name, string format) public class DisplayFormatStore : IEnumerable>> { - private readonly Dictionary> _dict = new Dictionary>(); - public DisplayFormatStore() - { - + { } public DisplayFormatStore(Dictionary> dict) diff --git a/easydata.net/src/EasyData.Core/MetaData.cs b/easydata.net/src/EasyData.Core/MetaData.cs index 03205a6e..e7f51551 100644 --- a/easydata.net/src/EasyData.Core/MetaData.cs +++ b/easydata.net/src/EasyData.Core/MetaData.cs @@ -343,6 +343,7 @@ protected virtual void AddDefaultDisplayFormats() // Date DisplayFormats.AddOrUpdate(DataType.Date, "Short date", "{0:d}"); DisplayFormats.AddOrUpdate(DataType.Date, "Long date", "{0:D}"); + DisplayFormats.AddOrUpdate(DataType.Date, "Universal", "{0:u}"); // Time DisplayFormats.AddOrUpdate(DataType.Time, "Short time", "{0:HH:mm}"); @@ -355,6 +356,7 @@ protected virtual void AddDefaultDisplayFormats() DisplayFormats.AddOrUpdate(DataType.DateTime, "Long date", "{0:D}"); DisplayFormats.AddOrUpdate(DataType.DateTime, "Short time", "{0:HH:mm}"); DisplayFormats.AddOrUpdate(DataType.DateTime, "Full time", "{0:HH:mm:ss}"); + DisplayFormats.AddOrUpdate(DataType.DateTime, "Universal", "{0:u}"); } diff --git a/easydata.net/version.json b/easydata.net/version.json index ead9fae3..a7d4a372 100644 --- a/easydata.net/version.json +++ b/easydata.net/version.json @@ -1,5 +1,5 @@ { - "assemblyVersion": "1.5.2.1", - "packageVersion": "1.5.2", - "assetVersion": "01_05_02" + "assemblyVersion": "1.5.3.1", + "packageVersion": "1.5.3", + "assetVersion": "01_05_03" } diff --git a/package.json b/package.json index 36408da5..fcd24427 100644 --- a/package.json +++ b/package.json @@ -33,8 +33,12 @@ "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.5", + "@testing-library/jest-dom": "^6.4.2", + "@types/jsdom": "^21.1.6", + "@vitest/ui": "^1.2.2", "autoprefixer": "^10.4.16", "copyfiles": "^2.4.1", + "jsdom": "^24.0.0", "lerna": "^8.0.1", "rollup": "^4.9.2", "rollup-plugin-cleanup": "^3.2.1", diff --git a/playground/EasyDataAspNetCoreTest01/package.json b/playground/EasyDataAspNetCoreTest01/package.json index 3cc79d52..9a11e08d 100644 --- a/playground/EasyDataAspNetCoreTest01/package.json +++ b/playground/EasyDataAspNetCoreTest01/package.json @@ -6,7 +6,7 @@ "license": "ISC", "scripts": { "build": "rollup --config", - "watch1": "rollup --config -w" + "watch": "rollup --config -w" }, "dependencies": { "@easydata/ui": "^1.4.20", diff --git a/playground/EasyDataAspNetCoreTest01/rollup.config.mjs b/playground/EasyDataAspNetCoreTest01/rollup.config.mjs index ad48945a..c678884d 100644 --- a/playground/EasyDataAspNetCoreTest01/rollup.config.mjs +++ b/playground/EasyDataAspNetCoreTest01/rollup.config.mjs @@ -29,7 +29,6 @@ export default [ { input: ['./ts/styles.js', './ts/easydata.ts'], watch: { - include: './ts/**', clearScreen: false }, plugins: [ diff --git a/playground/EasyDataAspNetCoreTest01/wwwroot/js/easydata-all.js.map b/playground/EasyDataAspNetCoreTest01/wwwroot/js/easydata-all.js.map new file mode 100644 index 00000000..261de712 --- /dev/null +++ b/playground/EasyDataAspNetCoreTest01/wwwroot/js/easydata-all.js.map @@ -0,0 +1 @@ +{"version":3,"file":"easydata-all.js","sources":["../../../../node_modules/style-inject/dist/style-inject.es.js","../../../../easydata.js/packs/core/dist/easydata.core.esm.js","../../../../easydata.js/packs/ui/dist/easydata.ui.esm.js","../../../../easydata.js/packs/crud/dist/easydata.crud.esm.js","../../ts/easydata.ts"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","\n/*\n * EasyData.JS Core v1.5.2\n * Copyright 2020-2024 Korzh.com\n * Licensed under MIT\n */\n\n/** Represents the common types of the data. */\nvar 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 */\n DataType[DataType[\"Geography\"] = 19] = \"Geography\";\n})(DataType || (DataType = {}));\n\nvar 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\nconst 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\n/**\n * Represents a date/time value that can return either a date itself or a special date name\n */\nclass TimeValue {\n constructor(dt) {\n if (dt instanceof Date) {\n this.date = dt;\n }\n else {\n this._name = dt;\n }\n }\n asTime(settings) {\n if (this.date) {\n return this.date;\n }\n else {\n specialDatesResolver.getDateByName(this._name);\n }\n }\n get name() {\n return this.name;\n }\n}\nclass SpecialDatesResolver {\n getDateByName(name, settings) {\n if (this[name]) {\n return this[name](settings);\n }\n else {\n return undefined;\n }\n }\n Today(settings) {\n return new Date();\n }\n Yesterday(settings) {\n let d = new Date();\n d.setDate(d.getDate() - 1);\n return d;\n }\n Tomorrow(settings) {\n let d = new Date();\n d.setDate(d.getDate() + 1);\n return d;\n }\n FirstDayOfMonth(settings) {\n let d = new Date();\n d.setDate(1);\n return d;\n }\n LastDayOfMonth(settings) {\n let d = new Date();\n d.setMonth(d.getMonth() + 1, 0);\n return d;\n }\n FirstDayOfNextMonth(settings) {\n let d = new Date();\n d.setMonth(d.getMonth() + 1, 1);\n return d;\n }\n FirstDayOfPrevMonth(settings) {\n let d = new Date();\n d.setMonth(d.getMonth() - 1, 1);\n return d;\n }\n FirstDayOfYear(settings) {\n const d = new Date();\n d.setMonth(0, 1);\n return d;\n }\n FirstDayOfPrevYear(settings) {\n let d = new Date();\n d.setFullYear(d.getFullYear() - 1, 0, 1);\n return d;\n }\n FirstDayOfNextYear(settings) {\n let d = new Date();\n d.setFullYear(d.getFullYear() + 1, 0, 1);\n return d;\n }\n FirstDayOfWeek(settings) {\n const d = new Date();\n let day = d.getDay();\n day = (day == 0) ? 6 : day - 1; //We start week from Monday, but js - from Sunday\n d.setDate(d.getDate() - day);\n return d;\n }\n FirstDayOfPrevWeek(settings) {\n let d = new Date();\n let day = d.getDay();\n day = (day == 0) ? 1 : 8 - day; //We start week from Monday, but js - from Sunday\n d.setDate(d.getDate() - day);\n return d;\n }\n FirstDayOfNextWeek(settings) {\n let d = new Date();\n var day = d.getDay();\n day = (day == 0) ? 1 : 8 - day; //We start week from Monday, but js - from Sunday\n d.setDate(d.getDate() + day);\n return d;\n }\n}\nvar specialDatesResolver = new SpecialDatesResolver();\nfunction registerSpecialDatesResolver(resolver) {\n specialDatesResolver = resolver;\n}\n\nvar 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\nclass HttpRequest {\n constructor(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 setHeader(name, value) {\n this.headers[name] = value;\n }\n setQueryParam(name, value) {\n this.queryParams[name] = value;\n }\n getXMLHttpRequest() {\n return this.xhr;\n }\n getResponseHeaders() {\n if (this.xhr.readyState == this.xhr.HEADERS_RECEIVED) {\n const headers = this.xhr.getAllResponseHeaders();\n const arr = headers.trim().split(/[\\r\\n]+/);\n // Create a map of header names to values\n const headerMap = {};\n for (const line of arr) {\n const parts = line.split(': ');\n const header = parts.shift();\n const value = parts.join(': ');\n headerMap[header] = value;\n }\n return headerMap;\n }\n return {};\n }\n open() {\n if (this.xhr.readyState !== this.xhr.UNSENT)\n return;\n let url = this.url;\n if (this.queryParams && Object.keys(this.queryParams).length > 0) {\n url += encodeURI('?' + Object.keys(this.queryParams)\n .map(param => 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 (const header in this.headers) {\n this.xhr.setRequestHeader(header, this.headers[header]);\n }\n }\n abort() {\n this.xhr.abort();\n }\n}\n\nvar utils;\n(function (utils) {\n function getAllDataTypes() {\n return Object.values(DataType).filter(item => 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 const _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 const _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, ...args) {\n if (!target) {\n target = {};\n }\n for (let i = 0; i < args.length; i++) {\n let source = args[i];\n if (source && source.hasOwnProperty) {\n for (let 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, ...sources) {\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 (let source of sources) {\n if (source && source.hasOwnProperty) {\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n let sourceVal = source[key];\n //we don't make a deep copy of HTML elements and any other property marked as a 'reference' (ends with 'Ref')\n if (sourceVal !== null && typeof sourceVal === 'object'\n && !key.endsWith('Ref') && !(sourceVal instanceof HTMLElement)) {\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 const len1 = collection1.length;\n const len2 = collection2.length;\n for (let i = 0; i < len1 && i < len2; i++) {\n collection2[i] = collection1[i];\n }\n }\n utils.copyArrayTo = copyArrayTo;\n function createArrayFrom(collection) {\n let result = [];\n for (let item of collection) {\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 let len = arr.length;\n for (let 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 let 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 let 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 = 0, end) {\n let 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 let 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 let body = document.getElementsByTagName('body')[0];\n let winWidth = window.innerWidth || document.documentElement.clientWidth || body.clientWidth;\n var absRight = absLeft + width;\n let 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 const 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 const 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 const prefixIdLen = 4;\n const symbols = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n const magicTicks = 636712160627685350;\n /**\n * Generates an unique ID\n */\n function generateId(prefix) {\n if (!prefix) {\n prefix = 'easy';\n }\n let prfx = (prefix.length > prefixIdLen) ? squeezeMoniker(prefix, prefixIdLen) : prefix;\n if (prfx && prfx.length > 0) {\n prfx += \"-\";\n }\n //adding 3 random symbols\n var randCharPart = symbols[getRandomInt(0, symbols.length)] +\n symbols[getRandomInt(0, symbols.length)] +\n symbols[getRandomInt(0, symbols.length)];\n var randInt = getRandomInt(0, 10000);\n //generating main ID part\n //it's a 36-base representation of some random number based on current value of ticks\n let ticksNum36 = intToNumBase(getNowTicks() - magicTicks - randInt);\n return prfx + randCharPart + ticksNum36;\n }\n utils.generateId = generateId;\n function intToNumBase(value, targetBase = 36) {\n var buffer = '';\n var rest = value;\n do {\n buffer = symbols[rest % targetBase] + buffer;\n rest = Math.floor(rest /= targetBase);\n } while (rest > 0);\n return buffer;\n }\n function squeezeMoniker(str, maxlen) {\n let parts = str.split('-');\n let pml = 1;\n let ptt = maxlen;\n if (parts.length < maxlen) {\n pml = maxlen / parts.length;\n ptt = parts.length;\n }\n let result = \"\";\n for (let i = 0; i < ptt; i++) {\n result += squeeze(parts[i], pml);\n }\n return result;\n }\n function squeeze(str, maxlen) {\n const len = str.length;\n if (len > maxlen) {\n let step = len / maxlen;\n let result = \"\";\n result += str[0];\n let nextIndex = step;\n let ch;\n for (let 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 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 const res = parseInt(str);\n if (isNaN(res))\n throw `\"${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 const normalizedValue = value.replace(/[^a-zA-Z0-9_]/g, '-');\n const normalizedFormat = format.replace(/[^a-zA-Z0-9_]/g, '-');\n const formatItems = normalizedFormat.split('-');\n const dateItems = normalizedValue.split('-');\n const monthIndex = formatItems.indexOf(\"MM\");\n const dayIndex = formatItems.indexOf(\"dd\");\n const yearIndex = formatItems.indexOf(\"yyyy\");\n const hourIndex = formatItems.indexOf(\"HH\");\n const minutesIndex = formatItems.indexOf(\"mm\");\n const secondsIndex = formatItems.indexOf(\"ss\");\n const today = new Date();\n try {\n const year = yearIndex > -1 && yearIndex < dateItems.length\n ? safeParseInt(dateItems[yearIndex])\n : today.getFullYear();\n const month = monthIndex > -1 && monthIndex < dateItems.length\n ? safeParseInt(dateItems[monthIndex]) - 1\n : today.getMonth() - 1;\n if (month > 11)\n throw '';\n const day = dayIndex > -1 && dayIndex < dateItems.length\n ? safeParseInt(dateItems[dayIndex])\n : today.getDate();\n if (day > getDaysInMonth(month, year))\n throw '';\n const hour = hourIndex > -1 && hourIndex < dateItems.length\n ? safeParseInt(dateItems[hourIndex])\n : 0;\n if (hour > 23)\n throw '';\n const minute = minutesIndex > -1 && minutesIndex < dateItems.length\n ? safeParseInt(dateItems[minutesIndex])\n : 0;\n if (minute > 59)\n throw '';\n const 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 `${value} is not a valid date.`;\n }\n }\n utils.strToDateTime = strToDateTime;\n function strToTime(str) {\n const timeItems = str.split(':');\n try {\n const hour = timeItems.length > 0 ? safeParseInt(timeItems[0]) : 0;\n if (hour > 23)\n throw '';\n const minute = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0;\n if (minute > 59)\n throw '';\n const 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 `${str} is not a valid time.`;\n }\n }\n utils.strToTime = strToTime;\n})(utils || (utils = {}));\n\nclass HttpActionResult {\n constructor(request, promise) {\n this.request = request;\n this.promise = promise;\n }\n getPromise() {\n return this.promise;\n }\n getRequest() {\n return this.request;\n }\n then(onfulfilled, onrejected) {\n return this.promise.then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.promise.catch(onrejected);\n }\n finally(onfinally) {\n return this.promise.finally(onfinally);\n }\n}\n\nclass HttpResponseError extends Error {\n constructor(status, message) {\n super(message);\n Object.setPrototypeOf(this, HttpResponseError.prototype);\n this.status = status;\n }\n}\nclass HttpClient {\n /** Gets the response body for the latest request */\n get responseBody() {\n return this._responseBody;\n }\n constructor() {\n this.defaultHeaders = {};\n this.customPayload = undefined;\n }\n get(url, options) {\n return this.send(HttpMethod.Get, url, null, options);\n }\n post(url, data, options) {\n return this.send(HttpMethod.Post, url, data, options);\n }\n put(url, data, options) {\n return this.send(HttpMethod.Put, url, data, options);\n }\n delete(url, data, options) {\n return this.send(HttpMethod.Delete, url, data, options);\n }\n send(method, url, data, options) {\n options = options || {};\n const dataType = options.dataType || 'json';\n const 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 const XHR = ('onload' in new XMLHttpRequest())\n ? XMLHttpRequest\n : window[\"XDomainRequest\"]; //IE support\n const xhr = new XHR();\n const desc = {\n method: method,\n url: url,\n headers: Object.assign(Object.assign({}, this.defaultHeaders), options.headers || {}),\n queryParams: options.queryParams || {},\n data: data\n };\n if (contentType)\n desc.headers['Content-Type'] = contentType;\n const request = new HttpRequest(xhr, desc);\n if (this.beforeEachRequest) {\n console.warn(`HttpClient: 'beforeEachRequest' is deprecated and will be removed in future updates.\r\n Use 'onRequest' instead`);\n this.beforeEachRequest(request);\n }\n if (this.onRequest) {\n this.onRequest(request);\n }\n const 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((resolve, reject) => {\n if (options.responseType)\n xhr.responseType = options.responseType;\n xhr.onerror = (error) => {\n reject(new HttpResponseError(xhr.status, xhr.responseText));\n };\n xhr.onreadystatechange = () => {\n if (xhr.readyState != 4)\n return; //we process only the state change to DONE(4)\n const responseContentType = xhr.getResponseHeader('Content-Type') || '';\n const 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 const 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 const rtPromise = (xhr.responseType === 'arraybuffer' || xhr.responseType === 'blob')\n ? HttpClient.decodeArrayBuffer(xhr.response)\n : Promise.resolve(xhr.responseText);\n rtPromise.then(responseText => {\n const responseObj = (responseContentType.indexOf('application/json') == 0)\n ? JSON.parse(responseText)\n : responseText;\n this._responseBody = responseObj;\n const message = responseObj.message ||\n (status == 404\n ? `No such endpoint: ${url}`\n : responseObj);\n reject(new HttpResponseError(status, message));\n });\n }\n };\n xhr.send(dataToSend);\n }));\n }\n static decodeArrayBuffer(uintArray) {\n var reader = new FileReader();\n return new Promise((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}\n\n/**\n * Contains internatialization functionality.\n */\nvar i18n;\n(function (i18n) {\n let 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 let 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 let allLocales = {\n 'en-US': defaultLocale\n };\n let currentLocale;\n const mappers = [];\n function mapInfo(info) {\n for (const mapper of mappers) {\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 let result = [];\n for (let 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((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 const 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(...args) {\n let textsObj = currentLocale.texts;\n let resText = '';\n if (args && args.length) {\n const argLength = args.length;\n for (let 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 const 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 const 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 const 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 const 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 /**\n * Updates the default texts for the current locale and all other locales available now\n * This function does rewrite the texts in the locales, it just adds new textual resources if they didn't exists previously\n * @param texts A plain JS object that contains textual resources\n */\n function updateDefaultTexts(texts) {\n for (let localeId in allLocales) {\n let 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, localeInfo) {\n mapInfo(localeInfo);\n let localeInfoToUpdate = currentLocale;\n if (localeId) {\n if (!localeInfo.localeId) {\n localeInfo.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, localeInfo);\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 const now = new Date(2020, 5, 7, 19, 34, 56, 88);\n const dateOptions = { year: 'numeric', month: 'numeric', day: 'numeric' };\n const timeOptions = { hour: 'numeric', minute: 'numeric', second: 'numeric' };\n const dateStr = now.toLocaleDateString(localeId, dateOptions);\n const timeStr = now.toLocaleTimeString(localeId, timeOptions);\n let 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 let 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 const localeSettings = {\n shortDateFormat: dateFormat,\n shortTimeFormat: timeFormat\n };\n updateLocaleSettings(localeSettings);\n }\n function loadBrowserLocaleSettings() {\n const 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 const 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 const year = date.getFullYear();\n const yearStr = year.toString();\n const month = date.getMonth() + 1;\n const day = date.getDate();\n const hour = date.getHours();\n const minute = date.getMinutes();\n const second = date.getSeconds();\n const hour12 = hour % 12 || 12; //the remainder of the division by 12. Or 12 if it's 0\n const isPm = hour > 11;\n const 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, (match, $1) => {\n return $1 || matches[match];\n });\n }\n i18n.dateTimeToStr = dateTimeToStr;\n function dateTimeToStrEx(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 dateTimeToStr(dateTime, format);\n }\n i18n.dateTimeToStrEx = dateTimeToStrEx;\n function buildShortDateTimeFormat(dataType) {\n const localeSettings = getLocaleSettings();\n let 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 const localeSettings = getLocaleSettings();\n let 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 /**\n * Converts a numeric value to the string taking into the account the decimal separator\n * @param num - the number to convert\n * @param format - the format of the number representation (D - decimal, F - float, C - currency)\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(num, format, decimalSeparator) {\n if (format && format.length > 0) {\n const type = format.charAt(0).toUpperCase();\n if (type === 'S') {\n return formatWithSequence(num, format.slice(1));\n }\n else if (['D', 'F', 'C'].indexOf(type) >= 0) {\n const locale = getCurrentLocale();\n return num.toLocaleString(locale, getNumberFormatOptions(format));\n }\n else {\n return convertWithMask(Math.trunc(num), format);\n }\n }\n const localeSettings = getLocaleSettings();\n decimalSeparator = decimalSeparator || localeSettings.decimalSeparator;\n return num.toString().replace('.', decimalSeparator);\n }\n i18n.numberToStr = numberToStr;\n function booleanToStr(bool, format) {\n if (format && format.length > 0) {\n const type = format.charAt(0).toUpperCase();\n if (type === 'S') {\n const values = format.slice(1).split('|');\n if (values.length > 1) {\n const value = values[(bool) ? 1 : 0];\n return i18n.getText(value) || value;\n }\n }\n }\n return `${bool}`;\n }\n i18n.booleanToStr = booleanToStr;\n const cachedSequenceFormats = {};\n function formatWithSequence(number, format) {\n if (!cachedSequenceFormats[format]) {\n // parse and save in cache format values \n const values = format.split('|')\n .filter(v => v.length > 0)\n .map(v => v.split('='));\n cachedSequenceFormats[format] = {};\n if (values.length > 0) {\n if (values[0].length > 1) {\n for (const value of values) {\n cachedSequenceFormats[format][Number.parseInt(value[1])] = value[0];\n }\n }\n else {\n values.forEach((value, index) => {\n cachedSequenceFormats[format][index] = value[0];\n });\n }\n }\n }\n const values = cachedSequenceFormats[format];\n if (values[number] !== undefined) {\n const value = values[number];\n return i18n.getText(value) || value;\n }\n return number.toString();\n }\n function convertWithMask(number, mask) {\n let value = number.toString();\n let result = '';\n let index = value.length - 1;\n for (let i = mask.length - 1; i >= 0; i--) {\n const 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 const localeSettings = getLocaleSettings();\n const type = format[0].toUpperCase();\n const 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\n/**\n * Represents one entity.\n */\nclass MetaEntity {\n /** The default constructor. */\n constructor(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 loadFromData(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 (let i = 0; i < dto.ents.length; i++) {\n let 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 (let i = 0; i < dto.attrs.length; i++) {\n let newAttr = model.createEntityAttr(this);\n newAttr.loadFromData(model, dto.attrs[i]);\n this.attributes.push(newAttr);\n }\n }\n }\n }\n scan(processAttribute, processEntity) {\n let opts = { stop: false };\n let internalProcessEntity = (entity) => {\n if (processEntity)\n processEntity(entity, opts);\n if (entity.attributes) {\n let attrCount = entity.attributes.length;\n for (let i = 0; (i < attrCount) && !opts.stop; i++) {\n let 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 let subEntityCount = entity.subEntities.length;\n for (let i = 0; (i < subEntityCount) && !opts.stop; i++) {\n internalProcessEntity(entity.subEntities[i]);\n }\n }\n };\n internalProcessEntity(this);\n }\n getFirstPrimaryAttr() {\n return this.getPrimaryAttrs()[0];\n }\n getPrimaryAttrs() {\n return this.attributes.filter(attr => attr.isPrimaryKey);\n }\n}\nclass MetaEntityAttr {\n /** The default constructor. */\n constructor(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 loadFromData(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 const 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}\n\n/**\n * Represents a value editor.\n */\nclass ValueEditor {\n /** The default constructor. */\n constructor() {\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 loadFromData(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 getValueText(value) {\n let result = \"\";\n if (!this.values)\n return result;\n if (Array.isArray(value)) {\n for (let item of this.values) {\n if (value.indexOf(item.id) >= 0) {\n result += item.text + ',';\n }\n }\n }\n else {\n for (let item of this.values) {\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}\n\n/**\n * Represents a data model\n */\nclass MetaData {\n /** The default constructor. */\n constructor() {\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 getMainEntity() {\n return this.mainEntity;\n }\n createEntity(parent) {\n return new MetaEntity(parent);\n }\n createEntityAttr(parent) {\n return new MetaEntityAttr(parent);\n }\n createValueEditor() {\n return new ValueEditor();\n }\n /**\n * Loads data model from JSON.\n * @param stringJson The JSON string.\n */\n loadFromJSON(stringJson) {\n let 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 loadFromData(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 (let i = 0; i < data.editors.length; i++) {\n let 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 (const dtypeStr in data.displayFormats) {\n const dtype = DataType[dtypeStr];\n const 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 getDisplayFormats() {\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 getDisplayFormatsForType(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 getDefaultFormat(type) {\n if (this.displayFormats.has(type)) {\n return this.displayFormats.get(type).filter(f => 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 setData(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 isEmpty() {\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 getId() {\n return this.id;\n }\n /**\n * Gets name of the data model.\n * @returns The name.\n */\n getName() {\n return this.name;\n }\n /**\n * Gets root entity of the data model.\n * @returns The root entity.\n */\n getRootEntity() {\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 getEditorById(editorId) {\n for (let editor of this.editors) {\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 getAttributeById(attrId) {\n let 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 checkAttrProperty(attrId, propName) {\n let 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 getEntityAttrById(entity, attrId) {\n let idx;\n if (entity.attributes) {\n let 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 let res;\n if (entity.subEntities) {\n let 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 listByEntityWithFilter(entity, filterFunc) {\n let result = new Array();\n let caption;\n let ent = null;\n if (entity.subEntities) {\n let subEntityCount = entity.subEntities.length;\n for (let 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 let 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 let attr = null;\n if (entity.attributes) {\n let attrCount = entity.attributes.length;\n for (let 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 let 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 listByEntity(entity, opts, filterFunc) {\n opts = opts || {};\n let resultEntities = [];\n let resultAttributes = [];\n let caption;\n let ent = null;\n if (entity.subEntities) {\n let subEntityCount = entity.subEntities.length;\n for (let 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 let newEnt = utils.assign(this.createEntity(), {\n id: ent.name,\n text: caption,\n items: [],\n isEntity: true,\n description: ent.description\n });\n let 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 let attr = null;\n if (entity.attributes) {\n let attrCount = entity.attributes.length;\n for (let 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 let sortCheck = (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 let 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 clear() {\n this.rootEntity = this.createEntity();\n this.editors = [];\n this.version = '';\n }\n /**\n * Add default value editors.\n */\n addDefaultValueEditors() {\n let 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 addOrUpdateValueEditor(id, tag, resType) {\n let 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 getEntitiesTree(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 getEntitiesTreeWithFilter(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 getFullEntityPathByAttr(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 getEntityPathByAttr(entity, attrId, sep, root) {\n if (!entity)\n return '';\n sep = sep || ' ';\n let entityCaption = '';\n if (entity.caption && !root) {\n let entityText = i18n.getText('Entities', entity.caption);\n entityCaption = entityText ? entityText : entity.caption;\n }\n if (entity.attributes) {\n let attrCount = entity.attributes.length;\n for (let i = 0; i < attrCount; i++) {\n if (entity.attributes[i].id == attrId) {\n return entityCaption;\n }\n }\n }\n if (entity.subEntities) {\n let subEntityCount = entity.subEntities.length;\n for (let i = 0; i < subEntityCount; i++) {\n let ent = entity.subEntities[i];\n let 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 getAttributeText(attr, format) {\n let attrText = i18n.getText('Attributes', attr.id);\n if (!attrText) {\n attrText = attr.caption;\n }\n if (!format) {\n return attrText;\n }\n let result = '';\n let 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 runThroughEntities(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 getFirstAttributeByFilter(filterFunc) {\n let 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}\n\n/**\n * Defines aggregations settings for the current context.\n * Group, aggregate columns, grand totals, etc.\n */\nclass AggregationSettings {\n constructor(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 get caseSensitiveGroups() {\n return this._caseSensitiveGroups;\n }\n set caseSensitiveGroups(value) {\n this._caseSensitiveGroups = value;\n this.updateCompareProc();\n }\n updateCompareProc() {\n this.compareValues = this._caseSensitiveGroups\n ? this.strictCompare\n : this.caseInsensitiveCompare;\n }\n addGroup(settings) {\n const 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(Object.assign({ columns: cols }, settings));\n return this;\n }\n addAggregateColumn(colIndexOrId, funcId) {\n const 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, funcId });\n return this;\n }\n addGrandTotals() {\n this.useGrandTotals = true;\n return this;\n }\n addCounts() {\n this.useRecordCount = true;\n return this;\n }\n getGroups() {\n let cols = [];\n const mappedGrops = this.groups.map(grp => {\n cols = cols.concat(grp.columns);\n return Object.assign(Object.assign({}, grp), { columns: Array.from(cols), aggregates: Array.from(this.aggregates) });\n });\n return mappedGrops;\n }\n getInternalGroups() {\n return this.groups;\n }\n lastGroup() {\n const groups = this.getGroups();\n return groups[groups.length - 1];\n }\n getAggregates() {\n return this.aggregates;\n }\n hasAggregates() {\n return this.aggregates.length > 0;\n }\n hasGroups() {\n return this.groups.length > 0;\n }\n hasGrandTotals() {\n return this.useGrandTotals;\n }\n hasRecordCount() {\n return this.useRecordCount;\n }\n isEmpty() {\n return !(this.hasAggregates() || this.hasGroups() ||\n this.hasGrandTotals() || this.hasRecordCount());\n }\n isValid() {\n return (this.hasGroups() && (this.hasAggregates() || this.hasRecordCount()))\n || (this.hasAggregates && this.hasGrandTotals());\n }\n drop() {\n console.warn('\"drop()\" method is obsolete. Use \"clear()\" instead');\n this.clear();\n }\n clear() {\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 hasColumnsInUse(cols) {\n for (const group of this.groups) {\n const interCols = group.columns\n .filter(c => cols.indexOf(c) >= 0);\n if (interCols.length > 0)\n return true;\n }\n for (const aggr of this.aggregates) {\n if (cols.indexOf(aggr.colId) >= 0)\n return true;\n }\n return false;\n }\n needAggrCalculation() {\n return (this.hasAggregates() || this.hasRecordCount())\n && (this.hasGrandTotals() || this.hasGroups());\n }\n saveToData() {\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 loadFromData(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 buildGroupKey(group, row) {\n const caseInsensitive = !this.caseSensitiveGroups;\n let result = {};\n if (group) {\n for (const colId of group.columns) {\n let 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 strictCompare(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 caseInsensitiveCompare(value1, value2) {\n if (value1 instanceof Date) {\n return value1.getTime() === value2.getTime();\n }\n else {\n const val1 = (typeof value1 === 'string') ? value1.toLowerCase() : value1;\n const val2 = (typeof value2 === 'string') ? value2.toLowerCase() : value2;\n return val1 === val2;\n }\n }\n}\n\nvar 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 = {}));\nclass DataColumn {\n constructor(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}\nclass DataColumnList {\n constructor() {\n this.items = [];\n this.mapper = {};\n this._dateColumnIdx = [];\n }\n get count() {\n return this.items.length;\n }\n add(colOrDesc) {\n let col;\n if (colOrDesc instanceof DataColumn) {\n col = colOrDesc;\n }\n else {\n col = new DataColumn(colOrDesc);\n }\n const 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 updateDateColumnIdx() {\n this._dateColumnIdx = this.getItems()\n .filter(col => [DataType.Date, DataType.DateTime, DataType.Time].indexOf(col.type) >= 0)\n .map((col, index) => index);\n }\n put(index, col) {\n if (index >= 0 && index < this.count) {\n this.items[index] = col;\n this.updateDateColumnIdx();\n }\n }\n move(col, newIndex) {\n let oldIndex = this.items.indexOf(col);\n if (oldIndex >= 0 && oldIndex != newIndex) {\n utils.moveArrayItem(this.items, oldIndex, newIndex);\n this.updateDateColumnIdx();\n }\n }\n get(index) {\n if (index >= 0 && index < this.count) {\n return this.items[index];\n }\n else {\n return null;\n }\n }\n getIndex(id) {\n return this.mapper[id];\n }\n getItems() {\n return this.items;\n }\n getDateColumnIndexes() {\n return this._dateColumnIdx;\n }\n removeAt(index) {\n const col = this.get(index);\n this.items.splice(index, 1);\n const removeDate = this._dateColumnIdx.indexOf(index);\n if (removeDate >= 0) {\n this._dateColumnIdx.splice(removeDate, 1);\n }\n delete this.mapper[col.id];\n }\n clear() {\n this.items = [];\n this._dateColumnIdx = [];\n this.mapper = {};\n }\n}\n\nclass DataRow {\n constructor(columns, values) {\n this.columns = columns;\n this.values = values;\n }\n toArray() {\n return Array.from(this.values);\n }\n size() {\n return this.values.length;\n }\n getValue(colIdOrIndex) {\n let index;\n if (typeof colIdOrIndex === \"string\") {\n index = this.columns.getIndex(colIdOrIndex);\n if (index === undefined) {\n throw new RangeError(`No column with id '${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 setValue(colIdOrIndex, value) {\n let index;\n if (typeof colIdOrIndex === \"string\") {\n index = this.columns.getIndex(colIdOrIndex);\n if (index === undefined) {\n throw new RangeError(`No column with id '${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}\n\nclass EasyDataTable {\n constructor(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 (const colDesc of options.columns) {\n this._columns.add(colDesc);\n }\n }\n if (options.rows) {\n for (const rowData of options.rows) {\n const row = this.createRow(rowData);\n this.addRow(row);\n }\n }\n this.needTotal = !this._elasticChunks;\n }\n get columns() {\n return this._columns;\n }\n get chunkSize() {\n return this._chunkSize;\n }\n set chunkSize(value) {\n this._chunkSize = value;\n this.total = 0;\n this.needTotal = !this.elasticChunks;\n this.cachedRows = [];\n }\n get elasticChunks() {\n return this._elasticChunks;\n }\n set elasticChunks(value) {\n this._elasticChunks = value;\n this.total = 0;\n this.needTotal = !this.elasticChunks;\n this.cachedRows = [];\n }\n getRows(params) {\n let 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 let 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 let 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 ${fromIndex} to ${endIndex}`;\n }\n // we need total only for the first request\n const needTotal = this.needTotal;\n if (this.needTotal) {\n this.needTotal = false;\n }\n let offset = this.cachedRows.length;\n let limit = endIndex - offset;\n if (limit < this._chunkSize) {\n limit = this._chunkSize;\n }\n const resultPromise = this.loader.loadChunk({\n offset: offset,\n limit: limit,\n needTotal: needTotal\n })\n .then(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 const count = result.table.getCachedCount();\n if (count < 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 getRow(index) {\n return this.getRows({ offset: index, limit: 1 })\n .then(rows => rows.length > 0 ? rows[0] : null);\n }\n getTotal() {\n return this.total;\n }\n setTotal(total) {\n this.total = total;\n this.needTotal = false;\n }\n getCachedCount() {\n return this.cachedRows.length;\n }\n clear() {\n this.columns.clear();\n this.cachedRows = [];\n this.total = 0;\n this.needTotal = !this._elasticChunks;\n this.fireUpdated();\n }\n createRow(dataOrRow) {\n const dateIdx = this._columns.getDateColumnIndexes();\n const values = new Array(this._columns.count);\n const getValue = dataOrRow instanceof DataRow\n ? (colId) => dataOrRow.getValue(colId)\n : (colId) => dataOrRow[colId];\n if (dataOrRow) {\n this.columns.getItems().forEach((column) => {\n const value = getValue(column.id);\n const 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 mapDate(value, dtype) {\n if (value) {\n let 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 addRow(rowOrValues) {\n let newRow;\n if (Array.isArray(rowOrValues)) {\n let values = rowOrValues;\n const dateIdx = this._columns.getDateColumnIndexes();\n if (dateIdx.length > 0) {\n for (const idx of dateIdx) {\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 const cachedTotal = this.getCachedCount();\n if (cachedTotal > this.total) {\n this.total = cachedTotal;\n }\n return newRow;\n }\n getCachedRows() {\n return this.cachedRows;\n }\n totalIsKnown() {\n if (this.elasticChunks) {\n const count = this.getCachedCount();\n return count === this.total;\n }\n return !this.needTotal;\n }\n fireUpdated() {\n if (this.onUpdate) {\n this.onUpdate(this);\n }\n }\n}\n\n/**\n * EasyData representation of GUID.\n */\nclass EasyGuid {\n /**\n * Generates new GUID.\n * @returns The string representation of GUID.\n */\n static newGuid() {\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}\n\n/**\n * The representation of event emitter.\n */\nclass EventEmitter {\n /**\n * The default constructor.\n * @param source The source.\n */\n constructor(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 subscribe(eventType, callback) {\n let event = this.getEventRecByType(eventType);\n const 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 unsubscribe(eventType, callbackId) {\n let event = this.getEventRecByType(eventType);\n if (event) {\n let 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 fire(eventType, data, postpone = 0, force = false) {\n if (this.silentMode && !force) {\n return;\n }\n let eventRec = this.getEventRecByType(eventType);\n if (eventRec) {\n const eqevent = {\n type: eventType,\n source: this.source,\n data: data\n };\n let emitAllFunc = () => {\n for (let callback of eventRec.eventCallbacks) {\n callback.callback(eqevent);\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 enterSilentMode() {\n this.silentMode++;\n }\n /**\n * Exits from silent mode.\n */\n exitSilentMode() {\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 isSilent() {\n return this.silentMode > 0;\n }\n getEventRecByType(eventType) {\n for (let event of this.events) {\n if (event.type == eventType) {\n return event;\n }\n }\n return null;\n }\n}\n\nfunction repeatString(str, times) {\n return str.repeat(times);\n}\nfunction reverseString(str) {\n return str.split(\"\").reverse().join(\"\");\n}\nfunction 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 */\nfunction combinePath(path1, path2) {\n let 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\nvar liquid;\n(function (liquid) {\n function renderLiquidTemplate(template, vars) {\n let result = template;\n if (vars) {\n for (let v in vars) {\n const 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\ni18n.resetLocales();\n\n//types\nif (typeof Object.values !== 'function') {\n Object.values = function (obj) {\n return Object.keys(obj).map(key => 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\nexport { AggregationSettings, ColumnAlignment, DataColumn, DataColumnList, DataRow, DataType, EasyDataTable, EasyGuid, EditorTag, EntityAttrKind, EventEmitter, HttpClient, HttpMethod, HttpRequest, HttpResponseError, MetaData, MetaEntity, MetaEntityAttr, SpecialDatesResolver, TimeValue, ValueEditor, combinePath, i18n, liquid, registerSpecialDatesResolver, repeatString, reverseString, strEndsWith, utils };\n","\n/*\n * EasyData.JS UI v1.5.2\n * Copyright 2020-2024 Korzh.com\n * Licensed under MIT\n */\n\nimport { utils, ColumnAlignment, DataType, i18n, EventEmitter, DataRow, liquid } from '@easydata/core';\n\nvar browserUtils;\n(function (browserUtils) {\n let _isFirefox = null;\n let mobileModeChangeHandler;\n function isIE() {\n {\n const ua = navigator.userAgent;\n return ua.includes('MSIE') || ua.includes('Trident');\n }\n }\n browserUtils.isIE = isIE;\n function isEdge() {\n const ua = window.navigator.userAgent;\n return !isIE() && ua.includes('Edge/');\n }\n browserUtils.isEdge = isEdge;\n function isFirefox() {\n if (_isFirefox === null) {\n const ua = navigator.userAgent;\n _isFirefox = ua.toLowerCase().includes('firefox');\n }\n return _isFirefox;\n }\n browserUtils.isFirefox = isFirefox;\n let _detectedIsMobileMode = false;\n let _isMobileMode = undefined;\n let detectIsMobileMode = () => {\n const oldValue = isMobileMode();\n _detectedIsMobileMode = window.matchMedia('only screen and (max-width: 840px)').matches\n || window.matchMedia('only screen and (max-height: 420px)').matches;\n const newValue = isMobileMode();\n if (newValue !== oldValue && mobileModeChangeHandler) {\n mobileModeChangeHandler(newValue);\n }\n };\n detectIsMobileMode();\n window.addEventListener('resize', () => 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 const oldValue = isMobileMode();\n _isMobileMode = value;\n const newValue = isMobileMode();\n if (newValue !== oldValue && mobileModeChangeHandler) {\n mobileModeChangeHandler(newValue);\n }\n }\n browserUtils.setIsMobileMode = setIsMobileMode;\n function onMobileModeChanged(callback) {\n mobileModeChangeHandler = callback;\n }\n browserUtils.onMobileModeChanged = onMobileModeChanged;\n})(browserUtils || (browserUtils = {}));\n\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 */\nfunction 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 */\nfunction addElement(parent, tag, options) {\n let element = document.createElement(tag);\n let 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction isVisible(element) {\n return element.style.display != 'none'\n && element.offsetWidth != 0\n && element.offsetHeight != 0;\n}\nfunction 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}\nfunction getViewportSize() {\n const width = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\n const height = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);\n return {\n width: width,\n height: height\n };\n}\nfunction getDocSize() {\n if (browserUtils.isIE())\n return getWinSize();\n const width = Math.max(document.documentElement.clientWidth, document.body.clientWidth || 0);\n const height = Math.max(document.documentElement.clientHeight, document.body.clientHeight || 0);\n return {\n width: width,\n height: height\n };\n}\nfunction getScrollPos() {\n const body = document.body;\n const docElem = document.documentElement;\n return {\n top: window.pageYOffset || docElem.scrollTop || body.scrollTop,\n left: window.pageXOffset || docElem.scrollLeft || body.scrollLeft\n };\n}\nfunction getElementAbsolutePos(element) {\n let res = { x: 0, y: 0 };\n if (element !== null) {\n const position = offset(element);\n res = { x: position.left, y: position.top };\n }\n return res;\n}\nfunction offset(element) {\n const defaultBoundingClientRect = { top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 };\n let box;\n try {\n box = element.getBoundingClientRect();\n }\n catch (_a) {\n box = defaultBoundingClientRect;\n }\n const body = document.body;\n const docElem = document.documentElement;\n const scollPos = getScrollPos();\n const scrollTop = scollPos.top;\n const scrollLeft = scollPos.left;\n const clientTop = docElem.clientTop || body.clientTop || 0;\n const clientLeft = docElem.clientLeft || body.clientLeft || 0;\n const top = box.top + scrollTop - clientTop;\n const left = box.left + scrollLeft - clientLeft;\n return { top: Math.round(top), left: Math.round(left) };\n}\nfunction getWinSize() {\n return {\n width: window.innerWidth,\n height: window.innerHeight\n };\n}\nfunction slideDown(target, duration, callback) {\n target.style.removeProperty('display');\n let display = window.getComputedStyle(target).display;\n if (display === 'none')\n display = 'block';\n target.style.display = display;\n let 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(() => {\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}\nfunction 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(() => {\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}\nconst eqCssPrefix = 'eqjs';\nconst eqCssMobile = 'eqjs-mobile';\nfunction getMobileCssClass() {\n return browserUtils.isMobileMode() ? 'k-mobile' : null;\n}\n\nfunction mask(input, maskPattern) {\n const d = { 9: '[0-9]', a: '[a-z]' };\n const mask = maskPattern.split('');\n const keyDownHandler = (e) => {\n // backspace key or delete key\n if (e.keyCode === 8 || e.keyCode === 46) {\n e.preventDefault();\n let mskd = [];\n let startSelection = input.selectionStart;\n if (startSelection == 0)\n return;\n let selection = startSelection;\n let onlyLodash = true;\n for (let index = mask.length - 1; index >= 0; index--) {\n const el = mask[index];\n if (d[el]) {\n let 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 const event = document.createEvent('Event');\n event.initEvent('input', true, true);\n input.dispatchEvent(event);\n }\n };\n const keyPressHandler = (e) => {\n const char = String.fromCharCode(e.charCode);\n if (char) {\n e.preventDefault();\n let mskd = [];\n let selectionStart = input.selectionStart;\n let selection = selectionStart;\n mask.forEach((el, index) => {\n if (d[el]) {\n const ch = (index != selectionStart)\n ? input.value.charAt(index)\n : char;\n let t = new RegExp(d[el], 'i').test(ch);\n mskd.push(t ? ch : '_');\n if (t && selectionStart === index)\n selection++;\n }\n else {\n mskd.push(el);\n if (selection === index)\n selection++;\n if (selectionStart === index)\n selectionStart++;\n }\n });\n input.value = mskd.join('');\n input.selectionStart = input.selectionEnd = selection;\n const event = document.createEvent('Event');\n event.initEvent('input', true, true);\n input.dispatchEvent(event);\n }\n };\n const inputHandler = (e) => {\n if (e.type === 'focus' && input.value !== '')\n return;\n let mskd = [];\n let startSelection = input.selectionStart;\n mask.forEach((el, index) => {\n if (d[el]) {\n let 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\nclass DomElementBuilder {\n constructor(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 addChild(tag, childBuilder) {\n const builder = domel(tag, this.element);\n if (childBuilder) {\n childBuilder(builder);\n }\n return this;\n }\n addChildElement(element) {\n if (element) {\n this.element.appendChild(element);\n }\n return this;\n }\n attr(attrId, attrValue) {\n this.element.setAttribute(attrId, attrValue);\n return this;\n }\n id(value) {\n return this.attr(\"id\", value);\n }\n focus() {\n this.element.focus();\n return this;\n }\n title(value) {\n return this.attr('title', value);\n }\n data(dataId, 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 show() {\n return this.removeStyle('display');\n }\n hide(toHide = true) {\n return (toHide) ? this.setStyle('display', 'none') : this;\n }\n visible(isVisible = true) {\n return isVisible ? this.setStyle('visibility', 'visible') : this.setStyle('visibility', 'hidden');\n }\n isVisible() {\n return !!(this.element.offsetWidth || this.element.offsetHeight || this.element.getClientRects().length);\n }\n addClass(className, ...classNames) {\n if (className) {\n const fullList = [...className.trim().split(\" \"), ...classNames];\n for (let i = 0; i < fullList.length; i++)\n this.element.classList.add(fullList[i]);\n }\n return this;\n }\n removeClass(className, ...classNames) {\n if (className) {\n const fullList = [...className.trim().split(\" \"), ...classNames];\n for (let i = 0; i < fullList.length; i++)\n this.element.classList.remove(fullList[i]);\n }\n return this;\n }\n toggleClass(className, force = undefined) {\n if (className) {\n this.element.classList.toggle(className, force);\n }\n return this;\n }\n on(eventType, listener) {\n const eventTypes = eventType.split(' ');\n for (let i = 0; i < eventTypes.length; i++) {\n this.element.addEventListener(eventTypes[i], listener);\n }\n return this;\n }\n off(eventType, listener) {\n const eventTypes = eventType.split(' ');\n for (let i = 0; i < eventTypes.length; i++) {\n this.element.removeEventListener(eventTypes[i], listener);\n }\n return this;\n }\n setStyle(styleId, styleValue) {\n this.element.style.setProperty(styleId, styleValue);\n return this;\n }\n removeStyle(styleId) {\n this.element.style.removeProperty(styleId);\n return this;\n }\n text(text) {\n this.element.innerText = text;\n return this;\n }\n html(html) {\n this.element.innerHTML = html;\n return this;\n }\n clear() {\n const oldElem = this.element;\n this.element = document.createElement(this.element.tagName);\n oldElem.replaceWith(this.element);\n }\n addText(text) {\n const textEl = document.createTextNode(text);\n this.element.appendChild(textEl);\n return this;\n }\n addHtml(html) {\n this.element.innerHTML += html;\n return this;\n }\n toDOM() {\n return this.element;\n }\n appendTo(parent) {\n if (parent) {\n parent.appendChild(this.element);\n }\n return this;\n }\n}\nclass DomTextAreaElementBuilder extends DomElementBuilder {\n constructor(element, parent) {\n if (element) {\n super(element, parent);\n }\n else {\n super(\"textarea\", parent);\n }\n }\n name(value) {\n this.element.name = value;\n return this;\n }\n rows(rows) {\n this.element.rows = rows;\n return this;\n }\n cols(cols) {\n this.element.cols = cols;\n return this;\n }\n value(value) {\n this.element.value = value;\n return this;\n }\n}\nclass DomInputElementBuilder extends DomElementBuilder {\n constructor(element, parent) {\n if (element) {\n super(element, parent);\n }\n else {\n super(\"input\", parent);\n }\n }\n name(value) {\n this.element.name = value;\n return this;\n }\n type(value) {\n this.element.type = value;\n return this;\n }\n size(value) {\n this.element.size = value;\n return this;\n }\n value(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 mask(maskPattern) {\n mask(this.element, maskPattern);\n return this;\n }\n}\nclass DomSelectElementBuilder extends DomElementBuilder {\n constructor(element, parent) {\n if (element) {\n super(element, parent);\n }\n else {\n super(\"select\", parent);\n }\n }\n addOption(value) {\n const 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 value(value) {\n this.element.value = value;\n return this;\n }\n}\nfunction 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\nconst touchEventIsDefined = typeof TouchEvent !== 'undefined';\nvar DropEffect;\n(function (DropEffect) {\n DropEffect[\"None\"] = \"none\";\n DropEffect[\"Allow\"] = \"allow\";\n DropEffect[\"Forbid\"] = \"forbid\";\n})(DropEffect || (DropEffect = {}));\nclass EqDragEvent {\n constructor(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}\nclass Position {\n constructor(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}\nclass DragManager {\n constructor() {\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 registerDraggableItem(descriptor) {\n const 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 const detectDragging = (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 const 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 const mouseMoveEventListener = (ev) => {\n this.mouseMoveDragListener(ev);\n };\n const startDragging = (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 const 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 const mouseDownListener = (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 const mouseUpListener = (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 const endDraggind = (ev) => {\n try {\n if (this.containerDescriptorIndex >= 0) {\n const dropContDesc = this.containerDescriptors[this.containerDescriptorIndex];\n const container = {\n element: dropContDesc.element,\n scopes: dropContDesc.scopes,\n data: dropContDesc.data\n };\n const event = 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);\n }\n }\n }\n finally {\n if (dropContDesc.onDragLeave) {\n dropContDesc.onDragLeave(container, event);\n }\n }\n }\n }\n finally {\n try {\n const event = new EqDragEvent(this.draggableItem, this.dragImage, ev);\n event.data.finishedSuccessfully = this.finishedSuccessfully;\n if (descriptor.onDragEnd) {\n descriptor.onDragEnd(event);\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 registerDropContainer(descriptor) {\n const 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 removeDropContainer(descriptorOrSlot) {\n const descs = this.containerDescriptors\n .filter(desc => desc === descriptorOrSlot\n || desc.element == descriptorOrSlot);\n if (descs) {\n for (const desc of descs) {\n utils.removeArrayItem(this.containerDescriptors, desc);\n }\n }\n }\n mouseMoveDragListener(ev) {\n if (ev instanceof MouseEvent) {\n ev.preventDefault();\n }\n ev.stopPropagation();\n this.updateDragItemPosition(ev);\n if (this.containerDescriptorIndex == -1) {\n for (let i = 0; i < this.containerDescriptors.length; i++) {\n const 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 const 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 const descriptor = this.containerDescriptors[this.containerDescriptorIndex];\n const container = {\n element: descriptor.element,\n scopes: descriptor.scopes,\n data: descriptor.data\n };\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\n const event = new EqDragEvent(this.draggableItem, this.dragImage, ev);\n event.dropEffect = this.dropEffect;\n if (descriptor.onDragOver) {\n descriptor.onDragOver(container, event);\n }\n }\n }\n }\n updateCusror(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 updateImageClass(dropEffect) {\n this.dragImage.classList.remove(`${this.classPrefix}-allow`);\n this.dragImage.classList.remove(`${this.classPrefix}-forbid`);\n this.dragImage.classList.remove(`${this.classPrefix}-none`);\n switch (dropEffect) {\n case DropEffect.Allow:\n this.dragImage.classList.add(`${this.classPrefix}-allow`);\n break;\n case DropEffect.None:\n this.dragImage.classList.add(`${this.classPrefix}-none`);\n break;\n case DropEffect.Forbid:\n this.dragImage.classList.add(`${this.classPrefix}-forbid`);\n break;\n default:\n this.dragImage.classList.add(`${this.classPrefix}-none`);\n break;\n }\n }\n setCursorStyle(element, cursor) {\n if (element) {\n element.style.cursor = cursor;\n for (let i = 0; i < element.children.length; i++) {\n this.setCursorStyle(element.children[i], cursor);\n }\n }\n }\n updateDragItemPosition(ev) {\n if (this.dragImage) {\n const 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 dragEnterEvent(ev) {\n const descriptor = this.containerDescriptors[this.containerDescriptorIndex];\n const container = {\n element: descriptor.element,\n scopes: descriptor.scopes,\n data: descriptor.data\n };\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\n const event = new EqDragEvent(this.draggableItem, this.dragImage, ev);\n event.dropEffect = DropEffect.Allow;\n if (descriptor.onDragEnter) {\n descriptor.onDragEnter(container, event);\n }\n this.dropEffect = event.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 dragLeaveEvent(ev) {\n const descriptor = this.containerDescriptors[this.containerDescriptorIndex];\n const container = {\n element: descriptor.element,\n scopes: descriptor.scopes,\n data: descriptor.data\n };\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\n const event = new EqDragEvent(this.draggableItem, this.dragImage, ev);\n event.dropEffect = DropEffect.None;\n if (descriptor.onDragLeave) {\n descriptor.onDragLeave(container, event);\n }\n this.dropEffect = event.dropEffect;\n this.updateCusror(this.dropEffect);\n this.updateImageClass(this.dropEffect);\n }\n }\n detectDragEnterEvent(container, ev) {\n const containerPos = getElementAbsolutePos(container);\n const 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 detectDragLeaveEvent(container, ev) {\n const containerPos = getElementAbsolutePos(container);\n const 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}\n//global variable\nconst eqDragManager = new DragManager();\n\nvar 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\n//import { CellRendererType } from \"./easy_grid_cell_renderer\";\n//import { GridCellRenderer } from './easy_grid_cell_renderer';\nconst DEFAULT_WIDTH_STRING = 250;\nconst ROW_NUM_WIDTH = 60;\nvar 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}\nclass GridColumn {\n constructor(column, grid, 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 const 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._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 }\n }\n get label() {\n return this._label ? this._label : this.isRowNum ? '' : this.dataColumn.label;\n }\n ;\n set label(value) {\n this._label = this.label;\n }\n /** Get column description. */\n get description() {\n return this._description;\n }\n get type() {\n return this.dataColumn ? this.dataColumn.type : null;\n }\n}\nclass GridColumnList {\n constructor(columnList, grid) {\n this.items = [];\n this.grid = grid;\n this.sync(columnList);\n }\n sync(columnList, hasRowNumCol = true) {\n this.clear();\n const rowNumCol = new GridColumn(null, this.grid, true);\n this.add(rowNumCol);\n if (!hasRowNumCol) {\n rowNumCol.isVisible = false;\n }\n if (columnList) {\n for (let column of columnList.getItems()) {\n const 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 get count() {\n return this.items.length;\n }\n add(col) {\n const index = this.items.length;\n this.items.push(col);\n return index;\n }\n put(index, col) {\n if (index >= 0 && index < this.items.length) {\n this.items[index] = col;\n }\n }\n move(col, newIndex) {\n let oldIndex = this.items.indexOf(col);\n if (oldIndex >= 0 && oldIndex != newIndex)\n utils.moveArrayItem(this.items, oldIndex, newIndex);\n }\n get(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 getItems() {\n return this.items;\n }\n removeAt(index) {\n this.get(index);\n this.items.splice(index, 1);\n //delete this.mapper[col.name];\n }\n clear() {\n this.items = [];\n //this.mapper = {};\n }\n}\n\nconst cssPrefix$1 = \"keg\";\nconst DFMT_REGEX = /{0:(.*?)}/g;\nvar 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 = {}));\nconst StringCellRendererDefault = (value, column, cellValueElement, rowElement) => {\n const 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(`${cssPrefix$1}-cell-value-align-left`);\n }\n};\nconst NumberCellRendererDefault = (value, column, cellValueElement, rowElement) => {\n let 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, (_, $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(`${cssPrefix$1}-cell-value-align-right`);\n }\n};\nconst DateTimeCellRendererDefault = (value, column, cellValueElement, rowElement) => {\n const isDate = Object.prototype.toString.call(value) === '[object Date]';\n let 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, (_, $1) => {\n return i18n.dateTimeToStrEx(value, column.type, $1);\n });\n }\n else {\n const locale = i18n.getCurrentLocale();\n const 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 = `${value.toLocaleDateString(locale)} ${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(`${cssPrefix$1}-cell-value-align-right`);\n }\n};\nconst BoolCellRendererDefault = (value, column, cellValueElement, rowElement) => {\n if (column.dataColumn && column.dataColumn.displayFormat\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\n const strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, (_, $1) => {\n return i18n.booleanToStr(value, $1);\n });\n return StringCellRendererDefault(strValue, column, cellValueElement);\n }\n else {\n cellValueElement.classList.add(`${cssPrefix$1}-cell-value-bool`);\n cellValueElement.classList.add(`${cssPrefix$1}-${value ? 'cell-value-true' : 'cell-value-false'}`);\n }\n};\nclass GridCellRendererStore {\n constructor(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 getDefaultRenderer(columnType) {\n const cellType = this.getCellType(columnType);\n return this.defaultRenderers[CellRendererType[cellType]];\n }\n getDefaultRendererByType(rendererType) {\n return this.defaultRenderers[CellRendererType[rendererType]];\n }\n setDefaultRenderer(cellType, renderer) {\n if (renderer) {\n this.defaultRenderers[CellRendererType[cellType]] = renderer;\n }\n }\n getRenderer(name) {\n return this.renderers[name];\n }\n registerRenderer(name, renderer) {\n this.renderers[name] = renderer;\n }\n getCellType(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}\n\nconst DEFAULT_ROW_HEIGHT = 36;\n/** Represents a grid widget with columns rows, paging, custom rendering and more */\nclass EasyGrid {\n /** Creates and initializes all internal properties of the grid object */\n constructor(options) {\n this.cssPrefix = \"keg\";\n this.pagination = { page: 1, pageSize: 30, total: 0 };\n this.paginationOptions = {\n maxButtonCount: 10,\n useBootstrap: false\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(`${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 mergeOptions(options) {\n const aggrOptions = utils.assignDeep({}, this.defaultDataGridOptions.aggregates, options.aggregates);\n const colWidthOptions = utils.assignDeep({}, this.defaultDataGridOptions.columnWidths, options.columnWidths);\n const pagingOptions = utils.assignDeep({}, this.defaultDataGridOptions.paging, options.paging);\n const result = utils.assign({}, this.defaultDataGridOptions, options);\n result.aggregates = aggrOptions;\n result.columnWidths = colWidthOptions;\n result.paging = pagingOptions;\n return result;\n }\n processColumnWidthsOptions() {\n const widthOptions = this.options.columnWidths;\n if (!widthOptions)\n return;\n //string columns\n utils.getStringDataTypes().forEach(dataType => {\n widthOptions[dataType] = Object.assign(Object.assign({}, widthOptions.stringColumns), widthOptions[dataType]);\n });\n //numeric columns\n utils.getNumericDataTypes().forEach(dataType => {\n widthOptions[dataType] = Object.assign(Object.assign({}, widthOptions.numberColumns), widthOptions[dataType]);\n });\n //bool columns\n widthOptions[DataType.Bool] = Object.assign(Object.assign({}, widthOptions.boolColumns), widthOptions[DataType.Bool]);\n //date columns\n utils.getDateDataTypes().forEach(dataType => {\n widthOptions[dataType] = Object.assign(Object.assign({}, widthOptions.dateColumns), widthOptions[dataType]);\n });\n //other columns\n const knownTypes = [\n ...utils.getStringDataTypes(),\n ...utils.getNumericDataTypes(),\n ...utils.getDateDataTypes(),\n DataType.Bool\n ];\n utils.getAllDataTypes().forEach(dataType => {\n if (!(dataType in knownTypes)) {\n widthOptions[dataType] = Object.assign(Object.assign({}, widthOptions.otherColumns), widthOptions[dataType]);\n }\n });\n widthOptions[DataType.Unknown] = widthOptions.otherColumns;\n }\n setSlot(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 const 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 init(options) {\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', ev => this.activeRowIndex = -1);\n utils.assign(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: (_, ev) => {\n this.slot.classList.add(`${eqCssPrefix}-drophover`);\n this.showLandingSlot(ev.pageX, ev.pageY);\n },\n onDragOver: (_, ev) => {\n this.showLandingSlot(ev.pageX, ev.pageY);\n },\n onDragLeave: (_, ev) => {\n ev.dropEffect = DropEffect.Forbid;\n this.slot.classList.remove(`${eqCssPrefix}-drophover`);\n this.hideLandingSlot();\n },\n onDrop: (_, 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 fireEvent(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 setData(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 getData() {\n return this.dataTable;\n }\n /** Gets the list of grid columns */\n getColumns() {\n return this.columns;\n }\n /** This function is called when the grid is destroyed */\n destroy() {\n this.slot.innerHTML = \"\";\n }\n /** Clears the current DOM object and re-renders everything from the scratch */\n refresh() {\n this.clearDOM();\n this.render();\n }\n clearDOM() {\n this.slot.innerHTML = '';\n }\n /** Clears all DOM object in the grid and return it to its initial state */\n clear() {\n this.pagination.page = 1;\n this.clearDOM();\n }\n /** Renders the grid */\n render() {\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(`${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 let gridContainer = document.createElement('div');\n gridContainer.classList.add(`${this.cssPrefix}-container`);\n gridContainer.appendChild(this.rootDiv);\n this.slot.appendChild(gridContainer);\n const needAutoResize = this.options.columnWidths.autoResize !== AutoResizeColumns.Never;\n if (this.rowsOnPagePromise) {\n this.rowsOnPagePromise\n .then(() => this.updateHeight())\n .then(() => {\n this.firstRender = false;\n this.rowsOnPagePromise = null;\n });\n }\n else {\n setTimeout(() => {\n this.updateHeight()\n .then(() => {\n this.firstRender = false;\n if (needAutoResize) {\n this.resizeColumns();\n }\n });\n }, 100);\n }\n }\n updateHeight() {\n return new Promise((resolve) => {\n if (this.options.viewportRowsCount) {\n const firstRow = this.bodyCellContainerDiv.firstElementChild;\n const rowHeight = firstRow ? firstRow.offsetHeight : DEFAULT_ROW_HEIGHT;\n const rowCount = this.options.viewportRowsCount; // || DEFAULT_ROW_COUNT;\n let viewportHeight = rowHeight * rowCount;\n domel(this.bodyViewportDiv)\n .setStyle('height', `${viewportHeight}px`);\n setTimeout(() => {\n const sbHeight = this.bodyViewportDiv.offsetHeight - this.bodyViewportDiv.clientHeight;\n viewportHeight = viewportHeight + sbHeight;\n domel(this.bodyViewportDiv)\n .setStyle('height', `${viewportHeight}px`);\n resolve();\n }, 100);\n return;\n }\n else if (this.containerInitialHeight > 0) ;\n resolve();\n })\n .then(() => {\n if (this.options.fixHeightOnFirstRender && this.firstRender) {\n this.slot.style.height = `${this.slot.offsetHeight}px`;\n }\n });\n }\n getContainerWidth() {\n return this.columns.getItems()\n .filter(col => col.isVisible)\n .map(col => col.width)\n .reduce((sum, current) => { return sum + current; });\n }\n renderHeader() {\n this.headerDiv = domel('div')\n .addClass(`${this.cssPrefix}-header`)\n .toDOM();\n this.headerViewportDiv = domel('div', this.headerDiv)\n .addClass(`${this.cssPrefix}-header-viewport`)\n .toDOM();\n this.headerCellContainerDiv = domel('div', this.headerViewportDiv)\n .addClass(`${this.cssPrefix}-header-cell-container`)\n .toDOM();\n this.headerRowDiv = domel('div', this.headerCellContainerDiv)\n .addClass(`${this.cssPrefix}-header-row`)\n .toDOM();\n this.columns.getItems().forEach((column, index) => {\n if (!column.isVisible) {\n return;\n }\n let hd = this.renderColumnHeader(column, index);\n this.headerRowDiv.appendChild(hd);\n if (column.isRowNum) {\n domel(hd)\n .addChildElement(this.renderHeaderButtons());\n }\n });\n const containerWidth = this.getContainerWidth();\n domel(this.headerCellContainerDiv)\n .setStyle('width', `${containerWidth}px`);\n }\n hasData() {\n return this.dataTable.columns.count > 0;\n }\n renderColumnHeader(column, index) {\n let colBuilder = domel('div')\n .addClass(`${this.cssPrefix}-header-cell`)\n .data('col-idx', `${index}`)\n .setStyle('width', `${column.width}px`);\n if (column.dataColumn) {\n colBuilder\n .data('col-id', `${column.dataColumn.id}`);\n }\n let colDiv = colBuilder.toDOM();\n domel('div', colDiv)\n .addClass(`${this.cssPrefix}-header-cell-resize`);\n if (!column.isRowNum) {\n domel('div', colDiv)\n .addClass(`${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: (dragImage) => {\n dragImage.innerHTML = '';\n const attrLabel = document.createElement('div');\n attrLabel.innerText = column.label;\n dragImage.classList.add(`${this.cssPrefix}-sortable-helper`);\n dragImage.appendChild(attrLabel);\n },\n onDragStart: (ev) => {\n ev.dropEffect = DropEffect.Allow;\n }\n });\n }\n return colDiv;\n }\n renderBody() {\n this.bodyDiv = domel('div')\n .addClass(`${this.cssPrefix}-body`)\n .toDOM();\n this.bodyViewportDiv = domel('div', this.bodyDiv)\n .addClass(`${this.cssPrefix}-body-viewport`)\n .attr('tabIndex', '0')\n .toDOM();\n this.bodyCellContainerDiv = domel('div', this.bodyViewportDiv)\n .addClass(`${this.cssPrefix}-cell-container`)\n .toDOM();\n const showAggrs = this.canShowAggregates();\n if (this.dataTable) {\n this.showProgress();\n this.rowsOnPagePromise = this.getRowsToRender()\n .then((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 let rowsToRender = 0;\n if (rows.length) {\n const groups = 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((row, index) => {\n if (showAggrs)\n this.updateTotalsState(groups, row);\n //we don't actually render the last row\n if (index < rowsToRender) {\n const tr = this.renderRow(row, index);\n this.bodyCellContainerDiv.appendChild(tr);\n }\n });\n const showGrandTotalsOnEachPage = this.options.aggregates && this.options.aggregates.showGrandTotalsOnEachPage;\n if (showAggrs && (this.isLastPage() || showGrandTotalsOnEachPage)) {\n const row = new DataRow(this.dataTable.columns, new Array(this.dataTable.columns.count));\n this.updateTotalsState(groups, row, true);\n }\n }\n const needAutoResize = this.options.columnWidths.autoResize !== AutoResizeColumns.Never;\n if (needAutoResize) {\n this.resizeColumns();\n }\n else {\n const containerWidth = this.getContainerWidth();\n domel(this.bodyCellContainerDiv)\n .setStyle('width', `${containerWidth}px`);\n }\n return rowsToRender;\n })\n .catch(error => { console.error(error); return 0; });\n }\n this.bodyViewportDiv.addEventListener('scroll', ev => {\n domel(this.headerViewportDiv)\n .setStyle('margin-left', `-${this.bodyViewportDiv.scrollLeft}px`);\n });\n this.bodyViewportDiv.addEventListener('keydown', this.onViewportKeydown.bind(this));\n }\n isLastPage() {\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 canShowAggregates() {\n if (!this.options || !this.options.aggregates || !this.options.aggregates.settings)\n return false;\n const aggrSettings = this.options.aggregates.settings;\n const result = (aggrSettings.hasAggregates() || aggrSettings.hasRecordCount())\n && (aggrSettings.hasGroups() || aggrSettings.hasGrandTotals());\n return result;\n }\n updateTotalsState(groups, newRow, isLast = false) {\n const aggrSettings = this.options.aggregates.settings;\n if (this.prevRowTotals && aggrSettings.hasGroups()) {\n let changeLevel = -1;\n for (let level = 1; level <= groups.length; level++) {\n const group = groups[level - 1];\n for (const col of group.columns) {\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 (let level = groups.length; level >= changeLevel; level--) {\n const row = new DataRow(this.dataTable.columns, this.prevRowTotals.toArray());\n const tr = this.renderTotalsRow(level, row);\n this.bodyCellContainerDiv.appendChild(tr);\n }\n }\n }\n if (isLast && aggrSettings.hasGrandTotals() && aggrSettings.hasAggregates()) {\n const tr = this.renderTotalsRow(0, newRow);\n this.bodyCellContainerDiv.appendChild(tr);\n }\n this.prevRowTotals = newRow;\n }\n applyGroupColumnTemplate(template, value, count) {\n let result = template.replace(/{{\\s*GroupValue\\s*}}/g, value ? `${value}` : '-');\n result = result.replace(/{{\\s*GroupCount\\s*}}/g, count ? `${count}` : '-');\n return result;\n }\n renderTotalsRow(level, row) {\n const aggrSettings = this.options.aggregates.settings;\n const group = (level > 0)\n ? aggrSettings.getGroups()[level - 1]\n : { columns: [], aggregates: aggrSettings.getAggregates() };\n const rowBuilder = domel('div')\n .addClass(`${this.cssPrefix}-row`)\n .addClass(`${this.cssPrefix}-row-totals`)\n .addClass(`${this.cssPrefix}-totals-lv${level}`)\n .data('totals-level', `${level}`)\n .attr('tabindex', '-1');\n const rowElement = rowBuilder.toDOM();\n this.columns.getItems().forEach((column, index) => {\n if (!column.isVisible) {\n return;\n }\n let val = '';\n const 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 if (colIndex == this.dataTable.columns.count - 1) {\n val = '. . . . . .';\n }\n rowElement.appendChild(this.renderCell(column, index, val, rowElement));\n });\n const aggrContainer = this.options.aggregates.calculator.getAggrContainer();\n const aggrCols = aggrSettings.getAggregates().map(c => c.colId);\n const key = aggrSettings.buildGroupKey(group, row);\n aggrContainer.getAggregateData(level, key)\n .then((values) => {\n for (const aggrColId of aggrCols) {\n row.setValue(aggrColId, values[aggrColId]);\n }\n rowElement.innerHTML = '';\n this.columns.getItems().forEach((column, index) => {\n if (!column.isVisible) {\n return;\n }\n let val = '';\n const colIndex = !column.isRowNum\n ? this.dataTable.columns.getIndex(column.dataColumn.id)\n : -1;\n if (!column.isRowNum) {\n let isLastGroupColumn = false;\n if (column.dataColumn) {\n const groupColIndex = group.columns.indexOf(column.dataColumn.id);\n const 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 let 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 const cellDiv = this.renderCell(column, index, val, rowElement);\n const innerCell = cellDiv.firstChild;\n val = innerCell.innerHTML;\n val = this.applyGroupColumnTemplate(groupFooterTemplate, val, values[aggrSettings.COUNT_FIELD_NAME]);\n }\n }\n const cellDiv = this.renderCell(column, index, val, rowElement);\n rowElement.appendChild(cellDiv);\n });\n })\n .catch((error) => console.error(error));\n return rowElement;\n }\n onViewportKeydown(ev) {\n if (this.options.showActiveRow) {\n const rowCount = this.bodyCellContainerDiv.querySelectorAll(`.${this.cssPrefix}-row`).length;\n let newValue;\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 ensureRowVisibility(rowOrIndex) {\n const row = typeof rowOrIndex === 'number'\n ? this.getDataRow(rowOrIndex)\n : rowOrIndex;\n if (row) {\n let rowRect = row.getBoundingClientRect();\n const viewportRect = this.bodyViewportDiv.getBoundingClientRect();\n const rowTop = rowRect.top - viewportRect.top;\n const rowBottom = rowRect.bottom - viewportRect.top;\n const viewportHeight = this.bodyViewportDiv.clientHeight;\n const 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 getRowsToRender() {\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(error => {\n console.error(error);\n return [];\n });\n }\n renderFooter() {\n this.footerDiv = domel('div')\n .addClass(`${this.cssPrefix}-footer`)\n .toDOM();\n if (this.rowsOnPagePromise) {\n this.rowsOnPagePromise.then(count => {\n this.footerDiv.innerHTML = '';\n this.footerPaginateDiv = this.renderPageNavigator();\n this.footerDiv.appendChild(this.footerPaginateDiv);\n const pageInfoBlock = this.renderPageInfoBlock(count);\n this.footerDiv.appendChild(pageInfoBlock);\n });\n }\n }\n renderPageInfoBlock(count) {\n const pageInfoDiv = domel('div')\n .addClass(`${this.cssPrefix}-page-info`)\n .toDOM();\n const rowCount = this.dataTable.getTotal();\n if (rowCount > 0) {\n const fistPageRecordNum = count\n ? (this.pagination.page - 1) * this.pagination.pageSize + 1\n : 0;\n const lastPageRecordNum = count\n ? fistPageRecordNum + count - 1\n : 0;\n let totalStr = this.dataTable.getTotal().toString();\n if (this.dataTable.elasticChunks) {\n const count = this.dataTable.getCachedCount();\n const total = this.dataTable.getTotal();\n if (count !== total)\n totalStr = '?';\n }\n pageInfoDiv.innerHTML = i18n.getText('GridPageInfo')\n .replace('{FirstPageRecordNum}', `${fistPageRecordNum.toString()}`)\n .replace('{LastPageRecordNum}', `${lastPageRecordNum.toString()}`)\n .replace('{Total}', `${totalStr}`);\n }\n return pageInfoDiv;\n }\n showProgress() {\n }\n hideProgress() {\n }\n getLocalIndexByGlobal(index) {\n if (this.pagination) {\n return index % this.pagination.pageSize;\n }\n else {\n return index;\n }\n }\n getGlobalIndexByLocal(index) {\n if (this.pagination) {\n return (this.pagination.page - 1) * this.pagination.pageSize + index;\n }\n else {\n return index;\n }\n }\n renderRow(row, index) {\n let indexGlobal = this.getGlobalIndexByLocal(index);\n let rowBuilder = domel('div')\n .addClass(`${this.cssPrefix}-row`)\n .addClass(`${this.cssPrefix}-row-${index % 2 == 1 ? 'odd' : 'even'}`)\n .data('row-idx', `${indexGlobal}`)\n .attr('tabindex', '-1')\n .on('click', (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', (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(`${this.cssPrefix}-row-first`);\n }\n let rowElement = rowBuilder.toDOM();\n if (this.options.showActiveRow && index == this.activeRowIndex) {\n rowBuilder.addClass(`${this.cssPrefix}-row-active`);\n }\n this.columns.getItems().forEach((column, index) => {\n if (!column.isVisible) {\n return;\n }\n const colindex = column.isRowNum ? -1 : this.dataTable.columns.getIndex(column.dataColumn.id);\n let val = column.isRowNum ? indexGlobal + 1 : row.getValue(colindex);\n rowElement.appendChild(this.renderCell(column, index, val, rowElement));\n });\n return rowElement;\n }\n renderCell(column, colIndex, value, rowElement) {\n const builder = domel('div')\n .addClass(`${this.cssPrefix}-cell`)\n .data('col-idx', `${colIndex}`)\n .attr('tabindex', '-1')\n .setStyle('width', `${column.width}px`);\n if (column.align == GridColumnAlign.LEFT) {\n builder.addClass(`${this.cssPrefix}-cell-align-left`);\n }\n else if (column.align == GridColumnAlign.RIGHT) {\n builder.addClass(`${this.cssPrefix}-cell-align-right`);\n }\n else if (column.align == GridColumnAlign.CENTER) {\n builder.addClass(`${this.cssPrefix}-cell-align-center`);\n }\n const cellElement = builder.toDOM();\n const valueCell = cellElement.appendChild(domel('div')\n .addClass(`${this.cssPrefix}-cell-value`)\n .toDOM());\n const cellRenderer = this.getCellRenderer(column);\n if (cellRenderer) {\n cellRenderer(value, column, valueCell, rowElement);\n }\n return cellElement;\n }\n getCellRenderer(column) {\n let cellRenderer;\n if (column.isRowNum) {\n cellRenderer = this.cellRendererStore.getDefaultRendererByType(CellRendererType.NUMBER);\n }\n else {\n cellRenderer = this.cellRendererStore.getDefaultRenderer(column.type);\n }\n if (this.options && this.options.onGetCellRenderer) {\n cellRenderer = this.options.onGetCellRenderer(column, cellRenderer) || cellRenderer;\n }\n return cellRenderer;\n }\n /** Sets current grid pages (if paging is used) */\n setPage(page) {\n this.pagination.page = page;\n this.fireEvent({ type: \"pageChanged\", page: page });\n this.refresh();\n this.bodyViewportDiv.focus();\n }\n renderPageNavigator() {\n let paginateDiv = document.createElement('div');\n paginateDiv.className = `${this.cssPrefix}-pagination-wrapper`;\n const rowCount = this.dataTable.getTotal();\n const totalRows = this.dataTable.getTotal();\n const pageSize = this.pagination.pageSize;\n const totalPages = Math.ceil(totalRows / pageSize);\n const distance = 8, islandSize = 3;\n const prefix = this.paginationOptions.useBootstrap ? '' : `${this.cssPrefix}-`;\n if (!this.options.paging || !this.options.paging.enabled || rowCount <= pageSize) {\n return paginateDiv;\n }\n const buttonClickHandler = (ev) => {\n const element = ev.target;\n if (element.hasAttribute('data-page')) {\n const page = parseInt(element.getAttribute('data-page'));\n this.setPage(page);\n }\n };\n const renderPaginationItem = (pageIndex, content, disabled, extreme, active, title) => {\n const li = document.createElement('li');\n li.className = `${prefix}page-item`;\n if (!extreme) {\n if (active) {\n li.className += ' active';\n }\n const a = document.createElement('a');\n a.setAttribute('href', 'javascript:void(0)');\n a.innerHTML = content || pageIndex.toString();\n a.setAttribute(\"data-page\", `${pageIndex}`);\n a.className = `${prefix}page-link`;\n a.addEventListener(\"click\", buttonClickHandler);\n if (title) {\n a.setAttribute(\"title\", title);\n }\n li.appendChild(a);\n return li;\n }\n let a = document.createElement('span');\n a.setAttribute('aria-hidden', 'true');\n a.className = `${prefix}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\", `${pageIndex}`);\n }\n else {\n let newA = document.createElement('a');\n newA.setAttribute('href', 'javascript:void(0)');\n newA.setAttribute('data-page', `${pageIndex}`);\n a = newA;\n }\n a.className = `${prefix}page-link`;\n a.addEventListener(\"click\", buttonClickHandler);\n }\n a.innerHTML = content;\n if (title) {\n a.setAttribute(\"title\", title);\n }\n li.appendChild(a);\n return li;\n };\n const pageIndex = this.pagination.page || 1;\n let ul = document.createElement('ul');\n ul.className = `${prefix}pagination`;\n ul.style.userSelect = 'none';\n paginateDiv.appendChild(ul);\n if (this.dataTable.elasticChunks) {\n let cell = renderPaginationItem(pageIndex - 1, '«', pageIndex == 1, true, false);\n ul.appendChild(cell);\n cell = renderPaginationItem(pageIndex + 1, '»', this.isLastPage(), true, false);\n ul.appendChild(cell);\n }\n else {\n if (totalPages > 10) {\n ul.appendChild(renderPaginationItem(pageIndex - 10, '«', pageIndex <= 10, true, false, \"Jump left on 10 pages\"));\n }\n ul.appendChild(renderPaginationItem(pageIndex - 1, '‹', pageIndex == 1, true, false, \"Prev Page\"));\n ul.appendChild(renderPaginationItem(1, '1', pageIndex == 1, false, pageIndex === 1));\n if (totalPages <= 10) {\n for (let i = 2; i < totalPages; i++) {\n ul.appendChild(renderPaginationItem(i, `${i}`, pageIndex === i, false, pageIndex === i));\n }\n }\n else {\n if (pageIndex < distance) {\n for (let i = 2; i <= distance; i++) {\n ul.appendChild(renderPaginationItem(i, `${i}`, false, false, pageIndex === i));\n }\n if (totalPages > distance) {\n ul.appendChild(renderPaginationItem(-1, `...`, true, true, false));\n }\n }\n else if (pageIndex <= totalPages && pageIndex > totalPages - distance + 1) {\n if (totalPages > distance) {\n ul.appendChild(renderPaginationItem(-1, `...`, true, true, false));\n }\n for (let i = totalPages - distance + 1; i < totalPages; i++) {\n ul.appendChild(renderPaginationItem(i, `${i}`, pageIndex === i, false, pageIndex === i));\n }\n }\n else {\n ul.appendChild(renderPaginationItem(-1, `...`, true, true, false));\n // Island Left Side\n for (let i = islandSize; i > 0; i--) {\n ul.appendChild(renderPaginationItem(pageIndex - i, `${pageIndex - i}`, false, false, false));\n }\n // Center of Island\n ul.appendChild(renderPaginationItem(pageIndex, `${pageIndex}`, false, false, true));\n // Island Right Size\n for (let i = 1; i <= islandSize; i++) {\n ul.appendChild(renderPaginationItem(pageIndex + i, `${pageIndex + i}`, false, false, false));\n }\n ul.appendChild(renderPaginationItem(-1, `...`, true, true, false));\n }\n }\n if (totalPages > 1 || pageIndex < totalPages) {\n ul.appendChild(renderPaginationItem(totalPages, `${totalPages}`, pageIndex === totalPages, false, pageIndex === totalPages));\n }\n ul.appendChild(renderPaginationItem(pageIndex + 1, '›', pageIndex == totalPages, true, false, \"Next Page\"));\n if (totalPages > 10) {\n ul.appendChild(renderPaginationItem(pageIndex + 10, '»', pageIndex >= totalPages - 10, true, false, \"Jump right on 10 pages\"));\n }\n }\n if (this.options.paging.allowPageSizeChange) {\n const selectChangeHandler = (ev) => {\n const newValue = parseInt(ev.target.value);\n this.pagination.pageSize = newValue;\n this.pagination.page = 1;\n this.refresh();\n };\n const pageSizes = document.createElement('div');\n pageSizes.className = `${this.cssPrefix}-page-sizes`;\n const selectSize = document.createElement('div');\n selectSize.className = `kfrm-select ${this.cssPrefix}-page-sizes-select`;\n pageSizes.appendChild(selectSize);\n const sel = document.createElement('select');\n const selOptions = this.options.paging.pageSizeItems || [];\n const selSet = new Set(selOptions);\n selSet.add(this.options.paging.pageSize || 20);\n Array.from(selSet).forEach(el => {\n const option = document.createElement(\"option\");\n option.value = el.toString();\n option.text = el.toString();\n sel.appendChild(option);\n });\n sel.value = (this.pagination.pageSize || 20).toString();\n selectSize.appendChild(sel);\n sel.addEventListener('change', selectChangeHandler);\n const labelDiv = document.createElement('div');\n labelDiv.className = `${this.cssPrefix}-page-sizes-label`;\n pageSizes.appendChild(labelDiv);\n const label = document.createElement('span');\n label.innerText = i18n.getText('GridItemsPerPage');\n labelDiv.appendChild(label);\n paginateDiv.appendChild(pageSizes);\n }\n return paginateDiv;\n }\n addEventListener(eventType, handler) {\n return this.eventEmitter.subscribe(eventType, event => handler(event.data));\n }\n removeEventListener(eventType, handlerId) {\n this.eventEmitter.unsubscribe(eventType, handlerId);\n }\n renderHeaderButtons() {\n if (this.options.showPlusButton) {\n return domel('div')\n .addClass(`${this.cssPrefix}-header-btn-plus`)\n .title(this.options.plusButtonTitle || 'Add')\n .addChild('a', builder => builder\n .attr('href', 'javascript:void(0)')\n .on('click', (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 showLandingSlot(pageX, pageY) {\n const colElems = this.headerRowDiv.querySelectorAll(`[class*=${this.cssPrefix}-table-col]`);\n const cols = [];\n for (let i = 1; i < colElems.length; i++) {\n const 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 const landingPos = getElementAbsolutePos(this.landingSlot);\n if (pageX >= landingPos.x && pageX <= landingPos.x + this.landingSlot.offsetWidth) {\n return;\n }\n let newLandingIndex = this.landingIndex;\n for (let col of cols) {\n const colPos = getElementAbsolutePos(col);\n const 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 hideLandingSlot() {\n this.landingIndex = -1;\n setTimeout(() => {\n if (this.landingSlot.parentElement) {\n this.landingSlot.parentElement.removeChild(this.landingSlot);\n }\n }, 10);\n }\n get activeRowIndex() {\n return this._activeRowIndex;\n }\n set activeRowIndex(value) {\n if (value !== this._activeRowIndex) {\n const oldValue = this._activeRowIndex;\n this._activeRowIndex = value;\n this.updateActiveRow();\n this.fireEvent({\n type: 'activeRowChanged',\n oldValue,\n newValue: this.activeRowIndex,\n rowIndex: this.getGlobalIndexByLocal(this.activeRowIndex)\n });\n }\n }\n updateActiveRow() {\n if (this.options.showActiveRow) {\n const rows = this.bodyCellContainerDiv.querySelectorAll(`[class*=${this.cssPrefix}-row-active]`);\n rows.forEach(el => { el.classList.remove(`${this.cssPrefix}-row-active`); });\n const activeRow = this.getActiveRow();\n if (activeRow) {\n activeRow.classList.add(`${this.cssPrefix}-row-active`);\n this.ensureRowVisibility(this.activeRowIndex);\n }\n }\n }\n getActiveRow() {\n return this.getDataRow(this.activeRowIndex);\n }\n getDataRow(index) {\n const rows = Array.from(this.bodyCellContainerDiv.querySelectorAll(`.${this.cssPrefix}-row:not(.${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 focus() {\n this.bodyViewportDiv.focus();\n }\n /** Resizes columns according to the data they represent */\n resizeColumns() {\n if (this.options.columnWidths.autoResize === AutoResizeColumns.Never)\n return;\n const 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 let sumWidth = 0;\n const columns = this.columns.getItems();\n const headerCells = this.headerCellContainerDiv.querySelectorAll(`.${this.cssPrefix}-header-cell`);\n let headerIdx = 0;\n for (let idx = 0; idx < this.columns.count; idx++) {\n const column = columns[idx];\n if (!column.isVisible)\n continue;\n const calculatedWidth = this.options.columnWidths.autoResize !== AutoResizeColumns.Always && column.dataColumn\n ? column.dataColumn.calculatedWidth\n : 0;\n const cellValues = this.bodyCellContainerDiv.querySelectorAll(`.${this.cssPrefix}-cell[data-col-idx=\"${idx}\"] > .${this.cssPrefix}-cell-value`);\n let maxWidth = 0;\n if (calculatedWidth > 0) {\n sumWidth += calculatedWidth;\n column.width = calculatedWidth;\n cellValues.forEach(value => {\n value.parentElement.style.width = `${calculatedWidth}px`;\n });\n headerCells[headerIdx].style.width = `${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(value => {\n value.parentElement.style.width = null;\n const width = value.parentElement.offsetWidth;\n if (width > maxWidth) {\n maxWidth = width;\n }\n });\n maxWidth += 3;\n const maxOption = column.isRowNum\n ? this.options.columnWidths.rowNumColumn.max || 500\n : this.options.columnWidths[column.dataColumn.type].max || 2000;\n const minOption = column.isRowNum\n ? this.options.columnWidths.rowNumColumn.min || 0\n : this.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(value => {\n value.parentElement.style.width = `${maxWidth}px`;\n });\n headerCells[headerIdx].style.width = `${maxWidth}px`;\n if (column.dataColumn) {\n column.dataColumn.calculatedWidth = maxWidth;\n }\n }\n else {\n sumWidth += maxWidth;\n }\n }\n headerIdx++;\n }\n if (sumWidth > 0) {\n this.bodyCellContainerDiv.style.width = `${sumWidth}px`;\n this.headerCellContainerDiv.style.width = `${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}\n\nclass Calendar {\n get cssPrefix() {\n return 'kdtp-cal';\n }\n constructor(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 setDate(date) {\n this.currentDate = new Date(date);\n }\n getDate() {\n return new Date(this.currentDate);\n }\n dateChanged(apply) {\n if (this.options.onDateChanged) {\n this.options.onDateChanged(this.currentDate, apply);\n }\n }\n}\n\nclass DateTimePicker {\n get cssPrefix() {\n return 'kdtp';\n }\n constructor(options) {\n this.calendar = null;\n this.timePicker = null;\n this.options = options;\n this.render();\n }\n setDateTime(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 getDateTime() {\n return new Date(this.currentDateTime);\n }\n render() {\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: (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: (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 createCalendar(options) {\n return null;\n }\n createTimePicker(options) {\n return null;\n }\n show(anchor) {\n if (this.options.beforeShow) {\n this.options.beforeShow();\n }\n const 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 apply(date) {\n if (this.options.onApply) {\n this.options.onApply(date);\n }\n this.destroy();\n }\n cancel() {\n if (this.options.onCancel) {\n this.options.onCancel();\n }\n this.destroy();\n }\n destroy() {\n if (this.slot && this.slot.parentElement) {\n this.slot.parentElement.removeChild(this.slot);\n }\n }\n dateTimeChanged() {\n if (this.options.onDateTimeChanged) {\n this.options.onDateTimeChanged(this.currentDateTime);\n }\n }\n}\n\nclass DefaultCalendar extends Calendar {\n constructor(slot, options) {\n super(slot, options);\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 (let i = 0; i < this.daysOfWeek.length; i++) {\n this.daysOfWeek[i] = i18n.getShortWeekDayName(i + 1);\n }\n for (let i = 0; i < this.months.length; i++) {\n this.months[i] = i18n.getLongMonthName(i + 1);\n }\n }\n setDate(date) {\n super.setDate(date);\n this.selectedMonth = this.currentDate.getMonth();\n this.selectedYear = this.currentDate.getFullYear();\n this.rerenderMonth();\n }\n render() {\n const header = domel('div', this.slot)\n .addClass(`${this.cssPrefix}-header`);\n if (this.options.showDateTimeInput) {\n header\n .addChildElement(this.renderManualDateInput());\n }\n else {\n header\n .addChild('span', builder => this.headerTextElem = builder.toDOM());\n }\n domel(this.slot)\n .addChildElement(this.renderCalendarButtons());\n this.calendarBody = domel('div', this.slot)\n .addClass(`${this.cssPrefix}-body`)\n .toDOM();\n }\n getInputDateFormat() {\n const settings = i18n.getLocaleSettings();\n return (this.options.timePickerIsUsed)\n ? `${settings.editDateFormat} ${settings.editTimeFormat}`\n : settings.editDateFormat;\n }\n renderManualDateInput() {\n const format = this.getInputDateFormat();\n const builder = domel('input')\n .attr('placeholder', format)\n .addClass(`${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', ev => {\n builder.removeClass('error');\n try {\n this.isManualInputChanging = true;\n const newDate = utils.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', (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', () => {\n setTimeout(() => {\n this.manualInputElem.selectionStart = 0;\n this.manualInputElem.selectionEnd = 0;\n }, 50);\n });\n this.manualInputElem = builder.toDOM();\n return this.manualInputElem;\n }\n updateDisplayedDateValue() {\n if (this.manualInputElem) {\n if (!this.isManualInputChanging) {\n const format = this.getInputDateFormat();\n this.manualInputElem.value = i18n.dateTimeToStr(this.currentDate, format);\n this.manualInputElem.focus();\n }\n }\n else if (this.headerTextElem) {\n const 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 renderCalendarButtons() {\n const builder = domel('nav')\n .addClass(`${this.cssPrefix}-nav`)\n .addChild('div', builder => builder\n .addClass(`${this.cssPrefix}-nav-prev`)\n .on('click', () => {\n this.prev();\n })\n .addChild('span', builder => builder.html('‹')))\n .addChild('div', builder => builder\n .addClass(`${this.cssPrefix}-nav-selectors`)\n .addChild('div', builder => builder\n .addClass(`${this.cssPrefix}-nav-month`)\n .addChild('select', builder => {\n builder\n .on('change', () => {\n this.jump(this.selectedYear, parseInt(this.selectMonthElem.value));\n });\n for (let i = 0; i < this.months.length; i++) {\n builder.addChild('option', builder => builder\n .attr('value', i.toString())\n .text(this.months[i]));\n }\n this.selectMonthElem = builder.toDOM();\n }))\n .addChild('div', builder => builder\n .addClass(`${this.cssPrefix}-nav-year`)\n .addChild('select', builder => this.selectYearElem = builder\n .on('change', () => {\n this.jump(parseInt(this.selectYearElem.value), this.selectedMonth);\n })\n .toDOM())))\n .addChild('div', builder => builder\n .addClass(`${this.cssPrefix}-nav-next`)\n .on('click', () => {\n this.next();\n })\n .addChild('span', builder => builder.html('›')));\n return builder.toDOM();\n }\n prev() {\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 next() {\n this.selectedYear = (this.selectedMonth === 11) ? this.selectedYear + 1 : this.selectedYear;\n this.selectedMonth = (this.selectedMonth + 1) % 12;\n this.rerenderMonth();\n }\n rerenderSelectYear() {\n const match = /c-(\\d*):c\\+(\\d*)/g.exec(this.options.yearRange);\n let minusYear = 0;\n let plusYear = 1;\n if (match !== null) {\n minusYear = parseInt(match[1]);\n plusYear = parseInt(match[2]);\n }\n this.selectYearElem.innerHTML = '';\n for (let i = 0; i <= minusYear + plusYear; i++) {\n let op = document.createElement(\"option\");\n let year = this.selectedYear - minusYear + i;\n op.value = year.toString();\n op.innerText = year.toString();\n this.selectYearElem.appendChild(op);\n }\n }\n jump(year, month) {\n this.selectedYear = year;\n this.selectedMonth = month;\n this.rerenderMonth();\n }\n rerenderMonth() {\n //header text\n this.updateDisplayedDateValue();\n this.rerenderSelectYear();\n let firstDay = (new Date(this.selectedYear, this.selectedMonth)).getDay();\n let 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((day, idx) => {\n domel('div', this.calendarBody)\n .addClass(`${this.cssPrefix}-weekday`)\n .addClass(idx == 0 || idx == 6 ? `${this.cssPrefix}-weekend` : '')\n .text(day);\n });\n // Add empty cells before first day\n for (let i = 0; i < firstDay; i++) {\n domel('div', this.calendarBody)\n .addClass(`${this.cssPrefix}-day-empty`);\n }\n // Add all month days\n const today = new Date();\n for (let day = 1; day <= daysInMonth; day++) {\n const builder = domel('div', this.calendarBody)\n .addClass(`${this.cssPrefix}-day`)\n .attr('data-date', day.toString())\n .text(day.toString())\n .on('click', (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(`${this.cssPrefix}-day-current`);\n }\n if (day === this.currentDate.getDate() && this.selectedYear === this.currentDate.getFullYear() && this.selectedMonth === this.currentDate.getMonth()) {\n builder.addClass(`${this.cssPrefix}-day-selected`);\n }\n const dayOfWeek = (firstDay + day - 1) % 7;\n if (dayOfWeek == 0 || dayOfWeek == 6) {\n builder.addClass(`${this.cssPrefix}-weekend`);\n }\n if (typeof this.options.onDrawDay === \"function\") {\n this.options.onDrawDay.apply(builder.toDOM(), [\n builder.toDOM(),\n new Date(this.selectedYear, this.selectedMonth, day)\n ]);\n }\n }\n // Add empty cells after last day\n const cellsDrawnInLastRow = (firstDay + daysInMonth) % 7;\n const cellsToDraw = cellsDrawnInLastRow == 0 ? 0 : 7 - cellsDrawnInLastRow;\n for (let i = 0; i < cellsToDraw; i++) {\n domel('div', this.calendarBody)\n .addClass(`${this.cssPrefix}-day-empty`);\n }\n }\n dateChanged(apply) {\n super.dateChanged(apply);\n this.rerenderMonth();\n }\n}\n\nclass TimePicker {\n get cssPrefix() {\n return 'kdtp-tp';\n }\n constructor(slot, options) {\n this.slot = slot;\n this.options = options || {};\n }\n setTime(time) {\n this.currentTime = new Date(time);\n }\n getTime() {\n return new Date(this.currentTime);\n }\n timeChanged() {\n if (this.options.onTimeChanged) {\n this.options.onTimeChanged(this.currentTime);\n }\n }\n}\n\nclass DefaultTimePicker extends TimePicker {\n setTime(time) {\n super.setTime(time);\n this.updateDisplayedTime();\n this.hoursInput.valueAsNumber = time.getHours();\n this.minutesInput.valueAsNumber = time.getMinutes();\n }\n render() {\n domel('div', this.slot)\n .addClass(`${this.cssPrefix}-time`)\n .addChild('span', builder => this.timeText = builder.toDOM())\n .toDOM();\n const slidersBuilder = domel('div', this.slot)\n .addClass(`${this.cssPrefix}-sliders`);\n slidersBuilder\n .addChild('div', builder => builder\n .addClass(`${this.cssPrefix}-time-row`)\n .title('Hours')\n .addChild('input', builder => this.hoursInput = builder\n .addClass(`${this.cssPrefix}-input-hours`)\n .type('range')\n .attr('min', '0')\n .attr('max', '23')\n .attr('step', '1')\n .on('input', (e) => {\n this.currentTime.setHours(this.hoursInput.valueAsNumber);\n this.updateDisplayedTime();\n this.timeChanged();\n })\n .toDOM()));\n slidersBuilder\n .addChild('div', builder => builder\n .addClass(`${this.cssPrefix}-time-row`)\n .title('Minutes')\n .addChild('input', builder => this.minutesInput = builder\n .addClass(`${this.cssPrefix}-input-minutes`)\n .type('range')\n .attr('min', '0')\n .attr('max', '59')\n .attr('step', '1')\n .on('input', (e) => {\n this.currentTime.setMinutes(this.minutesInput.valueAsNumber);\n this.updateDisplayedTime();\n this.timeChanged();\n })\n .toDOM()));\n return this.slot;\n }\n updateDisplayedTime() {\n const locale = i18n.getCurrentLocale();\n const timeToDraw = this.currentTime.toLocaleString(locale == 'en' ? undefined : locale, {\n hour: \"numeric\",\n minute: \"numeric\"\n });\n this.timeText.innerText = timeToDraw;\n }\n}\n\nclass DefaultDateTimePicker extends DateTimePicker {\n render() {\n const sb = domel('div', document.body)\n .addClass(`${this.cssPrefix}`)\n .attr('tabIndex', '0')\n .setStyle('position', 'absolute')\n .setStyle('top', '-1000px')\n .setStyle('left', '-1000px')\n .on('keydown', (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', `${this.options.zIndex}`);\n }\n this.slot = sb.toDOM();\n super.render();\n this.renderButtons();\n this.globalMouseDownHandler = (e) => {\n let event = window.event || e;\n event.srcElement || event.target;\n let 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 renderButtons() {\n const builder = domel('div', this.slot)\n .addClass(`${this.cssPrefix}-buttons`)\n .addChild('button', b => this.nowButton = b\n .addClass(`${this.cssPrefix}-button ${this.cssPrefix}-button-now`)\n .text(i18n.getText('ButtonNow'))\n .on('click', () => {\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', b => this.submitButton = b\n .addClass(`${this.cssPrefix}-button ${this.cssPrefix}-button-apply`)\n .text(i18n.getText('ButtonApply'))\n .on('click', () => {\n this.apply(this.getDateTime());\n return false;\n })\n .toDOM());\n }\n builder.addChild('button', b => this.submitButton = b\n .addClass(`${this.cssPrefix}-button ${this.cssPrefix}-button-cancel`)\n .text(i18n.getText('ButtonCancel'))\n .on('click', () => {\n this.cancel();\n return false;\n })\n .toDOM());\n }\n createCalendar(options) {\n this.calendarSlot =\n domel('div', this.slot)\n .addClass(`${this.cssPrefix}-cal`)\n .toDOM();\n return new DefaultCalendar(this.calendarSlot, options);\n }\n createTimePicker(options) {\n this.timePickerSlot =\n domel('div', this.slot)\n .addClass(`${this.cssPrefix}-tp`)\n .toDOM();\n return new DefaultTimePicker(this.timePickerSlot, options);\n }\n show(anchor) {\n if (this.options.showDateTimeInput) {\n if (this.options.beforeShow) {\n this.options.beforeShow();\n }\n const anchorPos = getElementAbsolutePos(anchor || document.body);\n const 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.show(anchor);\n this.slot.focus();\n }\n setTimeout(() => {\n document.addEventListener('mousedown', this.globalMouseDownHandler, true);\n }, 1);\n }\n}\n\nvar 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\nconst cssPrefix = \"kdlg\";\nclass DefaultDialogService {\n openConfirm(title, content, callback) {\n const template = `
${content}
`;\n const options = {\n title: title,\n closable: false,\n submitable: true,\n cancelable: true,\n body: template\n };\n if (callback) {\n options.onSubmit = () => {\n callback(true);\n };\n options.onCancel = () => {\n callback(false);\n };\n this.open(options);\n return;\n }\n return new Promise((resolve) => {\n options.onSubmit = () => {\n resolve(true);\n };\n options.onCancel = () => {\n resolve(false);\n };\n this.open(options);\n });\n }\n openPrompt(title, content, defVal, callback) {\n const template = `
\r\n
\r\n \r\n \r\n
\r\n
`;\n const options = {\n title: title,\n submitable: true,\n closable: true,\n cancelable: true,\n submitOnEnter: true,\n body: template,\n arrangeParents: false,\n beforeOpen: () => {\n const input = document.getElementById(`${cssPrefix}-dialog-form-input`);\n if (defVal) {\n input.value = defVal;\n }\n input.focus();\n }\n };\n const processInput = (callback) => {\n const input = document.getElementById(`${cssPrefix}-dialog-form-input`);\n const 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 = () => {\n return processInput(callback);\n };\n options.onCancel = () => {\n callback(\"\");\n };\n this.open(options);\n return;\n }\n return new Promise((resolve) => {\n options.onSubmit = () => {\n return processInput(resolve);\n };\n options.onCancel = () => {\n resolve(\"\");\n };\n this.open(options);\n });\n }\n open(options, data) {\n const dialog = new DefaultDialog(options, data);\n const onDestroy = options.onDestroy;\n options.onDestroy = (dlg) => {\n this.untrack(dlg);\n onDestroy && onDestroy(dlg);\n };\n dialog.open();\n this.track(dialog);\n return dialog;\n }\n createSet(options) {\n return new DefaultDialogSet(options, this);\n }\n untrack(dlg) {\n const index = DefaultDialogService.openDialogs.indexOf(dlg);\n if (index >= 0) {\n DefaultDialogService.openDialogs.splice(index, 1);\n }\n }\n track(dlg) {\n DefaultDialogService.openDialogs.push(dlg);\n }\n openProgress(options) {\n const dialog = new DefaultProgressDialog(options);\n const onDestroy = options.onDestroy;\n options.onDestroy = (dlg) => {\n this.untrack(dlg);\n onDestroy && onDestroy(dlg);\n };\n dialog.open();\n this.track(dialog);\n return dialog;\n }\n getAllDialogs() {\n return Array.from(DefaultDialogService.openDialogs);\n }\n closeAllDialogs() {\n for (const dialog of Array.from(DefaultDialogService.openDialogs)) {\n dialog.close();\n }\n }\n}\nDefaultDialogService.openDialogs = [];\nclass DefaultDialog {\n constructor(options, data) {\n this.options = options;\n this.submitHandler = (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 = () => {\n if (this.options.onCancel) {\n this.options.onCancel(this);\n }\n this.destroy();\n };\n this.keydownHandler = (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(`${cssPrefix}-modal`, 'is-active')\n .focus()\n .addChild('div', b => b\n .addClass('kdlg-modal-background'))\n .addChild('div', b => this.windowElement = b\n .addClass(`${cssPrefix}-modal-window`)\n .addChild('header', b => {\n this.headerElement = b\n .addClass(`${cssPrefix}-header`)\n .addChild('p', b => b\n .addClass(`${cssPrefix}-header-title`)\n .addText(options.title))\n .toDOM();\n if (options.closable !== false)\n b.addChild('button', b => b\n .addClass(`${cssPrefix}-modal-close`)\n .on('click', () => {\n this.cancelHandler();\n })\n .focus());\n })\n .addChild('div', b => {\n b.addClass(`${cssPrefix}-alert-container`);\n this.alertElement = b.toDOM();\n })\n .addChild('section', b => {\n this.bodyElement = b\n .addClass(`${cssPrefix}-body`)\n .toDOM();\n if (typeof options.body === 'string') {\n const html = liquid.renderLiquidTemplate(options.body, data);\n b.addHtml(html);\n }\n else {\n b.addChildElement(options.body);\n }\n })\n .addChild('footer', b => {\n let 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(`${cssPrefix}-footer`)\n .toDOM();\n b.addClass(alignClass);\n if (options.submitable === false)\n return;\n b.addChild('button', 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', (e) => {\n if (grecaptcha) {\n grecaptcha.ready(() => {\n grecaptcha.execute(options.recaptchaSiteKey, { action: 'submit' })\n .then((token) => {\n this.submitHandler(token);\n });\n });\n }\n else {\n this.submitHandler();\n }\n });\n }\n else {\n bb.on('click', (e) => {\n this.submitHandler();\n });\n }\n bb.focus();\n });\n if (options.cancelable !== false)\n b.addChild('button', bb => bb\n .id(this.dialogId + '-btn-cancel')\n .addClass('kfrm-button')\n .addText(options.cancelButtonText || i18n.getText('ButtonCancel'))\n .on('click', (e) => {\n this.cancelHandler();\n }));\n })\n .toDOM())\n .toDOM();\n }\n getData() {\n return this.data;\n }\n getRootElement() {\n return this.slot;\n }\n getSubmitButtonElement() {\n return document.getElementById(this.dialogId + '-btn-submit');\n }\n getCancelButtonElement() {\n return document.getElementById(this.dialogId + '-btn-cancel');\n }\n open() {\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 const windowDiv = this.slot\n .querySelector(`.${cssPrefix}-modal-window`);\n if (this.options.height) {\n windowDiv.style.height = typeof this.options.height === 'string'\n ? this.options.height\n : `${this.options.height}px`;\n }\n if (this.options.width) {\n windowDiv.style.width = typeof this.options.width === 'string'\n ? this.options.width\n : `${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(element => element.addEventListener('input', () => {\n this.clearAlert();\n if (this.options.onInput) {\n this.options.onInput(this);\n }\n }));\n if (this.options.onShow) {\n this.options.onShow(this);\n }\n }\n submit() {\n this.submitHandler();\n }\n cancel() {\n this.cancelHandler();\n }\n close() {\n this.destroy();\n }\n disableButtons() {\n const buttons = this.slot.querySelectorAll('button');\n buttons.forEach(button => button.disabled = true);\n }\n enableButtons() {\n const buttons = this.slot.querySelectorAll('button');\n buttons.forEach(button => button.disabled = false);\n }\n showAlert(text, reason, replace) {\n let alert = domel('div')\n .addClass(`${cssPrefix}-alert ${reason || ''}`)\n .addChild('span', b => b\n .addClass(`${cssPrefix}-alert-closebtn`)\n .text('×')\n .on('click', (ev) => {\n const 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 clearAlert() {\n this.alertElement.innerHTML = '';\n }\n destroy() {\n const elem = document.querySelectorAll(`[data-dialog-id=\"${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 isActiveDialog() {\n const windowDivs = document.documentElement.querySelectorAll('.kdlg-modal');\n return windowDivs[windowDivs.length - 1] === this.slot;\n }\n arrangeParents(turnOn) {\n const windowDivs = document.documentElement.querySelectorAll('.kdlg-modal-window');\n for (let i = 0; i < windowDivs.length - 1; i++) {\n if (turnOn) {\n const offset = i == 0 ? 20 : i * 40 + 20;\n domel(windowDivs[i])\n .setStyle('margin-top', `${offset}px`)\n .setStyle('margin-left', `${offset}px`);\n }\n else {\n domel(windowDivs[i])\n .removeStyle('margin-top')\n .removeStyle('margin-left');\n }\n }\n }\n}\nclass DefaultProgressDialog extends DefaultDialog {\n constructor(options, data) {\n let contentElement;\n let progressElement;\n const body = domel('div')\n .addChild('div', b => contentElement = b\n .text(options.content || '')\n .toDOM())\n .addChild('div', b => {\n b\n .addClass(`${cssPrefix}-progress-line`)\n .addChild('div', 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 super({\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);\n this.contentElement = contentElement;\n this.progressElement = progressElement;\n }\n updateContent(content) {\n this.contentElement.innerText = content;\n }\n updateProgress(progress) {\n progress = this.in01(progress);\n this.progressElement.style.width = `${progress * 100}%`;\n if (progress === 1) {\n // postpone for 0.5s for smooth closing\n setTimeout(() => {\n this.submit();\n }, 500);\n }\n }\n in01(num) {\n if (num > 1)\n return 1;\n if (num < 0)\n return 0;\n return num;\n }\n}\nclass DefaultDialogSet {\n constructor(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 getCurrent() {\n return this.currentDialog;\n }\n openNext(data) {\n return this.open(this.currentIndex + 1, data);\n }\n openPrev(data) {\n return this.open(this.currentIndex - 1, data);\n }\n open(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 const dlgOptions = this.options[this.currentIndex];\n this.currentDialog = this.dialogService.open(dlgOptions, data);\n return this.currentDialog;\n }\n close() {\n if (this.currentDialog) {\n this.currentDialog.close();\n this.currentDialog = null;\n }\n }\n}\n\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\nvar PRE_SELECT;\n(function (PRE_SELECT) {\n PRE_SELECT[PRE_SELECT[\"THIS_WEEK\"] = 0] = \"THIS_WEEK\";\n PRE_SELECT[PRE_SELECT[\"LAST_WEEK\"] = 1] = \"LAST_WEEK\";\n PRE_SELECT[PRE_SELECT[\"THIS_MONTH\"] = 2] = \"THIS_MONTH\";\n PRE_SELECT[PRE_SELECT[\"FIRST_MONTH\"] = 3] = \"FIRST_MONTH\";\n PRE_SELECT[PRE_SELECT[\"LAST_MONTH\"] = 4] = \"LAST_MONTH\";\n PRE_SELECT[PRE_SELECT[\"THIS_YEAR\"] = 5] = \"THIS_YEAR\";\n PRE_SELECT[PRE_SELECT[\"QUARTER_1\"] = 6] = \"QUARTER_1\";\n PRE_SELECT[PRE_SELECT[\"QUARTER_2\"] = 7] = \"QUARTER_2\";\n PRE_SELECT[PRE_SELECT[\"QUARTER_3\"] = 8] = \"QUARTER_3\";\n PRE_SELECT[PRE_SELECT[\"QUARTER_4\"] = 9] = \"QUARTER_4\";\n})(PRE_SELECT || (PRE_SELECT = {}));\nvar JUMP_TO;\n(function (JUMP_TO) {\n JUMP_TO[\"UNDEF\"] = \"-1\";\n JUMP_TO[\"TODAY\"] = \"1\";\n JUMP_TO[\"YESTERDAY\"] = \"2\";\n JUMP_TO[\"TOMORROW\"] = \"3\";\n JUMP_TO[\"WEEK_START\"] = \"4\";\n JUMP_TO[\"WEEK_END\"] = \"5\";\n JUMP_TO[\"MONTH_START\"] = \"6\";\n JUMP_TO[\"MONTH_END\"] = \"7\";\n JUMP_TO[\"YEAR_START\"] = \"8\";\n JUMP_TO[\"YEAR_END\"] = \"9\";\n})(JUMP_TO || (JUMP_TO = {}));\nconst DEFAULT_WEEK_START = 0;\nclass TimeSpanPicker extends DefaultDialog {\n constructor(options) {\n super({\n title: options.title || `Select a period`,\n body: \"\",\n submitButtonText: options.submitButtonText || `OK`,\n cancelButtonText: options.cancelButtonText || `Cancel`,\n submitable: true,\n closable: true,\n cancelable: true,\n beforeOpen: (dlg) => {\n this.setupDialog();\n },\n onSubmit: (dlg) => {\n if (typeof options.onSubmit === \"function\") {\n options.onSubmit.apply(dlg, [this.result(this.from), this.result(this.to)]);\n }\n }\n });\n this.yearRange = options.yearRange;\n this.weekStart = options.weekStart || DEFAULT_WEEK_START;\n this.bodyElement.append(this.drawDialog());\n this.calendar1.render();\n this.calendar2.render();\n this.from = this.alignDate(options.start ? options.start : new Date());\n this.to = this.alignDate(options.finish && this.alignDate(options.finish) > this.from ? options.finish : new Date(this.from.getFullYear(), this.from.getMonth(), this.from.getDate() + 1));\n this.represent();\n }\n alignDate(date) {\n date.setHours(0);\n date.setMinutes(0);\n date.setSeconds(0);\n date.setMilliseconds(0);\n return date;\n }\n drawDialog() {\n const body = domel('div')\n .addClass('tsp__container')\n .addChild('div', b => {\n b\n .addClass('tsp__intervals')\n .addChild('button', b => b.addClass('tsp__button').addText('This Week').on('click', () => { this.select(PRE_SELECT.THIS_WEEK); }))\n .addChild('button', b => b.addClass('tsp__button').addText('Last Week').on('click', () => { this.select(PRE_SELECT.LAST_WEEK); }))\n .addChild('button', b => b.addClass('tsp__button').addText('This Month').on('click', () => { this.select(PRE_SELECT.THIS_MONTH); }))\n .addChild('button', b => b.addClass('tsp__button').addText('First Month').on('click', () => { this.select(PRE_SELECT.FIRST_MONTH); }))\n .addChild('button', b => b.addClass('tsp__button').addText('Last Month').on('click', () => { this.select(PRE_SELECT.LAST_MONTH); }))\n .addChild('button', b => b.addClass('tsp__button').addText('This Year').on('click', () => { this.select(PRE_SELECT.THIS_YEAR); }))\n .addChild('button', b => b.addClass('tsp__button').addText('Quarter 1').on('click', () => { this.select(PRE_SELECT.QUARTER_1); }))\n .addChild('button', b => b.addClass('tsp__button').addText('Quarter 2').on('click', () => { this.select(PRE_SELECT.QUARTER_2); }))\n .addChild('button', b => b.addClass('tsp__button').addText('Quarter 3').on('click', () => { this.select(PRE_SELECT.QUARTER_3); }))\n .addChild('button', b => b.addClass('tsp__button').addText('Quarter 4').on('click', () => { this.select(PRE_SELECT.QUARTER_4); }));\n })\n .addChild('div', b => {\n b\n .addClass('tsp__form')\n .addChild('div', b => {\n b\n .addClass('tsp__date')\n .addChild('div', b => {\n b\n .addClass('tsp__label')\n .addChild('label', b => {\n b.addText('Start');\n })\n .addChild('select', b => {\n b\n .addOption({ value: JUMP_TO.UNDEF, title: 'Jump To' })\n .addOption({ value: JUMP_TO.TODAY, title: 'Today' })\n .addOption({ value: JUMP_TO.YESTERDAY, title: 'Yesterday' })\n .addOption({ value: JUMP_TO.TOMORROW, title: 'Tomorrow' })\n .addOption({ value: JUMP_TO.WEEK_START, title: 'Week Start' })\n .addOption({ value: JUMP_TO.WEEK_END, title: 'Week End' })\n .addOption({ value: JUMP_TO.MONTH_START, title: 'Month Start' })\n .addOption({ value: JUMP_TO.MONTH_END, title: 'Month End' })\n .addOption({ value: JUMP_TO.YEAR_START, title: 'Year Start' })\n .addOption({ value: JUMP_TO.YEAR_END, title: 'Year End' });\n b.on('change', (event) => {\n // @ts-ignore\n this.jump(1, event.target.value, event.target);\n });\n });\n })\n .addChild('div', b => {\n b.addClass('tsp__calendar');\n this.calendar1 = new DefaultCalendar(b.toDOM(), {\n yearRange: this.yearRange,\n showDateTimeInput: true,\n onDateChanged: (date) => {\n this.from = this.alignDate(date);\n this.calendar1.setDate(this.from);\n if (this.to < this.from) {\n this.to = this.from;\n }\n this.represent();\n },\n onDrawDay: (cell, date) => {\n if (this.alignDate(date) >= this.from && this.alignDate(date) <= this.to) {\n cell.classList.add(\"day-in-range\");\n }\n else {\n cell.classList.remove(\"day-in-range\");\n }\n }\n });\n });\n })\n .addChild('div', b => {\n b\n .addClass('tsp__date')\n .addChild('div', b => {\n b\n .addClass('tsp__label')\n .addChild('label', b => {\n b.addText('Finish');\n })\n .addChild('select', b => {\n b\n .addOption({ value: JUMP_TO.UNDEF, title: 'Jump To' })\n .addOption({ value: JUMP_TO.TODAY, title: 'Today' })\n .addOption({ value: JUMP_TO.YESTERDAY, title: 'Yesterday' })\n .addOption({ value: JUMP_TO.TOMORROW, title: 'Tomorrow' })\n .addOption({ value: JUMP_TO.WEEK_START, title: 'Week Start' })\n .addOption({ value: JUMP_TO.WEEK_END, title: 'Week End' })\n .addOption({ value: JUMP_TO.MONTH_START, title: 'Month Start' })\n .addOption({ value: JUMP_TO.MONTH_END, title: 'Month End' })\n .addOption({ value: JUMP_TO.YEAR_START, title: 'Year Start' })\n .addOption({ value: JUMP_TO.YEAR_END, title: 'Year End' });\n b.on('change', (event) => {\n // @ts-ignore\n this.jump(2, event.target.value, event.target);\n });\n });\n })\n .addChild('div', b => {\n b.addClass('tsp__calendar');\n this.calendar2 = new DefaultCalendar(b.toDOM(), {\n yearRange: this.yearRange,\n showDateTimeInput: true,\n onDateChanged: (date) => {\n if (this.alignDate(date) >= this.from) {\n this.to = this.alignDate(date);\n }\n else {\n this.calendar2.setDate(this.to);\n }\n this.represent();\n },\n onDrawDay: (cell, date) => {\n if (this.alignDate(date) >= this.from && this.alignDate(date) <= this.to) {\n cell.classList.add(\"day-in-range\");\n }\n else {\n cell.classList.remove(\"day-in-range\");\n }\n }\n });\n });\n });\n })\n .toDOM();\n return body;\n }\n setupDialog() {\n }\n jump(cal, to, select) {\n let target = cal === 1 ? 'from' : 'to';\n let jumpTo;\n const curr = new Date();\n switch (to) {\n case JUMP_TO.TODAY: {\n jumpTo = curr;\n break;\n }\n case JUMP_TO.YESTERDAY: {\n jumpTo = new Date(curr.getFullYear(), curr.getMonth(), curr.getDate() - 1);\n break;\n }\n case JUMP_TO.TOMORROW: {\n jumpTo = new Date(curr.getFullYear(), curr.getMonth(), curr.getDate() + 1);\n break;\n }\n case JUMP_TO.WEEK_START: {\n jumpTo = new Date(curr.setDate(curr.getDate() - curr.getDay() + this.weekStart));\n break;\n }\n case JUMP_TO.WEEK_END: {\n jumpTo = new Date(curr.setDate(curr.getDate() - curr.getDay() + 6 + this.weekStart));\n break;\n }\n case JUMP_TO.MONTH_START: {\n jumpTo = new Date(curr.getFullYear(), curr.getMonth(), 1);\n break;\n }\n case JUMP_TO.MONTH_END: {\n jumpTo = new Date(curr.getFullYear(), curr.getMonth() + 1, 0);\n break;\n }\n case JUMP_TO.YEAR_START: {\n jumpTo = new Date(curr.getFullYear(), 0, 1);\n break;\n }\n case JUMP_TO.YEAR_END: {\n jumpTo = new Date(curr.getFullYear(), 12, 0);\n break;\n }\n }\n jumpTo = this.alignDate(jumpTo);\n select.value = JUMP_TO.UNDEF;\n if (target === \"from\") {\n this.from = jumpTo;\n if (this.to < this.from) {\n this.to = this.from;\n }\n }\n else {\n if (jumpTo >= this.from) {\n this[target] = jumpTo;\n }\n }\n this.represent();\n }\n represent() {\n this.calendar1.setDate(this.from);\n this.calendar2.setDate(this.to);\n }\n select(interval) {\n switch (interval) {\n case PRE_SELECT.THIS_WEEK: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), curr.getMonth(), curr.getDate() - curr.getDay());\n this.to = new Date(this.from.getFullYear(), this.from.getMonth(), this.from.getDate() + 6);\n break;\n }\n case PRE_SELECT.LAST_WEEK: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), curr.getMonth(), curr.getDate() - curr.getDay() - 7);\n this.to = new Date(this.from.getFullYear(), this.from.getMonth(), this.from.getDate() + 6);\n break;\n }\n case PRE_SELECT.THIS_MONTH: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), curr.getMonth(), 1);\n this.to = new Date(curr.getFullYear(), curr.getMonth() + 1, 0);\n break;\n }\n case PRE_SELECT.FIRST_MONTH: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), 0, 1);\n this.to = new Date(curr.getFullYear(), 1, 0);\n break;\n }\n case PRE_SELECT.LAST_MONTH: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), curr.getMonth() - 1, 1);\n this.to = new Date(curr.getFullYear(), curr.getMonth(), 0);\n break;\n }\n case PRE_SELECT.THIS_YEAR: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), 0, 1);\n this.to = new Date(curr.getFullYear(), 12, 0);\n break;\n }\n case PRE_SELECT.QUARTER_1: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), 0, 1);\n this.to = new Date(curr.getFullYear(), 3, 0);\n break;\n }\n case PRE_SELECT.QUARTER_2: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), 3, 1);\n this.to = new Date(curr.getFullYear(), 6, 0);\n break;\n }\n case PRE_SELECT.QUARTER_3: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), 6, 1);\n this.to = new Date(curr.getFullYear(), 9, 0);\n break;\n }\n case PRE_SELECT.QUARTER_4: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), 9, 1);\n this.to = new Date(curr.getFullYear(), 12, 0);\n break;\n }\n }\n this.represent();\n }\n result(date) {\n const curr = this.alignDate(new Date());\n const constants = {\n \"Today\": this.alignDate(new Date()),\n \"Yesterday\": this.alignDate(new Date(curr.getFullYear(), curr.getMonth(), curr.getDate() - 1)),\n \"Tomorrow\": this.alignDate(new Date(curr.getFullYear(), curr.getMonth(), curr.getDate() + 1)),\n \"FirstDayOfMonth\": this.alignDate(new Date(curr.getFullYear(), curr.getMonth(), 1)),\n \"LastDayOfMonth\": this.alignDate(new Date(curr.getFullYear(), curr.getMonth() + 1, 0)),\n \"FirstDayOfWeek\": this.alignDate(new Date(curr.setDate(curr.getDate() - curr.getDay() + this.weekStart))),\n \"FirstDayOfYear\": this.alignDate(new Date(curr.getFullYear(), 0, 1)),\n \"FirstDayOfNextWeek\": this.alignDate(new Date(curr.setDate(curr.getDate() - curr.getDay() + this.weekStart + 7))),\n \"FirstDayOfNextMonth\": this.alignDate(new Date(curr.getFullYear(), curr.getMonth() + 1, 1)),\n \"FirstDayOfNextYear\": this.alignDate(new Date(curr.getFullYear() + 1, 0, 1)),\n };\n for (let k in constants) {\n console.log(constants[k], date);\n if (constants[k].getTime() === date.getTime()) {\n return `\\${{${k}}}`;\n }\n }\n return i18n.dateTimeToStr(date, i18n.getLocaleSettings().editDateFormat);\n }\n}\nconst showTimeSpanPicker = (options) => new TimeSpanPicker(options).open();\n\n// grid\n// export dialogs to use outside of context as global\nconst dialogs = new DefaultDialogService();\n\nexport { AutoResizeColumns, Calendar, CellRendererType, DFMT_REGEX, DateTimePicker, DefaultCalendar, DefaultDateTimePicker, DefaultDialog, DefaultDialogService, DefaultDialogSet, DefaultProgressDialog, DefaultTimePicker, DialogFooterAlignment, DomElementBuilder, DomInputElementBuilder, DomSelectElementBuilder, DomTextAreaElementBuilder, DragManager, DropEffect, EasyGrid, EqDragEvent, GridCellRendererStore, GridColumn, GridColumnAlign, GridColumnList, JUMP_TO, PRE_SELECT, TimePicker, TimeSpanPicker, addCssClass, addElement, browserUtils, createBrowserEvent, dialogs, domel, eqCssMobile, eqCssPrefix, eqDragManager, getDocSize, getElementAbsolutePos, getMobileCssClass, getScrollPos, getViewportSize, getWinSize, hideElement, isVisible, mask, showElement, showTimeSpanPicker, slideDown, slideUp, toggleVisibility, wrapInner };\n//# sourceMappingURL=easydata.ui.esm.js.map\n","\n/*\n * EasyData.JS CRUD v1.5.2\n * Copyright 2020-2024 Korzh.com\n * Licensed under MIT\n */\n\nimport { EasyDataTable, utils, DataType, i18n, EntityAttrKind, EditorTag, ValueEditor, DataRow, HttpClient, MetaData, combinePath } from '@easydata/core';\nimport { domel, CellRendererType, browserUtils, DFMT_REGEX, DefaultDialogService, EasyGrid, DefaultDateTimePicker } from '@easydata/ui';\n\nclass TextDataFilter {\n constructor(loader, sourceTable, sourceId, isLookup = false) {\n this.loader = loader;\n this.sourceTable = sourceTable;\n this.sourceId = sourceId;\n this.isLookup = isLookup;\n this.filterValue = '';\n //turns off client-side search\n //for test purposes\n this.justServerSide = false;\n }\n getValue() {\n return this.filterValue;\n }\n apply(value) {\n this.filterValue = value;\n if (this.filterValue) {\n return this.applyCore();\n }\n else {\n return this.clear();\n }\n }\n clear() {\n this.filterValue = '';\n return Promise.resolve(this.sourceTable);\n }\n applyCore() {\n if (this.sourceTable.getTotal() == this.sourceTable.getCachedCount() && !this.justServerSide) {\n return this.applyInMemoryFilter();\n }\n else {\n const filters = [\n { class: \"__substring\", value: this.filterValue }\n ];\n return this.loader.loadChunk({\n offset: 0,\n limit: this.sourceTable.chunkSize,\n needTotal: true,\n filters: filters,\n sourceId: this.sourceId,\n lookup: this.isLookup\n })\n .then(data => {\n const filteredTable = new EasyDataTable({\n chunkSize: this.sourceTable.chunkSize,\n loader: {\n loadChunk: (params) => this.loader\n .loadChunk(Object.assign(Object.assign({}, params), { filters: filters, sourceId: this.sourceId, lookup: this.isLookup }))\n }\n });\n for (const col of this.sourceTable.columns.getItems()) {\n filteredTable.columns.add(col);\n }\n filteredTable.setTotal(data.total);\n for (const row of data.table.getCachedRows()) {\n filteredTable.addRow(row);\n }\n return filteredTable;\n });\n }\n }\n applyInMemoryFilter() {\n return new Promise((resolve, reject) => {\n const filteredTable = new EasyDataTable({\n chunkSize: this.sourceTable.chunkSize,\n inMemory: true\n });\n for (const col of this.sourceTable.columns.getItems()) {\n filteredTable.columns.add(col);\n }\n const words = this.filterValue.split('||').map(w => w.trim().toLowerCase());\n const suitableColumns = this.sourceTable.columns.getItems()\n .filter(col => utils.isNumericType(col.type)\n || utils.getStringDataTypes().indexOf(col.type) >= 0);\n const hasEnterance = (row) => {\n for (const col of suitableColumns) {\n const value = row.getValue(col.id);\n if (value) {\n const normalized = value.toString().toLowerCase();\n for (const word of words) {\n if (normalized.indexOf(word) >= 0) {\n return true;\n }\n }\n }\n }\n return false;\n };\n for (const row of this.sourceTable.getCachedRows()) {\n if (hasEnterance(row)) {\n filteredTable.addRow(row);\n }\n }\n filteredTable.setTotal(filteredTable.getCachedCount());\n resolve(filteredTable);\n });\n }\n}\n\nconst internalDateFormat = 'yyyy-MM-dd';\nconst internalTimeFormat = 'HH:mm';\nconst getInternalDateTimeFormat = (dtype) => {\n if (dtype == DataType.Date)\n return internalDateFormat;\n if (dtype == DataType.Time)\n return internalTimeFormat;\n return `${internalDateFormat}T${internalTimeFormat}`;\n};\nconst getEditDateTimeFormat = (dtype) => {\n const settings = i18n.getLocaleSettings();\n if (dtype == DataType.Date)\n return settings.editDateFormat;\n if (dtype == DataType.Time)\n return settings.editTimeFormat;\n return `${settings.editDateFormat} ${settings.editTimeFormat}`;\n};\nconst setLocation = (path) => {\n const state = window.history.state;\n history.pushState(state, document.title, path);\n window.dispatchEvent(new Event('ed_set_location'));\n};\n\nclass Validator {\n}\n\nclass DateTimeValidator extends Validator {\n constructor() {\n super();\n this.name = 'DateTime';\n }\n validate(attr, value) {\n if (!utils.IsDefinedAndNotNull(value) || value == '')\n return { successed: true };\n if (utils.getDateDataTypes().indexOf(attr.dataType) >= 0) {\n try {\n const editFormat = getEditDateTimeFormat(attr.dataType);\n const newDate = utils.strToDateTime(value, editFormat);\n }\n catch (_a) {\n return {\n successed: false,\n messages: [i18n.getText('DateTimeError')]\n };\n }\n }\n return { successed: true };\n }\n}\n\nclass EntityEditForm {\n constructor(context) {\n this.context = context;\n this.validators = [new DateTimeValidator()];\n }\n getHtml() {\n return this.html;\n }\n setHtmlInt(html) {\n this.html = html;\n this.errorsDiv = this.html.querySelector('.errors-block');\n }\n validate() {\n this.clearErrors();\n const inputs = Array.from(this.html.querySelectorAll('input, select'));\n let isValid = true;\n for (const input of inputs) {\n const attr = this.context.getMetaData().getAttributeById(input.name);\n if (input.type === 'checkbox')\n continue;\n const result = this.validateValue(attr, input.value);\n if (!result.successed) {\n if (isValid) {\n domel(this.errorsDiv)\n .addChild('ul');\n }\n isValid = false;\n for (const message of result.messages) {\n this.errorsDiv.firstElementChild.innerHTML += `
  • ${attr.caption}: ${message}
  • `;\n }\n }\n this.markInputValid(input, result.successed);\n }\n return isValid;\n }\n getData() {\n return new Promise((resolve, reject) => {\n const filePromises = [];\n const inputs = Array.from(this.html\n .querySelectorAll('input, select, textarea'));\n let obj = {};\n for (const input of inputs) {\n const property = input.name.substring(input.name.lastIndexOf('.') + 1);\n const attr = this.context.getMetaData().getAttributeById(input.name);\n if (input.type === 'checkbox') {\n obj[property] = input.checked;\n }\n else if (input.type === 'file') {\n filePromises.push(this.fileToBase64(input.files[0])\n .then(content => obj[property] = content));\n }\n else {\n obj[property] = this.mapValue(attr.dataType, input.value);\n }\n }\n Promise.all(filePromises)\n .then(() => resolve(obj))\n .catch((e) => reject(e));\n });\n }\n fileToBase64(file) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n const result = reader.result.toString();\n resolve(result.substring(result.indexOf(',') + 1));\n };\n reader.onerror = error => reject(error);\n });\n }\n useValidator(...validator) {\n this.useValidators(validator);\n }\n useValidators(validators) {\n this.validators = this.validators.concat(validators);\n }\n mapValue(type, value) {\n if (utils.getDateDataTypes().indexOf(type) >= 0) {\n if (type !== DataType.Time && value && value.length) {\n const editFormat = getEditDateTimeFormat(type);\n const internalFormat = getInternalDateTimeFormat(type);\n const date = utils.strToDateTime(value, editFormat);\n return i18n.dateTimeToStr(date, internalFormat);\n }\n return value && value.length ? value : null;\n }\n if (utils.isIntType(type))\n return parseInt(value);\n if (utils.isNumericType(type))\n return parseFloat(value);\n return value;\n }\n clearErrors() {\n this.errorsDiv.innerHTML = '';\n this.html.querySelectorAll('input, select').forEach(el => {\n el.classList.remove('is-valid');\n el.classList.remove('is-invalid');\n });\n }\n markInputValid(input, valid) {\n input.classList.add(valid ? 'is-valid' : 'is-invalid');\n }\n validateValue(attr, value) {\n const result = { successed: true, messages: [] };\n for (const validator of this.validators) {\n const res = validator.validate(attr, value);\n if (!res.successed) {\n result.successed = false;\n result.messages = result.messages.concat(res.messages);\n }\n }\n return result;\n }\n}\n\nclass TextFilterWidget {\n constructor(slot, grid, filter, options) {\n this.slot = slot;\n this.grid = grid;\n this.filter = filter;\n this.options = {\n focus: false,\n instantMode: false,\n instantTimeout: 1000\n };\n this.options = utils.assign(this.options, options || {});\n const stringDefRenderer = this.grid.cellRendererStore\n .getDefaultRendererByType(CellRendererType.STRING);\n this.grid.cellRendererStore\n .setDefaultRenderer(CellRendererType.STRING, (value, column, cellElement, rowElement) => this.highlightCellRenderer(stringDefRenderer, value, column, cellElement, rowElement));\n const numDefRenderer = this.grid.cellRendererStore\n .getDefaultRendererByType(CellRendererType.NUMBER);\n this.grid.cellRendererStore\n .setDefaultRenderer(CellRendererType.NUMBER, (value, column, cellElement, rowElement) => this.highlightCellRenderer(numDefRenderer, value, column, cellElement, rowElement));\n this.render();\n }\n render() {\n const horizClass = browserUtils.isIE()\n ? 'kfrm-fields-ie is-horizontal'\n : 'kfrm-fields is-horizontal';\n const isEdgeOrIE = browserUtils.isIE() || browserUtils.isEdge();\n domel(this.slot)\n .addClass(horizClass)\n .addChild('div', b => {\n b\n .addClass('control')\n .addChild('input', b => {\n this.filterInput = b.toDOM();\n b\n .attr('placeholder', i18n.getText('SearchInputPlaceholder'))\n .type('text');\n b.on('keydown', this.inputKeydownHandler.bind(this));\n if (this.options.instantMode) {\n b.on('keyup', this.inputKeyupHandler.bind(this));\n }\n });\n if (!isEdgeOrIE) {\n b\n .addClass('has-icons-right')\n .addChild('span', b => {\n b\n .addClass('icon')\n .addClass('is-right')\n .addClass('is-clickable')\n .html('🗙')\n .on('click', this.clearButtonClickHander.bind(this));\n });\n }\n });\n if (!this.options.instantMode) {\n domel(this.slot)\n .addChild('button', b => b\n .addClass('kfrm-button')\n .addText(i18n.getText('SearchBtn'))\n .on('click', this.searchButtonClickHandler.bind(this)));\n }\n if (this.options.focus) {\n this.filterInput.focus();\n }\n }\n inputKeydownHandler(ev) {\n if (ev.keyCode == 13) {\n this.applyFilter(true);\n }\n }\n inputKeyupHandler() {\n if (this.applyFilterTimeout) {\n clearTimeout(this.applyFilterTimeout);\n }\n this.applyFilterTimeout = setTimeout(() => {\n this.applyFilter(true);\n }, this.options.instantTimeout);\n }\n clearButtonClickHander() {\n this.filterInput.value = '';\n this.filterInput.focus();\n this.applyFilter(true);\n }\n searchButtonClickHandler() {\n this.applyFilter(true);\n }\n applyFilter(checkChange) {\n if (this.applyFilterTimeout) {\n clearTimeout(this.applyFilterTimeout);\n }\n const filterValue = this.filter.getValue();\n if (!checkChange || filterValue != this.filterInput.value) {\n this.filter.apply(this.filterInput.value)\n .then(data => {\n this.grid.setData(data);\n });\n return true;\n }\n return false;\n }\n highlightCellRenderer(defaultRenderer, value, column, cellElement, rowElement) {\n if (utils.isNumericType(column.type)\n || utils.getStringDataTypes().indexOf(column.type) >= 0) {\n if (value) {\n if (column.dataColumn && column.dataColumn.displayFormat\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\n value = column.dataColumn.displayFormat.replace(DFMT_REGEX, (_, $1) => {\n return i18n.numberToStr(value, $1);\n });\n }\n else {\n value = value.toLocaleString();\n }\n const result = this.highlightText(value.toString());\n if (result instanceof HTMLElement) {\n cellElement.title = value;\n cellElement.appendChild(result);\n return;\n }\n }\n }\n defaultRenderer(value, column, cellElement, rowElement);\n }\n highlightText(content) {\n const normalizedContent = content.toLowerCase();\n const filterValue = this.filter.getValue().toString();\n if (filterValue && filterValue.length > 0 && content && content.length > 0) {\n const indexInMas = [];\n const words = filterValue.split('||').map(w => w.trim().toLowerCase());\n for (let i = 0; i < words.length; i++) {\n let pos = 0;\n const lowerWord = words[i];\n if (!lowerWord.length)\n continue;\n if (lowerWord === normalizedContent) {\n const highlightSpan = document.createElement('span');\n highlightSpan.style.backgroundColor = 'yellow';\n highlightSpan.innerText = content;\n return highlightSpan;\n }\n while (pos < content.length - 1) {\n const index = normalizedContent.indexOf(lowerWord, pos);\n if (index >= 0) {\n indexInMas.push({ index: index, length: words[i].length });\n pos = index + lowerWord.length;\n }\n else {\n pos++;\n }\n }\n }\n if (indexInMas.length > 0) {\n //sort array item by index\n indexInMas.sort((item1, item2) => {\n if (item1.index > item2.index) {\n return 1;\n }\n else if (item1.index == item2.index2) {\n return 0;\n }\n else {\n return -1;\n }\n });\n //remove intersecting gaps\n for (let i = 0; i < indexInMas.length - 1;) {\n const delta = indexInMas[i + 1].index - (indexInMas[i].index + indexInMas[i].length);\n if (delta < 0) {\n const addDelta = indexInMas[i + 1].length + delta;\n if (addDelta > 0) {\n indexInMas[i].length += addDelta;\n }\n indexInMas.splice(i + 1, 1);\n }\n else {\n i++;\n }\n }\n const div = document.createElement('div');\n for (let i = 0; i < indexInMas.length; i++) {\n if (i === 0) {\n const text = document.createTextNode(content.substring(0, indexInMas[i].index));\n div.appendChild(text);\n }\n const highlightSpan = document.createElement('span');\n highlightSpan.style.backgroundColor = 'yellow';\n highlightSpan.innerText = content.substring(indexInMas[i].index, indexInMas[i].index + indexInMas[i].length);\n div.appendChild(highlightSpan);\n const text = (i < indexInMas.length - 1)\n ? document.createTextNode(content.substring(indexInMas[i].index\n + indexInMas[i].length, indexInMas[i + 1].index))\n : document.createTextNode(content.substring(indexInMas[i].index\n + indexInMas[i].length));\n div.appendChild(text);\n }\n return div;\n }\n }\n return content;\n }\n}\n\nconst isIE = browserUtils.isIE();\nclass EntityEditFormBuilder {\n constructor(context, params) {\n this.context = context;\n this.params = params;\n this.params = params || {};\n this.reset();\n }\n reset() {\n this.form = new EntityEditForm(this.context);\n }\n setupLookupField(parent, attr, readOnly, value) {\n const lookupEntity = this.context.getMetaData().getRootEntity()\n .subEntities.filter(ent => ent.id == attr.lookupEntity)[0];\n const dataAttr = this.context.getMetaData().getAttributeById(attr.dataAttr);\n if (!dataAttr)\n return;\n readOnly = readOnly || !dataAttr.isEditable;\n value = this.params.values\n ? this.params.values.getValue(dataAttr.id)\n : undefined;\n const horizClass = isIE\n ? 'kfrm-fields-ie is-horizontal'\n : 'kfrm-fields is-horizontal';\n let inputEl;\n domel(parent)\n .addChild('div', b => {\n b\n .addClass(horizClass)\n .addChild('input', b => {\n inputEl = b.toDOM();\n b.attr('readonly', '');\n b.name(dataAttr.id);\n b.type(this.resolveInputType(dataAttr.dataType));\n b.value(utils.IsDefinedAndNotNull(value)\n ? value.toString() : '');\n });\n if (!readOnly)\n b.addChild('button', b => b\n .addClass('kfrm-button')\n .attr('title', i18n.getText('NavigationBtnTitle'))\n .addText('...')\n .on('click', (ev) => {\n const lookupTable = new EasyDataTable({\n loader: {\n loadChunk: (chunkParams) => this.context.getDataLoader()\n .loadChunk(Object.assign(Object.assign({}, chunkParams), { id: lookupEntity.id }))\n }\n });\n this.context.getDataLoader()\n .loadChunk({ offset: 0, limit: 1000, needTotal: true, sourceId: lookupEntity.id })\n .then(data => {\n for (const col of data.table.columns.getItems()) {\n const attrs = lookupEntity.attributes.filter(attr => attr.id == col.id && (attr.isPrimaryKey || attr.showInLookup));\n if (attrs.length) {\n lookupTable.columns.add(col);\n }\n }\n lookupTable.setTotal(data.total);\n for (const row of data.table.getCachedRows()) {\n lookupTable.addRow(row);\n }\n const ds = new DefaultDialogService();\n let gridSlot = null;\n let selectedSlot = null;\n let widgetSlot;\n const slot = domel('div')\n .addClass(`kfrm-form`)\n .addChild('div', b => b\n .addClass(`kfrm-field`)\n .addChild('label', b => b\n .addText(i18n.getText('LookupSelectedItem'))\n .toDOM())\n .addChild('div', b => selectedSlot = b\n .addText('None')\n .toDOM()))\n .addChild('div', b => widgetSlot = b.toDOM())\n .addChild('div', b => b\n .addClass('kfrm-control')\n .addChild('div', b => gridSlot = b.toDOM()))\n .toDOM();\n let selectedValue = inputEl.value;\n const getValue = (row, colId) => {\n if (row instanceof DataRow) {\n return row.getValue(colId);\n }\n const property = colId.substring(colId.lastIndexOf('.') + 1);\n return row[property];\n };\n const updateSelectedValue = (row) => {\n selectedSlot.innerHTML = lookupTable.columns\n .getItems()\n .map(col => {\n return `${col.label}: ${getValue(row, col.id)}`;\n })\n .join(', ');\n };\n if (selectedValue) {\n const attr = lookupEntity.getFirstPrimaryAttr();\n const key = attr.id.substring(attr.id.lastIndexOf('.') + 1);\n this.context.fetchRecord({ [key]: selectedValue }, lookupEntity.id)\n .then(data => {\n if (data.entity) {\n updateSelectedValue(data.entity);\n }\n })\n .catch(error => {\n console.error(error);\n });\n }\n const lookupGrid = new EasyGrid({\n slot: gridSlot,\n dataTable: lookupTable,\n fixHeightOnFirstRender: true,\n paging: {\n pageSize: 10\n },\n onActiveRowChanged: (ev) => {\n lookupGrid.getData().getRow(ev.rowIndex)\n .then((row) => {\n selectedValue = row.getValue(attr.lookupDataAttr);\n updateSelectedValue(row);\n });\n }\n });\n ds.open({\n title: i18n.getText('LookupDlgCaption')\n .replace('{entity}', lookupEntity.caption),\n body: slot,\n arrangeParents: true,\n beforeOpen: () => {\n const dataFilter = this.context.createFilter(lookupEntity.id, lookupGrid.getData(), true);\n new TextFilterWidget(widgetSlot, lookupGrid, dataFilter, { instantMode: true, focus: true });\n },\n onSubmit: () => {\n inputEl.value = selectedValue;\n return true;\n },\n onDestroy: () => {\n lookupGrid.destroy();\n // return focus on button\n b.toDOM().focus();\n }\n });\n });\n }));\n });\n }\n setupDateTimeField(parent, attr, value, readOnly, hidden) {\n const horizClass = isIE\n ? 'kfrm-fields-ie is-horizontal'\n : 'kfrm-fields is-horizontal';\n const editFormat = getEditDateTimeFormat(attr.dataType);\n let inputEl;\n const mask = editFormat\n .replace('yyyy', '9999')\n .replace('MM', '99')\n .replace('dd', '99')\n .replace('HH', '99')\n .replace('mm', '99')\n .replace('ss', '99');\n domel(parent)\n .addChild('div', b => {\n b\n .addClass(horizClass)\n .addChild('input', b => {\n inputEl = b.toDOM();\n b.name(attr.id);\n b.type(hidden ? 'hidden' : this.resolveInputType(attr.dataType));\n if (readOnly) {\n b.attr('readonly', '');\n }\n else {\n b.mask(mask);\n b.on('keypress', (ev) => this.applySumbit(ev))\n .on('input', ev => {\n b.removeClass('is-invalid');\n try {\n const newDate = utils.strToDateTime(inputEl.value, editFormat);\n }\n catch (e) {\n b.addClass('is-invalid');\n }\n finally {\n }\n })\n .on('blur', ev => {\n if (inputEl.value === mask.replace(/[9]/g, '_')) {\n inputEl.value = '';\n }\n });\n }\n b.value((utils.IsDefinedAndNotNull(value)\n ? i18n.dateTimeToStr(value, editFormat)\n : ''));\n });\n if (!readOnly)\n b.addChild('button', b => b\n .addClass('kfrm-button')\n .attr('title', i18n.getText(attr.dataType !== DataType.Time\n ? 'CalendarBtnTitle'\n : 'TimerBtnTitle'))\n .addChild('i', b => b.addClass(attr.dataType !== DataType.Time\n ? 'ed-calendar-icon'\n : 'ed-timer-icon'))\n .on('click', (ev) => {\n let value;\n try {\n value = inputEl.value.length\n ? attr.dataType !== DataType.Time\n ? utils.strToDateTime(inputEl.value, editFormat)\n : utils.strToTime(inputEl.value)\n : new Date(new Date().setSeconds(0));\n }\n catch (_a) {\n value = new Date(new Date().setSeconds(0));\n }\n const pickerOptions = {\n zIndex: 9999999999,\n showCalendar: attr.dataType !== DataType.Time,\n showTimePicker: attr.dataType !== DataType.Date,\n onApply: (dateTime) => {\n dateTime.setSeconds(0);\n dateTime.setMilliseconds(0);\n inputEl.value = i18n.dateTimeToStr(dateTime, editFormat);\n }\n };\n const dtp = new DefaultDateTimePicker(pickerOptions);\n dtp.setDateTime(value);\n dtp.show(ev.target);\n }).toDOM());\n });\n }\n setupListField(parent, attr, value, values, readOnly) {\n domel(parent)\n .addChild('div', b => b\n .addClass('kfrm-select full-width')\n .addChild('select', b => {\n if (readOnly)\n b.attr('readonly', '');\n b.attr('name', attr.id);\n b.on('keypress', (ev) => this.applySumbit(ev));\n if (values) {\n for (let i = 0; i < values.length; i++) {\n const val = values[i];\n b.addOption({\n value: val.id,\n title: val.text,\n selected: i === 0\n });\n }\n }\n b.value(value);\n }));\n }\n setupFileField(parent, attr, readOnly, accept) {\n domel(parent)\n .addChild('input', b => {\n if (readOnly)\n b.attr('readonly', '');\n b.name(attr.id)\n .type(this.resolveInputType(attr.dataType));\n b.attr('accept', accept);\n });\n }\n setupTextField(parent, attr, value, readOnly, hidden) {\n domel(parent)\n .addChild('input', b => {\n if (readOnly) {\n b.attr('readonly', '');\n }\n b.type(hidden ? 'hidden' : this.resolveInputType(attr.dataType));\n b.name(attr.id)\n .type(this.resolveInputType(attr.dataType));\n if (attr.dataType == DataType.Bool) {\n if (value)\n b.attr('checked', '');\n }\n else {\n b.on('keypress', (ev) => this.applySumbit(ev))\n .value(utils.IsDefinedAndNotNull(value)\n ? value.toString()\n : '');\n }\n });\n }\n setupTextArea(parent, attr, value, readOnly) {\n // feature: modify size in value editor ??\n domel(parent)\n .addChild('textarea', b => {\n if (readOnly)\n b.attr('readonly', '');\n b.attr('name', attr.id);\n b.setStyle('height', `120px`);\n b.value(utils.IsDefinedAndNotNull(value)\n ? value.toString()\n : '');\n });\n }\n addFormField(parent, attr) {\n const value = (this.params.values && attr.kind !== EntityAttrKind.Lookup)\n ? this.params.values.getValue(attr.id)\n : !this.params.isEditForm\n ? attr.defaultValue\n : undefined;\n const editor = this.resolveEditor(attr);\n const readOnly = this.params.isEditForm && (attr.isPrimaryKey || !attr.isEditable);\n const required = !attr.isNullable;\n if (isIE) {\n parent = domel('div', parent)\n .addClass('kfrm-field-ie')\n .toDOM();\n }\n domel(parent)\n .addChild('label', b => {\n b.attr('for', attr.id);\n b.addHtml(`${attr.caption} ${required ? '*' : ''}: `);\n if (attr.description) {\n b.addChild('div', b => b\n .attr('title', attr.description)\n .addClass('question-mark')\n .setStyle('vertical-align', 'middle')\n .setStyle('display', 'inline-block'));\n }\n });\n const hidden = attr.isPrimaryKey;\n if (attr.kind === EntityAttrKind.Lookup) {\n this.setupLookupField(parent, attr, readOnly, value);\n return;\n }\n switch (editor.tag) {\n case EditorTag.DateTime:\n this.setupDateTimeField(parent, attr, value, readOnly, hidden);\n break;\n case EditorTag.List:\n this.setupListField(parent, attr, value, editor.values, readOnly);\n break;\n case EditorTag.File:\n this.setupFileField(parent, attr, readOnly, editor.accept);\n break;\n case EditorTag.Edit:\n default:\n if (editor.multiline) {\n this.setupTextArea(parent, attr, value, readOnly);\n }\n else {\n this.setupTextField(parent, attr, value, readOnly, hidden);\n }\n break;\n }\n }\n resolveInputType(dataType) {\n if (dataType === DataType.Bool)\n return 'checkbox';\n if (dataType === DataType.Blob)\n return 'file';\n return 'text';\n }\n resolveEditor(attr) {\n let editor = attr.defaultEditor || new ValueEditor();\n if (editor.tag == EditorTag.Unknown) {\n if (utils.getDateDataTypes().indexOf(attr.dataType) >= 0) {\n editor.tag = EditorTag.DateTime;\n }\n else {\n editor.tag = EditorTag.Edit;\n }\n }\n return editor;\n }\n applySumbit(ev) {\n if (ev.keyCode === 13) {\n this.sumbitCallback && this.sumbitCallback();\n return false;\n }\n return false;\n }\n onSubmit(sumbitCallback) {\n this.sumbitCallback = sumbitCallback;\n return this;\n }\n build() {\n let fb;\n const formHtml = domel('div')\n .addClass('kfrm-form')\n .addChild('div', b => b\n .addClass(`errors-block`)\n .toDOM())\n .addChild('div', b => {\n b.addClass(`${isIE\n ? 'kfrm-fields-ie col-ie-1-4 label-align-right'\n : 'kfrm-fields col-a-1 label-align-right'}`);\n fb = b;\n })\n .toDOM();\n this.form['setHtmlInt'](formHtml);\n for (const attr of this.context.getActiveEntity().attributes) {\n if (!this.params.isEditForm && !attr.showOnCreate)\n continue;\n if (!attr.isPrimaryKey && this.params.isEditForm && !attr.showOnEdit) {\n continue;\n }\n this.addFormField(fb.toDOM(), attr);\n }\n return this.form;\n }\n}\n\nclass ProgressBar {\n constructor(slot) {\n this.slot = slot;\n this.hide();\n this.slot.classList.add('ed-progress-bar');\n }\n show() {\n this.slot.style.removeProperty('display');\n }\n hide() {\n this.slot.style.display = 'none';\n }\n}\n\nclass EasyDataServerLoader {\n constructor(context) {\n this.context = context;\n }\n loadChunk(params) {\n const url = this.context.resolveEndpoint('FetchDataset', { sourceId: params.sourceId || this.context.getActiveEntity().id });\n delete params.sourceId;\n this.context.startProcess();\n const http = this.context.getHttpClient();\n return http.post(url, params)\n .then((result) => {\n const dataTable = new EasyDataTable({\n chunkSize: 1000\n });\n const resultSet = result.resultSet;\n for (const col of resultSet.cols) {\n dataTable.columns.add(col);\n }\n for (const row of resultSet.rows) {\n dataTable.addRow(row);\n }\n let totalRecords = 0;\n if (result.meta && result.meta.totalRecords) {\n totalRecords = result.meta.totalRecords;\n }\n return {\n table: dataTable,\n total: totalRecords,\n hasNext: !params.needTotal\n || params.offset + params.limit < totalRecords\n };\n })\n .finally(() => {\n this.context.endProcess();\n });\n }\n}\n\nclass DataContext {\n constructor(options) {\n this.endpoints = new Map();\n this.endpointVarsRegex = /\\{.*?\\}/g;\n this.options = options || {};\n this.http = new HttpClient();\n this.model = new MetaData();\n this.model.id = options.metaDataId || '__default';\n this.dataLoader = new EasyDataServerLoader(this);\n const dataTableOptions = Object.assign({ loader: this.dataLoader }, options.dataTable);\n this.data = new EasyDataTable(dataTableOptions);\n this.setDefaultEndpoints(this.options.endpoint || '/api/easydata');\n }\n getActiveEntity() {\n return this.activeEntity;\n }\n setActiveSource(entityId) {\n this.activeEntity = this.model.getRootEntity().subEntities\n .filter(e => e.id == entityId)[0];\n }\n getMetaData() {\n return this.model;\n }\n getData() {\n return this.data;\n }\n getDataLoader() {\n return this.dataLoader;\n }\n createFilter(sourceId, data, isLookup) {\n return new TextDataFilter(this.dataLoader, data || this.getData(), sourceId || this.activeEntity.id, isLookup);\n }\n loadMetaData() {\n const url = this.resolveEndpoint('GetMetaData');\n this.startProcess();\n return this.http.get(url)\n .then(result => {\n if (result.model) {\n this.model.loadFromData(result.model);\n }\n return this.model;\n })\n .catch(error => {\n console.error(`Error: ${error.message}. Source: ${error.sourceError}`);\n return null;\n })\n .finally(() => {\n this.endProcess();\n });\n }\n getHttpClient() {\n return this.http;\n }\n fetchDataset() {\n this.data.clear();\n return this.dataLoader.loadChunk({ offset: 0, limit: this.data.chunkSize, needTotal: true })\n .then(result => {\n for (const col of result.table.columns.getItems()) {\n this.data.columns.add(col);\n }\n this.data.setTotal(result.total);\n for (const row of result.table.getCachedRows()) {\n this.data.addRow(row);\n }\n return this.data;\n });\n }\n fetchRecord(keys, sourceId) {\n const url = this.resolveEndpoint('FetchRecord', { sourceId: sourceId || this.activeEntity.id });\n this.startProcess();\n return this.http.get(url, { queryParams: keys })\n .finally(() => this.endProcess());\n }\n createRecord(obj, sourceId) {\n const url = this.resolveEndpoint('CreateRecord', { sourceId: sourceId || this.activeEntity.id });\n this.startProcess();\n return this.http.post(url, obj, { dataType: 'json' })\n .finally(() => this.endProcess());\n }\n updateRecord(obj, sourceId) {\n const url = this.resolveEndpoint('UpdateRecord', { sourceId: sourceId || this.activeEntity.id });\n this.startProcess();\n return this.http.post(url, obj, { dataType: 'json' })\n .finally(() => this.endProcess());\n }\n deleteRecord(obj, sourceId) {\n const url = this.resolveEndpoint('DeleteRecord', { sourceId: sourceId || this.activeEntity.id });\n this.startProcess();\n return this.http.post(url, obj, { dataType: 'json' })\n .finally(() => this.endProcess());\n }\n setEndpoint(key, value) {\n this.endpoints.set(key, value);\n }\n setEnpointIfNotExist(key, value) {\n if (!this.endpoints.has(key))\n this.endpoints.set(key, value);\n }\n resolveEndpoint(endpointKey, options) {\n options = options || {};\n let result = this.endpoints.get(endpointKey);\n if (!result) {\n throw endpointKey + ' endpoint is not defined';\n }\n let matches = result.match(this.endpointVarsRegex);\n if (matches) {\n for (let match of matches) {\n let opt = match.substring(1, match.length - 1);\n let optVal = options[opt];\n if (!optVal) {\n if (opt == 'modelId') {\n optVal = this.model.getId();\n }\n else if (opt == 'sourceId') {\n optVal = this.activeEntity.id;\n }\n else {\n throw `Parameter [${opt}] is not defined`;\n }\n }\n result = result.replace(match, optVal);\n }\n }\n return result;\n }\n startProcess() {\n if (this.options.onProcessStart)\n this.options.onProcessStart();\n }\n endProcess() {\n if (this.options.onProcessEnd)\n this.options.onProcessEnd();\n }\n setDefaultEndpoints(endpointBase) {\n this.setEnpointIfNotExist('GetMetaData', combinePath(endpointBase, 'models/{modelId}'));\n this.setEnpointIfNotExist('FetchDataset', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/fetch'));\n this.setEnpointIfNotExist('FetchRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/fetch'));\n this.setEnpointIfNotExist('CreateRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/create'));\n this.setEnpointIfNotExist('UpdateRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/update'));\n this.setEnpointIfNotExist('DeleteRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/delete'));\n }\n}\n\nclass TypeValidator extends Validator {\n constructor() {\n super();\n this.name = 'Type';\n }\n validate(attr, value) {\n if (!utils.IsDefinedAndNotNull(value) || value == '')\n return { successed: true };\n if (utils.isNumericType(attr.dataType)) {\n if (!utils.isNumeric(value))\n return {\n successed: false,\n messages: [i18n.getText('NumberError')]\n };\n if (utils.isIntType(attr.dataType)\n && !Number.isInteger(Number.parseFloat(value))) {\n return {\n successed: false,\n messages: [i18n.getText('IntNumberError')]\n };\n }\n }\n return { successed: true };\n }\n}\n\nclass RequiredValidator extends Validator {\n constructor() {\n super();\n this.name = 'Required';\n }\n validate(attr, value) {\n if (!attr.isNullable && (!utils.IsDefinedAndNotNull(value)\n || value === ''))\n return {\n successed: false,\n messages: [i18n.getText('RequiredError')]\n };\n return { successed: true };\n }\n}\n\nclass EntityDataView {\n constructor(slot, context, basePath, options) {\n this.slot = slot;\n this.context = context;\n this.basePath = basePath;\n this.options = {\n showFilterBox: true,\n showBackToEntities: true\n };\n this.defaultValidators = [new RequiredValidator(), new TypeValidator()];\n this.options = utils.assignDeep(this.options, options || {});\n this.dlg = new DefaultDialogService();\n const ent = this.context.getActiveEntity();\n if (!ent) {\n throw \"Can't find active entity for \" + window.location.pathname;\n }\n this.slot.innerHTML += `

    ${ent.captionPlural || ent.caption}

    `;\n if (this.options.showBackToEntities) {\n domel(this.slot)\n .addChild('a', b => b\n .attr('href', 'javascript:void(0)')\n .text(`← ${i18n.getText('BackToEntities')}`)\n .on('click', (e) => {\n e.preventDefault();\n setLocation(this.basePath);\n }));\n }\n this.renderGrid();\n }\n syncGridColumnHandler(column) {\n if (column.dataColumn) {\n const attr = this.context.getMetaData().getAttributeById(column.dataColumn.id);\n if (attr) {\n column.isVisible = attr.showOnView;\n }\n }\n }\n renderGrid() {\n this.context.fetchDataset()\n .then(result => {\n const gridSlot = document.createElement('div');\n this.slot.appendChild(gridSlot);\n gridSlot.id = 'Grid';\n let gridOptions = {\n slot: gridSlot,\n dataTable: result,\n paging: {\n pageSize: 15,\n allowPageSizeChange: true,\n pageSizeItems: [15, 30, 50, 100, 200]\n },\n showPlusButton: this.context.getActiveEntity().isEditable,\n plusButtonTitle: i18n.getText('AddRecordBtnTitle'),\n showActiveRow: false,\n onPlusButtonClick: this.addClickHandler.bind(this),\n onGetCellRenderer: this.manageCellRenderer.bind(this),\n onRowDbClick: this.rowDbClickHandler.bind(this),\n onSyncGridColumn: this.syncGridColumnHandler.bind(this)\n };\n const sourceOptions = this.options.grid || {};\n gridOptions = utils.assignDeep(gridOptions, sourceOptions);\n this.grid = new EasyGrid(gridOptions);\n if (this.options.showFilterBox) {\n let filterWidgetSlot;\n const filterBarDiv = domel('div')\n .addClass(`kfrm-form`)\n .setStyle('margin', '10px 0px')\n .addChild('div', b => filterWidgetSlot = b.toDOM()).toDOM();\n this.slot.insertBefore(filterBarDiv, gridSlot);\n const dataFilter = this.context.createFilter();\n this.filterWidget = new TextFilterWidget(filterWidgetSlot, this.grid, dataFilter);\n }\n });\n }\n manageCellRenderer(column, defaultRenderer) {\n if (column.isRowNum) {\n column.width = 110;\n return (value, column, cell, rowEl) => {\n const b = domel('div', cell)\n .addClass(`keg-cell-value`);\n if (this.context.getActiveEntity().isEditable) {\n b.addChild('a', b => b\n .attr('href', 'javascript:void(0)')\n .text(i18n.getText('EditBtn'))\n .on('click', (ev) => this.editClickHandler(ev, parseInt(rowEl.getAttribute('data-row-idx')))))\n .addChild('span', b => b.text(' | '))\n .addChild('a', b => b\n .attr('href', 'javascript:void(0)')\n .text(i18n.getText('DeleteBtn'))\n .on('click', (ev) => this.deleteClickHandler(ev, parseInt(rowEl.getAttribute('data-row-idx')))));\n }\n };\n }\n }\n addClickHandler() {\n const activeEntity = this.context.getActiveEntity();\n const form = new EntityEditFormBuilder(this.context)\n .onSubmit(() => dlg.submit())\n .build();\n form.useValidators(this.defaultValidators);\n const dlg = this.dlg.open({\n title: i18n.getText('AddDlgCaption')\n .replace('{entity}', activeEntity.caption),\n body: form.getHtml(),\n onSubmit: () => {\n if (!form.validate())\n return false;\n form.getData()\n .then(obj => this.context.createRecord(obj))\n .then(() => {\n return this.refreshData();\n })\n .catch((error) => {\n this.processError(error);\n });\n }\n });\n }\n editClickHandler(ev, rowIndex) {\n this.grid.getData().getRow(rowIndex)\n .then(row => {\n if (row) {\n this.showEditForm(row);\n }\n });\n }\n showEditForm(row) {\n const activeEntity = this.context.getActiveEntity();\n const form = new EntityEditFormBuilder(this.context, { isEditForm: true, values: row })\n .onSubmit(() => dlg.submit())\n .build();\n form.useValidators(this.defaultValidators);\n const dlg = this.dlg.open({\n title: i18n.getText('EditDlgCaption')\n .replace('{entity}', activeEntity.caption),\n body: form.getHtml(),\n onSubmit: () => {\n if (!form.validate())\n return false;\n form.getData()\n .then(obj => this.context.updateRecord(obj))\n .then(() => {\n return this.refreshData();\n })\n .catch((error) => {\n this.processError(error);\n });\n }\n });\n }\n rowDbClickHandler(ev) {\n if (this.context.getActiveEntity().isEditable) {\n this.showEditForm(ev.row);\n }\n }\n deleteClickHandler(ev, rowIndex) {\n this.grid.getData().getRow(rowIndex)\n .then(row => {\n if (row) {\n const activeEntity = this.context.getActiveEntity();\n const keyAttrs = activeEntity.getPrimaryAttrs();\n const keyVals = keyAttrs.map(attr => row.getValue(attr.id));\n const keys = keyAttrs.reduce((val, attr, index) => {\n const property = attr.id.substring(attr.id.lastIndexOf('.') + 1);\n val[property] = keyVals[index];\n return val;\n }, {});\n this.dlg.openConfirm(i18n.getText('DeleteDlgCaption')\n .replace('{entity}', activeEntity.caption), i18n.getText('DeleteDlgMessage')\n .replace('{recordId}', Object.keys(keys)\n .map(key => `${key}:${keys[key]}`).join(';')))\n .then((result) => {\n if (result) {\n this.context.deleteRecord(keys)\n .then(() => {\n return this.refreshData();\n })\n .catch((error) => {\n this.processError(error);\n });\n }\n });\n }\n });\n }\n processError(error) {\n this.dlg.open({\n title: 'Ooops, something went wrong',\n body: error.message,\n closable: true,\n cancelable: false\n });\n }\n refreshData() {\n return this.context.fetchDataset()\n .then(() => {\n let processed = false;\n if (this.filterWidget) {\n processed = this.filterWidget.applyFilter(false);\n }\n if (!processed) {\n this.grid.refresh();\n }\n });\n }\n}\n\nclass RootDataView {\n constructor(slot, context, basePath, options) {\n this.slot = slot;\n this.context = context;\n this.basePath = basePath;\n this.options = {\n usePluralNames: true\n };\n this.metaData = this.context.getMetaData();\n this.slot.innerHTML += `

    ${i18n.getText('RootViewTitle')}

    `;\n utils.assign(this.options, options);\n this.renderEntitySelector();\n }\n renderEntitySelector() {\n const entities = this.metaData.getRootEntity().subEntities;\n if (this.slot) {\n domel(this.slot)\n .addChild('div', b => b\n .addClass('ed-root')\n .addChild('div', b => b\n .addClass('ed-menu-description')\n .addText(i18n.getText(!this.metaData.isEmpty() ? 'EntityMenuDesc' : 'ModelIsEmpty')))\n .addChild('ul', b => {\n b.addClass('ed-entity-menu');\n entities.forEach(ent => {\n const entCaption = this.options.usePluralNames && ent.captionPlural\n ? ent.captionPlural\n : ent.caption;\n b.addChild('li', b => {\n b.addClass('ed-entity-item')\n .on('click', () => {\n setLocation(`${this.basePath}/${decodeURIComponent(ent.id)}`);\n })\n .addChild('div', b => {\n b.addClass('ed-entity-item-caption')\n .addText(entCaption);\n });\n if (ent.description) {\n b.addChild('div', b => {\n b.addClass('ed-entity-item-descr')\n .addText(`${ent.description}`);\n });\n }\n });\n });\n }));\n }\n }\n}\n\nclass EasyDataViewDispatcher {\n constructor(options) {\n this.options = {\n container: '#EasyDataContainer',\n basePath: 'easydata'\n };\n this.onSetLocation = () => {\n this.setActiveView();\n };\n this.attach = () => {\n window.addEventListener('ed_set_location', this.onSetLocation);\n window.addEventListener('popstate', this.onSetLocation);\n };\n this.options = utils.assign(this.options, options || {});\n if (this.options.rootEntity) {\n this.options.showBackToEntities = false;\n this.basePath = '/';\n }\n else {\n this.basePath = this.normalizeBasePath(this.options.basePath);\n }\n this.setContainer(this.options.container);\n const progressBarSlot = document.createElement('div');\n const bar = new ProgressBar(progressBarSlot);\n const parent = this.container.parentElement;\n parent.insertBefore(progressBarSlot, parent.firstElementChild);\n this.context = new DataContext({\n endpoint: this.options.endpoint,\n dataTable: this.options.dataTable,\n onProcessStart: () => bar.show(),\n onProcessEnd: () => bar.hide()\n });\n }\n normalizeBasePath(basePath) {\n basePath = this.trimSlashes(basePath);\n const fullPath = decodeURIComponent(window.location.pathname);\n const idx = fullPath.toLocaleLowerCase().indexOf(basePath);\n return idx >= 0 ? fullPath.substring(0, idx + basePath.length) : '/';\n }\n trimSlashes(path) {\n return path.replace(/^\\/|\\/$/g, '');\n }\n setContainer(container) {\n if (!container) {\n throw 'Container is undefined';\n }\n if (typeof container === 'string') {\n if (container.length) {\n if (container[0] === '.') {\n const result = document.getElementsByClassName(container.substring(1));\n if (result.length)\n this.container = result[0];\n }\n else {\n if (container[0] === '#') {\n container = container.substring(1);\n }\n this.container = document.getElementById(container);\n }\n if (!this.container) {\n throw Error('Unrecognized `container` parameter: ' + container + '\\n'\n + 'It must be an element ID, a class name (starting with .) or an HTMLElement object itself.');\n }\n }\n }\n else {\n this.container = container;\n }\n }\n getActiveSourceId() {\n if (this.options.rootEntity)\n return this.options.rootEntity;\n const path = decodeURIComponent(window.location.pathname);\n const idIndex = this.basePath.length + 1;\n return idIndex < path.length ? path.substring(idIndex) : null;\n }\n run() {\n this.attach();\n return this.context.loadMetaData()\n .then(() => {\n this.setActiveView();\n })\n .catch(error => console.error(error));\n }\n setActiveView() {\n this.clear();\n const sourceId = this.getActiveSourceId();\n if (sourceId) {\n this.context.setActiveSource(sourceId);\n window['EDView'] = new EntityDataView(this.container, this.context, this.basePath, this.options);\n }\n else {\n const rootViewOptions = {};\n if (typeof this.options.usePluralNames !== 'undefined') {\n rootViewOptions.usePluralNames = this.options.usePluralNames;\n }\n window['EDView'] = new RootDataView(this.container, this.context, this.basePath, rootViewOptions);\n }\n }\n clear() {\n this.container.innerHTML = '';\n this.context.getData().clear();\n }\n detach() {\n window.removeEventListener('ed_set_location', this.onSetLocation);\n window.removeEventListener('popstate', this.onSetLocation);\n }\n}\n\nfunction addEasyDataCRUDTexts() {\n i18n.updateDefaultTexts({\n RequiredError: 'Value is required.',\n NumberError: 'Value should be a number',\n IntNumberError: 'Value should be an integer number',\n DateTimeError: 'Invalid date or time value',\n LookupSelectedItem: 'Selected item: ',\n LookupDlgCaption: 'Select {entity}',\n None: 'None',\n NavigationBtnTitle: 'Navigation values',\n CalendarBtnTitle: 'Open calendar',\n TimerBtnTitle: 'Open timer',\n AddBtnTitle: 'Add',\n AddRecordBtnTitle: 'Add record',\n EditBtn: 'Edit',\n DeleteBtn: 'Delete',\n SelectLink: '[ select ]',\n AddDlgCaption: 'Create {entity}',\n EditDlgCaption: 'Edit {entity}',\n DeleteDlgCaption: 'Delete {entity}',\n DeleteDlgMessage: 'Are you sure you want to remove this record: {{recordId}}?',\n EntityMenuDesc: 'Click on an entity to view/edit its content',\n BackToEntities: 'Back to entities',\n SearchBtn: 'Search',\n SearchInputPlaceholder: 'Search...',\n RootViewTitle: 'Entities',\n ModelIsEmpty: 'No entity was found.'\n });\n}\naddEasyDataCRUDTexts();\n\nexport { DataContext, EasyDataServerLoader, EasyDataViewDispatcher, EntityDataView, EntityEditForm, EntityEditFormBuilder, ProgressBar, RequiredValidator, RootDataView, TextDataFilter, TextFilterWidget, TypeValidator, Validator };\n",null],"names":["crud.EasyDataViewDispatcher"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/playground/EasyDataAspNetCoreTest01/wwwroot/js/easydata-all.min.js.map b/playground/EasyDataAspNetCoreTest01/wwwroot/js/easydata-all.min.js.map new file mode 100644 index 00000000..d7ccd5cc --- /dev/null +++ b/playground/EasyDataAspNetCoreTest01/wwwroot/js/easydata-all.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"easydata-all.min.js","sources":["../../../../node_modules/style-inject/dist/style-inject.es.js","../../../../easydata.js/packs/core/dist/easydata.core.esm.js","../../../../easydata.js/packs/ui/dist/easydata.ui.esm.js","../../../../easydata.js/packs/crud/dist/easydata.crud.esm.js","../../ts/easydata.ts"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","\n/*\n * EasyData.JS Core v1.5.2\n * Copyright 2020-2024 Korzh.com\n * Licensed under MIT\n */\n\n/** Represents the common types of the data. */\nvar 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 */\n DataType[DataType[\"Geography\"] = 19] = \"Geography\";\n})(DataType || (DataType = {}));\n\nvar 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\nconst 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\n/**\n * Represents a date/time value that can return either a date itself or a special date name\n */\nclass TimeValue {\n constructor(dt) {\n if (dt instanceof Date) {\n this.date = dt;\n }\n else {\n this._name = dt;\n }\n }\n asTime(settings) {\n if (this.date) {\n return this.date;\n }\n else {\n specialDatesResolver.getDateByName(this._name);\n }\n }\n get name() {\n return this.name;\n }\n}\nclass SpecialDatesResolver {\n getDateByName(name, settings) {\n if (this[name]) {\n return this[name](settings);\n }\n else {\n return undefined;\n }\n }\n Today(settings) {\n return new Date();\n }\n Yesterday(settings) {\n let d = new Date();\n d.setDate(d.getDate() - 1);\n return d;\n }\n Tomorrow(settings) {\n let d = new Date();\n d.setDate(d.getDate() + 1);\n return d;\n }\n FirstDayOfMonth(settings) {\n let d = new Date();\n d.setDate(1);\n return d;\n }\n LastDayOfMonth(settings) {\n let d = new Date();\n d.setMonth(d.getMonth() + 1, 0);\n return d;\n }\n FirstDayOfNextMonth(settings) {\n let d = new Date();\n d.setMonth(d.getMonth() + 1, 1);\n return d;\n }\n FirstDayOfPrevMonth(settings) {\n let d = new Date();\n d.setMonth(d.getMonth() - 1, 1);\n return d;\n }\n FirstDayOfYear(settings) {\n const d = new Date();\n d.setMonth(0, 1);\n return d;\n }\n FirstDayOfPrevYear(settings) {\n let d = new Date();\n d.setFullYear(d.getFullYear() - 1, 0, 1);\n return d;\n }\n FirstDayOfNextYear(settings) {\n let d = new Date();\n d.setFullYear(d.getFullYear() + 1, 0, 1);\n return d;\n }\n FirstDayOfWeek(settings) {\n const d = new Date();\n let day = d.getDay();\n day = (day == 0) ? 6 : day - 1; //We start week from Monday, but js - from Sunday\n d.setDate(d.getDate() - day);\n return d;\n }\n FirstDayOfPrevWeek(settings) {\n let d = new Date();\n let day = d.getDay();\n day = (day == 0) ? 1 : 8 - day; //We start week from Monday, but js - from Sunday\n d.setDate(d.getDate() - day);\n return d;\n }\n FirstDayOfNextWeek(settings) {\n let d = new Date();\n var day = d.getDay();\n day = (day == 0) ? 1 : 8 - day; //We start week from Monday, but js - from Sunday\n d.setDate(d.getDate() + day);\n return d;\n }\n}\nvar specialDatesResolver = new SpecialDatesResolver();\nfunction registerSpecialDatesResolver(resolver) {\n specialDatesResolver = resolver;\n}\n\nvar 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\nclass HttpRequest {\n constructor(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 setHeader(name, value) {\n this.headers[name] = value;\n }\n setQueryParam(name, value) {\n this.queryParams[name] = value;\n }\n getXMLHttpRequest() {\n return this.xhr;\n }\n getResponseHeaders() {\n if (this.xhr.readyState == this.xhr.HEADERS_RECEIVED) {\n const headers = this.xhr.getAllResponseHeaders();\n const arr = headers.trim().split(/[\\r\\n]+/);\n // Create a map of header names to values\n const headerMap = {};\n for (const line of arr) {\n const parts = line.split(': ');\n const header = parts.shift();\n const value = parts.join(': ');\n headerMap[header] = value;\n }\n return headerMap;\n }\n return {};\n }\n open() {\n if (this.xhr.readyState !== this.xhr.UNSENT)\n return;\n let url = this.url;\n if (this.queryParams && Object.keys(this.queryParams).length > 0) {\n url += encodeURI('?' + Object.keys(this.queryParams)\n .map(param => 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 (const header in this.headers) {\n this.xhr.setRequestHeader(header, this.headers[header]);\n }\n }\n abort() {\n this.xhr.abort();\n }\n}\n\nvar utils;\n(function (utils) {\n function getAllDataTypes() {\n return Object.values(DataType).filter(item => 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 const _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 const _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, ...args) {\n if (!target) {\n target = {};\n }\n for (let i = 0; i < args.length; i++) {\n let source = args[i];\n if (source && source.hasOwnProperty) {\n for (let 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, ...sources) {\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 (let source of sources) {\n if (source && source.hasOwnProperty) {\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n let sourceVal = source[key];\n //we don't make a deep copy of HTML elements and any other property marked as a 'reference' (ends with 'Ref')\n if (sourceVal !== null && typeof sourceVal === 'object'\n && !key.endsWith('Ref') && !(sourceVal instanceof HTMLElement)) {\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 const len1 = collection1.length;\n const len2 = collection2.length;\n for (let i = 0; i < len1 && i < len2; i++) {\n collection2[i] = collection1[i];\n }\n }\n utils.copyArrayTo = copyArrayTo;\n function createArrayFrom(collection) {\n let result = [];\n for (let item of collection) {\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 let len = arr.length;\n for (let 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 let 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 let 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 = 0, end) {\n let 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 let 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 let body = document.getElementsByTagName('body')[0];\n let winWidth = window.innerWidth || document.documentElement.clientWidth || body.clientWidth;\n var absRight = absLeft + width;\n let 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 const 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 const 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 const prefixIdLen = 4;\n const symbols = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n const magicTicks = 636712160627685350;\n /**\n * Generates an unique ID\n */\n function generateId(prefix) {\n if (!prefix) {\n prefix = 'easy';\n }\n let prfx = (prefix.length > prefixIdLen) ? squeezeMoniker(prefix, prefixIdLen) : prefix;\n if (prfx && prfx.length > 0) {\n prfx += \"-\";\n }\n //adding 3 random symbols\n var randCharPart = symbols[getRandomInt(0, symbols.length)] +\n symbols[getRandomInt(0, symbols.length)] +\n symbols[getRandomInt(0, symbols.length)];\n var randInt = getRandomInt(0, 10000);\n //generating main ID part\n //it's a 36-base representation of some random number based on current value of ticks\n let ticksNum36 = intToNumBase(getNowTicks() - magicTicks - randInt);\n return prfx + randCharPart + ticksNum36;\n }\n utils.generateId = generateId;\n function intToNumBase(value, targetBase = 36) {\n var buffer = '';\n var rest = value;\n do {\n buffer = symbols[rest % targetBase] + buffer;\n rest = Math.floor(rest /= targetBase);\n } while (rest > 0);\n return buffer;\n }\n function squeezeMoniker(str, maxlen) {\n let parts = str.split('-');\n let pml = 1;\n let ptt = maxlen;\n if (parts.length < maxlen) {\n pml = maxlen / parts.length;\n ptt = parts.length;\n }\n let result = \"\";\n for (let i = 0; i < ptt; i++) {\n result += squeeze(parts[i], pml);\n }\n return result;\n }\n function squeeze(str, maxlen) {\n const len = str.length;\n if (len > maxlen) {\n let step = len / maxlen;\n let result = \"\";\n result += str[0];\n let nextIndex = step;\n let ch;\n for (let 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 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 const res = parseInt(str);\n if (isNaN(res))\n throw `\"${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 const normalizedValue = value.replace(/[^a-zA-Z0-9_]/g, '-');\n const normalizedFormat = format.replace(/[^a-zA-Z0-9_]/g, '-');\n const formatItems = normalizedFormat.split('-');\n const dateItems = normalizedValue.split('-');\n const monthIndex = formatItems.indexOf(\"MM\");\n const dayIndex = formatItems.indexOf(\"dd\");\n const yearIndex = formatItems.indexOf(\"yyyy\");\n const hourIndex = formatItems.indexOf(\"HH\");\n const minutesIndex = formatItems.indexOf(\"mm\");\n const secondsIndex = formatItems.indexOf(\"ss\");\n const today = new Date();\n try {\n const year = yearIndex > -1 && yearIndex < dateItems.length\n ? safeParseInt(dateItems[yearIndex])\n : today.getFullYear();\n const month = monthIndex > -1 && monthIndex < dateItems.length\n ? safeParseInt(dateItems[monthIndex]) - 1\n : today.getMonth() - 1;\n if (month > 11)\n throw '';\n const day = dayIndex > -1 && dayIndex < dateItems.length\n ? safeParseInt(dateItems[dayIndex])\n : today.getDate();\n if (day > getDaysInMonth(month, year))\n throw '';\n const hour = hourIndex > -1 && hourIndex < dateItems.length\n ? safeParseInt(dateItems[hourIndex])\n : 0;\n if (hour > 23)\n throw '';\n const minute = minutesIndex > -1 && minutesIndex < dateItems.length\n ? safeParseInt(dateItems[minutesIndex])\n : 0;\n if (minute > 59)\n throw '';\n const 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 `${value} is not a valid date.`;\n }\n }\n utils.strToDateTime = strToDateTime;\n function strToTime(str) {\n const timeItems = str.split(':');\n try {\n const hour = timeItems.length > 0 ? safeParseInt(timeItems[0]) : 0;\n if (hour > 23)\n throw '';\n const minute = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0;\n if (minute > 59)\n throw '';\n const 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 `${str} is not a valid time.`;\n }\n }\n utils.strToTime = strToTime;\n})(utils || (utils = {}));\n\nclass HttpActionResult {\n constructor(request, promise) {\n this.request = request;\n this.promise = promise;\n }\n getPromise() {\n return this.promise;\n }\n getRequest() {\n return this.request;\n }\n then(onfulfilled, onrejected) {\n return this.promise.then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.promise.catch(onrejected);\n }\n finally(onfinally) {\n return this.promise.finally(onfinally);\n }\n}\n\nclass HttpResponseError extends Error {\n constructor(status, message) {\n super(message);\n Object.setPrototypeOf(this, HttpResponseError.prototype);\n this.status = status;\n }\n}\nclass HttpClient {\n /** Gets the response body for the latest request */\n get responseBody() {\n return this._responseBody;\n }\n constructor() {\n this.defaultHeaders = {};\n this.customPayload = undefined;\n }\n get(url, options) {\n return this.send(HttpMethod.Get, url, null, options);\n }\n post(url, data, options) {\n return this.send(HttpMethod.Post, url, data, options);\n }\n put(url, data, options) {\n return this.send(HttpMethod.Put, url, data, options);\n }\n delete(url, data, options) {\n return this.send(HttpMethod.Delete, url, data, options);\n }\n send(method, url, data, options) {\n options = options || {};\n const dataType = options.dataType || 'json';\n const 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 const XHR = ('onload' in new XMLHttpRequest())\n ? XMLHttpRequest\n : window[\"XDomainRequest\"]; //IE support\n const xhr = new XHR();\n const desc = {\n method: method,\n url: url,\n headers: Object.assign(Object.assign({}, this.defaultHeaders), options.headers || {}),\n queryParams: options.queryParams || {},\n data: data\n };\n if (contentType)\n desc.headers['Content-Type'] = contentType;\n const request = new HttpRequest(xhr, desc);\n if (this.beforeEachRequest) {\n console.warn(`HttpClient: 'beforeEachRequest' is deprecated and will be removed in future updates.\r\n Use 'onRequest' instead`);\n this.beforeEachRequest(request);\n }\n if (this.onRequest) {\n this.onRequest(request);\n }\n const 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((resolve, reject) => {\n if (options.responseType)\n xhr.responseType = options.responseType;\n xhr.onerror = (error) => {\n reject(new HttpResponseError(xhr.status, xhr.responseText));\n };\n xhr.onreadystatechange = () => {\n if (xhr.readyState != 4)\n return; //we process only the state change to DONE(4)\n const responseContentType = xhr.getResponseHeader('Content-Type') || '';\n const 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 const 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 const rtPromise = (xhr.responseType === 'arraybuffer' || xhr.responseType === 'blob')\n ? HttpClient.decodeArrayBuffer(xhr.response)\n : Promise.resolve(xhr.responseText);\n rtPromise.then(responseText => {\n const responseObj = (responseContentType.indexOf('application/json') == 0)\n ? JSON.parse(responseText)\n : responseText;\n this._responseBody = responseObj;\n const message = responseObj.message ||\n (status == 404\n ? `No such endpoint: ${url}`\n : responseObj);\n reject(new HttpResponseError(status, message));\n });\n }\n };\n xhr.send(dataToSend);\n }));\n }\n static decodeArrayBuffer(uintArray) {\n var reader = new FileReader();\n return new Promise((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}\n\n/**\n * Contains internatialization functionality.\n */\nvar i18n;\n(function (i18n) {\n let 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 let 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 let allLocales = {\n 'en-US': defaultLocale\n };\n let currentLocale;\n const mappers = [];\n function mapInfo(info) {\n for (const mapper of mappers) {\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 let result = [];\n for (let 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((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 const 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(...args) {\n let textsObj = currentLocale.texts;\n let resText = '';\n if (args && args.length) {\n const argLength = args.length;\n for (let 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 const 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 const 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 const 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 const 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 /**\n * Updates the default texts for the current locale and all other locales available now\n * This function does rewrite the texts in the locales, it just adds new textual resources if they didn't exists previously\n * @param texts A plain JS object that contains textual resources\n */\n function updateDefaultTexts(texts) {\n for (let localeId in allLocales) {\n let 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, localeInfo) {\n mapInfo(localeInfo);\n let localeInfoToUpdate = currentLocale;\n if (localeId) {\n if (!localeInfo.localeId) {\n localeInfo.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, localeInfo);\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 const now = new Date(2020, 5, 7, 19, 34, 56, 88);\n const dateOptions = { year: 'numeric', month: 'numeric', day: 'numeric' };\n const timeOptions = { hour: 'numeric', minute: 'numeric', second: 'numeric' };\n const dateStr = now.toLocaleDateString(localeId, dateOptions);\n const timeStr = now.toLocaleTimeString(localeId, timeOptions);\n let 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 let 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 const localeSettings = {\n shortDateFormat: dateFormat,\n shortTimeFormat: timeFormat\n };\n updateLocaleSettings(localeSettings);\n }\n function loadBrowserLocaleSettings() {\n const 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 const 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 const year = date.getFullYear();\n const yearStr = year.toString();\n const month = date.getMonth() + 1;\n const day = date.getDate();\n const hour = date.getHours();\n const minute = date.getMinutes();\n const second = date.getSeconds();\n const hour12 = hour % 12 || 12; //the remainder of the division by 12. Or 12 if it's 0\n const isPm = hour > 11;\n const 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, (match, $1) => {\n return $1 || matches[match];\n });\n }\n i18n.dateTimeToStr = dateTimeToStr;\n function dateTimeToStrEx(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 dateTimeToStr(dateTime, format);\n }\n i18n.dateTimeToStrEx = dateTimeToStrEx;\n function buildShortDateTimeFormat(dataType) {\n const localeSettings = getLocaleSettings();\n let 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 const localeSettings = getLocaleSettings();\n let 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 /**\n * Converts a numeric value to the string taking into the account the decimal separator\n * @param num - the number to convert\n * @param format - the format of the number representation (D - decimal, F - float, C - currency)\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(num, format, decimalSeparator) {\n if (format && format.length > 0) {\n const type = format.charAt(0).toUpperCase();\n if (type === 'S') {\n return formatWithSequence(num, format.slice(1));\n }\n else if (['D', 'F', 'C'].indexOf(type) >= 0) {\n const locale = getCurrentLocale();\n return num.toLocaleString(locale, getNumberFormatOptions(format));\n }\n else {\n return convertWithMask(Math.trunc(num), format);\n }\n }\n const localeSettings = getLocaleSettings();\n decimalSeparator = decimalSeparator || localeSettings.decimalSeparator;\n return num.toString().replace('.', decimalSeparator);\n }\n i18n.numberToStr = numberToStr;\n function booleanToStr(bool, format) {\n if (format && format.length > 0) {\n const type = format.charAt(0).toUpperCase();\n if (type === 'S') {\n const values = format.slice(1).split('|');\n if (values.length > 1) {\n const value = values[(bool) ? 1 : 0];\n return i18n.getText(value) || value;\n }\n }\n }\n return `${bool}`;\n }\n i18n.booleanToStr = booleanToStr;\n const cachedSequenceFormats = {};\n function formatWithSequence(number, format) {\n if (!cachedSequenceFormats[format]) {\n // parse and save in cache format values \n const values = format.split('|')\n .filter(v => v.length > 0)\n .map(v => v.split('='));\n cachedSequenceFormats[format] = {};\n if (values.length > 0) {\n if (values[0].length > 1) {\n for (const value of values) {\n cachedSequenceFormats[format][Number.parseInt(value[1])] = value[0];\n }\n }\n else {\n values.forEach((value, index) => {\n cachedSequenceFormats[format][index] = value[0];\n });\n }\n }\n }\n const values = cachedSequenceFormats[format];\n if (values[number] !== undefined) {\n const value = values[number];\n return i18n.getText(value) || value;\n }\n return number.toString();\n }\n function convertWithMask(number, mask) {\n let value = number.toString();\n let result = '';\n let index = value.length - 1;\n for (let i = mask.length - 1; i >= 0; i--) {\n const 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 const localeSettings = getLocaleSettings();\n const type = format[0].toUpperCase();\n const 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\n/**\n * Represents one entity.\n */\nclass MetaEntity {\n /** The default constructor. */\n constructor(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 loadFromData(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 (let i = 0; i < dto.ents.length; i++) {\n let 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 (let i = 0; i < dto.attrs.length; i++) {\n let newAttr = model.createEntityAttr(this);\n newAttr.loadFromData(model, dto.attrs[i]);\n this.attributes.push(newAttr);\n }\n }\n }\n }\n scan(processAttribute, processEntity) {\n let opts = { stop: false };\n let internalProcessEntity = (entity) => {\n if (processEntity)\n processEntity(entity, opts);\n if (entity.attributes) {\n let attrCount = entity.attributes.length;\n for (let i = 0; (i < attrCount) && !opts.stop; i++) {\n let 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 let subEntityCount = entity.subEntities.length;\n for (let i = 0; (i < subEntityCount) && !opts.stop; i++) {\n internalProcessEntity(entity.subEntities[i]);\n }\n }\n };\n internalProcessEntity(this);\n }\n getFirstPrimaryAttr() {\n return this.getPrimaryAttrs()[0];\n }\n getPrimaryAttrs() {\n return this.attributes.filter(attr => attr.isPrimaryKey);\n }\n}\nclass MetaEntityAttr {\n /** The default constructor. */\n constructor(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 loadFromData(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 const 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}\n\n/**\n * Represents a value editor.\n */\nclass ValueEditor {\n /** The default constructor. */\n constructor() {\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 loadFromData(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 getValueText(value) {\n let result = \"\";\n if (!this.values)\n return result;\n if (Array.isArray(value)) {\n for (let item of this.values) {\n if (value.indexOf(item.id) >= 0) {\n result += item.text + ',';\n }\n }\n }\n else {\n for (let item of this.values) {\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}\n\n/**\n * Represents a data model\n */\nclass MetaData {\n /** The default constructor. */\n constructor() {\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 getMainEntity() {\n return this.mainEntity;\n }\n createEntity(parent) {\n return new MetaEntity(parent);\n }\n createEntityAttr(parent) {\n return new MetaEntityAttr(parent);\n }\n createValueEditor() {\n return new ValueEditor();\n }\n /**\n * Loads data model from JSON.\n * @param stringJson The JSON string.\n */\n loadFromJSON(stringJson) {\n let 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 loadFromData(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 (let i = 0; i < data.editors.length; i++) {\n let 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 (const dtypeStr in data.displayFormats) {\n const dtype = DataType[dtypeStr];\n const 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 getDisplayFormats() {\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 getDisplayFormatsForType(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 getDefaultFormat(type) {\n if (this.displayFormats.has(type)) {\n return this.displayFormats.get(type).filter(f => 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 setData(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 isEmpty() {\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 getId() {\n return this.id;\n }\n /**\n * Gets name of the data model.\n * @returns The name.\n */\n getName() {\n return this.name;\n }\n /**\n * Gets root entity of the data model.\n * @returns The root entity.\n */\n getRootEntity() {\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 getEditorById(editorId) {\n for (let editor of this.editors) {\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 getAttributeById(attrId) {\n let 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 checkAttrProperty(attrId, propName) {\n let 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 getEntityAttrById(entity, attrId) {\n let idx;\n if (entity.attributes) {\n let 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 let res;\n if (entity.subEntities) {\n let 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 listByEntityWithFilter(entity, filterFunc) {\n let result = new Array();\n let caption;\n let ent = null;\n if (entity.subEntities) {\n let subEntityCount = entity.subEntities.length;\n for (let 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 let 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 let attr = null;\n if (entity.attributes) {\n let attrCount = entity.attributes.length;\n for (let 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 let 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 listByEntity(entity, opts, filterFunc) {\n opts = opts || {};\n let resultEntities = [];\n let resultAttributes = [];\n let caption;\n let ent = null;\n if (entity.subEntities) {\n let subEntityCount = entity.subEntities.length;\n for (let 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 let newEnt = utils.assign(this.createEntity(), {\n id: ent.name,\n text: caption,\n items: [],\n isEntity: true,\n description: ent.description\n });\n let 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 let attr = null;\n if (entity.attributes) {\n let attrCount = entity.attributes.length;\n for (let 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 let sortCheck = (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 let 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 clear() {\n this.rootEntity = this.createEntity();\n this.editors = [];\n this.version = '';\n }\n /**\n * Add default value editors.\n */\n addDefaultValueEditors() {\n let 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 addOrUpdateValueEditor(id, tag, resType) {\n let 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 getEntitiesTree(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 getEntitiesTreeWithFilter(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 getFullEntityPathByAttr(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 getEntityPathByAttr(entity, attrId, sep, root) {\n if (!entity)\n return '';\n sep = sep || ' ';\n let entityCaption = '';\n if (entity.caption && !root) {\n let entityText = i18n.getText('Entities', entity.caption);\n entityCaption = entityText ? entityText : entity.caption;\n }\n if (entity.attributes) {\n let attrCount = entity.attributes.length;\n for (let i = 0; i < attrCount; i++) {\n if (entity.attributes[i].id == attrId) {\n return entityCaption;\n }\n }\n }\n if (entity.subEntities) {\n let subEntityCount = entity.subEntities.length;\n for (let i = 0; i < subEntityCount; i++) {\n let ent = entity.subEntities[i];\n let 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 getAttributeText(attr, format) {\n let attrText = i18n.getText('Attributes', attr.id);\n if (!attrText) {\n attrText = attr.caption;\n }\n if (!format) {\n return attrText;\n }\n let result = '';\n let 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 runThroughEntities(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 getFirstAttributeByFilter(filterFunc) {\n let 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}\n\n/**\n * Defines aggregations settings for the current context.\n * Group, aggregate columns, grand totals, etc.\n */\nclass AggregationSettings {\n constructor(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 get caseSensitiveGroups() {\n return this._caseSensitiveGroups;\n }\n set caseSensitiveGroups(value) {\n this._caseSensitiveGroups = value;\n this.updateCompareProc();\n }\n updateCompareProc() {\n this.compareValues = this._caseSensitiveGroups\n ? this.strictCompare\n : this.caseInsensitiveCompare;\n }\n addGroup(settings) {\n const 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(Object.assign({ columns: cols }, settings));\n return this;\n }\n addAggregateColumn(colIndexOrId, funcId) {\n const 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, funcId });\n return this;\n }\n addGrandTotals() {\n this.useGrandTotals = true;\n return this;\n }\n addCounts() {\n this.useRecordCount = true;\n return this;\n }\n getGroups() {\n let cols = [];\n const mappedGrops = this.groups.map(grp => {\n cols = cols.concat(grp.columns);\n return Object.assign(Object.assign({}, grp), { columns: Array.from(cols), aggregates: Array.from(this.aggregates) });\n });\n return mappedGrops;\n }\n getInternalGroups() {\n return this.groups;\n }\n lastGroup() {\n const groups = this.getGroups();\n return groups[groups.length - 1];\n }\n getAggregates() {\n return this.aggregates;\n }\n hasAggregates() {\n return this.aggregates.length > 0;\n }\n hasGroups() {\n return this.groups.length > 0;\n }\n hasGrandTotals() {\n return this.useGrandTotals;\n }\n hasRecordCount() {\n return this.useRecordCount;\n }\n isEmpty() {\n return !(this.hasAggregates() || this.hasGroups() ||\n this.hasGrandTotals() || this.hasRecordCount());\n }\n isValid() {\n return (this.hasGroups() && (this.hasAggregates() || this.hasRecordCount()))\n || (this.hasAggregates && this.hasGrandTotals());\n }\n drop() {\n console.warn('\"drop()\" method is obsolete. Use \"clear()\" instead');\n this.clear();\n }\n clear() {\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 hasColumnsInUse(cols) {\n for (const group of this.groups) {\n const interCols = group.columns\n .filter(c => cols.indexOf(c) >= 0);\n if (interCols.length > 0)\n return true;\n }\n for (const aggr of this.aggregates) {\n if (cols.indexOf(aggr.colId) >= 0)\n return true;\n }\n return false;\n }\n needAggrCalculation() {\n return (this.hasAggregates() || this.hasRecordCount())\n && (this.hasGrandTotals() || this.hasGroups());\n }\n saveToData() {\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 loadFromData(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 buildGroupKey(group, row) {\n const caseInsensitive = !this.caseSensitiveGroups;\n let result = {};\n if (group) {\n for (const colId of group.columns) {\n let 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 strictCompare(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 caseInsensitiveCompare(value1, value2) {\n if (value1 instanceof Date) {\n return value1.getTime() === value2.getTime();\n }\n else {\n const val1 = (typeof value1 === 'string') ? value1.toLowerCase() : value1;\n const val2 = (typeof value2 === 'string') ? value2.toLowerCase() : value2;\n return val1 === val2;\n }\n }\n}\n\nvar 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 = {}));\nclass DataColumn {\n constructor(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}\nclass DataColumnList {\n constructor() {\n this.items = [];\n this.mapper = {};\n this._dateColumnIdx = [];\n }\n get count() {\n return this.items.length;\n }\n add(colOrDesc) {\n let col;\n if (colOrDesc instanceof DataColumn) {\n col = colOrDesc;\n }\n else {\n col = new DataColumn(colOrDesc);\n }\n const 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 updateDateColumnIdx() {\n this._dateColumnIdx = this.getItems()\n .filter(col => [DataType.Date, DataType.DateTime, DataType.Time].indexOf(col.type) >= 0)\n .map((col, index) => index);\n }\n put(index, col) {\n if (index >= 0 && index < this.count) {\n this.items[index] = col;\n this.updateDateColumnIdx();\n }\n }\n move(col, newIndex) {\n let oldIndex = this.items.indexOf(col);\n if (oldIndex >= 0 && oldIndex != newIndex) {\n utils.moveArrayItem(this.items, oldIndex, newIndex);\n this.updateDateColumnIdx();\n }\n }\n get(index) {\n if (index >= 0 && index < this.count) {\n return this.items[index];\n }\n else {\n return null;\n }\n }\n getIndex(id) {\n return this.mapper[id];\n }\n getItems() {\n return this.items;\n }\n getDateColumnIndexes() {\n return this._dateColumnIdx;\n }\n removeAt(index) {\n const col = this.get(index);\n this.items.splice(index, 1);\n const removeDate = this._dateColumnIdx.indexOf(index);\n if (removeDate >= 0) {\n this._dateColumnIdx.splice(removeDate, 1);\n }\n delete this.mapper[col.id];\n }\n clear() {\n this.items = [];\n this._dateColumnIdx = [];\n this.mapper = {};\n }\n}\n\nclass DataRow {\n constructor(columns, values) {\n this.columns = columns;\n this.values = values;\n }\n toArray() {\n return Array.from(this.values);\n }\n size() {\n return this.values.length;\n }\n getValue(colIdOrIndex) {\n let index;\n if (typeof colIdOrIndex === \"string\") {\n index = this.columns.getIndex(colIdOrIndex);\n if (index === undefined) {\n throw new RangeError(`No column with id '${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 setValue(colIdOrIndex, value) {\n let index;\n if (typeof colIdOrIndex === \"string\") {\n index = this.columns.getIndex(colIdOrIndex);\n if (index === undefined) {\n throw new RangeError(`No column with id '${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}\n\nclass EasyDataTable {\n constructor(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 (const colDesc of options.columns) {\n this._columns.add(colDesc);\n }\n }\n if (options.rows) {\n for (const rowData of options.rows) {\n const row = this.createRow(rowData);\n this.addRow(row);\n }\n }\n this.needTotal = !this._elasticChunks;\n }\n get columns() {\n return this._columns;\n }\n get chunkSize() {\n return this._chunkSize;\n }\n set chunkSize(value) {\n this._chunkSize = value;\n this.total = 0;\n this.needTotal = !this.elasticChunks;\n this.cachedRows = [];\n }\n get elasticChunks() {\n return this._elasticChunks;\n }\n set elasticChunks(value) {\n this._elasticChunks = value;\n this.total = 0;\n this.needTotal = !this.elasticChunks;\n this.cachedRows = [];\n }\n getRows(params) {\n let 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 let 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 let 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 ${fromIndex} to ${endIndex}`;\n }\n // we need total only for the first request\n const needTotal = this.needTotal;\n if (this.needTotal) {\n this.needTotal = false;\n }\n let offset = this.cachedRows.length;\n let limit = endIndex - offset;\n if (limit < this._chunkSize) {\n limit = this._chunkSize;\n }\n const resultPromise = this.loader.loadChunk({\n offset: offset,\n limit: limit,\n needTotal: needTotal\n })\n .then(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 const count = result.table.getCachedCount();\n if (count < 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 getRow(index) {\n return this.getRows({ offset: index, limit: 1 })\n .then(rows => rows.length > 0 ? rows[0] : null);\n }\n getTotal() {\n return this.total;\n }\n setTotal(total) {\n this.total = total;\n this.needTotal = false;\n }\n getCachedCount() {\n return this.cachedRows.length;\n }\n clear() {\n this.columns.clear();\n this.cachedRows = [];\n this.total = 0;\n this.needTotal = !this._elasticChunks;\n this.fireUpdated();\n }\n createRow(dataOrRow) {\n const dateIdx = this._columns.getDateColumnIndexes();\n const values = new Array(this._columns.count);\n const getValue = dataOrRow instanceof DataRow\n ? (colId) => dataOrRow.getValue(colId)\n : (colId) => dataOrRow[colId];\n if (dataOrRow) {\n this.columns.getItems().forEach((column) => {\n const value = getValue(column.id);\n const 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 mapDate(value, dtype) {\n if (value) {\n let 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 addRow(rowOrValues) {\n let newRow;\n if (Array.isArray(rowOrValues)) {\n let values = rowOrValues;\n const dateIdx = this._columns.getDateColumnIndexes();\n if (dateIdx.length > 0) {\n for (const idx of dateIdx) {\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 const cachedTotal = this.getCachedCount();\n if (cachedTotal > this.total) {\n this.total = cachedTotal;\n }\n return newRow;\n }\n getCachedRows() {\n return this.cachedRows;\n }\n totalIsKnown() {\n if (this.elasticChunks) {\n const count = this.getCachedCount();\n return count === this.total;\n }\n return !this.needTotal;\n }\n fireUpdated() {\n if (this.onUpdate) {\n this.onUpdate(this);\n }\n }\n}\n\n/**\n * EasyData representation of GUID.\n */\nclass EasyGuid {\n /**\n * Generates new GUID.\n * @returns The string representation of GUID.\n */\n static newGuid() {\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}\n\n/**\n * The representation of event emitter.\n */\nclass EventEmitter {\n /**\n * The default constructor.\n * @param source The source.\n */\n constructor(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 subscribe(eventType, callback) {\n let event = this.getEventRecByType(eventType);\n const 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 unsubscribe(eventType, callbackId) {\n let event = this.getEventRecByType(eventType);\n if (event) {\n let 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 fire(eventType, data, postpone = 0, force = false) {\n if (this.silentMode && !force) {\n return;\n }\n let eventRec = this.getEventRecByType(eventType);\n if (eventRec) {\n const eqevent = {\n type: eventType,\n source: this.source,\n data: data\n };\n let emitAllFunc = () => {\n for (let callback of eventRec.eventCallbacks) {\n callback.callback(eqevent);\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 enterSilentMode() {\n this.silentMode++;\n }\n /**\n * Exits from silent mode.\n */\n exitSilentMode() {\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 isSilent() {\n return this.silentMode > 0;\n }\n getEventRecByType(eventType) {\n for (let event of this.events) {\n if (event.type == eventType) {\n return event;\n }\n }\n return null;\n }\n}\n\nfunction repeatString(str, times) {\n return str.repeat(times);\n}\nfunction reverseString(str) {\n return str.split(\"\").reverse().join(\"\");\n}\nfunction 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 */\nfunction combinePath(path1, path2) {\n let 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\nvar liquid;\n(function (liquid) {\n function renderLiquidTemplate(template, vars) {\n let result = template;\n if (vars) {\n for (let v in vars) {\n const 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\ni18n.resetLocales();\n\n//types\nif (typeof Object.values !== 'function') {\n Object.values = function (obj) {\n return Object.keys(obj).map(key => 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\nexport { AggregationSettings, ColumnAlignment, DataColumn, DataColumnList, DataRow, DataType, EasyDataTable, EasyGuid, EditorTag, EntityAttrKind, EventEmitter, HttpClient, HttpMethod, HttpRequest, HttpResponseError, MetaData, MetaEntity, MetaEntityAttr, SpecialDatesResolver, TimeValue, ValueEditor, combinePath, i18n, liquid, registerSpecialDatesResolver, repeatString, reverseString, strEndsWith, utils };\n","\n/*\n * EasyData.JS UI v1.5.2\n * Copyright 2020-2024 Korzh.com\n * Licensed under MIT\n */\n\nimport { utils, ColumnAlignment, DataType, i18n, EventEmitter, DataRow, liquid } from '@easydata/core';\n\nvar browserUtils;\n(function (browserUtils) {\n let _isFirefox = null;\n let mobileModeChangeHandler;\n function isIE() {\n {\n const ua = navigator.userAgent;\n return ua.includes('MSIE') || ua.includes('Trident');\n }\n }\n browserUtils.isIE = isIE;\n function isEdge() {\n const ua = window.navigator.userAgent;\n return !isIE() && ua.includes('Edge/');\n }\n browserUtils.isEdge = isEdge;\n function isFirefox() {\n if (_isFirefox === null) {\n const ua = navigator.userAgent;\n _isFirefox = ua.toLowerCase().includes('firefox');\n }\n return _isFirefox;\n }\n browserUtils.isFirefox = isFirefox;\n let _detectedIsMobileMode = false;\n let _isMobileMode = undefined;\n let detectIsMobileMode = () => {\n const oldValue = isMobileMode();\n _detectedIsMobileMode = window.matchMedia('only screen and (max-width: 840px)').matches\n || window.matchMedia('only screen and (max-height: 420px)').matches;\n const newValue = isMobileMode();\n if (newValue !== oldValue && mobileModeChangeHandler) {\n mobileModeChangeHandler(newValue);\n }\n };\n detectIsMobileMode();\n window.addEventListener('resize', () => 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 const oldValue = isMobileMode();\n _isMobileMode = value;\n const newValue = isMobileMode();\n if (newValue !== oldValue && mobileModeChangeHandler) {\n mobileModeChangeHandler(newValue);\n }\n }\n browserUtils.setIsMobileMode = setIsMobileMode;\n function onMobileModeChanged(callback) {\n mobileModeChangeHandler = callback;\n }\n browserUtils.onMobileModeChanged = onMobileModeChanged;\n})(browserUtils || (browserUtils = {}));\n\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 */\nfunction 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 */\nfunction addElement(parent, tag, options) {\n let element = document.createElement(tag);\n let 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction isVisible(element) {\n return element.style.display != 'none'\n && element.offsetWidth != 0\n && element.offsetHeight != 0;\n}\nfunction 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}\nfunction getViewportSize() {\n const width = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\n const height = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);\n return {\n width: width,\n height: height\n };\n}\nfunction getDocSize() {\n if (browserUtils.isIE())\n return getWinSize();\n const width = Math.max(document.documentElement.clientWidth, document.body.clientWidth || 0);\n const height = Math.max(document.documentElement.clientHeight, document.body.clientHeight || 0);\n return {\n width: width,\n height: height\n };\n}\nfunction getScrollPos() {\n const body = document.body;\n const docElem = document.documentElement;\n return {\n top: window.pageYOffset || docElem.scrollTop || body.scrollTop,\n left: window.pageXOffset || docElem.scrollLeft || body.scrollLeft\n };\n}\nfunction getElementAbsolutePos(element) {\n let res = { x: 0, y: 0 };\n if (element !== null) {\n const position = offset(element);\n res = { x: position.left, y: position.top };\n }\n return res;\n}\nfunction offset(element) {\n const defaultBoundingClientRect = { top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 };\n let box;\n try {\n box = element.getBoundingClientRect();\n }\n catch (_a) {\n box = defaultBoundingClientRect;\n }\n const body = document.body;\n const docElem = document.documentElement;\n const scollPos = getScrollPos();\n const scrollTop = scollPos.top;\n const scrollLeft = scollPos.left;\n const clientTop = docElem.clientTop || body.clientTop || 0;\n const clientLeft = docElem.clientLeft || body.clientLeft || 0;\n const top = box.top + scrollTop - clientTop;\n const left = box.left + scrollLeft - clientLeft;\n return { top: Math.round(top), left: Math.round(left) };\n}\nfunction getWinSize() {\n return {\n width: window.innerWidth,\n height: window.innerHeight\n };\n}\nfunction slideDown(target, duration, callback) {\n target.style.removeProperty('display');\n let display = window.getComputedStyle(target).display;\n if (display === 'none')\n display = 'block';\n target.style.display = display;\n let 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(() => {\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}\nfunction 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(() => {\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}\nconst eqCssPrefix = 'eqjs';\nconst eqCssMobile = 'eqjs-mobile';\nfunction getMobileCssClass() {\n return browserUtils.isMobileMode() ? 'k-mobile' : null;\n}\n\nfunction mask(input, maskPattern) {\n const d = { 9: '[0-9]', a: '[a-z]' };\n const mask = maskPattern.split('');\n const keyDownHandler = (e) => {\n // backspace key or delete key\n if (e.keyCode === 8 || e.keyCode === 46) {\n e.preventDefault();\n let mskd = [];\n let startSelection = input.selectionStart;\n if (startSelection == 0)\n return;\n let selection = startSelection;\n let onlyLodash = true;\n for (let index = mask.length - 1; index >= 0; index--) {\n const el = mask[index];\n if (d[el]) {\n let 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 const event = document.createEvent('Event');\n event.initEvent('input', true, true);\n input.dispatchEvent(event);\n }\n };\n const keyPressHandler = (e) => {\n const char = String.fromCharCode(e.charCode);\n if (char) {\n e.preventDefault();\n let mskd = [];\n let selectionStart = input.selectionStart;\n let selection = selectionStart;\n mask.forEach((el, index) => {\n if (d[el]) {\n const ch = (index != selectionStart)\n ? input.value.charAt(index)\n : char;\n let t = new RegExp(d[el], 'i').test(ch);\n mskd.push(t ? ch : '_');\n if (t && selectionStart === index)\n selection++;\n }\n else {\n mskd.push(el);\n if (selection === index)\n selection++;\n if (selectionStart === index)\n selectionStart++;\n }\n });\n input.value = mskd.join('');\n input.selectionStart = input.selectionEnd = selection;\n const event = document.createEvent('Event');\n event.initEvent('input', true, true);\n input.dispatchEvent(event);\n }\n };\n const inputHandler = (e) => {\n if (e.type === 'focus' && input.value !== '')\n return;\n let mskd = [];\n let startSelection = input.selectionStart;\n mask.forEach((el, index) => {\n if (d[el]) {\n let 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\nclass DomElementBuilder {\n constructor(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 addChild(tag, childBuilder) {\n const builder = domel(tag, this.element);\n if (childBuilder) {\n childBuilder(builder);\n }\n return this;\n }\n addChildElement(element) {\n if (element) {\n this.element.appendChild(element);\n }\n return this;\n }\n attr(attrId, attrValue) {\n this.element.setAttribute(attrId, attrValue);\n return this;\n }\n id(value) {\n return this.attr(\"id\", value);\n }\n focus() {\n this.element.focus();\n return this;\n }\n title(value) {\n return this.attr('title', value);\n }\n data(dataId, 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 show() {\n return this.removeStyle('display');\n }\n hide(toHide = true) {\n return (toHide) ? this.setStyle('display', 'none') : this;\n }\n visible(isVisible = true) {\n return isVisible ? this.setStyle('visibility', 'visible') : this.setStyle('visibility', 'hidden');\n }\n isVisible() {\n return !!(this.element.offsetWidth || this.element.offsetHeight || this.element.getClientRects().length);\n }\n addClass(className, ...classNames) {\n if (className) {\n const fullList = [...className.trim().split(\" \"), ...classNames];\n for (let i = 0; i < fullList.length; i++)\n this.element.classList.add(fullList[i]);\n }\n return this;\n }\n removeClass(className, ...classNames) {\n if (className) {\n const fullList = [...className.trim().split(\" \"), ...classNames];\n for (let i = 0; i < fullList.length; i++)\n this.element.classList.remove(fullList[i]);\n }\n return this;\n }\n toggleClass(className, force = undefined) {\n if (className) {\n this.element.classList.toggle(className, force);\n }\n return this;\n }\n on(eventType, listener) {\n const eventTypes = eventType.split(' ');\n for (let i = 0; i < eventTypes.length; i++) {\n this.element.addEventListener(eventTypes[i], listener);\n }\n return this;\n }\n off(eventType, listener) {\n const eventTypes = eventType.split(' ');\n for (let i = 0; i < eventTypes.length; i++) {\n this.element.removeEventListener(eventTypes[i], listener);\n }\n return this;\n }\n setStyle(styleId, styleValue) {\n this.element.style.setProperty(styleId, styleValue);\n return this;\n }\n removeStyle(styleId) {\n this.element.style.removeProperty(styleId);\n return this;\n }\n text(text) {\n this.element.innerText = text;\n return this;\n }\n html(html) {\n this.element.innerHTML = html;\n return this;\n }\n clear() {\n const oldElem = this.element;\n this.element = document.createElement(this.element.tagName);\n oldElem.replaceWith(this.element);\n }\n addText(text) {\n const textEl = document.createTextNode(text);\n this.element.appendChild(textEl);\n return this;\n }\n addHtml(html) {\n this.element.innerHTML += html;\n return this;\n }\n toDOM() {\n return this.element;\n }\n appendTo(parent) {\n if (parent) {\n parent.appendChild(this.element);\n }\n return this;\n }\n}\nclass DomTextAreaElementBuilder extends DomElementBuilder {\n constructor(element, parent) {\n if (element) {\n super(element, parent);\n }\n else {\n super(\"textarea\", parent);\n }\n }\n name(value) {\n this.element.name = value;\n return this;\n }\n rows(rows) {\n this.element.rows = rows;\n return this;\n }\n cols(cols) {\n this.element.cols = cols;\n return this;\n }\n value(value) {\n this.element.value = value;\n return this;\n }\n}\nclass DomInputElementBuilder extends DomElementBuilder {\n constructor(element, parent) {\n if (element) {\n super(element, parent);\n }\n else {\n super(\"input\", parent);\n }\n }\n name(value) {\n this.element.name = value;\n return this;\n }\n type(value) {\n this.element.type = value;\n return this;\n }\n size(value) {\n this.element.size = value;\n return this;\n }\n value(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 mask(maskPattern) {\n mask(this.element, maskPattern);\n return this;\n }\n}\nclass DomSelectElementBuilder extends DomElementBuilder {\n constructor(element, parent) {\n if (element) {\n super(element, parent);\n }\n else {\n super(\"select\", parent);\n }\n }\n addOption(value) {\n const 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 value(value) {\n this.element.value = value;\n return this;\n }\n}\nfunction 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\nconst touchEventIsDefined = typeof TouchEvent !== 'undefined';\nvar DropEffect;\n(function (DropEffect) {\n DropEffect[\"None\"] = \"none\";\n DropEffect[\"Allow\"] = \"allow\";\n DropEffect[\"Forbid\"] = \"forbid\";\n})(DropEffect || (DropEffect = {}));\nclass EqDragEvent {\n constructor(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}\nclass Position {\n constructor(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}\nclass DragManager {\n constructor() {\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 registerDraggableItem(descriptor) {\n const 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 const detectDragging = (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 const 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 const mouseMoveEventListener = (ev) => {\n this.mouseMoveDragListener(ev);\n };\n const startDragging = (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 const 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 const mouseDownListener = (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 const mouseUpListener = (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 const endDraggind = (ev) => {\n try {\n if (this.containerDescriptorIndex >= 0) {\n const dropContDesc = this.containerDescriptors[this.containerDescriptorIndex];\n const container = {\n element: dropContDesc.element,\n scopes: dropContDesc.scopes,\n data: dropContDesc.data\n };\n const event = 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);\n }\n }\n }\n finally {\n if (dropContDesc.onDragLeave) {\n dropContDesc.onDragLeave(container, event);\n }\n }\n }\n }\n finally {\n try {\n const event = new EqDragEvent(this.draggableItem, this.dragImage, ev);\n event.data.finishedSuccessfully = this.finishedSuccessfully;\n if (descriptor.onDragEnd) {\n descriptor.onDragEnd(event);\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 registerDropContainer(descriptor) {\n const 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 removeDropContainer(descriptorOrSlot) {\n const descs = this.containerDescriptors\n .filter(desc => desc === descriptorOrSlot\n || desc.element == descriptorOrSlot);\n if (descs) {\n for (const desc of descs) {\n utils.removeArrayItem(this.containerDescriptors, desc);\n }\n }\n }\n mouseMoveDragListener(ev) {\n if (ev instanceof MouseEvent) {\n ev.preventDefault();\n }\n ev.stopPropagation();\n this.updateDragItemPosition(ev);\n if (this.containerDescriptorIndex == -1) {\n for (let i = 0; i < this.containerDescriptors.length; i++) {\n const 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 const 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 const descriptor = this.containerDescriptors[this.containerDescriptorIndex];\n const container = {\n element: descriptor.element,\n scopes: descriptor.scopes,\n data: descriptor.data\n };\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\n const event = new EqDragEvent(this.draggableItem, this.dragImage, ev);\n event.dropEffect = this.dropEffect;\n if (descriptor.onDragOver) {\n descriptor.onDragOver(container, event);\n }\n }\n }\n }\n updateCusror(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 updateImageClass(dropEffect) {\n this.dragImage.classList.remove(`${this.classPrefix}-allow`);\n this.dragImage.classList.remove(`${this.classPrefix}-forbid`);\n this.dragImage.classList.remove(`${this.classPrefix}-none`);\n switch (dropEffect) {\n case DropEffect.Allow:\n this.dragImage.classList.add(`${this.classPrefix}-allow`);\n break;\n case DropEffect.None:\n this.dragImage.classList.add(`${this.classPrefix}-none`);\n break;\n case DropEffect.Forbid:\n this.dragImage.classList.add(`${this.classPrefix}-forbid`);\n break;\n default:\n this.dragImage.classList.add(`${this.classPrefix}-none`);\n break;\n }\n }\n setCursorStyle(element, cursor) {\n if (element) {\n element.style.cursor = cursor;\n for (let i = 0; i < element.children.length; i++) {\n this.setCursorStyle(element.children[i], cursor);\n }\n }\n }\n updateDragItemPosition(ev) {\n if (this.dragImage) {\n const 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 dragEnterEvent(ev) {\n const descriptor = this.containerDescriptors[this.containerDescriptorIndex];\n const container = {\n element: descriptor.element,\n scopes: descriptor.scopes,\n data: descriptor.data\n };\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\n const event = new EqDragEvent(this.draggableItem, this.dragImage, ev);\n event.dropEffect = DropEffect.Allow;\n if (descriptor.onDragEnter) {\n descriptor.onDragEnter(container, event);\n }\n this.dropEffect = event.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 dragLeaveEvent(ev) {\n const descriptor = this.containerDescriptors[this.containerDescriptorIndex];\n const container = {\n element: descriptor.element,\n scopes: descriptor.scopes,\n data: descriptor.data\n };\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\n const event = new EqDragEvent(this.draggableItem, this.dragImage, ev);\n event.dropEffect = DropEffect.None;\n if (descriptor.onDragLeave) {\n descriptor.onDragLeave(container, event);\n }\n this.dropEffect = event.dropEffect;\n this.updateCusror(this.dropEffect);\n this.updateImageClass(this.dropEffect);\n }\n }\n detectDragEnterEvent(container, ev) {\n const containerPos = getElementAbsolutePos(container);\n const 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 detectDragLeaveEvent(container, ev) {\n const containerPos = getElementAbsolutePos(container);\n const 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}\n//global variable\nconst eqDragManager = new DragManager();\n\nvar 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\n//import { CellRendererType } from \"./easy_grid_cell_renderer\";\n//import { GridCellRenderer } from './easy_grid_cell_renderer';\nconst DEFAULT_WIDTH_STRING = 250;\nconst ROW_NUM_WIDTH = 60;\nvar 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}\nclass GridColumn {\n constructor(column, grid, 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 const 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._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 }\n }\n get label() {\n return this._label ? this._label : this.isRowNum ? '' : this.dataColumn.label;\n }\n ;\n set label(value) {\n this._label = this.label;\n }\n /** Get column description. */\n get description() {\n return this._description;\n }\n get type() {\n return this.dataColumn ? this.dataColumn.type : null;\n }\n}\nclass GridColumnList {\n constructor(columnList, grid) {\n this.items = [];\n this.grid = grid;\n this.sync(columnList);\n }\n sync(columnList, hasRowNumCol = true) {\n this.clear();\n const rowNumCol = new GridColumn(null, this.grid, true);\n this.add(rowNumCol);\n if (!hasRowNumCol) {\n rowNumCol.isVisible = false;\n }\n if (columnList) {\n for (let column of columnList.getItems()) {\n const 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 get count() {\n return this.items.length;\n }\n add(col) {\n const index = this.items.length;\n this.items.push(col);\n return index;\n }\n put(index, col) {\n if (index >= 0 && index < this.items.length) {\n this.items[index] = col;\n }\n }\n move(col, newIndex) {\n let oldIndex = this.items.indexOf(col);\n if (oldIndex >= 0 && oldIndex != newIndex)\n utils.moveArrayItem(this.items, oldIndex, newIndex);\n }\n get(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 getItems() {\n return this.items;\n }\n removeAt(index) {\n this.get(index);\n this.items.splice(index, 1);\n //delete this.mapper[col.name];\n }\n clear() {\n this.items = [];\n //this.mapper = {};\n }\n}\n\nconst cssPrefix$1 = \"keg\";\nconst DFMT_REGEX = /{0:(.*?)}/g;\nvar 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 = {}));\nconst StringCellRendererDefault = (value, column, cellValueElement, rowElement) => {\n const 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(`${cssPrefix$1}-cell-value-align-left`);\n }\n};\nconst NumberCellRendererDefault = (value, column, cellValueElement, rowElement) => {\n let 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, (_, $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(`${cssPrefix$1}-cell-value-align-right`);\n }\n};\nconst DateTimeCellRendererDefault = (value, column, cellValueElement, rowElement) => {\n const isDate = Object.prototype.toString.call(value) === '[object Date]';\n let 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, (_, $1) => {\n return i18n.dateTimeToStrEx(value, column.type, $1);\n });\n }\n else {\n const locale = i18n.getCurrentLocale();\n const 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 = `${value.toLocaleDateString(locale)} ${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(`${cssPrefix$1}-cell-value-align-right`);\n }\n};\nconst BoolCellRendererDefault = (value, column, cellValueElement, rowElement) => {\n if (column.dataColumn && column.dataColumn.displayFormat\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\n const strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, (_, $1) => {\n return i18n.booleanToStr(value, $1);\n });\n return StringCellRendererDefault(strValue, column, cellValueElement);\n }\n else {\n cellValueElement.classList.add(`${cssPrefix$1}-cell-value-bool`);\n cellValueElement.classList.add(`${cssPrefix$1}-${value ? 'cell-value-true' : 'cell-value-false'}`);\n }\n};\nclass GridCellRendererStore {\n constructor(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 getDefaultRenderer(columnType) {\n const cellType = this.getCellType(columnType);\n return this.defaultRenderers[CellRendererType[cellType]];\n }\n getDefaultRendererByType(rendererType) {\n return this.defaultRenderers[CellRendererType[rendererType]];\n }\n setDefaultRenderer(cellType, renderer) {\n if (renderer) {\n this.defaultRenderers[CellRendererType[cellType]] = renderer;\n }\n }\n getRenderer(name) {\n return this.renderers[name];\n }\n registerRenderer(name, renderer) {\n this.renderers[name] = renderer;\n }\n getCellType(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}\n\nconst DEFAULT_ROW_HEIGHT = 36;\n/** Represents a grid widget with columns rows, paging, custom rendering and more */\nclass EasyGrid {\n /** Creates and initializes all internal properties of the grid object */\n constructor(options) {\n this.cssPrefix = \"keg\";\n this.pagination = { page: 1, pageSize: 30, total: 0 };\n this.paginationOptions = {\n maxButtonCount: 10,\n useBootstrap: false\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(`${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 mergeOptions(options) {\n const aggrOptions = utils.assignDeep({}, this.defaultDataGridOptions.aggregates, options.aggregates);\n const colWidthOptions = utils.assignDeep({}, this.defaultDataGridOptions.columnWidths, options.columnWidths);\n const pagingOptions = utils.assignDeep({}, this.defaultDataGridOptions.paging, options.paging);\n const result = utils.assign({}, this.defaultDataGridOptions, options);\n result.aggregates = aggrOptions;\n result.columnWidths = colWidthOptions;\n result.paging = pagingOptions;\n return result;\n }\n processColumnWidthsOptions() {\n const widthOptions = this.options.columnWidths;\n if (!widthOptions)\n return;\n //string columns\n utils.getStringDataTypes().forEach(dataType => {\n widthOptions[dataType] = Object.assign(Object.assign({}, widthOptions.stringColumns), widthOptions[dataType]);\n });\n //numeric columns\n utils.getNumericDataTypes().forEach(dataType => {\n widthOptions[dataType] = Object.assign(Object.assign({}, widthOptions.numberColumns), widthOptions[dataType]);\n });\n //bool columns\n widthOptions[DataType.Bool] = Object.assign(Object.assign({}, widthOptions.boolColumns), widthOptions[DataType.Bool]);\n //date columns\n utils.getDateDataTypes().forEach(dataType => {\n widthOptions[dataType] = Object.assign(Object.assign({}, widthOptions.dateColumns), widthOptions[dataType]);\n });\n //other columns\n const knownTypes = [\n ...utils.getStringDataTypes(),\n ...utils.getNumericDataTypes(),\n ...utils.getDateDataTypes(),\n DataType.Bool\n ];\n utils.getAllDataTypes().forEach(dataType => {\n if (!(dataType in knownTypes)) {\n widthOptions[dataType] = Object.assign(Object.assign({}, widthOptions.otherColumns), widthOptions[dataType]);\n }\n });\n widthOptions[DataType.Unknown] = widthOptions.otherColumns;\n }\n setSlot(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 const 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 init(options) {\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', ev => this.activeRowIndex = -1);\n utils.assign(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: (_, ev) => {\n this.slot.classList.add(`${eqCssPrefix}-drophover`);\n this.showLandingSlot(ev.pageX, ev.pageY);\n },\n onDragOver: (_, ev) => {\n this.showLandingSlot(ev.pageX, ev.pageY);\n },\n onDragLeave: (_, ev) => {\n ev.dropEffect = DropEffect.Forbid;\n this.slot.classList.remove(`${eqCssPrefix}-drophover`);\n this.hideLandingSlot();\n },\n onDrop: (_, 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 fireEvent(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 setData(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 getData() {\n return this.dataTable;\n }\n /** Gets the list of grid columns */\n getColumns() {\n return this.columns;\n }\n /** This function is called when the grid is destroyed */\n destroy() {\n this.slot.innerHTML = \"\";\n }\n /** Clears the current DOM object and re-renders everything from the scratch */\n refresh() {\n this.clearDOM();\n this.render();\n }\n clearDOM() {\n this.slot.innerHTML = '';\n }\n /** Clears all DOM object in the grid and return it to its initial state */\n clear() {\n this.pagination.page = 1;\n this.clearDOM();\n }\n /** Renders the grid */\n render() {\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(`${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 let gridContainer = document.createElement('div');\n gridContainer.classList.add(`${this.cssPrefix}-container`);\n gridContainer.appendChild(this.rootDiv);\n this.slot.appendChild(gridContainer);\n const needAutoResize = this.options.columnWidths.autoResize !== AutoResizeColumns.Never;\n if (this.rowsOnPagePromise) {\n this.rowsOnPagePromise\n .then(() => this.updateHeight())\n .then(() => {\n this.firstRender = false;\n this.rowsOnPagePromise = null;\n });\n }\n else {\n setTimeout(() => {\n this.updateHeight()\n .then(() => {\n this.firstRender = false;\n if (needAutoResize) {\n this.resizeColumns();\n }\n });\n }, 100);\n }\n }\n updateHeight() {\n return new Promise((resolve) => {\n if (this.options.viewportRowsCount) {\n const firstRow = this.bodyCellContainerDiv.firstElementChild;\n const rowHeight = firstRow ? firstRow.offsetHeight : DEFAULT_ROW_HEIGHT;\n const rowCount = this.options.viewportRowsCount; // || DEFAULT_ROW_COUNT;\n let viewportHeight = rowHeight * rowCount;\n domel(this.bodyViewportDiv)\n .setStyle('height', `${viewportHeight}px`);\n setTimeout(() => {\n const sbHeight = this.bodyViewportDiv.offsetHeight - this.bodyViewportDiv.clientHeight;\n viewportHeight = viewportHeight + sbHeight;\n domel(this.bodyViewportDiv)\n .setStyle('height', `${viewportHeight}px`);\n resolve();\n }, 100);\n return;\n }\n else if (this.containerInitialHeight > 0) ;\n resolve();\n })\n .then(() => {\n if (this.options.fixHeightOnFirstRender && this.firstRender) {\n this.slot.style.height = `${this.slot.offsetHeight}px`;\n }\n });\n }\n getContainerWidth() {\n return this.columns.getItems()\n .filter(col => col.isVisible)\n .map(col => col.width)\n .reduce((sum, current) => { return sum + current; });\n }\n renderHeader() {\n this.headerDiv = domel('div')\n .addClass(`${this.cssPrefix}-header`)\n .toDOM();\n this.headerViewportDiv = domel('div', this.headerDiv)\n .addClass(`${this.cssPrefix}-header-viewport`)\n .toDOM();\n this.headerCellContainerDiv = domel('div', this.headerViewportDiv)\n .addClass(`${this.cssPrefix}-header-cell-container`)\n .toDOM();\n this.headerRowDiv = domel('div', this.headerCellContainerDiv)\n .addClass(`${this.cssPrefix}-header-row`)\n .toDOM();\n this.columns.getItems().forEach((column, index) => {\n if (!column.isVisible) {\n return;\n }\n let hd = this.renderColumnHeader(column, index);\n this.headerRowDiv.appendChild(hd);\n if (column.isRowNum) {\n domel(hd)\n .addChildElement(this.renderHeaderButtons());\n }\n });\n const containerWidth = this.getContainerWidth();\n domel(this.headerCellContainerDiv)\n .setStyle('width', `${containerWidth}px`);\n }\n hasData() {\n return this.dataTable.columns.count > 0;\n }\n renderColumnHeader(column, index) {\n let colBuilder = domel('div')\n .addClass(`${this.cssPrefix}-header-cell`)\n .data('col-idx', `${index}`)\n .setStyle('width', `${column.width}px`);\n if (column.dataColumn) {\n colBuilder\n .data('col-id', `${column.dataColumn.id}`);\n }\n let colDiv = colBuilder.toDOM();\n domel('div', colDiv)\n .addClass(`${this.cssPrefix}-header-cell-resize`);\n if (!column.isRowNum) {\n domel('div', colDiv)\n .addClass(`${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: (dragImage) => {\n dragImage.innerHTML = '';\n const attrLabel = document.createElement('div');\n attrLabel.innerText = column.label;\n dragImage.classList.add(`${this.cssPrefix}-sortable-helper`);\n dragImage.appendChild(attrLabel);\n },\n onDragStart: (ev) => {\n ev.dropEffect = DropEffect.Allow;\n }\n });\n }\n return colDiv;\n }\n renderBody() {\n this.bodyDiv = domel('div')\n .addClass(`${this.cssPrefix}-body`)\n .toDOM();\n this.bodyViewportDiv = domel('div', this.bodyDiv)\n .addClass(`${this.cssPrefix}-body-viewport`)\n .attr('tabIndex', '0')\n .toDOM();\n this.bodyCellContainerDiv = domel('div', this.bodyViewportDiv)\n .addClass(`${this.cssPrefix}-cell-container`)\n .toDOM();\n const showAggrs = this.canShowAggregates();\n if (this.dataTable) {\n this.showProgress();\n this.rowsOnPagePromise = this.getRowsToRender()\n .then((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 let rowsToRender = 0;\n if (rows.length) {\n const groups = 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((row, index) => {\n if (showAggrs)\n this.updateTotalsState(groups, row);\n //we don't actually render the last row\n if (index < rowsToRender) {\n const tr = this.renderRow(row, index);\n this.bodyCellContainerDiv.appendChild(tr);\n }\n });\n const showGrandTotalsOnEachPage = this.options.aggregates && this.options.aggregates.showGrandTotalsOnEachPage;\n if (showAggrs && (this.isLastPage() || showGrandTotalsOnEachPage)) {\n const row = new DataRow(this.dataTable.columns, new Array(this.dataTable.columns.count));\n this.updateTotalsState(groups, row, true);\n }\n }\n const needAutoResize = this.options.columnWidths.autoResize !== AutoResizeColumns.Never;\n if (needAutoResize) {\n this.resizeColumns();\n }\n else {\n const containerWidth = this.getContainerWidth();\n domel(this.bodyCellContainerDiv)\n .setStyle('width', `${containerWidth}px`);\n }\n return rowsToRender;\n })\n .catch(error => { console.error(error); return 0; });\n }\n this.bodyViewportDiv.addEventListener('scroll', ev => {\n domel(this.headerViewportDiv)\n .setStyle('margin-left', `-${this.bodyViewportDiv.scrollLeft}px`);\n });\n this.bodyViewportDiv.addEventListener('keydown', this.onViewportKeydown.bind(this));\n }\n isLastPage() {\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 canShowAggregates() {\n if (!this.options || !this.options.aggregates || !this.options.aggregates.settings)\n return false;\n const aggrSettings = this.options.aggregates.settings;\n const result = (aggrSettings.hasAggregates() || aggrSettings.hasRecordCount())\n && (aggrSettings.hasGroups() || aggrSettings.hasGrandTotals());\n return result;\n }\n updateTotalsState(groups, newRow, isLast = false) {\n const aggrSettings = this.options.aggregates.settings;\n if (this.prevRowTotals && aggrSettings.hasGroups()) {\n let changeLevel = -1;\n for (let level = 1; level <= groups.length; level++) {\n const group = groups[level - 1];\n for (const col of group.columns) {\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 (let level = groups.length; level >= changeLevel; level--) {\n const row = new DataRow(this.dataTable.columns, this.prevRowTotals.toArray());\n const tr = this.renderTotalsRow(level, row);\n this.bodyCellContainerDiv.appendChild(tr);\n }\n }\n }\n if (isLast && aggrSettings.hasGrandTotals() && aggrSettings.hasAggregates()) {\n const tr = this.renderTotalsRow(0, newRow);\n this.bodyCellContainerDiv.appendChild(tr);\n }\n this.prevRowTotals = newRow;\n }\n applyGroupColumnTemplate(template, value, count) {\n let result = template.replace(/{{\\s*GroupValue\\s*}}/g, value ? `${value}` : '-');\n result = result.replace(/{{\\s*GroupCount\\s*}}/g, count ? `${count}` : '-');\n return result;\n }\n renderTotalsRow(level, row) {\n const aggrSettings = this.options.aggregates.settings;\n const group = (level > 0)\n ? aggrSettings.getGroups()[level - 1]\n : { columns: [], aggregates: aggrSettings.getAggregates() };\n const rowBuilder = domel('div')\n .addClass(`${this.cssPrefix}-row`)\n .addClass(`${this.cssPrefix}-row-totals`)\n .addClass(`${this.cssPrefix}-totals-lv${level}`)\n .data('totals-level', `${level}`)\n .attr('tabindex', '-1');\n const rowElement = rowBuilder.toDOM();\n this.columns.getItems().forEach((column, index) => {\n if (!column.isVisible) {\n return;\n }\n let val = '';\n const 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 if (colIndex == this.dataTable.columns.count - 1) {\n val = '. . . . . .';\n }\n rowElement.appendChild(this.renderCell(column, index, val, rowElement));\n });\n const aggrContainer = this.options.aggregates.calculator.getAggrContainer();\n const aggrCols = aggrSettings.getAggregates().map(c => c.colId);\n const key = aggrSettings.buildGroupKey(group, row);\n aggrContainer.getAggregateData(level, key)\n .then((values) => {\n for (const aggrColId of aggrCols) {\n row.setValue(aggrColId, values[aggrColId]);\n }\n rowElement.innerHTML = '';\n this.columns.getItems().forEach((column, index) => {\n if (!column.isVisible) {\n return;\n }\n let val = '';\n const colIndex = !column.isRowNum\n ? this.dataTable.columns.getIndex(column.dataColumn.id)\n : -1;\n if (!column.isRowNum) {\n let isLastGroupColumn = false;\n if (column.dataColumn) {\n const groupColIndex = group.columns.indexOf(column.dataColumn.id);\n const 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 let 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 const cellDiv = this.renderCell(column, index, val, rowElement);\n const innerCell = cellDiv.firstChild;\n val = innerCell.innerHTML;\n val = this.applyGroupColumnTemplate(groupFooterTemplate, val, values[aggrSettings.COUNT_FIELD_NAME]);\n }\n }\n const cellDiv = this.renderCell(column, index, val, rowElement);\n rowElement.appendChild(cellDiv);\n });\n })\n .catch((error) => console.error(error));\n return rowElement;\n }\n onViewportKeydown(ev) {\n if (this.options.showActiveRow) {\n const rowCount = this.bodyCellContainerDiv.querySelectorAll(`.${this.cssPrefix}-row`).length;\n let newValue;\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 ensureRowVisibility(rowOrIndex) {\n const row = typeof rowOrIndex === 'number'\n ? this.getDataRow(rowOrIndex)\n : rowOrIndex;\n if (row) {\n let rowRect = row.getBoundingClientRect();\n const viewportRect = this.bodyViewportDiv.getBoundingClientRect();\n const rowTop = rowRect.top - viewportRect.top;\n const rowBottom = rowRect.bottom - viewportRect.top;\n const viewportHeight = this.bodyViewportDiv.clientHeight;\n const 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 getRowsToRender() {\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(error => {\n console.error(error);\n return [];\n });\n }\n renderFooter() {\n this.footerDiv = domel('div')\n .addClass(`${this.cssPrefix}-footer`)\n .toDOM();\n if (this.rowsOnPagePromise) {\n this.rowsOnPagePromise.then(count => {\n this.footerDiv.innerHTML = '';\n this.footerPaginateDiv = this.renderPageNavigator();\n this.footerDiv.appendChild(this.footerPaginateDiv);\n const pageInfoBlock = this.renderPageInfoBlock(count);\n this.footerDiv.appendChild(pageInfoBlock);\n });\n }\n }\n renderPageInfoBlock(count) {\n const pageInfoDiv = domel('div')\n .addClass(`${this.cssPrefix}-page-info`)\n .toDOM();\n const rowCount = this.dataTable.getTotal();\n if (rowCount > 0) {\n const fistPageRecordNum = count\n ? (this.pagination.page - 1) * this.pagination.pageSize + 1\n : 0;\n const lastPageRecordNum = count\n ? fistPageRecordNum + count - 1\n : 0;\n let totalStr = this.dataTable.getTotal().toString();\n if (this.dataTable.elasticChunks) {\n const count = this.dataTable.getCachedCount();\n const total = this.dataTable.getTotal();\n if (count !== total)\n totalStr = '?';\n }\n pageInfoDiv.innerHTML = i18n.getText('GridPageInfo')\n .replace('{FirstPageRecordNum}', `${fistPageRecordNum.toString()}`)\n .replace('{LastPageRecordNum}', `${lastPageRecordNum.toString()}`)\n .replace('{Total}', `${totalStr}`);\n }\n return pageInfoDiv;\n }\n showProgress() {\n }\n hideProgress() {\n }\n getLocalIndexByGlobal(index) {\n if (this.pagination) {\n return index % this.pagination.pageSize;\n }\n else {\n return index;\n }\n }\n getGlobalIndexByLocal(index) {\n if (this.pagination) {\n return (this.pagination.page - 1) * this.pagination.pageSize + index;\n }\n else {\n return index;\n }\n }\n renderRow(row, index) {\n let indexGlobal = this.getGlobalIndexByLocal(index);\n let rowBuilder = domel('div')\n .addClass(`${this.cssPrefix}-row`)\n .addClass(`${this.cssPrefix}-row-${index % 2 == 1 ? 'odd' : 'even'}`)\n .data('row-idx', `${indexGlobal}`)\n .attr('tabindex', '-1')\n .on('click', (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', (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(`${this.cssPrefix}-row-first`);\n }\n let rowElement = rowBuilder.toDOM();\n if (this.options.showActiveRow && index == this.activeRowIndex) {\n rowBuilder.addClass(`${this.cssPrefix}-row-active`);\n }\n this.columns.getItems().forEach((column, index) => {\n if (!column.isVisible) {\n return;\n }\n const colindex = column.isRowNum ? -1 : this.dataTable.columns.getIndex(column.dataColumn.id);\n let val = column.isRowNum ? indexGlobal + 1 : row.getValue(colindex);\n rowElement.appendChild(this.renderCell(column, index, val, rowElement));\n });\n return rowElement;\n }\n renderCell(column, colIndex, value, rowElement) {\n const builder = domel('div')\n .addClass(`${this.cssPrefix}-cell`)\n .data('col-idx', `${colIndex}`)\n .attr('tabindex', '-1')\n .setStyle('width', `${column.width}px`);\n if (column.align == GridColumnAlign.LEFT) {\n builder.addClass(`${this.cssPrefix}-cell-align-left`);\n }\n else if (column.align == GridColumnAlign.RIGHT) {\n builder.addClass(`${this.cssPrefix}-cell-align-right`);\n }\n else if (column.align == GridColumnAlign.CENTER) {\n builder.addClass(`${this.cssPrefix}-cell-align-center`);\n }\n const cellElement = builder.toDOM();\n const valueCell = cellElement.appendChild(domel('div')\n .addClass(`${this.cssPrefix}-cell-value`)\n .toDOM());\n const cellRenderer = this.getCellRenderer(column);\n if (cellRenderer) {\n cellRenderer(value, column, valueCell, rowElement);\n }\n return cellElement;\n }\n getCellRenderer(column) {\n let cellRenderer;\n if (column.isRowNum) {\n cellRenderer = this.cellRendererStore.getDefaultRendererByType(CellRendererType.NUMBER);\n }\n else {\n cellRenderer = this.cellRendererStore.getDefaultRenderer(column.type);\n }\n if (this.options && this.options.onGetCellRenderer) {\n cellRenderer = this.options.onGetCellRenderer(column, cellRenderer) || cellRenderer;\n }\n return cellRenderer;\n }\n /** Sets current grid pages (if paging is used) */\n setPage(page) {\n this.pagination.page = page;\n this.fireEvent({ type: \"pageChanged\", page: page });\n this.refresh();\n this.bodyViewportDiv.focus();\n }\n renderPageNavigator() {\n let paginateDiv = document.createElement('div');\n paginateDiv.className = `${this.cssPrefix}-pagination-wrapper`;\n const rowCount = this.dataTable.getTotal();\n const totalRows = this.dataTable.getTotal();\n const pageSize = this.pagination.pageSize;\n const totalPages = Math.ceil(totalRows / pageSize);\n const distance = 8, islandSize = 3;\n const prefix = this.paginationOptions.useBootstrap ? '' : `${this.cssPrefix}-`;\n if (!this.options.paging || !this.options.paging.enabled || rowCount <= pageSize) {\n return paginateDiv;\n }\n const buttonClickHandler = (ev) => {\n const element = ev.target;\n if (element.hasAttribute('data-page')) {\n const page = parseInt(element.getAttribute('data-page'));\n this.setPage(page);\n }\n };\n const renderPaginationItem = (pageIndex, content, disabled, extreme, active, title) => {\n const li = document.createElement('li');\n li.className = `${prefix}page-item`;\n if (!extreme) {\n if (active) {\n li.className += ' active';\n }\n const a = document.createElement('a');\n a.setAttribute('href', 'javascript:void(0)');\n a.innerHTML = content || pageIndex.toString();\n a.setAttribute(\"data-page\", `${pageIndex}`);\n a.className = `${prefix}page-link`;\n a.addEventListener(\"click\", buttonClickHandler);\n if (title) {\n a.setAttribute(\"title\", title);\n }\n li.appendChild(a);\n return li;\n }\n let a = document.createElement('span');\n a.setAttribute('aria-hidden', 'true');\n a.className = `${prefix}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\", `${pageIndex}`);\n }\n else {\n let newA = document.createElement('a');\n newA.setAttribute('href', 'javascript:void(0)');\n newA.setAttribute('data-page', `${pageIndex}`);\n a = newA;\n }\n a.className = `${prefix}page-link`;\n a.addEventListener(\"click\", buttonClickHandler);\n }\n a.innerHTML = content;\n if (title) {\n a.setAttribute(\"title\", title);\n }\n li.appendChild(a);\n return li;\n };\n const pageIndex = this.pagination.page || 1;\n let ul = document.createElement('ul');\n ul.className = `${prefix}pagination`;\n ul.style.userSelect = 'none';\n paginateDiv.appendChild(ul);\n if (this.dataTable.elasticChunks) {\n let cell = renderPaginationItem(pageIndex - 1, '«', pageIndex == 1, true, false);\n ul.appendChild(cell);\n cell = renderPaginationItem(pageIndex + 1, '»', this.isLastPage(), true, false);\n ul.appendChild(cell);\n }\n else {\n if (totalPages > 10) {\n ul.appendChild(renderPaginationItem(pageIndex - 10, '«', pageIndex <= 10, true, false, \"Jump left on 10 pages\"));\n }\n ul.appendChild(renderPaginationItem(pageIndex - 1, '‹', pageIndex == 1, true, false, \"Prev Page\"));\n ul.appendChild(renderPaginationItem(1, '1', pageIndex == 1, false, pageIndex === 1));\n if (totalPages <= 10) {\n for (let i = 2; i < totalPages; i++) {\n ul.appendChild(renderPaginationItem(i, `${i}`, pageIndex === i, false, pageIndex === i));\n }\n }\n else {\n if (pageIndex < distance) {\n for (let i = 2; i <= distance; i++) {\n ul.appendChild(renderPaginationItem(i, `${i}`, false, false, pageIndex === i));\n }\n if (totalPages > distance) {\n ul.appendChild(renderPaginationItem(-1, `...`, true, true, false));\n }\n }\n else if (pageIndex <= totalPages && pageIndex > totalPages - distance + 1) {\n if (totalPages > distance) {\n ul.appendChild(renderPaginationItem(-1, `...`, true, true, false));\n }\n for (let i = totalPages - distance + 1; i < totalPages; i++) {\n ul.appendChild(renderPaginationItem(i, `${i}`, pageIndex === i, false, pageIndex === i));\n }\n }\n else {\n ul.appendChild(renderPaginationItem(-1, `...`, true, true, false));\n // Island Left Side\n for (let i = islandSize; i > 0; i--) {\n ul.appendChild(renderPaginationItem(pageIndex - i, `${pageIndex - i}`, false, false, false));\n }\n // Center of Island\n ul.appendChild(renderPaginationItem(pageIndex, `${pageIndex}`, false, false, true));\n // Island Right Size\n for (let i = 1; i <= islandSize; i++) {\n ul.appendChild(renderPaginationItem(pageIndex + i, `${pageIndex + i}`, false, false, false));\n }\n ul.appendChild(renderPaginationItem(-1, `...`, true, true, false));\n }\n }\n if (totalPages > 1 || pageIndex < totalPages) {\n ul.appendChild(renderPaginationItem(totalPages, `${totalPages}`, pageIndex === totalPages, false, pageIndex === totalPages));\n }\n ul.appendChild(renderPaginationItem(pageIndex + 1, '›', pageIndex == totalPages, true, false, \"Next Page\"));\n if (totalPages > 10) {\n ul.appendChild(renderPaginationItem(pageIndex + 10, '»', pageIndex >= totalPages - 10, true, false, \"Jump right on 10 pages\"));\n }\n }\n if (this.options.paging.allowPageSizeChange) {\n const selectChangeHandler = (ev) => {\n const newValue = parseInt(ev.target.value);\n this.pagination.pageSize = newValue;\n this.pagination.page = 1;\n this.refresh();\n };\n const pageSizes = document.createElement('div');\n pageSizes.className = `${this.cssPrefix}-page-sizes`;\n const selectSize = document.createElement('div');\n selectSize.className = `kfrm-select ${this.cssPrefix}-page-sizes-select`;\n pageSizes.appendChild(selectSize);\n const sel = document.createElement('select');\n const selOptions = this.options.paging.pageSizeItems || [];\n const selSet = new Set(selOptions);\n selSet.add(this.options.paging.pageSize || 20);\n Array.from(selSet).forEach(el => {\n const option = document.createElement(\"option\");\n option.value = el.toString();\n option.text = el.toString();\n sel.appendChild(option);\n });\n sel.value = (this.pagination.pageSize || 20).toString();\n selectSize.appendChild(sel);\n sel.addEventListener('change', selectChangeHandler);\n const labelDiv = document.createElement('div');\n labelDiv.className = `${this.cssPrefix}-page-sizes-label`;\n pageSizes.appendChild(labelDiv);\n const label = document.createElement('span');\n label.innerText = i18n.getText('GridItemsPerPage');\n labelDiv.appendChild(label);\n paginateDiv.appendChild(pageSizes);\n }\n return paginateDiv;\n }\n addEventListener(eventType, handler) {\n return this.eventEmitter.subscribe(eventType, event => handler(event.data));\n }\n removeEventListener(eventType, handlerId) {\n this.eventEmitter.unsubscribe(eventType, handlerId);\n }\n renderHeaderButtons() {\n if (this.options.showPlusButton) {\n return domel('div')\n .addClass(`${this.cssPrefix}-header-btn-plus`)\n .title(this.options.plusButtonTitle || 'Add')\n .addChild('a', builder => builder\n .attr('href', 'javascript:void(0)')\n .on('click', (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 showLandingSlot(pageX, pageY) {\n const colElems = this.headerRowDiv.querySelectorAll(`[class*=${this.cssPrefix}-table-col]`);\n const cols = [];\n for (let i = 1; i < colElems.length; i++) {\n const 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 const landingPos = getElementAbsolutePos(this.landingSlot);\n if (pageX >= landingPos.x && pageX <= landingPos.x + this.landingSlot.offsetWidth) {\n return;\n }\n let newLandingIndex = this.landingIndex;\n for (let col of cols) {\n const colPos = getElementAbsolutePos(col);\n const 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 hideLandingSlot() {\n this.landingIndex = -1;\n setTimeout(() => {\n if (this.landingSlot.parentElement) {\n this.landingSlot.parentElement.removeChild(this.landingSlot);\n }\n }, 10);\n }\n get activeRowIndex() {\n return this._activeRowIndex;\n }\n set activeRowIndex(value) {\n if (value !== this._activeRowIndex) {\n const oldValue = this._activeRowIndex;\n this._activeRowIndex = value;\n this.updateActiveRow();\n this.fireEvent({\n type: 'activeRowChanged',\n oldValue,\n newValue: this.activeRowIndex,\n rowIndex: this.getGlobalIndexByLocal(this.activeRowIndex)\n });\n }\n }\n updateActiveRow() {\n if (this.options.showActiveRow) {\n const rows = this.bodyCellContainerDiv.querySelectorAll(`[class*=${this.cssPrefix}-row-active]`);\n rows.forEach(el => { el.classList.remove(`${this.cssPrefix}-row-active`); });\n const activeRow = this.getActiveRow();\n if (activeRow) {\n activeRow.classList.add(`${this.cssPrefix}-row-active`);\n this.ensureRowVisibility(this.activeRowIndex);\n }\n }\n }\n getActiveRow() {\n return this.getDataRow(this.activeRowIndex);\n }\n getDataRow(index) {\n const rows = Array.from(this.bodyCellContainerDiv.querySelectorAll(`.${this.cssPrefix}-row:not(.${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 focus() {\n this.bodyViewportDiv.focus();\n }\n /** Resizes columns according to the data they represent */\n resizeColumns() {\n if (this.options.columnWidths.autoResize === AutoResizeColumns.Never)\n return;\n const 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 let sumWidth = 0;\n const columns = this.columns.getItems();\n const headerCells = this.headerCellContainerDiv.querySelectorAll(`.${this.cssPrefix}-header-cell`);\n let headerIdx = 0;\n for (let idx = 0; idx < this.columns.count; idx++) {\n const column = columns[idx];\n if (!column.isVisible)\n continue;\n const calculatedWidth = this.options.columnWidths.autoResize !== AutoResizeColumns.Always && column.dataColumn\n ? column.dataColumn.calculatedWidth\n : 0;\n const cellValues = this.bodyCellContainerDiv.querySelectorAll(`.${this.cssPrefix}-cell[data-col-idx=\"${idx}\"] > .${this.cssPrefix}-cell-value`);\n let maxWidth = 0;\n if (calculatedWidth > 0) {\n sumWidth += calculatedWidth;\n column.width = calculatedWidth;\n cellValues.forEach(value => {\n value.parentElement.style.width = `${calculatedWidth}px`;\n });\n headerCells[headerIdx].style.width = `${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(value => {\n value.parentElement.style.width = null;\n const width = value.parentElement.offsetWidth;\n if (width > maxWidth) {\n maxWidth = width;\n }\n });\n maxWidth += 3;\n const maxOption = column.isRowNum\n ? this.options.columnWidths.rowNumColumn.max || 500\n : this.options.columnWidths[column.dataColumn.type].max || 2000;\n const minOption = column.isRowNum\n ? this.options.columnWidths.rowNumColumn.min || 0\n : this.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(value => {\n value.parentElement.style.width = `${maxWidth}px`;\n });\n headerCells[headerIdx].style.width = `${maxWidth}px`;\n if (column.dataColumn) {\n column.dataColumn.calculatedWidth = maxWidth;\n }\n }\n else {\n sumWidth += maxWidth;\n }\n }\n headerIdx++;\n }\n if (sumWidth > 0) {\n this.bodyCellContainerDiv.style.width = `${sumWidth}px`;\n this.headerCellContainerDiv.style.width = `${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}\n\nclass Calendar {\n get cssPrefix() {\n return 'kdtp-cal';\n }\n constructor(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 setDate(date) {\n this.currentDate = new Date(date);\n }\n getDate() {\n return new Date(this.currentDate);\n }\n dateChanged(apply) {\n if (this.options.onDateChanged) {\n this.options.onDateChanged(this.currentDate, apply);\n }\n }\n}\n\nclass DateTimePicker {\n get cssPrefix() {\n return 'kdtp';\n }\n constructor(options) {\n this.calendar = null;\n this.timePicker = null;\n this.options = options;\n this.render();\n }\n setDateTime(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 getDateTime() {\n return new Date(this.currentDateTime);\n }\n render() {\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: (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: (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 createCalendar(options) {\n return null;\n }\n createTimePicker(options) {\n return null;\n }\n show(anchor) {\n if (this.options.beforeShow) {\n this.options.beforeShow();\n }\n const 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 apply(date) {\n if (this.options.onApply) {\n this.options.onApply(date);\n }\n this.destroy();\n }\n cancel() {\n if (this.options.onCancel) {\n this.options.onCancel();\n }\n this.destroy();\n }\n destroy() {\n if (this.slot && this.slot.parentElement) {\n this.slot.parentElement.removeChild(this.slot);\n }\n }\n dateTimeChanged() {\n if (this.options.onDateTimeChanged) {\n this.options.onDateTimeChanged(this.currentDateTime);\n }\n }\n}\n\nclass DefaultCalendar extends Calendar {\n constructor(slot, options) {\n super(slot, options);\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 (let i = 0; i < this.daysOfWeek.length; i++) {\n this.daysOfWeek[i] = i18n.getShortWeekDayName(i + 1);\n }\n for (let i = 0; i < this.months.length; i++) {\n this.months[i] = i18n.getLongMonthName(i + 1);\n }\n }\n setDate(date) {\n super.setDate(date);\n this.selectedMonth = this.currentDate.getMonth();\n this.selectedYear = this.currentDate.getFullYear();\n this.rerenderMonth();\n }\n render() {\n const header = domel('div', this.slot)\n .addClass(`${this.cssPrefix}-header`);\n if (this.options.showDateTimeInput) {\n header\n .addChildElement(this.renderManualDateInput());\n }\n else {\n header\n .addChild('span', builder => this.headerTextElem = builder.toDOM());\n }\n domel(this.slot)\n .addChildElement(this.renderCalendarButtons());\n this.calendarBody = domel('div', this.slot)\n .addClass(`${this.cssPrefix}-body`)\n .toDOM();\n }\n getInputDateFormat() {\n const settings = i18n.getLocaleSettings();\n return (this.options.timePickerIsUsed)\n ? `${settings.editDateFormat} ${settings.editTimeFormat}`\n : settings.editDateFormat;\n }\n renderManualDateInput() {\n const format = this.getInputDateFormat();\n const builder = domel('input')\n .attr('placeholder', format)\n .addClass(`${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', ev => {\n builder.removeClass('error');\n try {\n this.isManualInputChanging = true;\n const newDate = utils.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', (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', () => {\n setTimeout(() => {\n this.manualInputElem.selectionStart = 0;\n this.manualInputElem.selectionEnd = 0;\n }, 50);\n });\n this.manualInputElem = builder.toDOM();\n return this.manualInputElem;\n }\n updateDisplayedDateValue() {\n if (this.manualInputElem) {\n if (!this.isManualInputChanging) {\n const format = this.getInputDateFormat();\n this.manualInputElem.value = i18n.dateTimeToStr(this.currentDate, format);\n this.manualInputElem.focus();\n }\n }\n else if (this.headerTextElem) {\n const 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 renderCalendarButtons() {\n const builder = domel('nav')\n .addClass(`${this.cssPrefix}-nav`)\n .addChild('div', builder => builder\n .addClass(`${this.cssPrefix}-nav-prev`)\n .on('click', () => {\n this.prev();\n })\n .addChild('span', builder => builder.html('‹')))\n .addChild('div', builder => builder\n .addClass(`${this.cssPrefix}-nav-selectors`)\n .addChild('div', builder => builder\n .addClass(`${this.cssPrefix}-nav-month`)\n .addChild('select', builder => {\n builder\n .on('change', () => {\n this.jump(this.selectedYear, parseInt(this.selectMonthElem.value));\n });\n for (let i = 0; i < this.months.length; i++) {\n builder.addChild('option', builder => builder\n .attr('value', i.toString())\n .text(this.months[i]));\n }\n this.selectMonthElem = builder.toDOM();\n }))\n .addChild('div', builder => builder\n .addClass(`${this.cssPrefix}-nav-year`)\n .addChild('select', builder => this.selectYearElem = builder\n .on('change', () => {\n this.jump(parseInt(this.selectYearElem.value), this.selectedMonth);\n })\n .toDOM())))\n .addChild('div', builder => builder\n .addClass(`${this.cssPrefix}-nav-next`)\n .on('click', () => {\n this.next();\n })\n .addChild('span', builder => builder.html('›')));\n return builder.toDOM();\n }\n prev() {\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 next() {\n this.selectedYear = (this.selectedMonth === 11) ? this.selectedYear + 1 : this.selectedYear;\n this.selectedMonth = (this.selectedMonth + 1) % 12;\n this.rerenderMonth();\n }\n rerenderSelectYear() {\n const match = /c-(\\d*):c\\+(\\d*)/g.exec(this.options.yearRange);\n let minusYear = 0;\n let plusYear = 1;\n if (match !== null) {\n minusYear = parseInt(match[1]);\n plusYear = parseInt(match[2]);\n }\n this.selectYearElem.innerHTML = '';\n for (let i = 0; i <= minusYear + plusYear; i++) {\n let op = document.createElement(\"option\");\n let year = this.selectedYear - minusYear + i;\n op.value = year.toString();\n op.innerText = year.toString();\n this.selectYearElem.appendChild(op);\n }\n }\n jump(year, month) {\n this.selectedYear = year;\n this.selectedMonth = month;\n this.rerenderMonth();\n }\n rerenderMonth() {\n //header text\n this.updateDisplayedDateValue();\n this.rerenderSelectYear();\n let firstDay = (new Date(this.selectedYear, this.selectedMonth)).getDay();\n let 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((day, idx) => {\n domel('div', this.calendarBody)\n .addClass(`${this.cssPrefix}-weekday`)\n .addClass(idx == 0 || idx == 6 ? `${this.cssPrefix}-weekend` : '')\n .text(day);\n });\n // Add empty cells before first day\n for (let i = 0; i < firstDay; i++) {\n domel('div', this.calendarBody)\n .addClass(`${this.cssPrefix}-day-empty`);\n }\n // Add all month days\n const today = new Date();\n for (let day = 1; day <= daysInMonth; day++) {\n const builder = domel('div', this.calendarBody)\n .addClass(`${this.cssPrefix}-day`)\n .attr('data-date', day.toString())\n .text(day.toString())\n .on('click', (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(`${this.cssPrefix}-day-current`);\n }\n if (day === this.currentDate.getDate() && this.selectedYear === this.currentDate.getFullYear() && this.selectedMonth === this.currentDate.getMonth()) {\n builder.addClass(`${this.cssPrefix}-day-selected`);\n }\n const dayOfWeek = (firstDay + day - 1) % 7;\n if (dayOfWeek == 0 || dayOfWeek == 6) {\n builder.addClass(`${this.cssPrefix}-weekend`);\n }\n if (typeof this.options.onDrawDay === \"function\") {\n this.options.onDrawDay.apply(builder.toDOM(), [\n builder.toDOM(),\n new Date(this.selectedYear, this.selectedMonth, day)\n ]);\n }\n }\n // Add empty cells after last day\n const cellsDrawnInLastRow = (firstDay + daysInMonth) % 7;\n const cellsToDraw = cellsDrawnInLastRow == 0 ? 0 : 7 - cellsDrawnInLastRow;\n for (let i = 0; i < cellsToDraw; i++) {\n domel('div', this.calendarBody)\n .addClass(`${this.cssPrefix}-day-empty`);\n }\n }\n dateChanged(apply) {\n super.dateChanged(apply);\n this.rerenderMonth();\n }\n}\n\nclass TimePicker {\n get cssPrefix() {\n return 'kdtp-tp';\n }\n constructor(slot, options) {\n this.slot = slot;\n this.options = options || {};\n }\n setTime(time) {\n this.currentTime = new Date(time);\n }\n getTime() {\n return new Date(this.currentTime);\n }\n timeChanged() {\n if (this.options.onTimeChanged) {\n this.options.onTimeChanged(this.currentTime);\n }\n }\n}\n\nclass DefaultTimePicker extends TimePicker {\n setTime(time) {\n super.setTime(time);\n this.updateDisplayedTime();\n this.hoursInput.valueAsNumber = time.getHours();\n this.minutesInput.valueAsNumber = time.getMinutes();\n }\n render() {\n domel('div', this.slot)\n .addClass(`${this.cssPrefix}-time`)\n .addChild('span', builder => this.timeText = builder.toDOM())\n .toDOM();\n const slidersBuilder = domel('div', this.slot)\n .addClass(`${this.cssPrefix}-sliders`);\n slidersBuilder\n .addChild('div', builder => builder\n .addClass(`${this.cssPrefix}-time-row`)\n .title('Hours')\n .addChild('input', builder => this.hoursInput = builder\n .addClass(`${this.cssPrefix}-input-hours`)\n .type('range')\n .attr('min', '0')\n .attr('max', '23')\n .attr('step', '1')\n .on('input', (e) => {\n this.currentTime.setHours(this.hoursInput.valueAsNumber);\n this.updateDisplayedTime();\n this.timeChanged();\n })\n .toDOM()));\n slidersBuilder\n .addChild('div', builder => builder\n .addClass(`${this.cssPrefix}-time-row`)\n .title('Minutes')\n .addChild('input', builder => this.minutesInput = builder\n .addClass(`${this.cssPrefix}-input-minutes`)\n .type('range')\n .attr('min', '0')\n .attr('max', '59')\n .attr('step', '1')\n .on('input', (e) => {\n this.currentTime.setMinutes(this.minutesInput.valueAsNumber);\n this.updateDisplayedTime();\n this.timeChanged();\n })\n .toDOM()));\n return this.slot;\n }\n updateDisplayedTime() {\n const locale = i18n.getCurrentLocale();\n const timeToDraw = this.currentTime.toLocaleString(locale == 'en' ? undefined : locale, {\n hour: \"numeric\",\n minute: \"numeric\"\n });\n this.timeText.innerText = timeToDraw;\n }\n}\n\nclass DefaultDateTimePicker extends DateTimePicker {\n render() {\n const sb = domel('div', document.body)\n .addClass(`${this.cssPrefix}`)\n .attr('tabIndex', '0')\n .setStyle('position', 'absolute')\n .setStyle('top', '-1000px')\n .setStyle('left', '-1000px')\n .on('keydown', (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', `${this.options.zIndex}`);\n }\n this.slot = sb.toDOM();\n super.render();\n this.renderButtons();\n this.globalMouseDownHandler = (e) => {\n let event = window.event || e;\n event.srcElement || event.target;\n let 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 renderButtons() {\n const builder = domel('div', this.slot)\n .addClass(`${this.cssPrefix}-buttons`)\n .addChild('button', b => this.nowButton = b\n .addClass(`${this.cssPrefix}-button ${this.cssPrefix}-button-now`)\n .text(i18n.getText('ButtonNow'))\n .on('click', () => {\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', b => this.submitButton = b\n .addClass(`${this.cssPrefix}-button ${this.cssPrefix}-button-apply`)\n .text(i18n.getText('ButtonApply'))\n .on('click', () => {\n this.apply(this.getDateTime());\n return false;\n })\n .toDOM());\n }\n builder.addChild('button', b => this.submitButton = b\n .addClass(`${this.cssPrefix}-button ${this.cssPrefix}-button-cancel`)\n .text(i18n.getText('ButtonCancel'))\n .on('click', () => {\n this.cancel();\n return false;\n })\n .toDOM());\n }\n createCalendar(options) {\n this.calendarSlot =\n domel('div', this.slot)\n .addClass(`${this.cssPrefix}-cal`)\n .toDOM();\n return new DefaultCalendar(this.calendarSlot, options);\n }\n createTimePicker(options) {\n this.timePickerSlot =\n domel('div', this.slot)\n .addClass(`${this.cssPrefix}-tp`)\n .toDOM();\n return new DefaultTimePicker(this.timePickerSlot, options);\n }\n show(anchor) {\n if (this.options.showDateTimeInput) {\n if (this.options.beforeShow) {\n this.options.beforeShow();\n }\n const anchorPos = getElementAbsolutePos(anchor || document.body);\n const 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.show(anchor);\n this.slot.focus();\n }\n setTimeout(() => {\n document.addEventListener('mousedown', this.globalMouseDownHandler, true);\n }, 1);\n }\n}\n\nvar 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\nconst cssPrefix = \"kdlg\";\nclass DefaultDialogService {\n openConfirm(title, content, callback) {\n const template = `
    ${content}
    `;\n const options = {\n title: title,\n closable: false,\n submitable: true,\n cancelable: true,\n body: template\n };\n if (callback) {\n options.onSubmit = () => {\n callback(true);\n };\n options.onCancel = () => {\n callback(false);\n };\n this.open(options);\n return;\n }\n return new Promise((resolve) => {\n options.onSubmit = () => {\n resolve(true);\n };\n options.onCancel = () => {\n resolve(false);\n };\n this.open(options);\n });\n }\n openPrompt(title, content, defVal, callback) {\n const template = `
    \r\n
    \r\n \r\n \r\n
    \r\n
    `;\n const options = {\n title: title,\n submitable: true,\n closable: true,\n cancelable: true,\n submitOnEnter: true,\n body: template,\n arrangeParents: false,\n beforeOpen: () => {\n const input = document.getElementById(`${cssPrefix}-dialog-form-input`);\n if (defVal) {\n input.value = defVal;\n }\n input.focus();\n }\n };\n const processInput = (callback) => {\n const input = document.getElementById(`${cssPrefix}-dialog-form-input`);\n const 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 = () => {\n return processInput(callback);\n };\n options.onCancel = () => {\n callback(\"\");\n };\n this.open(options);\n return;\n }\n return new Promise((resolve) => {\n options.onSubmit = () => {\n return processInput(resolve);\n };\n options.onCancel = () => {\n resolve(\"\");\n };\n this.open(options);\n });\n }\n open(options, data) {\n const dialog = new DefaultDialog(options, data);\n const onDestroy = options.onDestroy;\n options.onDestroy = (dlg) => {\n this.untrack(dlg);\n onDestroy && onDestroy(dlg);\n };\n dialog.open();\n this.track(dialog);\n return dialog;\n }\n createSet(options) {\n return new DefaultDialogSet(options, this);\n }\n untrack(dlg) {\n const index = DefaultDialogService.openDialogs.indexOf(dlg);\n if (index >= 0) {\n DefaultDialogService.openDialogs.splice(index, 1);\n }\n }\n track(dlg) {\n DefaultDialogService.openDialogs.push(dlg);\n }\n openProgress(options) {\n const dialog = new DefaultProgressDialog(options);\n const onDestroy = options.onDestroy;\n options.onDestroy = (dlg) => {\n this.untrack(dlg);\n onDestroy && onDestroy(dlg);\n };\n dialog.open();\n this.track(dialog);\n return dialog;\n }\n getAllDialogs() {\n return Array.from(DefaultDialogService.openDialogs);\n }\n closeAllDialogs() {\n for (const dialog of Array.from(DefaultDialogService.openDialogs)) {\n dialog.close();\n }\n }\n}\nDefaultDialogService.openDialogs = [];\nclass DefaultDialog {\n constructor(options, data) {\n this.options = options;\n this.submitHandler = (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 = () => {\n if (this.options.onCancel) {\n this.options.onCancel(this);\n }\n this.destroy();\n };\n this.keydownHandler = (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(`${cssPrefix}-modal`, 'is-active')\n .focus()\n .addChild('div', b => b\n .addClass('kdlg-modal-background'))\n .addChild('div', b => this.windowElement = b\n .addClass(`${cssPrefix}-modal-window`)\n .addChild('header', b => {\n this.headerElement = b\n .addClass(`${cssPrefix}-header`)\n .addChild('p', b => b\n .addClass(`${cssPrefix}-header-title`)\n .addText(options.title))\n .toDOM();\n if (options.closable !== false)\n b.addChild('button', b => b\n .addClass(`${cssPrefix}-modal-close`)\n .on('click', () => {\n this.cancelHandler();\n })\n .focus());\n })\n .addChild('div', b => {\n b.addClass(`${cssPrefix}-alert-container`);\n this.alertElement = b.toDOM();\n })\n .addChild('section', b => {\n this.bodyElement = b\n .addClass(`${cssPrefix}-body`)\n .toDOM();\n if (typeof options.body === 'string') {\n const html = liquid.renderLiquidTemplate(options.body, data);\n b.addHtml(html);\n }\n else {\n b.addChildElement(options.body);\n }\n })\n .addChild('footer', b => {\n let 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(`${cssPrefix}-footer`)\n .toDOM();\n b.addClass(alignClass);\n if (options.submitable === false)\n return;\n b.addChild('button', 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', (e) => {\n if (grecaptcha) {\n grecaptcha.ready(() => {\n grecaptcha.execute(options.recaptchaSiteKey, { action: 'submit' })\n .then((token) => {\n this.submitHandler(token);\n });\n });\n }\n else {\n this.submitHandler();\n }\n });\n }\n else {\n bb.on('click', (e) => {\n this.submitHandler();\n });\n }\n bb.focus();\n });\n if (options.cancelable !== false)\n b.addChild('button', bb => bb\n .id(this.dialogId + '-btn-cancel')\n .addClass('kfrm-button')\n .addText(options.cancelButtonText || i18n.getText('ButtonCancel'))\n .on('click', (e) => {\n this.cancelHandler();\n }));\n })\n .toDOM())\n .toDOM();\n }\n getData() {\n return this.data;\n }\n getRootElement() {\n return this.slot;\n }\n getSubmitButtonElement() {\n return document.getElementById(this.dialogId + '-btn-submit');\n }\n getCancelButtonElement() {\n return document.getElementById(this.dialogId + '-btn-cancel');\n }\n open() {\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 const windowDiv = this.slot\n .querySelector(`.${cssPrefix}-modal-window`);\n if (this.options.height) {\n windowDiv.style.height = typeof this.options.height === 'string'\n ? this.options.height\n : `${this.options.height}px`;\n }\n if (this.options.width) {\n windowDiv.style.width = typeof this.options.width === 'string'\n ? this.options.width\n : `${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(element => element.addEventListener('input', () => {\n this.clearAlert();\n if (this.options.onInput) {\n this.options.onInput(this);\n }\n }));\n if (this.options.onShow) {\n this.options.onShow(this);\n }\n }\n submit() {\n this.submitHandler();\n }\n cancel() {\n this.cancelHandler();\n }\n close() {\n this.destroy();\n }\n disableButtons() {\n const buttons = this.slot.querySelectorAll('button');\n buttons.forEach(button => button.disabled = true);\n }\n enableButtons() {\n const buttons = this.slot.querySelectorAll('button');\n buttons.forEach(button => button.disabled = false);\n }\n showAlert(text, reason, replace) {\n let alert = domel('div')\n .addClass(`${cssPrefix}-alert ${reason || ''}`)\n .addChild('span', b => b\n .addClass(`${cssPrefix}-alert-closebtn`)\n .text('×')\n .on('click', (ev) => {\n const 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 clearAlert() {\n this.alertElement.innerHTML = '';\n }\n destroy() {\n const elem = document.querySelectorAll(`[data-dialog-id=\"${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 isActiveDialog() {\n const windowDivs = document.documentElement.querySelectorAll('.kdlg-modal');\n return windowDivs[windowDivs.length - 1] === this.slot;\n }\n arrangeParents(turnOn) {\n const windowDivs = document.documentElement.querySelectorAll('.kdlg-modal-window');\n for (let i = 0; i < windowDivs.length - 1; i++) {\n if (turnOn) {\n const offset = i == 0 ? 20 : i * 40 + 20;\n domel(windowDivs[i])\n .setStyle('margin-top', `${offset}px`)\n .setStyle('margin-left', `${offset}px`);\n }\n else {\n domel(windowDivs[i])\n .removeStyle('margin-top')\n .removeStyle('margin-left');\n }\n }\n }\n}\nclass DefaultProgressDialog extends DefaultDialog {\n constructor(options, data) {\n let contentElement;\n let progressElement;\n const body = domel('div')\n .addChild('div', b => contentElement = b\n .text(options.content || '')\n .toDOM())\n .addChild('div', b => {\n b\n .addClass(`${cssPrefix}-progress-line`)\n .addChild('div', 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 super({\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);\n this.contentElement = contentElement;\n this.progressElement = progressElement;\n }\n updateContent(content) {\n this.contentElement.innerText = content;\n }\n updateProgress(progress) {\n progress = this.in01(progress);\n this.progressElement.style.width = `${progress * 100}%`;\n if (progress === 1) {\n // postpone for 0.5s for smooth closing\n setTimeout(() => {\n this.submit();\n }, 500);\n }\n }\n in01(num) {\n if (num > 1)\n return 1;\n if (num < 0)\n return 0;\n return num;\n }\n}\nclass DefaultDialogSet {\n constructor(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 getCurrent() {\n return this.currentDialog;\n }\n openNext(data) {\n return this.open(this.currentIndex + 1, data);\n }\n openPrev(data) {\n return this.open(this.currentIndex - 1, data);\n }\n open(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 const dlgOptions = this.options[this.currentIndex];\n this.currentDialog = this.dialogService.open(dlgOptions, data);\n return this.currentDialog;\n }\n close() {\n if (this.currentDialog) {\n this.currentDialog.close();\n this.currentDialog = null;\n }\n }\n}\n\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\nvar PRE_SELECT;\n(function (PRE_SELECT) {\n PRE_SELECT[PRE_SELECT[\"THIS_WEEK\"] = 0] = \"THIS_WEEK\";\n PRE_SELECT[PRE_SELECT[\"LAST_WEEK\"] = 1] = \"LAST_WEEK\";\n PRE_SELECT[PRE_SELECT[\"THIS_MONTH\"] = 2] = \"THIS_MONTH\";\n PRE_SELECT[PRE_SELECT[\"FIRST_MONTH\"] = 3] = \"FIRST_MONTH\";\n PRE_SELECT[PRE_SELECT[\"LAST_MONTH\"] = 4] = \"LAST_MONTH\";\n PRE_SELECT[PRE_SELECT[\"THIS_YEAR\"] = 5] = \"THIS_YEAR\";\n PRE_SELECT[PRE_SELECT[\"QUARTER_1\"] = 6] = \"QUARTER_1\";\n PRE_SELECT[PRE_SELECT[\"QUARTER_2\"] = 7] = \"QUARTER_2\";\n PRE_SELECT[PRE_SELECT[\"QUARTER_3\"] = 8] = \"QUARTER_3\";\n PRE_SELECT[PRE_SELECT[\"QUARTER_4\"] = 9] = \"QUARTER_4\";\n})(PRE_SELECT || (PRE_SELECT = {}));\nvar JUMP_TO;\n(function (JUMP_TO) {\n JUMP_TO[\"UNDEF\"] = \"-1\";\n JUMP_TO[\"TODAY\"] = \"1\";\n JUMP_TO[\"YESTERDAY\"] = \"2\";\n JUMP_TO[\"TOMORROW\"] = \"3\";\n JUMP_TO[\"WEEK_START\"] = \"4\";\n JUMP_TO[\"WEEK_END\"] = \"5\";\n JUMP_TO[\"MONTH_START\"] = \"6\";\n JUMP_TO[\"MONTH_END\"] = \"7\";\n JUMP_TO[\"YEAR_START\"] = \"8\";\n JUMP_TO[\"YEAR_END\"] = \"9\";\n})(JUMP_TO || (JUMP_TO = {}));\nconst DEFAULT_WEEK_START = 0;\nclass TimeSpanPicker extends DefaultDialog {\n constructor(options) {\n super({\n title: options.title || `Select a period`,\n body: \"\",\n submitButtonText: options.submitButtonText || `OK`,\n cancelButtonText: options.cancelButtonText || `Cancel`,\n submitable: true,\n closable: true,\n cancelable: true,\n beforeOpen: (dlg) => {\n this.setupDialog();\n },\n onSubmit: (dlg) => {\n if (typeof options.onSubmit === \"function\") {\n options.onSubmit.apply(dlg, [this.result(this.from), this.result(this.to)]);\n }\n }\n });\n this.yearRange = options.yearRange;\n this.weekStart = options.weekStart || DEFAULT_WEEK_START;\n this.bodyElement.append(this.drawDialog());\n this.calendar1.render();\n this.calendar2.render();\n this.from = this.alignDate(options.start ? options.start : new Date());\n this.to = this.alignDate(options.finish && this.alignDate(options.finish) > this.from ? options.finish : new Date(this.from.getFullYear(), this.from.getMonth(), this.from.getDate() + 1));\n this.represent();\n }\n alignDate(date) {\n date.setHours(0);\n date.setMinutes(0);\n date.setSeconds(0);\n date.setMilliseconds(0);\n return date;\n }\n drawDialog() {\n const body = domel('div')\n .addClass('tsp__container')\n .addChild('div', b => {\n b\n .addClass('tsp__intervals')\n .addChild('button', b => b.addClass('tsp__button').addText('This Week').on('click', () => { this.select(PRE_SELECT.THIS_WEEK); }))\n .addChild('button', b => b.addClass('tsp__button').addText('Last Week').on('click', () => { this.select(PRE_SELECT.LAST_WEEK); }))\n .addChild('button', b => b.addClass('tsp__button').addText('This Month').on('click', () => { this.select(PRE_SELECT.THIS_MONTH); }))\n .addChild('button', b => b.addClass('tsp__button').addText('First Month').on('click', () => { this.select(PRE_SELECT.FIRST_MONTH); }))\n .addChild('button', b => b.addClass('tsp__button').addText('Last Month').on('click', () => { this.select(PRE_SELECT.LAST_MONTH); }))\n .addChild('button', b => b.addClass('tsp__button').addText('This Year').on('click', () => { this.select(PRE_SELECT.THIS_YEAR); }))\n .addChild('button', b => b.addClass('tsp__button').addText('Quarter 1').on('click', () => { this.select(PRE_SELECT.QUARTER_1); }))\n .addChild('button', b => b.addClass('tsp__button').addText('Quarter 2').on('click', () => { this.select(PRE_SELECT.QUARTER_2); }))\n .addChild('button', b => b.addClass('tsp__button').addText('Quarter 3').on('click', () => { this.select(PRE_SELECT.QUARTER_3); }))\n .addChild('button', b => b.addClass('tsp__button').addText('Quarter 4').on('click', () => { this.select(PRE_SELECT.QUARTER_4); }));\n })\n .addChild('div', b => {\n b\n .addClass('tsp__form')\n .addChild('div', b => {\n b\n .addClass('tsp__date')\n .addChild('div', b => {\n b\n .addClass('tsp__label')\n .addChild('label', b => {\n b.addText('Start');\n })\n .addChild('select', b => {\n b\n .addOption({ value: JUMP_TO.UNDEF, title: 'Jump To' })\n .addOption({ value: JUMP_TO.TODAY, title: 'Today' })\n .addOption({ value: JUMP_TO.YESTERDAY, title: 'Yesterday' })\n .addOption({ value: JUMP_TO.TOMORROW, title: 'Tomorrow' })\n .addOption({ value: JUMP_TO.WEEK_START, title: 'Week Start' })\n .addOption({ value: JUMP_TO.WEEK_END, title: 'Week End' })\n .addOption({ value: JUMP_TO.MONTH_START, title: 'Month Start' })\n .addOption({ value: JUMP_TO.MONTH_END, title: 'Month End' })\n .addOption({ value: JUMP_TO.YEAR_START, title: 'Year Start' })\n .addOption({ value: JUMP_TO.YEAR_END, title: 'Year End' });\n b.on('change', (event) => {\n // @ts-ignore\n this.jump(1, event.target.value, event.target);\n });\n });\n })\n .addChild('div', b => {\n b.addClass('tsp__calendar');\n this.calendar1 = new DefaultCalendar(b.toDOM(), {\n yearRange: this.yearRange,\n showDateTimeInput: true,\n onDateChanged: (date) => {\n this.from = this.alignDate(date);\n this.calendar1.setDate(this.from);\n if (this.to < this.from) {\n this.to = this.from;\n }\n this.represent();\n },\n onDrawDay: (cell, date) => {\n if (this.alignDate(date) >= this.from && this.alignDate(date) <= this.to) {\n cell.classList.add(\"day-in-range\");\n }\n else {\n cell.classList.remove(\"day-in-range\");\n }\n }\n });\n });\n })\n .addChild('div', b => {\n b\n .addClass('tsp__date')\n .addChild('div', b => {\n b\n .addClass('tsp__label')\n .addChild('label', b => {\n b.addText('Finish');\n })\n .addChild('select', b => {\n b\n .addOption({ value: JUMP_TO.UNDEF, title: 'Jump To' })\n .addOption({ value: JUMP_TO.TODAY, title: 'Today' })\n .addOption({ value: JUMP_TO.YESTERDAY, title: 'Yesterday' })\n .addOption({ value: JUMP_TO.TOMORROW, title: 'Tomorrow' })\n .addOption({ value: JUMP_TO.WEEK_START, title: 'Week Start' })\n .addOption({ value: JUMP_TO.WEEK_END, title: 'Week End' })\n .addOption({ value: JUMP_TO.MONTH_START, title: 'Month Start' })\n .addOption({ value: JUMP_TO.MONTH_END, title: 'Month End' })\n .addOption({ value: JUMP_TO.YEAR_START, title: 'Year Start' })\n .addOption({ value: JUMP_TO.YEAR_END, title: 'Year End' });\n b.on('change', (event) => {\n // @ts-ignore\n this.jump(2, event.target.value, event.target);\n });\n });\n })\n .addChild('div', b => {\n b.addClass('tsp__calendar');\n this.calendar2 = new DefaultCalendar(b.toDOM(), {\n yearRange: this.yearRange,\n showDateTimeInput: true,\n onDateChanged: (date) => {\n if (this.alignDate(date) >= this.from) {\n this.to = this.alignDate(date);\n }\n else {\n this.calendar2.setDate(this.to);\n }\n this.represent();\n },\n onDrawDay: (cell, date) => {\n if (this.alignDate(date) >= this.from && this.alignDate(date) <= this.to) {\n cell.classList.add(\"day-in-range\");\n }\n else {\n cell.classList.remove(\"day-in-range\");\n }\n }\n });\n });\n });\n })\n .toDOM();\n return body;\n }\n setupDialog() {\n }\n jump(cal, to, select) {\n let target = cal === 1 ? 'from' : 'to';\n let jumpTo;\n const curr = new Date();\n switch (to) {\n case JUMP_TO.TODAY: {\n jumpTo = curr;\n break;\n }\n case JUMP_TO.YESTERDAY: {\n jumpTo = new Date(curr.getFullYear(), curr.getMonth(), curr.getDate() - 1);\n break;\n }\n case JUMP_TO.TOMORROW: {\n jumpTo = new Date(curr.getFullYear(), curr.getMonth(), curr.getDate() + 1);\n break;\n }\n case JUMP_TO.WEEK_START: {\n jumpTo = new Date(curr.setDate(curr.getDate() - curr.getDay() + this.weekStart));\n break;\n }\n case JUMP_TO.WEEK_END: {\n jumpTo = new Date(curr.setDate(curr.getDate() - curr.getDay() + 6 + this.weekStart));\n break;\n }\n case JUMP_TO.MONTH_START: {\n jumpTo = new Date(curr.getFullYear(), curr.getMonth(), 1);\n break;\n }\n case JUMP_TO.MONTH_END: {\n jumpTo = new Date(curr.getFullYear(), curr.getMonth() + 1, 0);\n break;\n }\n case JUMP_TO.YEAR_START: {\n jumpTo = new Date(curr.getFullYear(), 0, 1);\n break;\n }\n case JUMP_TO.YEAR_END: {\n jumpTo = new Date(curr.getFullYear(), 12, 0);\n break;\n }\n }\n jumpTo = this.alignDate(jumpTo);\n select.value = JUMP_TO.UNDEF;\n if (target === \"from\") {\n this.from = jumpTo;\n if (this.to < this.from) {\n this.to = this.from;\n }\n }\n else {\n if (jumpTo >= this.from) {\n this[target] = jumpTo;\n }\n }\n this.represent();\n }\n represent() {\n this.calendar1.setDate(this.from);\n this.calendar2.setDate(this.to);\n }\n select(interval) {\n switch (interval) {\n case PRE_SELECT.THIS_WEEK: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), curr.getMonth(), curr.getDate() - curr.getDay());\n this.to = new Date(this.from.getFullYear(), this.from.getMonth(), this.from.getDate() + 6);\n break;\n }\n case PRE_SELECT.LAST_WEEK: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), curr.getMonth(), curr.getDate() - curr.getDay() - 7);\n this.to = new Date(this.from.getFullYear(), this.from.getMonth(), this.from.getDate() + 6);\n break;\n }\n case PRE_SELECT.THIS_MONTH: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), curr.getMonth(), 1);\n this.to = new Date(curr.getFullYear(), curr.getMonth() + 1, 0);\n break;\n }\n case PRE_SELECT.FIRST_MONTH: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), 0, 1);\n this.to = new Date(curr.getFullYear(), 1, 0);\n break;\n }\n case PRE_SELECT.LAST_MONTH: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), curr.getMonth() - 1, 1);\n this.to = new Date(curr.getFullYear(), curr.getMonth(), 0);\n break;\n }\n case PRE_SELECT.THIS_YEAR: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), 0, 1);\n this.to = new Date(curr.getFullYear(), 12, 0);\n break;\n }\n case PRE_SELECT.QUARTER_1: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), 0, 1);\n this.to = new Date(curr.getFullYear(), 3, 0);\n break;\n }\n case PRE_SELECT.QUARTER_2: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), 3, 1);\n this.to = new Date(curr.getFullYear(), 6, 0);\n break;\n }\n case PRE_SELECT.QUARTER_3: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), 6, 1);\n this.to = new Date(curr.getFullYear(), 9, 0);\n break;\n }\n case PRE_SELECT.QUARTER_4: {\n const curr = new Date();\n this.from = new Date(curr.getFullYear(), 9, 1);\n this.to = new Date(curr.getFullYear(), 12, 0);\n break;\n }\n }\n this.represent();\n }\n result(date) {\n const curr = this.alignDate(new Date());\n const constants = {\n \"Today\": this.alignDate(new Date()),\n \"Yesterday\": this.alignDate(new Date(curr.getFullYear(), curr.getMonth(), curr.getDate() - 1)),\n \"Tomorrow\": this.alignDate(new Date(curr.getFullYear(), curr.getMonth(), curr.getDate() + 1)),\n \"FirstDayOfMonth\": this.alignDate(new Date(curr.getFullYear(), curr.getMonth(), 1)),\n \"LastDayOfMonth\": this.alignDate(new Date(curr.getFullYear(), curr.getMonth() + 1, 0)),\n \"FirstDayOfWeek\": this.alignDate(new Date(curr.setDate(curr.getDate() - curr.getDay() + this.weekStart))),\n \"FirstDayOfYear\": this.alignDate(new Date(curr.getFullYear(), 0, 1)),\n \"FirstDayOfNextWeek\": this.alignDate(new Date(curr.setDate(curr.getDate() - curr.getDay() + this.weekStart + 7))),\n \"FirstDayOfNextMonth\": this.alignDate(new Date(curr.getFullYear(), curr.getMonth() + 1, 1)),\n \"FirstDayOfNextYear\": this.alignDate(new Date(curr.getFullYear() + 1, 0, 1)),\n };\n for (let k in constants) {\n console.log(constants[k], date);\n if (constants[k].getTime() === date.getTime()) {\n return `\\${{${k}}}`;\n }\n }\n return i18n.dateTimeToStr(date, i18n.getLocaleSettings().editDateFormat);\n }\n}\nconst showTimeSpanPicker = (options) => new TimeSpanPicker(options).open();\n\n// grid\n// export dialogs to use outside of context as global\nconst dialogs = new DefaultDialogService();\n\nexport { AutoResizeColumns, Calendar, CellRendererType, DFMT_REGEX, DateTimePicker, DefaultCalendar, DefaultDateTimePicker, DefaultDialog, DefaultDialogService, DefaultDialogSet, DefaultProgressDialog, DefaultTimePicker, DialogFooterAlignment, DomElementBuilder, DomInputElementBuilder, DomSelectElementBuilder, DomTextAreaElementBuilder, DragManager, DropEffect, EasyGrid, EqDragEvent, GridCellRendererStore, GridColumn, GridColumnAlign, GridColumnList, JUMP_TO, PRE_SELECT, TimePicker, TimeSpanPicker, addCssClass, addElement, browserUtils, createBrowserEvent, dialogs, domel, eqCssMobile, eqCssPrefix, eqDragManager, getDocSize, getElementAbsolutePos, getMobileCssClass, getScrollPos, getViewportSize, getWinSize, hideElement, isVisible, mask, showElement, showTimeSpanPicker, slideDown, slideUp, toggleVisibility, wrapInner };\n//# sourceMappingURL=easydata.ui.esm.js.map\n","\n/*\n * EasyData.JS CRUD v1.5.2\n * Copyright 2020-2024 Korzh.com\n * Licensed under MIT\n */\n\nimport { EasyDataTable, utils, DataType, i18n, EntityAttrKind, EditorTag, ValueEditor, DataRow, HttpClient, MetaData, combinePath } from '@easydata/core';\nimport { domel, CellRendererType, browserUtils, DFMT_REGEX, DefaultDialogService, EasyGrid, DefaultDateTimePicker } from '@easydata/ui';\n\nclass TextDataFilter {\n constructor(loader, sourceTable, sourceId, isLookup = false) {\n this.loader = loader;\n this.sourceTable = sourceTable;\n this.sourceId = sourceId;\n this.isLookup = isLookup;\n this.filterValue = '';\n //turns off client-side search\n //for test purposes\n this.justServerSide = false;\n }\n getValue() {\n return this.filterValue;\n }\n apply(value) {\n this.filterValue = value;\n if (this.filterValue) {\n return this.applyCore();\n }\n else {\n return this.clear();\n }\n }\n clear() {\n this.filterValue = '';\n return Promise.resolve(this.sourceTable);\n }\n applyCore() {\n if (this.sourceTable.getTotal() == this.sourceTable.getCachedCount() && !this.justServerSide) {\n return this.applyInMemoryFilter();\n }\n else {\n const filters = [\n { class: \"__substring\", value: this.filterValue }\n ];\n return this.loader.loadChunk({\n offset: 0,\n limit: this.sourceTable.chunkSize,\n needTotal: true,\n filters: filters,\n sourceId: this.sourceId,\n lookup: this.isLookup\n })\n .then(data => {\n const filteredTable = new EasyDataTable({\n chunkSize: this.sourceTable.chunkSize,\n loader: {\n loadChunk: (params) => this.loader\n .loadChunk(Object.assign(Object.assign({}, params), { filters: filters, sourceId: this.sourceId, lookup: this.isLookup }))\n }\n });\n for (const col of this.sourceTable.columns.getItems()) {\n filteredTable.columns.add(col);\n }\n filteredTable.setTotal(data.total);\n for (const row of data.table.getCachedRows()) {\n filteredTable.addRow(row);\n }\n return filteredTable;\n });\n }\n }\n applyInMemoryFilter() {\n return new Promise((resolve, reject) => {\n const filteredTable = new EasyDataTable({\n chunkSize: this.sourceTable.chunkSize,\n inMemory: true\n });\n for (const col of this.sourceTable.columns.getItems()) {\n filteredTable.columns.add(col);\n }\n const words = this.filterValue.split('||').map(w => w.trim().toLowerCase());\n const suitableColumns = this.sourceTable.columns.getItems()\n .filter(col => utils.isNumericType(col.type)\n || utils.getStringDataTypes().indexOf(col.type) >= 0);\n const hasEnterance = (row) => {\n for (const col of suitableColumns) {\n const value = row.getValue(col.id);\n if (value) {\n const normalized = value.toString().toLowerCase();\n for (const word of words) {\n if (normalized.indexOf(word) >= 0) {\n return true;\n }\n }\n }\n }\n return false;\n };\n for (const row of this.sourceTable.getCachedRows()) {\n if (hasEnterance(row)) {\n filteredTable.addRow(row);\n }\n }\n filteredTable.setTotal(filteredTable.getCachedCount());\n resolve(filteredTable);\n });\n }\n}\n\nconst internalDateFormat = 'yyyy-MM-dd';\nconst internalTimeFormat = 'HH:mm';\nconst getInternalDateTimeFormat = (dtype) => {\n if (dtype == DataType.Date)\n return internalDateFormat;\n if (dtype == DataType.Time)\n return internalTimeFormat;\n return `${internalDateFormat}T${internalTimeFormat}`;\n};\nconst getEditDateTimeFormat = (dtype) => {\n const settings = i18n.getLocaleSettings();\n if (dtype == DataType.Date)\n return settings.editDateFormat;\n if (dtype == DataType.Time)\n return settings.editTimeFormat;\n return `${settings.editDateFormat} ${settings.editTimeFormat}`;\n};\nconst setLocation = (path) => {\n const state = window.history.state;\n history.pushState(state, document.title, path);\n window.dispatchEvent(new Event('ed_set_location'));\n};\n\nclass Validator {\n}\n\nclass DateTimeValidator extends Validator {\n constructor() {\n super();\n this.name = 'DateTime';\n }\n validate(attr, value) {\n if (!utils.IsDefinedAndNotNull(value) || value == '')\n return { successed: true };\n if (utils.getDateDataTypes().indexOf(attr.dataType) >= 0) {\n try {\n const editFormat = getEditDateTimeFormat(attr.dataType);\n const newDate = utils.strToDateTime(value, editFormat);\n }\n catch (_a) {\n return {\n successed: false,\n messages: [i18n.getText('DateTimeError')]\n };\n }\n }\n return { successed: true };\n }\n}\n\nclass EntityEditForm {\n constructor(context) {\n this.context = context;\n this.validators = [new DateTimeValidator()];\n }\n getHtml() {\n return this.html;\n }\n setHtmlInt(html) {\n this.html = html;\n this.errorsDiv = this.html.querySelector('.errors-block');\n }\n validate() {\n this.clearErrors();\n const inputs = Array.from(this.html.querySelectorAll('input, select'));\n let isValid = true;\n for (const input of inputs) {\n const attr = this.context.getMetaData().getAttributeById(input.name);\n if (input.type === 'checkbox')\n continue;\n const result = this.validateValue(attr, input.value);\n if (!result.successed) {\n if (isValid) {\n domel(this.errorsDiv)\n .addChild('ul');\n }\n isValid = false;\n for (const message of result.messages) {\n this.errorsDiv.firstElementChild.innerHTML += `
  • ${attr.caption}: ${message}
  • `;\n }\n }\n this.markInputValid(input, result.successed);\n }\n return isValid;\n }\n getData() {\n return new Promise((resolve, reject) => {\n const filePromises = [];\n const inputs = Array.from(this.html\n .querySelectorAll('input, select, textarea'));\n let obj = {};\n for (const input of inputs) {\n const property = input.name.substring(input.name.lastIndexOf('.') + 1);\n const attr = this.context.getMetaData().getAttributeById(input.name);\n if (input.type === 'checkbox') {\n obj[property] = input.checked;\n }\n else if (input.type === 'file') {\n filePromises.push(this.fileToBase64(input.files[0])\n .then(content => obj[property] = content));\n }\n else {\n obj[property] = this.mapValue(attr.dataType, input.value);\n }\n }\n Promise.all(filePromises)\n .then(() => resolve(obj))\n .catch((e) => reject(e));\n });\n }\n fileToBase64(file) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n const result = reader.result.toString();\n resolve(result.substring(result.indexOf(',') + 1));\n };\n reader.onerror = error => reject(error);\n });\n }\n useValidator(...validator) {\n this.useValidators(validator);\n }\n useValidators(validators) {\n this.validators = this.validators.concat(validators);\n }\n mapValue(type, value) {\n if (utils.getDateDataTypes().indexOf(type) >= 0) {\n if (type !== DataType.Time && value && value.length) {\n const editFormat = getEditDateTimeFormat(type);\n const internalFormat = getInternalDateTimeFormat(type);\n const date = utils.strToDateTime(value, editFormat);\n return i18n.dateTimeToStr(date, internalFormat);\n }\n return value && value.length ? value : null;\n }\n if (utils.isIntType(type))\n return parseInt(value);\n if (utils.isNumericType(type))\n return parseFloat(value);\n return value;\n }\n clearErrors() {\n this.errorsDiv.innerHTML = '';\n this.html.querySelectorAll('input, select').forEach(el => {\n el.classList.remove('is-valid');\n el.classList.remove('is-invalid');\n });\n }\n markInputValid(input, valid) {\n input.classList.add(valid ? 'is-valid' : 'is-invalid');\n }\n validateValue(attr, value) {\n const result = { successed: true, messages: [] };\n for (const validator of this.validators) {\n const res = validator.validate(attr, value);\n if (!res.successed) {\n result.successed = false;\n result.messages = result.messages.concat(res.messages);\n }\n }\n return result;\n }\n}\n\nclass TextFilterWidget {\n constructor(slot, grid, filter, options) {\n this.slot = slot;\n this.grid = grid;\n this.filter = filter;\n this.options = {\n focus: false,\n instantMode: false,\n instantTimeout: 1000\n };\n this.options = utils.assign(this.options, options || {});\n const stringDefRenderer = this.grid.cellRendererStore\n .getDefaultRendererByType(CellRendererType.STRING);\n this.grid.cellRendererStore\n .setDefaultRenderer(CellRendererType.STRING, (value, column, cellElement, rowElement) => this.highlightCellRenderer(stringDefRenderer, value, column, cellElement, rowElement));\n const numDefRenderer = this.grid.cellRendererStore\n .getDefaultRendererByType(CellRendererType.NUMBER);\n this.grid.cellRendererStore\n .setDefaultRenderer(CellRendererType.NUMBER, (value, column, cellElement, rowElement) => this.highlightCellRenderer(numDefRenderer, value, column, cellElement, rowElement));\n this.render();\n }\n render() {\n const horizClass = browserUtils.isIE()\n ? 'kfrm-fields-ie is-horizontal'\n : 'kfrm-fields is-horizontal';\n const isEdgeOrIE = browserUtils.isIE() || browserUtils.isEdge();\n domel(this.slot)\n .addClass(horizClass)\n .addChild('div', b => {\n b\n .addClass('control')\n .addChild('input', b => {\n this.filterInput = b.toDOM();\n b\n .attr('placeholder', i18n.getText('SearchInputPlaceholder'))\n .type('text');\n b.on('keydown', this.inputKeydownHandler.bind(this));\n if (this.options.instantMode) {\n b.on('keyup', this.inputKeyupHandler.bind(this));\n }\n });\n if (!isEdgeOrIE) {\n b\n .addClass('has-icons-right')\n .addChild('span', b => {\n b\n .addClass('icon')\n .addClass('is-right')\n .addClass('is-clickable')\n .html('🗙')\n .on('click', this.clearButtonClickHander.bind(this));\n });\n }\n });\n if (!this.options.instantMode) {\n domel(this.slot)\n .addChild('button', b => b\n .addClass('kfrm-button')\n .addText(i18n.getText('SearchBtn'))\n .on('click', this.searchButtonClickHandler.bind(this)));\n }\n if (this.options.focus) {\n this.filterInput.focus();\n }\n }\n inputKeydownHandler(ev) {\n if (ev.keyCode == 13) {\n this.applyFilter(true);\n }\n }\n inputKeyupHandler() {\n if (this.applyFilterTimeout) {\n clearTimeout(this.applyFilterTimeout);\n }\n this.applyFilterTimeout = setTimeout(() => {\n this.applyFilter(true);\n }, this.options.instantTimeout);\n }\n clearButtonClickHander() {\n this.filterInput.value = '';\n this.filterInput.focus();\n this.applyFilter(true);\n }\n searchButtonClickHandler() {\n this.applyFilter(true);\n }\n applyFilter(checkChange) {\n if (this.applyFilterTimeout) {\n clearTimeout(this.applyFilterTimeout);\n }\n const filterValue = this.filter.getValue();\n if (!checkChange || filterValue != this.filterInput.value) {\n this.filter.apply(this.filterInput.value)\n .then(data => {\n this.grid.setData(data);\n });\n return true;\n }\n return false;\n }\n highlightCellRenderer(defaultRenderer, value, column, cellElement, rowElement) {\n if (utils.isNumericType(column.type)\n || utils.getStringDataTypes().indexOf(column.type) >= 0) {\n if (value) {\n if (column.dataColumn && column.dataColumn.displayFormat\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\n value = column.dataColumn.displayFormat.replace(DFMT_REGEX, (_, $1) => {\n return i18n.numberToStr(value, $1);\n });\n }\n else {\n value = value.toLocaleString();\n }\n const result = this.highlightText(value.toString());\n if (result instanceof HTMLElement) {\n cellElement.title = value;\n cellElement.appendChild(result);\n return;\n }\n }\n }\n defaultRenderer(value, column, cellElement, rowElement);\n }\n highlightText(content) {\n const normalizedContent = content.toLowerCase();\n const filterValue = this.filter.getValue().toString();\n if (filterValue && filterValue.length > 0 && content && content.length > 0) {\n const indexInMas = [];\n const words = filterValue.split('||').map(w => w.trim().toLowerCase());\n for (let i = 0; i < words.length; i++) {\n let pos = 0;\n const lowerWord = words[i];\n if (!lowerWord.length)\n continue;\n if (lowerWord === normalizedContent) {\n const highlightSpan = document.createElement('span');\n highlightSpan.style.backgroundColor = 'yellow';\n highlightSpan.innerText = content;\n return highlightSpan;\n }\n while (pos < content.length - 1) {\n const index = normalizedContent.indexOf(lowerWord, pos);\n if (index >= 0) {\n indexInMas.push({ index: index, length: words[i].length });\n pos = index + lowerWord.length;\n }\n else {\n pos++;\n }\n }\n }\n if (indexInMas.length > 0) {\n //sort array item by index\n indexInMas.sort((item1, item2) => {\n if (item1.index > item2.index) {\n return 1;\n }\n else if (item1.index == item2.index2) {\n return 0;\n }\n else {\n return -1;\n }\n });\n //remove intersecting gaps\n for (let i = 0; i < indexInMas.length - 1;) {\n const delta = indexInMas[i + 1].index - (indexInMas[i].index + indexInMas[i].length);\n if (delta < 0) {\n const addDelta = indexInMas[i + 1].length + delta;\n if (addDelta > 0) {\n indexInMas[i].length += addDelta;\n }\n indexInMas.splice(i + 1, 1);\n }\n else {\n i++;\n }\n }\n const div = document.createElement('div');\n for (let i = 0; i < indexInMas.length; i++) {\n if (i === 0) {\n const text = document.createTextNode(content.substring(0, indexInMas[i].index));\n div.appendChild(text);\n }\n const highlightSpan = document.createElement('span');\n highlightSpan.style.backgroundColor = 'yellow';\n highlightSpan.innerText = content.substring(indexInMas[i].index, indexInMas[i].index + indexInMas[i].length);\n div.appendChild(highlightSpan);\n const text = (i < indexInMas.length - 1)\n ? document.createTextNode(content.substring(indexInMas[i].index\n + indexInMas[i].length, indexInMas[i + 1].index))\n : document.createTextNode(content.substring(indexInMas[i].index\n + indexInMas[i].length));\n div.appendChild(text);\n }\n return div;\n }\n }\n return content;\n }\n}\n\nconst isIE = browserUtils.isIE();\nclass EntityEditFormBuilder {\n constructor(context, params) {\n this.context = context;\n this.params = params;\n this.params = params || {};\n this.reset();\n }\n reset() {\n this.form = new EntityEditForm(this.context);\n }\n setupLookupField(parent, attr, readOnly, value) {\n const lookupEntity = this.context.getMetaData().getRootEntity()\n .subEntities.filter(ent => ent.id == attr.lookupEntity)[0];\n const dataAttr = this.context.getMetaData().getAttributeById(attr.dataAttr);\n if (!dataAttr)\n return;\n readOnly = readOnly || !dataAttr.isEditable;\n value = this.params.values\n ? this.params.values.getValue(dataAttr.id)\n : undefined;\n const horizClass = isIE\n ? 'kfrm-fields-ie is-horizontal'\n : 'kfrm-fields is-horizontal';\n let inputEl;\n domel(parent)\n .addChild('div', b => {\n b\n .addClass(horizClass)\n .addChild('input', b => {\n inputEl = b.toDOM();\n b.attr('readonly', '');\n b.name(dataAttr.id);\n b.type(this.resolveInputType(dataAttr.dataType));\n b.value(utils.IsDefinedAndNotNull(value)\n ? value.toString() : '');\n });\n if (!readOnly)\n b.addChild('button', b => b\n .addClass('kfrm-button')\n .attr('title', i18n.getText('NavigationBtnTitle'))\n .addText('...')\n .on('click', (ev) => {\n const lookupTable = new EasyDataTable({\n loader: {\n loadChunk: (chunkParams) => this.context.getDataLoader()\n .loadChunk(Object.assign(Object.assign({}, chunkParams), { id: lookupEntity.id }))\n }\n });\n this.context.getDataLoader()\n .loadChunk({ offset: 0, limit: 1000, needTotal: true, sourceId: lookupEntity.id })\n .then(data => {\n for (const col of data.table.columns.getItems()) {\n const attrs = lookupEntity.attributes.filter(attr => attr.id == col.id && (attr.isPrimaryKey || attr.showInLookup));\n if (attrs.length) {\n lookupTable.columns.add(col);\n }\n }\n lookupTable.setTotal(data.total);\n for (const row of data.table.getCachedRows()) {\n lookupTable.addRow(row);\n }\n const ds = new DefaultDialogService();\n let gridSlot = null;\n let selectedSlot = null;\n let widgetSlot;\n const slot = domel('div')\n .addClass(`kfrm-form`)\n .addChild('div', b => b\n .addClass(`kfrm-field`)\n .addChild('label', b => b\n .addText(i18n.getText('LookupSelectedItem'))\n .toDOM())\n .addChild('div', b => selectedSlot = b\n .addText('None')\n .toDOM()))\n .addChild('div', b => widgetSlot = b.toDOM())\n .addChild('div', b => b\n .addClass('kfrm-control')\n .addChild('div', b => gridSlot = b.toDOM()))\n .toDOM();\n let selectedValue = inputEl.value;\n const getValue = (row, colId) => {\n if (row instanceof DataRow) {\n return row.getValue(colId);\n }\n const property = colId.substring(colId.lastIndexOf('.') + 1);\n return row[property];\n };\n const updateSelectedValue = (row) => {\n selectedSlot.innerHTML = lookupTable.columns\n .getItems()\n .map(col => {\n return `${col.label}: ${getValue(row, col.id)}`;\n })\n .join(', ');\n };\n if (selectedValue) {\n const attr = lookupEntity.getFirstPrimaryAttr();\n const key = attr.id.substring(attr.id.lastIndexOf('.') + 1);\n this.context.fetchRecord({ [key]: selectedValue }, lookupEntity.id)\n .then(data => {\n if (data.entity) {\n updateSelectedValue(data.entity);\n }\n })\n .catch(error => {\n console.error(error);\n });\n }\n const lookupGrid = new EasyGrid({\n slot: gridSlot,\n dataTable: lookupTable,\n fixHeightOnFirstRender: true,\n paging: {\n pageSize: 10\n },\n onActiveRowChanged: (ev) => {\n lookupGrid.getData().getRow(ev.rowIndex)\n .then((row) => {\n selectedValue = row.getValue(attr.lookupDataAttr);\n updateSelectedValue(row);\n });\n }\n });\n ds.open({\n title: i18n.getText('LookupDlgCaption')\n .replace('{entity}', lookupEntity.caption),\n body: slot,\n arrangeParents: true,\n beforeOpen: () => {\n const dataFilter = this.context.createFilter(lookupEntity.id, lookupGrid.getData(), true);\n new TextFilterWidget(widgetSlot, lookupGrid, dataFilter, { instantMode: true, focus: true });\n },\n onSubmit: () => {\n inputEl.value = selectedValue;\n return true;\n },\n onDestroy: () => {\n lookupGrid.destroy();\n // return focus on button\n b.toDOM().focus();\n }\n });\n });\n }));\n });\n }\n setupDateTimeField(parent, attr, value, readOnly, hidden) {\n const horizClass = isIE\n ? 'kfrm-fields-ie is-horizontal'\n : 'kfrm-fields is-horizontal';\n const editFormat = getEditDateTimeFormat(attr.dataType);\n let inputEl;\n const mask = editFormat\n .replace('yyyy', '9999')\n .replace('MM', '99')\n .replace('dd', '99')\n .replace('HH', '99')\n .replace('mm', '99')\n .replace('ss', '99');\n domel(parent)\n .addChild('div', b => {\n b\n .addClass(horizClass)\n .addChild('input', b => {\n inputEl = b.toDOM();\n b.name(attr.id);\n b.type(hidden ? 'hidden' : this.resolveInputType(attr.dataType));\n if (readOnly) {\n b.attr('readonly', '');\n }\n else {\n b.mask(mask);\n b.on('keypress', (ev) => this.applySumbit(ev))\n .on('input', ev => {\n b.removeClass('is-invalid');\n try {\n const newDate = utils.strToDateTime(inputEl.value, editFormat);\n }\n catch (e) {\n b.addClass('is-invalid');\n }\n finally {\n }\n })\n .on('blur', ev => {\n if (inputEl.value === mask.replace(/[9]/g, '_')) {\n inputEl.value = '';\n }\n });\n }\n b.value((utils.IsDefinedAndNotNull(value)\n ? i18n.dateTimeToStr(value, editFormat)\n : ''));\n });\n if (!readOnly)\n b.addChild('button', b => b\n .addClass('kfrm-button')\n .attr('title', i18n.getText(attr.dataType !== DataType.Time\n ? 'CalendarBtnTitle'\n : 'TimerBtnTitle'))\n .addChild('i', b => b.addClass(attr.dataType !== DataType.Time\n ? 'ed-calendar-icon'\n : 'ed-timer-icon'))\n .on('click', (ev) => {\n let value;\n try {\n value = inputEl.value.length\n ? attr.dataType !== DataType.Time\n ? utils.strToDateTime(inputEl.value, editFormat)\n : utils.strToTime(inputEl.value)\n : new Date(new Date().setSeconds(0));\n }\n catch (_a) {\n value = new Date(new Date().setSeconds(0));\n }\n const pickerOptions = {\n zIndex: 9999999999,\n showCalendar: attr.dataType !== DataType.Time,\n showTimePicker: attr.dataType !== DataType.Date,\n onApply: (dateTime) => {\n dateTime.setSeconds(0);\n dateTime.setMilliseconds(0);\n inputEl.value = i18n.dateTimeToStr(dateTime, editFormat);\n }\n };\n const dtp = new DefaultDateTimePicker(pickerOptions);\n dtp.setDateTime(value);\n dtp.show(ev.target);\n }).toDOM());\n });\n }\n setupListField(parent, attr, value, values, readOnly) {\n domel(parent)\n .addChild('div', b => b\n .addClass('kfrm-select full-width')\n .addChild('select', b => {\n if (readOnly)\n b.attr('readonly', '');\n b.attr('name', attr.id);\n b.on('keypress', (ev) => this.applySumbit(ev));\n if (values) {\n for (let i = 0; i < values.length; i++) {\n const val = values[i];\n b.addOption({\n value: val.id,\n title: val.text,\n selected: i === 0\n });\n }\n }\n b.value(value);\n }));\n }\n setupFileField(parent, attr, readOnly, accept) {\n domel(parent)\n .addChild('input', b => {\n if (readOnly)\n b.attr('readonly', '');\n b.name(attr.id)\n .type(this.resolveInputType(attr.dataType));\n b.attr('accept', accept);\n });\n }\n setupTextField(parent, attr, value, readOnly, hidden) {\n domel(parent)\n .addChild('input', b => {\n if (readOnly) {\n b.attr('readonly', '');\n }\n b.type(hidden ? 'hidden' : this.resolveInputType(attr.dataType));\n b.name(attr.id)\n .type(this.resolveInputType(attr.dataType));\n if (attr.dataType == DataType.Bool) {\n if (value)\n b.attr('checked', '');\n }\n else {\n b.on('keypress', (ev) => this.applySumbit(ev))\n .value(utils.IsDefinedAndNotNull(value)\n ? value.toString()\n : '');\n }\n });\n }\n setupTextArea(parent, attr, value, readOnly) {\n // feature: modify size in value editor ??\n domel(parent)\n .addChild('textarea', b => {\n if (readOnly)\n b.attr('readonly', '');\n b.attr('name', attr.id);\n b.setStyle('height', `120px`);\n b.value(utils.IsDefinedAndNotNull(value)\n ? value.toString()\n : '');\n });\n }\n addFormField(parent, attr) {\n const value = (this.params.values && attr.kind !== EntityAttrKind.Lookup)\n ? this.params.values.getValue(attr.id)\n : !this.params.isEditForm\n ? attr.defaultValue\n : undefined;\n const editor = this.resolveEditor(attr);\n const readOnly = this.params.isEditForm && (attr.isPrimaryKey || !attr.isEditable);\n const required = !attr.isNullable;\n if (isIE) {\n parent = domel('div', parent)\n .addClass('kfrm-field-ie')\n .toDOM();\n }\n domel(parent)\n .addChild('label', b => {\n b.attr('for', attr.id);\n b.addHtml(`${attr.caption} ${required ? '*' : ''}: `);\n if (attr.description) {\n b.addChild('div', b => b\n .attr('title', attr.description)\n .addClass('question-mark')\n .setStyle('vertical-align', 'middle')\n .setStyle('display', 'inline-block'));\n }\n });\n const hidden = attr.isPrimaryKey;\n if (attr.kind === EntityAttrKind.Lookup) {\n this.setupLookupField(parent, attr, readOnly, value);\n return;\n }\n switch (editor.tag) {\n case EditorTag.DateTime:\n this.setupDateTimeField(parent, attr, value, readOnly, hidden);\n break;\n case EditorTag.List:\n this.setupListField(parent, attr, value, editor.values, readOnly);\n break;\n case EditorTag.File:\n this.setupFileField(parent, attr, readOnly, editor.accept);\n break;\n case EditorTag.Edit:\n default:\n if (editor.multiline) {\n this.setupTextArea(parent, attr, value, readOnly);\n }\n else {\n this.setupTextField(parent, attr, value, readOnly, hidden);\n }\n break;\n }\n }\n resolveInputType(dataType) {\n if (dataType === DataType.Bool)\n return 'checkbox';\n if (dataType === DataType.Blob)\n return 'file';\n return 'text';\n }\n resolveEditor(attr) {\n let editor = attr.defaultEditor || new ValueEditor();\n if (editor.tag == EditorTag.Unknown) {\n if (utils.getDateDataTypes().indexOf(attr.dataType) >= 0) {\n editor.tag = EditorTag.DateTime;\n }\n else {\n editor.tag = EditorTag.Edit;\n }\n }\n return editor;\n }\n applySumbit(ev) {\n if (ev.keyCode === 13) {\n this.sumbitCallback && this.sumbitCallback();\n return false;\n }\n return false;\n }\n onSubmit(sumbitCallback) {\n this.sumbitCallback = sumbitCallback;\n return this;\n }\n build() {\n let fb;\n const formHtml = domel('div')\n .addClass('kfrm-form')\n .addChild('div', b => b\n .addClass(`errors-block`)\n .toDOM())\n .addChild('div', b => {\n b.addClass(`${isIE\n ? 'kfrm-fields-ie col-ie-1-4 label-align-right'\n : 'kfrm-fields col-a-1 label-align-right'}`);\n fb = b;\n })\n .toDOM();\n this.form['setHtmlInt'](formHtml);\n for (const attr of this.context.getActiveEntity().attributes) {\n if (!this.params.isEditForm && !attr.showOnCreate)\n continue;\n if (!attr.isPrimaryKey && this.params.isEditForm && !attr.showOnEdit) {\n continue;\n }\n this.addFormField(fb.toDOM(), attr);\n }\n return this.form;\n }\n}\n\nclass ProgressBar {\n constructor(slot) {\n this.slot = slot;\n this.hide();\n this.slot.classList.add('ed-progress-bar');\n }\n show() {\n this.slot.style.removeProperty('display');\n }\n hide() {\n this.slot.style.display = 'none';\n }\n}\n\nclass EasyDataServerLoader {\n constructor(context) {\n this.context = context;\n }\n loadChunk(params) {\n const url = this.context.resolveEndpoint('FetchDataset', { sourceId: params.sourceId || this.context.getActiveEntity().id });\n delete params.sourceId;\n this.context.startProcess();\n const http = this.context.getHttpClient();\n return http.post(url, params)\n .then((result) => {\n const dataTable = new EasyDataTable({\n chunkSize: 1000\n });\n const resultSet = result.resultSet;\n for (const col of resultSet.cols) {\n dataTable.columns.add(col);\n }\n for (const row of resultSet.rows) {\n dataTable.addRow(row);\n }\n let totalRecords = 0;\n if (result.meta && result.meta.totalRecords) {\n totalRecords = result.meta.totalRecords;\n }\n return {\n table: dataTable,\n total: totalRecords,\n hasNext: !params.needTotal\n || params.offset + params.limit < totalRecords\n };\n })\n .finally(() => {\n this.context.endProcess();\n });\n }\n}\n\nclass DataContext {\n constructor(options) {\n this.endpoints = new Map();\n this.endpointVarsRegex = /\\{.*?\\}/g;\n this.options = options || {};\n this.http = new HttpClient();\n this.model = new MetaData();\n this.model.id = options.metaDataId || '__default';\n this.dataLoader = new EasyDataServerLoader(this);\n const dataTableOptions = Object.assign({ loader: this.dataLoader }, options.dataTable);\n this.data = new EasyDataTable(dataTableOptions);\n this.setDefaultEndpoints(this.options.endpoint || '/api/easydata');\n }\n getActiveEntity() {\n return this.activeEntity;\n }\n setActiveSource(entityId) {\n this.activeEntity = this.model.getRootEntity().subEntities\n .filter(e => e.id == entityId)[0];\n }\n getMetaData() {\n return this.model;\n }\n getData() {\n return this.data;\n }\n getDataLoader() {\n return this.dataLoader;\n }\n createFilter(sourceId, data, isLookup) {\n return new TextDataFilter(this.dataLoader, data || this.getData(), sourceId || this.activeEntity.id, isLookup);\n }\n loadMetaData() {\n const url = this.resolveEndpoint('GetMetaData');\n this.startProcess();\n return this.http.get(url)\n .then(result => {\n if (result.model) {\n this.model.loadFromData(result.model);\n }\n return this.model;\n })\n .catch(error => {\n console.error(`Error: ${error.message}. Source: ${error.sourceError}`);\n return null;\n })\n .finally(() => {\n this.endProcess();\n });\n }\n getHttpClient() {\n return this.http;\n }\n fetchDataset() {\n this.data.clear();\n return this.dataLoader.loadChunk({ offset: 0, limit: this.data.chunkSize, needTotal: true })\n .then(result => {\n for (const col of result.table.columns.getItems()) {\n this.data.columns.add(col);\n }\n this.data.setTotal(result.total);\n for (const row of result.table.getCachedRows()) {\n this.data.addRow(row);\n }\n return this.data;\n });\n }\n fetchRecord(keys, sourceId) {\n const url = this.resolveEndpoint('FetchRecord', { sourceId: sourceId || this.activeEntity.id });\n this.startProcess();\n return this.http.get(url, { queryParams: keys })\n .finally(() => this.endProcess());\n }\n createRecord(obj, sourceId) {\n const url = this.resolveEndpoint('CreateRecord', { sourceId: sourceId || this.activeEntity.id });\n this.startProcess();\n return this.http.post(url, obj, { dataType: 'json' })\n .finally(() => this.endProcess());\n }\n updateRecord(obj, sourceId) {\n const url = this.resolveEndpoint('UpdateRecord', { sourceId: sourceId || this.activeEntity.id });\n this.startProcess();\n return this.http.post(url, obj, { dataType: 'json' })\n .finally(() => this.endProcess());\n }\n deleteRecord(obj, sourceId) {\n const url = this.resolveEndpoint('DeleteRecord', { sourceId: sourceId || this.activeEntity.id });\n this.startProcess();\n return this.http.post(url, obj, { dataType: 'json' })\n .finally(() => this.endProcess());\n }\n setEndpoint(key, value) {\n this.endpoints.set(key, value);\n }\n setEnpointIfNotExist(key, value) {\n if (!this.endpoints.has(key))\n this.endpoints.set(key, value);\n }\n resolveEndpoint(endpointKey, options) {\n options = options || {};\n let result = this.endpoints.get(endpointKey);\n if (!result) {\n throw endpointKey + ' endpoint is not defined';\n }\n let matches = result.match(this.endpointVarsRegex);\n if (matches) {\n for (let match of matches) {\n let opt = match.substring(1, match.length - 1);\n let optVal = options[opt];\n if (!optVal) {\n if (opt == 'modelId') {\n optVal = this.model.getId();\n }\n else if (opt == 'sourceId') {\n optVal = this.activeEntity.id;\n }\n else {\n throw `Parameter [${opt}] is not defined`;\n }\n }\n result = result.replace(match, optVal);\n }\n }\n return result;\n }\n startProcess() {\n if (this.options.onProcessStart)\n this.options.onProcessStart();\n }\n endProcess() {\n if (this.options.onProcessEnd)\n this.options.onProcessEnd();\n }\n setDefaultEndpoints(endpointBase) {\n this.setEnpointIfNotExist('GetMetaData', combinePath(endpointBase, 'models/{modelId}'));\n this.setEnpointIfNotExist('FetchDataset', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/fetch'));\n this.setEnpointIfNotExist('FetchRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/fetch'));\n this.setEnpointIfNotExist('CreateRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/create'));\n this.setEnpointIfNotExist('UpdateRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/update'));\n this.setEnpointIfNotExist('DeleteRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/delete'));\n }\n}\n\nclass TypeValidator extends Validator {\n constructor() {\n super();\n this.name = 'Type';\n }\n validate(attr, value) {\n if (!utils.IsDefinedAndNotNull(value) || value == '')\n return { successed: true };\n if (utils.isNumericType(attr.dataType)) {\n if (!utils.isNumeric(value))\n return {\n successed: false,\n messages: [i18n.getText('NumberError')]\n };\n if (utils.isIntType(attr.dataType)\n && !Number.isInteger(Number.parseFloat(value))) {\n return {\n successed: false,\n messages: [i18n.getText('IntNumberError')]\n };\n }\n }\n return { successed: true };\n }\n}\n\nclass RequiredValidator extends Validator {\n constructor() {\n super();\n this.name = 'Required';\n }\n validate(attr, value) {\n if (!attr.isNullable && (!utils.IsDefinedAndNotNull(value)\n || value === ''))\n return {\n successed: false,\n messages: [i18n.getText('RequiredError')]\n };\n return { successed: true };\n }\n}\n\nclass EntityDataView {\n constructor(slot, context, basePath, options) {\n this.slot = slot;\n this.context = context;\n this.basePath = basePath;\n this.options = {\n showFilterBox: true,\n showBackToEntities: true\n };\n this.defaultValidators = [new RequiredValidator(), new TypeValidator()];\n this.options = utils.assignDeep(this.options, options || {});\n this.dlg = new DefaultDialogService();\n const ent = this.context.getActiveEntity();\n if (!ent) {\n throw \"Can't find active entity for \" + window.location.pathname;\n }\n this.slot.innerHTML += `

    ${ent.captionPlural || ent.caption}

    `;\n if (this.options.showBackToEntities) {\n domel(this.slot)\n .addChild('a', b => b\n .attr('href', 'javascript:void(0)')\n .text(`← ${i18n.getText('BackToEntities')}`)\n .on('click', (e) => {\n e.preventDefault();\n setLocation(this.basePath);\n }));\n }\n this.renderGrid();\n }\n syncGridColumnHandler(column) {\n if (column.dataColumn) {\n const attr = this.context.getMetaData().getAttributeById(column.dataColumn.id);\n if (attr) {\n column.isVisible = attr.showOnView;\n }\n }\n }\n renderGrid() {\n this.context.fetchDataset()\n .then(result => {\n const gridSlot = document.createElement('div');\n this.slot.appendChild(gridSlot);\n gridSlot.id = 'Grid';\n let gridOptions = {\n slot: gridSlot,\n dataTable: result,\n paging: {\n pageSize: 15,\n allowPageSizeChange: true,\n pageSizeItems: [15, 30, 50, 100, 200]\n },\n showPlusButton: this.context.getActiveEntity().isEditable,\n plusButtonTitle: i18n.getText('AddRecordBtnTitle'),\n showActiveRow: false,\n onPlusButtonClick: this.addClickHandler.bind(this),\n onGetCellRenderer: this.manageCellRenderer.bind(this),\n onRowDbClick: this.rowDbClickHandler.bind(this),\n onSyncGridColumn: this.syncGridColumnHandler.bind(this)\n };\n const sourceOptions = this.options.grid || {};\n gridOptions = utils.assignDeep(gridOptions, sourceOptions);\n this.grid = new EasyGrid(gridOptions);\n if (this.options.showFilterBox) {\n let filterWidgetSlot;\n const filterBarDiv = domel('div')\n .addClass(`kfrm-form`)\n .setStyle('margin', '10px 0px')\n .addChild('div', b => filterWidgetSlot = b.toDOM()).toDOM();\n this.slot.insertBefore(filterBarDiv, gridSlot);\n const dataFilter = this.context.createFilter();\n this.filterWidget = new TextFilterWidget(filterWidgetSlot, this.grid, dataFilter);\n }\n });\n }\n manageCellRenderer(column, defaultRenderer) {\n if (column.isRowNum) {\n column.width = 110;\n return (value, column, cell, rowEl) => {\n const b = domel('div', cell)\n .addClass(`keg-cell-value`);\n if (this.context.getActiveEntity().isEditable) {\n b.addChild('a', b => b\n .attr('href', 'javascript:void(0)')\n .text(i18n.getText('EditBtn'))\n .on('click', (ev) => this.editClickHandler(ev, parseInt(rowEl.getAttribute('data-row-idx')))))\n .addChild('span', b => b.text(' | '))\n .addChild('a', b => b\n .attr('href', 'javascript:void(0)')\n .text(i18n.getText('DeleteBtn'))\n .on('click', (ev) => this.deleteClickHandler(ev, parseInt(rowEl.getAttribute('data-row-idx')))));\n }\n };\n }\n }\n addClickHandler() {\n const activeEntity = this.context.getActiveEntity();\n const form = new EntityEditFormBuilder(this.context)\n .onSubmit(() => dlg.submit())\n .build();\n form.useValidators(this.defaultValidators);\n const dlg = this.dlg.open({\n title: i18n.getText('AddDlgCaption')\n .replace('{entity}', activeEntity.caption),\n body: form.getHtml(),\n onSubmit: () => {\n if (!form.validate())\n return false;\n form.getData()\n .then(obj => this.context.createRecord(obj))\n .then(() => {\n return this.refreshData();\n })\n .catch((error) => {\n this.processError(error);\n });\n }\n });\n }\n editClickHandler(ev, rowIndex) {\n this.grid.getData().getRow(rowIndex)\n .then(row => {\n if (row) {\n this.showEditForm(row);\n }\n });\n }\n showEditForm(row) {\n const activeEntity = this.context.getActiveEntity();\n const form = new EntityEditFormBuilder(this.context, { isEditForm: true, values: row })\n .onSubmit(() => dlg.submit())\n .build();\n form.useValidators(this.defaultValidators);\n const dlg = this.dlg.open({\n title: i18n.getText('EditDlgCaption')\n .replace('{entity}', activeEntity.caption),\n body: form.getHtml(),\n onSubmit: () => {\n if (!form.validate())\n return false;\n form.getData()\n .then(obj => this.context.updateRecord(obj))\n .then(() => {\n return this.refreshData();\n })\n .catch((error) => {\n this.processError(error);\n });\n }\n });\n }\n rowDbClickHandler(ev) {\n if (this.context.getActiveEntity().isEditable) {\n this.showEditForm(ev.row);\n }\n }\n deleteClickHandler(ev, rowIndex) {\n this.grid.getData().getRow(rowIndex)\n .then(row => {\n if (row) {\n const activeEntity = this.context.getActiveEntity();\n const keyAttrs = activeEntity.getPrimaryAttrs();\n const keyVals = keyAttrs.map(attr => row.getValue(attr.id));\n const keys = keyAttrs.reduce((val, attr, index) => {\n const property = attr.id.substring(attr.id.lastIndexOf('.') + 1);\n val[property] = keyVals[index];\n return val;\n }, {});\n this.dlg.openConfirm(i18n.getText('DeleteDlgCaption')\n .replace('{entity}', activeEntity.caption), i18n.getText('DeleteDlgMessage')\n .replace('{recordId}', Object.keys(keys)\n .map(key => `${key}:${keys[key]}`).join(';')))\n .then((result) => {\n if (result) {\n this.context.deleteRecord(keys)\n .then(() => {\n return this.refreshData();\n })\n .catch((error) => {\n this.processError(error);\n });\n }\n });\n }\n });\n }\n processError(error) {\n this.dlg.open({\n title: 'Ooops, something went wrong',\n body: error.message,\n closable: true,\n cancelable: false\n });\n }\n refreshData() {\n return this.context.fetchDataset()\n .then(() => {\n let processed = false;\n if (this.filterWidget) {\n processed = this.filterWidget.applyFilter(false);\n }\n if (!processed) {\n this.grid.refresh();\n }\n });\n }\n}\n\nclass RootDataView {\n constructor(slot, context, basePath, options) {\n this.slot = slot;\n this.context = context;\n this.basePath = basePath;\n this.options = {\n usePluralNames: true\n };\n this.metaData = this.context.getMetaData();\n this.slot.innerHTML += `

    ${i18n.getText('RootViewTitle')}

    `;\n utils.assign(this.options, options);\n this.renderEntitySelector();\n }\n renderEntitySelector() {\n const entities = this.metaData.getRootEntity().subEntities;\n if (this.slot) {\n domel(this.slot)\n .addChild('div', b => b\n .addClass('ed-root')\n .addChild('div', b => b\n .addClass('ed-menu-description')\n .addText(i18n.getText(!this.metaData.isEmpty() ? 'EntityMenuDesc' : 'ModelIsEmpty')))\n .addChild('ul', b => {\n b.addClass('ed-entity-menu');\n entities.forEach(ent => {\n const entCaption = this.options.usePluralNames && ent.captionPlural\n ? ent.captionPlural\n : ent.caption;\n b.addChild('li', b => {\n b.addClass('ed-entity-item')\n .on('click', () => {\n setLocation(`${this.basePath}/${decodeURIComponent(ent.id)}`);\n })\n .addChild('div', b => {\n b.addClass('ed-entity-item-caption')\n .addText(entCaption);\n });\n if (ent.description) {\n b.addChild('div', b => {\n b.addClass('ed-entity-item-descr')\n .addText(`${ent.description}`);\n });\n }\n });\n });\n }));\n }\n }\n}\n\nclass EasyDataViewDispatcher {\n constructor(options) {\n this.options = {\n container: '#EasyDataContainer',\n basePath: 'easydata'\n };\n this.onSetLocation = () => {\n this.setActiveView();\n };\n this.attach = () => {\n window.addEventListener('ed_set_location', this.onSetLocation);\n window.addEventListener('popstate', this.onSetLocation);\n };\n this.options = utils.assign(this.options, options || {});\n if (this.options.rootEntity) {\n this.options.showBackToEntities = false;\n this.basePath = '/';\n }\n else {\n this.basePath = this.normalizeBasePath(this.options.basePath);\n }\n this.setContainer(this.options.container);\n const progressBarSlot = document.createElement('div');\n const bar = new ProgressBar(progressBarSlot);\n const parent = this.container.parentElement;\n parent.insertBefore(progressBarSlot, parent.firstElementChild);\n this.context = new DataContext({\n endpoint: this.options.endpoint,\n dataTable: this.options.dataTable,\n onProcessStart: () => bar.show(),\n onProcessEnd: () => bar.hide()\n });\n }\n normalizeBasePath(basePath) {\n basePath = this.trimSlashes(basePath);\n const fullPath = decodeURIComponent(window.location.pathname);\n const idx = fullPath.toLocaleLowerCase().indexOf(basePath);\n return idx >= 0 ? fullPath.substring(0, idx + basePath.length) : '/';\n }\n trimSlashes(path) {\n return path.replace(/^\\/|\\/$/g, '');\n }\n setContainer(container) {\n if (!container) {\n throw 'Container is undefined';\n }\n if (typeof container === 'string') {\n if (container.length) {\n if (container[0] === '.') {\n const result = document.getElementsByClassName(container.substring(1));\n if (result.length)\n this.container = result[0];\n }\n else {\n if (container[0] === '#') {\n container = container.substring(1);\n }\n this.container = document.getElementById(container);\n }\n if (!this.container) {\n throw Error('Unrecognized `container` parameter: ' + container + '\\n'\n + 'It must be an element ID, a class name (starting with .) or an HTMLElement object itself.');\n }\n }\n }\n else {\n this.container = container;\n }\n }\n getActiveSourceId() {\n if (this.options.rootEntity)\n return this.options.rootEntity;\n const path = decodeURIComponent(window.location.pathname);\n const idIndex = this.basePath.length + 1;\n return idIndex < path.length ? path.substring(idIndex) : null;\n }\n run() {\n this.attach();\n return this.context.loadMetaData()\n .then(() => {\n this.setActiveView();\n })\n .catch(error => console.error(error));\n }\n setActiveView() {\n this.clear();\n const sourceId = this.getActiveSourceId();\n if (sourceId) {\n this.context.setActiveSource(sourceId);\n window['EDView'] = new EntityDataView(this.container, this.context, this.basePath, this.options);\n }\n else {\n const rootViewOptions = {};\n if (typeof this.options.usePluralNames !== 'undefined') {\n rootViewOptions.usePluralNames = this.options.usePluralNames;\n }\n window['EDView'] = new RootDataView(this.container, this.context, this.basePath, rootViewOptions);\n }\n }\n clear() {\n this.container.innerHTML = '';\n this.context.getData().clear();\n }\n detach() {\n window.removeEventListener('ed_set_location', this.onSetLocation);\n window.removeEventListener('popstate', this.onSetLocation);\n }\n}\n\nfunction addEasyDataCRUDTexts() {\n i18n.updateDefaultTexts({\n RequiredError: 'Value is required.',\n NumberError: 'Value should be a number',\n IntNumberError: 'Value should be an integer number',\n DateTimeError: 'Invalid date or time value',\n LookupSelectedItem: 'Selected item: ',\n LookupDlgCaption: 'Select {entity}',\n None: 'None',\n NavigationBtnTitle: 'Navigation values',\n CalendarBtnTitle: 'Open calendar',\n TimerBtnTitle: 'Open timer',\n AddBtnTitle: 'Add',\n AddRecordBtnTitle: 'Add record',\n EditBtn: 'Edit',\n DeleteBtn: 'Delete',\n SelectLink: '[ select ]',\n AddDlgCaption: 'Create {entity}',\n EditDlgCaption: 'Edit {entity}',\n DeleteDlgCaption: 'Delete {entity}',\n DeleteDlgMessage: 'Are you sure you want to remove this record: {{recordId}}?',\n EntityMenuDesc: 'Click on an entity to view/edit its content',\n BackToEntities: 'Back to entities',\n SearchBtn: 'Search',\n SearchInputPlaceholder: 'Search...',\n RootViewTitle: 'Entities',\n ModelIsEmpty: 'No entity was found.'\n });\n}\naddEasyDataCRUDTexts();\n\nexport { DataContext, EasyDataServerLoader, EasyDataViewDispatcher, EntityDataView, EntityEditForm, EntityEditFormBuilder, ProgressBar, RequiredValidator, RootDataView, TextDataFilter, TextFilterWidget, TypeValidator, Validator };\n",null],"names":["styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","DataType","EntityAttrKind","EditorTag","HttpMethod","utils","i18n","ColumnAlignment","liquid","browserUtils","HttpRequest","constructor","xhr","descriptor","this","method","url","headers","queryParams","data","setHeader","name","value","setQueryParam","getXMLHttpRequest","getResponseHeaders","readyState","HEADERS_RECEIVED","arr","getAllResponseHeaders","trim","split","headerMap","line","parts","header","shift","join","open","UNSENT","Object","keys","length","encodeURI","map","param","setRequestHeader","abort","getAllDataTypes","values","filter","item","getDateDataTypes","Time","Date","DateTime","getStringDataTypes","String","Memo","FixedChar","_numericTypes","Byte","Word","Int32","Int64","Float","Currency","Autoinc","getNumericDataTypes","_intTypes","assignDeepCore","hashSet","target","sources","source","hasOwnProperty","key","sourceVal","endsWith","HTMLElement","has","get","Array","isArray","createArrayFrom","set","create","getPrototypeOf","collection","result","push","assign","args","i","assignDeep","WeakMap","getIfDefined","defaultValue","IsDefinedAndNotNull","copyArrayTo","collection1","collection2","len1","len2","findItemById","array","id","arrLength","idx","findItemIndexById","indexOfArrayItem","indexOf","len","moveArrayItem","index1","index2","splice","removeArrayItem","index","insertArrayItem","fillArray","start","end","relativeStart","k","Math","max","min","relativeEnd","undefined","final","shiftToFitWindow","absLeft","width","body","winWidth","window","innerWidth","documentElement","clientWidth","absRight","isObject","val","isNumericType","dtype","isIntType","isNumeric","isNaN","parseFloat","isFinite","areCompatibleDataTypes","type1","type2","Unknown","isPropSet","obj","propName","toLowerCase","toUpperCase","symbols","squeeze","str","maxlen","step","ch","nextIndex","getRandomInt","floor","random","safeParseInt","res","parseInt","generateId","prefix","prfx","pml","ptt","squeezeMoniker","randCharPart","randInt","targetBase","buffer","rest","intToNumBase","getTime","strToDateTime","format","normalizedValue","replace","formatItems","dateItems","monthIndex","dayIndex","yearIndex","hourIndex","minutesIndex","secondsIndex","today","year","getFullYear","month","getMonth","day","getDate","getDaysInMonth","hour","minute","second","_a","strToTime","timeItems","HttpActionResult","request","promise","getPromise","getRequest","then","onfulfilled","onrejected","catch","onfinally","finally","HttpResponseError","Error","status","message","super","setPrototypeOf","prototype","HttpClient","responseBody","_responseBody","defaultHeaders","customPayload","options","send","Get","post","Post","put","Put","Delete","dataType","contentType","XMLHttpRequest","desc","beforeEachRequest","console","warn","onRequest","dataToSend","JSON","stringify","Promise","resolve","reject","responseType","onerror","error","responseText","onreadystatechange","responseContentType","getResponseHeader","responseObj","response","parse","onResponse","decodeArrayBuffer","uintArray","reader","FileReader","onloadend","DONE","readAsText","Blob","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","mapper","getCurrentLocale","setCurrentLocale","newLocale","getLocaleSettings","updateLocaleSettings","settingsToUpdate","updateLocaleInfo","localeInfo","localeInfoToUpdate","loadBrowserLocaleSettings","now","dateStr","toLocaleDateString","timeStr","toLocaleTimeString","dateFormat","timeFormat","determineSettingsByLocale","navigator","language","addMapper","getLocales","locale","sort","a","b","setLocale","l","getText","textsObj","resText","argLength","getOneLocaleSetting","getShortMonthName","monthNum","getLongMonthName","getShortWeekDayName","dayNum","toString","getLongWeekDayName","updateLocaleTexts","updateDefaultTexts","addLocale","resetLocales","DT_FORMAT_RGEX","dateTimeToStr","date","yearStr","getHours","getMinutes","getSeconds","hour12","isPm","matches","yyyy","yy","substring","MMMM","MMM","MM","M","dd","d","HH","H","hh","h","tt","mm","ss","match","$1","buildShortDateTimeFormat","localeSettings","buildLongDateTimeFormat","dateTimeToStrEx","dateTime","numberToStr","num","charAt","number","cachedSequenceFormats","v","Number","forEach","formatWithSequence","slice","toLocaleString","digits","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","getNumberFormatOptions","mask","reverse","convertWithMask","trunc","booleanToStr","bool","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","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","concat","clear","addDefaultValueEditors","ve","addOrUpdateValueEditor","getEntitiesTree","getEntitiesTreeWithFilter","getFullEntityPathByAttr","sep","getEntityPathByAttr","root","entityCaption","entityText","getAttributeText","attrText","entityPath","RegExp","runThroughEntities","getFirstAttributeByFilter","DataColumn","label","originAttrId","isAggr","groupFooterColumnTemplate","gfct","calculatedWidth","DataColumnList","_dateColumnIdx","count","add","colOrDesc","col","updateDateColumnIdx","getItems","move","newIndex","oldIndex","getIndex","getDateColumnIndexes","removeAt","removeDate","DataRow","columns","toArray","from","getValue","colIdOrIndex","RangeError","setValue","EasyDataTable","_chunkSize","_elasticChunks","cachedRows","total","loader","needTotal","isInMemory","chunkSize","elasticChunks","inMemory","_columns","onUpdate","colDesc","rows","rowData","row","createRow","addRow","getRows","params","fromIndex","pageSize","page","offset","limit","endIndex","loadChunk","apply","table","getCachedRows","getCachedCount","fireUpdated","getRow","getTotal","setTotal","dataOrRow","dateIdx","colId","column","mapDate","rowOrValues","newRow","cachedTotal","totalIsKnown","EasyGuid","newGuid","c","r","EventEmitter","silentMode","events","subscribe","eventType","callback","event","getEventRecByType","eventCallback","eventCallbacks","unsubscribe","callbackId","fire","postpone","force","eventRec","eqevent","emitAllFunc","setTimeout","enterSilentMode","exitSilentMode","isSilent","combinePath","path1","path2","getElementAbsolutePos","element","x","y","position","defaultBoundingClientRect","top","right","bottom","left","height","box","getBoundingClientRect","docElem","scollPos","pageYOffset","scrollTop","pageXOffset","scrollLeft","getScrollPos","clientTop","clientLeft","round","renderLiquidTemplate","template","vars","liquidVarRegexp","NaN","ceil","mobileModeChangeHandler","_isFirefox","isIE","ua","userAgent","includes","isEdge","isFirefox","_isMobileMode","_detectedIsMobileMode","detectIsMobileMode","oldValue","isMobileMode","matchMedia","newValue","addEventListener","setIsMobileMode","onMobileModeChanged","eqCssPrefix","DomElementBuilder","parentElement","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","addHtml","toDOM","appendTo","DomTextAreaElementBuilder","cols","DomInputElementBuilder","valueAsDate","valueAsNumber","maskPattern","input","inputHandler","e","mskd","startSelection","selectionStart","el","t","test","selectionEnd","keyCode","preventDefault","selection","onlyLodash","createEvent","initEvent","dispatchEvent","char","fromCharCode","charCode","DomSelectElementBuilder","addOption","option","selected","HTMLDivElement","HTMLSpanElement","HTMLAnchorElement","HTMLButtonElement","HTMLImageElement","HTMLInputElement","HTMLTextAreaElement","HTMLSelectElement","touchEventIsDefined","TouchEvent","DropEffect","EqDragEvent","dragImage","sourceEvent","dropEffect","Allow","pageX","pageY","MouseEvent","touches","Position","ev","eqDragManager","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","detectDragEnterEvent","dragEnterEvent","detectDragLeaveEvent","dragLeaveEvent","onDragOver","setCursorStyle","Forbid","cursor","children","pos","onDragEnter","containerPos","AutoResizeColumns","GridColumnAlign","GridColumn","grid","isRowNum","_label","_description","align","NONE","dataColumn","widthOptions","columnWidths","alignment","Left","LEFT","Center","CENTER","Right","RIGHT","MapAlignment","default","rowNumColumn","GridColumnList","columnList","sync","hasRowNumCol","rowNumCol","onSyncGridColumn","cssPrefix$1","DFMT_REGEX","CellRendererType","StringCellRendererDefault","cellValueElement","rowElement","NumberCellRendererDefault","strValue","_","DateTimeCellRendererDefault","isDate","call","timeOptions","BoolCellRendererDefault","GridCellRendererStore","renderers","defaultRenderers","registerRenderer","setDefaultRenderer","STRING","NUMBER","DATETIME","BOOL","getDefaultRenderer","columnType","cellType","getCellType","getDefaultRendererByType","rendererType","getRenderer","Bool","EasyGrid","cssPrefix","pagination","paginationOptions","maxButtonCount","useBootstrap","defaultDataGridOptions","slot","dataTable","fixHeightOnFirstRender","syncGridColumns","useRowNumeration","allowDragDrop","aggregates","calculator","paging","enabled","pageSizeItems","autoResize","Always","stringColumns","numberColumns","boolColumns","dateColumns","otherColumns","showPlusButton","viewportRowsCount","showActiveRow","rowsOnPagePromise","containerInitialHeight","firstRender","prevRowTotals","landingIndex","landingSlot","_activeRowIndex","mergeOptions","processColumnWidthsOptions","eventEmitter","cellRendererStore","setSlot","init","aggrOptions","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","bodyViewportDiv","sbHeight","getContainerWidth","reduce","sum","current","headerViewportDiv","headerCellContainerDiv","headerRowDiv","hd","renderColumnHeader","renderHeaderButtons","containerWidth","colBuilder","colDiv","attrLabel","showAggrs","canShowAggregates","showProgress","getRowsToRender","hideProgress","rowsToRender","groups","getGroups","updateTotalsState","tr","renderRow","showGrandTotalsOnEachPage","isLastPage","onViewportKeydown","bind","aggrSettings","hasAggregates","hasRecordCount","hasGroups","hasGrandTotals","isLast","changeLevel","level","group","compareValues","renderTotalsRow","applyGroupColumnTemplate","getAggregates","colIndex","renderCell","aggrContainer","getAggrContainer","aggrCols","buildGroupKey","getAggregateData","aggrColId","isLastGroupColumn","groupColIndex","aggrColIndex","groupFooterTemplate","COUNT_FIELD_NAME","cellDiv","rowCount","querySelectorAll","ensureRowVisibility","rowOrIndex","getDataRow","rowRect","viewportRect","rowTop","rowBottom","windowHeight","innerHeight","footerPaginateDiv","renderPageNavigator","pageInfoBlock","renderPageInfoBlock","pageInfoDiv","fistPageRecordNum","lastPageRecordNum","totalStr","getLocalIndexByGlobal","getGlobalIndexByLocal","indexGlobal","rowBuilder","rowIndex","colindex","cellElement","valueCell","cellRenderer","getCellRenderer","onGetCellRenderer","setPage","paginateDiv","totalRows","totalPages","buttonClickHandler","getAttribute","renderPaginationItem","pageIndex","content","disabled","extreme","active","li","newA","ul","userSelect","cell","allowPageSizeChange","selectChangeHandler","pageSizes","selectSize","sel","selOptions","selSet","Set","labelDiv","handler","handlerId","plusButtonTitle","colElems","rowElem","display","landingPos","newLandingIndex","colPos","updateActiveRow","activeRow","getActiveRow","visibility","sumWidth","headerCells","headerIdx","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","onDrawDay","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","DialogFooterAlignment","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","dialogService","currentDialog","currentIndex","getCurrent","openNext","openPrev","dlgOptions","PRE_SELECT","JUMP_TO","GridPageInfo","GridItemsPerPage","ButtonApply","ButtonNow","LblTotal","TimeSpanPicker","setupDialog","to","weekStart","append","drawDialog","calendar1","calendar2","alignDate","finish","represent","setSeconds","setMilliseconds","select","THIS_WEEK","LAST_WEEK","THIS_MONTH","FIRST_MONTH","LAST_MONTH","THIS_YEAR","QUARTER_1","QUARTER_2","QUARTER_3","QUARTER_4","UNDEF","TODAY","YESTERDAY","TOMORROW","WEEK_START","WEEK_END","MONTH_START","MONTH_END","YEAR_START","YEAR_END","cal","jumpTo","curr","interval","constants","Today","Yesterday","Tomorrow","FirstDayOfMonth","LastDayOfMonth","FirstDayOfWeek","FirstDayOfYear","FirstDayOfNextWeek","FirstDayOfNextMonth","FirstDayOfNextYear","log","showTimeSpanPicker","TextDataFilter","sourceTable","sourceId","isLookup","filterValue","justServerSide","applyCore","filters","class","lookup","filteredTable","applyInMemoryFilter","words","w","suitableColumns","hasEnterance","normalized","word","internalDateFormat","internalTimeFormat","getEditDateTimeFormat","setLocation","path","state","history","pushState","Event","Validator","DateTimeValidator","validate","successed","editFormat","messages","EntityEditForm","context","validators","getHtml","setHtmlInt","errorsDiv","clearErrors","inputs","isValid","getMetaData","validateValue","markInputValid","filePromises","property","lastIndexOf","checked","fileToBase64","files","mapValue","all","file","readAsDataURL","onload","useValidator","validator","useValidators","internalFormat","valid","TextFilterWidget","instantMode","instantTimeout","stringDefRenderer","highlightCellRenderer","numDefRenderer","horizClass","isEdgeOrIE","filterInput","inputKeydownHandler","inputKeyupHandler","clearButtonClickHander","searchButtonClickHandler","applyFilter","applyFilterTimeout","clearTimeout","checkChange","defaultRenderer","highlightText","normalizedContent","indexInMas","lowerWord","highlightSpan","backgroundColor","item1","item2","addDelta","div","EntityEditFormBuilder","reset","form","setupLookupField","readOnly","inputEl","resolveInputType","lookupTable","chunkParams","getDataLoader","ds","widgetSlot","gridSlot","selectedSlot","selectedValue","updateSelectedValue","fetchRecord","lookupGrid","dataFilter","createFilter","setupDateTimeField","hidden","applySumbit","pickerOptions","dtp","setupListField","setupFileField","setupTextField","setupTextArea","addFormField","Lookup","isEditForm","resolveEditor","required","sumbitCallback","build","fb","formHtml","getActiveEntity","ProgressBar","EasyDataServerLoader","resolveEndpoint","startProcess","getHttpClient","resultSet","totalRecords","meta","hasNext","endProcess","DataContext","endpoints","endpointVarsRegex","http","metaDataId","dataLoader","dataTableOptions","setDefaultEndpoints","endpoint","activeEntity","setActiveSource","entityId","loadMetaData","sourceError","fetchDataset","createRecord","updateRecord","deleteRecord","setEndpoint","setEnpointIfNotExist","endpointKey","opt","optVal","onProcessStart","onProcessEnd","endpointBase","TypeValidator","isInteger","RequiredValidator","EntityDataView","basePath","showFilterBox","showBackToEntities","defaultValidators","location","pathname","renderGrid","syncGridColumnHandler","gridOptions","addClickHandler","manageCellRenderer","rowDbClickHandler","sourceOptions","filterWidgetSlot","filterBarDiv","filterWidget","rowEl","editClickHandler","deleteClickHandler","refreshData","processError","showEditForm","keyAttrs","keyVals","processed","RootDataView","usePluralNames","metaData","renderEntitySelector","entities","entCaption","decodeURIComponent","EasyDataViewDispatcher","onSetLocation","setActiveView","attach","normalizeBasePath","setContainer","progressBarSlot","bar","trimSlashes","fullPath","toLocaleLowerCase","getActiveSourceId","idIndex","run","rootViewOptions","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","globalThis","showPicker","showPickerWithPreset","crud.EasyDataViewDispatcher"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file