@easydata/crud 1.4.13 → 1.4.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/browser/easydata.css +2184 -2181
  2. package/dist/browser/easydata.css.map +1 -1
  3. package/dist/browser/easydata.js +10890 -11626
  4. package/dist/browser/easydata.js.map +1 -1
  5. package/dist/browser/easydata.min.css +3 -1
  6. package/dist/browser/easydata.min.js +1 -1
  7. package/dist/browser/easydata.min.js.map +1 -1
  8. package/dist/bundles/easydata.crud.js +8442 -8439
  9. package/dist/bundles/easydata.crud.js.map +1 -1
  10. package/dist/bundles/easydata.crud.min.js +1 -1
  11. package/dist/bundles/easydata.crud.min.js.map +1 -1
  12. package/dist/lib/filter/data_filter.d.ts +6 -6
  13. package/dist/lib/filter/data_filter.js +1 -0
  14. package/dist/lib/filter/text_data_filter.d.ts +16 -16
  15. package/dist/lib/filter/text_data_filter.js +122 -122
  16. package/dist/lib/form/entity_edit_form.d.ts +20 -20
  17. package/dist/lib/form/entity_edit_form.js +133 -133
  18. package/dist/lib/form/entity_edit_form.js.map +1 -1
  19. package/dist/lib/form/entity_form_builder.d.ts +27 -27
  20. package/dist/lib/form/entity_form_builder.js +440 -440
  21. package/dist/lib/form/entity_form_builder.js.map +1 -1
  22. package/dist/lib/i18n/text_resources.d.ts +1 -1
  23. package/dist/lib/i18n/text_resources.js +31 -31
  24. package/dist/lib/main/data_context.d.ts +45 -45
  25. package/dist/lib/main/data_context.js +167 -167
  26. package/dist/lib/main/data_context.js.map +1 -1
  27. package/dist/lib/main/easy_data_server_loader.d.ts +11 -11
  28. package/dist/lib/main/easy_data_server_loader.js +43 -43
  29. package/dist/lib/public_api.d.ts +16 -16
  30. package/dist/lib/public_api.js +16 -14
  31. package/dist/lib/public_api.js.map +1 -1
  32. package/dist/lib/utils/utils.d.ts +4 -4
  33. package/dist/lib/utils/utils.js +24 -24
  34. package/dist/lib/utils/utils.js.map +1 -1
  35. package/dist/lib/validators/datetime_validator.d.ts +6 -6
  36. package/dist/lib/validators/datetime_validator.js +45 -43
  37. package/dist/lib/validators/datetime_validator.js.map +1 -1
  38. package/dist/lib/validators/required_validator.d.ts +6 -6
  39. package/dist/lib/validators/required_validator.js +36 -34
  40. package/dist/lib/validators/required_validator.js.map +1 -1
  41. package/dist/lib/validators/type_validator.d.ts +6 -6
  42. package/dist/lib/validators/type_validator.js +46 -44
  43. package/dist/lib/validators/type_validator.js.map +1 -1
  44. package/dist/lib/validators/validator.d.ts +9 -9
  45. package/dist/lib/validators/validator.js +6 -6
  46. package/dist/lib/views/easy_data_view_dispatcher.d.ts +18 -18
  47. package/dist/lib/views/easy_data_view_dispatcher.js +113 -113
  48. package/dist/lib/views/entity_data_view.d.ts +23 -23
  49. package/dist/lib/views/entity_data_view.js +224 -224
  50. package/dist/lib/views/entity_data_view.js.map +1 -1
  51. package/dist/lib/views/options.d.ts +14 -14
  52. package/dist/lib/views/options.js +1 -0
  53. package/dist/lib/views/root_data_view.d.ts +9 -9
  54. package/dist/lib/views/root_data_view.js +48 -48
  55. package/dist/lib/views/root_data_view.js.map +1 -1
  56. package/dist/lib/widgets/progress_bar.d.ts +6 -6
  57. package/dist/lib/widgets/progress_bar.js +15 -15
  58. package/dist/lib/widgets/text_filter_widget.d.ts +24 -24
  59. package/dist/lib/widgets/text_filter_widget.js +213 -213
  60. package/package.json +28 -27
  61. package/webpack.config.js +12 -9
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://easydataCRUD/webpack/universalModuleDefinition","webpack://easydataCRUD/webpack/bootstrap","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/utils/browser_utils.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/types/data_type.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/types/entity_attr_kind.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/types/editor_tag.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/http/http_method.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/http/http_request.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/i18n/i18n.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/utils/utils.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/utils/string_utils.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/http/http_action_result.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/http/http_client.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/data/data_column.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/meta/meta_entity.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/meta/value_editor.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/meta/meta_data.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/data/aggr_settings.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/utils/liquid.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/data/data_row.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/data/easy_data_table.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/utils/easy_guid.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/event/event_emitter.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/i18n/load_default_locale_settings.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/public_api.js","webpack://easydataCRUD/./src/filter/text_data_filter.ts","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/utils/ui-utils.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/utils/dom_elem_builder.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/utils/mask.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/utils/drag_manager.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_options.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_cell_renderer.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_columns.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/dialogs/dialog_service.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/calendar.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/date_time_picker.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_calendar.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/time_picker.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_time_picker.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_date_time_picker.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/dialogs/default_dialog_service.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/i18n/text_resources.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/public_api.js","webpack://easydataCRUD/./src/utils/utils.ts","webpack://easydataCRUD/./src/validators/validator.ts","webpack://easydataCRUD/./src/validators/datetime_validator.ts","webpack://easydataCRUD/./src/form/entity_edit_form.ts","webpack://easydataCRUD/./src/widgets/text_filter_widget.ts","webpack://easydataCRUD/./src/form/entity_form_builder.ts","webpack://easydataCRUD/./src/widgets/progress_bar.ts","webpack://easydataCRUD/./src/main/easy_data_server_loader.ts","webpack://easydataCRUD/./src/main/data_context.ts","webpack://easydataCRUD/./src/validators/type_validator.ts","webpack://easydataCRUD/./src/validators/required_validator.ts","webpack://easydataCRUD/./src/views/entity_data_view.ts","webpack://easydataCRUD/./src/views/root_data_view.ts","webpack://easydataCRUD/./src/views/easy_data_view_dispatcher.ts","webpack://easydataCRUD/./src/i18n/text_resources.ts"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","browserUtils","_isFirefox","_isIE","IsIE","ua","navigator","userAgent","indexOf","IsEdge","eval","IsFirefox","toLowerCase","_detectedIsMobileMode","_isMobileMode","undefined","detectIsMobileMode","oldValue","isMobileMode","matchMedia","matches","newValue","mobileModeChangeHandler","setIsMobileMode","onMobileModeChanged","callback","getMobileCssClass","addEventListener","DataType","EntityAttrKind","HttpMethod","EditorTag","HttpRequest","xhr","descriptor","this","method","url","headers","queryParams","data","setHeader","setQueryParam","getXMLHttpRequest","getResponseHeaders","readyState","HEADERS_RECEIVED","headerMap","_i","arr_1","getAllResponseHeaders","trim","split","length","parts","header","shift","join","open","_this","UNSENT","keys","encodeURI","map","param","setRequestHeader","abort","repeatString","str","times","result","combinePath","path1","path2","charAt","i18n","currentLocale","englishUSLocaleSettings","shortDateFormat","longDateFormat","editDateFormat","shortTimeFormat","editTimeFormat","longTimeFormat","shortMonthNames","longMonthNames","shortWeekDayNames","longWeekDayNames","decimalSeparator","currency","defaultLocale","localeId","englishName","displayName","texts","ButtonOK","ButtonCancel","Yes","No","True","False","settings","allLocales","mappers","mapInfo","info","mappers_1","mapper","getCurrentLocale","setCurrentLocale","newLocale","assignDeep","getLocaleSettings","updateLocaleSettings","settingsToUpdate","updateLocaleInfo","localeData","localeInfoToUpdate","loadBrowserLocaleSettings","now","dateStr","timeStr","dateFormat","timeFormat","lang","language","Date","toLocaleDateString","year","month","day","toLocaleTimeString","hour","minute","second","replace","buildShortDateTimeFormat","dataType","format","localeSettings","Time","buildLongDateTimeFormat","addMapper","push","getLocales","locale","sort","a","b","setLocale","console","warn","getText","args","arguments","textsObj","resText","argLength","getOneLocaleSetting","getShortMonthName","monthNum","getLongMonthName","getShortWeekDayName","dayNum","toString","getLongWeekDayName","updateLocaleTexts","error","updateDefaultTexts","addLocale","localeInfo","resetLocales","dateTimeToStr","dateTime","DateTime","numberToStr","number","type","toUpperCase","cachedSequenceFormats","values_2","filter","v","values_1","Number","parseInt","forEach","index","values","formatWithSequence","slice","toLocaleString","digits","style","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","getNumberFormatOptions","mask","ch","reverse","convertWithMask","Math","trunc","booleanToStr","bool","utils","getAllDataTypes","item","getDateDataTypes","getStringDataTypes","String","Memo","FixedChar","_numericTypes","Byte","Word","Int32","Int64","Float","Currency","Autoinc","getNumericDataTypes","_intTypes","assignDeepCore","hashSet","target","sources","sources_1","source","sourceVal","has","Array","isArray","createArrayFrom","set","getPrototypeOf","collection","collection_1","assign","WeakMap","getIfDefined","defaultValue","IsDefinedAndNotNull","copyArrayTo","collection1","collection2","len1","len2","findItemById","array","id","arrLength","idx","findItemIndexById","indexOfArrayItem","arr","len","moveArrayItem","index1","index2","splice","removeArrayItem","insertArrayItem","fillArray","start","end","relativeStart","k","max","min","relativeEnd","final","shiftToFitWindow","absLeft","width","body","document","getElementsByTagName","winWidth","innerWidth","documentElement","clientWidth","absRight","isObject","val","isNumericType","dtype","isIntType","isNumeric","isNaN","parseFloat","isFinite","areCompatibleDataTypes","type1","type2","Unknown","isPropSet","obj","propName","prefixIdLen","symbols","magicTicks","squeeze","maxlen","step","nextIndex","replaceAtString","substr","getRandomInt","floor","random","safeParseInt","res","generateId","prefix","prfx","pml","ptt","squeezeMoniker","randValue","maxSymbolIndex","targetBase","buffer","rest","intToNum36","getTime","strToDateTime","normalizedValue","formatItems","dateItems","monthIndex","dayIndex","yearIndex","hourIndex","minutesIndex","secondsIndex","today","getFullYear","getMonth","getDate","getDaysInMonth","_a","strToTime","timeItems","DT_FORMAT_RGEX","date","yearStr","getHours","getMinutes","getSeconds","hour12","isPm","yyyy","yy","substring","MMMM","MMM","MM","M","dd","HH","H","hh","h","tt","mm","ss","match","$1","extendStatics","ColumnAlignment","HttpActionResult","request","promise","getPromise","getRequest","then","onfulfilled","onrejected","catch","finally","onfinally","__extends","setPrototypeOf","__proto__","__","constructor","__assign","apply","HttpResponseError","_super","status","message","Error","HttpClient","defaultHeaders","customPayload","_responseBody","configurable","options","send","Get","post","Post","put","Put","delete","Delete","contentType","XMLHttpRequest","desc","beforeEachRequest","onRequest","dataToSend","JSON","stringify","Promise","resolve","reject","responseType","onerror","responseText","onreadystatechange","responseContentType","getResponseHeader","responseObj","response","parse","onResponse","decodeArrayBuffer","uintArray","reader","FileReader","onloadend","DONE","readAsText","Blob","MetaEntity","parent","isEditable","caption","description","attributes","subEntities","loadFromData","model","dto","captionPlural","namePlur","ied","ents","newEntity","createEntity","attrs","newAttr","createEntityAttr","scan","processAttribute","processEntity","opts","stop","internalProcessEntity","entity","attrCount","attr","subEntityCount","getFirstPrimaryAttr","getPrimaryAttrs","isPrimaryKey","MetaEntityAttr","size","isForeignKey","isNullable","showOnView","showOnCreate","showOnEdit","showInLookup","lookupAttr","expr","kind","Data","cptn","ipk","ifk","lattr","lookupEntity","lent","dataAttr","dattr","lookupDataAttr","ldattr","isDataType","defVal","nul","ivis","sov","soc","soe","sil","displayFormat","dfmt","udata","userData","edtr","defaultEditor","getEditorById","createValueEditor","ValueEditor","tag","resType","defValue","defval","rtype","accept","multiline","subType","getValueText","text","_b","_c","MetaData","mainEntity","rootEntity","displayFormats","Map","getMainEntity","loadFromJSON","stringJson","version","vers","editors","newEditor","entroot","dtypeStr","formats","getDisplayFormats","getDisplayFormatsForType","getDefaultFormat","f","isdef","setData","isEmpty","getId","getName","getRootEntity","editorId","editor","getAttributeById","attrId","getEntityAttrById","checkAttrProperty","attribute","listByEntityWithFilter","filterFunc","ent","entIdx","newEnt","items","isEntity","attrIdx","listByEntity","resultEntities","resultAttributes","newOpts","includeRootData","sortCheck","sortEntities","attrPlacement","concat","clear","addDefaultValueEditors","addOrUpdateValueEditor","ve","getEntitiesTree","getEntitiesTreeWithFilter","getFullEntityPathByAttr","sep","getEntityPathByAttr","entityCaption","entityText","getAttributeText","attrText","entityPath","RegExp","runThroughEntities","getFirstAttributeByFilter","AggregationSettings","colStore","aggregates","groups","useGrandTotals","useRecordCount","_caseSensitiveGroups","COUNT_FIELD_NAME","updateCompareProc","compareValues","strictCompare","caseInsensitiveCompare","addGroup","cols","columns","getColumnIds","from","to","validateColumns","hasColumnsInUse","addAggregateColumn","colIndexOrId","funcId","colId","validateAggregate","addGrandTotals","addCounts","getGroups","grp","getInternalGroups","lastGroup","getAggregates","hasAggregates","hasGroups","hasGrandTotals","hasRecordCount","drop","caseSensitiveGroups","aggr","needAggrCalculation","saveToData","ugt","urc","csg","buildGroupKey","group","row","caseInsensitive","keyVal","getValue","value1","value2","liquid","label","originAttrId","isAggr","groupFooterColumnTemplate","gfct","calculatedWidth","DataColumnList","_dateColumnIdx","add","colOrDesc","col","updateDateColumnIdx","getItems","count","move","newIndex","oldIndex","getIndex","getDateColumnIndexes","removeAt","removeDate","DataRow","toArray","colIdOrIndex","RangeError","setValue","EasyDataTable","_chunkSize","_elasticChunks","cachedRows","total","loader","needTotal","isInMemory","chunkSize","elasticChunks","inMemory","_columns","onUpdate","colDesc","rows","rowData","createRow","addRow","getRows","params","fromIndex","pageSize","page","offset","limit","endIndex","loadChunk","table","getCachedRows","getCachedCount","fireUpdated","getRow","getTotal","setTotal","dataOrRow","dateIdx","column","mapDate","rowOrValues","newRow","dateIdx_1","cachedTotal","totalIsKnown","EasyGuid","newGuid","EventEmitter","silentMode","events","subscribe","eventType","event","getEventRecByType","eventCallback","eventCallbacks","unsubscribe","callbackId","fire","postpone","force","eventRec","eqevent_1","emitAllFunc","setTimeout","enterSilentMode","exitSilentMode","isSilent","event_1","renderLiquidTemplate","template","vars","liquidVarRegexp","x","NaN","ceil","sourceTable","sourceId","isLookup","filterValue","justServerSide","applyCore","class","filters","lookup","filteredTable","applyInMemoryFilter","words","w","suitableColumns","hasEnterance","normalized","word","getElementAbsolutePos","element","y","position","box","defaultBoundingClientRect","top","right","bottom","left","height","getBoundingClientRect","docElem","scollPos","pageYOffset","scrollTop","pageXOffset","scrollLeft","getScrollPos","clientTop","clientLeft","round","eqCssPrefix","__spreadArrays","il","j","jl","DomElementBuilder","createElement","parentElement","appendChild","addChild","childBuilder","builder","domel","addChildElement","attrValue","setAttribute","focus","title","dataId","dataValue","removeAttribute","show","removeStyle","hide","toHide","setStyle","visible","isVisible","offsetWidth","offsetHeight","getClientRects","addClass","className","classNames","fullList","classList","removeClass","remove","toggleClass","toggle","on","listener","eventTypes","off","removeEventListener","styleId","styleValue","setProperty","removeProperty","innerText","html","innerHTML","oldElem","tagName","replaceWith","addText","textEl","createTextNode","addHtml","toDOM","appendTo","DomTextAreaElementBuilder","DomInputElementBuilder","valueAsDate","valueAsNumber","maskPattern","input","inputHandler","e","mskd","startSelection","selectionStart","el","test","selectionEnd","keyCode","preventDefault","selection","onlyLodash","createEvent","initEvent","dispatchEvent","char","fromCharCode","charCode","mskd_1","selectionStart_1","selection_1","event_2","DomSelectElementBuilder","addOption","option","selected","HTMLDivElement","HTMLSpanElement","HTMLAnchorElement","HTMLButtonElement","HTMLImageElement","HTMLInputElement","HTMLTextAreaElement","HTMLSelectElement","DropEffect","touchEventIsDefined","TouchEvent","AutoResizeColumns","EqDragEvent","dragImage","sourceEvent","dropEffect","Allow","pageX","pageY","MouseEvent","touches","Position","ev","eqDragManager","DragManager","delta","draggableItem","finishedSuccessfully","mouseDownPosition","containerDescriptors","containerDescriptorIndex","None","classPrefix","DRAG_DISABLED_ATTR","registerDraggableItem","ondragstart","detectDragging","hasAttribute","stopPropagation","cursorPosition","abs","startDragging","mouseMoveEventListener","mouseMoveDragListener","beforeDragStart","cloneNode","renderer","updateCusror","updateImageClass","scope","updateDragItemPosition","onDragStart","mouseDownListener","mouseUpListener","endDraggind","dropContDesc","container","scopes","onDrop","onDragLeave","onDragEnd","removeChild","registerDropContainer","removeDropContainer","descriptorOrSlot","descs","descs_1","detectDragEnterEvent","dragEnterEvent","detectDragLeaveEvent","dragLeaveEvent","event_3","onDragOver","setCursorStyle","Forbid","cursor","children","pos","event_4","onDragEnter","event_5","containerPos","CellRendererType","cssPrefix","DFMT_REGEX","GridColumnAlign","StringCellRendererDefault","cellValueElement","rowElement","align","NONE","NumberCellRendererDefault","strValue","dataColumn","_","DateTimeCellRendererDefault","isDate","timeOptions","BoolCellRendererDefault","GridCellRendererStore","renderers","defaultRenderers","registerRenderer","setDefaultRenderer","STRING","NUMBER","DATETIME","BOOL","getDefaultRenderer","columnType","cellType","getCellType","getDefaultRendererByType","rendererType","getRenderer","Bool","DialogFooterAlignment","GridColumn","grid","isRowNum","_label","_description","widthOptions","columnWidths","alignment","Left","LEFT","Center","CENTER","Right","RIGHT","MapAlignment","default","cellRenderer","cellRendererStore","rowNumColumn","onGetCellRenderer","GridColumnList","columnList","sync","hasRowNumCol","rowNumCol","onSyncGridColumn","EasyGrid","pagination","paginationOptions","maxButtonCount","useBootstrap","defaultDataGridOptions","slot","dataTable","fixHeightOnFirstRender","syncGridColumns","useRowNumeration","allowDragDrop","calculator","paging","enabled","pageSizeItems","autoResize","Always","stringColumns","numberColumns","boolColumns","dateColumns","otherColumns","showPlusButton","viewportRowsCount","showActiveRow","rowsOnPagePromise","containerInitialHeight","firstRender","prevRowTotals","landingIndex","landingSlot","_activeRowIndex","mergeOptions","processColumnWidthsOptions","eventEmitter","setSlot","init","colWidthOptions","pagingOptions","knownTypes","getElementById","getElementsByClassName","onInit","onRowClick","onRowDbClick","onPlusButtonClick","onColumnChanged","onColumnDeleted","onColumnMoved","onPageChanged","onActiveRowChanged","activeRowIndex","showLandingSlot","hideLandingSlot","refresh","fireEvent","columnId","getData","getColumns","destroy","clearDOM","render","hasData","clientHeight","rootDiv","renderHeader","headerDiv","renderBody","bodyDiv","renderFooter","footerDiv","gridContainer","needAutoResize","Never","updateHeight","resizeColumns","firstRow","bodyCellContainerDiv","firstElementChild","viewportHeight_1","bodyViewportDiv","sbHeight","getContainerWidth","reduce","sum","current","headerViewportDiv","headerCellContainerDiv","headerRowDiv","hd","renderColumnHeader","renderHeaderButtons","containerWidth","colBuilder","colDiv","attrLabel","showAggrs","canShowAggregates","showProgress","getRowsToRender","hideProgress","rowsToRender","groups_1","updateTotalsState","tr","renderRow","showGrandTotalsOnEachPage","isLastPage","onViewportKeydown","aggrSettings","isLast","changeLevel","level","renderTotalsRow","applyGroupColumnTemplate","colIndex","renderCell","aggrContainer","getAggrContainer","aggrCols","getAggregateData","aggrCols_1","aggrColId","isLastGroupColumn","groupColIndex","aggrColIndex","groupFooterTemplate","firstChild","cellDiv","rowCount","querySelectorAll","ensureRowVisibility","rowOrIndex","getDataRow","rowRect","viewportRect","rowTop","rowBottom","viewportHeight","windowHeight","innerHeight","footerPaginateDiv","renderPageNavigator","pageInfoBlock","renderPageInfoBlock","pageInfoDiv","fistPageRecordNum","lastPageRecordNum","totalStr","getLocalIndexByGlobal","getGlobalIndexByLocal","indexGlobal","rowBuilder","rowIndex","colindex","cellElement","valueCell","setPage","paginateDiv","prefix_1","buttonClickHandler_1","getAttribute","renderPageCell","pageIndex","content","disabled","extreme","active","li","a_1","newA","ul","cell","pageCount","zeroBasedIndex","firstPageIndex","lastPageIndex","allowPageSizeChange","pageSizes","selectSize","sel_1","selOptions","selSet","Set","labelDiv","handler","handlerId","plusButtonTitle","colElems","rowElem","display","landingPos","newLandingIndex","cols_1","colPos","insertBefore","updateActiveRow","activeRow","getActiveRow","visibility","sumWidth","headerCells","headerIdx","_loop_1","this_1","cellValues","maxWidth","whiteSpace","maxOption","minOption","Calendar","yearRange","setDate","currentDate","dateChanged","onDateChanged","DateTimePicker","calendar","timePicker","setDateTime","currentDateTime","setTime","getDateTime","showCalendar","createCalendar","showDateTimeInput","timePickerIsUsed","showTimePicker","oneClickDateSelection","dateTimeChanged","createTimePicker","onTimeChanged","time","setHours","setMinutes","anchor","beforeShow","onApply","cancel","onCancel","onDateTimeChanged","DefaultCalendar","daysOfWeek","months","calendarBody","isManualInputChanging","selectedMonth","selectedYear","rerenderMonth","renderManualDateInput","headerTextElem","renderCalendarButtons","getInputDateFormat","newDate","manualInputElem","jump","updateDisplayedDateValue","prev","selectMonthElem","selectYearElem","next","rerenderSelectYear","exec","minusYear","plusYear","op","firstDay","getDay","daysInMonth","setFullYear","setMonth","dayOfWeek","cellsDrawnInLastRow","cellsToDraw","TimePicker","currentTime","timeChanged","DefaultTimePicker","updateDisplayedTime","hoursInput","minutesInput","timeText","slidersBuilder","timeToDraw","DefaultDateTimePicker","sb","zIndex","renderButtons","globalMouseDownHandler","srcElement","contains","nowButton","submitButton","calendarSlot","timePickerSlot","anchorPos","parentPos","DefaultDialogService","openConfirm","closable","submitable","cancelable","onSubmit","openPrompt","submitOnEnter","arrangeParents","beforeOpen","processInput","dialog","onDestroy","dlg","untrack","track","createSet","DefaultDialogSet","openDialogs","openProgress","getAllDialogs","closeAllDialogs","close","DefaultDialog","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","DefaultProgressDialog","contentElement","progressElement","determinated","updateContent","updateProgress","progress","in01","num","dialogService","currentDialog","currentIndex","getCurrent","openNext","openPrev","dlgOptions","GridPageInfo","GridItemsPerPage","ButtonApply","ButtonNow","LblTotal","internalDateFormat","internalTimeFormat","getEditDateTimeFormat","setLocation","path","state","history","pushState","Event","validate","successed","editFormat","messages","Validator","context","validators","getHtml","setHtmlInt","errorsDiv","clearErrors","isValid","getMetaData","validateValue","markInputValid","filePromises","inputs","lastIndexOf","checked","fileToBase64","files","mapValue","all","file","readAsDataURL","onload","useValidator","useValidators","validator","internalFormat","valid","instantMode","instantTimeout","stringDefRenderer","highlightCellRenderer","numDefRenderer","horizClass","isEdgeOrIE","filterInput","inputKeydownHandler","inputKeyupHandler","clearButtonClickHander","searchButtonClickHandler","applyFilter","applyFilterTimeout","clearTimeout","checkChange","defaultRenderer","highlightText","HTMLElement","normalizedContent","indexInMas","lowerWord","highlightSpan","backgroundColor","item1","item2","addDelta","div","isIE","reset","form","setupLookupField","readOnly","inputEl","resolveInputType","lookupTable","chunkParams","getDataLoader","widgetSlot","ds","gridSlot","selectedSlot","selectedValue","updateSelectedValue","fetchRecord","lookupGrid","dataFilter","createFilter","setupDateTimeField","hidden","applySumbit","setSeconds","pickerOptions","setMilliseconds","dtp","setupListField","setupFileField","setupTextField","setupTextArea","addFormField","Lookup","isEditForm","resolveEditor","required","sumbitCallback","build","fb","formHtml","getActiveEntity","resolveEndpoint","startProcess","getHttpClient","resultSet","totalRecords","meta","hasNext","endProcess","endpoints","endpointVarsRegex","http","metaDataId","dataLoader","dataTableOptions","setDefaultEndpoints","endpoint","activeEntity","setActiveSource","entityId","loadMetaData","sourceError","fetchDataset","createRecord","updateRecord","deleteRecord","setEndpoint","setEnpointIfNotExist","endpointKey","opt","optVal","onProcessStart","onProcessEnd","endpointBase","isInteger","basePath","showFilterBox","showBackToEntities","defaultValidators","location","pathname","renderGrid","syncGridColumnHandler","addClickHandler","manageCellRenderer","rowDbClickHandler","filterBarDiv","filterWidget","rowEl","editClickHandler","deleteClickHandler","refreshData","processError","showEditForm","keyAttrs","processed","metaData","renderEntitySelector","entities","decodeURIComponent","onSetLocation","setActiveView","attach","normalizeBasePath","setContainer","progressBarSlot","bar","ProgressBar","trimSlashes","fullPath","toLocaleLowerCase","getActiveSourceId","idIndex","run","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"],"mappings":"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","file":"easydata.crud.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"easydataCRUD\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"easydataCRUD\"] = factory();\n\telse\n\t\troot[\"easydataCRUD\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","export var browserUtils;\r\n(function (browserUtils) {\r\n var _isFirefox = null;\r\n var _isIE = null;\r\n function IsIE() {\r\n // return eval('/*@cc_on!@*/false || !!document.documentMode');\r\n if (_isIE === null) {\r\n var ua = navigator.userAgent;\r\n /* MSIE used to detect old browsers and Trident used to newer ones*/\r\n _isIE = ua.indexOf(\"MSIE \") > -1 || ua.indexOf(\"Trident/\") > -1;\r\n }\r\n return _isIE;\r\n }\r\n browserUtils.IsIE = IsIE;\r\n function IsEdge() {\r\n return !IsIE() && eval('!!window.StyleMedia');\r\n }\r\n browserUtils.IsEdge = IsEdge;\r\n function IsFirefox() {\r\n if (_isFirefox === null) {\r\n var ua = navigator.userAgent;\r\n _isFirefox = ua.toLowerCase().indexOf('firefox') > -1;\r\n }\r\n return _isFirefox;\r\n }\r\n browserUtils.IsFirefox = IsFirefox;\r\n var _detectedIsMobileMode = false;\r\n var _isMobileMode = undefined;\r\n var detectIsMobileMode = function () {\r\n var oldValue = isMobileMode();\r\n _detectedIsMobileMode = window.matchMedia('only screen and (max-width: 840px)').matches\r\n || window.matchMedia('only screen and (max-height: 420px)').matches;\r\n var newValue = isMobileMode();\r\n if (newValue !== oldValue && mobileModeChangeHandler) {\r\n mobileModeChangeHandler(newValue);\r\n }\r\n };\r\n detectIsMobileMode();\r\n window.addEventListener('resize', function () { return detectIsMobileMode(); });\r\n function isMobileMode() {\r\n if (_isMobileMode !== undefined) {\r\n return _isMobileMode;\r\n }\r\n else {\r\n return _detectedIsMobileMode;\r\n }\r\n }\r\n browserUtils.isMobileMode = isMobileMode;\r\n function setIsMobileMode(value) {\r\n var oldValue = isMobileMode();\r\n _isMobileMode = value;\r\n var newValue = isMobileMode();\r\n if (newValue !== oldValue && mobileModeChangeHandler) {\r\n mobileModeChangeHandler(newValue);\r\n }\r\n }\r\n browserUtils.setIsMobileMode = setIsMobileMode;\r\n var mobileModeChangeHandler;\r\n function onMobileModeChanged(callback) {\r\n mobileModeChangeHandler = callback;\r\n }\r\n browserUtils.onMobileModeChanged = onMobileModeChanged;\r\n function getMobileCssClass() {\r\n return isMobileMode() ? 'k-mobile' : null;\r\n }\r\n browserUtils.getMobileCssClass = getMobileCssClass;\r\n})(browserUtils || (browserUtils = {}));\r\n//# sourceMappingURL=browser_utils.js.map","/** Represents the common types of the data. */\r\nexport var DataType;\r\n(function (DataType) {\r\n /** Unknown type value*/\r\n DataType[DataType[\"Unknown\"] = 0] = \"Unknown\";\r\n /** String value*/\r\n DataType[DataType[\"String\"] = 1] = \"String\";\r\n /** 8-bit integer value */\r\n DataType[DataType[\"Byte\"] = 2] = \"Byte\";\r\n /** 16-bit integer value */\r\n DataType[DataType[\"Word\"] = 3] = \"Word\";\r\n /** 32-bit integer value */\r\n DataType[DataType[\"Int32\"] = 4] = \"Int32\";\r\n /** 64-bit integer value */\r\n DataType[DataType[\"Int64\"] = 5] = \"Int64\";\r\n /** Boolean value */\r\n DataType[DataType[\"Bool\"] = 6] = \"Bool\";\r\n /** Floating-point numeric value */\r\n DataType[DataType[\"Float\"] = 7] = \"Float\";\r\n /** Money value */\r\n DataType[DataType[\"Currency\"] = 8] = \"Currency\";\r\n /** Binary-coded decimal value */\r\n DataType[DataType[\"BCD\"] = 9] = \"BCD\";\r\n /** Date value */\r\n DataType[DataType[\"Date\"] = 10] = \"Date\";\r\n /** Time value */\r\n DataType[DataType[\"Time\"] = 11] = \"Time\";\r\n /** Date and time value */\r\n DataType[DataType[\"DateTime\"] = 12] = \"DateTime\";\r\n /** Autoincrement 32-bit integer value */\r\n DataType[DataType[\"Autoinc\"] = 13] = \"Autoinc\";\r\n /** MEMO value (text with unlimited length) */\r\n DataType[DataType[\"Memo\"] = 14] = \"Memo\";\r\n /** BLOB value (any data with unlimited length) */\r\n DataType[DataType[\"Blob\"] = 15] = \"Blob\";\r\n /** Fixed character value */\r\n DataType[DataType[\"FixedChar\"] = 16] = \"FixedChar\";\r\n /** The unique identifier */\r\n DataType[DataType[\"Guid\"] = 17] = \"Guid\";\r\n /*-------- Spatial data types ----------*/\r\n /** Any geometry data */\r\n DataType[DataType[\"Geometry\"] = 18] = \"Geometry\";\r\n /** Any data that represents some geography objects</summary> */\r\n DataType[DataType[\"Geography\"] = 19] = \"Geography\";\r\n})(DataType || (DataType = {}));\r\n//# sourceMappingURL=data_type.js.map","export var EntityAttrKind;\r\n(function (EntityAttrKind) {\r\n EntityAttrKind[EntityAttrKind[\"Data\"] = 0] = \"Data\";\r\n EntityAttrKind[EntityAttrKind[\"Virtual\"] = 1] = \"Virtual\";\r\n EntityAttrKind[EntityAttrKind[\"Lookup\"] = 2] = \"Lookup\";\r\n})(EntityAttrKind || (EntityAttrKind = {}));\r\n//# sourceMappingURL=entity_attr_kind.js.map","export var EditorTag = {\r\n /** Unknown tag value */\r\n Unknown: \"Unknown\",\r\n /** Edit tag value */\r\n Edit: \"EDIT\",\r\n /** DateTime tag value */\r\n DateTime: \"DATETIME\",\r\n /** List tag value */\r\n List: \"LIST\",\r\n /** CustomList tag value */\r\n CustomList: \"CUSTOMLIST\",\r\n /** File tag value */\r\n File: \"FILE\"\r\n};\r\n//# sourceMappingURL=editor_tag.js.map","export var HttpMethod;\r\n(function (HttpMethod) {\r\n HttpMethod[\"Trace\"] = \"TRACE\";\r\n HttpMethod[\"Options\"] = \"OPTIONS\";\r\n HttpMethod[\"Get\"] = \"GET\";\r\n HttpMethod[\"Put\"] = \"PUT\";\r\n HttpMethod[\"Post\"] = \"POST\";\r\n HttpMethod[\"Delete\"] = \"DELETE\";\r\n})(HttpMethod || (HttpMethod = {}));\r\n//# sourceMappingURL=http_method.js.map","var HttpRequest = /** @class */ (function () {\r\n function HttpRequest(xhr, descriptor) {\r\n this.xhr = xhr;\r\n this.method = descriptor.method;\r\n this.url = descriptor.url;\r\n this.headers = descriptor.headers;\r\n this.queryParams = descriptor.queryParams;\r\n this.data = descriptor.data;\r\n }\r\n HttpRequest.prototype.setHeader = function (name, value) {\r\n this.headers[name] = value;\r\n };\r\n HttpRequest.prototype.setQueryParam = function (name, value) {\r\n this.queryParams[name] = value;\r\n };\r\n HttpRequest.prototype.getXMLHttpRequest = function () {\r\n return this.xhr;\r\n };\r\n HttpRequest.prototype.getResponseHeaders = function () {\r\n if (this.xhr.readyState == this.xhr.HEADERS_RECEIVED) {\r\n var headers = this.xhr.getAllResponseHeaders();\r\n var arr = headers.trim().split(/[\\r\\n]+/);\r\n // Create a map of header names to values\r\n var headerMap = {};\r\n for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) {\r\n var line = arr_1[_i];\r\n var parts = line.split(': ');\r\n var header = parts.shift();\r\n var value = parts.join(': ');\r\n headerMap[header] = value;\r\n }\r\n return headerMap;\r\n }\r\n return {};\r\n };\r\n HttpRequest.prototype.open = function () {\r\n var _this = this;\r\n if (this.xhr.readyState !== this.xhr.UNSENT)\r\n return;\r\n var url = this.url;\r\n if (this.queryParams && Object.keys(this.queryParams).length > 0) {\r\n url += encodeURI('?' + Object.keys(this.queryParams)\r\n .map(function (param) { return param + '=' + _this.queryParams[param]; })\r\n .join('&'));\r\n }\r\n this.xhr.open(this.method, url, true);\r\n this.xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\r\n for (var header in this.headers) {\r\n this.xhr.setRequestHeader(header, this.headers[header]);\r\n }\r\n };\r\n HttpRequest.prototype.abort = function () {\r\n this.xhr.abort();\r\n };\r\n return HttpRequest;\r\n}());\r\nexport { HttpRequest };\r\n//# sourceMappingURL=http_request.js.map","import { DataType } from '../types/data_type';\r\nimport { utils } from '../utils/utils';\r\n/**\r\n * Contains internatialization functionality.\r\n */\r\nexport var i18n;\r\n(function (i18n) {\r\n var englishUSLocaleSettings = {\r\n shortDateFormat: 'MM/dd/yyyy',\r\n longDateFormat: 'dd MMM, yyyy',\r\n editDateFormat: 'MM/dd/yyyy',\r\n shortTimeFormat: 'HH:mm',\r\n editTimeFormat: 'HH:mm',\r\n longTimeFormat: 'HH:mm:ss',\r\n shortMonthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n longMonthNames: ['January', 'February', 'March', 'April', 'May', 'June',\r\n 'July', 'August', 'September', 'October', 'November', 'December'],\r\n shortWeekDayNames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\r\n longWeekDayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n decimalSeparator: '.',\r\n currency: 'USD'\r\n };\r\n var defaultLocale = {\r\n localeId: 'en-US',\r\n englishName: 'English',\r\n displayName: 'English',\r\n texts: {\r\n ButtonOK: 'OK',\r\n ButtonCancel: 'Cancel',\r\n Yes: 'Yes',\r\n No: 'No',\r\n True: 'True',\r\n False: 'False'\r\n },\r\n settings: englishUSLocaleSettings\r\n };\r\n var allLocales = {\r\n 'en-US': defaultLocale\r\n };\r\n var currentLocale;\r\n var mappers = [];\r\n function mapInfo(info) {\r\n for (var _i = 0, mappers_1 = mappers; _i < mappers_1.length; _i++) {\r\n var mapper = mappers_1[_i];\r\n mapper(info);\r\n }\r\n }\r\n function addMapper(mapper) {\r\n mappers.push(mapper);\r\n }\r\n i18n.addMapper = addMapper;\r\n /**\r\n * Gets added locales with their names.\r\n * @returns The locales.\r\n */\r\n function getLocales() {\r\n var result = [];\r\n for (var locale in allLocales) {\r\n result.push({\r\n locale: locale,\r\n englishName: allLocales[locale].englishName,\r\n displayName: allLocales[locale].displayName\r\n });\r\n }\r\n return result.sort(function (a, b) {\r\n if (a.englishName > b.englishName) {\r\n return 1;\r\n }\r\n else if (a.englishName === b.englishName) {\r\n return 0;\r\n }\r\n return -1;\r\n });\r\n }\r\n i18n.getLocales = getLocales;\r\n /**\r\n * Gets the current locale ID.\r\n * @returns The locale.\r\n */\r\n function getCurrentLocale() {\r\n return currentLocale.localeId;\r\n }\r\n i18n.getCurrentLocale = getCurrentLocale;\r\n /**\r\n * Sets the curent locale.\r\n * @deprecated Use setCurrentLocale instead\r\n * @param l The locale.\r\n */\r\n function setLocale(l) {\r\n console.warn('This method is deprecated. Use setCurrentLocale instead');\r\n setCurrentLocale(l);\r\n }\r\n i18n.setLocale = setLocale;\r\n /**\r\n * Sets the curent locale.\r\n * @param localeId The locale.\r\n */\r\n function setCurrentLocale(localeId) {\r\n var newLocale = allLocales[localeId];\r\n if (newLocale) {\r\n utils.assignDeep(currentLocale, newLocale);\r\n }\r\n else {\r\n currentLocale.englishName = localeId;\r\n currentLocale.displayName = localeId;\r\n currentLocale.texts = utils.assignDeep({}, defaultLocale.texts);\r\n }\r\n currentLocale.localeId = localeId;\r\n }\r\n i18n.setCurrentLocale = setCurrentLocale;\r\n /**\r\n * Returns localized text by the key defined in parameter.\r\n * Here we get the text of the resource string assigned to CmdClickToAddCondition key:\r\n *\r\n ```\r\n const text = i18n.getText('CmdClickToAddCondition')\r\n ```\r\n * @param args The keys of the resource string.\r\n * @returns Text of the resource defined by key or null if the key is not found\r\n *\r\n */\r\n function getText() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var textsObj = currentLocale.texts;\r\n var resText = '';\r\n if (args && args.length) {\r\n var argLength = args.length;\r\n for (var i = 0; i < argLength; i++) {\r\n resText = textsObj[args[i]];\r\n if (typeof resText === 'object') {\r\n textsObj = resText;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n return resText;\r\n }\r\n i18n.getText = getText;\r\n function getLocaleSettings() {\r\n return currentLocale.settings;\r\n }\r\n i18n.getLocaleSettings = getLocaleSettings;\r\n function getOneLocaleSetting(key) {\r\n return currentLocale.settings[key];\r\n }\r\n i18n.getOneLocaleSetting = getOneLocaleSetting;\r\n function getShortMonthName(monthNum) {\r\n var settings = getLocaleSettings();\r\n if (monthNum > 0 && monthNum < 13) {\r\n return settings.shortMonthNames[monthNum - 1];\r\n }\r\n else {\r\n throw 'Wrong month number: ' + monthNum;\r\n }\r\n }\r\n i18n.getShortMonthName = getShortMonthName;\r\n function getLongMonthName(monthNum) {\r\n var settings = getLocaleSettings();\r\n if (monthNum > 0 && monthNum < 13) {\r\n return settings.longMonthNames[monthNum - 1];\r\n }\r\n else {\r\n throw 'Wrong month number: ' + monthNum;\r\n }\r\n }\r\n i18n.getLongMonthName = getLongMonthName;\r\n function getShortWeekDayName(dayNum) {\r\n var settings = getLocaleSettings();\r\n if (dayNum > 0 && dayNum < 8) {\r\n return settings.shortWeekDayNames.length >= dayNum\r\n ? settings.shortWeekDayNames[dayNum - 1]\r\n : dayNum.toString();\r\n }\r\n else {\r\n throw 'Wrong month number: ' + dayNum;\r\n }\r\n }\r\n i18n.getShortWeekDayName = getShortWeekDayName;\r\n function getLongWeekDayName(dayNum) {\r\n var settings = getLocaleSettings();\r\n if (dayNum > 0 && dayNum < 8) {\r\n return settings.longWeekDayNames.length >= dayNum\r\n ? settings.longWeekDayNames[dayNum - 1]\r\n : dayNum.toString();\r\n }\r\n else {\r\n throw 'Wrong month number: ' + dayNum;\r\n }\r\n }\r\n i18n.getLongWeekDayName = getLongWeekDayName;\r\n /**\r\n * Updates the locale settings (date/time formats, separators, etc) for the specified locale.\r\n * @param settingsToUpdate a LocaleSettings object\r\n */\r\n function updateLocaleSettings(settingsToUpdate) {\r\n if (!currentLocale.settings) {\r\n currentLocale.settings = utils.assignDeep({}, englishUSLocaleSettings);\r\n }\r\n currentLocale.settings = utils.assignDeep(currentLocale.settings, settingsToUpdate);\r\n }\r\n i18n.updateLocaleSettings = updateLocaleSettings;\r\n /**\r\n * Updates the texts for the current locale\r\n * @param texts A plain JS object that contains textual resources\r\n */\r\n function updateLocaleTexts(texts) {\r\n if (typeof texts !== 'object') {\r\n console.error('Wrong parameter type in updateLocaleTexts function call.' +\r\n 'The first parameter (localeId) is not necessary. Use updateLocaleTexts(texts) instead');\r\n return;\r\n }\r\n mapInfo({ localeId: currentLocale.localeId, texts: texts });\r\n utils.assignDeep(currentLocale.texts, texts);\r\n }\r\n i18n.updateLocaleTexts = updateLocaleTexts;\r\n function updateDefaultTexts(texts) {\r\n for (var localeId in allLocales) {\r\n var locale = allLocales[localeId];\r\n locale.texts = utils.assignDeep({}, texts, locale.texts);\r\n }\r\n currentLocale.texts = utils.assignDeep({}, texts, currentLocale.texts);\r\n }\r\n i18n.updateDefaultTexts = updateDefaultTexts;\r\n /**\r\n * Updates the information for the specified locale.\r\n * @param localeId The locale ID (like 'en', 'de', 'uk', etc).\r\n * If the locale does exist yet - it will be added\r\n * @param localeInfo a LocaleInfo object that contains the locale settings and textual resources\r\n */\r\n function updateLocaleInfo(localeId, localeData) {\r\n mapInfo(localeData);\r\n var localeInfoToUpdate = currentLocale;\r\n if (localeId) {\r\n if (!localeData.localeId) {\r\n localeData.localeId = localeId;\r\n }\r\n localeInfoToUpdate = allLocales[localeId];\r\n if (!localeInfoToUpdate) {\r\n localeInfoToUpdate = utils.assignDeep({}, defaultLocale);\r\n allLocales[localeId] = localeInfoToUpdate;\r\n }\r\n }\r\n utils.assignDeep(localeInfoToUpdate, localeData);\r\n }\r\n i18n.updateLocaleInfo = updateLocaleInfo;\r\n /**\r\n * Adds the locale.\r\n * @param localeId The locale ID (like 'en', 'de', 'uk', etc).\r\n * If the locale does exist yet - it will be created\r\n * @param localeInfo - a LocaleInfo object that contains the locale settings and textual resources\r\n */\r\n function addLocale(localeId, localeInfo) {\r\n updateLocaleInfo(localeId, localeInfo);\r\n }\r\n i18n.addLocale = addLocale;\r\n /**\r\n * Overwrites some locale settings (date/time formats) with the formats used in browser's current language\r\n */\r\n function determineSettingsByLocale(localeId) {\r\n var now = new Date(2020, 5, 7, 19, 34, 56, 88);\r\n var dateOptions = { year: 'numeric', month: 'numeric', day: 'numeric' };\r\n var timeOptions = { hour: 'numeric', minute: 'numeric', second: 'numeric' };\r\n var dateStr = now.toLocaleDateString(localeId, dateOptions);\r\n var timeStr = now.toLocaleTimeString(localeId, timeOptions);\r\n var dateFormat = dateStr\r\n .replace('07', 'dd')\r\n .replace('7', 'd')\r\n .replace('06', 'MM')\r\n .replace('6', 'M')\r\n .replace('2020', 'yyyy')\r\n .replace('20', 'yy');\r\n var timeFormat = timeStr\r\n .replace('19', 'HH')\r\n .replace('07', 'hh')\r\n .replace('7', 'h')\r\n .replace('34', 'mm')\r\n .replace('56', 'ss')\r\n .replace('PM', 'tt');\r\n if (!currentLocale.settings) {\r\n currentLocale.settings = {};\r\n }\r\n var localeSettings = {\r\n shortDateFormat: dateFormat,\r\n shortTimeFormat: timeFormat\r\n };\r\n updateLocaleSettings(localeSettings);\r\n }\r\n function loadBrowserLocaleSettings() {\r\n var lang = typeof navigator === 'object' ? navigator.language : undefined;\r\n determineSettingsByLocale(lang);\r\n }\r\n function resetLocales() {\r\n if (!currentLocale) {\r\n currentLocale = utils.assignDeep({}, defaultLocale);\r\n loadBrowserLocaleSettings();\r\n }\r\n }\r\n i18n.resetLocales = resetLocales;\r\n function dateTimeToStr(dateTime, dataType, format) {\r\n if (format) {\r\n if (format == 'd') {\r\n format = buildShortDateTimeFormat(DataType.Date);\r\n }\r\n else if (format == 'D') {\r\n format = buildLongDateTimeFormat(DataType.Date);\r\n }\r\n else if (format == 'f') {\r\n format = buildShortDateTimeFormat(DataType.DateTime);\r\n }\r\n else if (format == 'F') {\r\n format = buildLongDateTimeFormat(DataType.DateTime);\r\n }\r\n }\r\n else {\r\n format = buildShortDateTimeFormat(dataType);\r\n }\r\n return utils.dateTimeToStr(dateTime, format);\r\n }\r\n i18n.dateTimeToStr = dateTimeToStr;\r\n function buildShortDateTimeFormat(dataType) {\r\n var localeSettings = getLocaleSettings();\r\n var format;\r\n switch (dataType) {\r\n case DataType.Date:\r\n format = localeSettings.shortDateFormat;\r\n break;\r\n case DataType.Time:\r\n format = localeSettings.shortTimeFormat;\r\n break;\r\n default:\r\n format = localeSettings.shortDateFormat + ' ' + localeSettings.shortTimeFormat;\r\n break;\r\n }\r\n return format;\r\n }\r\n function buildLongDateTimeFormat(dataType) {\r\n var localeSettings = getLocaleSettings();\r\n var format;\r\n switch (dataType) {\r\n case DataType.Date:\r\n format = localeSettings.longDateFormat;\r\n break;\r\n case DataType.Time:\r\n format = localeSettings.longTimeFormat;\r\n break;\r\n default:\r\n format = localeSettings.longDateFormat + ' ' + localeSettings.longTimeFormat;\r\n break;\r\n }\r\n return format;\r\n }\r\n function numberToStr(number, format) {\r\n if (format && format.length > 0) {\r\n var type = format.charAt(0).toUpperCase();\r\n if (type === 'S') {\r\n return formatWithSequence(number, format.slice(1));\r\n }\r\n else if (['D', 'F', 'C'].indexOf(type) >= 0) {\r\n var locale = getCurrentLocale();\r\n return number.toLocaleString(locale, getNumberFormatOptions(format));\r\n }\r\n else {\r\n return convertWithMask(Math.trunc(number), format);\r\n }\r\n }\r\n var localeSettings = getLocaleSettings();\r\n return utils.numberToStr(number, localeSettings.decimalSeparator);\r\n }\r\n i18n.numberToStr = numberToStr;\r\n function booleanToStr(bool, format) {\r\n if (format && format.length > 0) {\r\n var type = format.charAt(0).toUpperCase();\r\n if (type === 'S') {\r\n var values = format.slice(1).split('|');\r\n if (values.length > 1) {\r\n var value = values[(bool) ? 1 : 0];\r\n return i18n.getText(value) || value;\r\n }\r\n }\r\n }\r\n return \"\" + bool;\r\n }\r\n i18n.booleanToStr = booleanToStr;\r\n var cachedSequenceFormats = {};\r\n function formatWithSequence(number, format) {\r\n if (!cachedSequenceFormats[format]) {\r\n // parse and save in cache format values \r\n var values_2 = format.split('|')\r\n .filter(function (v) { return v.length > 0; })\r\n .map(function (v) { return v.split('='); });\r\n cachedSequenceFormats[format] = {};\r\n if (values_2.length > 0) {\r\n if (values_2[0].length > 1) {\r\n for (var _i = 0, values_1 = values_2; _i < values_1.length; _i++) {\r\n var value = values_1[_i];\r\n cachedSequenceFormats[format][Number.parseInt(value[1])] = value[0];\r\n }\r\n }\r\n else {\r\n values_2.forEach(function (value, index) {\r\n cachedSequenceFormats[format][index] = value[0];\r\n });\r\n }\r\n }\r\n }\r\n var values = cachedSequenceFormats[format];\r\n if (values[number] !== undefined) {\r\n var value = values[number];\r\n return i18n.getText(value) || value;\r\n }\r\n return number.toString();\r\n }\r\n function convertWithMask(number, mask) {\r\n var value = number.toString();\r\n var result = '';\r\n var index = value.length - 1;\r\n for (var i = mask.length - 1; i >= 0; i--) {\r\n var ch = mask.charAt(i);\r\n if (ch === '#' || ch === '0') {\r\n if (index >= 0) {\r\n result += value.charAt(index);\r\n index--;\r\n }\r\n else {\r\n if (ch === '0') {\r\n result += 0;\r\n }\r\n }\r\n }\r\n else {\r\n result += ch;\r\n }\r\n }\r\n return result.split('').reverse().join('');\r\n }\r\n function getNumberFormatOptions(format) {\r\n var localeSettings = getLocaleSettings();\r\n var type = format[0].toUpperCase();\r\n var digits = (format.length > 1)\r\n ? Number.parseInt(format.slice(1))\r\n : type == 'D' ? 1 : 2;\r\n switch (type) {\r\n case 'D':\r\n return {\r\n style: 'decimal',\r\n useGrouping: false,\r\n minimumIntegerDigits: digits\r\n };\r\n case 'C':\r\n return {\r\n style: 'currency',\r\n currency: localeSettings.currency,\r\n minimumFractionDigits: digits\r\n };\r\n default:\r\n return {\r\n style: 'decimal',\r\n minimumFractionDigits: digits,\r\n maximumFractionDigits: digits\r\n };\r\n }\r\n }\r\n})(i18n || (i18n = {}));\r\n//# sourceMappingURL=i18n.js.map","import * as strf from './string_utils';\r\nimport { DataType } from '../types/data_type';\r\nimport { i18n } from '../i18n/i18n';\r\nexport var utils;\r\n(function (utils) {\r\n function getAllDataTypes() {\r\n return Object.values(DataType).filter(function (item) { return typeof item === \"number\"; });\r\n }\r\n utils.getAllDataTypes = getAllDataTypes;\r\n function getDateDataTypes() {\r\n return [DataType.Time, DataType.Date, DataType.DateTime];\r\n }\r\n utils.getDateDataTypes = getDateDataTypes;\r\n function getStringDataTypes() {\r\n return [DataType.String, DataType.Memo, DataType.FixedChar];\r\n }\r\n utils.getStringDataTypes = getStringDataTypes;\r\n var _numericTypes = [DataType.Byte, DataType.Word, DataType.Int32,\r\n DataType.Int64, DataType.Float, DataType.Currency, DataType.Autoinc];\r\n function getNumericDataTypes() {\r\n return _numericTypes;\r\n }\r\n utils.getNumericDataTypes = getNumericDataTypes;\r\n var _intTypes = [DataType.Byte, DataType.Word, DataType.Int32, DataType.Int64, DataType.Autoinc];\r\n //-------------- object functions -------------------\r\n /**\r\n * Copy the content of all objests passed in `args` parameters into `target`\r\n * and returns the result\r\n * NB: This function copies only the first level properties.\r\n * For a deep copy please use `assignDeep`\r\n * @param target - the target object\r\n * @param args - an array of the source objects\r\n */\r\n function assign(target) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n for (var i = 0; i < args.length; i++) {\r\n var source = args[i];\r\n if (source) {\r\n for (var key in source) {\r\n if (source.hasOwnProperty(key)) {\r\n target[key] = source[key];\r\n }\r\n }\r\n }\r\n }\r\n return target;\r\n }\r\n utils.assign = assign;\r\n /**\r\n * Copy the content of all objests passed in `args` parameters into `target`\r\n * and returns the result\r\n * NB: This function make a deep copy -\r\n * so `assignDeep` will be called recursively for all object properties\r\n * on the first level.\r\n * @param target - the target object\r\n * @param sources - an array of the source objects\r\n */\r\n function assignDeep(target) {\r\n var sources = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n sources[_i - 1] = arguments[_i];\r\n }\r\n return assignDeepCore(new WeakMap(), target, sources);\r\n }\r\n utils.assignDeep = assignDeep;\r\n function assignDeepCore(hashSet, target, sources) {\r\n if (!target) {\r\n target = {};\r\n }\r\n for (var _i = 0, sources_1 = sources; _i < sources_1.length; _i++) {\r\n var source = sources_1[_i];\r\n if (source) {\r\n for (var key in source) {\r\n if (source.hasOwnProperty(key)) {\r\n var sourceVal = source[key];\r\n if (sourceVal !== null && typeof sourceVal === 'object') {\r\n if (hashSet.has(sourceVal)) {\r\n target[key] = hashSet.get(sourceVal);\r\n }\r\n else {\r\n if (Array.isArray(sourceVal)) {\r\n target[key] = createArrayFrom(sourceVal);\r\n hashSet.set(sourceVal, target[key]);\r\n }\r\n else {\r\n if (typeof target[key] == 'undefined' || target[key] == null) {\r\n target[key] = Object.create(Object.getPrototypeOf(sourceVal));\r\n }\r\n hashSet.set(sourceVal, target[key]);\r\n assignDeepCore(hashSet, target[key], [sourceVal]);\r\n }\r\n }\r\n }\r\n else {\r\n target[key] = sourceVal;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return target;\r\n }\r\n function getIfDefined(value, defaultValue) {\r\n return (typeof value !== 'undefined') ? value : defaultValue;\r\n }\r\n utils.getIfDefined = getIfDefined;\r\n function IsDefinedAndNotNull(value) {\r\n return typeof value !== 'undefined' && value !== null;\r\n }\r\n utils.IsDefinedAndNotNull = IsDefinedAndNotNull;\r\n function copyArrayTo(collection1, collection2) {\r\n var len1 = collection1.length;\r\n var len2 = collection2.length;\r\n for (var i = 0; i < len1 && i < len2; i++) {\r\n collection2[i] = collection1[i];\r\n }\r\n }\r\n utils.copyArrayTo = copyArrayTo;\r\n function createArrayFrom(collection) {\r\n var result = [];\r\n for (var _i = 0, collection_1 = collection; _i < collection_1.length; _i++) {\r\n var item = collection_1[_i];\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n utils.createArrayFrom = createArrayFrom;\r\n /**\r\n * Searches an array of the objects which implement ItemWithId by ID\r\n * Returs the found object or null.\r\n * @param array\r\n * @param id\r\n */\r\n function findItemById(array, id) {\r\n var arrLength = array.length;\r\n for (var idx = 0; idx < arrLength; idx++) {\r\n if (array[idx].id === id)\r\n return array[idx];\r\n }\r\n return null;\r\n }\r\n utils.findItemById = findItemById;\r\n function findItemIndexById(array, id) {\r\n var arrLength = array.length;\r\n for (var idx = 0; idx < arrLength; idx++) {\r\n if (array[idx].id === id)\r\n return idx;\r\n }\r\n return -1;\r\n }\r\n utils.findItemIndexById = findItemIndexById;\r\n /**\r\n * Searches an array of the objects which implement ItemWithId by ID\r\n * Returs the index of the found element, or -1 if nothing was found.\r\n * @param array\r\n * @param id\r\n */\r\n function indexOfArrayItem(arr, item) {\r\n if (arr.indexOf) {\r\n return arr.indexOf(item);\r\n }\r\n else {\r\n var len = arr.length;\r\n for (var i = 0; i < len; i++) {\r\n if (item == arr[i]) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n }\r\n utils.indexOfArrayItem = indexOfArrayItem;\r\n /**\r\n * Moves an item in some array to a new position\r\n * @param array\r\n * @param index1\r\n * @param index2\r\n */\r\n function moveArrayItem(array, index1, index2) {\r\n if (index1 >= array.length) {\r\n throw 'Index out of bounds: ' + index1;\r\n }\r\n if (index2 >= array.length) {\r\n index2 = array.length - 1;\r\n }\r\n var item = array.splice(index1, 1)[0];\r\n array.splice(index2, 0, item);\r\n }\r\n utils.moveArrayItem = moveArrayItem;\r\n /**\r\n * Searches for a particular item in the array are removes that item if found.\r\n * @param arr\r\n * @param value\r\n */\r\n function removeArrayItem(arr, value) {\r\n var index = arr.indexOf(value);\r\n if (index != -1) {\r\n return arr.splice(index, 1)[0];\r\n }\r\n }\r\n utils.removeArrayItem = removeArrayItem;\r\n function insertArrayItem(arr, index, value) {\r\n arr.splice(index, 0, value);\r\n }\r\n utils.insertArrayItem = insertArrayItem;\r\n function fillArray(arr, value, start, end) {\r\n if (start === void 0) { start = 0; }\r\n var len = arr.length >>> 0;\r\n var relativeStart = start >> 0;\r\n var k = relativeStart < 0 ?\r\n Math.max(len + relativeStart, 0) :\r\n Math.min(relativeStart, len);\r\n var relativeEnd = end === undefined ?\r\n len : end >> 0;\r\n var final = relativeEnd < 0 ?\r\n Math.max(len + relativeEnd, 0) :\r\n Math.min(relativeEnd, len);\r\n while (k < final) {\r\n arr[k] = value;\r\n k++;\r\n }\r\n return arr;\r\n }\r\n utils.fillArray = fillArray;\r\n //------------ DOM utils ------------\r\n /**\r\n * Calculates the shift on which we need to move our element horizontally\r\n * to find current window\r\n * @param absLeft\r\n * @param width\r\n */\r\n function shiftToFitWindow(absLeft, width) {\r\n var body = document.getElementsByTagName('body')[0];\r\n var winWidth = window.innerWidth || document.documentElement.clientWidth || body.clientWidth;\r\n var absRight = absLeft + width;\r\n var shift = 0;\r\n if (absRight > winWidth) {\r\n shift = winWidth - absRight - 10;\r\n if (absLeft + shift < 0) {\r\n shift = 10 - absLeft;\r\n }\r\n }\r\n return shift;\r\n }\r\n utils.shiftToFitWindow = shiftToFitWindow;\r\n /**\r\n * Returns `true` if the value passed in the parameter is an object\r\n * @param val\r\n */\r\n function isObject(val) {\r\n if (val === null) {\r\n return false;\r\n }\r\n return ((typeof val === 'function') || (typeof val === 'object'));\r\n }\r\n utils.isObject = isObject;\r\n /**\r\n * Returns `true` if the `DataType` value passed in the parameter\r\n * represents some numeric type\r\n * @param dtype\r\n */\r\n function isNumericType(dtype) {\r\n var index = _numericTypes.indexOf(dtype);\r\n return (index >= 0);\r\n }\r\n utils.isNumericType = isNumericType;\r\n /**\r\n * Returns `true` if the `DataType` value passed in the parameter\r\n * represents some numeric type\r\n * @param dtype\r\n */\r\n function isIntType(dtype) {\r\n var index = _intTypes.indexOf(dtype);\r\n return (index >= 0);\r\n }\r\n utils.isIntType = isIntType;\r\n /**\r\n * Returns `true` if the value passed in the parameter is an a numeric value\r\n * @param val\r\n */\r\n function isNumeric(val) {\r\n return !isNaN(parseFloat(val)) && isFinite(val);\r\n }\r\n utils.isNumeric = isNumeric;\r\n /**\r\n * Returns `true` if two data types passed in parameters\r\n * are compatible - so it's safe to copy the values between\r\n * two expressions with these two types\r\n * @param type1\r\n * @param type2\r\n */\r\n function areCompatibleDataTypes(type1, type2) {\r\n return typeof type1 == \"undefined\" || typeof type2 == \"undefined\" || type1 == DataType.Unknown || type2 == DataType.Unknown\r\n || (type1 == type2) || (type1 == DataType.Date && type2 == DataType.DateTime)\r\n || (type1 == DataType.DateTime && type2 == DataType.Date);\r\n }\r\n utils.areCompatibleDataTypes = areCompatibleDataTypes;\r\n /**\r\n * Returns `true` if the property with named `propName`\r\n * in the object `obj` has some value\r\n * @param obj\r\n * @param propName\r\n */\r\n function isPropSet(obj, propName) {\r\n return obj[propName] || obj[propName.toLowerCase()] || obj[propName.toUpperCase()];\r\n }\r\n utils.isPropSet = isPropSet;\r\n //-------------- ID generator -----------\r\n var prefixIdLen = 4;\r\n var symbols = \"0123456789abcdefghijklmnopqrstuvwxyz\";\r\n var magicTicks = 636712160627685350;\r\n /**\r\n * Generates an unique ID\r\n */\r\n function generateId(prefix) {\r\n if (!prefix) {\r\n prefix = 'easy';\r\n }\r\n var prfx = (prefix.length > prefixIdLen) ? squeezeMoniker(prefix, prefixIdLen) : prefix;\r\n if (prfx && prfx.length > 0) {\r\n prfx += \"-\";\r\n }\r\n //adding 2 random symbols\r\n var randValue = strf.repeatString(\"\", 2);\r\n ;\r\n var maxSymbolIndex = symbols.length - 1;\r\n randValue = replaceAtString(randValue, 0, symbols[getRandomInt(0, maxSymbolIndex)]);\r\n randValue = replaceAtString(randValue, 1, symbols[getRandomInt(0, maxSymbolIndex)]);\r\n //generating main ID part (64-base representation of the current value of the time ticks)\r\n var ticksNum64 = intToNum36(getNowTicks() - magicTicks);\r\n return prfx + randValue + ticksNum64;\r\n }\r\n utils.generateId = generateId;\r\n function intToNum36(value) {\r\n var targetBase = 36;\r\n var i = 14;\r\n var buffer = strf.repeatString(\"\", i);\r\n var rest = value;\r\n do {\r\n buffer = replaceAtString(buffer, i--, symbols[rest % targetBase]);\r\n rest = Math.floor(rest /= targetBase);\r\n } while (rest > 0);\r\n return strf.reverseString(buffer.trim());\r\n }\r\n function squeezeMoniker(str, maxlen) {\r\n var parts = str.split('-');\r\n var pml = 1;\r\n var ptt = maxlen;\r\n if (parts.length < maxlen) {\r\n pml = maxlen / parts.length;\r\n ptt = parts.length;\r\n }\r\n var result = \"\";\r\n for (var i = 0; i < ptt; i++) {\r\n result += squeeze(parts[i], pml);\r\n }\r\n return result;\r\n }\r\n function squeeze(str, maxlen) {\r\n var len = str.length;\r\n if (len > maxlen) {\r\n var step = len / maxlen;\r\n var result = \"\";\r\n result += str[0];\r\n var nextIndex = step;\r\n var ch = void 0;\r\n for (var i = 1; i < len; i++) {\r\n ch = str[i];\r\n if (i + 1 > nextIndex) {\r\n result += ch;\r\n nextIndex += step;\r\n }\r\n }\r\n return result;\r\n }\r\n else {\r\n return str;\r\n }\r\n }\r\n function replaceAtString(str, index, value) {\r\n return str.substr(0, index) + value + str.substr(index + value.length);\r\n }\r\n function getRandomInt(min, max) {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n }\r\n function getNowTicks() {\r\n return (621355968e9 + (new Date()).getTime() * 1e4);\r\n }\r\n function safeParseInt(str) {\r\n var res = parseInt(str);\r\n if (isNaN(res))\r\n throw \"\\\"\" + str + \"\\\" is not a valid number\";\r\n return res;\r\n }\r\n function getDaysInMonth(month, year) {\r\n return new Date(year, month + 1, 0).getDate();\r\n }\r\n // ------------- date/time functions -------------------\r\n // TO DO: improve to process all datetime cases\r\n function strToDateTime(value, format) {\r\n if (!value || value.length == 0)\r\n return new Date();\r\n var normalizedValue = value.replace(/[^a-zA-Z0-9_]/g, '-');\r\n var normalizedFormat = format.replace(/[^a-zA-Z0-9_]/g, '-');\r\n var formatItems = normalizedFormat.split('-');\r\n var dateItems = normalizedValue.split('-');\r\n var monthIndex = formatItems.indexOf(\"MM\");\r\n var dayIndex = formatItems.indexOf(\"dd\");\r\n var yearIndex = formatItems.indexOf(\"yyyy\");\r\n var hourIndex = formatItems.indexOf(\"HH\");\r\n var minutesIndex = formatItems.indexOf(\"mm\");\r\n var secondsIndex = formatItems.indexOf(\"ss\");\r\n var today = new Date();\r\n try {\r\n var year = yearIndex > -1 && yearIndex < dateItems.length\r\n ? safeParseInt(dateItems[yearIndex])\r\n : today.getFullYear();\r\n var month = monthIndex > -1 && monthIndex < dateItems.length\r\n ? safeParseInt(dateItems[monthIndex]) - 1\r\n : today.getMonth() - 1;\r\n if (month > 11)\r\n throw '';\r\n var day = dayIndex > -1 && dayIndex < dateItems.length\r\n ? safeParseInt(dateItems[dayIndex])\r\n : today.getDate();\r\n if (day > getDaysInMonth(month, year))\r\n throw '';\r\n var hour = hourIndex > -1 && hourIndex < dateItems.length\r\n ? safeParseInt(dateItems[hourIndex])\r\n : 0;\r\n if (hour > 23)\r\n throw '';\r\n var minute = minutesIndex > -1 && minutesIndex < dateItems.length\r\n ? safeParseInt(dateItems[minutesIndex])\r\n : 0;\r\n if (minute > 59)\r\n throw '';\r\n var second = secondsIndex > -1 && secondsIndex < dateItems.length\r\n ? safeParseInt(dateItems[secondsIndex])\r\n : 0;\r\n if (second > 59)\r\n throw '';\r\n return new Date(year, month, day, hour, minute, second);\r\n }\r\n catch (_a) {\r\n throw value + \" is not a valid date.\";\r\n }\r\n }\r\n utils.strToDateTime = strToDateTime;\r\n function strToTime(str) {\r\n var timeItems = str.split(':');\r\n try {\r\n var hour = timeItems.length > 0 ? safeParseInt(timeItems[0]) : 0;\r\n if (hour > 23)\r\n throw '';\r\n var minute = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0;\r\n if (minute > 59)\r\n throw '';\r\n var second = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0;\r\n if (second > 59)\r\n throw '';\r\n return new Date(0, 0, 0, hour, minute, second);\r\n }\r\n catch (_a) {\r\n throw str + \" is not a valid time.\";\r\n }\r\n }\r\n utils.strToTime = strToTime;\r\n var DT_FORMAT_RGEX = /\\[([^\\]]+)]|y{2,4}|M{1,4}|d{1,2}|H{1,2}|h{1,2}|m{2}|s{2}|t{2}/g;\r\n /**\r\n * Returns string representation of the date/time value according to the custom format (second parameter)\r\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\r\n * @param date\r\n * @param format\r\n */\r\n function dateTimeToStr(date, format) {\r\n var year = date.getFullYear();\r\n var yearStr = year.toString();\r\n var month = date.getMonth() + 1;\r\n var day = date.getDate();\r\n var hour = date.getHours();\r\n var minute = date.getMinutes();\r\n var second = date.getSeconds();\r\n var hour12 = hour % 12 || 12; //the remainder of the division by 12. Or 12 if it's 0\r\n var isPm = hour > 11;\r\n var matches = {\r\n yyyy: yearStr,\r\n yy: yearStr.substring(yearStr.length - 2),\r\n MMMM: i18n.getLongMonthName(month),\r\n MMM: i18n.getShortMonthName(month),\r\n MM: (month < 10) ? '0' + month : month.toString(),\r\n M: month.toString(),\r\n dd: (day < 10) ? '0' + day : day.toString(),\r\n d: day.toString(),\r\n HH: (hour < 10) ? '0' + hour : hour.toString(),\r\n H: hour.toString(),\r\n hh: (hour12 < 10) ? '0' + hour12 : hour12.toString(),\r\n h: hour12.toString(),\r\n tt: isPm ? 'PM' : 'AM',\r\n mm: (minute < 10) ? '0' + minute : minute.toString(),\r\n ss: (second < 10) ? '0' + second : second.toString()\r\n };\r\n return format.replace(DT_FORMAT_RGEX, function (match, $1) {\r\n return $1 || matches[match];\r\n });\r\n }\r\n utils.dateTimeToStr = dateTimeToStr;\r\n /**\r\n * Converts a numeric value to the string taking into the account the decimal separator\r\n * @param value - the number to convert\r\n * @param decimalSeparator - the symbol that represents decimal separator. If not specified the function gets the one from the current locale settings.\r\n */\r\n function numberToStr(number, decimalSeparator) {\r\n decimalSeparator = decimalSeparator || i18n.getLocaleSettings().decimalSeparator;\r\n return number.toString().replace('.', decimalSeparator);\r\n }\r\n utils.numberToStr = numberToStr;\r\n})(utils || (utils = {}));\r\n//# sourceMappingURL=utils.js.map","export function repeatString(str, times) {\r\n var result = \"\";\r\n for (var i = 0; i < times; i++) {\r\n result += str;\r\n }\r\n return result;\r\n}\r\nexport function reverseString(str) {\r\n return str.split(\"\").reverse().join(\"\");\r\n}\r\nexport function strEndsWith(str, symbol) {\r\n return str && str.lastIndexOf(symbol) == (str.length - symbol.length);\r\n}\r\n/**\r\n * Adds two paths and returns the result\r\n * Correctly processes leading and trailing slashes\r\n * @param path1\r\n * @param path2\r\n */\r\nexport function combinePath(path1, path2) {\r\n var result = path1;\r\n if (result != null && result.length > 0) {\r\n if (result.charAt(result.length - 1) != '/')\r\n result += \"/\";\r\n result += path2;\r\n }\r\n else {\r\n result = path2;\r\n }\r\n return result;\r\n}\r\n//# sourceMappingURL=string_utils.js.map","var HttpActionResult = /** @class */ (function () {\r\n function HttpActionResult(request, promise) {\r\n this.request = request;\r\n this.promise = promise;\r\n }\r\n HttpActionResult.prototype.getPromise = function () {\r\n return this.promise;\r\n };\r\n HttpActionResult.prototype.getRequest = function () {\r\n return this.request;\r\n };\r\n HttpActionResult.prototype.then = function (onfulfilled, onrejected) {\r\n return this.promise.then(onfulfilled, onrejected);\r\n };\r\n HttpActionResult.prototype.catch = function (onrejected) {\r\n return this.promise.catch(onrejected);\r\n };\r\n HttpActionResult.prototype.finally = function (onfinally) {\r\n return this.promise.finally(onfinally);\r\n };\r\n return HttpActionResult;\r\n}());\r\nexport { HttpActionResult };\r\n//# sourceMappingURL=http_action_result.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nimport { utils } from '../utils/utils';\r\nimport { HttpActionResult } from './http_action_result';\r\nimport { HttpMethod } from './http_method';\r\nimport { HttpRequest } from './http_request';\r\nvar HttpResponseError = /** @class */ (function (_super) {\r\n __extends(HttpResponseError, _super);\r\n function HttpResponseError(status, message) {\r\n var _this = _super.call(this, message) || this;\r\n _this.status = status;\r\n return _this;\r\n }\r\n return HttpResponseError;\r\n}(Error));\r\nexport { HttpResponseError };\r\nvar HttpClient = /** @class */ (function () {\r\n function HttpClient() {\r\n this.defaultHeaders = {};\r\n this.customPayload = undefined;\r\n }\r\n Object.defineProperty(HttpClient.prototype, \"responseBody\", {\r\n /** Gets the response body for the latest request */\r\n get: function () {\r\n return this._responseBody;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n HttpClient.prototype.get = function (url, options) {\r\n return this.send(HttpMethod.Get, url, null, options);\r\n };\r\n HttpClient.prototype.post = function (url, data, options) {\r\n return this.send(HttpMethod.Post, url, data, options);\r\n };\r\n HttpClient.prototype.put = function (url, data, options) {\r\n return this.send(HttpMethod.Put, url, data, options);\r\n };\r\n HttpClient.prototype.delete = function (url, data, options) {\r\n return this.send(HttpMethod.Delete, url, data, options);\r\n };\r\n HttpClient.prototype.send = function (method, url, data, options) {\r\n var _this = this;\r\n options = options || {};\r\n var dataType = options.dataType || 'json';\r\n var contentType = options.contentType || (dataType !== 'form-data')\r\n ? 'application/json'\r\n : null;\r\n if (data && dataType != 'form-data' && this.customPayload) {\r\n data.data = utils.assignDeep(data.data || {}, this.customPayload);\r\n }\r\n var XHR = ('onload' in new XMLHttpRequest())\r\n ? XMLHttpRequest\r\n : window[\"XDomainRequest\"]; //IE support\r\n var xhr = new XHR();\r\n var desc = {\r\n method: method,\r\n url: url,\r\n headers: __assign(__assign({}, this.defaultHeaders), options.headers || {}),\r\n queryParams: options.queryParams || {},\r\n data: data\r\n };\r\n if (contentType)\r\n desc.headers['Content-Type'] = contentType;\r\n var request = new HttpRequest(xhr, desc);\r\n if (this.beforeEachRequest) {\r\n console.warn(\"HttpClient: 'beforeEachRequest' is deprecated and will be removed in future updates.\\n Use 'onRequest' instead\");\r\n this.beforeEachRequest(request);\r\n }\r\n if (this.onRequest) {\r\n this.onRequest(request);\r\n }\r\n var dataToSend = (request.data && typeof request.data !== 'string'\r\n && dataType == 'json')\r\n ? JSON.stringify(request.data)\r\n : request.data;\r\n request.open();\r\n return new HttpActionResult(request, new Promise(function (resolve, reject) {\r\n if (options.responseType)\r\n xhr.responseType = options.responseType;\r\n xhr.onerror = function (error) {\r\n reject(new HttpResponseError(xhr.status, xhr.responseText));\r\n };\r\n xhr.onreadystatechange = function () {\r\n if (xhr.readyState != 4)\r\n return; //we process only the state change to DONE(4)\r\n var responseContentType = xhr.getResponseHeader('Content-Type') || '';\r\n var status = xhr.status;\r\n if (status === 0) {\r\n reject(new HttpResponseError(status, \"Network error or the request was aborted\"));\r\n }\r\n else if (status >= 200 && status < 400) {\r\n //Success\r\n var responseObj = (xhr.responseType === 'arraybuffer' || xhr.responseType === 'blob')\r\n ? xhr.response\r\n : (responseContentType.indexOf('application/json') == 0\r\n ? JSON.parse(xhr.responseText)\r\n : xhr.responseText);\r\n _this._responseBody = responseObj;\r\n if (_this.onResponse) {\r\n _this.onResponse(xhr);\r\n }\r\n resolve(responseObj);\r\n }\r\n else {\r\n //Error\r\n var rtPromise = (xhr.responseType === 'arraybuffer' || xhr.responseType === 'blob')\r\n ? HttpClient.decodeArrayBuffer(xhr.response)\r\n : Promise.resolve(xhr.responseText);\r\n rtPromise.then(function (responseText) {\r\n var responseObj = (responseContentType.indexOf('application/json') == 0)\r\n ? JSON.parse(responseText)\r\n : responseText;\r\n _this._responseBody = responseObj;\r\n var message = responseObj.message ||\r\n (status == 404\r\n ? \"No such endpoint: \" + url\r\n : responseObj);\r\n reject(new HttpResponseError(status, message));\r\n });\r\n }\r\n };\r\n xhr.send(dataToSend);\r\n }));\r\n };\r\n HttpClient.decodeArrayBuffer = function (uintArray) {\r\n var reader = new FileReader();\r\n return new Promise(function (resolve) {\r\n reader.onloadend = function () {\r\n if (reader.readyState == FileReader.DONE) {\r\n resolve(reader.result);\r\n }\r\n };\r\n reader.readAsText(new Blob([uintArray]));\r\n });\r\n };\r\n return HttpClient;\r\n}());\r\nexport { HttpClient };\r\n//# sourceMappingURL=http_client.js.map","import { DataType } from '../types/data_type';\r\nimport { utils } from '../utils/utils';\r\nexport var ColumnAlignment;\r\n(function (ColumnAlignment) {\r\n ColumnAlignment[ColumnAlignment[\"None\"] = 0] = \"None\";\r\n ColumnAlignment[ColumnAlignment[\"Left\"] = 1] = \"Left\";\r\n ColumnAlignment[ColumnAlignment[\"Center\"] = 2] = \"Center\";\r\n ColumnAlignment[ColumnAlignment[\"Right\"] = 3] = \"Right\";\r\n})(ColumnAlignment || (ColumnAlignment = {}));\r\nvar DataColumn = /** @class */ (function () {\r\n function DataColumn(desc) {\r\n if (!desc)\r\n throw Error(\"Options are required\");\r\n if (!desc.id)\r\n throw Error(\"Field Id is required\");\r\n if (!desc.label)\r\n throw Error(\"Label is required\");\r\n this.id = desc.id;\r\n this.type = utils.getIfDefined(desc.type, DataType.String);\r\n this.label = desc.label;\r\n this.originAttrId = desc.originAttrId;\r\n this.isAggr = desc.isAggr || false;\r\n this.displayFormat = desc.dfmt;\r\n this.groupFooterColumnTemplate = desc.gfct;\r\n this.style = desc.style || {};\r\n this.description = desc.description;\r\n this.calculatedWidth = 0;\r\n }\r\n return DataColumn;\r\n}());\r\nexport { DataColumn };\r\nvar DataColumnList = /** @class */ (function () {\r\n function DataColumnList() {\r\n this.items = [];\r\n this.mapper = {};\r\n this._dateColumnIdx = [];\r\n }\r\n Object.defineProperty(DataColumnList.prototype, \"count\", {\r\n get: function () {\r\n return this.items.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n DataColumnList.prototype.add = function (colOrDesc) {\r\n var col;\r\n if (colOrDesc instanceof DataColumn) {\r\n col = colOrDesc;\r\n }\r\n else {\r\n col = new DataColumn(colOrDesc);\r\n }\r\n var index = this.items.length;\r\n this.items.push(col);\r\n this.mapper[col.id] = index;\r\n if ([DataType.Date, DataType.DateTime, DataType.Time].indexOf(col.type) >= 0) {\r\n this._dateColumnIdx.push(index);\r\n }\r\n return index;\r\n };\r\n DataColumnList.prototype.updateDateColumnIdx = function () {\r\n this._dateColumnIdx = this.getItems()\r\n .filter(function (col) { return [DataType.Date, DataType.DateTime, DataType.Time].indexOf(col.type) >= 0; })\r\n .map(function (col, index) { return index; });\r\n };\r\n DataColumnList.prototype.put = function (index, col) {\r\n if (index >= 0 && index < this.count) {\r\n this.items[index] = col;\r\n this.updateDateColumnIdx();\r\n }\r\n };\r\n DataColumnList.prototype.move = function (col, newIndex) {\r\n var oldIndex = this.items.indexOf(col);\r\n if (oldIndex >= 0 && oldIndex != newIndex) {\r\n utils.moveArrayItem(this.items, oldIndex, newIndex);\r\n this.updateDateColumnIdx();\r\n }\r\n };\r\n DataColumnList.prototype.get = function (index) {\r\n if (index >= 0 && index < this.count) {\r\n return this.items[index];\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n DataColumnList.prototype.getIndex = function (id) {\r\n return this.mapper[id];\r\n };\r\n DataColumnList.prototype.getItems = function () {\r\n return this.items;\r\n };\r\n DataColumnList.prototype.getDateColumnIndexes = function () {\r\n return this._dateColumnIdx;\r\n };\r\n DataColumnList.prototype.removeAt = function (index) {\r\n var col = this.get(index);\r\n this.items.splice(index, 1);\r\n var removeDate = this._dateColumnIdx.indexOf(index);\r\n if (removeDate >= 0) {\r\n this._dateColumnIdx.splice(removeDate, 1);\r\n }\r\n delete this.mapper[col.id];\r\n };\r\n DataColumnList.prototype.clear = function () {\r\n this.items = [];\r\n this._dateColumnIdx = [];\r\n this.mapper = {};\r\n };\r\n return DataColumnList;\r\n}());\r\nexport { DataColumnList };\r\n//# sourceMappingURL=data_column.js.map","import { DataType } from '../types/data_type';\r\nimport { EntityAttrKind } from '../types/entity_attr_kind';\r\nimport { utils } from '../utils/utils';\r\n/**\r\n * Represents one entity.\r\n */\r\nvar MetaEntity = /** @class */ (function () {\r\n /** The default constructor. */\r\n function MetaEntity(parent) {\r\n /** Returns false if this entity is read-only */\r\n this.isEditable = true;\r\n this.name = \"\";\r\n this.caption = \"\";\r\n this.description = \"\";\r\n this.parent = parent;\r\n this.attributes = new Array();\r\n this.subEntities = new Array();\r\n }\r\n /**\r\n * Loads entity from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param dto The JSON representation object.\r\n */\r\n MetaEntity.prototype.loadFromData = function (model, dto) {\r\n if (dto) {\r\n this.id = dto.id;\r\n this.name = dto.name;\r\n this.captionPlural = dto.namePlur;\r\n this.caption = dto.name;\r\n this.description = dto.desc;\r\n if (typeof (dto.ied) !== 'undefined')\r\n this.isEditable = dto.ied;\r\n this.subEntities = new Array();\r\n if (dto.ents) {\r\n for (var i = 0; i < dto.ents.length; i++) {\r\n var newEntity = model.createEntity(this);\r\n newEntity.loadFromData(model, dto.ents[i]);\r\n this.subEntities.push(newEntity);\r\n }\r\n }\r\n this.attributes = new Array();\r\n if (dto.attrs) {\r\n for (var i = 0; i < dto.attrs.length; i++) {\r\n var newAttr = model.createEntityAttr(this);\r\n newAttr.loadFromData(model, dto.attrs[i]);\r\n this.attributes.push(newAttr);\r\n }\r\n }\r\n }\r\n };\r\n MetaEntity.prototype.scan = function (processAttribute, processEntity) {\r\n var opts = { stop: false };\r\n var internalProcessEntity = function (entity) {\r\n if (processEntity)\r\n processEntity(entity, opts);\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var i = 0; (i < attrCount) && !opts.stop; i++) {\r\n var attr = entity.attributes[i];\r\n if (processAttribute) {\r\n processAttribute(attr, opts);\r\n }\r\n if (opts.stop)\r\n return;\r\n }\r\n }\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var i = 0; (i < subEntityCount) && !opts.stop; i++) {\r\n internalProcessEntity(entity.subEntities[i]);\r\n }\r\n }\r\n };\r\n internalProcessEntity(this);\r\n };\r\n MetaEntity.prototype.getFirstPrimaryAttr = function () {\r\n return this.getPrimaryAttrs()[0];\r\n };\r\n MetaEntity.prototype.getPrimaryAttrs = function () {\r\n return this.attributes.filter(function (attr) { return attr.isPrimaryKey; });\r\n };\r\n return MetaEntity;\r\n}());\r\nexport { MetaEntity };\r\nvar MetaEntityAttr = /** @class */ (function () {\r\n /** The default constructor. */\r\n function MetaEntityAttr(entity) {\r\n this.id = \"\";\r\n this.caption = \"{Unrecognized attribute}\";\r\n this.dataType = DataType.String;\r\n this.size = 0;\r\n this.isPrimaryKey = false;\r\n this.isForeignKey = false;\r\n this.isNullable = true;\r\n this.showOnView = true;\r\n this.isEditable = true;\r\n this.showOnCreate = true;\r\n this.showOnEdit = true;\r\n this.showInLookup = false;\r\n this.lookupAttr = \"\";\r\n this.expr = \"\";\r\n this.entity = entity;\r\n this.kind = EntityAttrKind.Data;\r\n }\r\n /**\r\n * Loads entity attribute from JSON representation object.\r\n * @param model The Data Model.\r\n * @param dto The JSON representation object.\r\n */\r\n MetaEntityAttr.prototype.loadFromData = function (model, dto) {\r\n if (dto) {\r\n this.id = dto.id;\r\n this.description = dto.desc;\r\n this.caption = dto.cptn;\r\n this.dataType = dto.dtype;\r\n this.isPrimaryKey = dto.ipk;\r\n this.isForeignKey = dto.ifk;\r\n this.size = dto.size;\r\n this.lookupAttr = dto.lattr;\r\n this.lookupEntity = dto.lent;\r\n this.dataAttr = dto.dattr;\r\n this.lookupDataAttr = dto.ldattr;\r\n var isDataType = utils.getDateDataTypes().indexOf(this.dataType);\r\n this.defaultValue = dto.defVal && isDataType ? new Date(dto.defVal) : dto.defVal;\r\n this.isNullable = utils.getIfDefined(dto.nul, this.isNullable);\r\n this.isEditable = utils.getIfDefined(dto.ied, this.isEditable);\r\n this.showOnView = utils.getIfDefined(dto.ivis || dto.sov, this.showOnView);\r\n this.showOnCreate = utils.getIfDefined(dto.soc, this.showOnCreate);\r\n this.showOnEdit = utils.getIfDefined(dto.soe, this.showOnEdit);\r\n this.showInLookup = utils.getIfDefined(dto.sil, this.showInLookup);\r\n this.kind = dto.kind;\r\n this.displayFormat = dto.dfmt;\r\n if (dto.udata)\r\n this.userData = dto.udata;\r\n if (dto.edtr) {\r\n this.defaultEditor = model.getEditorById(dto.edtr) || model.createValueEditor();\r\n }\r\n }\r\n };\r\n return MetaEntityAttr;\r\n}());\r\nexport { MetaEntityAttr };\r\n//# sourceMappingURL=meta_entity.js.map","import { EditorTag } from '../types/editor_tag';\r\nimport { DataType } from '../types/data_type';\r\n/**\r\n * Represents a value editor.\r\n */\r\nvar ValueEditor = /** @class */ (function () {\r\n /** The default constructor. */\r\n function ValueEditor() {\r\n this.id = \"\";\r\n this.tag = EditorTag.Unknown;\r\n this.resType = DataType.Unknown;\r\n this.defValue = \"\";\r\n }\r\n /**\r\n * Loads value editor from its JSON representation object.\r\n * @param data The JSON representation object.\r\n */\r\n ValueEditor.prototype.loadFromData = function (data) {\r\n if (data) {\r\n this.id = data.id;\r\n this.tag = data.tag;\r\n this.defValue = data.defval;\r\n this.resType = data.rtype;\r\n this.accept = data.accept;\r\n this.multiline = data.multiline;\r\n if (data.subType) {\r\n this.resType = data.subType;\r\n }\r\n if (data.name) {\r\n this.name = data.name;\r\n }\r\n if (data.values) {\r\n this.values = data.values;\r\n }\r\n }\r\n };\r\n ValueEditor.prototype.getValueText = function (value) {\r\n var result = \"\";\r\n if (!this.values)\r\n return result;\r\n if (Array.isArray(value)) {\r\n for (var _i = 0, _a = this.values; _i < _a.length; _i++) {\r\n var item = _a[_i];\r\n if (value.indexOf(item.id) >= 0) {\r\n result += item.text + ',';\r\n }\r\n }\r\n }\r\n else {\r\n for (var _b = 0, _c = this.values; _b < _c.length; _b++) {\r\n var item = _c[_b];\r\n if (item.id === value) {\r\n result += item.text + ',';\r\n }\r\n }\r\n }\r\n if (result) {\r\n result = result.substring(0, result.length - 1);\r\n }\r\n return result;\r\n };\r\n return ValueEditor;\r\n}());\r\nexport { ValueEditor };\r\n//# sourceMappingURL=value_editor.js.map","import { i18n } from '../i18n/i18n';\r\nimport { utils } from '../utils/utils';\r\nimport { EditorTag } from '../types/editor_tag';\r\nimport { DataType } from '../types/data_type';\r\nimport { MetaEntity, MetaEntityAttr } from './meta_entity';\r\nimport { ValueEditor } from './value_editor';\r\n/**\r\n * Represents a data model\r\n */\r\nvar MetaData = /** @class */ (function () {\r\n /** The default constructor. */\r\n function MetaData() {\r\n this.mainEntity = null;\r\n this.id = '__none';\r\n this.name = 'Empty model';\r\n this.rootEntity = this.createEntity();\r\n this.displayFormats = new Map();\r\n }\r\n /**\r\n * Gets the main entity of model\r\n * @return The main entity.\r\n */\r\n MetaData.prototype.getMainEntity = function () {\r\n return this.mainEntity;\r\n };\r\n MetaData.prototype.createEntity = function (parent) {\r\n return new MetaEntity(parent);\r\n };\r\n MetaData.prototype.createEntityAttr = function (parent) {\r\n return new MetaEntityAttr(parent);\r\n };\r\n MetaData.prototype.createValueEditor = function () {\r\n return new ValueEditor();\r\n };\r\n /**\r\n * Loads data model from JSON.\r\n * @param stringJson The JSON string.\r\n */\r\n MetaData.prototype.loadFromJSON = function (stringJson) {\r\n var model = JSON.parse(stringJson);\r\n this.loadFromData(model);\r\n };\r\n /**\r\n * Loads data model from its JSON representation object.\r\n * @param data The JSON representation object.\r\n */\r\n MetaData.prototype.loadFromData = function (data) {\r\n this.id = data.id;\r\n this.name = data.name;\r\n this.version = data.vers;\r\n //Editors\r\n this.editors = new Array();\r\n if (data.editors) {\r\n for (var i = 0; i < data.editors.length; i++) {\r\n var newEditor = this.createValueEditor();\r\n newEditor.loadFromData(data.editors[i]);\r\n this.editors.push(newEditor);\r\n }\r\n }\r\n //rootEntity\r\n this.rootEntity.loadFromData(this, data.entroot);\r\n //DataFormats\r\n this.displayFormats = new Map();\r\n if (data.displayFormats) {\r\n for (var dtypeStr in data.displayFormats) {\r\n var dtype = DataType[dtypeStr];\r\n var formats = data.displayFormats[dtypeStr] || new Array();\r\n this.displayFormats.set(dtype, formats);\r\n }\r\n }\r\n };\r\n /**\r\n * Gets the display formats.\r\n * @returns The display formats.\r\n */\r\n MetaData.prototype.getDisplayFormats = function () {\r\n return this.displayFormats;\r\n };\r\n /**\r\n * Gets the display formats for type\r\n * @param type The type\r\n * @returns An array of display formats\r\n */\r\n MetaData.prototype.getDisplayFormatsForType = function (type) {\r\n if (this.displayFormats.has(type)) {\r\n return this.displayFormats.get(type);\r\n }\r\n return [];\r\n };\r\n /**\r\n * Gets the default display format for the provided type\r\n * @param type The type\r\n * @returns The default type format or null\r\n */\r\n MetaData.prototype.getDefaultFormat = function (type) {\r\n if (this.displayFormats.has(type)) {\r\n return this.displayFormats.get(type).filter(function (f) { return f.isdef; })[0];\r\n }\r\n return null;\r\n };\r\n /**\r\n * Sets data to data model.\r\n * @param model Its JSON representation object or JSON string.\r\n */\r\n MetaData.prototype.setData = function (model) {\r\n if (typeof model === 'string') {\r\n this.loadFromJSON(model);\r\n }\r\n else {\r\n this.loadFromData(model);\r\n }\r\n };\r\n /**\r\n * Checks wether the data model is empty.\r\n * @returns `true` if the data model is empty, otherwise `false`.\r\n */\r\n MetaData.prototype.isEmpty = function () {\r\n return this.rootEntity.subEntities.length === 0 && this.rootEntity.attributes.length === 0;\r\n };\r\n /**\r\n * Gets ID of the data model.\r\n * @returns The ID.\r\n */\r\n MetaData.prototype.getId = function () {\r\n return this.id;\r\n };\r\n /**\r\n * Gets name of the data model.\r\n * @returns The name.\r\n */\r\n MetaData.prototype.getName = function () {\r\n return this.name;\r\n };\r\n /**\r\n * Gets root entity of the data model.\r\n * @returns The root entity.\r\n */\r\n MetaData.prototype.getRootEntity = function () {\r\n return this.rootEntity;\r\n };\r\n /**\r\n * Finds editor by its ID.\r\n * @param editorId The editor ID.\r\n * @returns The value editor or `null`.\r\n */\r\n MetaData.prototype.getEditorById = function (editorId) {\r\n for (var _i = 0, _a = this.editors; _i < _a.length; _i++) {\r\n var editor = _a[_i];\r\n if (editor.id === editorId) {\r\n return editor;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * Gets entity attribute by its ID.\r\n * This function runs through all attributes inside specified model (it's root entity and all its sub-entities).\r\n * @param attrId The attribute ID.\r\n * @returns The attribute or `null`.\r\n */\r\n MetaData.prototype.getAttributeById = function (attrId) {\r\n var attr = this.getEntityAttrById(this.getRootEntity(), attrId);\r\n if (!attr) {\r\n return null;\r\n }\r\n return attr;\r\n };\r\n /**\r\n * Checks wether attribute contains such property.\r\n * @param attrId The attribute ID.\r\n * @param propName The property name.\r\n * @returns `true` if the attribute contains the property, otherwise `false`.\r\n */\r\n MetaData.prototype.checkAttrProperty = function (attrId, propName) {\r\n var attribute = this.getAttributeById(attrId);\r\n if (attribute) {\r\n if (typeof attribute[propName] === 'undefined') {\r\n throw 'No such property: ' + propName;\r\n }\r\n if (attribute[propName]) {\r\n return true;\r\n }\r\n else if (attribute.lookupAttr) {\r\n attrId = attribute.lookupAttr;\r\n attribute = this.getAttributeById(attrId);\r\n return attribute && attribute[propName];\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n else\r\n return false;\r\n };\r\n /**\r\n * Gets entity attribute by its ID.\r\n * This function runs through all attributes inside specified entity and all its sub-entities.\r\n * @param entity\r\n * @param attrId\r\n * @returns The attribute or `null`.\r\n */\r\n MetaData.prototype.getEntityAttrById = function (entity, attrId) {\r\n var idx;\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (idx = 0; idx < attrCount; idx++) {\r\n if (entity.attributes[idx].id == attrId) {\r\n return entity.attributes[idx];\r\n }\r\n }\r\n }\r\n var res;\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (idx = 0; idx < subEntityCount; idx++) {\r\n res = this.getEntityAttrById(entity.subEntities[idx], attrId);\r\n if (res)\r\n return res;\r\n }\r\n }\r\n return null;\r\n };\r\n MetaData.prototype.listByEntityWithFilter = function (entity, filterFunc) {\r\n var result = new Array();\r\n var caption;\r\n var ent = null;\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var entIdx = 0; entIdx < subEntityCount; entIdx++) {\r\n ent = entity.subEntities[entIdx];\r\n if (!filterFunc || filterFunc(ent, null)) {\r\n caption = i18n.getText('Entities', ent.name);\r\n if (!caption) {\r\n caption = ent.caption;\r\n }\r\n var newEnt = utils.assign(this.createEntity(), { id: ent.name, text: caption, items: [], isEntity: true });\r\n newEnt.items = this.listByEntityWithFilter(ent, filterFunc);\r\n if (newEnt.items.length > 0)\r\n result.push(newEnt);\r\n }\r\n }\r\n }\r\n var attr = null;\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var attrIdx = 0; attrIdx < attrCount; attrIdx++) {\r\n attr = entity.attributes[attrIdx];\r\n if (!filterFunc || filterFunc(entity, attr)) {\r\n caption = i18n.getText('Attributes', attr.id);\r\n if (!caption)\r\n caption = attr.caption;\r\n var newEnt = utils.assign(this.createEntity(), { id: attr.id, text: caption, dataType: attr.dataType });\r\n result.push(newEnt);\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n MetaData.prototype.listByEntity = function (entity, opts, filterFunc) {\r\n opts = opts || {};\r\n var resultEntities = [];\r\n var resultAttributes = [];\r\n var caption;\r\n var ent = null;\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var entIdx = 0; entIdx < subEntityCount; entIdx++) {\r\n ent = entity.subEntities[entIdx];\r\n if (!filterFunc || filterFunc(ent, null)) {\r\n caption = i18n.getText('Entities', ent.name) || ent.caption;\r\n var newEnt = utils.assign(this.createEntity(), {\r\n id: ent.name,\r\n text: caption,\r\n items: [],\r\n isEntity: true,\r\n description: ent.description\r\n });\r\n var newOpts = utils.assign({}, opts);\r\n newOpts.includeRootData = false;\r\n newEnt.items = this.listByEntity(ent, newOpts, filterFunc);\r\n if (newEnt.items.length > 0) {\r\n resultEntities.push(newEnt);\r\n }\r\n }\r\n }\r\n }\r\n var attr = null;\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var attrIdx = 0; attrIdx < attrCount; attrIdx++) {\r\n attr = entity.attributes[attrIdx];\r\n if (!filterFunc || filterFunc(entity, attr)) {\r\n caption = i18n.getText('Attributes', attr.id) || attr.caption;\r\n resultAttributes.push(utils.assign(this.createEntityAttr(entity), {\r\n id: attr.id, text: caption,\r\n dataType: attr.dataType, lookupAttr: attr.lookupAttr,\r\n description: attr.description\r\n }));\r\n }\r\n }\r\n }\r\n var sortCheck = function (a, b) {\r\n if (a.text.toLowerCase() == b.text.toLowerCase()) {\r\n return 0;\r\n }\r\n if (a.text.toLowerCase() > b.text.toLowerCase()) {\r\n return 1;\r\n }\r\n return -1;\r\n };\r\n if (opts.sortEntities) {\r\n resultEntities.sort(sortCheck);\r\n resultAttributes.sort(sortCheck);\r\n }\r\n var result;\r\n if (!opts.attrPlacement || opts.attrPlacement == 0) {\r\n result = resultEntities.concat(resultAttributes);\r\n }\r\n else {\r\n result = resultAttributes.concat(resultEntities);\r\n }\r\n if (opts.attrPlacement == 2) {\r\n result.sort(sortCheck);\r\n }\r\n if (opts.includeRootData) {\r\n caption = i18n.getText('Entities', entity.name);\r\n if (!caption)\r\n caption = entity.caption;\r\n return { id: entity.name, text: caption, items: result };\r\n }\r\n else {\r\n return result;\r\n }\r\n };\r\n /**\r\n * Clears data model.\r\n */\r\n MetaData.prototype.clear = function () {\r\n this.rootEntity = this.createEntity();\r\n this.editors = [];\r\n this.version = '';\r\n };\r\n /**\r\n * Add default value editors.\r\n */\r\n MetaData.prototype.addDefaultValueEditors = function () {\r\n var ve;\r\n ve = this.addOrUpdateValueEditor('_DTE', EditorTag.Edit, DataType.String);\r\n ve.defValue = '';\r\n this.addOrUpdateValueEditor('_DPDE', EditorTag.DateTime, DataType.DateTime);\r\n this.addOrUpdateValueEditor('_DPTE', EditorTag.DateTime, DataType.DateTime);\r\n };\r\n /**\r\n * Add or update a value editor.\r\n * @param id The id.\r\n * @param tag The tag.\r\n * @param resType The result type.\r\n * @returns The value editor.\r\n */\r\n MetaData.prototype.addOrUpdateValueEditor = function (id, tag, resType) {\r\n var ve = utils.findItemById(this.editors, id);\r\n if (!ve) {\r\n ve = this.createValueEditor();\r\n ve.id = id;\r\n this.editors.push(ve);\r\n }\r\n ve.tag = tag;\r\n ve.resType = resType;\r\n return ve;\r\n };\r\n /**\r\n * Gets entities tree.\r\n * @param opts The options.\r\n * @param filterFunc The filter function.\r\n * Takes two parameters, Entity and EntityAttr (second parameter will be null for entities), and returns boolean (true if the corresponding entity or attribute).\r\n * @returns The tree of the entities and their attributes according to options and the filter function\r\n */\r\n MetaData.prototype.getEntitiesTree = function (opts, filterFunc) {\r\n return this.listByEntity(this.getRootEntity(), opts, filterFunc);\r\n };\r\n /**\r\n * Gets entities tree due to filter.\r\n * @param filterFunc The filter function.\r\n * Takes two parameters, Entity and EntityAttr (second parameter will be null for entities), and returns boolean (true if the corresponding entity or attribute).\r\n * @returns The tree of the entities and their attributes according to the filter function\r\n */\r\n MetaData.prototype.getEntitiesTreeWithFilter = function (filterFunc) {\r\n return this.listByEntityWithFilter(this.getRootEntity(), filterFunc);\r\n };\r\n /**\r\n * Finds full entity path by attribute\r\n * @param attrId The attribute id.\r\n * @param sep The separator.\r\n * @returns The path.\r\n */\r\n MetaData.prototype.getFullEntityPathByAttr = function (attrId, sep) {\r\n sep = sep || ' ';\r\n return this.getEntityPathByAttr(this.getRootEntity(), attrId, sep, true);\r\n };\r\n /**\r\n * Finds entity path by attribute\r\n * @param entity The entity.\r\n * @param attrId The attribute id.\r\n * @param sep The separator.\r\n * @param root The root option.\r\n * @returns The path.\r\n */\r\n MetaData.prototype.getEntityPathByAttr = function (entity, attrId, sep, root) {\r\n if (!entity)\r\n return '';\r\n sep = sep || ' ';\r\n var entityCaption = '';\r\n if (entity.caption && !root) {\r\n var entityText = i18n.getText('Entities', entity.caption);\r\n entityCaption = entityText ? entityText : entity.caption;\r\n }\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var i = 0; i < attrCount; i++) {\r\n if (entity.attributes[i].id == attrId) {\r\n return entityCaption;\r\n }\r\n }\r\n }\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var i = 0; i < subEntityCount; i++) {\r\n var ent = entity.subEntities[i];\r\n var res = this.getEntityPathByAttr(ent, attrId, sep, false);\r\n if (res !== '') {\r\n if (entityCaption !== '')\r\n res = entityCaption + sep + res;\r\n return res;\r\n }\r\n }\r\n }\r\n return '';\r\n };\r\n /**\r\n * Gets the attribute text.\r\n * @param attr The attribute.\r\n * @param format The format.\r\n * @returns Formatted text.\r\n */\r\n MetaData.prototype.getAttributeText = function (attr, format) {\r\n var attrText = i18n.getText('Attributes', attr.id);\r\n if (!attrText) {\r\n attrText = attr.caption;\r\n }\r\n if (!format) {\r\n return attrText;\r\n }\r\n var result = '';\r\n var entityPath = this.getFullEntityPathByAttr(attr.id, ' ');\r\n if (entityPath) {\r\n result = format.replace(new RegExp('{attr}', 'g'), attrText);\r\n result = result.replace(new RegExp('{entity}', 'g'), entityPath);\r\n }\r\n else {\r\n result = attrText;\r\n }\r\n return result.trim();\r\n };\r\n /**\r\n * Scans model's entity tree and calls the callback functions for each attribute and entity.\r\n * @param processAttribute The callback function which is called for each attribute in model's entity tree.\r\n * The processed attribute is passed in the first function parameter.\r\n * @param processEntity The callback function which is called for each entity in tree.\r\n * The processed entity is passed in the first function parameter.\r\n */\r\n MetaData.prototype.runThroughEntities = function (processAttribute, processEntity) {\r\n this.getRootEntity().scan(processAttribute, processEntity);\r\n };\r\n /**\r\n * Finds first attribute by filter.\r\n * @param filterFunc The filter function. Takes EntityAttr object in parameter and returns boolean\r\n */\r\n MetaData.prototype.getFirstAttributeByFilter = function (filterFunc) {\r\n var res = null;\r\n this.runThroughEntities(function (attr, opts) {\r\n if (filterFunc(attr)) {\r\n opts.stop = true;\r\n res = attr;\r\n }\r\n }, null);\r\n return res;\r\n };\r\n return MetaData;\r\n}());\r\nexport { MetaData };\r\n//# sourceMappingURL=meta_data.js.map","var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n/**\r\n * Defines aggregations settings for the current context.\r\n * Group, aggregate columns, grand totals, etc.\r\n */\r\nvar AggregationSettings = /** @class */ (function () {\r\n function AggregationSettings(colStore) {\r\n this.colStore = colStore;\r\n this.aggregates = [];\r\n this.groups = [];\r\n this.useGrandTotals = false;\r\n this.useRecordCount = false;\r\n this._caseSensitiveGroups = false;\r\n this.COUNT_FIELD_NAME = 'GRPRECCNT';\r\n }\r\n Object.defineProperty(AggregationSettings.prototype, \"caseSensitiveGroups\", {\r\n get: function () {\r\n return this._caseSensitiveGroups;\r\n },\r\n set: function (value) {\r\n this._caseSensitiveGroups = value;\r\n this.updateCompareProc();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n AggregationSettings.prototype.updateCompareProc = function () {\r\n this.compareValues = this._caseSensitiveGroups\r\n ? this.strictCompare\r\n : this.caseInsensitiveCompare;\r\n };\r\n AggregationSettings.prototype.addGroup = function (settings) {\r\n var cols = settings.columns || this.colStore.getColumnIds(settings.from, settings.to);\r\n if (!this.colStore.validateColumns(cols))\r\n throw \"Invalid columns: \" + cols;\r\n if (this.hasColumnsInUse(cols))\r\n throw \"Can't add same columns to different groups/aggregates\";\r\n this.groups.push(__assign({ columns: cols }, settings));\r\n return this;\r\n };\r\n AggregationSettings.prototype.addAggregateColumn = function (colIndexOrId, funcId) {\r\n var colId = typeof colIndexOrId == 'string'\r\n ? colIndexOrId\r\n : this.colStore.getColumnIds(colIndexOrId, colIndexOrId)[0];\r\n if (this.hasColumnsInUse([colId]) || !this.colStore.validateAggregate(colId, funcId))\r\n throw 'Invalid aggregation function for the column: ' + colId;\r\n this.aggregates.push({ colId: colId, funcId: funcId });\r\n return this;\r\n };\r\n AggregationSettings.prototype.addGrandTotals = function () {\r\n this.useGrandTotals = true;\r\n return this;\r\n };\r\n AggregationSettings.prototype.addCounts = function () {\r\n this.useRecordCount = true;\r\n return this;\r\n };\r\n AggregationSettings.prototype.getGroups = function () {\r\n var _this = this;\r\n var cols = [];\r\n var mappedGrops = this.groups.map(function (grp) {\r\n cols = cols.concat(grp.columns);\r\n return __assign(__assign({}, grp), { columns: Array.from(cols), aggregates: Array.from(_this.aggregates) });\r\n });\r\n return mappedGrops;\r\n };\r\n AggregationSettings.prototype.getInternalGroups = function () {\r\n return this.groups;\r\n };\r\n AggregationSettings.prototype.lastGroup = function () {\r\n var groups = this.getGroups();\r\n return groups[groups.length - 1];\r\n };\r\n AggregationSettings.prototype.getAggregates = function () {\r\n return this.aggregates;\r\n };\r\n AggregationSettings.prototype.hasAggregates = function () {\r\n return this.aggregates.length > 0;\r\n };\r\n AggregationSettings.prototype.hasGroups = function () {\r\n return this.groups.length > 0;\r\n };\r\n AggregationSettings.prototype.hasGrandTotals = function () {\r\n return this.useGrandTotals;\r\n };\r\n AggregationSettings.prototype.hasRecordCount = function () {\r\n return this.useRecordCount;\r\n };\r\n AggregationSettings.prototype.isEmpty = function () {\r\n return !(this.hasAggregates() || this.hasGroups() ||\r\n this.hasAggregates() || this.hasRecordCount());\r\n };\r\n AggregationSettings.prototype.drop = function () {\r\n console.warn('\"drop()\" method is obsolete. Use \"clear()\" instead');\r\n this.clear();\r\n };\r\n AggregationSettings.prototype.clear = function () {\r\n this.groups = [];\r\n this.aggregates = [];\r\n this.useGrandTotals = false;\r\n this.useRecordCount = false;\r\n this.caseSensitiveGroups = false;\r\n return this;\r\n };\r\n /**\r\n * Checks if all columns from the list passed in the parameter are \"unused\".\r\n * Here \"unused column\" means a column that is included neither in any group nor in the aggregates list.\r\n * @param cols - the array of column IDs\r\n * @returns true if all columns in the list are not used anywhere, othervise - fals\r\n */\r\n AggregationSettings.prototype.hasColumnsInUse = function (cols) {\r\n for (var _i = 0, _a = this.groups; _i < _a.length; _i++) {\r\n var group = _a[_i];\r\n var interCols = group.columns\r\n .filter(function (c) { return cols.indexOf(c) >= 0; });\r\n if (interCols.length > 0)\r\n return true;\r\n }\r\n for (var _b = 0, _c = this.aggregates; _b < _c.length; _b++) {\r\n var aggr = _c[_b];\r\n if (cols.indexOf(aggr.colId) >= 0)\r\n return true;\r\n }\r\n return false;\r\n };\r\n AggregationSettings.prototype.needAggrCalculation = function () {\r\n return (this.hasAggregates() || this.hasRecordCount())\r\n && (this.hasGrandTotals() || this.hasGroups());\r\n };\r\n AggregationSettings.prototype.saveToData = function () {\r\n return {\r\n groups: Array.from(this.groups),\r\n ugt: this.useGrandTotals,\r\n urc: this.useRecordCount,\r\n csg: this.caseSensitiveGroups,\r\n aggregates: Array.from(this.aggregates)\r\n };\r\n };\r\n AggregationSettings.prototype.loadFromData = function (data) {\r\n if (data) {\r\n if (typeof data.ugt !== 'undefined')\r\n this.useGrandTotals = data.ugt;\r\n if (typeof data.urc !== 'undefined')\r\n this.useRecordCount = data.urc;\r\n if (typeof data.csg !== 'undefined')\r\n this.caseSensitiveGroups = data.csg;\r\n if (data.groups) {\r\n this.groups = Array.from(data.groups);\r\n }\r\n if (data.aggregates) {\r\n this.aggregates = Array.from(data.aggregates);\r\n }\r\n }\r\n };\r\n AggregationSettings.prototype.buildGroupKey = function (group, row) {\r\n var caseInsensitive = !this.caseSensitiveGroups;\r\n var result = {};\r\n if (group) {\r\n for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {\r\n var colId = _a[_i];\r\n var keyVal = row.getValue(colId);\r\n if (caseInsensitive && typeof (keyVal) === 'string') {\r\n keyVal = keyVal.toLowerCase();\r\n }\r\n result[colId] = keyVal;\r\n }\r\n }\r\n return result;\r\n };\r\n //returns true if value1 == value2\r\n AggregationSettings.prototype.strictCompare = function (value1, value2) {\r\n if (value1 instanceof Date) {\r\n return value1.getTime() === value2.getTime();\r\n }\r\n else\r\n return value1 === value2;\r\n };\r\n //makes a case insensative comparision of two values and return true if there are equal\r\n AggregationSettings.prototype.caseInsensitiveCompare = function (value1, value2) {\r\n if (value1 instanceof Date) {\r\n return value1.getTime() === value2.getTime();\r\n }\r\n else {\r\n var val1 = (typeof value1 === 'string') ? value1.toLowerCase() : value1;\r\n var val2 = (typeof value2 === 'string') ? value2.toLowerCase() : value2;\r\n return val1 === val2;\r\n }\r\n };\r\n return AggregationSettings;\r\n}());\r\nexport { AggregationSettings };\r\n//# sourceMappingURL=aggr_settings.js.map","export var liquid;\r\n(function (liquid) {\r\n function renderLiquidTemplate(template, vars) {\r\n var result = template;\r\n if (vars) {\r\n for (var v in vars) {\r\n var liquidVarRegexp = new RegExp('\\{\\{' + v + '\\}\\}', 'g');\r\n result = result.replace(liquidVarRegexp, vars[v]);\r\n }\r\n }\r\n return result;\r\n }\r\n liquid.renderLiquidTemplate = renderLiquidTemplate;\r\n})(liquid || (liquid = {}));\r\n//# sourceMappingURL=liquid.js.map","var DataRow = /** @class */ (function () {\r\n function DataRow(columns, values) {\r\n this.columns = columns;\r\n this.values = values;\r\n }\r\n DataRow.prototype.toArray = function () {\r\n return Array.from(this.values);\r\n };\r\n DataRow.prototype.size = function () {\r\n return this.values.length;\r\n };\r\n DataRow.prototype.getValue = function (colIdOrIndex) {\r\n var index;\r\n if (typeof colIdOrIndex === \"string\") {\r\n index = this.columns.getIndex(colIdOrIndex);\r\n if (index === undefined) {\r\n throw new RangeError(\"No column with id '\" + colIdOrIndex + \"'\");\r\n }\r\n }\r\n else {\r\n index = colIdOrIndex;\r\n }\r\n if (index >= this.values.length)\r\n throw new RangeError(\"Out of range: \" + index);\r\n return this.values[index];\r\n };\r\n DataRow.prototype.setValue = function (colIdOrIndex, value) {\r\n var index;\r\n if (typeof colIdOrIndex === \"string\") {\r\n index = this.columns.getIndex(colIdOrIndex);\r\n if (index === undefined) {\r\n throw new RangeError(\"No column with id '\" + colIdOrIndex + \"'\");\r\n }\r\n }\r\n else {\r\n index = colIdOrIndex;\r\n }\r\n if (index >= this.values.length)\r\n throw new RangeError(\"Out of range: \" + index);\r\n this.values[index] = value;\r\n };\r\n return DataRow;\r\n}());\r\nexport { DataRow };\r\n//# sourceMappingURL=data_row.js.map","import { DataColumnList } from './data_column';\r\nimport { DataRow } from './data_row';\r\nimport { DataType } from '../types/data_type';\r\nimport { utils } from '../utils/utils';\r\nvar EasyDataTable = /** @class */ (function () {\r\n function EasyDataTable(options) {\r\n this._chunkSize = 1000;\r\n this._elasticChunks = false;\r\n this.cachedRows = [];\r\n this.total = 0;\r\n this.loader = null;\r\n this.needTotal = true;\r\n this.isInMemory = false;\r\n options = options || {};\r\n this._chunkSize = options.chunkSize || this._chunkSize;\r\n this._elasticChunks = options.elasticChunks || this._elasticChunks;\r\n this.loader = options.loader;\r\n if (typeof options.inMemory !== 'undefined') {\r\n this.isInMemory = options.inMemory;\r\n }\r\n if (this.isInMemory) {\r\n this.needTotal = false;\r\n }\r\n this._columns = new DataColumnList();\r\n this.onUpdate = options.onUpdate;\r\n if (options.columns) {\r\n for (var _i = 0, _a = options.columns; _i < _a.length; _i++) {\r\n var colDesc = _a[_i];\r\n this._columns.add(colDesc);\r\n }\r\n }\r\n if (options.rows) {\r\n for (var _b = 0, _c = options.rows; _b < _c.length; _b++) {\r\n var rowData = _c[_b];\r\n var row = this.createRow(rowData);\r\n this.addRow(row);\r\n }\r\n }\r\n this.needTotal = !this._elasticChunks;\r\n }\r\n Object.defineProperty(EasyDataTable.prototype, \"columns\", {\r\n get: function () {\r\n return this._columns;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(EasyDataTable.prototype, \"chunkSize\", {\r\n get: function () {\r\n return this._chunkSize;\r\n },\r\n set: function (value) {\r\n this._chunkSize = value;\r\n this.total = 0;\r\n this.needTotal = !this.elasticChunks;\r\n this.cachedRows = [];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(EasyDataTable.prototype, \"elasticChunks\", {\r\n get: function () {\r\n return this._elasticChunks;\r\n },\r\n set: function (value) {\r\n this._elasticChunks = value;\r\n this.total = 0;\r\n this.needTotal = !this.elasticChunks;\r\n this.cachedRows = [];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n EasyDataTable.prototype.getRows = function (params) {\r\n var _this = this;\r\n var fromIndex = 0, count = this._chunkSize;\r\n if (params) {\r\n if ('page' in params) {\r\n fromIndex = params.pageSize * (params.page - 1);\r\n count = params.pageSize;\r\n }\r\n else {\r\n fromIndex = params.offset;\r\n count = params.limit;\r\n }\r\n }\r\n var endIndex = fromIndex + count; //the first index of the next page\r\n //if we don't calculate total on this request\r\n if (!this.needTotal && !this.elasticChunks) {\r\n if (fromIndex >= this.total) {\r\n return Promise.resolve([]);\r\n }\r\n if (endIndex > this.total) {\r\n endIndex = this.total;\r\n }\r\n }\r\n if (this.isInMemory && endIndex > this.cachedRows.length) {\r\n endIndex = this.cachedRows.length;\r\n }\r\n var allChunksCached = endIndex <= this.cachedRows.length;\r\n if (allChunksCached) {\r\n return Promise.resolve(this.cachedRows.slice(fromIndex, endIndex));\r\n }\r\n //if loader is not defined\r\n if (!this.loader) {\r\n throw \"Loader is not defined. Can't get the rows from \" + fromIndex + \" to \" + endIndex;\r\n }\r\n // we need total only for the first request\r\n var needTotal = this.needTotal;\r\n if (this.needTotal) {\r\n this.needTotal = false;\r\n }\r\n var offset = this.cachedRows.length;\r\n var limit = endIndex - offset;\r\n if (limit < this._chunkSize) {\r\n limit = this._chunkSize;\r\n }\r\n var resultPromise = this.loader.loadChunk({\r\n offset: offset,\r\n limit: limit,\r\n needTotal: needTotal\r\n })\r\n .then(function (result) {\r\n if (needTotal) {\r\n _this.total = result.total;\r\n }\r\n Array.prototype.push.apply(_this.cachedRows, result.table.getCachedRows());\r\n if (endIndex > _this.cachedRows.length) {\r\n endIndex = _this.cachedRows.length;\r\n }\r\n if (_this.elasticChunks) {\r\n var count_1 = result.table.getCachedCount();\r\n if (count_1 < limit) {\r\n _this.total = _this.cachedRows.length;\r\n }\r\n }\r\n _this.fireUpdated();\r\n return _this.cachedRows.slice(fromIndex, endIndex);\r\n });\r\n return resultPromise;\r\n };\r\n EasyDataTable.prototype.getRow = function (index) {\r\n return this.getRows({ offset: index, limit: 1 })\r\n .then(function (rows) { return rows.length > 0 ? rows[0] : null; });\r\n };\r\n EasyDataTable.prototype.getTotal = function () {\r\n return this.total;\r\n };\r\n EasyDataTable.prototype.setTotal = function (total) {\r\n this.total = total;\r\n this.needTotal = false;\r\n };\r\n EasyDataTable.prototype.getCachedCount = function () {\r\n return this.cachedRows.length;\r\n };\r\n EasyDataTable.prototype.clear = function () {\r\n this.columns.clear();\r\n this.cachedRows = [];\r\n this.total = 0;\r\n this.needTotal = !this._elasticChunks;\r\n this.fireUpdated();\r\n };\r\n EasyDataTable.prototype.createRow = function (dataOrRow) {\r\n var _this = this;\r\n var dateIdx = this._columns.getDateColumnIndexes();\r\n var values = new Array(this._columns.count);\r\n var getValue = dataOrRow instanceof DataRow\r\n ? function (colId) { return dataOrRow.getValue(colId); }\r\n : function (colId) { return dataOrRow[colId]; };\r\n if (dataOrRow) {\r\n this.columns.getItems().forEach(function (column) {\r\n var value = getValue(column.id);\r\n var index = _this.columns.getIndex(column.id);\r\n values[index] = (dateIdx.indexOf(index) >= 0)\r\n ? _this.mapDate(value, column.type)\r\n : value;\r\n });\r\n }\r\n return new DataRow(this._columns, values);\r\n };\r\n EasyDataTable.prototype.mapDate = function (value, dtype) {\r\n if (value) {\r\n var result = new Date(value);\r\n if (isNaN(result.getTime())\r\n && dtype == DataType.Time) {\r\n result = utils.strToTime(value);\r\n }\r\n return result;\r\n }\r\n return null;\r\n };\r\n EasyDataTable.prototype.addRow = function (rowOrValues) {\r\n var newRow;\r\n if (Array.isArray(rowOrValues)) {\r\n var values = rowOrValues;\r\n var dateIdx = this._columns.getDateColumnIndexes();\r\n if (dateIdx.length > 0) {\r\n for (var _i = 0, dateIdx_1 = dateIdx; _i < dateIdx_1.length; _i++) {\r\n var idx = dateIdx_1[_i];\r\n if (values[idx]) {\r\n values[idx] = this.mapDate(values[idx], this._columns.get(idx).type);\r\n }\r\n }\r\n }\r\n newRow = new DataRow(this._columns, values);\r\n }\r\n else {\r\n newRow = this.createRow(rowOrValues);\r\n }\r\n this.cachedRows.push(newRow);\r\n var cachedTotal = this.getCachedCount();\r\n if (cachedTotal > this.total) {\r\n this.total = cachedTotal;\r\n }\r\n return newRow;\r\n };\r\n EasyDataTable.prototype.getCachedRows = function () {\r\n return this.cachedRows;\r\n };\r\n EasyDataTable.prototype.totalIsKnown = function () {\r\n if (this.elasticChunks) {\r\n var count = this.getCachedCount();\r\n return count === this.total;\r\n }\r\n return !this.needTotal;\r\n };\r\n EasyDataTable.prototype.fireUpdated = function () {\r\n if (this.onUpdate) {\r\n this.onUpdate(this);\r\n }\r\n };\r\n return EasyDataTable;\r\n}());\r\nexport { EasyDataTable };\r\n//# sourceMappingURL=easy_data_table.js.map","/**\r\n * EasyData representation of GUID.\r\n */\r\nvar EasyGuid = /** @class */ (function () {\r\n function EasyGuid() {\r\n }\r\n /**\r\n * Generates new GUID.\r\n * @returns The string representation of GUID.\r\n */\r\n EasyGuid.newGuid = function () {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n };\r\n return EasyGuid;\r\n}());\r\nexport { EasyGuid };\r\n//# sourceMappingURL=easy_guid.js.map","import { EasyGuid } from '../utils/easy_guid';\r\n/**\r\n * The representation of event emitter.\r\n */\r\nvar EventEmitter = /** @class */ (function () {\r\n /**\r\n * The default constructor.\r\n * @param source The source.\r\n */\r\n function EventEmitter(source) {\r\n this.silentMode = 0;\r\n this.events = new Array();\r\n this.source = source;\r\n }\r\n /**\r\n * Subscries to the event.\r\n * @param eventType The event type.\r\n * @param callback The callback.\r\n * @returns The subscribtion ID.\r\n */\r\n EventEmitter.prototype.subscribe = function (eventType, callback) {\r\n var event = this.getEventRecByType(eventType);\r\n var eventCallback = {\r\n id: EasyGuid.newGuid(),\r\n callback: callback\r\n };\r\n if (event) {\r\n event.eventCallbacks.push(eventCallback);\r\n }\r\n else {\r\n event = {\r\n type: eventType,\r\n eventCallbacks: new Array(eventCallback)\r\n };\r\n this.events.push(event);\r\n }\r\n return eventCallback.id;\r\n };\r\n /**\r\n * Unsubsribes from the event.\r\n * @param eventType The event type.\r\n * @param callbackId The subscribtion ID.\r\n */\r\n EventEmitter.prototype.unsubscribe = function (eventType, callbackId) {\r\n var event = this.getEventRecByType(eventType);\r\n if (event) {\r\n var index = -1;\r\n for (index = 0; index < event.eventCallbacks.length; index++) {\r\n if (event.eventCallbacks[index].id === callbackId) {\r\n break;\r\n }\r\n }\r\n if (index >= 0) {\r\n event.eventCallbacks.splice(index, 1);\r\n }\r\n }\r\n };\r\n /**\r\n * Fires the event.\r\n * @param eventType The event type.\r\n * @param data The event data.\r\n * @param postpone The postpone.\r\n * @param force To fire force. If value is `true`, ignores silent mode.\r\n */\r\n EventEmitter.prototype.fire = function (eventType, data, postpone, force) {\r\n if (postpone === void 0) { postpone = 0; }\r\n if (force === void 0) { force = false; }\r\n if (this.silentMode && !force) {\r\n return;\r\n }\r\n var eventRec = this.getEventRecByType(eventType);\r\n if (eventRec) {\r\n var eqevent_1 = {\r\n type: eventType,\r\n source: this.source,\r\n data: data\r\n };\r\n var emitAllFunc = function () {\r\n for (var _i = 0, _a = eventRec.eventCallbacks; _i < _a.length; _i++) {\r\n var callback = _a[_i];\r\n callback.callback(eqevent_1);\r\n }\r\n };\r\n if (postpone > 0) {\r\n setTimeout(emitAllFunc, postpone);\r\n }\r\n else {\r\n emitAllFunc();\r\n }\r\n }\r\n };\r\n /**\r\n * Enters to silent mode.\r\n */\r\n EventEmitter.prototype.enterSilentMode = function () {\r\n this.silentMode++;\r\n };\r\n /**\r\n * Exits from silent mode.\r\n */\r\n EventEmitter.prototype.exitSilentMode = function () {\r\n if (this.silentMode) {\r\n this.silentMode--;\r\n }\r\n };\r\n /**\r\n * Checks if emitter is in silent mode.\r\n * @return `true`, if silent mode is enable.\r\n */\r\n EventEmitter.prototype.isSilent = function () {\r\n return this.silentMode > 0;\r\n };\r\n EventEmitter.prototype.getEventRecByType = function (eventType) {\r\n for (var _i = 0, _a = this.events; _i < _a.length; _i++) {\r\n var event_1 = _a[_i];\r\n if (event_1.type == eventType) {\r\n return event_1;\r\n }\r\n }\r\n return null;\r\n };\r\n return EventEmitter;\r\n}());\r\nexport { EventEmitter };\r\n//# sourceMappingURL=event_emitter.js.map","import { i18n } from './i18n';\r\ni18n.resetLocales();\r\n//# sourceMappingURL=load_default_locale_settings.js.map","//types\r\nexport * from './types/data_type';\r\nexport * from './types/entity_attr_kind';\r\nexport * from './types/editor_tag';\r\n//http\r\nexport * from './http/http_method';\r\nexport * from './http/http_request';\r\nexport * from './http/http_client';\r\n//meta data\r\nexport * from './meta/meta_data';\r\nexport * from './meta/meta_entity';\r\nexport * from './meta/value_editor';\r\nexport * from './data/aggr_settings';\r\nexport * from './data/data_column';\r\nexport * from './data/data_row';\r\nexport * from './data/easy_data_table';\r\n//event\r\nexport * from './event/event_emitter';\r\n//i18n\r\nexport * from './i18n/i18n';\r\n//utils\r\nexport * from './utils/easy_guid';\r\nexport * from './utils/string_utils';\r\nexport * from './utils/utils';\r\nexport * from './utils/liquid';\r\nimport './i18n/load_default_locale_settings';\r\nif (typeof Object.values !== 'function') {\r\n Object.values = function (obj) {\r\n return Object.keys(obj).map(function (key) { return obj[key]; });\r\n };\r\n}\r\nif (typeof Math.trunc !== 'function') {\r\n Math.trunc = function (x) {\r\n if (isNaN(x)) {\r\n return NaN;\r\n }\r\n if (x > 0) {\r\n return Math.floor(x);\r\n }\r\n return Math.ceil(x);\r\n };\r\n}\r\n//# sourceMappingURL=public_api.js.map","import { \r\n DataLoader, DataRow, \r\n EasyDataTable, utils as dataUtils \r\n} from '@easydata/core';\r\n\r\nimport { DataFilter } from './data_filter';\r\n\r\nexport class TextDataFilter implements DataFilter {\r\n private filterValue = '';\r\n\r\n //turns off client-side search\r\n //for test purposes\r\n private justServerSide = false;\r\n\r\n constructor (\r\n private loader: DataLoader, \r\n private sourceTable: EasyDataTable, \r\n private sourceId: string,\r\n private isLookup = false) {\r\n }\r\n\r\n public getValue() {\r\n return this.filterValue;\r\n }\r\n \r\n public apply(value: string): Promise<EasyDataTable> {\r\n this.filterValue = value;\r\n\r\n if (this.filterValue) {\r\n return this.applyCore();\r\n }\r\n else {\r\n return this.clear();\r\n }\r\n }\r\n\r\n public clear(): Promise<EasyDataTable> {\r\n this.filterValue = '';\r\n return Promise.resolve(this.sourceTable);\r\n }\r\n\r\n private applyCore(): Promise<EasyDataTable> {\r\n if (this.sourceTable.getTotal() == this.sourceTable.getCachedCount() && !this.justServerSide) {\r\n return this.applyInMemoryFilter();\r\n }\r\n else {\r\n const filters = [\r\n { class: \"__substring\", value: this.filterValue }\r\n ]\r\n return this.loader.loadChunk({ \r\n offset: 0, \r\n limit: this.sourceTable.chunkSize, \r\n needTotal: true, \r\n filters: filters,\r\n sourceId: this.sourceId,\r\n lookup: this.isLookup\r\n } as any)\r\n .then(data => {\r\n const filteredTable = new EasyDataTable({\r\n chunkSize: this.sourceTable.chunkSize,\r\n loader: {\r\n loadChunk: (params) => this.loader\r\n .loadChunk({ ...params, filters: filters, sourceId: this.sourceId, lookup: this.isLookup } as any)\r\n }\r\n });\r\n\r\n for (const col of this.sourceTable.columns.getItems()) {\r\n filteredTable.columns.add(col);\r\n }\r\n\r\n filteredTable.setTotal(data.total);\r\n\r\n for (const row of data.table.getCachedRows()) {\r\n filteredTable.addRow(row);\r\n }\r\n\r\n return filteredTable;\r\n })\r\n }\r\n }\r\n\r\n private applyInMemoryFilter(): Promise<EasyDataTable> {\r\n return new Promise((resolve, reject) => {\r\n const filteredTable = new EasyDataTable({\r\n chunkSize: this.sourceTable.chunkSize,\r\n inMemory: true\r\n });\r\n\r\n for(const col of this.sourceTable.columns.getItems()) {\r\n filteredTable.columns.add(col);\r\n } \r\n \r\n const words = this.filterValue.split('||').map(w => w.trim().toLowerCase());\r\n const suitableColumns = this.sourceTable.columns.getItems()\r\n .filter(col => dataUtils.isNumericType(col.type) \r\n || dataUtils.getStringDataTypes().indexOf(col.type) >= 0)\r\n const hasEnterance = (row: DataRow) => {\r\n for (const col of suitableColumns) {\r\n const value = row.getValue(col.id);\r\n if (value) {\r\n const normalized = value.toString().toLowerCase();\r\n\r\n for(const word of words) {\r\n if (normalized.indexOf(word) >= 0) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n for (const row of this.sourceTable.getCachedRows()) {\r\n if (hasEnterance(row)) {\r\n filteredTable.addRow(row); \r\n }\r\n }\r\n\r\n filteredTable.setTotal(filteredTable.getCachedCount());\r\n\r\n resolve(filteredTable);\r\n });\r\n } \r\n}","import { browserUtils } from './browser_utils';\r\n/**\r\n * Wraps all the elements inside \"parent\" by \"wrapper\" element\r\n * @param parent The element to add wrapper to.\r\n * @param wrapper The element that will wrap child elements.\r\n */\r\nexport function wrapInner(parent, wrapper) {\r\n parent.appendChild(wrapper);\r\n while (parent.firstChild !== wrapper) {\r\n wrapper.appendChild(parent.firstChild);\r\n }\r\n}\r\n/**\r\n * Creates ands adds a new [[HTMLElement]] to \"parent\"\r\n * @param parent The element to add new element to.\r\n * @param tag Html tag of the new element.\r\n * @param options The options. In particular, options.cssClass sets the new element class.\r\n * @returns New element.\r\n */\r\nexport function addElement(parent, tag, options) {\r\n var element = document.createElement(tag);\r\n var opts = options || {};\r\n if (opts.cssClass) {\r\n element.className = opts.cssClass;\r\n }\r\n parent.appendChild(element);\r\n return element;\r\n}\r\n/**\r\n * Adds css class to the html element.\r\n * @param element The element to add css class to.\r\n * @param className The name of the css class to be added.\r\n */\r\nexport function addCssClass(element, className) {\r\n element.className = (element.className)\r\n ? element.className + ' ' + className\r\n : className;\r\n}\r\n/**\r\n * Hides the html element.\r\n * @param element The element to be hidden.\r\n */\r\nexport function hideElement(element) {\r\n element.style.display = 'none';\r\n}\r\n/**\r\n * Shows the html element.\r\n * @param element The element to be shown.\r\n * @param display The value of \"display\" style to be set. Default value is \"block\".\r\n */\r\nexport function showElement(element, display) {\r\n if (!display) {\r\n display = '';\r\n }\r\n element.style.display = display;\r\n}\r\n/**\r\n * Hides the \"first\" element and shows the \"second\".\r\n * @param first The element to be hidden.\r\n * @param second The element to be shown.\r\n * @param options The options. The following options are applied:\r\n * - display - the value of \"display\" style to be set. Default value is \"block\"\r\n * - duration - the duration of fading in and out\r\n * - complete - the callback to be called when toggle is complete\r\n */\r\nexport function toggleVisibility(first, second, options) {\r\n if (!options) {\r\n options = {};\r\n }\r\n if (!options.display) {\r\n options.display = '';\r\n }\r\n if (!options.duration) {\r\n options.duration = 200;\r\n }\r\n //TODO: later we need to make it fading in and out\r\n hideElement(first);\r\n showElement(second, options.display);\r\n if (options.complete) {\r\n options.complete();\r\n }\r\n}\r\n/**\r\n * Checks if element is visible\r\n * @param element The element to check.\r\n * @returns `true` if visible, otherwise - `false`.\r\n */\r\nexport function isVisible(element) {\r\n return element.style.display != 'none'\r\n && element.offsetWidth != 0\r\n && element.offsetHeight != 0;\r\n}\r\nexport function createBrowserEvent(eventName) {\r\n var event;\r\n if (typeof (Event) === 'function') {\r\n event = new Event(eventName);\r\n }\r\n else {\r\n event = document.createEvent('Event');\r\n event.initEvent(eventName, true, true);\r\n }\r\n return event;\r\n}\r\nexport function getViewportSize() {\r\n var width = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\r\n var height = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);\r\n return {\r\n width: width,\r\n height: height\r\n };\r\n}\r\nexport function getDocSize() {\r\n if (browserUtils.IsIE())\r\n return getWinSize();\r\n var width = Math.max(document.documentElement.clientWidth, document.body.clientWidth || 0);\r\n var height = Math.max(document.documentElement.clientHeight, document.body.clientHeight || 0);\r\n return {\r\n width: width,\r\n height: height\r\n };\r\n}\r\nexport function getScrollPos() {\r\n var body = document.body;\r\n var docElem = document.documentElement;\r\n return {\r\n top: window.pageYOffset || docElem.scrollTop || body.scrollTop,\r\n left: window.pageXOffset || docElem.scrollLeft || body.scrollLeft\r\n };\r\n}\r\nexport function getElementAbsolutePos(element) {\r\n var res = { x: 0, y: 0 };\r\n if (element !== null) {\r\n var position = offset(element);\r\n res = { x: position.left, y: position.top };\r\n }\r\n return res;\r\n}\r\nfunction offset(element) {\r\n var defaultBoundingClientRect = { top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 };\r\n var box;\r\n try {\r\n box = element.getBoundingClientRect();\r\n }\r\n catch (_a) {\r\n box = defaultBoundingClientRect;\r\n }\r\n var body = document.body;\r\n var docElem = document.documentElement;\r\n var scollPos = getScrollPos();\r\n var scrollTop = scollPos.top;\r\n var scrollLeft = scollPos.left;\r\n var clientTop = docElem.clientTop || body.clientTop || 0;\r\n var clientLeft = docElem.clientLeft || body.clientLeft || 0;\r\n var top = box.top + scrollTop - clientTop;\r\n var left = box.left + scrollLeft - clientLeft;\r\n return { top: Math.round(top), left: Math.round(left) };\r\n}\r\nexport function getWinSize() {\r\n return {\r\n width: window.innerWidth,\r\n height: window.innerHeight\r\n };\r\n}\r\nexport function slideDown(target, duration, callback) {\r\n target.style.removeProperty('display');\r\n var display = window.getComputedStyle(target).display;\r\n if (display === 'none')\r\n display = 'block';\r\n target.style.display = display;\r\n var height = target.offsetHeight;\r\n target.style.overflow = 'hidden';\r\n target.style.height = 0 + 'px';\r\n target.style.paddingTop = 0 + 'px';\r\n target.style.paddingBottom = 0 + 'px';\r\n target.style.marginTop = 0 + 'px';\r\n target.style.marginBottom = 0 + 'px';\r\n target.offsetHeight;\r\n target.style.boxSizing = 'border-box';\r\n target.style.transitionProperty = \"height, margin, padding\";\r\n target.style.transitionDuration = duration + 'ms';\r\n target.style.height = height + 'px';\r\n target.style.removeProperty('padding-top');\r\n target.style.removeProperty('padding-bottom');\r\n target.style.removeProperty('margin-top');\r\n target.style.removeProperty('margin-bottom');\r\n window.setTimeout(function () {\r\n target.style.removeProperty('height');\r\n target.style.removeProperty('overflow');\r\n target.style.removeProperty('transition-duration');\r\n target.style.removeProperty('transition-property');\r\n target.style.removeProperty('box-sizing');\r\n if (callback) {\r\n callback();\r\n }\r\n }, duration);\r\n}\r\nexport function slideUp(target, duration, callback) {\r\n target.style.transitionProperty = 'height, margin, padding';\r\n target.style.transitionDuration = duration + 'ms';\r\n target.style.boxSizing = 'border-box';\r\n target.style.height = target.offsetHeight + 'px';\r\n target.offsetHeight;\r\n target.style.overflow = 'hidden';\r\n target.style.height = 0 + 'px';\r\n target.style.paddingTop = 0 + 'px';\r\n target.style.paddingBottom = 0 + 'px';\r\n target.style.marginTop = 0 + 'px';\r\n target.style.marginBottom = 0 + 'px';\r\n window.setTimeout(function () {\r\n target.style.display = 'none';\r\n target.style.removeProperty('height');\r\n target.style.removeProperty('padding-top');\r\n target.style.removeProperty('padding-bottom');\r\n target.style.removeProperty('margin-top');\r\n target.style.removeProperty('margin-bottom');\r\n target.style.removeProperty('overflow');\r\n target.style.removeProperty('transition-duration');\r\n target.style.removeProperty('transition-property');\r\n target.style.removeProperty('box-sizing');\r\n if (callback) {\r\n callback();\r\n }\r\n }, duration);\r\n}\r\nexport var eqCssPrefix = 'eqjs';\r\nexport var eqCssMobile = 'eqjs-mobile';\r\n//# sourceMappingURL=ui-utils.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport { mask } from './mask';\r\nvar DomElementBuilder = /** @class */ (function () {\r\n function DomElementBuilder(tag, parent) {\r\n if (typeof tag === \"string\") {\r\n this.element = document.createElement(tag);\r\n }\r\n else {\r\n this.element = tag;\r\n }\r\n if (parent && this.element.parentElement !== parent) {\r\n parent.appendChild(this.element);\r\n }\r\n }\r\n DomElementBuilder.prototype.addChild = function (tag, childBuilder) {\r\n var builder = domel(tag, this.element);\r\n if (childBuilder) {\r\n childBuilder(builder);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.addChildElement = function (element) {\r\n if (element) {\r\n this.element.appendChild(element);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.attr = function (attrId, attrValue) {\r\n this.element.setAttribute(attrId, attrValue);\r\n return this;\r\n };\r\n DomElementBuilder.prototype.id = function (value) {\r\n return this.attr(\"id\", value);\r\n };\r\n DomElementBuilder.prototype.focus = function () {\r\n this.element.focus();\r\n return this;\r\n };\r\n DomElementBuilder.prototype.title = function (value) {\r\n return this.attr('title', value);\r\n };\r\n DomElementBuilder.prototype.data = function (dataId, dataValue) {\r\n if (dataValue === void 0) { dataValue = null; }\r\n if (dataValue === null) {\r\n this.element.removeAttribute('data-' + dataId);\r\n return this;\r\n }\r\n else {\r\n return this.attr('data-' + dataId, dataValue);\r\n }\r\n };\r\n DomElementBuilder.prototype.show = function () {\r\n return this.removeStyle('display');\r\n };\r\n DomElementBuilder.prototype.hide = function (toHide) {\r\n if (toHide === void 0) { toHide = true; }\r\n return (toHide) ? this.setStyle('display', 'none') : this;\r\n };\r\n DomElementBuilder.prototype.visible = function (isVisible) {\r\n if (isVisible === void 0) { isVisible = true; }\r\n return isVisible ? this.setStyle('visibility', 'visible') : this.setStyle('visibility', 'hidden');\r\n };\r\n DomElementBuilder.prototype.isVisible = function () {\r\n return !!(this.element.offsetWidth || this.element.offsetHeight || this.element.getClientRects().length);\r\n };\r\n DomElementBuilder.prototype.addClass = function (className) {\r\n var classNames = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n classNames[_i - 1] = arguments[_i];\r\n }\r\n if (className) {\r\n var fullList = __spreadArrays(className.trim().split(\" \"), classNames);\r\n for (var i = 0; i < fullList.length; i++)\r\n this.element.classList.add(fullList[i]);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.removeClass = function (className) {\r\n var classNames = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n classNames[_i - 1] = arguments[_i];\r\n }\r\n if (className) {\r\n var fullList = __spreadArrays(className.trim().split(\" \"), classNames);\r\n for (var i = 0; i < fullList.length; i++)\r\n this.element.classList.remove(fullList[i]);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.toggleClass = function (className, force) {\r\n if (force === void 0) { force = undefined; }\r\n if (className) {\r\n this.element.classList.toggle(className, force);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.on = function (eventType, listener) {\r\n var eventTypes = eventType.split(' ');\r\n for (var i = 0; i < eventTypes.length; i++) {\r\n this.element.addEventListener(eventTypes[i], listener);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.off = function (eventType, listener) {\r\n var eventTypes = eventType.split(' ');\r\n for (var i = 0; i < eventTypes.length; i++) {\r\n this.element.removeEventListener(eventTypes[i], listener);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.setStyle = function (styleId, styleValue) {\r\n this.element.style.setProperty(styleId, styleValue);\r\n return this;\r\n };\r\n DomElementBuilder.prototype.removeStyle = function (styleId) {\r\n this.element.style.removeProperty(styleId);\r\n return this;\r\n };\r\n DomElementBuilder.prototype.text = function (text) {\r\n this.element.innerText = text;\r\n return this;\r\n };\r\n DomElementBuilder.prototype.html = function (html) {\r\n this.element.innerHTML = html;\r\n return this;\r\n };\r\n DomElementBuilder.prototype.clear = function () {\r\n var oldElem = this.element;\r\n this.element = document.createElement(this.element.tagName);\r\n oldElem.replaceWith(this.element);\r\n };\r\n DomElementBuilder.prototype.addText = function (text) {\r\n var textEl = document.createTextNode(text);\r\n this.element.appendChild(textEl);\r\n return this;\r\n };\r\n DomElementBuilder.prototype.addHtml = function (html) {\r\n this.element.innerHTML += html;\r\n return this;\r\n };\r\n DomElementBuilder.prototype.toDOM = function () {\r\n return this.element;\r\n };\r\n DomElementBuilder.prototype.appendTo = function (parent) {\r\n if (parent) {\r\n parent.appendChild(this.element);\r\n }\r\n return this;\r\n };\r\n return DomElementBuilder;\r\n}());\r\nexport { DomElementBuilder };\r\nvar DomTextAreaElementBuilder = /** @class */ (function (_super) {\r\n __extends(DomTextAreaElementBuilder, _super);\r\n function DomTextAreaElementBuilder(element, parent) {\r\n var _this = this;\r\n if (element) {\r\n _this = _super.call(this, element, parent) || this;\r\n }\r\n else {\r\n _this = _super.call(this, \"textarea\", parent) || this;\r\n }\r\n return _this;\r\n }\r\n DomTextAreaElementBuilder.prototype.name = function (value) {\r\n this.element.name = value;\r\n return this;\r\n };\r\n DomTextAreaElementBuilder.prototype.rows = function (rows) {\r\n this.element.rows = rows;\r\n return this;\r\n };\r\n DomTextAreaElementBuilder.prototype.cols = function (cols) {\r\n this.element.cols = cols;\r\n return this;\r\n };\r\n DomTextAreaElementBuilder.prototype.value = function (value) {\r\n this.element.value = value;\r\n return this;\r\n };\r\n return DomTextAreaElementBuilder;\r\n}(DomElementBuilder));\r\nexport { DomTextAreaElementBuilder };\r\nvar DomInputElementBuilder = /** @class */ (function (_super) {\r\n __extends(DomInputElementBuilder, _super);\r\n function DomInputElementBuilder(element, parent) {\r\n var _this = this;\r\n if (element) {\r\n _this = _super.call(this, element, parent) || this;\r\n }\r\n else {\r\n _this = _super.call(this, \"input\", parent) || this;\r\n }\r\n return _this;\r\n }\r\n DomInputElementBuilder.prototype.name = function (value) {\r\n this.element.name = value;\r\n return this;\r\n };\r\n DomInputElementBuilder.prototype.type = function (value) {\r\n this.element.type = value;\r\n return this;\r\n };\r\n DomInputElementBuilder.prototype.size = function (value) {\r\n this.element.size = value;\r\n return this;\r\n };\r\n DomInputElementBuilder.prototype.value = function (value) {\r\n if (value instanceof Date) {\r\n this.element.valueAsDate = value;\r\n }\r\n else if (typeof value === \"number\") {\r\n this.element.valueAsNumber = value;\r\n }\r\n else {\r\n this.element.value = value;\r\n }\r\n return this;\r\n };\r\n DomInputElementBuilder.prototype.mask = function (maskPattern) {\r\n mask(this.element, maskPattern);\r\n return this;\r\n };\r\n return DomInputElementBuilder;\r\n}(DomElementBuilder));\r\nexport { DomInputElementBuilder };\r\nvar DomSelectElementBuilder = /** @class */ (function (_super) {\r\n __extends(DomSelectElementBuilder, _super);\r\n function DomSelectElementBuilder(element, parent) {\r\n var _this = this;\r\n if (element) {\r\n _this = _super.call(this, element, parent) || this;\r\n }\r\n else {\r\n _this = _super.call(this, \"select\", parent) || this;\r\n }\r\n return _this;\r\n }\r\n DomSelectElementBuilder.prototype.addOption = function (value) {\r\n var option = document.createElement('option');\r\n if (typeof value === \"string\") {\r\n option.value = value;\r\n option.innerHTML = value;\r\n }\r\n else {\r\n option.value = value.value;\r\n option.innerHTML = value.title || value.value;\r\n option.selected = value.selected || false;\r\n }\r\n this.element.appendChild(option);\r\n return this;\r\n };\r\n DomSelectElementBuilder.prototype.value = function (value) {\r\n this.element.value = value;\r\n return this;\r\n };\r\n return DomSelectElementBuilder;\r\n}(DomElementBuilder));\r\nexport { DomSelectElementBuilder };\r\nexport function domel(tag, parent) {\r\n if (tag === \"div\" || tag instanceof HTMLDivElement) {\r\n return new DomElementBuilder(tag, parent);\r\n }\r\n if (tag === \"span\" || tag instanceof HTMLSpanElement) {\r\n return new DomElementBuilder(tag, parent);\r\n }\r\n else if (tag === \"a\" || tag instanceof HTMLAnchorElement) {\r\n return new DomElementBuilder(tag, parent);\r\n }\r\n else if (tag === \"button\" || tag instanceof HTMLButtonElement) {\r\n return new DomElementBuilder(tag, parent);\r\n }\r\n else if (tag === \"img\" || tag instanceof HTMLImageElement) {\r\n return new DomElementBuilder(tag, parent);\r\n }\r\n else if (tag === \"input\" || tag instanceof HTMLInputElement) {\r\n return new DomInputElementBuilder(tag instanceof HTMLInputElement ? tag : null, parent);\r\n }\r\n else if (tag === \"textarea\" || tag instanceof HTMLTextAreaElement) {\r\n return new DomTextAreaElementBuilder(tag instanceof HTMLTextAreaElement ? tag : null, parent);\r\n }\r\n else if (tag === \"select\" || tag instanceof HTMLSelectElement) {\r\n return new DomSelectElementBuilder(tag instanceof HTMLSelectElement ? tag : null, parent);\r\n }\r\n return new DomElementBuilder(tag, parent);\r\n}\r\n//# sourceMappingURL=dom_elem_builder.js.map","export function mask(input, maskPattern) {\r\n var d = { 9: '[0-9]', a: '[a-z]' };\r\n var mask = maskPattern.split('');\r\n var keyDownHandler = function (e) {\r\n // backspace key or delete key\r\n if (e.keyCode === 8 || e.keyCode === 46) {\r\n e.preventDefault();\r\n var mskd = [];\r\n var startSelection = input.selectionStart;\r\n if (startSelection == 0)\r\n return;\r\n var selection = startSelection;\r\n var onlyLodash = true;\r\n for (var index = mask.length - 1; index >= 0; index--) {\r\n var el = mask[index];\r\n if (d[el]) {\r\n var t = new RegExp(d[el], 'i').test(input.value.charAt(index));\r\n if (t && index != startSelection - 1) {\r\n onlyLodash = false;\r\n }\r\n if (index === startSelection - 1)\r\n selection--;\r\n mskd.push(t && index != startSelection - 1\r\n ? input.value.charAt(index)\r\n : '_');\r\n }\r\n else {\r\n if (index === selection - 1)\r\n selection--;\r\n if (startSelection - 1 === index)\r\n startSelection--;\r\n mskd.push(el);\r\n }\r\n }\r\n input.value = !onlyLodash ? mskd.reverse().join('') : '';\r\n input.selectionStart = input.selectionEnd = selection < 0 ? 0 : selection;\r\n var event_1 = document.createEvent('Event');\r\n event_1.initEvent('input', true, true);\r\n input.dispatchEvent(event_1);\r\n }\r\n };\r\n var keyPressHandler = function (e) {\r\n var char = String.fromCharCode(e.charCode);\r\n if (char) {\r\n e.preventDefault();\r\n var mskd_1 = [];\r\n var selectionStart_1 = input.selectionStart;\r\n var selection_1 = selectionStart_1;\r\n mask.forEach(function (el, index) {\r\n if (d[el]) {\r\n var ch = (index != selectionStart_1)\r\n ? input.value.charAt(index)\r\n : char;\r\n var t = new RegExp(d[el], 'i').test(ch);\r\n mskd_1.push(t ? ch : '_');\r\n if (t && selectionStart_1 === index)\r\n selection_1++;\r\n }\r\n else {\r\n mskd_1.push(el);\r\n if (selection_1 === index)\r\n selection_1++;\r\n if (selectionStart_1 === index)\r\n selectionStart_1++;\r\n }\r\n });\r\n input.value = mskd_1.join('');\r\n input.selectionStart = input.selectionEnd = selection_1;\r\n var event_2 = document.createEvent('Event');\r\n event_2.initEvent('input', true, true);\r\n input.dispatchEvent(event_2);\r\n }\r\n };\r\n var inputHandler = function (e) {\r\n if (e.type === 'focus' && input.value !== '')\r\n return;\r\n var mskd = [];\r\n var startSelection = input.selectionStart;\r\n mask.forEach(function (el, index) {\r\n if (d[el]) {\r\n var t = new RegExp(d[el], 'i').test(input.value.charAt(index));\r\n mskd.push(t ? input.value.charAt(index) : '_');\r\n }\r\n else {\r\n mskd.push(el);\r\n }\r\n });\r\n input.value = mskd.join('');\r\n input.selectionStart = input.selectionEnd = startSelection;\r\n };\r\n input.addEventListener('keydown', keyDownHandler);\r\n input.addEventListener('keypress', keyPressHandler);\r\n input.addEventListener('input', inputHandler);\r\n input.addEventListener('focus', inputHandler);\r\n}\r\n//# sourceMappingURL=mask.js.map","import { utils } from '@easydata/core';\r\nimport { getElementAbsolutePos } from './ui-utils';\r\nimport { domel } from '../utils/dom_elem_builder';\r\nvar touchEventIsDefined = typeof TouchEvent !== 'undefined';\r\nexport var DropEffect;\r\n(function (DropEffect) {\r\n DropEffect[\"None\"] = \"none\";\r\n DropEffect[\"Allow\"] = \"allow\";\r\n DropEffect[\"Forbid\"] = \"forbid\";\r\n})(DropEffect || (DropEffect = {}));\r\nvar EqDragEvent = /** @class */ (function () {\r\n function EqDragEvent(item, dragImage, sourceEvent) {\r\n this.dropEffect = DropEffect.Allow;\r\n this.pageX = 0;\r\n this.pageY = 0;\r\n this.item = item;\r\n this.dragImage = dragImage;\r\n this.data = item.data;\r\n this.sourceEvent = sourceEvent;\r\n if (sourceEvent && sourceEvent instanceof MouseEvent) {\r\n this.pageX = sourceEvent.pageX,\r\n this.pageY = sourceEvent.pageY;\r\n }\r\n if (sourceEvent && touchEventIsDefined && sourceEvent instanceof TouchEvent\r\n && sourceEvent.touches[0]) {\r\n this.pageX = sourceEvent.touches[0].pageX,\r\n this.pageY = sourceEvent.touches[0].pageY;\r\n }\r\n }\r\n return EqDragEvent;\r\n}());\r\nexport { EqDragEvent };\r\nvar Position = /** @class */ (function () {\r\n function Position(ev) {\r\n if (ev && ev instanceof MouseEvent) {\r\n this.x = ev.pageX,\r\n this.y = ev.pageY;\r\n }\r\n if (ev && touchEventIsDefined && ev instanceof TouchEvent && ev.touches[0]) {\r\n this.x = ev.touches[0].pageX,\r\n this.y = ev.touches[0].pageY;\r\n }\r\n }\r\n return Position;\r\n}());\r\nvar DragManager = /** @class */ (function () {\r\n function DragManager() {\r\n this.delta = 5;\r\n this.draggableItem = null;\r\n this.dragImage = null;\r\n this.finishedSuccessfully = false;\r\n this.mouseDownPosition = null;\r\n this.containerDescriptors = [];\r\n this.containerDescriptorIndex = -1;\r\n this.dropEffect = DropEffect.None;\r\n this.classPrefix = 'eqjs-drop';\r\n this.DRAG_DISABLED_ATTR = 'drag-disabled';\r\n }\r\n DragManager.prototype.registerDraggableItem = function (descriptor) {\r\n var _this = this;\r\n var element = descriptor.element;\r\n if (!element) {\r\n throw Error(\"Element in draggle item is null or undefined\");\r\n }\r\n element.ondragstart = function () {\r\n return false;\r\n };\r\n var detectDragging = function (ev) {\r\n if (element.hasAttribute(_this.DRAG_DISABLED_ATTR)) {\r\n return;\r\n }\r\n ev.preventDefault();\r\n if (ev instanceof MouseEvent) {\r\n ev.stopPropagation();\r\n }\r\n var cursorPosition = new Position(ev);\r\n if (Math.abs(cursorPosition.x - _this.mouseDownPosition.x) > _this.delta\r\n || Math.abs(cursorPosition.y - _this.mouseDownPosition.y) > _this.delta) {\r\n startDragging(ev);\r\n }\r\n };\r\n var mouseMoveEventListener = function (ev) {\r\n _this.mouseMoveDragListener(ev);\r\n };\r\n var startDragging = function (ev) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n element.removeEventListener('mousemove', detectDragging);\r\n element.removeEventListener('touchmove', detectDragging);\r\n _this.finishedSuccessfully = false;\r\n if (descriptor.beforeDragStart)\r\n descriptor.beforeDragStart();\r\n _this.dragImage = domel('div')\r\n .setStyle('position', 'absolute')\r\n .setStyle('z-index', '65530')\r\n .toDOM();\r\n document.body.appendChild(_this.dragImage);\r\n _this.dragImage.appendChild(element.cloneNode(true));\r\n if (descriptor.renderer) {\r\n descriptor.renderer(_this.dragImage);\r\n }\r\n _this.dropEffect = DropEffect.None;\r\n _this.updateCusror(_this.dropEffect);\r\n _this.updateImageClass(_this.dropEffect);\r\n _this.draggableItem = {\r\n element: element,\r\n scope: descriptor.scope,\r\n data: descriptor.data\r\n };\r\n _this.updateDragItemPosition(ev);\r\n var event = new EqDragEvent(_this.draggableItem, _this.dragImage, ev);\r\n event.dropEffect = _this.dropEffect;\r\n if (descriptor.onDragStart) {\r\n descriptor.onDragStart(event);\r\n }\r\n if (_this.dropEffect !== event.dropEffect) {\r\n _this.dropEffect = event.dropEffect;\r\n _this.updateImageClass(_this.dropEffect);\r\n }\r\n document.addEventListener('mousemove', mouseMoveEventListener, true);\r\n document.addEventListener('touchmove', mouseMoveEventListener, true);\r\n };\r\n var mouseDownListener = function (ev) {\r\n if (touchEventIsDefined && ev instanceof TouchEvent) {\r\n ev.preventDefault();\r\n }\r\n _this.mouseDownPosition = new Position(ev);\r\n element.addEventListener('mousemove', detectDragging);\r\n element.addEventListener('touchmove', detectDragging);\r\n document.addEventListener('mouseup', mouseUpListener);\r\n document.addEventListener('touchend', mouseUpListener);\r\n };\r\n element.addEventListener('mousedown', mouseDownListener);\r\n element.addEventListener('touchstart', mouseDownListener);\r\n var mouseUpListener = function (ev) {\r\n _this.mouseDownPosition = null;\r\n element.removeEventListener('mousemove', detectDragging);\r\n element.removeEventListener('touchmove', detectDragging);\r\n document.removeEventListener('mousemove', mouseMoveEventListener, true);\r\n document.removeEventListener('touchmove', mouseMoveEventListener, true);\r\n if (_this.draggableItem) {\r\n endDraggind(ev);\r\n }\r\n };\r\n var endDraggind = function (ev) {\r\n try {\r\n if (_this.containerDescriptorIndex >= 0) {\r\n var dropContDesc = _this.containerDescriptors[_this.containerDescriptorIndex];\r\n var container = {\r\n element: dropContDesc.element,\r\n scopes: dropContDesc.scopes,\r\n data: dropContDesc.data\r\n };\r\n var event_1 = new EqDragEvent(_this.draggableItem, _this.dragImage, ev);\r\n try {\r\n if (container.scopes.indexOf(_this.draggableItem.scope) >= 0\r\n && _this.dropEffect === DropEffect.Allow) {\r\n _this.finishedSuccessfully = true;\r\n if (dropContDesc.onDrop) {\r\n dropContDesc.onDrop(container, event_1);\r\n }\r\n }\r\n }\r\n finally {\r\n if (dropContDesc.onDragLeave) {\r\n dropContDesc.onDragLeave(container, event_1);\r\n }\r\n }\r\n }\r\n }\r\n finally {\r\n try {\r\n var event_2 = new EqDragEvent(_this.draggableItem, _this.dragImage, ev);\r\n event_2.data.finishedSuccessfully = _this.finishedSuccessfully;\r\n if (descriptor.onDragEnd) {\r\n descriptor.onDragEnd(event_2);\r\n }\r\n }\r\n finally {\r\n _this.draggableItem = null;\r\n if (_this.dragImage && _this.dragImage.parentElement) {\r\n _this.dragImage.parentElement.removeChild(_this.dragImage);\r\n }\r\n _this.dragImage = null;\r\n _this.finishedSuccessfully = false;\r\n document.removeEventListener('mouseup', mouseUpListener);\r\n document.removeEventListener('touchend', mouseUpListener);\r\n }\r\n }\r\n };\r\n };\r\n DragManager.prototype.registerDropContainer = function (descriptor) {\r\n var element = descriptor.element;\r\n if (!element) {\r\n throw Error(\"Element in drop container is null or undefined\");\r\n }\r\n this.containerDescriptors.push(descriptor);\r\n };\r\n DragManager.prototype.removeDropContainer = function (descriptorOrSlot) {\r\n var descs = this.containerDescriptors\r\n .filter(function (desc) { return desc === descriptorOrSlot\r\n || desc.element == descriptorOrSlot; });\r\n if (descs) {\r\n for (var _i = 0, descs_1 = descs; _i < descs_1.length; _i++) {\r\n var desc = descs_1[_i];\r\n utils.removeArrayItem(this.containerDescriptors, desc);\r\n }\r\n }\r\n };\r\n DragManager.prototype.mouseMoveDragListener = function (ev) {\r\n if (ev instanceof MouseEvent) {\r\n ev.preventDefault();\r\n }\r\n ev.stopPropagation();\r\n this.updateDragItemPosition(ev);\r\n if (this.containerDescriptorIndex == -1) {\r\n for (var i = 0; i < this.containerDescriptors.length; i++) {\r\n var descriptor = this.containerDescriptors[i];\r\n if (this.detectDragEnterEvent(descriptor.element, ev)) {\r\n this.containerDescriptorIndex = i;\r\n break;\r\n }\r\n }\r\n if (this.containerDescriptorIndex >= 0) {\r\n this.dragEnterEvent(ev);\r\n }\r\n }\r\n else {\r\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\r\n if (this.detectDragLeaveEvent(descriptor.element, ev)) {\r\n this.dragLeaveEvent(ev);\r\n this.containerDescriptorIndex = -1;\r\n }\r\n }\r\n if (this.containerDescriptorIndex >= 0) {\r\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\r\n var container = {\r\n element: descriptor.element,\r\n scopes: descriptor.scopes,\r\n data: descriptor.data\r\n };\r\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\r\n var event_3 = new EqDragEvent(this.draggableItem, this.dragImage, ev);\r\n event_3.dropEffect = this.dropEffect;\r\n if (descriptor.onDragOver) {\r\n descriptor.onDragOver(container, event_3);\r\n }\r\n }\r\n }\r\n };\r\n DragManager.prototype.updateCusror = function (dropEffect) {\r\n switch (dropEffect) {\r\n case DropEffect.Allow:\r\n this.setCursorStyle(this.dragImage, 'grabbing');\r\n break;\r\n case DropEffect.Forbid:\r\n this.setCursorStyle(this.dragImage, 'no-drop');\r\n break;\r\n default:\r\n this.setCursorStyle(this.dragImage, 'grabbing');\r\n break;\r\n }\r\n };\r\n DragManager.prototype.updateImageClass = function (dropEffect) {\r\n this.dragImage.classList.remove(this.classPrefix + \"-allow\");\r\n this.dragImage.classList.remove(this.classPrefix + \"-forbid\");\r\n this.dragImage.classList.remove(this.classPrefix + \"-none\");\r\n switch (dropEffect) {\r\n case DropEffect.Allow:\r\n this.dragImage.classList.add(this.classPrefix + \"-allow\");\r\n break;\r\n case DropEffect.None:\r\n this.dragImage.classList.add(this.classPrefix + \"-none\");\r\n break;\r\n case DropEffect.Forbid:\r\n this.dragImage.classList.add(this.classPrefix + \"-forbid\");\r\n break;\r\n default:\r\n this.dragImage.classList.add(this.classPrefix + \"-none\");\r\n break;\r\n }\r\n };\r\n DragManager.prototype.setCursorStyle = function (element, cursor) {\r\n if (element) {\r\n element.style.cursor = cursor;\r\n for (var i = 0; i < element.children.length; i++) {\r\n this.setCursorStyle(element.children[i], cursor);\r\n }\r\n }\r\n };\r\n DragManager.prototype.updateDragItemPosition = function (ev) {\r\n if (this.dragImage) {\r\n var pos = new Position(ev);\r\n this.dragImage.style.top = (pos.y - this.dragImage.offsetHeight / 2) + 'px';\r\n this.dragImage.style.left = (pos.x - this.dragImage.offsetWidth / 2) + 'px';\r\n }\r\n };\r\n DragManager.prototype.dragEnterEvent = function (ev) {\r\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\r\n var container = {\r\n element: descriptor.element,\r\n scopes: descriptor.scopes,\r\n data: descriptor.data\r\n };\r\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\r\n var event_4 = new EqDragEvent(this.draggableItem, this.dragImage, ev);\r\n event_4.dropEffect = DropEffect.Allow;\r\n if (descriptor.onDragEnter) {\r\n descriptor.onDragEnter(container, event_4);\r\n }\r\n this.dropEffect = event_4.dropEffect;\r\n this.updateCusror(this.dropEffect);\r\n this.updateImageClass(this.dropEffect);\r\n }\r\n else {\r\n if (this.dropEffect !== DropEffect.Forbid) {\r\n this.dropEffect = DropEffect.None;\r\n this.updateCusror(this.dropEffect);\r\n this.updateImageClass(this.dropEffect);\r\n }\r\n }\r\n };\r\n DragManager.prototype.dragLeaveEvent = function (ev) {\r\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\r\n var container = {\r\n element: descriptor.element,\r\n scopes: descriptor.scopes,\r\n data: descriptor.data\r\n };\r\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\r\n var event_5 = new EqDragEvent(this.draggableItem, this.dragImage, ev);\r\n event_5.dropEffect = DropEffect.None;\r\n if (descriptor.onDragLeave) {\r\n descriptor.onDragLeave(container, event_5);\r\n }\r\n this.dropEffect = event_5.dropEffect;\r\n this.updateCusror(this.dropEffect);\r\n this.updateImageClass(this.dropEffect);\r\n }\r\n };\r\n DragManager.prototype.detectDragEnterEvent = function (container, ev) {\r\n var containerPos = getElementAbsolutePos(container);\r\n var pos = new Position(ev);\r\n if (pos.y < containerPos.y || pos.y > containerPos.y + container.offsetHeight) {\r\n return false;\r\n }\r\n if (pos.x < containerPos.x || pos.x > containerPos.x + container.offsetWidth) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n DragManager.prototype.detectDragLeaveEvent = function (container, ev) {\r\n var containerPos = getElementAbsolutePos(container);\r\n var pos = new Position(ev);\r\n if (pos.y > containerPos.y && pos.y < containerPos.y + container.offsetHeight\r\n && pos.x > containerPos.x && pos.x < containerPos.x + container.offsetWidth) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n return DragManager;\r\n}());\r\nexport { DragManager };\r\n//global variable\r\nexport var eqDragManager = new DragManager();\r\n//# sourceMappingURL=drag_manager.js.map","export var AutoResizeColumns;\r\n(function (AutoResizeColumns) {\r\n AutoResizeColumns[AutoResizeColumns[\"Always\"] = 0] = \"Always\";\r\n AutoResizeColumns[AutoResizeColumns[\"Once\"] = 1] = \"Once\";\r\n AutoResizeColumns[AutoResizeColumns[\"Never\"] = 2] = \"Never\";\r\n})(AutoResizeColumns || (AutoResizeColumns = {}));\r\n//# sourceMappingURL=easy_grid_options.js.map","import { i18n, DataType } from '@easydata/core';\r\nimport { GridColumnAlign } from './easy_grid_columns';\r\nvar cssPrefix = \"keg\";\r\nexport var DFMT_REGEX = /{0:(.*?)}/g;\r\nexport var CellRendererType;\r\n(function (CellRendererType) {\r\n CellRendererType[CellRendererType[\"STRING\"] = 1] = \"STRING\";\r\n CellRendererType[CellRendererType[\"NUMBER\"] = 2] = \"NUMBER\";\r\n CellRendererType[CellRendererType[\"DATETIME\"] = 3] = \"DATETIME\";\r\n CellRendererType[CellRendererType[\"BOOL\"] = 4] = \"BOOL\";\r\n})(CellRendererType || (CellRendererType = {}));\r\nvar StringCellRendererDefault = function (value, column, cellValueElement, rowElement) {\r\n var text = value ? value.toString().replace(/\\n/g, '\\u21B5 ') : '';\r\n cellValueElement.innerText = text;\r\n cellValueElement.title = text;\r\n if (column.align == GridColumnAlign.NONE) {\r\n cellValueElement.classList.add(cssPrefix + \"-cell-value-align-left\");\r\n }\r\n};\r\nvar NumberCellRendererDefault = function (value, column, cellValueElement, rowElement) {\r\n var strValue = (value || '').toString();\r\n if (typeof value == 'number') {\r\n if (column.dataColumn && column.dataColumn.displayFormat\r\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\r\n strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, function (_, $1) {\r\n return i18n.numberToStr(value, $1);\r\n });\r\n }\r\n else {\r\n strValue = value.toLocaleString();\r\n }\r\n }\r\n cellValueElement.innerText = strValue;\r\n cellValueElement.title = strValue;\r\n if (column.align == GridColumnAlign.NONE) {\r\n cellValueElement.classList.add(cssPrefix + \"-cell-value-align-right\");\r\n }\r\n};\r\nvar DateTimeCellRendererDefault = function (value, column, cellValueElement, rowElement) {\r\n var isDate = Object.prototype.toString.call(value) === '[object Date]';\r\n var strValue = (value || '').toString();\r\n if (isDate) {\r\n if (column.dataColumn && column.dataColumn.displayFormat\r\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\r\n strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, function (_, $1) {\r\n return i18n.dateTimeToStr(value, column.type, $1);\r\n });\r\n }\r\n else {\r\n var locale = i18n.getCurrentLocale();\r\n var timeOptions = { hour: 'numeric', minute: 'numeric', second: 'numeric' };\r\n switch (column.type) {\r\n case DataType.Date:\r\n strValue = value.toLocaleDateString(locale);\r\n break;\r\n case DataType.Time:\r\n strValue = value.toLocaleTimeString(locale, timeOptions);\r\n break;\r\n case DataType.DateTime:\r\n strValue = value.toLocaleDateString(locale) + \" \" + value.toLocaleTimeString(locale, timeOptions);\r\n break;\r\n }\r\n }\r\n }\r\n cellValueElement.innerText = strValue;\r\n cellValueElement.title = strValue;\r\n if (column.align == GridColumnAlign.NONE) {\r\n cellValueElement.classList.add(cssPrefix + \"-cell-value-align-right\");\r\n }\r\n};\r\nvar BoolCellRendererDefault = function (value, column, cellValueElement, rowElement) {\r\n if (column.dataColumn && column.dataColumn.displayFormat\r\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\r\n var strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, function (_, $1) {\r\n return i18n.booleanToStr(value, $1);\r\n });\r\n return StringCellRendererDefault(strValue, column, cellValueElement, rowElement);\r\n }\r\n else {\r\n cellValueElement.classList.add(cssPrefix + \"-cell-value-bool\");\r\n cellValueElement.classList.add(cssPrefix + \"-\" + (value ? 'cell-value-true' : 'cell-value-false'));\r\n }\r\n};\r\nvar GridCellRendererStore = /** @class */ (function () {\r\n function GridCellRendererStore(options) {\r\n this.renderers = {};\r\n this.defaultRenderers = {};\r\n this.registerRenderer('StringDefault', StringCellRendererDefault);\r\n this.setDefaultRenderer(CellRendererType.STRING, StringCellRendererDefault);\r\n this.registerRenderer('NumberDefault', NumberCellRendererDefault);\r\n this.setDefaultRenderer(CellRendererType.NUMBER, NumberCellRendererDefault);\r\n this.registerRenderer('DateTimeDefault', DateTimeCellRendererDefault);\r\n this.setDefaultRenderer(CellRendererType.DATETIME, DateTimeCellRendererDefault);\r\n this.registerRenderer('BoolDefault', BoolCellRendererDefault);\r\n this.setDefaultRenderer(CellRendererType.BOOL, BoolCellRendererDefault);\r\n }\r\n GridCellRendererStore.prototype.getDefaultRenderer = function (columnType) {\r\n var cellType = this.getCellType(columnType);\r\n return this.defaultRenderers[CellRendererType[cellType]];\r\n };\r\n GridCellRendererStore.prototype.getDefaultRendererByType = function (rendererType) {\r\n return this.defaultRenderers[CellRendererType[rendererType]];\r\n };\r\n GridCellRendererStore.prototype.setDefaultRenderer = function (cellType, renderer) {\r\n if (renderer) {\r\n this.defaultRenderers[CellRendererType[cellType]] = renderer;\r\n }\r\n };\r\n GridCellRendererStore.prototype.getRenderer = function (name) {\r\n return this.renderers[name];\r\n };\r\n GridCellRendererStore.prototype.registerRenderer = function (name, renderer) {\r\n this.renderers[name] = renderer;\r\n };\r\n GridCellRendererStore.prototype.getCellType = function (dataType) {\r\n switch (dataType) {\r\n case DataType.Autoinc:\r\n case DataType.Byte:\r\n case DataType.Word:\r\n case DataType.Currency:\r\n case DataType.Float:\r\n case DataType.Int32:\r\n case DataType.Int64:\r\n return CellRendererType.NUMBER;\r\n case DataType.Date:\r\n case DataType.DateTime:\r\n case DataType.Time:\r\n return CellRendererType.DATETIME;\r\n case DataType.Bool:\r\n return CellRendererType.BOOL;\r\n default:\r\n return CellRendererType.STRING;\r\n }\r\n };\r\n return GridCellRendererStore;\r\n}());\r\nexport { GridCellRendererStore };\r\n//# sourceMappingURL=easy_grid_cell_renderer.js.map","import { utils, ColumnAlignment } from '@easydata/core';\r\nimport { CellRendererType } from \"./easy_grid_cell_renderer\";\r\nvar DEFAULT_WIDTH_STRING = 250;\r\nvar ROW_NUM_WIDTH = 60;\r\nexport var GridColumnAlign;\r\n(function (GridColumnAlign) {\r\n GridColumnAlign[GridColumnAlign[\"NONE\"] = 1] = \"NONE\";\r\n GridColumnAlign[GridColumnAlign[\"LEFT\"] = 2] = \"LEFT\";\r\n GridColumnAlign[GridColumnAlign[\"CENTER\"] = 3] = \"CENTER\";\r\n GridColumnAlign[GridColumnAlign[\"RIGHT\"] = 4] = \"RIGHT\";\r\n})(GridColumnAlign || (GridColumnAlign = {}));\r\nfunction MapAlignment(alignment) {\r\n switch (alignment) {\r\n case ColumnAlignment.Left:\r\n return GridColumnAlign.LEFT;\r\n case ColumnAlignment.Center:\r\n return GridColumnAlign.CENTER;\r\n case ColumnAlignment.Right:\r\n return GridColumnAlign.RIGHT;\r\n default:\r\n return GridColumnAlign.NONE;\r\n }\r\n}\r\nvar GridColumn = /** @class */ (function () {\r\n function GridColumn(column, grid, isRowNum) {\r\n if (isRowNum === void 0) { isRowNum = false; }\r\n this._label = null;\r\n this._description = null;\r\n //public left: number;\r\n this.align = GridColumnAlign.NONE;\r\n this.isVisible = true;\r\n this.isRowNum = false;\r\n this.dataColumn = column;\r\n this.grid = grid;\r\n var widthOptions = grid.options.columnWidths || {};\r\n if (column) {\r\n if (column.style.alignment) {\r\n this.align = MapAlignment(column.style.alignment);\r\n }\r\n this.width = (widthOptions && widthOptions[this.type]) ? widthOptions[this.type].default : DEFAULT_WIDTH_STRING;\r\n this.cellRenderer = this.grid.cellRendererStore.getDefaultRenderer(column.type);\r\n this._description = column.description;\r\n }\r\n else if (isRowNum) {\r\n this.isRowNum = true;\r\n this.width = (widthOptions && widthOptions.rowNumColumn) ? widthOptions.rowNumColumn.default : ROW_NUM_WIDTH;\r\n this._label = '';\r\n this.cellRenderer = this.grid.cellRendererStore.getDefaultRendererByType(CellRendererType.NUMBER);\r\n }\r\n if (grid && grid.options && grid.options.onGetCellRenderer) {\r\n this.cellRenderer = grid.options.onGetCellRenderer(this, this.cellRenderer) || this.cellRenderer;\r\n }\r\n }\r\n Object.defineProperty(GridColumn.prototype, \"label\", {\r\n get: function () {\r\n return this._label ? this._label : this.isRowNum ? '' : this.dataColumn.label;\r\n },\r\n set: function (value) {\r\n this._label = this.label;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n ;\r\n Object.defineProperty(GridColumn.prototype, \"description\", {\r\n /** Get column description. */\r\n get: function () {\r\n return this._description;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(GridColumn.prototype, \"type\", {\r\n get: function () {\r\n return this.dataColumn ? this.dataColumn.type : null;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return GridColumn;\r\n}());\r\nexport { GridColumn };\r\nvar GridColumnList = /** @class */ (function () {\r\n function GridColumnList(columnList, grid) {\r\n this.items = [];\r\n this.grid = grid;\r\n this.sync(columnList);\r\n }\r\n GridColumnList.prototype.sync = function (columnList, hasRowNumCol) {\r\n if (hasRowNumCol === void 0) { hasRowNumCol = true; }\r\n this.clear();\r\n var rowNumCol = new GridColumn(null, this.grid, true);\r\n this.add(rowNumCol);\r\n if (!hasRowNumCol) {\r\n rowNumCol.isVisible = false;\r\n }\r\n if (columnList) {\r\n for (var _i = 0, _a = columnList.getItems(); _i < _a.length; _i++) {\r\n var column = _a[_i];\r\n var col = new GridColumn(column, this.grid);\r\n if (this.grid.options.onSyncGridColumn) {\r\n this.grid.options.onSyncGridColumn(col);\r\n }\r\n this.add(col);\r\n }\r\n }\r\n };\r\n Object.defineProperty(GridColumnList.prototype, \"count\", {\r\n get: function () {\r\n return this.items.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n GridColumnList.prototype.add = function (col) {\r\n var index = this.items.length;\r\n this.items.push(col);\r\n return index;\r\n };\r\n GridColumnList.prototype.put = function (index, col) {\r\n if (index >= 0 && index < this.items.length) {\r\n this.items[index] = col;\r\n }\r\n };\r\n GridColumnList.prototype.move = function (col, newIndex) {\r\n var oldIndex = this.items.indexOf(col);\r\n if (oldIndex >= 0 && oldIndex != newIndex)\r\n utils.moveArrayItem(this.items, oldIndex, newIndex);\r\n };\r\n GridColumnList.prototype.get = function (index) {\r\n if (index >= 0 && index < this.items.length) {\r\n return this.items[index];\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n // public getIndex(name: string) : number {\r\n // return this.mapper[name];\r\n // }\r\n GridColumnList.prototype.getItems = function () {\r\n return this.items;\r\n };\r\n GridColumnList.prototype.removeAt = function (index) {\r\n var col = this.get(index);\r\n this.items.splice(index, 1);\r\n //delete this.mapper[col.name];\r\n };\r\n GridColumnList.prototype.clear = function () {\r\n this.items = [];\r\n //this.mapper = {};\r\n };\r\n return GridColumnList;\r\n}());\r\nexport { GridColumnList };\r\n//# sourceMappingURL=easy_grid_columns.js.map","export var DialogFooterAlignment;\r\n(function (DialogFooterAlignment) {\r\n DialogFooterAlignment[DialogFooterAlignment[\"Left\"] = 1] = \"Left\";\r\n DialogFooterAlignment[DialogFooterAlignment[\"Center\"] = 2] = \"Center\";\r\n DialogFooterAlignment[DialogFooterAlignment[\"Right\"] = 3] = \"Right\";\r\n})(DialogFooterAlignment || (DialogFooterAlignment = {}));\r\n//# sourceMappingURL=dialog_service.js.map","var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport { EventEmitter, DataRow, utils, i18n, DataType } from '@easydata/core';\r\nimport { eqDragManager, DropEffect } from '../utils/drag_manager';\r\nimport { domel } from '../utils/dom_elem_builder';\r\nimport { getElementAbsolutePos, eqCssPrefix } from '../utils/ui-utils';\r\nimport { AutoResizeColumns } from './easy_grid_options';\r\nimport { GridColumnList, GridColumnAlign } from './easy_grid_columns';\r\nimport { GridCellRendererStore } from './easy_grid_cell_renderer';\r\nvar DEFAULT_ROW_HEIGHT = 36;\r\nvar DEFAULT_ROW_COUNT = 15;\r\n/** Represents a grid widget with columns rows, paging, custom rendering and more */\r\nvar EasyGrid = /** @class */ (function () {\r\n /** Creates and initializes all internal properties of the grid object */\r\n function EasyGrid(options) {\r\n this.cssPrefix = \"keg\";\r\n this.pagination = { page: 1, pageSize: 30, total: 0 };\r\n this.paginationOptions = {\r\n maxButtonCount: 10,\r\n useBootstrap: false //true\r\n };\r\n this.defaultDataGridOptions = {\r\n slot: null,\r\n dataTable: null,\r\n fixHeightOnFirstRender: false,\r\n syncGridColumns: true,\r\n useRowNumeration: true,\r\n allowDragDrop: false,\r\n aggregates: {\r\n settings: null,\r\n calculator: null\r\n },\r\n paging: {\r\n enabled: true,\r\n pageSize: 30,\r\n pageSizeItems: [20, 30, 50, 100, 200]\r\n },\r\n columnWidths: {\r\n autoResize: AutoResizeColumns.Always,\r\n stringColumns: {\r\n min: 100,\r\n max: 500,\r\n default: 250\r\n },\r\n numberColumns: {\r\n min: 60,\r\n default: 120\r\n },\r\n boolColumns: {\r\n min: 50,\r\n default: 80\r\n },\r\n dateColumns: {\r\n min: 80,\r\n default: 200\r\n },\r\n otherColumns: {\r\n min: 100,\r\n max: 500,\r\n default: 250\r\n },\r\n rowNumColumn: {\r\n min: 40,\r\n default: 60\r\n }\r\n },\r\n showPlusButton: false,\r\n viewportRowsCount: null,\r\n showActiveRow: true\r\n };\r\n this.rowsOnPagePromise = null;\r\n this.containerInitialHeight = 0;\r\n this.firstRender = true;\r\n this.prevRowTotals = null;\r\n this.landingIndex = -1;\r\n this.landingSlot = domel('div')\r\n .addClass(this.cssPrefix + \"-col-landing-slot\")\r\n .addChildElement(domel('div')\r\n .toDOM())\r\n .toDOM();\r\n this._activeRowIndex = -1;\r\n if (options && options.paging) {\r\n options.paging = utils.assign(this.defaultDataGridOptions.paging, options.paging);\r\n }\r\n this.options = this.mergeOptions(options);\r\n this.processColumnWidthsOptions();\r\n if (!this.options.slot)\r\n throw Error('\"slot\" parameter is required to initialize EasyDataGrid');\r\n if (!this.options.dataTable)\r\n throw Error('\"dataTable\" parameter is required to initialize EasyDataGrid');\r\n this.dataTable = options.dataTable;\r\n this.eventEmitter = new EventEmitter(this);\r\n this.cellRendererStore = new GridCellRendererStore(options);\r\n this.columns = new GridColumnList(this.dataTable.columns, this);\r\n this.setSlot(this.options.slot);\r\n this.init(this.options);\r\n }\r\n EasyGrid.prototype.mergeOptions = function (options) {\r\n var colWidthOptions = utils.assignDeep({}, this.defaultDataGridOptions.columnWidths, options.columnWidths);\r\n var pagingOptions = utils.assignDeep({}, this.defaultDataGridOptions.paging, options.paging);\r\n var result = utils.assign({}, this.defaultDataGridOptions, options);\r\n result.columnWidths = colWidthOptions;\r\n result.paging = pagingOptions;\r\n return result;\r\n };\r\n EasyGrid.prototype.processColumnWidthsOptions = function () {\r\n var widthOptions = this.options.columnWidths;\r\n if (!widthOptions)\r\n return;\r\n //string columns\r\n utils.getStringDataTypes().forEach(function (dataType) {\r\n widthOptions[dataType] = __assign(__assign({}, widthOptions.stringColumns), widthOptions[dataType]);\r\n });\r\n //numeric columns\r\n utils.getNumericDataTypes().forEach(function (dataType) {\r\n widthOptions[dataType] = __assign(__assign({}, widthOptions.numberColumns), widthOptions[dataType]);\r\n });\r\n //bool columns\r\n widthOptions[DataType.Bool] = __assign(__assign({}, widthOptions.boolColumns), widthOptions[DataType.Bool]);\r\n //date columns\r\n utils.getDateDataTypes().forEach(function (dataType) {\r\n widthOptions[dataType] = __assign(__assign({}, widthOptions.dateColumns), widthOptions[dataType]);\r\n });\r\n //other columns\r\n var knownTypes = __spreadArrays(utils.getStringDataTypes(), utils.getNumericDataTypes(), utils.getDateDataTypes(), [\r\n DataType.Bool\r\n ]);\r\n utils.getAllDataTypes().forEach(function (dataType) {\r\n if (!(dataType in knownTypes)) {\r\n widthOptions[dataType] = __assign(__assign({}, widthOptions.otherColumns), widthOptions[dataType]);\r\n }\r\n });\r\n widthOptions[DataType.Unknown] = widthOptions.otherColumns;\r\n };\r\n EasyGrid.prototype.setSlot = function (slot) {\r\n if (typeof slot === 'string') {\r\n if (slot.length) {\r\n if (slot[0] === '#') {\r\n this.slot = document.getElementById(slot.substring(1));\r\n }\r\n else if (slot[0] === '.') {\r\n var result = document.getElementsByClassName(slot.substring(1));\r\n if (result.length)\r\n this.slot = result[0];\r\n }\r\n else {\r\n throw Error('Unrecognized slot parameter ' +\r\n '(Must be id, class or HTMLElement): ' + slot);\r\n }\r\n }\r\n }\r\n else {\r\n this.slot = slot;\r\n }\r\n };\r\n /** Initializes grid widget according to the options passed in the parameter */\r\n EasyGrid.prototype.init = function (options) {\r\n var _this = this;\r\n if (options.onInit) {\r\n this.addEventListener('init', options.onInit);\r\n }\r\n if (options.onRowClick) {\r\n this.addEventListener('rowClick', options.onRowClick);\r\n }\r\n if (options.onRowDbClick) {\r\n this.addEventListener('rowDbClick', options.onRowDbClick);\r\n }\r\n if (options.onPlusButtonClick) {\r\n this.addEventListener('plusButtonClick', options.onPlusButtonClick);\r\n }\r\n if (options.onColumnChanged) {\r\n this.addEventListener('columnChanged', options.onColumnChanged);\r\n }\r\n if (options.onColumnDeleted) {\r\n this.addEventListener('columnDeleted', options.onColumnDeleted);\r\n }\r\n if (options.onColumnMoved) {\r\n this.addEventListener('columnMoved', options.onColumnMoved);\r\n }\r\n if (options.onPageChanged) {\r\n this.addEventListener('pageChanged', options.onPageChanged);\r\n }\r\n if (options.onActiveRowChanged) {\r\n this.addEventListener('activeRowChanged', options.onActiveRowChanged);\r\n }\r\n this.addEventListener('pageChanged', function (ev) { return _this.activeRowIndex = -1; });\r\n utils.assignDeep(this.paginationOptions, options.pagination);\r\n this.pagination.pageSize = this.options.paging.pageSize\r\n || this.pagination.pageSize;\r\n if (this.options.allowDragDrop) {\r\n eqDragManager.registerDropContainer({\r\n element: this.slot,\r\n scopes: [\"gridColumnMove\"],\r\n onDragEnter: function (_, ev) {\r\n _this.slot.classList.add(eqCssPrefix + \"-drophover\");\r\n _this.showLandingSlot(ev.pageX, ev.pageY);\r\n },\r\n onDragOver: function (_, ev) {\r\n _this.showLandingSlot(ev.pageX, ev.pageY);\r\n },\r\n onDragLeave: function (_, ev) {\r\n ev.dropEffect = DropEffect.Forbid;\r\n _this.slot.classList.remove(eqCssPrefix + \"-drophover\");\r\n _this.hideLandingSlot();\r\n },\r\n onDrop: function (_, ev) {\r\n _this.dataTable.columns.move(ev.data.column, _this.landingIndex);\r\n _this.refresh();\r\n _this.fireEvent({\r\n type: 'columnMoved',\r\n columnId: ev.data.column.id,\r\n newIndex: _this.landingIndex\r\n });\r\n }\r\n });\r\n }\r\n this.refresh();\r\n this.fireEvent('init');\r\n };\r\n /** Fires a grid event. You can pass either an event type\r\n * (like 'init', 'rowClick', 'pageChanged', etc )\r\n * or a ready-to-use grid event object\r\n * */\r\n EasyGrid.prototype.fireEvent = function (event) {\r\n if (typeof event === \"string\") {\r\n this.eventEmitter.fire(event);\r\n }\r\n else {\r\n this.eventEmitter.fire(event.type, event);\r\n }\r\n };\r\n /** Allows to set the data (represented by a EasyDataTable object)\r\n * or to replace the existing one associated with the grid */\r\n EasyGrid.prototype.setData = function (data) {\r\n this.dataTable = data;\r\n this.clear();\r\n this.refresh();\r\n };\r\n /** Returns the EasyDataTable object associated with the grid via `setData()` call */\r\n EasyGrid.prototype.getData = function () {\r\n return this.dataTable;\r\n };\r\n /** Gets the list of grid columns */\r\n EasyGrid.prototype.getColumns = function () {\r\n return this.columns;\r\n };\r\n /** This function is called when the grid is destroyed */\r\n EasyGrid.prototype.destroy = function () {\r\n this.slot.innerHTML = \"\";\r\n };\r\n /** Clears the current DOM object and re-renders everything from the scratch */\r\n EasyGrid.prototype.refresh = function () {\r\n this.clearDOM();\r\n this.render();\r\n };\r\n EasyGrid.prototype.clearDOM = function () {\r\n this.slot.innerHTML = '';\r\n };\r\n /** Clears all DOM object in the grid and return it to its initial state */\r\n EasyGrid.prototype.clear = function () {\r\n this.pagination.page = 1;\r\n this.clearDOM();\r\n };\r\n /** Renders the grid */\r\n EasyGrid.prototype.render = function () {\r\n var _this = this;\r\n if (!this.hasData() && !this.options.showPlusButton)\r\n return;\r\n this.containerInitialHeight = this.slot.clientHeight;\r\n this.rootDiv = document.createElement('div');\r\n this.rootDiv.style.width = '100%';\r\n this.rootDiv.classList.add(this.cssPrefix + \"-root\");\r\n this.columns.sync(this.dataTable.columns, this.options.useRowNumeration);\r\n this.renderHeader();\r\n this.rootDiv.appendChild(this.headerDiv);\r\n this.renderBody();\r\n this.rootDiv.appendChild(this.bodyDiv);\r\n this.renderFooter();\r\n this.rootDiv.appendChild(this.footerDiv);\r\n var gridContainer = document.createElement('div');\r\n gridContainer.classList.add(this.cssPrefix + \"-container\");\r\n gridContainer.appendChild(this.rootDiv);\r\n this.slot.appendChild(gridContainer);\r\n var needAutoResize = this.options.columnWidths.autoResize !== AutoResizeColumns.Never;\r\n if (this.rowsOnPagePromise) {\r\n this.rowsOnPagePromise\r\n .then(function () { return _this.updateHeight(); })\r\n .then(function () {\r\n _this.firstRender = false;\r\n _this.rowsOnPagePromise = null;\r\n });\r\n }\r\n else {\r\n setTimeout(function () {\r\n _this.updateHeight()\r\n .then(function () {\r\n _this.firstRender = false;\r\n if (needAutoResize) {\r\n _this.resizeColumns();\r\n }\r\n });\r\n }, 100);\r\n }\r\n };\r\n EasyGrid.prototype.updateHeight = function () {\r\n var _this = this;\r\n return new Promise(function (resolve) {\r\n if (_this.options.viewportRowsCount) {\r\n var firstRow = _this.bodyCellContainerDiv.firstElementChild;\r\n var rowHeight = firstRow ? firstRow.offsetHeight : DEFAULT_ROW_HEIGHT;\r\n var rowCount = _this.options.viewportRowsCount; // || DEFAULT_ROW_COUNT;\r\n var viewportHeight_1 = rowHeight * rowCount;\r\n domel(_this.bodyViewportDiv)\r\n .setStyle('height', viewportHeight_1 + \"px\");\r\n setTimeout(function () {\r\n var sbHeight = _this.bodyViewportDiv.offsetHeight - _this.bodyViewportDiv.clientHeight;\r\n viewportHeight_1 = viewportHeight_1 + sbHeight;\r\n domel(_this.bodyViewportDiv)\r\n .setStyle('height', viewportHeight_1 + \"px\");\r\n resolve();\r\n }, 100);\r\n return;\r\n }\r\n else if (_this.containerInitialHeight > 0) {\r\n // comment for now since it does not work in all cases\r\n // const bodyHeight = this.containerInitialHeight - this.headerDiv.offsetHeight - this.footerDiv.offsetHeight;\r\n // domel(this.bodyDiv)\r\n // .setStyle('height', `${bodyHeight}px`);\r\n }\r\n resolve();\r\n })\r\n .then(function () {\r\n if (_this.options.fixHeightOnFirstRender && _this.firstRender) {\r\n _this.slot.style.height = _this.slot.offsetHeight + \"px\";\r\n }\r\n });\r\n };\r\n EasyGrid.prototype.getContainerWidth = function () {\r\n return this.columns.getItems()\r\n .filter(function (col) { return col.isVisible; })\r\n .map(function (col) { return col.width; })\r\n .reduce(function (sum, current) { return sum + current; });\r\n };\r\n EasyGrid.prototype.renderHeader = function () {\r\n var _this = this;\r\n this.headerDiv = domel('div')\r\n .addClass(this.cssPrefix + \"-header\")\r\n .toDOM();\r\n this.headerViewportDiv = domel('div', this.headerDiv)\r\n .addClass(this.cssPrefix + \"-header-viewport\")\r\n .toDOM();\r\n this.headerCellContainerDiv = domel('div', this.headerViewportDiv)\r\n .addClass(this.cssPrefix + \"-header-cell-container\")\r\n .toDOM();\r\n this.headerRowDiv = domel('div', this.headerCellContainerDiv)\r\n .addClass(this.cssPrefix + \"-header-row\")\r\n .toDOM();\r\n this.columns.getItems().forEach(function (column, index) {\r\n if (!column.isVisible) {\r\n return;\r\n }\r\n var hd = _this.renderColumnHeader(column, index);\r\n _this.headerRowDiv.appendChild(hd);\r\n if (column.isRowNum) {\r\n domel(hd)\r\n .addChildElement(_this.renderHeaderButtons());\r\n }\r\n });\r\n var containerWidth = this.getContainerWidth();\r\n domel(this.headerCellContainerDiv)\r\n .setStyle('width', containerWidth + \"px\");\r\n };\r\n EasyGrid.prototype.hasData = function () {\r\n return this.dataTable.columns.count > 0;\r\n };\r\n EasyGrid.prototype.renderColumnHeader = function (column, index) {\r\n var _this = this;\r\n var colBuilder = domel('div')\r\n .addClass(this.cssPrefix + \"-header-cell\")\r\n .data('col-idx', \"\" + index)\r\n .setStyle('width', column.width + \"px\");\r\n if (column.dataColumn) {\r\n colBuilder\r\n .data('col-id', \"\" + column.dataColumn.id);\r\n }\r\n var colDiv = colBuilder.toDOM();\r\n domel('div', colDiv)\r\n .addClass(this.cssPrefix + \"-header-cell-resize\");\r\n if (!column.isRowNum) {\r\n domel('div', colDiv)\r\n .addClass(this.cssPrefix + \"-header-cell-label\")\r\n .text(column.label);\r\n }\r\n if (column.description) {\r\n domel('div', colDiv)\r\n .addClass('question-mark')\r\n .title(column.description);\r\n }\r\n if (this.options.allowDragDrop) {\r\n eqDragManager.registerDraggableItem({\r\n element: colDiv,\r\n scope: \"gridColumnMove\",\r\n data: { column: column },\r\n renderer: function (dragImage) {\r\n dragImage.innerHTML = '';\r\n var attrLabel = document.createElement('div');\r\n attrLabel.innerText = column.label;\r\n dragImage.classList.add(_this.cssPrefix + \"-sortable-helper\");\r\n dragImage.appendChild(attrLabel);\r\n },\r\n onDragStart: function (ev) {\r\n ev.dropEffect = DropEffect.Allow;\r\n }\r\n });\r\n }\r\n return colDiv;\r\n };\r\n EasyGrid.prototype.renderBody = function () {\r\n var _this = this;\r\n this.bodyDiv = domel('div')\r\n .addClass(this.cssPrefix + \"-body\")\r\n .toDOM();\r\n this.bodyViewportDiv = domel('div', this.bodyDiv)\r\n .addClass(this.cssPrefix + \"-body-viewport\")\r\n .attr('tabIndex', '0')\r\n .toDOM();\r\n this.bodyCellContainerDiv = domel('div', this.bodyViewportDiv)\r\n .addClass(this.cssPrefix + \"-cell-container\")\r\n .toDOM();\r\n var showAggrs = this.canShowAggregates();\r\n if (this.dataTable) {\r\n this.showProgress();\r\n this.rowsOnPagePromise = this.getRowsToRender()\r\n .then(function (rows) {\r\n _this.pagination.total = _this.dataTable.getTotal();\r\n _this.hideProgress();\r\n //prevent double rendering (bad solution, we have to figure out how to avoid this behavior properly)\r\n _this.bodyCellContainerDiv.innerHTML = '';\r\n _this.prevRowTotals = null;\r\n var rowsToRender = 0;\r\n if (rows.length) {\r\n var groups_1 = showAggrs\r\n ? _this.options.aggregates.settings.getGroups()\r\n : [];\r\n rowsToRender = (rows.length < _this.pagination.pageSize)\r\n ? rows.length\r\n : _this.pagination.pageSize;\r\n rows.forEach(function (row, index) {\r\n if (showAggrs)\r\n _this.updateTotalsState(groups_1, row);\r\n //we don't actually render the last row\r\n if (index < rowsToRender) {\r\n var tr = _this.renderRow(row, index);\r\n _this.bodyCellContainerDiv.appendChild(tr);\r\n }\r\n });\r\n var showGrandTotalsOnEachPage = _this.options.aggregates && _this.options.aggregates.showGrandTotalsOnEachPage;\r\n if (showAggrs && (_this.isLastPage() || showGrandTotalsOnEachPage)) {\r\n var row = new DataRow(_this.dataTable.columns, new Array(_this.dataTable.columns.count));\r\n _this.updateTotalsState(groups_1, row, true);\r\n }\r\n }\r\n var needAutoResize = _this.options.columnWidths.autoResize !== AutoResizeColumns.Never;\r\n if (needAutoResize) {\r\n _this.resizeColumns();\r\n }\r\n else {\r\n var containerWidth = _this.getContainerWidth();\r\n domel(_this.bodyCellContainerDiv)\r\n .setStyle('width', containerWidth + \"px\");\r\n }\r\n return rowsToRender;\r\n })\r\n .catch(function (error) { console.error(error); return 0; });\r\n }\r\n this.bodyViewportDiv.addEventListener('scroll', function (ev) {\r\n domel(_this.headerViewportDiv)\r\n .setStyle('margin-left', \"-\" + _this.bodyViewportDiv.scrollLeft + \"px\");\r\n });\r\n this.bodyViewportDiv.addEventListener('keydown', this.onViewportKeydown.bind(this));\r\n };\r\n EasyGrid.prototype.isLastPage = function () {\r\n if (this.dataTable.elasticChunks) {\r\n return this.dataTable.totalIsKnown()\r\n && (this.pagination.page * this.pagination.pageSize) >= this.pagination.total;\r\n }\r\n return this.pagination.page * this.pagination.pageSize >= this.pagination.total;\r\n };\r\n EasyGrid.prototype.canShowAggregates = function () {\r\n if (!this.options || !this.options.aggregates || !this.options.aggregates.settings)\r\n return false;\r\n var aggrSettings = this.options.aggregates.settings;\r\n var result = (aggrSettings.hasAggregates() || aggrSettings.hasRecordCount())\r\n && (aggrSettings.hasGroups() || aggrSettings.hasGrandTotals());\r\n return result;\r\n };\r\n EasyGrid.prototype.updateTotalsState = function (groups, newRow, isLast) {\r\n if (isLast === void 0) { isLast = false; }\r\n var aggrSettings = this.options.aggregates.settings;\r\n if (this.prevRowTotals && aggrSettings.hasGroups()) {\r\n var changeLevel = -1;\r\n for (var level = 1; level <= groups.length; level++) {\r\n var group = groups[level - 1];\r\n for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {\r\n var col = _a[_i];\r\n if (!aggrSettings.compareValues(this.prevRowTotals.getValue(col), newRow.getValue(col))) {\r\n changeLevel = level;\r\n break;\r\n }\r\n }\r\n if (changeLevel !== -1)\r\n break;\r\n }\r\n if (changeLevel !== -1) {\r\n for (var level = groups.length; level >= changeLevel; level--) {\r\n var row = new DataRow(this.dataTable.columns, this.prevRowTotals.toArray());\r\n var tr = this.renderTotalsRow(level, row);\r\n this.bodyCellContainerDiv.appendChild(tr);\r\n }\r\n }\r\n }\r\n if (isLast && aggrSettings.hasGrandTotals() && aggrSettings.hasAggregates()) {\r\n var tr = this.renderTotalsRow(0, newRow);\r\n this.bodyCellContainerDiv.appendChild(tr);\r\n }\r\n this.prevRowTotals = newRow;\r\n };\r\n EasyGrid.prototype.applyGroupColumnTemplate = function (template, value, count) {\r\n var result = template.replace(/{{\\s*GroupValue\\s*}}/g, value ? \"\" + value : '-');\r\n result = result.replace(/{{\\s*GroupCount\\s*}}/g, count ? \"\" + count : '-');\r\n return result;\r\n };\r\n EasyGrid.prototype.renderTotalsRow = function (level, row) {\r\n var _this = this;\r\n var aggrSettings = this.options.aggregates.settings;\r\n var group = (level > 0)\r\n ? aggrSettings.getGroups()[level - 1]\r\n : { columns: [], aggregates: aggrSettings.getAggregates() };\r\n var rowBuilder = domel('div')\r\n .addClass(this.cssPrefix + \"-row\")\r\n .addClass(this.cssPrefix + \"-row-totals\")\r\n .addClass(this.cssPrefix + \"-totals-lv\" + level)\r\n .data('totals-level', \"\" + level)\r\n .attr('tabindex', '-1');\r\n var rowElement = rowBuilder.toDOM();\r\n this.columns.getItems().forEach(function (column, index) {\r\n if (!column.isVisible) {\r\n return;\r\n }\r\n var val = '';\r\n var colIndex = !column.isRowNum\r\n ? _this.dataTable.columns.getIndex(column.dataColumn.id)\r\n : -1;\r\n if (!column.isRowNum && column.dataColumn) {\r\n if (group.columns.indexOf(column.dataColumn.id) >= 0) {\r\n val = row.getValue(colIndex);\r\n }\r\n ;\r\n }\r\n if (colIndex == _this.dataTable.columns.count - 1) {\r\n val = '. . . . . .';\r\n }\r\n rowElement.appendChild(_this.renderCell(column, index, val, rowElement));\r\n });\r\n var aggrContainer = this.options.aggregates.calculator.getAggrContainer();\r\n var aggrCols = aggrSettings.getAggregates().map(function (c) { return c.colId; });\r\n var key = aggrSettings.buildGroupKey(group, row);\r\n aggrContainer.getAggregateData(level, key)\r\n .then(function (values) {\r\n for (var _i = 0, aggrCols_1 = aggrCols; _i < aggrCols_1.length; _i++) {\r\n var aggrColId = aggrCols_1[_i];\r\n row.setValue(aggrColId, values[aggrColId]);\r\n }\r\n rowElement.innerHTML = '';\r\n _this.columns.getItems().forEach(function (column, index) {\r\n if (!column.isVisible) {\r\n return;\r\n }\r\n var val = '';\r\n var colIndex = !column.isRowNum\r\n ? _this.dataTable.columns.getIndex(column.dataColumn.id)\r\n : -1;\r\n if (!column.isRowNum) {\r\n var isLastGroupColumn = false;\r\n if (column.dataColumn) {\r\n var groupColIndex = group.columns.indexOf(column.dataColumn.id);\r\n var aggrColIndex = aggrCols.indexOf(column.dataColumn.id);\r\n if (level > 0) {\r\n isLastGroupColumn = groupColIndex == group.columns.length - 1;\r\n }\r\n else {\r\n //if it's a grand total row consider first column as the last group column\r\n isLastGroupColumn = colIndex == 0;\r\n }\r\n if (groupColIndex >= 0 || aggrColIndex >= 0) {\r\n val = row.getValue(colIndex);\r\n }\r\n ;\r\n }\r\n var groupFooterTemplate = '';\r\n if (level > 0) {\r\n groupFooterTemplate = column.dataColumn.groupFooterColumnTemplate;\r\n //set the default template for the last grouping column\r\n if (!groupFooterTemplate && aggrSettings.hasRecordCount() && isLastGroupColumn) {\r\n groupFooterTemplate = '{{GroupValue}} ({{GroupCount}})';\r\n }\r\n }\r\n if (groupFooterTemplate) {\r\n var cellDiv_1 = _this.renderCell(column, index, val, rowElement);\r\n var innerCell = cellDiv_1.firstChild;\r\n val = innerCell.innerHTML;\r\n val = _this.applyGroupColumnTemplate(groupFooterTemplate, val, values[aggrSettings.COUNT_FIELD_NAME]);\r\n }\r\n }\r\n var cellDiv = _this.renderCell(column, index, val, rowElement);\r\n rowElement.appendChild(cellDiv);\r\n });\r\n })\r\n .catch(function (error) { return console.error(error); });\r\n return rowElement;\r\n };\r\n EasyGrid.prototype.onViewportKeydown = function (ev) {\r\n if (this.options.showActiveRow) {\r\n var rowCount = this.bodyCellContainerDiv.querySelectorAll(\".\" + this.cssPrefix + \"-row\").length;\r\n var newValue = void 0;\r\n switch (ev.key) {\r\n case 'ArrowLeft':\r\n break;\r\n case 'ArrowRight':\r\n break;\r\n case 'ArrowUp':\r\n ev.preventDefault();\r\n newValue = this.activeRowIndex < 0 || this.activeRowIndex >= rowCount ? rowCount - 1 : this.activeRowIndex - 1;\r\n this.activeRowIndex = newValue >= 0 ? newValue : 0;\r\n break;\r\n case 'ArrowDown':\r\n ev.preventDefault();\r\n newValue = this.activeRowIndex < 0 || this.activeRowIndex >= rowCount ? 0 : this.activeRowIndex + 1;\r\n this.activeRowIndex = newValue < rowCount ? newValue : rowCount - 1;\r\n break;\r\n }\r\n }\r\n };\r\n EasyGrid.prototype.ensureRowVisibility = function (rowOrIndex) {\r\n var row = typeof rowOrIndex === 'number'\r\n ? this.getDataRow(rowOrIndex)\r\n : rowOrIndex;\r\n if (row) {\r\n var rowRect = row.getBoundingClientRect();\r\n var viewportRect = this.bodyViewportDiv.getBoundingClientRect();\r\n var rowTop = rowRect.top - viewportRect.top;\r\n var rowBottom = rowRect.bottom - viewportRect.top;\r\n var viewportHeight = this.bodyViewportDiv.clientHeight;\r\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\r\n if (rowTop > 0 &&\r\n rowBottom <= viewportHeight &&\r\n rowRect.top > 0 &&\r\n rowRect.bottom < windowHeight) {\r\n return;\r\n }\r\n if (rowTop < 0) {\r\n this.bodyViewportDiv.scrollTop = this.bodyViewportDiv.scrollTop + rowTop;\r\n }\r\n else if (rowBottom > viewportHeight) {\r\n this.bodyViewportDiv.scrollTop = this.bodyViewportDiv.scrollTop + rowBottom - viewportHeight;\r\n }\r\n rowRect = row.getBoundingClientRect();\r\n if (rowRect.top < 0) {\r\n document.documentElement.scrollTop = document.documentElement.scrollTop + rowRect.top;\r\n }\r\n else if (rowRect.bottom > windowHeight) {\r\n document.documentElement.scrollTop = document.documentElement.scrollTop + rowRect.bottom - windowHeight;\r\n }\r\n }\r\n };\r\n /** Returns a promise with the list of the rows to render on one page.\r\n * The list contains pageSize+1 row to make it possible\r\n * to render the totals row (if it appears to be on the edge between pages)\r\n */\r\n EasyGrid.prototype.getRowsToRender = function () {\r\n if (this.options.paging.enabled === false) {\r\n return Promise.resolve(this.dataTable.getCachedRows());\r\n }\r\n return this.dataTable.getRows({\r\n offset: (this.pagination.page - 1) * this.pagination.pageSize,\r\n limit: this.pagination.pageSize + 1\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n return [];\r\n });\r\n };\r\n EasyGrid.prototype.renderFooter = function () {\r\n var _this = this;\r\n this.footerDiv = domel('div')\r\n .addClass(this.cssPrefix + \"-footer\")\r\n .toDOM();\r\n if (this.rowsOnPagePromise) {\r\n this.rowsOnPagePromise.then(function (count) {\r\n _this.footerDiv.innerHTML = '';\r\n _this.footerPaginateDiv = _this.renderPageNavigator();\r\n _this.footerDiv.appendChild(_this.footerPaginateDiv);\r\n var pageInfoBlock = _this.renderPageInfoBlock(count);\r\n _this.footerDiv.appendChild(pageInfoBlock);\r\n });\r\n }\r\n };\r\n EasyGrid.prototype.renderPageInfoBlock = function (count) {\r\n var pageInfoDiv = domel('div')\r\n .addClass(this.cssPrefix + \"-page-info\")\r\n .toDOM();\r\n var rowCount = this.dataTable.getTotal();\r\n if (rowCount > 0) {\r\n var fistPageRecordNum = count\r\n ? (this.pagination.page - 1) * this.pagination.pageSize + 1\r\n : 0;\r\n var lastPageRecordNum = count\r\n ? fistPageRecordNum + count - 1\r\n : 0;\r\n var totalStr = this.dataTable.getTotal().toString();\r\n if (this.dataTable.elasticChunks) {\r\n var count_1 = this.dataTable.getCachedCount();\r\n var total = this.dataTable.getTotal();\r\n if (count_1 !== total)\r\n totalStr = '?';\r\n }\r\n pageInfoDiv.innerHTML = i18n.getText('GridPageInfo')\r\n .replace('{FirstPageRecordNum}', \"<span>\" + fistPageRecordNum.toString() + \"</span>\")\r\n .replace('{LastPageRecordNum}', \"<span>\" + lastPageRecordNum.toString() + \"</span>\")\r\n .replace('{Total}', \"<span>\" + totalStr + \"</span>\");\r\n }\r\n return pageInfoDiv;\r\n };\r\n EasyGrid.prototype.showProgress = function () {\r\n };\r\n EasyGrid.prototype.hideProgress = function () {\r\n };\r\n EasyGrid.prototype.getLocalIndexByGlobal = function (index) {\r\n if (this.pagination) {\r\n return index % this.pagination.pageSize;\r\n }\r\n else {\r\n return index;\r\n }\r\n };\r\n EasyGrid.prototype.getGlobalIndexByLocal = function (index) {\r\n if (this.pagination) {\r\n return (this.pagination.page - 1) * this.pagination.pageSize + index;\r\n }\r\n else {\r\n return index;\r\n }\r\n };\r\n EasyGrid.prototype.renderRow = function (row, index) {\r\n var _this = this;\r\n var indexGlobal = this.getGlobalIndexByLocal(index);\r\n var rowBuilder = domel('div')\r\n .addClass(this.cssPrefix + \"-row\")\r\n .addClass(this.cssPrefix + \"-row-\" + (index % 2 == 1 ? 'odd' : 'even'))\r\n .data('row-idx', \"\" + indexGlobal)\r\n .attr('tabindex', '-1')\r\n .on('click', function (ev) {\r\n _this.activeRowIndex = index;\r\n _this.fireEvent({\r\n type: 'rowClick',\r\n row: row,\r\n rowIndex: index,\r\n sourceEvent: ev\r\n });\r\n })\r\n .on('dblclick', function (ev) {\r\n _this.fireEvent({\r\n type: 'rowDbClick',\r\n row: row,\r\n rowIndex: index,\r\n sourceEvent: ev\r\n });\r\n });\r\n if (index == 0) {\r\n rowBuilder.addClass(this.cssPrefix + \"-row-first\");\r\n }\r\n var rowElement = rowBuilder.toDOM();\r\n if (this.options.showActiveRow && index == this.activeRowIndex) {\r\n rowBuilder.addClass(this.cssPrefix + \"-row-active\");\r\n }\r\n this.columns.getItems().forEach(function (column, index) {\r\n if (!column.isVisible) {\r\n return;\r\n }\r\n var colindex = column.isRowNum ? -1 : _this.dataTable.columns.getIndex(column.dataColumn.id);\r\n var val = column.isRowNum ? indexGlobal + 1 : row.getValue(colindex);\r\n rowElement.appendChild(_this.renderCell(column, index, val, rowElement));\r\n });\r\n return rowElement;\r\n };\r\n EasyGrid.prototype.renderCell = function (column, colIndex, value, rowElement) {\r\n var builder = domel('div')\r\n .addClass(this.cssPrefix + \"-cell\")\r\n .data('col-idx', \"\" + colIndex)\r\n .attr('tabindex', '-1')\r\n .setStyle('width', column.width + \"px\");\r\n if (column.align == GridColumnAlign.LEFT) {\r\n builder.addClass(this.cssPrefix + \"-cell-align-left\");\r\n }\r\n else if (column.align == GridColumnAlign.RIGHT) {\r\n builder.addClass(this.cssPrefix + \"-cell-align-right\");\r\n }\r\n else if (column.align == GridColumnAlign.CENTER) {\r\n builder.addClass(this.cssPrefix + \"-cell-align-center\");\r\n }\r\n var cellElement = builder.toDOM();\r\n var valueCell = cellElement.appendChild(domel('div')\r\n .addClass(this.cssPrefix + \"-cell-value\")\r\n .toDOM());\r\n if (column.cellRenderer) {\r\n column.cellRenderer(value, column, valueCell, rowElement);\r\n }\r\n return cellElement;\r\n };\r\n /** Sets current grid pages (if paging is used) */\r\n EasyGrid.prototype.setPage = function (page) {\r\n this.pagination.page = page;\r\n this.fireEvent({ type: \"pageChanged\", page: page });\r\n this.refresh();\r\n this.bodyViewportDiv.focus();\r\n };\r\n EasyGrid.prototype.renderPageNavigator = function () {\r\n var _this = this;\r\n var paginateDiv = document.createElement('div');\r\n paginateDiv.className = this.cssPrefix + \"-pagination-wrapper\";\r\n var rowCount = this.dataTable.getTotal();\r\n if (this.options.paging && this.options.paging.enabled && rowCount > 0) {\r\n var prefix_1 = this.paginationOptions.useBootstrap ? '' : this.cssPrefix + \"-\";\r\n var buttonClickHandler_1 = function (ev) {\r\n var element = ev.target;\r\n if (element.hasAttribute('data-page')) {\r\n var page = parseInt(element.getAttribute('data-page'));\r\n _this.setPage(page);\r\n }\r\n };\r\n var renderPageCell = function (pageIndex, content, disabled, extreme, active) {\r\n var li = document.createElement('li');\r\n li.className = prefix_1 + \"page-item\";\r\n if (!extreme) {\r\n if (active) {\r\n li.className += ' active';\r\n }\r\n var a_1 = document.createElement('a');\r\n a_1.setAttribute('href', 'javascript:void(0)');\r\n a_1.innerHTML = content || pageIndex.toString();\r\n a_1.setAttribute(\"data-page\", \"\" + pageIndex);\r\n a_1.className = prefix_1 + \"page-link\";\r\n a_1.addEventListener(\"click\", buttonClickHandler_1);\r\n li.appendChild(a_1);\r\n return li;\r\n }\r\n var a = document.createElement('span');\r\n a.setAttribute('aria-hidden', 'true');\r\n a.className = prefix_1 + \"page-link\";\r\n if (disabled) {\r\n li.className += ' disabled';\r\n }\r\n else {\r\n if (_this.paginationOptions.useBootstrap) {\r\n a = document.createElement('a');\r\n a.setAttribute('href', 'javascript:void(0)');\r\n a.setAttribute(\"data-page\", \"\" + pageIndex);\r\n }\r\n else {\r\n var newA = document.createElement('a');\r\n newA.setAttribute('href', 'javascript:void(0)');\r\n newA.setAttribute('data-page', \"\" + pageIndex);\r\n a = newA;\r\n }\r\n a.className = prefix_1 + \"page-link\";\r\n a.addEventListener(\"click\", buttonClickHandler_1);\r\n }\r\n a.innerHTML = content;\r\n li.appendChild(a);\r\n return li;\r\n };\r\n if (this.dataTable.elasticChunks) {\r\n var pageIndex = this.pagination.page || 1;\r\n var ul = document.createElement('ul');\r\n ul.className = prefix_1 + \"pagination\";\r\n var cell = renderPageCell(pageIndex - 1, '&laquo;', pageIndex == 1, true, false);\r\n ul.appendChild(cell);\r\n cell = renderPageCell(pageIndex + 1, '&raquo;', this.isLastPage(), true, false);\r\n ul.appendChild(cell);\r\n paginateDiv.appendChild(ul);\r\n }\r\n else {\r\n if (this.pagination.total > this.pagination.pageSize) {\r\n var pageIndex = this.pagination.page || 1;\r\n var pageCount = Math.ceil(this.pagination.total / this.pagination.pageSize) || 1;\r\n var maxButtonCount = this.paginationOptions.maxButtonCount || 10;\r\n var zeroBasedIndex = pageIndex - 1;\r\n var firstPageIndex = zeroBasedIndex - (zeroBasedIndex % maxButtonCount) + 1;\r\n var lastPageIndex = firstPageIndex + maxButtonCount - 1;\r\n if (lastPageIndex > pageCount) {\r\n lastPageIndex = pageCount;\r\n }\r\n var ul = document.createElement('ul');\r\n ul.className = prefix_1 + \"pagination\";\r\n var cell = renderPageCell(firstPageIndex - 1, '&laquo;', firstPageIndex == 1, true, false);\r\n ul.appendChild(cell);\r\n for (var i = firstPageIndex; i <= lastPageIndex; i++) {\r\n cell = renderPageCell(i, i.toString(), false, false, i == pageIndex);\r\n ul.appendChild(cell);\r\n }\r\n cell = renderPageCell(lastPageIndex + 1, '&raquo;', lastPageIndex == pageCount, true, false);\r\n ul.appendChild(cell);\r\n paginateDiv.appendChild(ul);\r\n }\r\n }\r\n if (this.options.paging.allowPageSizeChange) {\r\n var selectChangeHandler = function (ev) {\r\n var newValue = parseInt(ev.target.value);\r\n _this.pagination.pageSize = newValue;\r\n _this.pagination.page = 1;\r\n _this.refresh();\r\n };\r\n var pageSizes = document.createElement('div');\r\n pageSizes.className = this.cssPrefix + \"-page-sizes\";\r\n var selectSize = document.createElement('div');\r\n selectSize.className = \"kfrm-select \" + this.cssPrefix + \"-page-sizes-select\";\r\n pageSizes.appendChild(selectSize);\r\n var sel_1 = document.createElement('select');\r\n var selOptions = this.options.paging.pageSizeItems || [];\r\n var selSet = new Set(selOptions);\r\n selSet.add(this.options.paging.pageSize || 20);\r\n Array.from(selSet).forEach(function (el) {\r\n var option = document.createElement(\"option\");\r\n option.value = el.toString();\r\n option.text = el.toString();\r\n sel_1.appendChild(option);\r\n });\r\n sel_1.value = (this.pagination.pageSize || 20).toString();\r\n selectSize.appendChild(sel_1);\r\n sel_1.addEventListener('change', selectChangeHandler);\r\n var labelDiv = document.createElement('div');\r\n labelDiv.className = this.cssPrefix + \"-page-sizes-label\";\r\n pageSizes.appendChild(labelDiv);\r\n var label = document.createElement('span');\r\n label.innerText = i18n.getText('GridItemsPerPage');\r\n labelDiv.appendChild(label);\r\n paginateDiv.appendChild(pageSizes);\r\n }\r\n }\r\n return paginateDiv;\r\n };\r\n EasyGrid.prototype.addEventListener = function (eventType, handler) {\r\n return this.eventEmitter.subscribe(eventType, function (event) { return handler(event.data); });\r\n };\r\n EasyGrid.prototype.removeEventListener = function (eventType, handlerId) {\r\n this.eventEmitter.unsubscribe(eventType, handlerId);\r\n };\r\n EasyGrid.prototype.renderHeaderButtons = function () {\r\n var _this = this;\r\n if (this.options.showPlusButton) {\r\n return domel('div')\r\n .addClass(this.cssPrefix + \"-header-btn-plus\")\r\n .title(this.options.plusButtonTitle || 'Add')\r\n .addChild('a', function (builder) { return builder\r\n .attr('href', 'javascript:void(0)')\r\n .on('click', function (e) {\r\n e.preventDefault();\r\n _this.fireEvent({\r\n type: 'plusButtonClick',\r\n sourceEvent: e\r\n });\r\n }); })\r\n .toDOM();\r\n }\r\n return domel('span')\r\n .addText('#')\r\n .toDOM();\r\n };\r\n EasyGrid.prototype.showLandingSlot = function (pageX, pageY) {\r\n var colElems = this.headerRowDiv.querySelectorAll(\"[class*=\" + this.cssPrefix + \"-table-col]\");\r\n var cols = [];\r\n for (var i = 1; i < colElems.length; i++) {\r\n var rowElem = colElems[i];\r\n if (rowElem.style.display === 'none')\r\n continue;\r\n cols.push(rowElem);\r\n }\r\n if (cols.length === 0) {\r\n this.landingIndex = 0;\r\n this.headerRowDiv.appendChild(this.landingSlot);\r\n return;\r\n }\r\n var landingPos = getElementAbsolutePos(this.landingSlot);\r\n if (pageX >= landingPos.x && pageX <= landingPos.x + this.landingSlot.offsetWidth) {\r\n return;\r\n }\r\n var newLandingIndex = this.landingIndex;\r\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\r\n var col = cols_1[_i];\r\n var colPos = getElementAbsolutePos(col);\r\n var width = col.offsetWidth;\r\n if (pageX > colPos.x && pageX < colPos.x + width) {\r\n // -1 as we don't need to count add button here\r\n newLandingIndex = parseInt(col.getAttribute('data-col-idx')) - 1;\r\n }\r\n }\r\n if (newLandingIndex != this.landingIndex) {\r\n this.landingIndex = newLandingIndex;\r\n if (this.landingIndex < cols.length) {\r\n this.headerRowDiv.insertBefore(this.landingSlot, cols[this.landingIndex]);\r\n }\r\n else {\r\n this.headerRowDiv.appendChild(this.landingSlot);\r\n }\r\n }\r\n };\r\n EasyGrid.prototype.hideLandingSlot = function () {\r\n var _this = this;\r\n this.landingIndex = -1;\r\n setTimeout(function () {\r\n if (_this.landingSlot.parentElement) {\r\n _this.landingSlot.parentElement.removeChild(_this.landingSlot);\r\n }\r\n }, 10);\r\n };\r\n Object.defineProperty(EasyGrid.prototype, \"activeRowIndex\", {\r\n get: function () {\r\n return this._activeRowIndex;\r\n },\r\n set: function (value) {\r\n if (value !== this._activeRowIndex) {\r\n var oldValue = this._activeRowIndex;\r\n this._activeRowIndex = value;\r\n this.updateActiveRow();\r\n this.fireEvent({\r\n type: 'activeRowChanged',\r\n oldValue: oldValue,\r\n newValue: this.activeRowIndex,\r\n rowIndex: this.getGlobalIndexByLocal(this.activeRowIndex)\r\n });\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n EasyGrid.prototype.updateActiveRow = function () {\r\n var _this = this;\r\n if (this.options.showActiveRow) {\r\n var rows = this.bodyCellContainerDiv.querySelectorAll(\"[class*=\" + this.cssPrefix + \"-row-active]\");\r\n rows.forEach(function (el) { el.classList.remove(_this.cssPrefix + \"-row-active\"); });\r\n var activeRow = this.getActiveRow();\r\n if (activeRow) {\r\n activeRow.classList.add(this.cssPrefix + \"-row-active\");\r\n this.ensureRowVisibility(this.activeRowIndex);\r\n }\r\n }\r\n };\r\n EasyGrid.prototype.getActiveRow = function () {\r\n return this.getDataRow(this.activeRowIndex);\r\n };\r\n EasyGrid.prototype.getDataRow = function (index) {\r\n var rows = Array.from(this.bodyCellContainerDiv.querySelectorAll(\".\" + this.cssPrefix + \"-row:not(.\" + this.cssPrefix + \"-row-totals)\"));\r\n if (index >= 0 && index < rows.length)\r\n return rows[index];\r\n return null;\r\n };\r\n /** Makes the grid focused for keyboard events */\r\n EasyGrid.prototype.focus = function () {\r\n this.bodyViewportDiv.focus();\r\n };\r\n /** Resizes columns according to the data they represent */\r\n EasyGrid.prototype.resizeColumns = function () {\r\n if (this.options.columnWidths.autoResize === AutoResizeColumns.Never)\r\n return;\r\n var containerWidth = this.bodyCellContainerDiv.style.width;\r\n this.bodyCellContainerDiv.style.visibility = 'hidden';\r\n this.bodyCellContainerDiv.style.width = '1px';\r\n //this.headerRowDiv.style.visibility = 'hidden';\r\n this.headerRowDiv.style.width = '1px';\r\n var sumWidth = 0;\r\n var columns = this.columns.getItems();\r\n var headerCells = this.headerCellContainerDiv.querySelectorAll(\".\" + this.cssPrefix + \"-header-cell\");\r\n var headerIdx = 0;\r\n var _loop_1 = function (idx) {\r\n var column = columns[idx];\r\n if (!column.isVisible)\r\n return \"continue\";\r\n var calculatedWidth = this_1.options.columnWidths.autoResize !== AutoResizeColumns.Always && column.dataColumn\r\n ? column.dataColumn.calculatedWidth\r\n : 0;\r\n var cellValues = this_1.bodyCellContainerDiv.querySelectorAll(\".\" + this_1.cssPrefix + \"-cell[data-col-idx=\\\"\" + idx + \"\\\"] > .\" + this_1.cssPrefix + \"-cell-value\");\r\n var maxWidth = 0;\r\n if (calculatedWidth > 0) {\r\n sumWidth += calculatedWidth;\r\n column.width = calculatedWidth;\r\n cellValues.forEach(function (value) {\r\n value.parentElement.style.width = calculatedWidth + \"px\";\r\n });\r\n headerCells[headerIdx].style.width = calculatedWidth + \"px\";\r\n }\r\n else {\r\n if (cellValues.length == 0) {\r\n headerCells[headerIdx].style.width = null;\r\n headerCells[headerIdx].style.whiteSpace = 'nowrap';\r\n }\r\n maxWidth = headerCells[headerIdx].offsetWidth;\r\n if (cellValues.length > 0) {\r\n cellValues.forEach(function (value) {\r\n value.parentElement.style.width = null;\r\n var width = value.parentElement.offsetWidth;\r\n if (width > maxWidth) {\r\n maxWidth = width;\r\n }\r\n });\r\n maxWidth += 3;\r\n var maxOption = column.isRowNum\r\n ? this_1.options.columnWidths.rowNumColumn.max || 500\r\n : this_1.options.columnWidths[column.dataColumn.type].max || 2000;\r\n var minOption = column.isRowNum\r\n ? this_1.options.columnWidths.rowNumColumn.min || 0\r\n : this_1.options.columnWidths[column.dataColumn.type].min || 20;\r\n if (maxWidth > maxOption) {\r\n maxWidth = maxOption;\r\n }\r\n if (maxWidth < minOption) {\r\n maxWidth = minOption;\r\n }\r\n if (utils.isNumericType(column.type)) {\r\n //increase the calculated width in 1.3 times for numeric columns\r\n maxWidth = Math.round(maxWidth * 1.3);\r\n }\r\n sumWidth += maxWidth;\r\n column.width = maxWidth;\r\n cellValues.forEach(function (value) {\r\n value.parentElement.style.width = maxWidth + \"px\";\r\n });\r\n headerCells[headerIdx].style.width = maxWidth + \"px\";\r\n if (column.dataColumn) {\r\n column.dataColumn.calculatedWidth = maxWidth;\r\n }\r\n }\r\n else {\r\n sumWidth += maxWidth;\r\n }\r\n }\r\n headerIdx++;\r\n };\r\n var this_1 = this;\r\n for (var idx = 0; idx < this.columns.count; idx++) {\r\n _loop_1(idx);\r\n }\r\n if (sumWidth > 0) {\r\n this.bodyCellContainerDiv.style.width = sumWidth + \"px\";\r\n this.headerCellContainerDiv.style.width = sumWidth + \"px\";\r\n }\r\n else {\r\n this.bodyCellContainerDiv.style.width = containerWidth;\r\n this.headerCellContainerDiv.style.width = containerWidth;\r\n }\r\n this.bodyCellContainerDiv.style.visibility = null;\r\n this.headerRowDiv.removeAttribute('style');\r\n };\r\n return EasyGrid;\r\n}());\r\nexport { EasyGrid };\r\n//# sourceMappingURL=easy_grid.js.map","var Calendar = /** @class */ (function () {\r\n function Calendar(slot, options) {\r\n this.slot = slot;\r\n this.options = options || {};\r\n if (!this.options.yearRange) {\r\n this.options.yearRange = 'c-10:c+10';\r\n }\r\n }\r\n Object.defineProperty(Calendar.prototype, \"cssPrefix\", {\r\n get: function () {\r\n return 'kdtp-cal';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Calendar.prototype.setDate = function (date) {\r\n this.currentDate = new Date(date);\r\n };\r\n Calendar.prototype.getDate = function () {\r\n return new Date(this.currentDate);\r\n };\r\n Calendar.prototype.dateChanged = function (apply) {\r\n if (this.options.onDateChanged) {\r\n this.options.onDateChanged(this.currentDate, apply);\r\n }\r\n };\r\n return Calendar;\r\n}());\r\nexport { Calendar };\r\n//# sourceMappingURL=calendar.js.map","import { getElementAbsolutePos } from '../utils/ui-utils';\r\nvar DateTimePicker = /** @class */ (function () {\r\n function DateTimePicker(options) {\r\n this.calendar = null;\r\n this.timePicker = null;\r\n this.options = options;\r\n this.render();\r\n }\r\n Object.defineProperty(DateTimePicker.prototype, \"cssPrefix\", {\r\n get: function () {\r\n return 'kdtp';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n DateTimePicker.prototype.setDateTime = function (dateTime) {\r\n this.currentDateTime = new Date(dateTime);\r\n if (this.calendar) {\r\n this.calendar.setDate(this.currentDateTime);\r\n }\r\n if (this.timePicker) {\r\n this.timePicker.setTime(this.currentDateTime);\r\n }\r\n };\r\n DateTimePicker.prototype.getDateTime = function () {\r\n return new Date(this.currentDateTime);\r\n };\r\n DateTimePicker.prototype.render = function () {\r\n var _this = this;\r\n if (this.options.showCalendar) {\r\n this.calendar = this.createCalendar({\r\n yearRange: this.options.yearRange,\r\n showDateTimeInput: this.options.showDateTimeInput,\r\n timePickerIsUsed: this.options.showTimePicker,\r\n oneClickDateSelection: this.options.oneClickDateSelection,\r\n onDateChanged: function (date, apply) {\r\n _this.currentDateTime = date;\r\n if (_this.timePicker) {\r\n _this.timePicker.setTime(_this.currentDateTime);\r\n }\r\n if (_this.options.showTimePicker) {\r\n _this.dateTimeChanged();\r\n }\r\n if (apply) {\r\n _this.apply(_this.currentDateTime);\r\n }\r\n }\r\n });\r\n if (this.calendar)\r\n this.calendar.render();\r\n }\r\n if (this.options.showTimePicker) {\r\n this.timePicker = this.createTimePicker({\r\n onTimeChanged: function (time) {\r\n _this.currentDateTime.setHours(time.getHours());\r\n _this.currentDateTime.setMinutes(time.getMinutes());\r\n if (_this.calendar) {\r\n _this.calendar.setDate(_this.currentDateTime);\r\n }\r\n _this.dateTimeChanged();\r\n }\r\n });\r\n if (this.timePicker)\r\n this.timePicker.render();\r\n }\r\n this.setDateTime(new Date());\r\n };\r\n DateTimePicker.prototype.createCalendar = function (options) {\r\n return null;\r\n };\r\n DateTimePicker.prototype.createTimePicker = function (options) {\r\n return null;\r\n };\r\n DateTimePicker.prototype.show = function (anchor) {\r\n if (this.options.beforeShow) {\r\n this.options.beforeShow();\r\n }\r\n var pos = getElementAbsolutePos(anchor || document.body);\r\n this.slot.style.top = pos.y + anchor.clientHeight + 'px';\r\n this.slot.style.left = pos.x + 'px';\r\n };\r\n DateTimePicker.prototype.apply = function (date) {\r\n if (this.options.onApply) {\r\n this.options.onApply(date);\r\n }\r\n this.destroy();\r\n };\r\n DateTimePicker.prototype.cancel = function () {\r\n if (this.options.onCancel) {\r\n this.options.onCancel();\r\n }\r\n this.destroy();\r\n };\r\n DateTimePicker.prototype.destroy = function () {\r\n if (this.slot && this.slot.parentElement) {\r\n this.slot.parentElement.removeChild(this.slot);\r\n }\r\n };\r\n DateTimePicker.prototype.dateTimeChanged = function () {\r\n if (this.options.onDateTimeChanged) {\r\n this.options.onDateTimeChanged(this.currentDateTime);\r\n }\r\n };\r\n return DateTimePicker;\r\n}());\r\nexport { DateTimePicker };\r\n//# sourceMappingURL=date_time_picker.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { i18n, utils as dataUtils } from '@easydata/core';\r\nimport { domel } from '../utils/dom_elem_builder';\r\nimport { Calendar } from './calendar';\r\nvar DefaultCalendar = /** @class */ (function (_super) {\r\n __extends(DefaultCalendar, _super);\r\n function DefaultCalendar(slot, options) {\r\n var _this = _super.call(this, slot, options) || this;\r\n _this.daysOfWeek = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\r\n _this.months = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\r\n _this.calendarBody = null;\r\n _this.isManualInputChanging = false;\r\n for (var i = 0; i < _this.daysOfWeek.length; i++) {\r\n _this.daysOfWeek[i] = i18n.getShortWeekDayName(i + 1);\r\n }\r\n for (var i = 0; i < _this.months.length; i++) {\r\n _this.months[i] = i18n.getLongMonthName(i + 1);\r\n }\r\n return _this;\r\n }\r\n DefaultCalendar.prototype.setDate = function (date) {\r\n _super.prototype.setDate.call(this, date);\r\n this.selectedMonth = this.currentDate.getMonth();\r\n this.selectedYear = this.currentDate.getFullYear();\r\n this.rerenderMonth();\r\n };\r\n DefaultCalendar.prototype.render = function () {\r\n var _this = this;\r\n var header = domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-header\");\r\n if (this.options.showDateTimeInput) {\r\n header\r\n .addChildElement(this.renderManualDateInput());\r\n }\r\n else {\r\n header\r\n .addChild('span', function (builder) { return _this.headerTextElem = builder.toDOM(); });\r\n }\r\n domel(this.slot)\r\n .addChildElement(this.renderCalendarButtons());\r\n this.calendarBody = domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-body\")\r\n .toDOM();\r\n };\r\n DefaultCalendar.prototype.getInputDateFormat = function () {\r\n var settings = i18n.getLocaleSettings();\r\n return (this.options.timePickerIsUsed)\r\n ? settings.editDateFormat + \" \" + settings.editTimeFormat\r\n : settings.editDateFormat;\r\n };\r\n DefaultCalendar.prototype.renderManualDateInput = function () {\r\n var _this = this;\r\n var format = this.getInputDateFormat();\r\n var builder = domel('input')\r\n .attr('placeholder', format)\r\n .addClass(this.cssPrefix + \"-header-input\");\r\n builder\r\n .mask(format.replace('yyyy', '9999')\r\n .replace('MM', '99')\r\n .replace('dd', '99')\r\n .replace('HH', '99')\r\n .replace('mm', '99')\r\n .replace('ss', '99'))\r\n .on('input', function (ev) {\r\n builder.removeClass('error');\r\n try {\r\n _this.isManualInputChanging = true;\r\n var newDate = dataUtils.strToDateTime(_this.manualInputElem.value, format);\r\n _this.currentDate = newDate;\r\n _this.jump(_this.currentDate.getFullYear(), _this.currentDate.getMonth());\r\n _this.dateChanged(false);\r\n }\r\n catch (e) {\r\n builder.addClass('error');\r\n }\r\n finally {\r\n _this.isManualInputChanging = false;\r\n }\r\n })\r\n .on('keydown', function (ev) {\r\n if (ev.keyCode === 13) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n if (_this.manualInputElem.className.indexOf('error') < 0\r\n && !_this.isManualInputChanging)\r\n _this.dateChanged(true);\r\n }\r\n })\r\n .on('focus', function () {\r\n setTimeout(function () {\r\n _this.manualInputElem.selectionStart = 0;\r\n _this.manualInputElem.selectionEnd = 0;\r\n }, 50);\r\n });\r\n this.manualInputElem = builder.toDOM();\r\n return this.manualInputElem;\r\n };\r\n DefaultCalendar.prototype.updateDisplayedDateValue = function () {\r\n if (this.manualInputElem) {\r\n if (!this.isManualInputChanging) {\r\n var format = this.getInputDateFormat();\r\n this.manualInputElem.value = dataUtils.dateTimeToStr(this.currentDate, format);\r\n this.manualInputElem.focus();\r\n }\r\n }\r\n else if (this.headerTextElem) {\r\n var locale = i18n.getCurrentLocale();\r\n this.headerTextElem.innerText = this.currentDate.toLocaleString(locale == 'en' ? undefined : locale, {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n });\r\n }\r\n };\r\n DefaultCalendar.prototype.renderCalendarButtons = function () {\r\n var _this = this;\r\n var builder = domel('nav')\r\n .addClass(this.cssPrefix + \"-nav\")\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-nav-prev\")\r\n .on('click', function () {\r\n _this.prev();\r\n })\r\n .addChild('span', function (builder) { return builder.html('&lsaquo;'); }); })\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-nav-selectors\")\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-nav-month\")\r\n .addChild('select', function (builder) {\r\n builder\r\n .on('change', function () {\r\n _this.jump(_this.selectedYear, parseInt(_this.selectMonthElem.value));\r\n });\r\n var _loop_1 = function (i) {\r\n builder.addChild('option', function (builder) { return builder\r\n .attr('value', i.toString())\r\n .text(_this.months[i]); });\r\n };\r\n for (var i = 0; i < _this.months.length; i++) {\r\n _loop_1(i);\r\n }\r\n _this.selectMonthElem = builder.toDOM();\r\n }); })\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-nav-year\")\r\n .addChild('select', function (builder) { return _this.selectYearElem = builder\r\n .on('change', function () {\r\n _this.jump(parseInt(_this.selectYearElem.value), _this.selectedMonth);\r\n })\r\n .toDOM(); }); }); })\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-nav-next\")\r\n .on('click', function () {\r\n _this.next();\r\n })\r\n .addChild('span', function (builder) { return builder.html('&rsaquo;'); }); });\r\n return builder.toDOM();\r\n };\r\n DefaultCalendar.prototype.prev = function () {\r\n this.selectedYear = (this.selectedMonth === 0) ? this.selectedYear - 1 : this.selectedYear;\r\n this.selectedMonth = (this.selectedMonth === 0) ? 11 : this.selectedMonth - 1;\r\n this.rerenderMonth();\r\n };\r\n DefaultCalendar.prototype.next = function () {\r\n this.selectedYear = (this.selectedMonth === 11) ? this.selectedYear + 1 : this.selectedYear;\r\n this.selectedMonth = (this.selectedMonth + 1) % 12;\r\n this.rerenderMonth();\r\n };\r\n DefaultCalendar.prototype.rerenderSelectYear = function () {\r\n var match = /c-(\\d*):c\\+(\\d*)/g.exec(this.options.yearRange);\r\n var minusYear = 0;\r\n var plusYear = 1;\r\n if (match !== null) {\r\n minusYear = parseInt(match[1]);\r\n plusYear = parseInt(match[2]);\r\n }\r\n this.selectYearElem.innerHTML = '';\r\n for (var i = 0; i <= minusYear + plusYear; i++) {\r\n var op = document.createElement(\"option\");\r\n var year = this.selectedYear - minusYear + i;\r\n op.value = year.toString();\r\n op.innerText = year.toString();\r\n this.selectYearElem.appendChild(op);\r\n }\r\n };\r\n DefaultCalendar.prototype.jump = function (year, month) {\r\n this.selectedYear = year;\r\n this.selectedMonth = month;\r\n this.rerenderMonth();\r\n };\r\n DefaultCalendar.prototype.rerenderMonth = function () {\r\n var _this = this;\r\n //header text\r\n this.updateDisplayedDateValue();\r\n this.rerenderSelectYear();\r\n var firstDay = (new Date(this.selectedYear, this.selectedMonth)).getDay();\r\n var daysInMonth = new Date(this.selectedYear, this.selectedMonth + 1, 0).getDate();\r\n this.calendarBody.innerHTML = \"\";\r\n this.selectYearElem.value = this.selectedYear.toString();\r\n this.selectMonthElem.value = this.selectedMonth.toString();\r\n this.daysOfWeek.forEach(function (day, idx) {\r\n domel('div', _this.calendarBody)\r\n .addClass(_this.cssPrefix + \"-weekday\")\r\n .addClass(idx == 0 || idx == 6 ? _this.cssPrefix + \"-weekend\" : '')\r\n .text(day);\r\n });\r\n // Add empty cells before first day\r\n for (var i = 0; i < firstDay; i++) {\r\n domel('div', this.calendarBody)\r\n .addClass(this.cssPrefix + \"-day-empty\");\r\n }\r\n // Add all month days\r\n var today = new Date();\r\n for (var day = 1; day <= daysInMonth; day++) {\r\n var builder = domel('div', this.calendarBody)\r\n .addClass(this.cssPrefix + \"-day\")\r\n .attr('data-date', day.toString())\r\n .text(day.toString())\r\n .on('click', function (e) {\r\n _this.currentDate.setFullYear(_this.selectedYear);\r\n _this.currentDate.setMonth(_this.selectedMonth);\r\n _this.currentDate.setDate(parseInt(e.target.getAttribute('data-date')));\r\n _this.dateChanged(_this.options.oneClickDateSelection);\r\n });\r\n if (day === today.getDate() && this.selectedYear === today.getFullYear() && this.selectedMonth === today.getMonth()) {\r\n builder.addClass(this.cssPrefix + \"-day-current\");\r\n }\r\n if (day === this.currentDate.getDate() && this.selectedYear === this.currentDate.getFullYear() && this.selectedMonth === this.currentDate.getMonth()) {\r\n builder.addClass(this.cssPrefix + \"-day-selected\");\r\n }\r\n var dayOfWeek = (firstDay + day - 1) % 7;\r\n if (dayOfWeek == 0 || dayOfWeek == 6) {\r\n builder.addClass(this.cssPrefix + \"-weekend\");\r\n }\r\n }\r\n // Add empty cells after last day\r\n var cellsDrawnInLastRow = (firstDay + daysInMonth) % 7;\r\n var cellsToDraw = cellsDrawnInLastRow == 0 ? 0 : 7 - cellsDrawnInLastRow;\r\n for (var i = 0; i < cellsToDraw; i++) {\r\n domel('div', this.calendarBody)\r\n .addClass(this.cssPrefix + \"-day-empty\");\r\n }\r\n };\r\n DefaultCalendar.prototype.dateChanged = function (apply) {\r\n _super.prototype.dateChanged.call(this, apply);\r\n this.rerenderMonth();\r\n };\r\n return DefaultCalendar;\r\n}(Calendar));\r\nexport { DefaultCalendar };\r\n//# sourceMappingURL=default_calendar.js.map","var TimePicker = /** @class */ (function () {\r\n function TimePicker(slot, options) {\r\n this.slot = slot;\r\n this.options = options || {};\r\n }\r\n Object.defineProperty(TimePicker.prototype, \"cssPrefix\", {\r\n get: function () {\r\n return 'kdtp-tp';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n TimePicker.prototype.setTime = function (time) {\r\n this.currentTime = new Date(time);\r\n };\r\n TimePicker.prototype.getTime = function () {\r\n return new Date(this.currentTime);\r\n };\r\n TimePicker.prototype.timeChanged = function () {\r\n if (this.options.onTimeChanged) {\r\n this.options.onTimeChanged(this.currentTime);\r\n }\r\n };\r\n return TimePicker;\r\n}());\r\nexport { TimePicker };\r\n//# sourceMappingURL=time_picker.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { i18n } from '@easydata/core';\r\nimport { domel } from '../utils/dom_elem_builder';\r\nimport { TimePicker } from './time_picker';\r\nvar DefaultTimePicker = /** @class */ (function (_super) {\r\n __extends(DefaultTimePicker, _super);\r\n function DefaultTimePicker() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n DefaultTimePicker.prototype.setTime = function (time) {\r\n _super.prototype.setTime.call(this, time);\r\n this.updateDisplayedTime();\r\n this.hoursInput.valueAsNumber = time.getHours();\r\n this.minutesInput.valueAsNumber = time.getMinutes();\r\n };\r\n DefaultTimePicker.prototype.render = function () {\r\n var _this = this;\r\n domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-time\")\r\n .addChild('span', function (builder) { return _this.timeText = builder.toDOM(); })\r\n .toDOM();\r\n var slidersBuilder = domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-sliders\");\r\n slidersBuilder\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-time-row\")\r\n .title('Hours')\r\n .addChild('input', function (builder) { return _this.hoursInput = builder\r\n .addClass(_this.cssPrefix + \"-input-hours\")\r\n .type('range')\r\n .attr('min', '0')\r\n .attr('max', '23')\r\n .attr('step', '1')\r\n .on('input', function (e) {\r\n _this.currentTime.setHours(_this.hoursInput.valueAsNumber);\r\n _this.updateDisplayedTime();\r\n _this.timeChanged();\r\n })\r\n .toDOM(); }); });\r\n slidersBuilder\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-time-row\")\r\n .title('Minutes')\r\n .addChild('input', function (builder) { return _this.minutesInput = builder\r\n .addClass(_this.cssPrefix + \"-input-minutes\")\r\n .type('range')\r\n .attr('min', '0')\r\n .attr('max', '59')\r\n .attr('step', '1')\r\n .on('input', function (e) {\r\n _this.currentTime.setMinutes(_this.minutesInput.valueAsNumber);\r\n _this.updateDisplayedTime();\r\n _this.timeChanged();\r\n })\r\n .toDOM(); }); });\r\n return this.slot;\r\n };\r\n DefaultTimePicker.prototype.updateDisplayedTime = function () {\r\n var locale = i18n.getCurrentLocale();\r\n var timeToDraw = this.currentTime.toLocaleString(locale == 'en' ? undefined : locale, {\r\n hour: \"numeric\",\r\n minute: \"numeric\"\r\n });\r\n this.timeText.innerText = timeToDraw;\r\n };\r\n return DefaultTimePicker;\r\n}(TimePicker));\r\nexport { DefaultTimePicker };\r\n//# sourceMappingURL=default_time_picker.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { i18n } from '@easydata/core';\r\nimport { domel } from '../utils/dom_elem_builder';\r\nimport { DateTimePicker } from './date_time_picker';\r\nimport { DefaultCalendar } from './default_calendar';\r\nimport { DefaultTimePicker } from './default_time_picker';\r\nimport { getElementAbsolutePos } from '../utils/ui-utils';\r\nvar DefaultDateTimePicker = /** @class */ (function (_super) {\r\n __extends(DefaultDateTimePicker, _super);\r\n function DefaultDateTimePicker() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n DefaultDateTimePicker.prototype.render = function () {\r\n var _this = this;\r\n var sb = domel('div', document.body)\r\n .addClass(\"\" + this.cssPrefix)\r\n .attr('tabIndex', '0')\r\n .setStyle('position', 'absolute')\r\n .setStyle('top', '-1000px')\r\n .setStyle('left', '-1000px')\r\n .on('keydown', function (ev) {\r\n if (ev.keyCode === 27) { // ESC is pressed\r\n _this.cancel();\r\n }\r\n else if (ev.keyCode === 13) { // Enter is pressed\r\n _this.apply(_this.getDateTime());\r\n }\r\n return false;\r\n });\r\n if (this.options.zIndex) {\r\n sb.setStyle('z-index', \"\" + this.options.zIndex);\r\n }\r\n this.slot = sb.toDOM();\r\n _super.prototype.render.call(this);\r\n this.renderButtons();\r\n this.globalMouseDownHandler = function (e) {\r\n var event = window.event || e;\r\n var o = event.srcElement || event.target;\r\n var isOutside = !_this.slot.contains(event.target);\r\n if (isOutside) {\r\n document.removeEventListener('mousedown', _this.globalMouseDownHandler, true);\r\n _this.cancel();\r\n }\r\n return true;\r\n };\r\n };\r\n DefaultDateTimePicker.prototype.renderButtons = function () {\r\n var _this = this;\r\n var builder = domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-buttons\")\r\n .addChild('button', function (b) { return _this.nowButton = b\r\n .addClass(_this.cssPrefix + \"-button \" + _this.cssPrefix + \"-button-now\")\r\n .text(i18n.getText('ButtonNow'))\r\n .on('click', function () {\r\n _this.setDateTime(new Date());\r\n _this.dateTimeChanged();\r\n return false;\r\n })\r\n .toDOM(); });\r\n if (this.options.showTimePicker || !this.options.oneClickDateSelection) {\r\n builder.addChild('button', function (b) { return _this.submitButton = b\r\n .addClass(_this.cssPrefix + \"-button \" + _this.cssPrefix + \"-button-apply\")\r\n .text(i18n.getText('ButtonApply'))\r\n .on('click', function () {\r\n _this.apply(_this.getDateTime());\r\n return false;\r\n })\r\n .toDOM(); });\r\n }\r\n builder.addChild('button', function (b) { return _this.submitButton = b\r\n .addClass(_this.cssPrefix + \"-button \" + _this.cssPrefix + \"-button-cancel\")\r\n .text(i18n.getText('ButtonCancel'))\r\n .on('click', function () {\r\n _this.cancel();\r\n return false;\r\n })\r\n .toDOM(); });\r\n };\r\n DefaultDateTimePicker.prototype.createCalendar = function (options) {\r\n this.calendarSlot =\r\n domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-cal\")\r\n .toDOM();\r\n return new DefaultCalendar(this.calendarSlot, options);\r\n };\r\n DefaultDateTimePicker.prototype.createTimePicker = function (options) {\r\n this.timePickerSlot =\r\n domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-tp\")\r\n .toDOM();\r\n return new DefaultTimePicker(this.timePickerSlot, options);\r\n };\r\n DefaultDateTimePicker.prototype.show = function (anchor) {\r\n var _this = this;\r\n if (this.options.showDateTimeInput) {\r\n if (this.options.beforeShow) {\r\n this.options.beforeShow();\r\n }\r\n var anchorPos = getElementAbsolutePos(anchor || document.body);\r\n var parentPos = getElementAbsolutePos(anchor ? anchor.parentElement || anchor : document.body);\r\n this.slot.style.top = parentPos.y + 'px';\r\n this.slot.style.left = anchorPos.x + 'px';\r\n }\r\n else {\r\n _super.prototype.show.call(this, anchor);\r\n this.slot.focus();\r\n }\r\n setTimeout(function () {\r\n document.addEventListener('mousedown', _this.globalMouseDownHandler, true);\r\n }, 1);\r\n };\r\n return DefaultDateTimePicker;\r\n}(DateTimePicker));\r\nexport { DefaultDateTimePicker };\r\n//# sourceMappingURL=default_date_time_picker.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { i18n, utils, liquid } from '@easydata/core';\r\nimport { DialogFooterAlignment } from './dialog_service';\r\nimport { domel } from '../utils/dom_elem_builder';\r\nvar cssPrefix = \"kdlg\";\r\nvar DefaultDialogService = /** @class */ (function () {\r\n function DefaultDialogService() {\r\n }\r\n DefaultDialogService.prototype.openConfirm = function (title, content, callback) {\r\n var _this = this;\r\n var template = \"<div id=\\\"\" + cssPrefix + \"-dialog-confirm\\\">\" + content + \"</div>\";\r\n var options = {\r\n title: title,\r\n closable: false,\r\n submitable: true,\r\n cancelable: true,\r\n body: template\r\n };\r\n if (callback) {\r\n options.onSubmit = function () {\r\n callback(true);\r\n };\r\n options.onCancel = function () {\r\n callback(false);\r\n };\r\n this.open(options);\r\n return;\r\n }\r\n return new Promise(function (resolve) {\r\n options.onSubmit = function () {\r\n resolve(true);\r\n };\r\n options.onCancel = function () {\r\n resolve(false);\r\n };\r\n _this.open(options);\r\n });\r\n };\r\n DefaultDialogService.prototype.openPrompt = function (title, content, defVal, callback) {\r\n var _this = this;\r\n var template = \"<div id=\\\"\" + cssPrefix + \"-dialog-form\\\" class=\\\"kfrm-form\\\">\\n <div class=\\\"kfrm-fields label-above\\\">\\n <label for=\\\"\" + cssPrefix + \"-dialog-form-input\\\" id=\\\"\" + cssPrefix + \"-dialog-form-content\\\">\" + content + \"</label>\\n <input type=\\\"text\\\" name=\\\"\" + cssPrefix + \"-dialog-form-input\\\" id=\\\"\" + cssPrefix + \"-dialog-form-input\\\" />\\n </div>\\n </div>\";\r\n var options = {\r\n title: title,\r\n submitable: true,\r\n closable: true,\r\n cancelable: true,\r\n submitOnEnter: true,\r\n body: template,\r\n arrangeParents: false,\r\n beforeOpen: function () {\r\n var input = document.getElementById(cssPrefix + \"-dialog-form-input\");\r\n if (defVal) {\r\n input.value = defVal;\r\n }\r\n input.focus();\r\n }\r\n };\r\n var processInput = function (callback) {\r\n var input = document.getElementById(cssPrefix + \"-dialog-form-input\");\r\n var result = input.value;\r\n if (result && result.replace(/\\s/g, '').length > 0) {\r\n callback(result);\r\n return true;\r\n }\r\n input.classList.add('eqjs-invalid');\r\n return false;\r\n };\r\n if (callback) {\r\n options.onSubmit = function () {\r\n return processInput(callback);\r\n };\r\n options.onCancel = function () {\r\n callback(\"\");\r\n };\r\n this.open(options);\r\n return;\r\n }\r\n return new Promise(function (resolve) {\r\n options.onSubmit = function () {\r\n return processInput(resolve);\r\n };\r\n options.onCancel = function () {\r\n resolve(\"\");\r\n };\r\n _this.open(options);\r\n });\r\n };\r\n DefaultDialogService.prototype.open = function (options, data) {\r\n var _this = this;\r\n var dialog = new DefaultDialog(options, data);\r\n var onDestroy = options.onDestroy;\r\n options.onDestroy = function (dlg) {\r\n _this.untrack(dlg);\r\n onDestroy && onDestroy(dlg);\r\n };\r\n dialog.open();\r\n this.track(dialog);\r\n return dialog;\r\n };\r\n DefaultDialogService.prototype.createSet = function (options) {\r\n return new DefaultDialogSet(options, this);\r\n };\r\n DefaultDialogService.prototype.untrack = function (dlg) {\r\n var index = DefaultDialogService.openDialogs.indexOf(dlg);\r\n if (index >= 0) {\r\n DefaultDialogService.openDialogs.splice(index, 1);\r\n }\r\n };\r\n DefaultDialogService.prototype.track = function (dlg) {\r\n DefaultDialogService.openDialogs.push(dlg);\r\n };\r\n DefaultDialogService.prototype.openProgress = function (options) {\r\n var _this = this;\r\n var dialog = new DefaultProgressDialog(options);\r\n var onDestroy = options.onDestroy;\r\n options.onDestroy = function (dlg) {\r\n _this.untrack(dlg);\r\n onDestroy && onDestroy(dlg);\r\n };\r\n dialog.open();\r\n this.track(dialog);\r\n return dialog;\r\n };\r\n DefaultDialogService.prototype.getAllDialogs = function () {\r\n return Array.from(DefaultDialogService.openDialogs);\r\n };\r\n DefaultDialogService.prototype.closeAllDialogs = function () {\r\n for (var _i = 0, _a = Array.from(DefaultDialogService.openDialogs); _i < _a.length; _i++) {\r\n var dialog = _a[_i];\r\n dialog.close();\r\n }\r\n };\r\n DefaultDialogService.openDialogs = [];\r\n return DefaultDialogService;\r\n}());\r\nexport { DefaultDialogService };\r\nvar DefaultDialog = /** @class */ (function () {\r\n function DefaultDialog(options, data) {\r\n var _this = this;\r\n this.options = options;\r\n this.submitHandler = function (token) {\r\n if (_this.options.onSubmit && _this.options.onSubmit(_this, token) === false) {\r\n return false;\r\n }\r\n _this.destroy();\r\n return true;\r\n };\r\n this.cancelHandler = function () {\r\n if (_this.options.onCancel) {\r\n _this.options.onCancel(_this);\r\n }\r\n _this.destroy();\r\n };\r\n this.keydownHandler = function (ev) {\r\n if (ev.keyCode == 13 && _this.isActiveDialog()) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n if (_this.submitHandler()) {\r\n window.removeEventListener('keydown', _this.keydownHandler, false);\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n this.dialogId = utils.generateId('dlg');\r\n this.data = data;\r\n this.slot =\r\n domel('div', document.body)\r\n .attr('tab-index', '-1')\r\n .data('dialog-id', this.dialogId)\r\n .addClass(cssPrefix + \"-modal\", 'is-active')\r\n .focus()\r\n .addChild('div', function (b) { return b\r\n .addClass('kdlg-modal-background'); })\r\n .addChild('div', function (b) { return _this.windowElement = b\r\n .addClass(cssPrefix + \"-modal-window\")\r\n .addChild('header', function (b) {\r\n _this.headerElement = b\r\n .addClass(cssPrefix + \"-header\")\r\n .addChild('p', function (b) { return b\r\n .addClass(cssPrefix + \"-header-title\")\r\n .addText(options.title); })\r\n .toDOM();\r\n if (options.closable !== false)\r\n b.addChild('button', function (b) { return b\r\n .addClass(cssPrefix + \"-modal-close\")\r\n .on('click', function () {\r\n _this.cancelHandler();\r\n })\r\n .focus(); });\r\n })\r\n .addChild('div', function (b) {\r\n b.addClass(cssPrefix + \"-alert-container\");\r\n _this.alertElement = b.toDOM();\r\n })\r\n .addChild('section', function (b) {\r\n _this.bodyElement = b\r\n .addClass(cssPrefix + \"-body\")\r\n .toDOM();\r\n if (typeof options.body === 'string') {\r\n var html = liquid.renderLiquidTemplate(options.body, data);\r\n b.addHtml(html);\r\n }\r\n else {\r\n b.addChildElement(options.body);\r\n }\r\n })\r\n .addChild('footer', function (b) {\r\n var alignClass = null;\r\n if (options.footerAlignment && options.footerAlignment == DialogFooterAlignment.Center) {\r\n alignClass = 'align-center';\r\n }\r\n else {\r\n alignClass = 'align-right';\r\n }\r\n _this.footerElement = b\r\n .addClass(cssPrefix + \"-footer\")\r\n .toDOM();\r\n b.addClass(alignClass);\r\n if (options.submitable === false)\r\n return;\r\n b.addChild('button', function (bb) {\r\n bb.id(_this.dialogId + '-btn-submit')\r\n .addClass('kfrm-button', 'is-info')\r\n .addText(options.submitButtonText || i18n.getText('ButtonOK'));\r\n if (options.recaptchaSiteKey) {\r\n bb.data('sitekey', options.recaptchaSiteKey);\r\n bb.addClass('g-recaptcha');\r\n bb.on('click', function (e) {\r\n if (grecaptcha) {\r\n grecaptcha.ready(function () {\r\n grecaptcha.execute(options.recaptchaSiteKey, { action: 'submit' })\r\n .then(function (token) {\r\n _this.submitHandler(token);\r\n });\r\n });\r\n }\r\n else {\r\n _this.submitHandler();\r\n }\r\n });\r\n }\r\n else {\r\n bb.on('click', function (e) {\r\n _this.submitHandler();\r\n });\r\n }\r\n bb.focus();\r\n });\r\n if (options.cancelable !== false)\r\n b.addChild('button', function (bb) { return bb\r\n .id(_this.dialogId + '-btn-cancel')\r\n .addClass('kfrm-button')\r\n .addText(options.cancelButtonText || i18n.getText('ButtonCancel'))\r\n .on('click', function (e) {\r\n _this.cancelHandler();\r\n }); });\r\n })\r\n .toDOM(); })\r\n .toDOM();\r\n }\r\n DefaultDialog.prototype.getData = function () {\r\n return this.data;\r\n };\r\n DefaultDialog.prototype.getRootElement = function () {\r\n return this.slot;\r\n };\r\n DefaultDialog.prototype.getSubmitButtonElement = function () {\r\n return document.getElementById(this.dialogId + '-btn-submit');\r\n };\r\n DefaultDialog.prototype.getCancelButtonElement = function () {\r\n return document.getElementById(this.dialogId + '-btn-cancel');\r\n };\r\n DefaultDialog.prototype.open = function () {\r\n var _this = this;\r\n if (this.options.beforeOpen) {\r\n this.options.beforeOpen(this);\r\n }\r\n domel(this.slot).show();\r\n if (this.options.arrangeParents) {\r\n this.arrangeParents(true);\r\n }\r\n var windowDiv = this.slot\r\n .querySelector(\".\" + cssPrefix + \"-modal-window\");\r\n if (this.options.height) {\r\n windowDiv.style.height = typeof this.options.height === 'string'\r\n ? this.options.height\r\n : this.options.height + \"px\";\r\n }\r\n if (this.options.width) {\r\n windowDiv.style.width = typeof this.options.width === 'string'\r\n ? this.options.width\r\n : this.options.width + \"px\";\r\n }\r\n if (this.options.submitOnEnter) {\r\n window.addEventListener('keydown', this.keydownHandler, false);\r\n }\r\n //clear alert on change in any input element \r\n this.slot.querySelectorAll('input')\r\n .forEach(function (element) {\r\n return element.addEventListener('input', function () {\r\n _this.clearAlert();\r\n if (_this.options.onInput) {\r\n _this.options.onInput(_this);\r\n }\r\n });\r\n });\r\n if (this.options.onShow) {\r\n this.options.onShow(this);\r\n }\r\n };\r\n DefaultDialog.prototype.submit = function () {\r\n this.submitHandler();\r\n };\r\n DefaultDialog.prototype.cancel = function () {\r\n this.cancelHandler();\r\n };\r\n DefaultDialog.prototype.close = function () {\r\n this.destroy();\r\n };\r\n DefaultDialog.prototype.disableButtons = function () {\r\n var buttons = this.slot.querySelectorAll('button');\r\n buttons.forEach(function (button) { return button.disabled = true; });\r\n };\r\n DefaultDialog.prototype.enableButtons = function () {\r\n var buttons = this.slot.querySelectorAll('button');\r\n buttons.forEach(function (button) { return button.disabled = false; });\r\n };\r\n DefaultDialog.prototype.showAlert = function (text, reason, replace) {\r\n var alert = domel('div')\r\n .addClass(cssPrefix + \"-alert \" + (reason || ''))\r\n .addChild('span', function (b) { return b\r\n .addClass(cssPrefix + \"-alert-closebtn\")\r\n .text('×')\r\n .on('click', function (ev) {\r\n var alert = ev.target.parentElement;\r\n alert.parentElement.removeChild(alert);\r\n }); })\r\n .addText(text)\r\n .toDOM();\r\n if (replace === true) {\r\n this.clearAlert();\r\n }\r\n this.alertElement.appendChild(alert);\r\n };\r\n DefaultDialog.prototype.clearAlert = function () {\r\n this.alertElement.innerHTML = '';\r\n };\r\n DefaultDialog.prototype.destroy = function () {\r\n var elem = document.querySelectorAll(\"[data-dialog-id=\\\"\" + this.dialogId + \"\\\"]\");\r\n if (elem.length <= 0)\r\n return;\r\n if (this.options.arrangeParents) {\r\n this.arrangeParents(false);\r\n }\r\n document.body.removeChild(this.slot);\r\n if (this.options.submitOnEnter) {\r\n window.removeEventListener('keydown', this.keydownHandler, false);\r\n }\r\n if (this.options.onDestroy) {\r\n this.options.onDestroy(this);\r\n }\r\n };\r\n DefaultDialog.prototype.isActiveDialog = function () {\r\n var windowDivs = document.documentElement.querySelectorAll('.kdlg-modal');\r\n return windowDivs[windowDivs.length - 1] === this.slot;\r\n };\r\n DefaultDialog.prototype.arrangeParents = function (turnOn) {\r\n var windowDivs = document.documentElement.querySelectorAll('.kdlg-modal-window');\r\n for (var i = 0; i < windowDivs.length - 1; i++) {\r\n if (turnOn) {\r\n var offset = i == 0 ? 20 : i * 40 + 20;\r\n domel(windowDivs[i])\r\n .setStyle('margin-top', offset + \"px\")\r\n .setStyle('margin-left', offset + \"px\");\r\n }\r\n else {\r\n domel(windowDivs[i])\r\n .removeStyle('margin-top')\r\n .removeStyle('margin-left');\r\n }\r\n }\r\n };\r\n return DefaultDialog;\r\n}());\r\nexport { DefaultDialog };\r\nvar DefaultProgressDialog = /** @class */ (function (_super) {\r\n __extends(DefaultProgressDialog, _super);\r\n function DefaultProgressDialog(options, data) {\r\n var _this = this;\r\n var contentElement;\r\n var progressElement;\r\n var body = domel('div')\r\n .addChild('div', function (b) { return contentElement = b\r\n .text(options.content || '')\r\n .toDOM(); })\r\n .addChild('div', function (b) {\r\n b\r\n .addClass(cssPrefix + \"-progress-line\")\r\n .addChild('div', function (b) {\r\n progressElement = b\r\n .addClass('fill')\r\n .toDOM();\r\n if (options.determinated) {\r\n b.setStyle('width', '0%');\r\n }\r\n else {\r\n b.addClass('indeterminate');\r\n }\r\n });\r\n })\r\n .toDOM();\r\n _this = _super.call(this, {\r\n title: options.title,\r\n body: body,\r\n beforeOpen: options.beforeOpen,\r\n onSubmit: options.onSubmit,\r\n width: options.width,\r\n height: options.height,\r\n submitable: false,\r\n cancelable: false,\r\n closable: false,\r\n onDestroy: options.onDestroy\r\n }, data) || this;\r\n _this.contentElement = contentElement;\r\n _this.progressElement = progressElement;\r\n return _this;\r\n }\r\n DefaultProgressDialog.prototype.updateContent = function (content) {\r\n this.contentElement.innerText = content;\r\n };\r\n DefaultProgressDialog.prototype.updateProgress = function (progress) {\r\n var _this = this;\r\n progress = this.in01(progress);\r\n this.progressElement.style.width = progress * 100 + \"%\";\r\n if (progress === 1) {\r\n // postpone for 0.5s for smooth closing\r\n setTimeout(function () {\r\n _this.submit();\r\n }, 500);\r\n }\r\n };\r\n DefaultProgressDialog.prototype.in01 = function (num) {\r\n if (num > 1)\r\n return 1;\r\n if (num < 0)\r\n return 0;\r\n return num;\r\n };\r\n return DefaultProgressDialog;\r\n}(DefaultDialog));\r\nexport { DefaultProgressDialog };\r\nvar DefaultDialogSet = /** @class */ (function () {\r\n function DefaultDialogSet(options, dialogService) {\r\n this.options = options;\r\n this.dialogService = dialogService;\r\n this.currentDialog = null;\r\n this.currentIndex = 0;\r\n this.options = options;\r\n this.dialogService = dialogService;\r\n }\r\n DefaultDialogSet.prototype.getCurrent = function () {\r\n return this.currentDialog;\r\n };\r\n DefaultDialogSet.prototype.openNext = function (data) {\r\n return this.open(this.currentIndex + 1, data);\r\n };\r\n DefaultDialogSet.prototype.openPrev = function (data) {\r\n return this.open(this.currentIndex - 1, data);\r\n };\r\n DefaultDialogSet.prototype.open = function (page, data) {\r\n if (page < 0) {\r\n this.currentIndex = 0;\r\n }\r\n else if (page >= this.options.length) {\r\n this.currentIndex = this.options.length - 1;\r\n }\r\n else {\r\n this.currentIndex = page;\r\n }\r\n if (this.currentDialog) {\r\n try {\r\n this.currentDialog.close();\r\n }\r\n catch (e) { }\r\n }\r\n var dlgOptions = this.options[this.currentIndex];\r\n this.currentDialog = this.dialogService.open(dlgOptions, data);\r\n return this.currentDialog;\r\n };\r\n DefaultDialogSet.prototype.close = function () {\r\n if (this.currentDialog) {\r\n this.currentDialog.close();\r\n this.currentDialog = null;\r\n }\r\n };\r\n return DefaultDialogSet;\r\n}());\r\nexport { DefaultDialogSet };\r\n//# sourceMappingURL=default_dialog_service.js.map","import { i18n } from '@easydata/core';\r\nfunction addEasyDataUITexts() {\r\n i18n.updateDefaultTexts({\r\n GridPageInfo: '{FirstPageRecordNum} - {LastPageRecordNum} of {Total} records',\r\n GridItemsPerPage: 'items per page',\r\n ButtonOK: \"OK\",\r\n ButtonCancel: \"Cancel\",\r\n ButtonApply: 'Apply',\r\n ButtonNow: 'Now',\r\n LblTotal: 'Total'\r\n });\r\n}\r\naddEasyDataUITexts();\r\n//# sourceMappingURL=text_resources.js.map","// grid\r\nexport * from './grid/easy_grid';\r\nexport * from './grid/easy_grid_options';\r\nexport * from './grid/easy_grid_columns';\r\nexport * from './grid/easy_grid_cell_renderer';\r\n//datetimepicker\r\nexport * from './datetimepicker/calendar';\r\nexport * from './datetimepicker/date_time_picker';\r\nexport * from './datetimepicker/default_calendar';\r\nexport * from './datetimepicker/default_date_time_picker';\r\nexport * from './datetimepicker/default_time_picker';\r\nexport * from './datetimepicker/time_picker';\r\n// utils\r\nexport * from './utils/browser_utils';\r\nexport * from './utils/dom_elem_builder';\r\nexport * from './utils/drag_manager';\r\nexport * from './utils/mask';\r\nexport * from './utils/ui-utils';\r\n//dialogs\r\nexport * from './dialogs/default_dialog_service';\r\nexport * from './dialogs/dialog_service';\r\nimport './i18n/text_resources';\r\nimport { DefaultDialogService } from './dialogs/default_dialog_service';\r\n// export dialogs to use outside of context as global\r\nvar dialogs = new DefaultDialogService();\r\nexport { dialogs };\r\n//# sourceMappingURL=public_api.js.map","import { i18n } from '@easydata/core';\r\nimport { DataType } from '@easydata/core';\r\n\r\nconst internalDateFormat = 'yyyy-MM-dd';\r\nconst internalTimeFormat = 'HH:mm';\r\n\r\nexport const getInternalDateTimeFormat = (dtype: DataType): string => {\r\n if (dtype == DataType.Date)\r\n return internalDateFormat;\r\n\r\n if (dtype == DataType.Time)\r\n return internalTimeFormat;\r\n\r\n return `${internalDateFormat}T${internalTimeFormat}`;\r\n}\r\n\r\nexport const getEditDateTimeFormat = (dtype: DataType): string => {\r\n const settings = i18n.getLocaleSettings();\r\n if (dtype == DataType.Date)\r\n return settings.editDateFormat;\r\n\r\n if (dtype == DataType.Time)\r\n return settings.editTimeFormat;\r\n\r\n return `${settings.editDateFormat} ${settings.editTimeFormat}`;\r\n}\r\n\r\nexport const setLocation = (path: string) => {\r\n const state = window.history.state;\r\n history.pushState(state, document.title, path)\r\n window.dispatchEvent(new Event('ed_set_location'));\r\n}","import { MetaEntityAttr } from '@easydata/core';\r\n\r\nexport interface ValidationResult {\r\n successed: boolean;\r\n messages?: string[];\r\n}\r\n\r\nexport abstract class Validator {\r\n\r\n public name: string;\r\n\r\n public abstract validate(attr: MetaEntityAttr, value: any): ValidationResult;\r\n \r\n}","import { MetaEntityAttr, i18n, utils as dataUtils } from '@easydata/core';\r\nimport { ValidationResult, Validator } from './validator';\r\n\r\nimport { getEditDateTimeFormat } from '../utils/utils';\r\n\r\nexport class DateTimeValidator extends Validator {\r\n\r\n constructor() {\r\n super();\r\n this.name = 'DateTime';\r\n }\r\n\r\n public validate(attr: MetaEntityAttr, value: any): ValidationResult {\r\n\r\n if (!dataUtils.IsDefinedAndNotNull(value) || value == '')\r\n return { successed: true };\r\n\r\n if (dataUtils.getDateDataTypes().indexOf(attr.dataType) >= 0) {\r\n try {\r\n const editFormat = getEditDateTimeFormat(attr.dataType);\r\n const newDate = dataUtils.strToDateTime(value, editFormat);\r\n }\r\n catch {\r\n return {\r\n successed: false,\r\n messages: [i18n.getText('DateTimeError')]\r\n }\r\n }\r\n }\r\n\r\n \r\n return { successed: true };\r\n }\r\n}","import { \r\n DataType, utils as dataUtils, \r\n MetaEntityAttr, \r\n} from '@easydata/core';\r\n\r\nimport { domel } from '@easydata/ui';\r\n\r\nimport { DataContext } from '../main/data_context';\r\n\r\nimport { ValidationResult, Validator } from '../validators/validator';\r\n\r\nimport * as crudUtils from '../utils/utils';\r\nimport { DateTimeValidator } from '../validators/datetime_validator';\r\n\r\nexport class EntityEditForm {\r\n private errorsDiv: HTMLElement;\r\n\r\n private html: HTMLElement;\r\n\r\n constructor(private context: DataContext) { \r\n }\r\n\r\n private validators: Validator[] = [ new DateTimeValidator() ];\r\n\r\n public getHtml() {\r\n return this.html;\r\n }\r\n\r\n private setHtmlInt(html: HTMLElement) {\r\n this.html = html;\r\n this.errorsDiv = this.html.querySelector('.errors-block');\r\n }\r\n\r\n public validate(): boolean {\r\n this.clearErrors();\r\n\r\n const inputs = Array.from(this.html.querySelectorAll<HTMLInputElement | HTMLSelectElement>('input, select'));\r\n let isValid = true;\r\n for(const input of inputs) {\r\n const attr = this.context.getMetaData().getAttributeById(input.name);\r\n\r\n if (input.type === 'checkbox')\r\n continue;\r\n\r\n const result = this.validateValue(attr, input.value);\r\n if (!result.successed) {\r\n if (isValid) {\r\n domel(this.errorsDiv)\r\n .addChild('ul');\r\n }\r\n\r\n isValid = false;\r\n\r\n for(const message of result.messages) {\r\n this.errorsDiv.firstElementChild.innerHTML += `<li>${attr.caption}: ${message}</li>`;\r\n }\r\n }\r\n \r\n this.markInputValid(input, result.successed);\r\n }\r\n\r\n return isValid;\r\n }\r\n\r\n public getData(): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n const filePromises: Promise<any>[] = [];\r\n const inputs = Array.from(this.html\r\n .querySelectorAll<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>('input, select, textarea'));\r\n\r\n let obj = {};\r\n for (const input of inputs) {\r\n const property = input.name.substring(input.name.lastIndexOf('.') + 1);\r\n const attr = this.context.getMetaData().getAttributeById(input.name);\r\n\r\n if (input.type === 'checkbox') {\r\n obj[property] = (input as HTMLInputElement).checked;\r\n }\r\n else if (input.type === 'file') {\r\n filePromises.push(this.fileToBase64((input as HTMLInputElement).files[0])\r\n .then(content => obj[property] = content));\r\n }\r\n else {\r\n obj[property] = this.mapValue(attr.dataType, input.value);\r\n }\r\n }\r\n\r\n Promise.all(filePromises)\r\n .then(() => resolve(obj))\r\n .catch((e) => reject(e));\r\n });\r\n }\r\n\r\n private fileToBase64(file: File): Promise<string> {\r\n return new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => {\r\n const result = reader.result.toString();\r\n resolve(result.substring(result.indexOf(',') + 1));\r\n } \r\n reader.onerror = error => reject(error);\r\n })\r\n }\r\n\r\n public useValidator(...validator: Validator[]) {\r\n this.useValidators(validator);\r\n }\r\n\r\n public useValidators(validators: Validator[]) {\r\n this.validators = this.validators.concat(validators);\r\n }\r\n\r\n private mapValue(type: DataType, value: string) {\r\n if (dataUtils.getDateDataTypes().indexOf(type) >= 0) {\r\n if (type !== DataType.Time && value && value.length) {\r\n const editFormat = crudUtils.getEditDateTimeFormat(type);\r\n const internalFormat = crudUtils.getInternalDateTimeFormat(type);\r\n\r\n const date = dataUtils.strToDateTime(value, editFormat);\r\n return dataUtils.dateTimeToStr(date, internalFormat)\r\n } \r\n\r\n return value && value.length ? value : null;\r\n }\r\n\r\n if (dataUtils.isIntType(type))\r\n return parseInt(value);\r\n\r\n if (dataUtils.isNumericType(type))\r\n return parseFloat(value);\r\n\r\n return value;\r\n }\r\n\r\n private clearErrors() {\r\n this.errorsDiv.innerHTML = '';\r\n\r\n this.html.querySelectorAll('input, select').forEach(el => {\r\n el.classList.remove('is-valid');\r\n el.classList.remove('is-invalid');\r\n });\r\n }\r\n\r\n private markInputValid(input: HTMLElement, valid: boolean) {\r\n input.classList.add(valid ? 'is-valid' : 'is-invalid');\r\n }\r\n\r\n private validateValue(attr: MetaEntityAttr, value: any): ValidationResult {\r\n const result = { successed: true, messages: []}\r\n for(const validator of this.validators) {\r\n const res = validator.validate(attr, value);\r\n if (!res.successed) {\r\n result.successed = false;\r\n result.messages = result.messages.concat(res.messages);\r\n }\r\n }\r\n\r\n return result;\r\n } \r\n}\r\n","import { i18n, utils as dataUtils } from '@easydata/core';\r\nimport { \r\n browserUtils, CellRendererType,\r\n domel, EasyGrid, \r\n GridCellRenderer, GridColumn, DFMT_REGEX\r\n} from '@easydata/ui';\r\nimport { DataFilter } from '../filter/data_filter';\r\n\r\nexport interface TextFilterWidgetOptions {\r\n focus?: boolean,\r\n instantMode?: boolean;\r\n instantTimeout?: number\r\n}\r\n\r\nexport class TextFilterWidget {\r\n private options = {\r\n focus: false,\r\n instantMode: false,\r\n instantTimeout: 1000\r\n }\r\n\r\n constructor(\r\n private slot: HTMLElement, \r\n private grid: EasyGrid, \r\n private filter: DataFilter,\r\n options?: TextFilterWidgetOptions) {\r\n\r\n this.options = dataUtils.assignDeep(this.options, options || {});\r\n\r\n const stringDefRenderer = this.grid.cellRendererStore\r\n .getDefaultRendererByType(CellRendererType.STRING);\r\n this.grid.cellRendererStore\r\n .setDefaultRenderer(CellRendererType.STRING, (value, column, cellElement, rowElement) => \r\n this.highlightCellRenderer(stringDefRenderer, value, column, cellElement, rowElement));\r\n\r\n const numDefRenderer = this.grid.cellRendererStore\r\n .getDefaultRendererByType(CellRendererType.NUMBER);\r\n this.grid.cellRendererStore\r\n .setDefaultRenderer(CellRendererType.NUMBER, (value, column, cellElement, rowElement) => \r\n this.highlightCellRenderer(numDefRenderer, value, column, cellElement, rowElement));\r\n\r\n this.render();\r\n }\r\n\r\n private filterInput: HTMLInputElement;\r\n\r\n private render() { \r\n const horizClass = browserUtils.IsIE() \r\n ? 'kfrm-fields-ie is-horizontal' \r\n : 'kfrm-fields is-horizontal';\r\n\r\n const isEdgeOrIE = browserUtils.IsIE() || browserUtils.IsEdge();\r\n \r\n domel(this.slot)\r\n .addClass(horizClass)\r\n .addChild('div', b => {\r\n b\r\n .addClass('control')\r\n .addChild('input', b => { \r\n this.filterInput = b.toDOM();\r\n b \r\n .attr('placeholder', i18n.getText('SearchInputPlaceholder'))\r\n .type('text')\r\n\r\n b.on('keydown', this.inputKeydownHandler.bind(this))\r\n\r\n if (this.options.instantMode) {\r\n b.on('keyup', this.inputKeyupHandler.bind(this));\r\n }\r\n });\r\n\r\n if (!isEdgeOrIE) {\r\n b \r\n .addClass('has-icons-right')\r\n .addChild('span', b => {\r\n b\r\n .addClass('icon')\r\n .addClass('is-right')\r\n .addClass('is-clickable')\r\n .html('&#x1F5D9;')\r\n .on('click', this.clearButtonClickHander.bind(this));\r\n });\r\n }\r\n });\r\n\r\n if (!this.options.instantMode) {\r\n domel(this.slot)\r\n .addChild('button', b => b\r\n .addClass('kfrm-button')\r\n .addText(i18n.getText('SearchBtn'))\r\n .on('click', this.searchButtonClickHandler.bind(this))\r\n );\r\n }\r\n\r\n if (this.options.focus) {\r\n this.filterInput.focus();\r\n }\r\n }\r\n\r\n private applyFilterTimeout: any;\r\n\r\n private inputKeydownHandler(ev: Event) {\r\n if ((ev as KeyboardEvent).keyCode == 13) {\r\n this.applyFilter(true);\r\n }\r\n }\r\n\r\n private inputKeyupHandler() {\r\n if (this.applyFilterTimeout) {\r\n clearTimeout(this.applyFilterTimeout);\r\n }\r\n\r\n this.applyFilterTimeout = setTimeout(() => {\r\n this.applyFilter(true);\r\n }, this.options.instantTimeout);\r\n }\r\n\r\n private clearButtonClickHander() {\r\n this.filterInput.value = '';\r\n this.filterInput.focus();\r\n\r\n this.applyFilter(true);\r\n }\r\n\r\n private searchButtonClickHandler() {\r\n this.applyFilter(true);\r\n }\r\n\r\n public applyFilter(checkChange : boolean) : boolean {\r\n if (this.applyFilterTimeout) {\r\n clearTimeout(this.applyFilterTimeout);\r\n }\r\n\r\n const filterValue = this.filter.getValue();\r\n if (!checkChange || filterValue != this.filterInput.value) {\r\n this.filter.apply(this.filterInput.value)\r\n .then(data => {\r\n this.grid.setData(data);\r\n });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private highlightCellRenderer(defaultRenderer: GridCellRenderer, value: any, column: GridColumn, cellElement: HTMLElement, rowElement: HTMLElement) { \r\n if (dataUtils.isNumericType(column.type) \r\n || dataUtils.getStringDataTypes().indexOf(column.type) >= 0) \r\n {\r\n if (value) {\r\n if (column.dataColumn && column.dataColumn.displayFormat\r\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\r\n value = column.dataColumn.displayFormat.replace(DFMT_REGEX, (_, $1) => {\r\n return i18n.numberToStr(value, $1);\r\n });\r\n }\r\n else {\r\n value = value.toLocaleString();\r\n }\r\n\r\n \r\n const result = this.highlightText(value.toString());\r\n if (result instanceof HTMLElement) {\r\n cellElement.title = value;\r\n cellElement.appendChild(result);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n defaultRenderer(value, column, cellElement, rowElement);\r\n }\r\n\r\n private highlightText(content: string): HTMLElement | string{\r\n const normalizedContent = content.toLowerCase();\r\n const filterValue = this.filter.getValue().toString();\r\n if (filterValue && filterValue.length > 0 && content && content.length > 0) {\r\n \r\n const indexInMas = [];\r\n const words = filterValue.split('||').map(w => w.trim().toLowerCase());\r\n for(let i = 0; i < words.length; i++) {\r\n let pos = 0;\r\n const lowerWord = words[i];\r\n if (!lowerWord.length)\r\n continue;\r\n if (lowerWord === normalizedContent) {\r\n const highlightSpan = document.createElement('span');\r\n highlightSpan.style.backgroundColor = 'yellow';\r\n highlightSpan.innerText = content;\r\n \r\n return highlightSpan;\r\n }\r\n while (pos < content.length - 1) {\r\n const index = normalizedContent.indexOf(lowerWord, pos);\r\n if (index >= 0) {\r\n indexInMas.push({index: index, length: words[i].length});\r\n pos = index + lowerWord.length;\r\n } else {\r\n pos++;\r\n }\r\n }\r\n }\r\n \r\n if (indexInMas.length > 0) {\r\n \r\n //sort array item by index\r\n indexInMas.sort((item1, item2) => {\r\n \r\n if (item1.index > item2.index) {\r\n return 1;\r\n } \r\n else if (item1.index == item2.index2) {\r\n return 0;\r\n } \r\n else {\r\n return -1;\r\n }\r\n \r\n });\r\n \r\n //remove intersecting gaps\r\n for(let i = 0; i < indexInMas.length - 1;) {\r\n const delta = indexInMas[i + 1].index - (indexInMas[i].index + indexInMas[i].length);\r\n if (delta < 0) {\r\n const addDelta = indexInMas[i + 1].length + delta;\r\n if (addDelta > 0) {\r\n indexInMas[i].length += addDelta;\r\n }\r\n indexInMas.splice(i + 1, 1);\r\n } else {\r\n i++;\r\n }\r\n }\r\n \r\n const div = document.createElement('div');\r\n for (let i = 0; i < indexInMas.length; i++) {\r\n if (i === 0) {\r\n const text = document.createTextNode(content.substring(0, indexInMas[i].index));\r\n div.appendChild(text);\r\n }\r\n \r\n const highlightSpan = document.createElement('span');\r\n highlightSpan.style.backgroundColor = 'yellow';\r\n highlightSpan.innerText = content.substring(indexInMas[i].index,\r\n indexInMas[i].index + indexInMas[i].length)\r\n \r\n div.appendChild(highlightSpan);\r\n\r\n const text = (i < indexInMas.length - 1) \r\n ? document.createTextNode(content.substring(indexInMas[i].index\r\n + indexInMas[i].length, indexInMas[i + 1].index))\r\n : document.createTextNode(content.substring(indexInMas[i].index\r\n + indexInMas[i].length));\r\n\r\n div.appendChild(text);\r\n }\r\n \r\n return div;\r\n }\r\n }\r\n\r\n return content;\r\n }\r\n}","import { \r\n DataRow, DataType, EasyDataTable, \r\n EditorTag, EntityAttrKind, i18n, \r\n MetaEntityAttr, utils as dataUtils,\r\n ValueEditor\r\n} from '@easydata/core';\r\n\r\nimport { \r\n browserUtils, DateTimePickerOptions, \r\n DefaultDateTimePicker, DefaultDialogService, \r\n domel, DomElementBuilder, EasyGrid \r\n} from '@easydata/ui';\r\n\r\nimport * as crudUtils from '../utils/utils';\r\n\r\nimport { DataContext } from '../main/data_context';\r\nimport { EntityEditForm } from './entity_edit_form';\r\nimport { TextFilterWidget } from '../widgets/text_filter_widget';\r\n\r\nconst isIE = browserUtils.IsIE();\r\n\r\nexport type FormBuildParams = {\r\n values?: DataRow,\r\n isEditForm?: boolean;\r\n};\r\n\r\nexport class EntityEditFormBuilder {\r\n private form: EntityEditForm;\r\n\r\n constructor(private context: DataContext, private params?: FormBuildParams) {\r\n this.params = params || {};\r\n this.reset();\r\n }\r\n\r\n public reset() {\r\n this.form = new EntityEditForm(this.context);\r\n }\r\n\r\n private setupLookupField(parent: HTMLElement, attr: MetaEntityAttr, readOnly: boolean, value: any): void {\r\n const lookupEntity = this.context.getMetaData().getRootEntity()\r\n .subEntities.filter(ent => ent.id == attr.lookupEntity)[0];\r\n const dataAttr = this.context.getMetaData().getAttributeById(attr.dataAttr);\r\n\r\n if (!dataAttr) return;\r\n\r\n readOnly = readOnly || !dataAttr.isEditable;\r\n\r\n value = this.params.values\r\n ? this.params.values.getValue(dataAttr.id)\r\n : undefined;\r\n\r\n const horizClass = isIE\r\n ? 'kfrm-fields-ie is-horizontal'\r\n : 'kfrm-fields is-horizontal';\r\n\r\n let inputEl: HTMLInputElement;\r\n domel(parent)\r\n .addChild('div', b => {\r\n b\r\n .addClass(horizClass)\r\n .addChild('input', b => {\r\n inputEl = b.toDOM();\r\n b.attr('readonly', '');\r\n\r\n b.name(dataAttr.id)\r\n b.type(this.resolveInputType(dataAttr.dataType));\r\n\r\n b.value(dataUtils.IsDefinedAndNotNull(value)\r\n ? value.toString() : '');\r\n });\r\n\r\n if (!readOnly)\r\n b.addChild('button', b => b\r\n .addClass('kfrm-button')\r\n .attr('title', i18n.getText('NavigationBtnTitle'))\r\n .addText('...')\r\n .on('click', (ev) => {\r\n const lookupTable = new EasyDataTable({\r\n loader: {\r\n loadChunk: (chunkParams) => this.context.getDataLoader()\r\n .loadChunk({ ...chunkParams, id: lookupEntity.id } as any)\r\n }\r\n });\r\n\r\n this.context.getDataLoader()\r\n .loadChunk({ offset: 0, limit: 1000, needTotal: true, sourceId: lookupEntity.id } as any)\r\n .then(data => {\r\n for (const col of data.table.columns.getItems()) {\r\n const attrs = lookupEntity.attributes.filter(attr =>\r\n attr.id == col.id && (attr.isPrimaryKey || attr.showInLookup));\r\n\r\n if (attrs.length) {\r\n lookupTable.columns.add(col);\r\n }\r\n }\r\n\r\n lookupTable.setTotal(data.total);\r\n\r\n for (const row of data.table.getCachedRows()) {\r\n lookupTable.addRow(row);\r\n }\r\n\r\n const ds = new DefaultDialogService();\r\n let gridSlot: HTMLElement = null;\r\n\r\n let selectedSlot: HTMLElement = null;\r\n\r\n let widgetSlot: HTMLElement;\r\n const slot = domel('div')\r\n .addClass(`kfrm-form`)\r\n .addChild('div', b => b\r\n .addClass(`kfrm-field`)\r\n .addChild('label', b => b\r\n .addText(i18n.getText('LookupSelectedItem'))\r\n .toDOM()\r\n )\r\n .addChild('div', b => selectedSlot = b\r\n .addText('None')\r\n .toDOM()\r\n )\r\n )\r\n .addChild('div', b => widgetSlot = b.toDOM())\r\n .addChild('div', b => b\r\n .addClass('kfrm-control')\r\n .addChild('div', b => gridSlot = b.toDOM())\r\n )\r\n .toDOM();\r\n\r\n let selectedValue = inputEl.value;\r\n\r\n const getValue = (row: DataRow | any, colId: string) => {\r\n\r\n if (row instanceof DataRow) {\r\n return row.getValue(colId);\r\n }\r\n\r\n const property = colId.substring(colId.lastIndexOf('.') + 1);\r\n return row[property]\r\n }\r\n\r\n const updateSelectedValue = (row: DataRow | any) => {\r\n selectedSlot.innerHTML = lookupTable.columns\r\n .getItems()\r\n .map(col => {\r\n return `<b>${col.label}:</b> ${getValue(row, col.id)}`\r\n })\r\n .join(', ');\r\n }\r\n\r\n if (selectedValue) {\r\n const attr = lookupEntity.getFirstPrimaryAttr();\r\n const key = attr.id.substring(attr.id.lastIndexOf('.') + 1);\r\n this.context.fetchRecord({[key]: selectedValue}, lookupEntity.id)\r\n .then(data => {\r\n if (data.entity) {\r\n updateSelectedValue(data.entity);\r\n }\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n });\r\n }\r\n\r\n const lookupGrid = new EasyGrid({\r\n slot: gridSlot,\r\n dataTable: lookupTable,\r\n fixHeightOnFirstRender: true,\r\n paging: {\r\n pageSize: 10\r\n },\r\n onActiveRowChanged: (ev) => {\r\n lookupGrid.getData().getRow(ev.rowIndex)\r\n .then((row) => {\r\n selectedValue = row.getValue(attr.lookupDataAttr);\r\n updateSelectedValue(row);\r\n });\r\n }\r\n });\r\n\r\n ds.open({\r\n title: i18n.getText('LookupDlgCaption')\r\n .replace('{entity}', lookupEntity.caption),\r\n body: slot,\r\n arrangeParents: true,\r\n beforeOpen: () => {\r\n const dataFilter = this.context.createFilter(lookupEntity.id, lookupGrid.getData(), true);\r\n new TextFilterWidget(widgetSlot, lookupGrid, dataFilter,\r\n { instantMode: true, focus: true });\r\n },\r\n onSubmit: () => {\r\n inputEl.value = selectedValue;\r\n return true;\r\n },\r\n onDestroy: () => {\r\n lookupGrid.destroy();\r\n // return focus on button\r\n b.toDOM().focus();\r\n }\r\n });\r\n });\r\n })\r\n );\r\n });\r\n }\r\n\r\n private setupDateTimeField(parent: HTMLElement, attr: MetaEntityAttr, value: any, readOnly: boolean, hidden: boolean) {\r\n const horizClass = isIE\r\n ? 'kfrm-fields-ie is-horizontal'\r\n : 'kfrm-fields is-horizontal';\r\n\r\n const editFormat = crudUtils.getEditDateTimeFormat(attr.dataType);\r\n\r\n let inputEl: HTMLInputElement;\r\n let btnEl: HTMLButtonElement;\r\n\r\n const mask = editFormat\r\n .replace('yyyy', '9999')\r\n .replace('MM', '99')\r\n .replace('dd', '99')\r\n .replace('HH', '99')\r\n .replace('mm', '99')\r\n .replace('ss', '99')\r\n\r\n domel(parent)\r\n .addChild('div', b => {\r\n b\r\n .addClass(horizClass)\r\n .addChild('input', b => {\r\n inputEl = b.toDOM();\r\n\r\n b.name(attr.id)\r\n b.type(hidden ? 'hidden' : this.resolveInputType(attr.dataType));\r\n\r\n if (readOnly) {\r\n b.attr('readonly', '');\r\n }\r\n else {\r\n b.mask(mask)\r\n b.on('keypress', (ev) => this.applySumbit(ev as KeyboardEvent))\r\n .on('input', ev => {\r\n b.removeClass('is-invalid');\r\n try {\r\n const newDate = dataUtils.strToDateTime(inputEl.value, editFormat);\r\n }\r\n catch (e) {\r\n b.addClass('is-invalid');\r\n }\r\n finally {\r\n\r\n }\r\n })\r\n .on('blur', ev => {\r\n if (inputEl.value === mask.replace(/[9]/g, '_')) {\r\n inputEl.value = '';\r\n }\r\n });\r\n }\r\n\r\n b.value((dataUtils.IsDefinedAndNotNull(value)\r\n ? dataUtils.dateTimeToStr(value, editFormat)\r\n : ''))\r\n });\r\n\r\n if (!readOnly)\r\n b.addChild('button', b => btnEl = b\r\n .addClass('kfrm-button')\r\n .attr('title', i18n.getText(attr.dataType !== DataType.Time\r\n ? 'CalendarBtnTitle'\r\n : 'TimerBtnTitle'))\r\n .addChild('i', b => b.addClass(attr.dataType !== DataType.Time\r\n ? 'ed-calendar-icon'\r\n : 'ed-timer-icon'))\r\n .on('click', (ev) => {\r\n\r\n let value: Date;\r\n try {\r\n value = inputEl.value.length\r\n ? attr.dataType !== DataType.Time\r\n ? dataUtils.strToDateTime(inputEl.value, editFormat)\r\n : dataUtils.strToTime(inputEl.value)\r\n : new Date(new Date().setSeconds(0));\r\n }\r\n catch {\r\n value = new Date(new Date().setSeconds(0));\r\n }\r\n\r\n const pickerOptions: DateTimePickerOptions = {\r\n zIndex: 9999999999,\r\n showCalendar: attr.dataType !== DataType.Time,\r\n showTimePicker: attr.dataType !== DataType.Date,\r\n onApply: (dateTime: Date) => {\r\n dateTime.setSeconds(0);\r\n dateTime.setMilliseconds(0);\r\n\r\n inputEl.value = dataUtils.dateTimeToStr(dateTime, editFormat);\r\n\r\n }\r\n };\r\n\r\n const dtp = new DefaultDateTimePicker(pickerOptions);\r\n dtp.setDateTime(value);\r\n dtp.show(ev.target as HTMLElement);\r\n\r\n }).toDOM()\r\n );\r\n });\r\n }\r\n\r\n private setupListField(parent: HTMLElement, attr: MetaEntityAttr, value: any, values: any, readOnly: boolean) {\r\n domel(parent)\r\n .addChild('div', b => b\r\n .addClass('kfrm-select full-width')\r\n .addChild('select', b => {\r\n if (readOnly)\r\n b.attr('readonly', '');\r\n b.attr('name', attr.id)\r\n b.on('keypress', (ev) => this.applySumbit(ev as KeyboardEvent))\r\n if (values) {\r\n for (let i = 0; i < values.length; i++) {\r\n const val = values[i];\r\n b.addOption({\r\n value: val.id,\r\n title: val.text,\r\n selected: i === 0\r\n });\r\n }\r\n }\r\n b.value(value);\r\n })\r\n );\r\n }\r\n\r\n private setupFileField(parent: HTMLElement, attr: MetaEntityAttr, readOnly: boolean, accept: string) {\r\n domel(parent)\r\n .addChild('input', b => {\r\n if (readOnly)\r\n b.attr('readonly', '');\r\n\r\n b.name(attr.id)\r\n .type(this.resolveInputType(attr.dataType));\r\n\r\n b.attr('accept', accept);\r\n });\r\n }\r\n\r\n private setupTextField(parent: HTMLElement, attr: MetaEntityAttr, value: any, readOnly: boolean, hidden : boolean) {\r\n domel(parent)\r\n .addChild('input', b => {\r\n if (readOnly) {\r\n b.attr('readonly', '');\r\n }\r\n b.type(hidden ? 'hidden' : this.resolveInputType(attr.dataType));\r\n\r\n b.name(attr.id)\r\n .type(this.resolveInputType(attr.dataType));\r\n\r\n if (attr.dataType == DataType.Bool) {\r\n if (value)\r\n b.attr('checked', '');\r\n } \r\n else {\r\n b.on('keypress', (ev) => this.applySumbit(ev as KeyboardEvent))\r\n .value(dataUtils.IsDefinedAndNotNull(value)\r\n ? value.toString()\r\n : '');\r\n }\r\n });\r\n }\r\n\r\n private setupTextArea(parent: HTMLElement, attr: MetaEntityAttr, value: any, readOnly: boolean) {\r\n // feature: modify size in value editor ??\r\n domel(parent)\r\n .addChild('textarea', b => {\r\n if (readOnly)\r\n b.attr('readonly', '');\r\n \r\n b.attr('name', attr.id)\r\n b.setStyle('height', `120px`)\r\n b.value(dataUtils.IsDefinedAndNotNull(value)\r\n ? value.toString()\r\n : '');\r\n });\r\n }\r\n\r\n private addFormField(parent: HTMLElement, attr: MetaEntityAttr) {\r\n const value = (this.params.values && attr.kind !== EntityAttrKind.Lookup)\r\n ? this.params.values.getValue(attr.id)\r\n : !this.params.isEditForm\r\n ? attr.defaultValue\r\n : undefined;\r\n\r\n const editor = this.resolveEditor(attr);\r\n\r\n const readOnly = this.params.isEditForm && (attr.isPrimaryKey || !attr.isEditable);\r\n const required = !attr.isNullable;\r\n \r\n if (isIE) {\r\n parent = domel('div', parent)\r\n .addClass('kfrm-field-ie')\r\n .toDOM();\r\n }\r\n\r\n domel(parent)\r\n .addChild('label', b => {\r\n b.attr('for', attr.id);\r\n b.addHtml(`${attr.caption} ${required ? '<sup style=\"color: red\">*</sup>' : ''}: `);\r\n\r\n if (attr.description) {\r\n b.addChild('div', b => b\r\n .attr('title', attr.description)\r\n .addClass('question-mark')\r\n .setStyle('vertical-align', 'middle')\r\n .setStyle('display', 'inline-block')\r\n );\r\n }\r\n });\r\n \r\n const hidden = attr.isPrimaryKey;\r\n \r\n if (attr.kind === EntityAttrKind.Lookup) {\r\n this.setupLookupField(parent, attr, readOnly, value);\r\n return;\r\n }\r\n\r\n switch (editor.tag) {\r\n case EditorTag.DateTime:\r\n this.setupDateTimeField(parent, attr, value, readOnly, hidden);\r\n break;\r\n\r\n case EditorTag.List:\r\n this.setupListField(parent, attr, value, editor.values, readOnly);\r\n break;\r\n\r\n case EditorTag.File:\r\n this.setupFileField(parent, attr, readOnly, editor.accept);\r\n break;\r\n\r\n case EditorTag.Edit:\r\n default:\r\n if (editor.multiline) {\r\n this.setupTextArea(parent, attr, value, readOnly);\r\n }\r\n else {\r\n this.setupTextField(parent, attr, value, readOnly, hidden);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private resolveInputType(dataType: DataType): string {\r\n if (dataType === DataType.Bool)\r\n return 'checkbox';\r\n\r\n if (dataType === DataType.Blob)\r\n return 'file';\r\n\r\n return 'text';\r\n }\r\n\r\n private resolveEditor(attr: MetaEntityAttr): ValueEditor {\r\n let editor = attr.defaultEditor || new ValueEditor();\r\n if (editor.tag == EditorTag.Unknown) {\r\n if (dataUtils.getDateDataTypes().indexOf(attr.dataType) >= 0) {\r\n editor.tag = EditorTag.DateTime;\r\n }\r\n else {\r\n editor.tag = EditorTag.Edit;\r\n }\r\n }\r\n\r\n return editor;\r\n }\r\n\r\n private applySumbit(ev: KeyboardEvent): boolean {\r\n if (ev.keyCode === 13) {\r\n this.sumbitCallback && this.sumbitCallback();\r\n return false;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private sumbitCallback: () => void;\r\n\r\n public onSubmit(sumbitCallback: () => void) {\r\n this.sumbitCallback = sumbitCallback;\r\n return this;\r\n }\r\n\r\n public build(): EntityEditForm {\r\n let fb: DomElementBuilder<HTMLDivElement>;\r\n const formHtml =\r\n domel('div')\r\n .addClass('kfrm-form')\r\n .addChild('div', b => b\r\n .addClass(`errors-block`)\r\n .toDOM()\r\n )\r\n .addChild('div', b => {\r\n b.addClass(`${isIE\r\n ? 'kfrm-fields-ie col-ie-1-4 label-align-right'\r\n : 'kfrm-fields col-a-1 label-align-right'}`);\r\n\r\n fb = b;\r\n })\r\n .toDOM();\r\n\r\n this.form['setHtmlInt'](formHtml);\r\n\r\n for (const attr of this.context.getActiveEntity().attributes) { \r\n if (!this.params.isEditForm && !attr.showOnCreate)\r\n continue;\r\n\r\n if (!attr.isPrimaryKey && this.params.isEditForm && !attr.showOnEdit) {\r\n continue;\r\n }\r\n\r\n this.addFormField(fb.toDOM(), attr)\r\n }\r\n\r\n return this.form;\r\n }\r\n}","export class ProgressBar {\r\n\r\n constructor(private slot: HTMLElement) {\r\n this.hide();\r\n this.slot.classList.add('ed-progress-bar');\r\n }\r\n\r\n public show() {\r\n this.slot.style.removeProperty('display');\r\n }\r\n\r\n public hide() {\r\n this.slot.style.display = 'none';\r\n }\r\n}","import { \r\n DataChunkDescriptor, \r\n DataLoader, EasyDataTable \r\n} from '@easydata/core';\r\n\r\nimport { DataContext } from './data_context';\r\n\r\nexport class EasyDataServerLoader implements DataLoader {\r\n constructor(protected context: DataContext) {\r\n\r\n }\r\n\r\n loadChunk(params: DataChunkDescriptor | any) {\r\n const url = this.context.resolveEndpoint('FetchDataset', \r\n { sourceId: params.sourceId || this.context.getActiveEntity().id });\r\n delete params.sourceId;\r\n\r\n this.context.startProcess();\r\n const http = this.context.getHttpClient();\r\n return http.post(url, params)\r\n .then((result) => {\r\n\r\n const dataTable = new EasyDataTable({\r\n chunkSize: 1000\r\n });\r\n\r\n const resultSet = result.resultSet;\r\n for(const col of resultSet.cols) {\r\n dataTable.columns.add(col);\r\n }\r\n\r\n for(const row of resultSet.rows) {\r\n dataTable.addRow(row);\r\n }\r\n \r\n let totalRecords = 0;\r\n if (result.meta && result.meta.totalRecords) {\r\n totalRecords = result.meta.totalRecords; \r\n }\r\n\r\n return {\r\n table: dataTable,\r\n total: totalRecords,\r\n hasNext: !params.needTotal \r\n || params.offset + params.limit < totalRecords\r\n }\r\n \r\n })\r\n .finally(() => {\r\n this.context.endProcess();\r\n });\r\n }\r\n\r\n}","import { \r\n HttpClient, MetaData,\r\n MetaEntity, combinePath, \r\n EasyDataTable, EasyDataTableOptions,\r\n DataLoader\r\n} from '@easydata/core';\r\nimport { DataFilter } from '../filter/data_filter';\r\nimport { TextDataFilter } from '../filter/text_data_filter';\r\n\r\nimport { EasyDataServerLoader } from './easy_data_server_loader';\r\n\r\ntype EasyDataEndpointKey = \r\n 'GetMetaData' |\r\n 'FetchDataset' | \r\n 'FetchRecord' |\r\n 'CreateRecord' |\r\n 'UpdateRecord' |\r\n 'DeleteRecord' ;\r\n\r\n\r\ninterface CompoundRecordKey { \r\n [key: string]: string \r\n}\r\n \r\nexport interface EasyDataContextOptions {\r\n metaDataId?: string;\r\n endpoint?: string;\r\n dataTable?: EasyDataTableOptions,\r\n onProcessStart?: () => void;\r\n onProcessEnd?: () => void;\r\n}\r\n\r\nexport class DataContext {\r\n private endpoints: Map<string, string> = new Map<string, string>();\r\n\r\n private http: HttpClient;\r\n\r\n private model: MetaData;\r\n\r\n private data: EasyDataTable;\r\n\r\n private dataLoader: EasyDataServerLoader;\r\n\r\n private activeEntity: MetaEntity;\r\n\r\n private options: EasyDataContextOptions;\r\n\r\n constructor(options?: EasyDataContextOptions) {\r\n this.options = options || {};\r\n\r\n this.http = new HttpClient();\r\n this.model = new MetaData();\r\n this.model.id = options.metaDataId || '__default';\r\n\r\n this.dataLoader = new EasyDataServerLoader(this);\r\n const dataTableOptions = {\r\n loader: this.dataLoader,\r\n ...options.dataTable\r\n };\r\n\r\n this.data = new EasyDataTable(dataTableOptions);\r\n\r\n this.setDefaultEndpoints(this.options.endpoint || '/api/easydata');\r\n }\r\n\r\n public getActiveEntity() {\r\n return this.activeEntity;\r\n }\r\n\r\n public setActiveSource(entityId: string) {\r\n this.activeEntity = this.model.getRootEntity().subEntities\r\n .filter(e => e.id == entityId)[0];\r\n }\r\n\r\n public getMetaData(): MetaData {\r\n return this.model;\r\n }\r\n\r\n public getData() {\r\n return this.data;\r\n }\r\n\r\n public getDataLoader(): DataLoader {\r\n return this.dataLoader;\r\n }\r\n\r\n public createFilter(): DataFilter\r\n public createFilter(sourceId: string, data: EasyDataTable, isLookup?: boolean): DataFilter\r\n public createFilter(sourceId?: string, data?: EasyDataTable, isLookup?: boolean): DataFilter {\r\n return new TextDataFilter(\r\n this.dataLoader, \r\n data || this.getData(), \r\n sourceId || this.activeEntity.id, \r\n isLookup);\r\n }\r\n\r\n public loadMetaData(): Promise<MetaData> {\r\n const url = this.resolveEndpoint('GetMetaData');\r\n this.startProcess();\r\n return this.http.get(url) \r\n .then(result => {\r\n if (result.model) {\r\n this.model.loadFromData(result.model);\r\n }\r\n\r\n return this.model;\r\n })\r\n .catch(error => { \r\n console.error(`Error: ${error.message}. Source: ${error.sourceError}`);\r\n return null;\r\n })\r\n .finally(() => {\r\n this.endProcess();\r\n });\r\n }\r\n\r\n public getHttpClient() {\r\n return this.http;\r\n }\r\n\r\n public fetchDataset() {\r\n this.data.clear();\r\n return this.dataLoader.loadChunk({offset: 0, limit: this.data.chunkSize, needTotal: true})\r\n .then(result => { \r\n for(const col of result.table.columns.getItems()) {\r\n this.data.columns.add(col);\r\n }\r\n\r\n this.data.setTotal(result.total);\r\n\r\n for(const row of result.table.getCachedRows()) {\r\n this.data.addRow(row);\r\n }\r\n\r\n return this.data;\r\n })\r\n }\r\n\r\n public fetchRecord(keys : CompoundRecordKey, sourceId?: string) {\r\n const url = this.resolveEndpoint('FetchRecord', { sourceId: sourceId || this.activeEntity.id });\r\n \r\n this.startProcess();\r\n return this.http.get(url, { queryParams: keys})\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public createRecord(obj: any, sourceId?: string) {\r\n const url = this.resolveEndpoint('CreateRecord', \r\n { sourceId: sourceId || this.activeEntity.id });\r\n\r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json' })\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public updateRecord(obj: any, sourceId?: string) {\r\n const url = this.resolveEndpoint('UpdateRecord', { sourceId: sourceId || this.activeEntity.id });\r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json' })\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public deleteRecord(obj: any, sourceId?: string) {\r\n const url = this.resolveEndpoint('DeleteRecord', { sourceId: sourceId || this.activeEntity.id });\r\n\r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json'})\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public setEndpoint(key: EasyDataEndpointKey, value: string) : void\r\n public setEndpoint(key: EasyDataEndpointKey | string, value: string) : void {\r\n this.endpoints.set(key, value);\r\n }\r\n\r\n public setEnpointIfNotExist(key: EasyDataEndpointKey, value: string): void\r\n public setEnpointIfNotExist(key: EasyDataEndpointKey | string, value: string): void {\r\n if (!this.endpoints.has(key))\r\n this.endpoints.set(key, value);\r\n }\r\n\r\n private endpointVarsRegex = /\\{.*?\\}/g;\r\n\r\n public resolveEndpoint(endpointKey: EasyDataEndpointKey, options?: any): string \r\n public resolveEndpoint(endpointKey: EasyDataEndpointKey | string, options?: any) : string {\r\n options = options || {};\r\n\r\n let result = this.endpoints.get(endpointKey);\r\n if (!result) {\r\n throw endpointKey + ' endpoint is not defined'; \r\n }\r\n\r\n let matches = result.match(this.endpointVarsRegex);\r\n if (matches) {\r\n for (let match of matches) {\r\n let opt = match.substring(1, match.length - 1);\r\n let optVal = options[opt];\r\n if (!optVal) {\r\n if (opt == 'modelId') {\r\n optVal = this.model.getId();\r\n }\r\n else if (opt == 'sourceId') {\r\n optVal = this.activeEntity.id;\r\n }\r\n else {\r\n throw `Parameter [${opt}] is not defined`;\r\n }\r\n }\r\n \r\n result = result.replace(match, optVal);\r\n }\r\n }\r\n \r\n return result;\r\n }\r\n\r\n public startProcess() {\r\n if (this.options.onProcessStart)\r\n this.options.onProcessStart();\r\n }\r\n\r\n public endProcess() {\r\n if (this.options.onProcessEnd)\r\n this.options.onProcessEnd();\r\n }\r\n\r\n private setDefaultEndpoints(endpointBase : string) {\r\n this.setEnpointIfNotExist('GetMetaData', combinePath(endpointBase, 'models/{modelId}'));\r\n this.setEnpointIfNotExist('FetchDataset', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/fetch'));\r\n this.setEnpointIfNotExist('FetchRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/fetch'));\r\n this.setEnpointIfNotExist('CreateRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/create'));\r\n this.setEnpointIfNotExist('UpdateRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/update'));\r\n this.setEnpointIfNotExist('DeleteRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/delete'));\r\n }\r\n}","import { MetaEntityAttr, i18n, utils as dataUtils } from '@easydata/core';\r\nimport { ValidationResult, Validator } from './validator';\r\n\r\nexport class TypeValidator extends Validator {\r\n\r\n constructor() {\r\n super();\r\n this.name = 'Type';\r\n }\r\n\r\n public validate(attr: MetaEntityAttr, value: any): ValidationResult {\r\n \r\n if (!dataUtils.IsDefinedAndNotNull(value) || value == '')\r\n return { successed: true };\r\n\r\n if (dataUtils.isNumericType(attr.dataType)) {\r\n if (!dataUtils.isNumeric(value))\r\n return { \r\n successed: false, \r\n messages: [ i18n.getText('NumberError') ]\r\n };\r\n\r\n\r\n if (dataUtils.isIntType(attr.dataType) \r\n && !Number.isInteger(Number.parseFloat(value))) {\r\n return {\r\n successed: false,\r\n messages: [ i18n.getText('IntNumberError') ]\r\n }\r\n }\r\n }\r\n\r\n return { successed: true };\r\n }\r\n}","import { MetaEntityAttr, i18n, utils as dataUtils } from '@easydata/core';\r\nimport { ValidationResult, Validator } from \"./validator\";\r\n\r\nexport class RequiredValidator extends Validator {\r\n\r\n constructor() {\r\n super();\r\n this.name = 'Required';\r\n }\r\n\r\n public validate(attr: MetaEntityAttr, value: any): ValidationResult {\r\n \r\n if (!attr.isNullable && (\r\n !dataUtils.IsDefinedAndNotNull(value)\r\n || value === ''))\r\n\r\n return {\r\n successed: false,\r\n messages: [ i18n.getText('RequiredError') ]\r\n }\r\n\r\n return { successed: true };\r\n }\r\n}","import { DataRow, i18n, utils as dataUtils } from '@easydata/core';\r\n\r\nimport { \r\n DefaultDialogService, \r\n DialogService, domel, EasyGrid, \r\n GridCellRenderer, GridColumn, RowClickEvent \r\n} from '@easydata/ui';\r\n\r\nimport { EntityEditFormBuilder } from '../form/entity_form_builder';\r\nimport { TextFilterWidget } from '../widgets/text_filter_widget';\r\n\r\nimport { DataContext } from '../main/data_context';\r\nimport { RequiredValidator } from '../validators/required_validator';\r\nimport { TypeValidator } from '../validators/type_validator';\r\nimport { Validator } from '../validators/validator';\r\nimport { EasyDataViewOptions } from './options';\r\nimport { setLocation } from '../utils/utils';\r\n\r\nexport class EntityDataView {\r\n private options: EasyDataViewOptions = {\r\n showFilterBox: true,\r\n showBackToEntities: true\r\n }\r\n\r\n private dlg: DialogService;\r\n\r\n private grid: EasyGrid;\r\n\r\n private filterWidget : TextFilterWidget;\r\n\r\n private defaultValidators: Validator[] = [ new RequiredValidator(), new TypeValidator()];\r\n\r\n constructor (\r\n private slot: HTMLElement, \r\n private context: DataContext, \r\n private basePath: string,\r\n options: EasyDataViewOptions) \r\n {\r\n this.options = dataUtils.assignDeep(this.options, options || {});\r\n\r\n this.dlg = new DefaultDialogService();\r\n\r\n const ent = this.context.getActiveEntity();\r\n if (!ent) {\r\n throw \"Can't find active entity for \" + window.location.pathname;\r\n }\r\n \r\n this.slot.innerHTML += `<h1>${ent.captionPlural || ent.caption}</h1>`;\r\n if (this.options.showBackToEntities) {\r\n domel(this.slot)\r\n .addChild('a', b => b\r\n .attr('href', 'javascript:void(0)')\r\n .text(`← ${i18n.getText('BackToEntities')}`)\r\n .on('click', (e) => {\r\n e.preventDefault();\r\n setLocation(this.basePath);\r\n })\r\n );\r\n }\r\n\r\n this.renderGrid();\r\n }\r\n\r\n private syncGridColumnHandler(column: GridColumn) {\r\n if (column.dataColumn) {\r\n const attr = this.context.getMetaData().getAttributeById(column.dataColumn.id);\r\n if (attr) {\r\n column.isVisible = attr.showOnView;\r\n }\r\n }\r\n }\r\n\r\n private renderGrid() {\r\n this.context.fetchDataset()\r\n .then(result => {\r\n const gridSlot = document.createElement('div');\r\n this.slot.appendChild(gridSlot);\r\n gridSlot.id = 'Grid';\r\n this.grid = new EasyGrid(dataUtils.assignDeep({\r\n slot: gridSlot,\r\n dataTable: result,\r\n paging: {\r\n pageSize: 15,\r\n allowPageSizeChange: true,\r\n pageSizeItems: [15, 30, 50, 100, 200]\r\n },\r\n showPlusButton: this.context.getActiveEntity().isEditable,\r\n plusButtonTitle: i18n.getText('AddRecordBtnTitle'),\r\n showActiveRow: false,\r\n onPlusButtonClick: this.addClickHandler.bind(this),\r\n onGetCellRenderer: this.manageCellRenderer.bind(this),\r\n onRowDbClick: this.rowDbClickHandler.bind(this),\r\n onSyncGridColumn: this.syncGridColumnHandler.bind(this)\r\n }, this.options.grid || {}));\r\n\r\n if (this.options.showFilterBox) {\r\n let filterWidgetSlot: HTMLElement;\r\n const filterBarDiv = domel('div')\r\n .addClass(`kfrm-form`)\r\n .setStyle('margin', '10px 0px')\r\n .addChild('div', b => \r\n filterWidgetSlot = b.toDOM()\r\n ).toDOM();\r\n \r\n this.slot.insertBefore(filterBarDiv, gridSlot);\r\n \r\n const dataFilter = this.context.createFilter();\r\n this.filterWidget = new TextFilterWidget(filterWidgetSlot, this.grid, dataFilter); \r\n }\r\n });\r\n }\r\n\r\n private manageCellRenderer(column: GridColumn, defaultRenderer: GridCellRenderer) {\r\n if (column.isRowNum) {\r\n column.width = 110;\r\n return (value: any, column: GridColumn, cell: HTMLElement, rowEl: HTMLElement) => {\r\n const b = domel('div', cell)\r\n .addClass(`keg-cell-value`);\r\n \r\n if (this.context.getActiveEntity().isEditable) {\r\n b.addChild('a', b => b\r\n .attr('href', 'javascript:void(0)')\r\n .text(i18n.getText('EditBtn'))\r\n .on('click', (ev) => this.editClickHandler(ev as MouseEvent, \r\n parseInt(rowEl.getAttribute('data-row-idx'))))\r\n )\r\n .addChild('span', b => b.text(' | '))\r\n .addChild('a', b => b\r\n .attr('href', 'javascript:void(0)')\r\n .text(i18n.getText('DeleteBtn'))\r\n .on('click', (ev) => \r\n this.deleteClickHandler(ev as MouseEvent, \r\n parseInt(rowEl.getAttribute('data-row-idx'))))\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private addClickHandler() {\r\n const activeEntity = this.context.getActiveEntity();\r\n const form = new EntityEditFormBuilder(this.context)\r\n .onSubmit(() => dlg.submit())\r\n .build();\r\n\r\n form.useValidators(this.defaultValidators);\r\n\r\n const dlg = this.dlg.open({\r\n title: i18n.getText('AddDlgCaption')\r\n .replace('{entity}', activeEntity.caption),\r\n body: form.getHtml(),\r\n onSubmit: () => {\r\n if (!form.validate())\r\n return false;\r\n \r\n form.getData()\r\n .then(obj => this.context.createRecord(obj))\r\n .then(() => {\r\n return this.refreshData();\r\n })\r\n .catch((error) => {\r\n this.processError(error);\r\n });\r\n }\r\n });\r\n }\r\n\r\n private editClickHandler(ev: MouseEvent, rowIndex: number) {\r\n this.grid.getData().getRow(rowIndex)\r\n .then(row => {\r\n if (row) {\r\n this.showEditForm(row);\r\n }\r\n })\r\n }\r\n\r\n private showEditForm(row: DataRow) {\r\n const activeEntity = this.context.getActiveEntity();\r\n\r\n const form = new EntityEditFormBuilder(this.context, { isEditForm: true, values: row })\r\n .onSubmit(() => dlg.submit())\r\n .build();\r\n \r\n form.useValidators(this.defaultValidators);\r\n\r\n const dlg = this.dlg.open({\r\n title: i18n.getText('EditDlgCaption')\r\n .replace('{entity}', activeEntity.caption),\r\n body: form.getHtml(),\r\n onSubmit: () => {\r\n if (!form.validate())\r\n return false;\r\n\r\n form.getData()\r\n .then(obj => this.context.updateRecord(obj))\r\n .then(() => { \r\n return this.refreshData();\r\n }) \r\n .catch((error) => {\r\n this.processError(error);\r\n });\r\n }\r\n })\r\n }\r\n\r\n private rowDbClickHandler(ev: RowClickEvent) {\r\n if (this.context.getActiveEntity().isEditable) {\r\n this.showEditForm(ev.row);\r\n }\r\n }\r\n\r\n private deleteClickHandler(ev: MouseEvent, rowIndex: number) {\r\n this.grid.getData().getRow(rowIndex)\r\n .then(row => {\r\n if (row) {\r\n const activeEntity = this.context.getActiveEntity();\r\n const keyAttrs = activeEntity.getPrimaryAttrs();\r\n const keyVals = keyAttrs.map(attr => row.getValue(attr.id));\r\n const keys = keyAttrs.reduce((val, attr, index) => { \r\n const property = attr.id.substring(attr.id.lastIndexOf('.') + 1);\r\n val[property] = keyVals[index];\r\n return val; \r\n }, {});\r\n this.dlg.openConfirm(\r\n i18n.getText('DeleteDlgCaption')\r\n .replace('{entity}', activeEntity.caption), \r\n i18n.getText('DeleteDlgMessage')\r\n .replace('{recordId}', Object.keys(keys)\r\n .map(key => `${key}:${keys[key]}`).join(';')), \r\n )\r\n .then((result) => {\r\n if (result) {\r\n this.context.deleteRecord(keys)\r\n .then(() => {\r\n return this.refreshData();\r\n })\r\n .catch((error) => {\r\n this.processError(error);\r\n });\r\n }\r\n })\r\n }\r\n });\r\n }\r\n\r\n private processError(error) {\r\n this.dlg.open({\r\n title: 'Ooops, something went wrong',\r\n body: error.message,\r\n closable: true,\r\n cancelable: false\r\n });\r\n }\r\n\r\n private refreshData(): Promise<void> {\r\n return this.context.fetchDataset()\r\n .then(() => {\r\n let processed = false;\r\n if (this.filterWidget) { \r\n processed = this.filterWidget.applyFilter(false);\r\n }\r\n\r\n if (!processed) {\r\n this.grid.refresh();\r\n }\r\n });\r\n }\r\n}","import { i18n, MetaData } from '@easydata/core';\r\nimport { domel } from '@easydata/ui';\r\nimport { setLocation } from '../utils/utils';\r\nimport { DataContext } from '../main/data_context';\r\n\r\nexport class RootDataView {\r\n private metaData: MetaData;\r\n\r\n constructor (\r\n private slot: HTMLElement, \r\n private context: DataContext, \r\n private basePath: string) {\r\n\r\n this.metaData = this.context.getMetaData();\r\n this.slot.innerHTML += `<h1>${i18n.getText('RootViewTitle')}</h1>`;\r\n\r\n this.renderEntitySelector();\r\n }\r\n\r\n private renderEntitySelector() {\r\n const entities = this.metaData.getRootEntity().subEntities;\r\n if (this.slot) {\r\n domel(this.slot)\r\n .addChild('div', b => b\r\n .addClass('ed-root')\r\n .addChild('div', b => b\r\n .addClass('ed-menu-description')\r\n .addText(i18n.getText(!this.metaData.isEmpty() ? 'EntityMenuDesc' : 'ModelIsEmpty'))\r\n )\r\n .addChild('ul', b => {\r\n b.addClass('ed-entity-menu');\r\n entities.forEach(ent => {\r\n b.addChild('li', b => {\r\n b.addClass('ed-entity-item')\r\n .on('click', () => {\r\n setLocation(`${this.basePath}/${decodeURIComponent(ent.id)}`);\r\n })\r\n .addChild('div', b => {\r\n b.addClass('ed-entity-item-caption')\r\n .addText(ent.captionPlural || ent.caption);\r\n });\r\n\r\n if (ent.description) {\r\n b.addChild('div', b => {\r\n b.addClass('ed-entity-item-descr')\r\n .addText(`${ent.description}`);\r\n });\r\n }\r\n });\r\n });\r\n })\r\n );\r\n }\r\n }\r\n}","import { utils as dataUtils } from '@easydata/core';\r\n\r\nimport { ProgressBar } from '../widgets/progress_bar';\r\nimport { DataContext } from '../main/data_context';\r\nimport { EntityDataView } from './entity_data_view';\r\nimport { EasyDataViewDispatcherOptions } from './options';\r\nimport { RootDataView } from './root_data_view';\r\n\r\nexport class EasyDataViewDispatcher {\r\n private context: DataContext;\r\n private basePath: string;\r\n\r\n private container: HTMLElement;\r\n\r\n private options: EasyDataViewDispatcherOptions = {\r\n container: '#EasyDataContainer',\r\n basePath: 'easydata' \r\n };\r\n\r\n constructor(options?: EasyDataViewDispatcherOptions) {\r\n this.options = dataUtils.assign(this.options, options || {});\r\n\r\n if (this.options.rootEntity) {\r\n this.options.showBackToEntities = false;\r\n this.basePath = '/';\r\n }\r\n else {\r\n this.basePath = this.normalizeBasePath(this.options.basePath);\r\n }\r\n\r\n this.setContainer(this.options.container);\r\n\r\n const progressBarSlot = document.createElement('div');\r\n const bar = new ProgressBar(progressBarSlot); \r\n \r\n const parent = this.container.parentElement;\r\n parent.insertBefore(progressBarSlot, parent.firstElementChild);\r\n \r\n this.context = new DataContext({\r\n endpoint: this.options.endpoint,\r\n dataTable: this.options.dataTable,\r\n onProcessStart: () => bar.show(),\r\n onProcessEnd: () => bar.hide()\r\n });\r\n\r\n }\r\n \r\n private normalizeBasePath(basePath: string): string {\r\n basePath = this.trimSlashes(basePath);\r\n const fullPath = decodeURIComponent(window.location.pathname);\r\n const idx = fullPath.toLocaleLowerCase().indexOf(basePath);\r\n return idx >= 0 ? fullPath.substring(0, idx + basePath.length) : '/';\r\n }\r\n\r\n private trimSlashes(path: string): string {\r\n return path.replace(/^\\/|\\/$/g, '')\r\n }\r\n\r\n private setContainer(container: HTMLElement | string) {\r\n if (!container) {\r\n throw 'Container is undefined';\r\n }\r\n\r\n if (typeof container === 'string') {\r\n if (container.length){\r\n if (container[0] === '.') {\r\n const result = document.getElementsByClassName(container.substring(1));\r\n if (result.length) \r\n this.container = result[0] as HTMLElement;\r\n }\r\n else {\r\n if (container[0] === '#') {\r\n container = container.substring(1);\r\n }\r\n this.container = document.getElementById(container);\r\n }\r\n if (!this.container) {\r\n throw Error('Unrecognized `container` parameter: ' + container + '\\n' \r\n + 'It must be an element ID, a class name (starting with .) or an HTMLElement object itself.');\r\n }\r\n }\r\n }\r\n else {\r\n this.container = container;\r\n }\r\n }\r\n\r\n private getActiveSourceId(): string | null {\r\n if (this.options.rootEntity) \r\n return this.options.rootEntity;\r\n\r\n const path = decodeURIComponent(window.location.pathname);\r\n const idIndex = this.basePath.length + 1;\r\n return idIndex < path.length ? path.substring(idIndex) : null;\r\n }\r\n\r\n run(): Promise<void> { \r\n this.attach();\r\n\r\n return this.context.loadMetaData()\r\n .then(() => {\r\n this.setActiveView();\r\n })\r\n .catch(error => console.error(error))\r\n }\r\n\r\n private setActiveView() {\r\n this.clear();\r\n\r\n const sourceId = this.getActiveSourceId();\r\n if (sourceId) {\r\n this.context.setActiveSource(sourceId);\r\n window['EDView'] = new EntityDataView(this.container, this.context,\r\n this.basePath, this.options);\r\n }\r\n else {\r\n window['EDView'] = new RootDataView(this.container, this.context, this.basePath);\r\n }\r\n }\r\n\r\n private clear() {\r\n this.container.innerHTML = '';\r\n this.context.getData().clear();\r\n }\r\n\r\n private onSetLocation = () => {\r\n this.setActiveView();\r\n }\r\n\r\n private attach = () => {\r\n window.addEventListener('ed_set_location', this.onSetLocation);\r\n window.addEventListener('popstate', this.onSetLocation);\r\n }\r\n\r\n detach() {\r\n window.removeEventListener('ed_set_location', this.onSetLocation);\r\n window.removeEventListener('popstate', this.onSetLocation);\r\n }\r\n}","import { i18n } from '@easydata/core';\r\n\r\n\r\nfunction addEasyDataCRUDTexts() {\r\n i18n.updateDefaultTexts({\r\n RequiredError: 'Value is required.',\r\n NumberError: 'Value should be a number',\r\n IntNumberError: 'Value should be an integer number',\r\n DateTimeError: 'Invalid date or time value',\r\n LookupSelectedItem: 'Selected item: ',\r\n LookupDlgCaption: 'Select {entity}',\r\n None: 'None',\r\n NavigationBtnTitle: 'Navigation values',\r\n CalendarBtnTitle: 'Open calendar',\r\n TimerBtnTitle: 'Open timer',\r\n AddBtnTitle: 'Add',\r\n AddRecordBtnTitle: 'Add record',\r\n EditBtn: 'Edit',\r\n DeleteBtn: 'Delete',\r\n SelectLink: '[ select ]',\r\n AddDlgCaption: 'Create {entity}',\r\n EditDlgCaption: 'Edit {entity}',\r\n DeleteDlgCaption: 'Delete {entity}',\r\n DeleteDlgMessage: 'Are you sure you want to remove this record: {{recordId}}?',\r\n EntityMenuDesc: 'Click on an entity to view/edit its content',\r\n BackToEntities: 'Back to entities',\r\n SearchBtn: 'Search',\r\n SearchInputPlaceholder: 'Search...',\r\n RootViewTitle: 'Entities',\r\n ModelIsEmpty: 'No entity was found.'\r\n });\r\n}\r\n\r\naddEasyDataCRUDTexts();"],"sourceRoot":""}
1
+ {"version":3,"file":"easydata.crud.min.js","mappings":"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","sources":["webpack://easydataCRUD/webpack/universalModuleDefinition","webpack://easydataCRUD/../ui/dist/lib/utils/browser_utils.js","webpack://easydataCRUD/webpack/bootstrap","webpack://easydataCRUD/webpack/runtime/define property getters","webpack://easydataCRUD/webpack/runtime/hasOwnProperty shorthand","webpack://easydataCRUD/webpack/runtime/make namespace object","webpack://easydataCRUD/../core/dist/lib/types/data_type.js","webpack://easydataCRUD/../core/dist/lib/types/entity_attr_kind.js","webpack://easydataCRUD/../core/dist/lib/types/editor_tag.js","webpack://easydataCRUD/../core/dist/lib/http/http_method.js","webpack://easydataCRUD/../core/dist/lib/http/http_request.js","webpack://easydataCRUD/../core/dist/lib/i18n/i18n.js","webpack://easydataCRUD/../core/dist/lib/utils/utils.js","webpack://easydataCRUD/../core/dist/lib/http/http_action_result.js","webpack://easydataCRUD/../core/dist/lib/http/http_client.js","webpack://easydataCRUD/../core/dist/lib/data/data_column.js","webpack://easydataCRUD/../core/dist/lib/meta/meta_entity.js","webpack://easydataCRUD/../core/dist/lib/meta/value_editor.js","webpack://easydataCRUD/../core/dist/lib/meta/meta_data.js","webpack://easydataCRUD/../core/dist/lib/data/aggr_settings.js","webpack://easydataCRUD/../core/dist/lib/utils/liquid.js","webpack://easydataCRUD/../core/dist/lib/data/data_row.js","webpack://easydataCRUD/../core/dist/lib/data/easy_data_table.js","webpack://easydataCRUD/../core/dist/lib/utils/easy_guid.js","webpack://easydataCRUD/../core/dist/lib/event/event_emitter.js","webpack://easydataCRUD/../core/dist/lib/utils/string_utils.js","webpack://easydataCRUD/../core/dist/lib/i18n/load_default_locale_settings.js","webpack://easydataCRUD/../core/dist/lib/public_api.js","webpack://easydataCRUD/./src/filter/text_data_filter.ts","webpack://easydataCRUD/../ui/dist/lib/utils/ui-utils.js","webpack://easydataCRUD/../ui/dist/lib/utils/dom_elem_builder.js","webpack://easydataCRUD/../ui/dist/lib/utils/mask.js","webpack://easydataCRUD/../ui/dist/lib/utils/drag_manager.js","webpack://easydataCRUD/../ui/dist/lib/grid/easy_grid_options.js","webpack://easydataCRUD/../ui/dist/lib/grid/easy_grid_cell_renderer.js","webpack://easydataCRUD/../ui/dist/lib/grid/easy_grid_columns.js","webpack://easydataCRUD/../ui/dist/lib/dialogs/dialog_service.js","webpack://easydataCRUD/../ui/dist/lib/grid/easy_grid.js","webpack://easydataCRUD/../ui/dist/lib/datetimepicker/calendar.js","webpack://easydataCRUD/../ui/dist/lib/datetimepicker/date_time_picker.js","webpack://easydataCRUD/../ui/dist/lib/datetimepicker/default_calendar.js","webpack://easydataCRUD/../ui/dist/lib/datetimepicker/time_picker.js","webpack://easydataCRUD/../ui/dist/lib/datetimepicker/default_time_picker.js","webpack://easydataCRUD/../ui/dist/lib/datetimepicker/default_date_time_picker.js","webpack://easydataCRUD/../ui/dist/lib/dialogs/default_dialog_service.js","webpack://easydataCRUD/../ui/dist/lib/i18n/text_resources.js","webpack://easydataCRUD/../ui/dist/lib/public_api.js","webpack://easydataCRUD/./src/utils/utils.ts","webpack://easydataCRUD/./src/validators/validator.ts","webpack://easydataCRUD/./src/validators/datetime_validator.ts","webpack://easydataCRUD/./src/form/entity_edit_form.ts","webpack://easydataCRUD/./src/widgets/text_filter_widget.ts","webpack://easydataCRUD/./src/form/entity_form_builder.ts","webpack://easydataCRUD/./src/widgets/progress_bar.ts","webpack://easydataCRUD/./src/main/easy_data_server_loader.ts","webpack://easydataCRUD/./src/main/data_context.ts","webpack://easydataCRUD/./src/validators/type_validator.ts","webpack://easydataCRUD/./src/validators/required_validator.ts","webpack://easydataCRUD/./src/views/entity_data_view.ts","webpack://easydataCRUD/./src/views/root_data_view.ts","webpack://easydataCRUD/./src/views/easy_data_view_dispatcher.ts","webpack://easydataCRUD/./src/i18n/text_resources.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"easydataCRUD\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"easydataCRUD\"] = factory();\n\telse\n\t\troot[\"easydataCRUD\"] = factory();\n})(self, () => {\nreturn ","export var browserUtils;\n(function (browserUtils) {\n var _isFirefox = null;\n var _isIE = null;\n function IsIE() {\n // return eval('/*@cc_on!@*/false || !!document.documentMode');\n if (_isIE === null) {\n var ua = navigator.userAgent;\n /* MSIE used to detect old browsers and Trident used to newer ones*/\n _isIE = ua.indexOf(\"MSIE \") > -1 || ua.indexOf(\"Trident/\") > -1;\n }\n return _isIE;\n }\n browserUtils.IsIE = IsIE;\n function IsEdge() {\n return !IsIE() && eval('!!window.StyleMedia');\n }\n browserUtils.IsEdge = IsEdge;\n function IsFirefox() {\n if (_isFirefox === null) {\n var ua = navigator.userAgent;\n _isFirefox = ua.toLowerCase().indexOf('firefox') > -1;\n }\n return _isFirefox;\n }\n browserUtils.IsFirefox = IsFirefox;\n var _detectedIsMobileMode = false;\n var _isMobileMode = undefined;\n var detectIsMobileMode = function () {\n var oldValue = isMobileMode();\n _detectedIsMobileMode = window.matchMedia('only screen and (max-width: 840px)').matches\n || window.matchMedia('only screen and (max-height: 420px)').matches;\n var newValue = isMobileMode();\n if (newValue !== oldValue && mobileModeChangeHandler) {\n mobileModeChangeHandler(newValue);\n }\n };\n detectIsMobileMode();\n window.addEventListener('resize', function () { return detectIsMobileMode(); });\n function isMobileMode() {\n if (_isMobileMode !== undefined) {\n return _isMobileMode;\n }\n else {\n return _detectedIsMobileMode;\n }\n }\n browserUtils.isMobileMode = isMobileMode;\n function setIsMobileMode(value) {\n var oldValue = isMobileMode();\n _isMobileMode = value;\n var newValue = isMobileMode();\n if (newValue !== oldValue && mobileModeChangeHandler) {\n mobileModeChangeHandler(newValue);\n }\n }\n browserUtils.setIsMobileMode = setIsMobileMode;\n var mobileModeChangeHandler;\n function onMobileModeChanged(callback) {\n mobileModeChangeHandler = callback;\n }\n browserUtils.onMobileModeChanged = onMobileModeChanged;\n function getMobileCssClass() {\n return isMobileMode() ? 'k-mobile' : null;\n }\n browserUtils.getMobileCssClass = getMobileCssClass;\n})(browserUtils || (browserUtils = {}));\n//# sourceMappingURL=browser_utils.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/** Represents the common types of the data. */\nexport var DataType;\n(function (DataType) {\n /** Unknown type value*/\n DataType[DataType[\"Unknown\"] = 0] = \"Unknown\";\n /** String value*/\n DataType[DataType[\"String\"] = 1] = \"String\";\n /** 8-bit integer value */\n DataType[DataType[\"Byte\"] = 2] = \"Byte\";\n /** 16-bit integer value */\n DataType[DataType[\"Word\"] = 3] = \"Word\";\n /** 32-bit integer value */\n DataType[DataType[\"Int32\"] = 4] = \"Int32\";\n /** 64-bit integer value */\n DataType[DataType[\"Int64\"] = 5] = \"Int64\";\n /** Boolean value */\n DataType[DataType[\"Bool\"] = 6] = \"Bool\";\n /** Floating-point numeric value */\n DataType[DataType[\"Float\"] = 7] = \"Float\";\n /** Money value */\n DataType[DataType[\"Currency\"] = 8] = \"Currency\";\n /** Binary-coded decimal value */\n DataType[DataType[\"BCD\"] = 9] = \"BCD\";\n /** Date value */\n DataType[DataType[\"Date\"] = 10] = \"Date\";\n /** Time value */\n DataType[DataType[\"Time\"] = 11] = \"Time\";\n /** Date and time value */\n DataType[DataType[\"DateTime\"] = 12] = \"DateTime\";\n /** Autoincrement 32-bit integer value */\n DataType[DataType[\"Autoinc\"] = 13] = \"Autoinc\";\n /** MEMO value (text with unlimited length) */\n DataType[DataType[\"Memo\"] = 14] = \"Memo\";\n /** BLOB value (any data with unlimited length) */\n DataType[DataType[\"Blob\"] = 15] = \"Blob\";\n /** Fixed character value */\n DataType[DataType[\"FixedChar\"] = 16] = \"FixedChar\";\n /** The unique identifier */\n DataType[DataType[\"Guid\"] = 17] = \"Guid\";\n /*-------- Spatial data types ----------*/\n /** Any geometry data */\n DataType[DataType[\"Geometry\"] = 18] = \"Geometry\";\n /** Any data that represents some geography objects</summary> */\n DataType[DataType[\"Geography\"] = 19] = \"Geography\";\n})(DataType || (DataType = {}));\n//# sourceMappingURL=data_type.js.map","export var EntityAttrKind;\n(function (EntityAttrKind) {\n EntityAttrKind[EntityAttrKind[\"Data\"] = 0] = \"Data\";\n EntityAttrKind[EntityAttrKind[\"Virtual\"] = 1] = \"Virtual\";\n EntityAttrKind[EntityAttrKind[\"Lookup\"] = 2] = \"Lookup\";\n})(EntityAttrKind || (EntityAttrKind = {}));\n//# sourceMappingURL=entity_attr_kind.js.map","export var EditorTag = {\n /** Unknown tag value */\n Unknown: \"Unknown\",\n /** Edit tag value */\n Edit: \"EDIT\",\n /** DateTime tag value */\n DateTime: \"DATETIME\",\n /** List tag value */\n List: \"LIST\",\n /** CustomList tag value */\n CustomList: \"CUSTOMLIST\",\n /** File tag value */\n File: \"FILE\"\n};\n//# sourceMappingURL=editor_tag.js.map","export var HttpMethod;\n(function (HttpMethod) {\n HttpMethod[\"Trace\"] = \"TRACE\";\n HttpMethod[\"Options\"] = \"OPTIONS\";\n HttpMethod[\"Get\"] = \"GET\";\n HttpMethod[\"Put\"] = \"PUT\";\n HttpMethod[\"Post\"] = \"POST\";\n HttpMethod[\"Delete\"] = \"DELETE\";\n})(HttpMethod || (HttpMethod = {}));\n//# sourceMappingURL=http_method.js.map","var HttpRequest = /** @class */ (function () {\n function HttpRequest(xhr, descriptor) {\n this.xhr = xhr;\n this.method = descriptor.method;\n this.url = descriptor.url;\n this.headers = descriptor.headers;\n this.queryParams = descriptor.queryParams;\n this.data = descriptor.data;\n }\n HttpRequest.prototype.setHeader = function (name, value) {\n this.headers[name] = value;\n };\n HttpRequest.prototype.setQueryParam = function (name, value) {\n this.queryParams[name] = value;\n };\n HttpRequest.prototype.getXMLHttpRequest = function () {\n return this.xhr;\n };\n HttpRequest.prototype.getResponseHeaders = function () {\n if (this.xhr.readyState == this.xhr.HEADERS_RECEIVED) {\n var headers = this.xhr.getAllResponseHeaders();\n var arr = headers.trim().split(/[\\r\\n]+/);\n // Create a map of header names to values\n var headerMap = {};\n for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) {\n var line = arr_1[_i];\n var parts = line.split(': ');\n var header = parts.shift();\n var value = parts.join(': ');\n headerMap[header] = value;\n }\n return headerMap;\n }\n return {};\n };\n HttpRequest.prototype.open = function () {\n var _this = this;\n if (this.xhr.readyState !== this.xhr.UNSENT)\n return;\n var url = this.url;\n if (this.queryParams && Object.keys(this.queryParams).length > 0) {\n url += encodeURI('?' + Object.keys(this.queryParams)\n .map(function (param) { return param + '=' + _this.queryParams[param]; })\n .join('&'));\n }\n this.xhr.open(this.method, url, true);\n this.xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n for (var header in this.headers) {\n this.xhr.setRequestHeader(header, this.headers[header]);\n }\n };\n HttpRequest.prototype.abort = function () {\n this.xhr.abort();\n };\n return HttpRequest;\n}());\nexport { HttpRequest };\n//# sourceMappingURL=http_request.js.map","import { DataType } from '../types/data_type';\nimport { utils } from '../utils/utils';\n/**\n * Contains internatialization functionality.\n */\nexport var i18n;\n(function (i18n) {\n var englishUSLocaleSettings = {\n shortDateFormat: 'MM/dd/yyyy',\n longDateFormat: 'dd MMM, yyyy',\n editDateFormat: 'MM/dd/yyyy',\n shortTimeFormat: 'HH:mm',\n editTimeFormat: 'HH:mm',\n longTimeFormat: 'HH:mm:ss',\n shortMonthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n longMonthNames: ['January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'],\n shortWeekDayNames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n longWeekDayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n decimalSeparator: '.',\n currency: 'USD'\n };\n var defaultLocale = {\n localeId: 'en-US',\n englishName: 'English',\n displayName: 'English',\n texts: {\n ButtonOK: 'OK',\n ButtonCancel: 'Cancel',\n Yes: 'Yes',\n No: 'No',\n True: 'True',\n False: 'False'\n },\n settings: englishUSLocaleSettings\n };\n var allLocales = {\n 'en-US': defaultLocale\n };\n var currentLocale;\n var mappers = [];\n function mapInfo(info) {\n for (var _i = 0, mappers_1 = mappers; _i < mappers_1.length; _i++) {\n var mapper = mappers_1[_i];\n mapper(info);\n }\n }\n function addMapper(mapper) {\n mappers.push(mapper);\n }\n i18n.addMapper = addMapper;\n /**\n * Gets added locales with their names.\n * @returns The locales.\n */\n function getLocales() {\n var result = [];\n for (var locale in allLocales) {\n result.push({\n locale: locale,\n englishName: allLocales[locale].englishName,\n displayName: allLocales[locale].displayName\n });\n }\n return result.sort(function (a, b) {\n if (a.englishName > b.englishName) {\n return 1;\n }\n else if (a.englishName === b.englishName) {\n return 0;\n }\n return -1;\n });\n }\n i18n.getLocales = getLocales;\n /**\n * Gets the current locale ID.\n * @returns The locale.\n */\n function getCurrentLocale() {\n return currentLocale.localeId;\n }\n i18n.getCurrentLocale = getCurrentLocale;\n /**\n * Sets the curent locale.\n * @deprecated Use setCurrentLocale instead\n * @param l The locale.\n */\n function setLocale(l) {\n console.warn('This method is deprecated. Use setCurrentLocale instead');\n setCurrentLocale(l);\n }\n i18n.setLocale = setLocale;\n /**\n * Sets the curent locale.\n * @param localeId The locale.\n */\n function setCurrentLocale(localeId) {\n var newLocale = allLocales[localeId];\n if (newLocale) {\n utils.assignDeep(currentLocale, newLocale);\n }\n else {\n currentLocale.englishName = localeId;\n currentLocale.displayName = localeId;\n currentLocale.texts = utils.assignDeep({}, defaultLocale.texts);\n }\n currentLocale.localeId = localeId;\n }\n i18n.setCurrentLocale = setCurrentLocale;\n /**\n * Returns localized text by the key defined in parameter.\n * Here we get the text of the resource string assigned to CmdClickToAddCondition key:\n *\n ```\n const text = i18n.getText('CmdClickToAddCondition')\n ```\n * @param args The keys of the resource string.\n * @returns Text of the resource defined by key or null if the key is not found\n *\n */\n function getText() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var textsObj = currentLocale.texts;\n var resText = '';\n if (args && args.length) {\n var argLength = args.length;\n for (var i = 0; i < argLength; i++) {\n resText = textsObj[args[i]];\n if (typeof resText === 'object') {\n textsObj = resText;\n }\n else {\n break;\n }\n }\n }\n return resText;\n }\n i18n.getText = getText;\n function getLocaleSettings() {\n return currentLocale.settings;\n }\n i18n.getLocaleSettings = getLocaleSettings;\n function getOneLocaleSetting(key) {\n return currentLocale.settings[key];\n }\n i18n.getOneLocaleSetting = getOneLocaleSetting;\n function getShortMonthName(monthNum) {\n var settings = getLocaleSettings();\n if (monthNum > 0 && monthNum < 13) {\n return settings.shortMonthNames[monthNum - 1];\n }\n else {\n throw 'Wrong month number: ' + monthNum;\n }\n }\n i18n.getShortMonthName = getShortMonthName;\n function getLongMonthName(monthNum) {\n var settings = getLocaleSettings();\n if (monthNum > 0 && monthNum < 13) {\n return settings.longMonthNames[monthNum - 1];\n }\n else {\n throw 'Wrong month number: ' + monthNum;\n }\n }\n i18n.getLongMonthName = getLongMonthName;\n function getShortWeekDayName(dayNum) {\n var settings = getLocaleSettings();\n if (dayNum > 0 && dayNum < 8) {\n return settings.shortWeekDayNames.length >= dayNum\n ? settings.shortWeekDayNames[dayNum - 1]\n : dayNum.toString();\n }\n else {\n throw 'Wrong month number: ' + dayNum;\n }\n }\n i18n.getShortWeekDayName = getShortWeekDayName;\n function getLongWeekDayName(dayNum) {\n var settings = getLocaleSettings();\n if (dayNum > 0 && dayNum < 8) {\n return settings.longWeekDayNames.length >= dayNum\n ? settings.longWeekDayNames[dayNum - 1]\n : dayNum.toString();\n }\n else {\n throw 'Wrong month number: ' + dayNum;\n }\n }\n i18n.getLongWeekDayName = getLongWeekDayName;\n /**\n * Updates the locale settings (date/time formats, separators, etc) for the specified locale.\n * @param settingsToUpdate a LocaleSettings object\n */\n function updateLocaleSettings(settingsToUpdate) {\n if (!currentLocale.settings) {\n currentLocale.settings = utils.assignDeep({}, englishUSLocaleSettings);\n }\n currentLocale.settings = utils.assignDeep(currentLocale.settings, settingsToUpdate);\n }\n i18n.updateLocaleSettings = updateLocaleSettings;\n /**\n * Updates the texts for the current locale\n * @param texts A plain JS object that contains textual resources\n */\n function updateLocaleTexts(texts) {\n if (typeof texts !== 'object') {\n console.error('Wrong parameter type in updateLocaleTexts function call.' +\n 'The first parameter (localeId) is not necessary. Use updateLocaleTexts(texts) instead');\n return;\n }\n mapInfo({ localeId: currentLocale.localeId, texts: texts });\n utils.assignDeep(currentLocale.texts, texts);\n }\n i18n.updateLocaleTexts = updateLocaleTexts;\n function updateDefaultTexts(texts) {\n for (var localeId in allLocales) {\n var locale = allLocales[localeId];\n locale.texts = utils.assignDeep({}, texts, locale.texts);\n }\n currentLocale.texts = utils.assignDeep({}, texts, currentLocale.texts);\n }\n i18n.updateDefaultTexts = updateDefaultTexts;\n /**\n * Updates the information for the specified locale.\n * @param localeId The locale ID (like 'en', 'de', 'uk', etc).\n * If the locale does exist yet - it will be added\n * @param localeInfo a LocaleInfo object that contains the locale settings and textual resources\n */\n function updateLocaleInfo(localeId, localeData) {\n mapInfo(localeData);\n var localeInfoToUpdate = currentLocale;\n if (localeId) {\n if (!localeData.localeId) {\n localeData.localeId = localeId;\n }\n localeInfoToUpdate = allLocales[localeId];\n if (!localeInfoToUpdate) {\n localeInfoToUpdate = utils.assignDeep({}, defaultLocale);\n allLocales[localeId] = localeInfoToUpdate;\n }\n }\n utils.assignDeep(localeInfoToUpdate, localeData);\n }\n i18n.updateLocaleInfo = updateLocaleInfo;\n /**\n * Adds the locale.\n * @param localeId The locale ID (like 'en', 'de', 'uk', etc).\n * If the locale does exist yet - it will be created\n * @param localeInfo - a LocaleInfo object that contains the locale settings and textual resources\n */\n function addLocale(localeId, localeInfo) {\n updateLocaleInfo(localeId, localeInfo);\n }\n i18n.addLocale = addLocale;\n /**\n * Overwrites some locale settings (date/time formats) with the formats used in browser's current language\n */\n function determineSettingsByLocale(localeId) {\n var now = new Date(2020, 5, 7, 19, 34, 56, 88);\n var dateOptions = { year: 'numeric', month: 'numeric', day: 'numeric' };\n var timeOptions = { hour: 'numeric', minute: 'numeric', second: 'numeric' };\n var dateStr = now.toLocaleDateString(localeId, dateOptions);\n var timeStr = now.toLocaleTimeString(localeId, timeOptions);\n var dateFormat = dateStr\n .replace('07', 'dd')\n .replace('7', 'd')\n .replace('06', 'MM')\n .replace('6', 'M')\n .replace('2020', 'yyyy')\n .replace('20', 'yy');\n var timeFormat = timeStr\n .replace('19', 'HH')\n .replace('07', 'hh')\n .replace('7', 'h')\n .replace('34', 'mm')\n .replace('56', 'ss')\n .replace('PM', 'tt');\n if (!currentLocale.settings) {\n currentLocale.settings = {};\n }\n var localeSettings = {\n shortDateFormat: dateFormat,\n shortTimeFormat: timeFormat\n };\n updateLocaleSettings(localeSettings);\n }\n function loadBrowserLocaleSettings() {\n var lang = typeof navigator === 'object' ? navigator.language : undefined;\n determineSettingsByLocale(lang);\n }\n function resetLocales() {\n if (!currentLocale) {\n currentLocale = utils.assignDeep({}, defaultLocale);\n loadBrowserLocaleSettings();\n }\n }\n i18n.resetLocales = resetLocales;\n function dateTimeToStr(dateTime, dataType, format) {\n if (format) {\n if (format == 'd') {\n format = buildShortDateTimeFormat(DataType.Date);\n }\n else if (format == 'D') {\n format = buildLongDateTimeFormat(DataType.Date);\n }\n else if (format == 'f') {\n format = buildShortDateTimeFormat(DataType.DateTime);\n }\n else if (format == 'F') {\n format = buildLongDateTimeFormat(DataType.DateTime);\n }\n }\n else {\n format = buildShortDateTimeFormat(dataType);\n }\n return utils.dateTimeToStr(dateTime, format);\n }\n i18n.dateTimeToStr = dateTimeToStr;\n function buildShortDateTimeFormat(dataType) {\n var localeSettings = getLocaleSettings();\n var format;\n switch (dataType) {\n case DataType.Date:\n format = localeSettings.shortDateFormat;\n break;\n case DataType.Time:\n format = localeSettings.shortTimeFormat;\n break;\n default:\n format = localeSettings.shortDateFormat + ' ' + localeSettings.shortTimeFormat;\n break;\n }\n return format;\n }\n function buildLongDateTimeFormat(dataType) {\n var localeSettings = getLocaleSettings();\n var format;\n switch (dataType) {\n case DataType.Date:\n format = localeSettings.longDateFormat;\n break;\n case DataType.Time:\n format = localeSettings.longTimeFormat;\n break;\n default:\n format = localeSettings.longDateFormat + ' ' + localeSettings.longTimeFormat;\n break;\n }\n return format;\n }\n function numberToStr(number, format) {\n if (format && format.length > 0) {\n var type = format.charAt(0).toUpperCase();\n if (type === 'S') {\n return formatWithSequence(number, format.slice(1));\n }\n else if (['D', 'F', 'C'].indexOf(type) >= 0) {\n var locale = getCurrentLocale();\n return number.toLocaleString(locale, getNumberFormatOptions(format));\n }\n else {\n return convertWithMask(Math.trunc(number), format);\n }\n }\n var localeSettings = getLocaleSettings();\n return utils.numberToStr(number, localeSettings.decimalSeparator);\n }\n i18n.numberToStr = numberToStr;\n function booleanToStr(bool, format) {\n if (format && format.length > 0) {\n var type = format.charAt(0).toUpperCase();\n if (type === 'S') {\n var values = format.slice(1).split('|');\n if (values.length > 1) {\n var value = values[(bool) ? 1 : 0];\n return i18n.getText(value) || value;\n }\n }\n }\n return \"\".concat(bool);\n }\n i18n.booleanToStr = booleanToStr;\n var cachedSequenceFormats = {};\n function formatWithSequence(number, format) {\n if (!cachedSequenceFormats[format]) {\n // parse and save in cache format values \n var values_2 = format.split('|')\n .filter(function (v) { return v.length > 0; })\n .map(function (v) { return v.split('='); });\n cachedSequenceFormats[format] = {};\n if (values_2.length > 0) {\n if (values_2[0].length > 1) {\n for (var _i = 0, values_1 = values_2; _i < values_1.length; _i++) {\n var value = values_1[_i];\n cachedSequenceFormats[format][Number.parseInt(value[1])] = value[0];\n }\n }\n else {\n values_2.forEach(function (value, index) {\n cachedSequenceFormats[format][index] = value[0];\n });\n }\n }\n }\n var values = cachedSequenceFormats[format];\n if (values[number] !== undefined) {\n var value = values[number];\n return i18n.getText(value) || value;\n }\n return number.toString();\n }\n function convertWithMask(number, mask) {\n var value = number.toString();\n var result = '';\n var index = value.length - 1;\n for (var i = mask.length - 1; i >= 0; i--) {\n var ch = mask.charAt(i);\n if (ch === '#' || ch === '0') {\n if (index >= 0) {\n result += value.charAt(index);\n index--;\n }\n else {\n if (ch === '0') {\n result += 0;\n }\n }\n }\n else {\n result += ch;\n }\n }\n return result.split('').reverse().join('');\n }\n function getNumberFormatOptions(format) {\n var localeSettings = getLocaleSettings();\n var type = format[0].toUpperCase();\n var digits = (format.length > 1)\n ? Number.parseInt(format.slice(1))\n : type == 'D' ? 1 : 2;\n switch (type) {\n case 'D':\n return {\n style: 'decimal',\n useGrouping: false,\n minimumIntegerDigits: digits\n };\n case 'C':\n return {\n style: 'currency',\n currency: localeSettings.currency,\n minimumFractionDigits: digits\n };\n default:\n return {\n style: 'decimal',\n minimumFractionDigits: digits,\n maximumFractionDigits: digits\n };\n }\n }\n})(i18n || (i18n = {}));\n//# sourceMappingURL=i18n.js.map","import { DataType } from '../types/data_type';\nimport { i18n } from '../i18n/i18n';\nexport var utils;\n(function (utils) {\n function getAllDataTypes() {\n return Object.values(DataType).filter(function (item) { return typeof item === \"number\"; });\n }\n utils.getAllDataTypes = getAllDataTypes;\n function getDateDataTypes() {\n return [DataType.Time, DataType.Date, DataType.DateTime];\n }\n utils.getDateDataTypes = getDateDataTypes;\n function getStringDataTypes() {\n return [DataType.String, DataType.Memo, DataType.FixedChar];\n }\n utils.getStringDataTypes = getStringDataTypes;\n var _numericTypes = [DataType.Byte, DataType.Word, DataType.Int32,\n DataType.Int64, DataType.Float, DataType.Currency, DataType.Autoinc];\n function getNumericDataTypes() {\n return _numericTypes;\n }\n utils.getNumericDataTypes = getNumericDataTypes;\n var _intTypes = [DataType.Byte, DataType.Word, DataType.Int32, DataType.Int64, DataType.Autoinc];\n //-------------- object functions -------------------\n /**\n * Copy the content of all objests passed in `args` parameters into `target`\n * and returns the result\n * NB: This function copies only the first level properties.\n * For a deep copy please use `assignDeep`\n * @param target - the target object\n * @param args - an array of the source objects\n */\n function assign(target) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n for (var i = 0; i < args.length; i++) {\n var source = args[i];\n if (source) {\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n target[key] = source[key];\n }\n }\n }\n }\n return target;\n }\n utils.assign = assign;\n /**\n * Copy the content of all objests passed in `args` parameters into `target`\n * and returns the result\n * NB: This function make a deep copy -\n * so `assignDeep` will be called recursively for all object properties\n * on the first level.\n * @param target - the target object\n * @param sources - an array of the source objects\n */\n function assignDeep(target) {\n var sources = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sources[_i - 1] = arguments[_i];\n }\n return assignDeepCore(new WeakMap(), target, sources);\n }\n utils.assignDeep = assignDeep;\n function assignDeepCore(hashSet, target, sources) {\n if (!target) {\n target = {};\n }\n for (var _i = 0, sources_1 = sources; _i < sources_1.length; _i++) {\n var source = sources_1[_i];\n if (source) {\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n var sourceVal = source[key];\n if (sourceVal !== null && typeof sourceVal === 'object') {\n if (hashSet.has(sourceVal)) {\n target[key] = hashSet.get(sourceVal);\n }\n else {\n if (Array.isArray(sourceVal)) {\n target[key] = createArrayFrom(sourceVal);\n hashSet.set(sourceVal, target[key]);\n }\n else {\n if (typeof target[key] == 'undefined' || target[key] == null) {\n target[key] = Object.create(Object.getPrototypeOf(sourceVal));\n }\n hashSet.set(sourceVal, target[key]);\n assignDeepCore(hashSet, target[key], [sourceVal]);\n }\n }\n }\n else {\n target[key] = sourceVal;\n }\n }\n }\n }\n }\n return target;\n }\n function getIfDefined(value, defaultValue) {\n return (typeof value !== 'undefined') ? value : defaultValue;\n }\n utils.getIfDefined = getIfDefined;\n function IsDefinedAndNotNull(value) {\n return typeof value !== 'undefined' && value !== null;\n }\n utils.IsDefinedAndNotNull = IsDefinedAndNotNull;\n function copyArrayTo(collection1, collection2) {\n var len1 = collection1.length;\n var len2 = collection2.length;\n for (var i = 0; i < len1 && i < len2; i++) {\n collection2[i] = collection1[i];\n }\n }\n utils.copyArrayTo = copyArrayTo;\n function createArrayFrom(collection) {\n var result = [];\n for (var _i = 0, collection_1 = collection; _i < collection_1.length; _i++) {\n var item = collection_1[_i];\n result.push(item);\n }\n return result;\n }\n utils.createArrayFrom = createArrayFrom;\n /**\n * Searches an array of the objects which implement ItemWithId by ID\n * Returs the found object or null.\n * @param array\n * @param id\n */\n function findItemById(array, id) {\n var arrLength = array.length;\n for (var idx = 0; idx < arrLength; idx++) {\n if (array[idx].id === id)\n return array[idx];\n }\n return null;\n }\n utils.findItemById = findItemById;\n function findItemIndexById(array, id) {\n var arrLength = array.length;\n for (var idx = 0; idx < arrLength; idx++) {\n if (array[idx].id === id)\n return idx;\n }\n return -1;\n }\n utils.findItemIndexById = findItemIndexById;\n /**\n * Searches an array of the objects which implement ItemWithId by ID\n * Returs the index of the found element, or -1 if nothing was found.\n * @param array\n * @param id\n */\n function indexOfArrayItem(arr, item) {\n if (arr.indexOf) {\n return arr.indexOf(item);\n }\n else {\n var len = arr.length;\n for (var i = 0; i < len; i++) {\n if (item == arr[i]) {\n return i;\n }\n }\n return -1;\n }\n }\n utils.indexOfArrayItem = indexOfArrayItem;\n /**\n * Moves an item in some array to a new position\n * @param array\n * @param index1\n * @param index2\n */\n function moveArrayItem(array, index1, index2) {\n if (index1 >= array.length) {\n throw 'Index out of bounds: ' + index1;\n }\n if (index2 >= array.length) {\n index2 = array.length - 1;\n }\n var item = array.splice(index1, 1)[0];\n array.splice(index2, 0, item);\n }\n utils.moveArrayItem = moveArrayItem;\n /**\n * Searches for a particular item in the array are removes that item if found.\n * @param arr\n * @param value\n */\n function removeArrayItem(arr, value) {\n var index = arr.indexOf(value);\n if (index != -1) {\n return arr.splice(index, 1)[0];\n }\n }\n utils.removeArrayItem = removeArrayItem;\n function insertArrayItem(arr, index, value) {\n arr.splice(index, 0, value);\n }\n utils.insertArrayItem = insertArrayItem;\n function fillArray(arr, value, start, end) {\n if (start === void 0) { start = 0; }\n var len = arr.length >>> 0;\n var relativeStart = start >> 0;\n var k = relativeStart < 0 ?\n Math.max(len + relativeStart, 0) :\n Math.min(relativeStart, len);\n var relativeEnd = end === undefined ?\n len : end >> 0;\n var final = relativeEnd < 0 ?\n Math.max(len + relativeEnd, 0) :\n Math.min(relativeEnd, len);\n while (k < final) {\n arr[k] = value;\n k++;\n }\n return arr;\n }\n utils.fillArray = fillArray;\n //------------ DOM utils ------------\n /**\n * Calculates the shift on which we need to move our element horizontally\n * to find current window\n * @param absLeft\n * @param width\n */\n function shiftToFitWindow(absLeft, width) {\n var body = document.getElementsByTagName('body')[0];\n var winWidth = window.innerWidth || document.documentElement.clientWidth || body.clientWidth;\n var absRight = absLeft + width;\n var shift = 0;\n if (absRight > winWidth) {\n shift = winWidth - absRight - 10;\n if (absLeft + shift < 0) {\n shift = 10 - absLeft;\n }\n }\n return shift;\n }\n utils.shiftToFitWindow = shiftToFitWindow;\n /**\n * Returns `true` if the value passed in the parameter is an object\n * @param val\n */\n function isObject(val) {\n if (val === null) {\n return false;\n }\n return ((typeof val === 'function') || (typeof val === 'object'));\n }\n utils.isObject = isObject;\n /**\n * Returns `true` if the `DataType` value passed in the parameter\n * represents some numeric type\n * @param dtype\n */\n function isNumericType(dtype) {\n var index = _numericTypes.indexOf(dtype);\n return (index >= 0);\n }\n utils.isNumericType = isNumericType;\n /**\n * Returns `true` if the `DataType` value passed in the parameter\n * represents some numeric type\n * @param dtype\n */\n function isIntType(dtype) {\n var index = _intTypes.indexOf(dtype);\n return (index >= 0);\n }\n utils.isIntType = isIntType;\n /**\n * Returns `true` if the value passed in the parameter is an a numeric value\n * @param val\n */\n function isNumeric(val) {\n return !isNaN(parseFloat(val)) && isFinite(val);\n }\n utils.isNumeric = isNumeric;\n /**\n * Returns `true` if two data types passed in parameters\n * are compatible - so it's safe to copy the values between\n * two expressions with these two types\n * @param type1\n * @param type2\n */\n function areCompatibleDataTypes(type1, type2) {\n return typeof type1 == \"undefined\" || typeof type2 == \"undefined\" || type1 == DataType.Unknown || type2 == DataType.Unknown\n || (type1 == type2) || (type1 == DataType.Date && type2 == DataType.DateTime)\n || (type1 == DataType.DateTime && type2 == DataType.Date);\n }\n utils.areCompatibleDataTypes = areCompatibleDataTypes;\n /**\n * Returns `true` if the property with named `propName`\n * in the object `obj` has some value\n * @param obj\n * @param propName\n */\n function isPropSet(obj, propName) {\n return obj[propName] || obj[propName.toLowerCase()] || obj[propName.toUpperCase()];\n }\n utils.isPropSet = isPropSet;\n //-------------- ID generator -----------\n var prefixIdLen = 4;\n var symbols = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n var magicTicks = 636712160627685350;\n /**\n * Generates an unique ID\n */\n function generateId(prefix) {\n if (!prefix) {\n prefix = 'easy';\n }\n var prfx = (prefix.length > prefixIdLen) ? squeezeMoniker(prefix, prefixIdLen) : prefix;\n if (prfx && prfx.length > 0) {\n prfx += \"-\";\n }\n //adding 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 var ticksNum36 = intToNumBase(getNowTicks() - magicTicks - randInt);\n return prfx + randCharPart + ticksNum36;\n }\n utils.generateId = generateId;\n function intToNumBase(value, targetBase) {\n if (targetBase === void 0) { 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 var parts = str.split('-');\n var pml = 1;\n var ptt = maxlen;\n if (parts.length < maxlen) {\n pml = maxlen / parts.length;\n ptt = parts.length;\n }\n var result = \"\";\n for (var i = 0; i < ptt; i++) {\n result += squeeze(parts[i], pml);\n }\n return result;\n }\n function squeeze(str, maxlen) {\n var len = str.length;\n if (len > maxlen) {\n var step = len / maxlen;\n var result = \"\";\n result += str[0];\n var nextIndex = step;\n var ch = void 0;\n for (var i = 1; i < len; i++) {\n ch = str[i];\n if (i + 1 > nextIndex) {\n result += ch;\n nextIndex += step;\n }\n }\n return result;\n }\n else {\n return str;\n }\n }\n function replaceAtString(str, index, replacement) {\n return str.substring(0, index) + replacement + str.substring(index + replacement.length);\n }\n function getRandomInt(min, max) {\n return Math.floor(Math.random() * (max - min)) + min;\n }\n function getNowTicks() {\n return (621355968e9 + (new Date()).getTime() * 1e4);\n }\n function safeParseInt(str) {\n var res = parseInt(str);\n if (isNaN(res))\n throw \"\\\"\".concat(str, \"\\\" is not a valid number\");\n return res;\n }\n function getDaysInMonth(month, year) {\n return new Date(year, month + 1, 0).getDate();\n }\n // ------------- date/time functions -------------------\n // TO DO: improve to process all datetime cases\n function strToDateTime(value, format) {\n if (!value || value.length == 0)\n return new Date();\n var normalizedValue = value.replace(/[^a-zA-Z0-9_]/g, '-');\n var normalizedFormat = format.replace(/[^a-zA-Z0-9_]/g, '-');\n var formatItems = normalizedFormat.split('-');\n var dateItems = normalizedValue.split('-');\n var monthIndex = formatItems.indexOf(\"MM\");\n var dayIndex = formatItems.indexOf(\"dd\");\n var yearIndex = formatItems.indexOf(\"yyyy\");\n var hourIndex = formatItems.indexOf(\"HH\");\n var minutesIndex = formatItems.indexOf(\"mm\");\n var secondsIndex = formatItems.indexOf(\"ss\");\n var today = new Date();\n try {\n var year = yearIndex > -1 && yearIndex < dateItems.length\n ? safeParseInt(dateItems[yearIndex])\n : today.getFullYear();\n var month = monthIndex > -1 && monthIndex < dateItems.length\n ? safeParseInt(dateItems[monthIndex]) - 1\n : today.getMonth() - 1;\n if (month > 11)\n throw '';\n var day = dayIndex > -1 && dayIndex < dateItems.length\n ? safeParseInt(dateItems[dayIndex])\n : today.getDate();\n if (day > getDaysInMonth(month, year))\n throw '';\n var hour = hourIndex > -1 && hourIndex < dateItems.length\n ? safeParseInt(dateItems[hourIndex])\n : 0;\n if (hour > 23)\n throw '';\n var minute = minutesIndex > -1 && minutesIndex < dateItems.length\n ? safeParseInt(dateItems[minutesIndex])\n : 0;\n if (minute > 59)\n throw '';\n var second = secondsIndex > -1 && secondsIndex < dateItems.length\n ? safeParseInt(dateItems[secondsIndex])\n : 0;\n if (second > 59)\n throw '';\n return new Date(year, month, day, hour, minute, second);\n }\n catch (_a) {\n throw \"\".concat(value, \" is not a valid date.\");\n }\n }\n utils.strToDateTime = strToDateTime;\n function strToTime(str) {\n var timeItems = str.split(':');\n try {\n var hour = timeItems.length > 0 ? safeParseInt(timeItems[0]) : 0;\n if (hour > 23)\n throw '';\n var minute = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0;\n if (minute > 59)\n throw '';\n var second = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0;\n if (second > 59)\n throw '';\n return new Date(0, 0, 0, hour, minute, second);\n }\n catch (_a) {\n throw \"\".concat(str, \" is not a valid time.\");\n }\n }\n utils.strToTime = strToTime;\n var DT_FORMAT_RGEX = /\\[([^\\]]+)]|y{2,4}|M{1,4}|d{1,2}|H{1,2}|h{1,2}|m{2}|s{2}|t{2}/g;\n /**\n * Returns string representation of the date/time value according to the custom format (second parameter)\n * The format is compatible with the one used in .NET: https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings\n * @param date\n * @param format\n */\n function dateTimeToStr(date, format) {\n var year = date.getFullYear();\n var yearStr = year.toString();\n var month = date.getMonth() + 1;\n var day = date.getDate();\n var hour = date.getHours();\n var minute = date.getMinutes();\n var second = date.getSeconds();\n var hour12 = hour % 12 || 12; //the remainder of the division by 12. Or 12 if it's 0\n var isPm = hour > 11;\n var matches = {\n yyyy: yearStr,\n yy: yearStr.substring(yearStr.length - 2),\n MMMM: i18n.getLongMonthName(month),\n MMM: i18n.getShortMonthName(month),\n MM: (month < 10) ? '0' + month : month.toString(),\n M: month.toString(),\n dd: (day < 10) ? '0' + day : day.toString(),\n d: day.toString(),\n HH: (hour < 10) ? '0' + hour : hour.toString(),\n H: hour.toString(),\n hh: (hour12 < 10) ? '0' + hour12 : hour12.toString(),\n h: hour12.toString(),\n tt: isPm ? 'PM' : 'AM',\n mm: (minute < 10) ? '0' + minute : minute.toString(),\n ss: (second < 10) ? '0' + second : second.toString()\n };\n return format.replace(DT_FORMAT_RGEX, function (match, $1) {\n return $1 || matches[match];\n });\n }\n utils.dateTimeToStr = dateTimeToStr;\n /**\n * Converts a numeric value to the string taking into the account the decimal separator\n * @param value - the number to convert\n * @param decimalSeparator - the symbol that represents decimal separator. If not specified the function gets the one from the current locale settings.\n */\n function numberToStr(number, decimalSeparator) {\n decimalSeparator = decimalSeparator || i18n.getLocaleSettings().decimalSeparator;\n return number.toString().replace('.', decimalSeparator);\n }\n utils.numberToStr = numberToStr;\n})(utils || (utils = {}));\n//# sourceMappingURL=utils.js.map","var HttpActionResult = /** @class */ (function () {\n function HttpActionResult(request, promise) {\n this.request = request;\n this.promise = promise;\n }\n HttpActionResult.prototype.getPromise = function () {\n return this.promise;\n };\n HttpActionResult.prototype.getRequest = function () {\n return this.request;\n };\n HttpActionResult.prototype.then = function (onfulfilled, onrejected) {\n return this.promise.then(onfulfilled, onrejected);\n };\n HttpActionResult.prototype.catch = function (onrejected) {\n return this.promise.catch(onrejected);\n };\n HttpActionResult.prototype.finally = function (onfinally) {\n return this.promise.finally(onfinally);\n };\n return HttpActionResult;\n}());\nexport { HttpActionResult };\n//# sourceMappingURL=http_action_result.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { utils } from '../utils/utils';\nimport { HttpActionResult } from './http_action_result';\nimport { HttpMethod } from './http_method';\nimport { HttpRequest } from './http_request';\nvar HttpResponseError = /** @class */ (function (_super) {\n __extends(HttpResponseError, _super);\n function HttpResponseError(status, message) {\n var _this = _super.call(this, message) || this;\n _this.status = status;\n return _this;\n }\n return HttpResponseError;\n}(Error));\nexport { HttpResponseError };\nvar HttpClient = /** @class */ (function () {\n function HttpClient() {\n this.defaultHeaders = {};\n this.customPayload = undefined;\n }\n Object.defineProperty(HttpClient.prototype, \"responseBody\", {\n /** Gets the response body for the latest request */\n get: function () {\n return this._responseBody;\n },\n enumerable: false,\n configurable: true\n });\n HttpClient.prototype.get = function (url, options) {\n return this.send(HttpMethod.Get, url, null, options);\n };\n HttpClient.prototype.post = function (url, data, options) {\n return this.send(HttpMethod.Post, url, data, options);\n };\n HttpClient.prototype.put = function (url, data, options) {\n return this.send(HttpMethod.Put, url, data, options);\n };\n HttpClient.prototype.delete = function (url, data, options) {\n return this.send(HttpMethod.Delete, url, data, options);\n };\n HttpClient.prototype.send = function (method, url, data, options) {\n var _this = this;\n options = options || {};\n var dataType = options.dataType || 'json';\n var contentType = options.contentType || (dataType !== 'form-data')\n ? 'application/json'\n : null;\n if (data && dataType != 'form-data' && this.customPayload) {\n data.data = utils.assignDeep(data.data || {}, this.customPayload);\n }\n var XHR = ('onload' in new XMLHttpRequest())\n ? XMLHttpRequest\n : window[\"XDomainRequest\"]; //IE support\n var xhr = new XHR();\n var desc = {\n method: method,\n url: url,\n headers: __assign(__assign({}, this.defaultHeaders), options.headers || {}),\n queryParams: options.queryParams || {},\n data: data\n };\n if (contentType)\n desc.headers['Content-Type'] = contentType;\n var request = new HttpRequest(xhr, desc);\n if (this.beforeEachRequest) {\n console.warn(\"HttpClient: 'beforeEachRequest' is deprecated and will be removed in future updates.\\n Use 'onRequest' instead\");\n this.beforeEachRequest(request);\n }\n if (this.onRequest) {\n this.onRequest(request);\n }\n var dataToSend = (request.data && typeof request.data !== 'string'\n && dataType == 'json')\n ? JSON.stringify(request.data)\n : request.data;\n request.open();\n return new HttpActionResult(request, new Promise(function (resolve, reject) {\n if (options.responseType)\n xhr.responseType = options.responseType;\n xhr.onerror = function (error) {\n reject(new HttpResponseError(xhr.status, xhr.responseText));\n };\n xhr.onreadystatechange = function () {\n if (xhr.readyState != 4)\n return; //we process only the state change to DONE(4)\n var responseContentType = xhr.getResponseHeader('Content-Type') || '';\n var status = xhr.status;\n if (status === 0) {\n reject(new HttpResponseError(status, \"Network error or the request was aborted\"));\n }\n else if (status >= 200 && status < 400) {\n //Success\n var responseObj = (xhr.responseType === 'arraybuffer' || xhr.responseType === 'blob')\n ? xhr.response\n : (responseContentType.indexOf('application/json') == 0\n ? JSON.parse(xhr.responseText)\n : xhr.responseText);\n _this._responseBody = responseObj;\n if (_this.onResponse) {\n _this.onResponse(xhr);\n }\n resolve(responseObj);\n }\n else {\n //Error\n var rtPromise = (xhr.responseType === 'arraybuffer' || xhr.responseType === 'blob')\n ? HttpClient.decodeArrayBuffer(xhr.response)\n : Promise.resolve(xhr.responseText);\n rtPromise.then(function (responseText) {\n var responseObj = (responseContentType.indexOf('application/json') == 0)\n ? JSON.parse(responseText)\n : responseText;\n _this._responseBody = responseObj;\n var message = responseObj.message ||\n (status == 404\n ? \"No such endpoint: \".concat(url)\n : responseObj);\n reject(new HttpResponseError(status, message));\n });\n }\n };\n xhr.send(dataToSend);\n }));\n };\n HttpClient.decodeArrayBuffer = function (uintArray) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n reader.onloadend = function () {\n if (reader.readyState == FileReader.DONE) {\n resolve(reader.result);\n }\n };\n reader.readAsText(new Blob([uintArray]));\n });\n };\n return HttpClient;\n}());\nexport { HttpClient };\n//# sourceMappingURL=http_client.js.map","import { DataType } from '../types/data_type';\nimport { utils } from '../utils/utils';\nexport var ColumnAlignment;\n(function (ColumnAlignment) {\n ColumnAlignment[ColumnAlignment[\"None\"] = 0] = \"None\";\n ColumnAlignment[ColumnAlignment[\"Left\"] = 1] = \"Left\";\n ColumnAlignment[ColumnAlignment[\"Center\"] = 2] = \"Center\";\n ColumnAlignment[ColumnAlignment[\"Right\"] = 3] = \"Right\";\n})(ColumnAlignment || (ColumnAlignment = {}));\nvar DataColumn = /** @class */ (function () {\n function DataColumn(desc) {\n if (!desc)\n throw Error(\"Options are required\");\n if (!desc.id)\n throw Error(\"Field Id is required\");\n if (!desc.label)\n throw Error(\"Label is required\");\n this.id = desc.id;\n this.type = utils.getIfDefined(desc.type, DataType.String);\n this.label = desc.label;\n this.originAttrId = desc.originAttrId;\n this.isAggr = desc.isAggr || false;\n this.displayFormat = desc.dfmt;\n this.groupFooterColumnTemplate = desc.gfct;\n this.style = desc.style || {};\n this.description = desc.description;\n this.calculatedWidth = 0;\n }\n return DataColumn;\n}());\nexport { DataColumn };\nvar DataColumnList = /** @class */ (function () {\n function DataColumnList() {\n this.items = [];\n this.mapper = {};\n this._dateColumnIdx = [];\n }\n Object.defineProperty(DataColumnList.prototype, \"count\", {\n get: function () {\n return this.items.length;\n },\n enumerable: false,\n configurable: true\n });\n DataColumnList.prototype.add = function (colOrDesc) {\n var col;\n if (colOrDesc instanceof DataColumn) {\n col = colOrDesc;\n }\n else {\n col = new DataColumn(colOrDesc);\n }\n var index = this.items.length;\n this.items.push(col);\n this.mapper[col.id] = index;\n if ([DataType.Date, DataType.DateTime, DataType.Time].indexOf(col.type) >= 0) {\n this._dateColumnIdx.push(index);\n }\n return index;\n };\n DataColumnList.prototype.updateDateColumnIdx = function () {\n this._dateColumnIdx = this.getItems()\n .filter(function (col) { return [DataType.Date, DataType.DateTime, DataType.Time].indexOf(col.type) >= 0; })\n .map(function (col, index) { return index; });\n };\n DataColumnList.prototype.put = function (index, col) {\n if (index >= 0 && index < this.count) {\n this.items[index] = col;\n this.updateDateColumnIdx();\n }\n };\n DataColumnList.prototype.move = function (col, newIndex) {\n var oldIndex = this.items.indexOf(col);\n if (oldIndex >= 0 && oldIndex != newIndex) {\n utils.moveArrayItem(this.items, oldIndex, newIndex);\n this.updateDateColumnIdx();\n }\n };\n DataColumnList.prototype.get = function (index) {\n if (index >= 0 && index < this.count) {\n return this.items[index];\n }\n else {\n return null;\n }\n };\n DataColumnList.prototype.getIndex = function (id) {\n return this.mapper[id];\n };\n DataColumnList.prototype.getItems = function () {\n return this.items;\n };\n DataColumnList.prototype.getDateColumnIndexes = function () {\n return this._dateColumnIdx;\n };\n DataColumnList.prototype.removeAt = function (index) {\n var col = this.get(index);\n this.items.splice(index, 1);\n var removeDate = this._dateColumnIdx.indexOf(index);\n if (removeDate >= 0) {\n this._dateColumnIdx.splice(removeDate, 1);\n }\n delete this.mapper[col.id];\n };\n DataColumnList.prototype.clear = function () {\n this.items = [];\n this._dateColumnIdx = [];\n this.mapper = {};\n };\n return DataColumnList;\n}());\nexport { DataColumnList };\n//# sourceMappingURL=data_column.js.map","import { DataType } from '../types/data_type';\nimport { EntityAttrKind } from '../types/entity_attr_kind';\nimport { utils } from '../utils/utils';\n/**\n * Represents one entity.\n */\nvar MetaEntity = /** @class */ (function () {\n /** The default constructor. */\n function MetaEntity(parent) {\n /** Returns false if this entity is read-only */\n this.isEditable = true;\n this.name = \"\";\n this.caption = \"\";\n this.description = \"\";\n this.parent = parent;\n this.attributes = new Array();\n this.subEntities = new Array();\n }\n /**\n * Loads entity from its JSON representation object.\n * @param model The Data Model.\n * @param dto The JSON representation object.\n */\n MetaEntity.prototype.loadFromData = function (model, dto) {\n if (dto) {\n this.id = dto.id;\n this.name = dto.name;\n this.captionPlural = dto.namePlur;\n this.caption = dto.name;\n this.description = dto.desc;\n if (typeof (dto.ied) !== 'undefined')\n this.isEditable = dto.ied;\n this.subEntities = new Array();\n if (dto.ents) {\n for (var i = 0; i < dto.ents.length; i++) {\n var newEntity = model.createEntity(this);\n newEntity.loadFromData(model, dto.ents[i]);\n this.subEntities.push(newEntity);\n }\n }\n this.attributes = new Array();\n if (dto.attrs) {\n for (var i = 0; i < dto.attrs.length; i++) {\n var newAttr = model.createEntityAttr(this);\n newAttr.loadFromData(model, dto.attrs[i]);\n this.attributes.push(newAttr);\n }\n }\n }\n };\n MetaEntity.prototype.scan = function (processAttribute, processEntity) {\n var opts = { stop: false };\n var internalProcessEntity = function (entity) {\n if (processEntity)\n processEntity(entity, opts);\n if (entity.attributes) {\n var attrCount = entity.attributes.length;\n for (var i = 0; (i < attrCount) && !opts.stop; i++) {\n var attr = entity.attributes[i];\n if (processAttribute) {\n processAttribute(attr, opts);\n }\n if (opts.stop)\n return;\n }\n }\n if (entity.subEntities) {\n var subEntityCount = entity.subEntities.length;\n for (var i = 0; (i < subEntityCount) && !opts.stop; i++) {\n internalProcessEntity(entity.subEntities[i]);\n }\n }\n };\n internalProcessEntity(this);\n };\n MetaEntity.prototype.getFirstPrimaryAttr = function () {\n return this.getPrimaryAttrs()[0];\n };\n MetaEntity.prototype.getPrimaryAttrs = function () {\n return this.attributes.filter(function (attr) { return attr.isPrimaryKey; });\n };\n return MetaEntity;\n}());\nexport { MetaEntity };\nvar MetaEntityAttr = /** @class */ (function () {\n /** The default constructor. */\n function MetaEntityAttr(entity) {\n this.id = \"\";\n this.caption = \"{Unrecognized attribute}\";\n this.dataType = DataType.String;\n this.size = 0;\n this.isPrimaryKey = false;\n this.isForeignKey = false;\n this.isNullable = true;\n this.showOnView = true;\n this.isEditable = true;\n this.showOnCreate = true;\n this.showOnEdit = true;\n this.showInLookup = false;\n this.lookupAttr = \"\";\n this.expr = \"\";\n this.entity = entity;\n this.kind = EntityAttrKind.Data;\n }\n /**\n * Loads entity attribute from JSON representation object.\n * @param model The Data Model.\n * @param dto The JSON representation object.\n */\n MetaEntityAttr.prototype.loadFromData = function (model, dto) {\n if (dto) {\n this.id = dto.id;\n this.description = dto.desc;\n this.caption = dto.cptn;\n this.dataType = dto.dtype;\n this.isPrimaryKey = dto.ipk;\n this.isForeignKey = dto.ifk;\n this.size = dto.size;\n this.lookupAttr = dto.lattr;\n this.lookupEntity = dto.lent;\n this.dataAttr = dto.dattr;\n this.lookupDataAttr = dto.ldattr;\n var isDataType = utils.getDateDataTypes().indexOf(this.dataType);\n this.defaultValue = dto.defVal && isDataType ? new Date(dto.defVal) : dto.defVal;\n this.isNullable = utils.getIfDefined(dto.nul, this.isNullable);\n this.isEditable = utils.getIfDefined(dto.ied, this.isEditable);\n this.showOnView = utils.getIfDefined(dto.ivis || dto.sov, this.showOnView);\n this.showOnCreate = utils.getIfDefined(dto.soc, this.showOnCreate);\n this.showOnEdit = utils.getIfDefined(dto.soe, this.showOnEdit);\n this.showInLookup = utils.getIfDefined(dto.sil, this.showInLookup);\n this.kind = dto.kind;\n this.displayFormat = dto.dfmt;\n if (dto.udata)\n this.userData = dto.udata;\n if (dto.edtr) {\n this.defaultEditor = model.getEditorById(dto.edtr) || model.createValueEditor();\n }\n }\n };\n return MetaEntityAttr;\n}());\nexport { MetaEntityAttr };\n//# sourceMappingURL=meta_entity.js.map","import { EditorTag } from '../types/editor_tag';\nimport { DataType } from '../types/data_type';\n/**\n * Represents a value editor.\n */\nvar ValueEditor = /** @class */ (function () {\n /** The default constructor. */\n function ValueEditor() {\n this.id = \"\";\n this.tag = EditorTag.Unknown;\n this.resType = DataType.Unknown;\n this.defValue = \"\";\n }\n /**\n * Loads value editor from its JSON representation object.\n * @param data The JSON representation object.\n */\n ValueEditor.prototype.loadFromData = function (data) {\n if (data) {\n this.id = data.id;\n this.tag = data.tag;\n this.defValue = data.defval;\n this.resType = data.rtype;\n this.accept = data.accept;\n this.multiline = data.multiline;\n if (data.subType) {\n this.resType = data.subType;\n }\n if (data.name) {\n this.name = data.name;\n }\n if (data.values) {\n this.values = data.values;\n }\n }\n };\n ValueEditor.prototype.getValueText = function (value) {\n var result = \"\";\n if (!this.values)\n return result;\n if (Array.isArray(value)) {\n for (var _i = 0, _a = this.values; _i < _a.length; _i++) {\n var item = _a[_i];\n if (value.indexOf(item.id) >= 0) {\n result += item.text + ',';\n }\n }\n }\n else {\n for (var _b = 0, _c = this.values; _b < _c.length; _b++) {\n var item = _c[_b];\n if (item.id === value) {\n result += item.text + ',';\n }\n }\n }\n if (result) {\n result = result.substring(0, result.length - 1);\n }\n return result;\n };\n return ValueEditor;\n}());\nexport { ValueEditor };\n//# sourceMappingURL=value_editor.js.map","import { i18n } from '../i18n/i18n';\nimport { utils } from '../utils/utils';\nimport { EditorTag } from '../types/editor_tag';\nimport { DataType } from '../types/data_type';\nimport { MetaEntity, MetaEntityAttr } from './meta_entity';\nimport { ValueEditor } from './value_editor';\n/**\n * Represents a data model\n */\nvar MetaData = /** @class */ (function () {\n /** The default constructor. */\n function MetaData() {\n this.mainEntity = null;\n this.id = '__none';\n this.name = 'Empty model';\n this.rootEntity = this.createEntity();\n this.displayFormats = new Map();\n }\n /**\n * Gets the main entity of model\n * @return The main entity.\n */\n MetaData.prototype.getMainEntity = function () {\n return this.mainEntity;\n };\n MetaData.prototype.createEntity = function (parent) {\n return new MetaEntity(parent);\n };\n MetaData.prototype.createEntityAttr = function (parent) {\n return new MetaEntityAttr(parent);\n };\n MetaData.prototype.createValueEditor = function () {\n return new ValueEditor();\n };\n /**\n * Loads data model from JSON.\n * @param stringJson The JSON string.\n */\n MetaData.prototype.loadFromJSON = function (stringJson) {\n var model = JSON.parse(stringJson);\n this.loadFromData(model);\n };\n /**\n * Loads data model from its JSON representation object.\n * @param data The JSON representation object.\n */\n MetaData.prototype.loadFromData = function (data) {\n this.id = data.id;\n this.name = data.name;\n this.version = data.vers;\n //Editors\n this.editors = new Array();\n if (data.editors) {\n for (var i = 0; i < data.editors.length; i++) {\n var newEditor = this.createValueEditor();\n newEditor.loadFromData(data.editors[i]);\n this.editors.push(newEditor);\n }\n }\n //rootEntity\n this.rootEntity.loadFromData(this, data.entroot);\n //DataFormats\n this.displayFormats = new Map();\n if (data.displayFormats) {\n for (var dtypeStr in data.displayFormats) {\n var dtype = DataType[dtypeStr];\n var formats = data.displayFormats[dtypeStr] || new Array();\n this.displayFormats.set(dtype, formats);\n }\n }\n };\n /**\n * Gets the display formats.\n * @returns The display formats.\n */\n MetaData.prototype.getDisplayFormats = function () {\n return this.displayFormats;\n };\n /**\n * Gets the display formats for type\n * @param type The type\n * @returns An array of display formats\n */\n MetaData.prototype.getDisplayFormatsForType = function (type) {\n if (this.displayFormats.has(type)) {\n return this.displayFormats.get(type);\n }\n return [];\n };\n /**\n * Gets the default display format for the provided type\n * @param type The type\n * @returns The default type format or null\n */\n MetaData.prototype.getDefaultFormat = function (type) {\n if (this.displayFormats.has(type)) {\n return this.displayFormats.get(type).filter(function (f) { return f.isdef; })[0];\n }\n return null;\n };\n /**\n * Sets data to data model.\n * @param model Its JSON representation object or JSON string.\n */\n MetaData.prototype.setData = function (model) {\n if (typeof model === 'string') {\n this.loadFromJSON(model);\n }\n else {\n this.loadFromData(model);\n }\n };\n /**\n * Checks wether the data model is empty.\n * @returns `true` if the data model is empty, otherwise `false`.\n */\n MetaData.prototype.isEmpty = function () {\n return this.rootEntity.subEntities.length === 0 && this.rootEntity.attributes.length === 0;\n };\n /**\n * Gets ID of the data model.\n * @returns The ID.\n */\n MetaData.prototype.getId = function () {\n return this.id;\n };\n /**\n * Gets name of the data model.\n * @returns The name.\n */\n MetaData.prototype.getName = function () {\n return this.name;\n };\n /**\n * Gets root entity of the data model.\n * @returns The root entity.\n */\n MetaData.prototype.getRootEntity = function () {\n return this.rootEntity;\n };\n /**\n * Finds editor by its ID.\n * @param editorId The editor ID.\n * @returns The value editor or `null`.\n */\n MetaData.prototype.getEditorById = function (editorId) {\n for (var _i = 0, _a = this.editors; _i < _a.length; _i++) {\n var editor = _a[_i];\n if (editor.id === editorId) {\n return editor;\n }\n }\n return null;\n };\n /**\n * Gets entity attribute by its ID.\n * This function runs through all attributes inside specified model (it's root entity and all its sub-entities).\n * @param attrId The attribute ID.\n * @returns The attribute or `null`.\n */\n MetaData.prototype.getAttributeById = function (attrId) {\n var attr = this.getEntityAttrById(this.getRootEntity(), attrId);\n if (!attr) {\n return null;\n }\n return attr;\n };\n /**\n * Checks wether attribute contains such property.\n * @param attrId The attribute ID.\n * @param propName The property name.\n * @returns `true` if the attribute contains the property, otherwise `false`.\n */\n MetaData.prototype.checkAttrProperty = function (attrId, propName) {\n var attribute = this.getAttributeById(attrId);\n if (attribute) {\n if (typeof attribute[propName] === 'undefined') {\n throw 'No such property: ' + propName;\n }\n if (attribute[propName]) {\n return true;\n }\n else if (attribute.lookupAttr) {\n attrId = attribute.lookupAttr;\n attribute = this.getAttributeById(attrId);\n return attribute && attribute[propName];\n }\n else {\n return false;\n }\n }\n else\n return false;\n };\n /**\n * Gets entity attribute by its ID.\n * This function runs through all attributes inside specified entity and all its sub-entities.\n * @param entity\n * @param attrId\n * @returns The attribute or `null`.\n */\n MetaData.prototype.getEntityAttrById = function (entity, attrId) {\n var idx;\n if (entity.attributes) {\n var attrCount = entity.attributes.length;\n for (idx = 0; idx < attrCount; idx++) {\n if (entity.attributes[idx].id == attrId) {\n return entity.attributes[idx];\n }\n }\n }\n var res;\n if (entity.subEntities) {\n var subEntityCount = entity.subEntities.length;\n for (idx = 0; idx < subEntityCount; idx++) {\n res = this.getEntityAttrById(entity.subEntities[idx], attrId);\n if (res)\n return res;\n }\n }\n return null;\n };\n MetaData.prototype.listByEntityWithFilter = function (entity, filterFunc) {\n var result = new Array();\n var caption;\n var ent = null;\n if (entity.subEntities) {\n var subEntityCount = entity.subEntities.length;\n for (var entIdx = 0; entIdx < subEntityCount; entIdx++) {\n ent = entity.subEntities[entIdx];\n if (!filterFunc || filterFunc(ent, null)) {\n caption = i18n.getText('Entities', ent.name);\n if (!caption) {\n caption = ent.caption;\n }\n var newEnt = utils.assign(this.createEntity(), { id: ent.name, text: caption, items: [], isEntity: true });\n newEnt.items = this.listByEntityWithFilter(ent, filterFunc);\n if (newEnt.items.length > 0)\n result.push(newEnt);\n }\n }\n }\n var attr = null;\n if (entity.attributes) {\n var attrCount = entity.attributes.length;\n for (var attrIdx = 0; attrIdx < attrCount; attrIdx++) {\n attr = entity.attributes[attrIdx];\n if (!filterFunc || filterFunc(entity, attr)) {\n caption = i18n.getText('Attributes', attr.id);\n if (!caption)\n caption = attr.caption;\n var newEnt = utils.assign(this.createEntity(), { id: attr.id, text: caption, dataType: attr.dataType });\n result.push(newEnt);\n }\n }\n }\n return result;\n };\n MetaData.prototype.listByEntity = function (entity, opts, filterFunc) {\n opts = opts || {};\n var resultEntities = [];\n var resultAttributes = [];\n var caption;\n var ent = null;\n if (entity.subEntities) {\n var subEntityCount = entity.subEntities.length;\n for (var entIdx = 0; entIdx < subEntityCount; entIdx++) {\n ent = entity.subEntities[entIdx];\n if (!filterFunc || filterFunc(ent, null)) {\n caption = i18n.getText('Entities', ent.name) || ent.caption;\n var newEnt = utils.assign(this.createEntity(), {\n id: ent.name,\n text: caption,\n items: [],\n isEntity: true,\n description: ent.description\n });\n var newOpts = utils.assign({}, opts);\n newOpts.includeRootData = false;\n newEnt.items = this.listByEntity(ent, newOpts, filterFunc);\n if (newEnt.items.length > 0) {\n resultEntities.push(newEnt);\n }\n }\n }\n }\n var attr = null;\n if (entity.attributes) {\n var attrCount = entity.attributes.length;\n for (var attrIdx = 0; attrIdx < attrCount; attrIdx++) {\n attr = entity.attributes[attrIdx];\n if (!filterFunc || filterFunc(entity, attr)) {\n caption = i18n.getText('Attributes', attr.id) || attr.caption;\n resultAttributes.push(utils.assign(this.createEntityAttr(entity), {\n id: attr.id, text: caption,\n dataType: attr.dataType, lookupAttr: attr.lookupAttr,\n description: attr.description\n }));\n }\n }\n }\n var sortCheck = function (a, b) {\n if (a.text.toLowerCase() == b.text.toLowerCase()) {\n return 0;\n }\n if (a.text.toLowerCase() > b.text.toLowerCase()) {\n return 1;\n }\n return -1;\n };\n if (opts.sortEntities) {\n resultEntities.sort(sortCheck);\n resultAttributes.sort(sortCheck);\n }\n var result;\n if (!opts.attrPlacement || opts.attrPlacement == 0) {\n result = resultEntities.concat(resultAttributes);\n }\n else {\n result = resultAttributes.concat(resultEntities);\n }\n if (opts.attrPlacement == 2) {\n result.sort(sortCheck);\n }\n if (opts.includeRootData) {\n caption = i18n.getText('Entities', entity.name);\n if (!caption)\n caption = entity.caption;\n return { id: entity.name, text: caption, items: result };\n }\n else {\n return result;\n }\n };\n /**\n * Clears data model.\n */\n MetaData.prototype.clear = function () {\n this.rootEntity = this.createEntity();\n this.editors = [];\n this.version = '';\n };\n /**\n * Add default value editors.\n */\n MetaData.prototype.addDefaultValueEditors = function () {\n var ve;\n ve = this.addOrUpdateValueEditor('_DTE', EditorTag.Edit, DataType.String);\n ve.defValue = '';\n this.addOrUpdateValueEditor('_DPDE', EditorTag.DateTime, DataType.DateTime);\n this.addOrUpdateValueEditor('_DPTE', EditorTag.DateTime, DataType.DateTime);\n };\n /**\n * Add or update a value editor.\n * @param id The id.\n * @param tag The tag.\n * @param resType The result type.\n * @returns The value editor.\n */\n MetaData.prototype.addOrUpdateValueEditor = function (id, tag, resType) {\n var ve = utils.findItemById(this.editors, id);\n if (!ve) {\n ve = this.createValueEditor();\n ve.id = id;\n this.editors.push(ve);\n }\n ve.tag = tag;\n ve.resType = resType;\n return ve;\n };\n /**\n * Gets entities tree.\n * @param opts The options.\n * @param filterFunc The filter function.\n * Takes two parameters, Entity and EntityAttr (second parameter will be null for entities), and returns boolean (true if the corresponding entity or attribute).\n * @returns The tree of the entities and their attributes according to options and the filter function\n */\n MetaData.prototype.getEntitiesTree = function (opts, filterFunc) {\n return this.listByEntity(this.getRootEntity(), opts, filterFunc);\n };\n /**\n * Gets entities tree due to filter.\n * @param filterFunc The filter function.\n * Takes two parameters, Entity and EntityAttr (second parameter will be null for entities), and returns boolean (true if the corresponding entity or attribute).\n * @returns The tree of the entities and their attributes according to the filter function\n */\n MetaData.prototype.getEntitiesTreeWithFilter = function (filterFunc) {\n return this.listByEntityWithFilter(this.getRootEntity(), filterFunc);\n };\n /**\n * Finds full entity path by attribute\n * @param attrId The attribute id.\n * @param sep The separator.\n * @returns The path.\n */\n MetaData.prototype.getFullEntityPathByAttr = function (attrId, sep) {\n sep = sep || ' ';\n return this.getEntityPathByAttr(this.getRootEntity(), attrId, sep, true);\n };\n /**\n * Finds entity path by attribute\n * @param entity The entity.\n * @param attrId The attribute id.\n * @param sep The separator.\n * @param root The root option.\n * @returns The path.\n */\n MetaData.prototype.getEntityPathByAttr = function (entity, attrId, sep, root) {\n if (!entity)\n return '';\n sep = sep || ' ';\n var entityCaption = '';\n if (entity.caption && !root) {\n var entityText = i18n.getText('Entities', entity.caption);\n entityCaption = entityText ? entityText : entity.caption;\n }\n if (entity.attributes) {\n var attrCount = entity.attributes.length;\n for (var i = 0; i < attrCount; i++) {\n if (entity.attributes[i].id == attrId) {\n return entityCaption;\n }\n }\n }\n if (entity.subEntities) {\n var subEntityCount = entity.subEntities.length;\n for (var i = 0; i < subEntityCount; i++) {\n var ent = entity.subEntities[i];\n var res = this.getEntityPathByAttr(ent, attrId, sep, false);\n if (res !== '') {\n if (entityCaption !== '')\n res = entityCaption + sep + res;\n return res;\n }\n }\n }\n return '';\n };\n /**\n * Gets the attribute text.\n * @param attr The attribute.\n * @param format The format.\n * @returns Formatted text.\n */\n MetaData.prototype.getAttributeText = function (attr, format) {\n var attrText = i18n.getText('Attributes', attr.id);\n if (!attrText) {\n attrText = attr.caption;\n }\n if (!format) {\n return attrText;\n }\n var result = '';\n var entityPath = this.getFullEntityPathByAttr(attr.id, ' ');\n if (entityPath) {\n result = format.replace(new RegExp('{attr}', 'g'), attrText);\n result = result.replace(new RegExp('{entity}', 'g'), entityPath);\n }\n else {\n result = attrText;\n }\n return result.trim();\n };\n /**\n * Scans model's entity tree and calls the callback functions for each attribute and entity.\n * @param processAttribute The callback function which is called for each attribute in model's entity tree.\n * The processed attribute is passed in the first function parameter.\n * @param processEntity The callback function which is called for each entity in tree.\n * The processed entity is passed in the first function parameter.\n */\n MetaData.prototype.runThroughEntities = function (processAttribute, processEntity) {\n this.getRootEntity().scan(processAttribute, processEntity);\n };\n /**\n * Finds first attribute by filter.\n * @param filterFunc The filter function. Takes EntityAttr object in parameter and returns boolean\n */\n MetaData.prototype.getFirstAttributeByFilter = function (filterFunc) {\n var res = null;\n this.runThroughEntities(function (attr, opts) {\n if (filterFunc(attr)) {\n opts.stop = true;\n res = attr;\n }\n }, null);\n return res;\n };\n return MetaData;\n}());\nexport { MetaData };\n//# sourceMappingURL=meta_data.js.map","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n/**\n * Defines aggregations settings for the current context.\n * Group, aggregate columns, grand totals, etc.\n */\nvar AggregationSettings = /** @class */ (function () {\n function AggregationSettings(colStore) {\n this.colStore = colStore;\n this.aggregates = [];\n this.groups = [];\n this.useGrandTotals = false;\n this.useRecordCount = false;\n this._caseSensitiveGroups = false;\n this.COUNT_FIELD_NAME = 'GRPRECCNT';\n }\n Object.defineProperty(AggregationSettings.prototype, \"caseSensitiveGroups\", {\n get: function () {\n return this._caseSensitiveGroups;\n },\n set: function (value) {\n this._caseSensitiveGroups = value;\n this.updateCompareProc();\n },\n enumerable: false,\n configurable: true\n });\n AggregationSettings.prototype.updateCompareProc = function () {\n this.compareValues = this._caseSensitiveGroups\n ? this.strictCompare\n : this.caseInsensitiveCompare;\n };\n AggregationSettings.prototype.addGroup = function (settings) {\n var cols = settings.columns || this.colStore.getColumnIds(settings.from, settings.to);\n if (!this.colStore.validateColumns(cols))\n throw \"Invalid columns: \" + cols;\n if (this.hasColumnsInUse(cols))\n throw \"Can't add same columns to different groups/aggregates\";\n this.groups.push(__assign({ columns: cols }, settings));\n return this;\n };\n AggregationSettings.prototype.addAggregateColumn = function (colIndexOrId, funcId) {\n var colId = typeof colIndexOrId == 'string'\n ? colIndexOrId\n : this.colStore.getColumnIds(colIndexOrId, colIndexOrId)[0];\n if (this.hasColumnsInUse([colId]) || !this.colStore.validateAggregate(colId, funcId))\n throw 'Invalid aggregation function for the column: ' + colId;\n this.aggregates.push({ colId: colId, funcId: funcId });\n return this;\n };\n AggregationSettings.prototype.addGrandTotals = function () {\n this.useGrandTotals = true;\n return this;\n };\n AggregationSettings.prototype.addCounts = function () {\n this.useRecordCount = true;\n return this;\n };\n AggregationSettings.prototype.getGroups = function () {\n var _this = this;\n var cols = [];\n var mappedGrops = this.groups.map(function (grp) {\n cols = cols.concat(grp.columns);\n return __assign(__assign({}, grp), { columns: Array.from(cols), aggregates: Array.from(_this.aggregates) });\n });\n return mappedGrops;\n };\n AggregationSettings.prototype.getInternalGroups = function () {\n return this.groups;\n };\n AggregationSettings.prototype.lastGroup = function () {\n var groups = this.getGroups();\n return groups[groups.length - 1];\n };\n AggregationSettings.prototype.getAggregates = function () {\n return this.aggregates;\n };\n AggregationSettings.prototype.hasAggregates = function () {\n return this.aggregates.length > 0;\n };\n AggregationSettings.prototype.hasGroups = function () {\n return this.groups.length > 0;\n };\n AggregationSettings.prototype.hasGrandTotals = function () {\n return this.useGrandTotals;\n };\n AggregationSettings.prototype.hasRecordCount = function () {\n return this.useRecordCount;\n };\n AggregationSettings.prototype.isEmpty = function () {\n return !(this.hasAggregates() || this.hasGroups() ||\n this.hasAggregates() || this.hasRecordCount());\n };\n AggregationSettings.prototype.drop = function () {\n console.warn('\"drop()\" method is obsolete. Use \"clear()\" instead');\n this.clear();\n };\n AggregationSettings.prototype.clear = function () {\n this.groups = [];\n this.aggregates = [];\n this.useGrandTotals = false;\n this.useRecordCount = false;\n this.caseSensitiveGroups = false;\n return this;\n };\n /**\n * Checks if all columns from the list passed in the parameter are \"unused\".\n * Here \"unused column\" means a column that is included neither in any group nor in the aggregates list.\n * @param cols - the array of column IDs\n * @returns true if all columns in the list are not used anywhere, othervise - fals\n */\n AggregationSettings.prototype.hasColumnsInUse = function (cols) {\n for (var _i = 0, _a = this.groups; _i < _a.length; _i++) {\n var group = _a[_i];\n var interCols = group.columns\n .filter(function (c) { return cols.indexOf(c) >= 0; });\n if (interCols.length > 0)\n return true;\n }\n for (var _b = 0, _c = this.aggregates; _b < _c.length; _b++) {\n var aggr = _c[_b];\n if (cols.indexOf(aggr.colId) >= 0)\n return true;\n }\n return false;\n };\n AggregationSettings.prototype.needAggrCalculation = function () {\n return (this.hasAggregates() || this.hasRecordCount())\n && (this.hasGrandTotals() || this.hasGroups());\n };\n AggregationSettings.prototype.saveToData = function () {\n return {\n groups: Array.from(this.groups),\n ugt: this.useGrandTotals,\n urc: this.useRecordCount,\n csg: this.caseSensitiveGroups,\n aggregates: Array.from(this.aggregates)\n };\n };\n AggregationSettings.prototype.loadFromData = function (data) {\n if (data) {\n if (typeof data.ugt !== 'undefined')\n this.useGrandTotals = data.ugt;\n if (typeof data.urc !== 'undefined')\n this.useRecordCount = data.urc;\n if (typeof data.csg !== 'undefined')\n this.caseSensitiveGroups = data.csg;\n if (data.groups) {\n this.groups = Array.from(data.groups);\n }\n if (data.aggregates) {\n this.aggregates = Array.from(data.aggregates);\n }\n }\n };\n AggregationSettings.prototype.buildGroupKey = function (group, row) {\n var caseInsensitive = !this.caseSensitiveGroups;\n var result = {};\n if (group) {\n for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {\n var colId = _a[_i];\n var keyVal = row.getValue(colId);\n if (caseInsensitive && typeof (keyVal) === 'string') {\n keyVal = keyVal.toLowerCase();\n }\n result[colId] = keyVal;\n }\n }\n return result;\n };\n //returns true if value1 == value2\n AggregationSettings.prototype.strictCompare = function (value1, value2) {\n if (value1 instanceof Date) {\n return value1.getTime() === value2.getTime();\n }\n else\n return value1 === value2;\n };\n //makes a case insensative comparision of two values and return true if there are equal\n AggregationSettings.prototype.caseInsensitiveCompare = function (value1, value2) {\n if (value1 instanceof Date) {\n return value1.getTime() === value2.getTime();\n }\n else {\n var val1 = (typeof value1 === 'string') ? value1.toLowerCase() : value1;\n var val2 = (typeof value2 === 'string') ? value2.toLowerCase() : value2;\n return val1 === val2;\n }\n };\n return AggregationSettings;\n}());\nexport { AggregationSettings };\n//# sourceMappingURL=aggr_settings.js.map","export var liquid;\n(function (liquid) {\n function renderLiquidTemplate(template, vars) {\n var result = template;\n if (vars) {\n for (var v in vars) {\n var liquidVarRegexp = new RegExp('\\{\\{' + v + '\\}\\}', 'g');\n result = result.replace(liquidVarRegexp, vars[v]);\n }\n }\n return result;\n }\n liquid.renderLiquidTemplate = renderLiquidTemplate;\n})(liquid || (liquid = {}));\n//# sourceMappingURL=liquid.js.map","var DataRow = /** @class */ (function () {\n function DataRow(columns, values) {\n this.columns = columns;\n this.values = values;\n }\n DataRow.prototype.toArray = function () {\n return Array.from(this.values);\n };\n DataRow.prototype.size = function () {\n return this.values.length;\n };\n DataRow.prototype.getValue = function (colIdOrIndex) {\n var index;\n if (typeof colIdOrIndex === \"string\") {\n index = this.columns.getIndex(colIdOrIndex);\n if (index === undefined) {\n throw new RangeError(\"No column with id '\".concat(colIdOrIndex, \"'\"));\n }\n }\n else {\n index = colIdOrIndex;\n }\n if (index >= this.values.length)\n throw new RangeError(\"Out of range: \" + index);\n return this.values[index];\n };\n DataRow.prototype.setValue = function (colIdOrIndex, value) {\n var index;\n if (typeof colIdOrIndex === \"string\") {\n index = this.columns.getIndex(colIdOrIndex);\n if (index === undefined) {\n throw new RangeError(\"No column with id '\".concat(colIdOrIndex, \"'\"));\n }\n }\n else {\n index = colIdOrIndex;\n }\n if (index >= this.values.length)\n throw new RangeError(\"Out of range: \" + index);\n this.values[index] = value;\n };\n return DataRow;\n}());\nexport { DataRow };\n//# sourceMappingURL=data_row.js.map","import { DataColumnList } from './data_column';\nimport { DataRow } from './data_row';\nimport { DataType } from '../types/data_type';\nimport { utils } from '../utils/utils';\nvar EasyDataTable = /** @class */ (function () {\n function EasyDataTable(options) {\n this._chunkSize = 1000;\n this._elasticChunks = false;\n this.cachedRows = [];\n this.total = 0;\n this.loader = null;\n this.needTotal = true;\n this.isInMemory = false;\n options = options || {};\n this._chunkSize = options.chunkSize || this._chunkSize;\n this._elasticChunks = options.elasticChunks || this._elasticChunks;\n this.loader = options.loader;\n if (typeof options.inMemory !== 'undefined') {\n this.isInMemory = options.inMemory;\n }\n if (this.isInMemory) {\n this.needTotal = false;\n }\n this._columns = new DataColumnList();\n this.onUpdate = options.onUpdate;\n if (options.columns) {\n for (var _i = 0, _a = options.columns; _i < _a.length; _i++) {\n var colDesc = _a[_i];\n this._columns.add(colDesc);\n }\n }\n if (options.rows) {\n for (var _b = 0, _c = options.rows; _b < _c.length; _b++) {\n var rowData = _c[_b];\n var row = this.createRow(rowData);\n this.addRow(row);\n }\n }\n this.needTotal = !this._elasticChunks;\n }\n Object.defineProperty(EasyDataTable.prototype, \"columns\", {\n get: function () {\n return this._columns;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(EasyDataTable.prototype, \"chunkSize\", {\n get: function () {\n return this._chunkSize;\n },\n set: function (value) {\n this._chunkSize = value;\n this.total = 0;\n this.needTotal = !this.elasticChunks;\n this.cachedRows = [];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(EasyDataTable.prototype, \"elasticChunks\", {\n get: function () {\n return this._elasticChunks;\n },\n set: function (value) {\n this._elasticChunks = value;\n this.total = 0;\n this.needTotal = !this.elasticChunks;\n this.cachedRows = [];\n },\n enumerable: false,\n configurable: true\n });\n EasyDataTable.prototype.getRows = function (params) {\n var _this = this;\n var fromIndex = 0, count = this._chunkSize;\n if (params) {\n if ('page' in params) {\n fromIndex = params.pageSize * (params.page - 1);\n count = params.pageSize;\n }\n else {\n fromIndex = params.offset;\n count = params.limit;\n }\n }\n var endIndex = fromIndex + count; //the first index of the next page\n //if we don't calculate total on this request\n if (!this.needTotal && !this.elasticChunks) {\n if (fromIndex >= this.total) {\n return Promise.resolve([]);\n }\n if (endIndex > this.total) {\n endIndex = this.total;\n }\n }\n if (this.isInMemory && endIndex > this.cachedRows.length) {\n endIndex = this.cachedRows.length;\n }\n var allChunksCached = endIndex <= this.cachedRows.length;\n if (allChunksCached) {\n return Promise.resolve(this.cachedRows.slice(fromIndex, endIndex));\n }\n //if loader is not defined\n if (!this.loader) {\n throw \"Loader is not defined. Can't get the rows from \".concat(fromIndex, \" to \").concat(endIndex);\n }\n // we need total only for the first request\n var needTotal = this.needTotal;\n if (this.needTotal) {\n this.needTotal = false;\n }\n var offset = this.cachedRows.length;\n var limit = endIndex - offset;\n if (limit < this._chunkSize) {\n limit = this._chunkSize;\n }\n var resultPromise = this.loader.loadChunk({\n offset: offset,\n limit: limit,\n needTotal: needTotal\n })\n .then(function (result) {\n if (needTotal) {\n _this.total = result.total;\n }\n Array.prototype.push.apply(_this.cachedRows, result.table.getCachedRows());\n if (endIndex > _this.cachedRows.length) {\n endIndex = _this.cachedRows.length;\n }\n if (_this.elasticChunks) {\n var count_1 = result.table.getCachedCount();\n if (count_1 < limit) {\n _this.total = _this.cachedRows.length;\n }\n }\n _this.fireUpdated();\n return _this.cachedRows.slice(fromIndex, endIndex);\n });\n return resultPromise;\n };\n EasyDataTable.prototype.getRow = function (index) {\n return this.getRows({ offset: index, limit: 1 })\n .then(function (rows) { return rows.length > 0 ? rows[0] : null; });\n };\n EasyDataTable.prototype.getTotal = function () {\n return this.total;\n };\n EasyDataTable.prototype.setTotal = function (total) {\n this.total = total;\n this.needTotal = false;\n };\n EasyDataTable.prototype.getCachedCount = function () {\n return this.cachedRows.length;\n };\n EasyDataTable.prototype.clear = function () {\n this.columns.clear();\n this.cachedRows = [];\n this.total = 0;\n this.needTotal = !this._elasticChunks;\n this.fireUpdated();\n };\n EasyDataTable.prototype.createRow = function (dataOrRow) {\n var _this = this;\n var dateIdx = this._columns.getDateColumnIndexes();\n var values = new Array(this._columns.count);\n var getValue = dataOrRow instanceof DataRow\n ? function (colId) { return dataOrRow.getValue(colId); }\n : function (colId) { return dataOrRow[colId]; };\n if (dataOrRow) {\n this.columns.getItems().forEach(function (column) {\n var value = getValue(column.id);\n var index = _this.columns.getIndex(column.id);\n values[index] = (dateIdx.indexOf(index) >= 0)\n ? _this.mapDate(value, column.type)\n : value;\n });\n }\n return new DataRow(this._columns, values);\n };\n EasyDataTable.prototype.mapDate = function (value, dtype) {\n if (value) {\n var result = new Date(value);\n if (isNaN(result.getTime())\n && dtype == DataType.Time) {\n result = utils.strToTime(value);\n }\n return result;\n }\n return null;\n };\n EasyDataTable.prototype.addRow = function (rowOrValues) {\n var newRow;\n if (Array.isArray(rowOrValues)) {\n var values = rowOrValues;\n var dateIdx = this._columns.getDateColumnIndexes();\n if (dateIdx.length > 0) {\n for (var _i = 0, dateIdx_1 = dateIdx; _i < dateIdx_1.length; _i++) {\n var idx = dateIdx_1[_i];\n if (values[idx]) {\n values[idx] = this.mapDate(values[idx], this._columns.get(idx).type);\n }\n }\n }\n newRow = new DataRow(this._columns, values);\n }\n else {\n newRow = this.createRow(rowOrValues);\n }\n this.cachedRows.push(newRow);\n var cachedTotal = this.getCachedCount();\n if (cachedTotal > this.total) {\n this.total = cachedTotal;\n }\n return newRow;\n };\n EasyDataTable.prototype.getCachedRows = function () {\n return this.cachedRows;\n };\n EasyDataTable.prototype.totalIsKnown = function () {\n if (this.elasticChunks) {\n var count = this.getCachedCount();\n return count === this.total;\n }\n return !this.needTotal;\n };\n EasyDataTable.prototype.fireUpdated = function () {\n if (this.onUpdate) {\n this.onUpdate(this);\n }\n };\n return EasyDataTable;\n}());\nexport { EasyDataTable };\n//# sourceMappingURL=easy_data_table.js.map","/**\n * EasyData representation of GUID.\n */\nvar EasyGuid = /** @class */ (function () {\n function EasyGuid() {\n }\n /**\n * Generates new GUID.\n * @returns The string representation of GUID.\n */\n EasyGuid.newGuid = function () {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n return EasyGuid;\n}());\nexport { EasyGuid };\n//# sourceMappingURL=easy_guid.js.map","import { EasyGuid } from '../utils/easy_guid';\n/**\n * The representation of event emitter.\n */\nvar EventEmitter = /** @class */ (function () {\n /**\n * The default constructor.\n * @param source The source.\n */\n function EventEmitter(source) {\n this.silentMode = 0;\n this.events = new Array();\n this.source = source;\n }\n /**\n * Subscries to the event.\n * @param eventType The event type.\n * @param callback The callback.\n * @returns The subscribtion ID.\n */\n EventEmitter.prototype.subscribe = function (eventType, callback) {\n var event = this.getEventRecByType(eventType);\n var eventCallback = {\n id: EasyGuid.newGuid(),\n callback: callback\n };\n if (event) {\n event.eventCallbacks.push(eventCallback);\n }\n else {\n event = {\n type: eventType,\n eventCallbacks: new Array(eventCallback)\n };\n this.events.push(event);\n }\n return eventCallback.id;\n };\n /**\n * Unsubsribes from the event.\n * @param eventType The event type.\n * @param callbackId The subscribtion ID.\n */\n EventEmitter.prototype.unsubscribe = function (eventType, callbackId) {\n var event = this.getEventRecByType(eventType);\n if (event) {\n var index = -1;\n for (index = 0; index < event.eventCallbacks.length; index++) {\n if (event.eventCallbacks[index].id === callbackId) {\n break;\n }\n }\n if (index >= 0) {\n event.eventCallbacks.splice(index, 1);\n }\n }\n };\n /**\n * Fires the event.\n * @param eventType The event type.\n * @param data The event data.\n * @param postpone The postpone.\n * @param force To fire force. If value is `true`, ignores silent mode.\n */\n EventEmitter.prototype.fire = function (eventType, data, postpone, force) {\n if (postpone === void 0) { postpone = 0; }\n if (force === void 0) { force = false; }\n if (this.silentMode && !force) {\n return;\n }\n var eventRec = this.getEventRecByType(eventType);\n if (eventRec) {\n var eqevent_1 = {\n type: eventType,\n source: this.source,\n data: data\n };\n var emitAllFunc = function () {\n for (var _i = 0, _a = eventRec.eventCallbacks; _i < _a.length; _i++) {\n var callback = _a[_i];\n callback.callback(eqevent_1);\n }\n };\n if (postpone > 0) {\n setTimeout(emitAllFunc, postpone);\n }\n else {\n emitAllFunc();\n }\n }\n };\n /**\n * Enters to silent mode.\n */\n EventEmitter.prototype.enterSilentMode = function () {\n this.silentMode++;\n };\n /**\n * Exits from silent mode.\n */\n EventEmitter.prototype.exitSilentMode = function () {\n if (this.silentMode) {\n this.silentMode--;\n }\n };\n /**\n * Checks if emitter is in silent mode.\n * @return `true`, if silent mode is enable.\n */\n EventEmitter.prototype.isSilent = function () {\n return this.silentMode > 0;\n };\n EventEmitter.prototype.getEventRecByType = function (eventType) {\n for (var _i = 0, _a = this.events; _i < _a.length; _i++) {\n var event_1 = _a[_i];\n if (event_1.type == eventType) {\n return event_1;\n }\n }\n return null;\n };\n return EventEmitter;\n}());\nexport { EventEmitter };\n//# sourceMappingURL=event_emitter.js.map","export function repeatString(str, times) {\n return str.repeat(times);\n}\nexport function reverseString(str) {\n return str.split(\"\").reverse().join(\"\");\n}\nexport function strEndsWith(str, symbol) {\n return str && str.lastIndexOf(symbol) == (str.length - symbol.length);\n}\n/**\n * Adds two paths and returns the result\n * Correctly processes leading and trailing slashes\n * @param path1\n * @param path2\n */\nexport function combinePath(path1, path2) {\n var result = path1;\n if (result != null && result.length > 0) {\n if (result.charAt(result.length - 1) != '/')\n result += \"/\";\n result += path2;\n }\n else {\n result = path2;\n }\n return result;\n}\n//# sourceMappingURL=string_utils.js.map","import { i18n } from './i18n';\ni18n.resetLocales();\n//# sourceMappingURL=load_default_locale_settings.js.map","//types\nexport * from './types/data_type';\nexport * from './types/entity_attr_kind';\nexport * from './types/editor_tag';\n//http\nexport * from './http/http_method';\nexport * from './http/http_request';\nexport * from './http/http_client';\n//meta data dto\nexport * from './meta/dto/meta_data_dto';\nexport * from './meta/dto/meta_entity_dto';\nexport * from './meta/dto/value_editor_dto';\n//meta data\nexport * from './meta/meta_data';\nexport * from './meta/meta_entity';\nexport * from './meta/value_editor';\n//data\nexport * from './data/aggr_structures';\nexport * from './data/aggr_settings';\nexport * from './data/data_column';\nexport * from './data/data_loader';\nexport * from './data/data_row';\nexport * from './data/easy_data_table';\n//event\nexport * from './event/event_emitter';\n//i18n\nexport * from './i18n/i18n';\n//utils\nexport * from './utils/easy_guid';\nexport * from './utils/string_utils';\nexport * from './utils/utils';\nexport * from './utils/liquid';\nimport './i18n/load_default_locale_settings';\nif (typeof Object.values !== 'function') {\n Object.values = function (obj) {\n return Object.keys(obj).map(function (key) { return obj[key]; });\n };\n}\nif (typeof Math.trunc !== 'function') {\n Math.trunc = function (x) {\n if (isNaN(x)) {\n return NaN;\n }\n if (x > 0) {\n return Math.floor(x);\n }\n return Math.ceil(x);\n };\n}\n//# sourceMappingURL=public_api.js.map","import { \r\n DataLoader, DataRow, \r\n EasyDataTable, utils as dataUtils \r\n} from '@easydata/core';\r\n\r\nimport { DataFilter } from './data_filter';\r\n\r\nexport class TextDataFilter implements DataFilter {\r\n private filterValue = '';\r\n\r\n //turns off client-side search\r\n //for test purposes\r\n private justServerSide = false;\r\n\r\n constructor (\r\n private loader: DataLoader, \r\n private sourceTable: EasyDataTable, \r\n private sourceId: string,\r\n private isLookup = false) {\r\n }\r\n\r\n public getValue() {\r\n return this.filterValue;\r\n }\r\n \r\n public apply(value: string): Promise<EasyDataTable> {\r\n this.filterValue = value;\r\n\r\n if (this.filterValue) {\r\n return this.applyCore();\r\n }\r\n else {\r\n return this.clear();\r\n }\r\n }\r\n\r\n public clear(): Promise<EasyDataTable> {\r\n this.filterValue = '';\r\n return Promise.resolve(this.sourceTable);\r\n }\r\n\r\n private applyCore(): Promise<EasyDataTable> {\r\n if (this.sourceTable.getTotal() == this.sourceTable.getCachedCount() && !this.justServerSide) {\r\n return this.applyInMemoryFilter();\r\n }\r\n else {\r\n const filters = [\r\n { class: \"__substring\", value: this.filterValue }\r\n ]\r\n return this.loader.loadChunk({ \r\n offset: 0, \r\n limit: this.sourceTable.chunkSize, \r\n needTotal: true, \r\n filters: filters,\r\n sourceId: this.sourceId,\r\n lookup: this.isLookup\r\n } as any)\r\n .then(data => {\r\n const filteredTable = new EasyDataTable({\r\n chunkSize: this.sourceTable.chunkSize,\r\n loader: {\r\n loadChunk: (params) => this.loader\r\n .loadChunk({ ...params, filters: filters, sourceId: this.sourceId, lookup: this.isLookup } as any)\r\n }\r\n });\r\n\r\n for (const col of this.sourceTable.columns.getItems()) {\r\n filteredTable.columns.add(col);\r\n }\r\n\r\n filteredTable.setTotal(data.total);\r\n\r\n for (const row of data.table.getCachedRows()) {\r\n filteredTable.addRow(row);\r\n }\r\n\r\n return filteredTable;\r\n })\r\n }\r\n }\r\n\r\n private applyInMemoryFilter(): Promise<EasyDataTable> {\r\n return new Promise((resolve, reject) => {\r\n const filteredTable = new EasyDataTable({\r\n chunkSize: this.sourceTable.chunkSize,\r\n inMemory: true\r\n });\r\n\r\n for(const col of this.sourceTable.columns.getItems()) {\r\n filteredTable.columns.add(col);\r\n } \r\n \r\n const words = this.filterValue.split('||').map(w => w.trim().toLowerCase());\r\n const suitableColumns = this.sourceTable.columns.getItems()\r\n .filter(col => dataUtils.isNumericType(col.type) \r\n || dataUtils.getStringDataTypes().indexOf(col.type) >= 0)\r\n const hasEnterance = (row: DataRow) => {\r\n for (const col of suitableColumns) {\r\n const value = row.getValue(col.id);\r\n if (value) {\r\n const normalized = value.toString().toLowerCase();\r\n\r\n for(const word of words) {\r\n if (normalized.indexOf(word) >= 0) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n for (const row of this.sourceTable.getCachedRows()) {\r\n if (hasEnterance(row)) {\r\n filteredTable.addRow(row); \r\n }\r\n }\r\n\r\n filteredTable.setTotal(filteredTable.getCachedCount());\r\n\r\n resolve(filteredTable);\r\n });\r\n } \r\n}","import { browserUtils } from './browser_utils';\n/**\n * Wraps all the elements inside \"parent\" by \"wrapper\" element\n * @param parent The element to add wrapper to.\n * @param wrapper The element that will wrap child elements.\n */\nexport function wrapInner(parent, wrapper) {\n parent.appendChild(wrapper);\n while (parent.firstChild !== wrapper) {\n wrapper.appendChild(parent.firstChild);\n }\n}\n/**\n * Creates ands adds a new [[HTMLElement]] to \"parent\"\n * @param parent The element to add new element to.\n * @param tag Html tag of the new element.\n * @param options The options. In particular, options.cssClass sets the new element class.\n * @returns New element.\n */\nexport function addElement(parent, tag, options) {\n var element = document.createElement(tag);\n var opts = options || {};\n if (opts.cssClass) {\n element.className = opts.cssClass;\n }\n parent.appendChild(element);\n return element;\n}\n/**\n * Adds css class to the html element.\n * @param element The element to add css class to.\n * @param className The name of the css class to be added.\n */\nexport function addCssClass(element, className) {\n element.className = (element.className)\n ? element.className + ' ' + className\n : className;\n}\n/**\n * Hides the html element.\n * @param element The element to be hidden.\n */\nexport function hideElement(element) {\n element.style.display = 'none';\n}\n/**\n * Shows the html element.\n * @param element The element to be shown.\n * @param display The value of \"display\" style to be set. Default value is \"block\".\n */\nexport function showElement(element, display) {\n if (!display) {\n display = '';\n }\n element.style.display = display;\n}\n/**\n * Hides the \"first\" element and shows the \"second\".\n * @param first The element to be hidden.\n * @param second The element to be shown.\n * @param options The options. The following options are applied:\n * - display - the value of \"display\" style to be set. Default value is \"block\"\n * - duration - the duration of fading in and out\n * - complete - the callback to be called when toggle is complete\n */\nexport function toggleVisibility(first, second, options) {\n if (!options) {\n options = {};\n }\n if (!options.display) {\n options.display = '';\n }\n if (!options.duration) {\n options.duration = 200;\n }\n //TODO: later we need to make it fading in and out\n hideElement(first);\n showElement(second, options.display);\n if (options.complete) {\n options.complete();\n }\n}\n/**\n * Checks if element is visible\n * @param element The element to check.\n * @returns `true` if visible, otherwise - `false`.\n */\nexport function isVisible(element) {\n return element.style.display != 'none'\n && element.offsetWidth != 0\n && element.offsetHeight != 0;\n}\nexport function createBrowserEvent(eventName) {\n var event;\n if (typeof (Event) === 'function') {\n event = new Event(eventName);\n }\n else {\n event = document.createEvent('Event');\n event.initEvent(eventName, true, true);\n }\n return event;\n}\nexport function getViewportSize() {\n var width = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\n var height = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);\n return {\n width: width,\n height: height\n };\n}\nexport function getDocSize() {\n if (browserUtils.IsIE())\n return getWinSize();\n var width = Math.max(document.documentElement.clientWidth, document.body.clientWidth || 0);\n var height = Math.max(document.documentElement.clientHeight, document.body.clientHeight || 0);\n return {\n width: width,\n height: height\n };\n}\nexport function getScrollPos() {\n var body = document.body;\n var docElem = document.documentElement;\n return {\n top: window.pageYOffset || docElem.scrollTop || body.scrollTop,\n left: window.pageXOffset || docElem.scrollLeft || body.scrollLeft\n };\n}\nexport function getElementAbsolutePos(element) {\n var res = { x: 0, y: 0 };\n if (element !== null) {\n var position = offset(element);\n res = { x: position.left, y: position.top };\n }\n return res;\n}\nfunction offset(element) {\n var defaultBoundingClientRect = { top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 };\n var box;\n try {\n box = element.getBoundingClientRect();\n }\n catch (_a) {\n box = defaultBoundingClientRect;\n }\n var body = document.body;\n var docElem = document.documentElement;\n var scollPos = getScrollPos();\n var scrollTop = scollPos.top;\n var scrollLeft = scollPos.left;\n var clientTop = docElem.clientTop || body.clientTop || 0;\n var clientLeft = docElem.clientLeft || body.clientLeft || 0;\n var top = box.top + scrollTop - clientTop;\n var left = box.left + scrollLeft - clientLeft;\n return { top: Math.round(top), left: Math.round(left) };\n}\nexport function getWinSize() {\n return {\n width: window.innerWidth,\n height: window.innerHeight\n };\n}\nexport function slideDown(target, duration, callback) {\n target.style.removeProperty('display');\n var display = window.getComputedStyle(target).display;\n if (display === 'none')\n display = 'block';\n target.style.display = display;\n var height = target.offsetHeight;\n target.style.overflow = 'hidden';\n target.style.height = 0 + 'px';\n target.style.paddingTop = 0 + 'px';\n target.style.paddingBottom = 0 + 'px';\n target.style.marginTop = 0 + 'px';\n target.style.marginBottom = 0 + 'px';\n target.offsetHeight;\n target.style.boxSizing = 'border-box';\n target.style.transitionProperty = \"height, margin, padding\";\n target.style.transitionDuration = duration + 'ms';\n target.style.height = height + 'px';\n target.style.removeProperty('padding-top');\n target.style.removeProperty('padding-bottom');\n target.style.removeProperty('margin-top');\n target.style.removeProperty('margin-bottom');\n window.setTimeout(function () {\n target.style.removeProperty('height');\n target.style.removeProperty('overflow');\n target.style.removeProperty('transition-duration');\n target.style.removeProperty('transition-property');\n target.style.removeProperty('box-sizing');\n if (callback) {\n callback();\n }\n }, duration);\n}\nexport function slideUp(target, duration, callback) {\n target.style.transitionProperty = 'height, margin, padding';\n target.style.transitionDuration = duration + 'ms';\n target.style.boxSizing = 'border-box';\n target.style.height = target.offsetHeight + 'px';\n target.offsetHeight;\n target.style.overflow = 'hidden';\n target.style.height = 0 + 'px';\n target.style.paddingTop = 0 + 'px';\n target.style.paddingBottom = 0 + 'px';\n target.style.marginTop = 0 + 'px';\n target.style.marginBottom = 0 + 'px';\n window.setTimeout(function () {\n target.style.display = 'none';\n target.style.removeProperty('height');\n target.style.removeProperty('padding-top');\n target.style.removeProperty('padding-bottom');\n target.style.removeProperty('margin-top');\n target.style.removeProperty('margin-bottom');\n target.style.removeProperty('overflow');\n target.style.removeProperty('transition-duration');\n target.style.removeProperty('transition-property');\n target.style.removeProperty('box-sizing');\n if (callback) {\n callback();\n }\n }, duration);\n}\nexport var eqCssPrefix = 'eqjs';\nexport var eqCssMobile = 'eqjs-mobile';\n//# sourceMappingURL=ui-utils.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { mask } from './mask';\nvar DomElementBuilder = /** @class */ (function () {\n function DomElementBuilder(tag, parent) {\n if (typeof tag === \"string\") {\n this.element = document.createElement(tag);\n }\n else {\n this.element = tag;\n }\n if (parent && this.element.parentElement !== parent) {\n parent.appendChild(this.element);\n }\n }\n DomElementBuilder.prototype.addChild = function (tag, childBuilder) {\n var builder = domel(tag, this.element);\n if (childBuilder) {\n childBuilder(builder);\n }\n return this;\n };\n DomElementBuilder.prototype.addChildElement = function (element) {\n if (element) {\n this.element.appendChild(element);\n }\n return this;\n };\n DomElementBuilder.prototype.attr = function (attrId, attrValue) {\n this.element.setAttribute(attrId, attrValue);\n return this;\n };\n DomElementBuilder.prototype.id = function (value) {\n return this.attr(\"id\", value);\n };\n DomElementBuilder.prototype.focus = function () {\n this.element.focus();\n return this;\n };\n DomElementBuilder.prototype.title = function (value) {\n return this.attr('title', value);\n };\n DomElementBuilder.prototype.data = function (dataId, dataValue) {\n if (dataValue === void 0) { dataValue = null; }\n if (dataValue === null) {\n this.element.removeAttribute('data-' + dataId);\n return this;\n }\n else {\n return this.attr('data-' + dataId, dataValue);\n }\n };\n DomElementBuilder.prototype.show = function () {\n return this.removeStyle('display');\n };\n DomElementBuilder.prototype.hide = function (toHide) {\n if (toHide === void 0) { toHide = true; }\n return (toHide) ? this.setStyle('display', 'none') : this;\n };\n DomElementBuilder.prototype.visible = function (isVisible) {\n if (isVisible === void 0) { isVisible = true; }\n return isVisible ? this.setStyle('visibility', 'visible') : this.setStyle('visibility', 'hidden');\n };\n DomElementBuilder.prototype.isVisible = function () {\n return !!(this.element.offsetWidth || this.element.offsetHeight || this.element.getClientRects().length);\n };\n DomElementBuilder.prototype.addClass = function (className) {\n var classNames = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n classNames[_i - 1] = arguments[_i];\n }\n if (className) {\n var fullList = __spreadArray(__spreadArray([], className.trim().split(\" \"), true), classNames, true);\n for (var i = 0; i < fullList.length; i++)\n this.element.classList.add(fullList[i]);\n }\n return this;\n };\n DomElementBuilder.prototype.removeClass = function (className) {\n var classNames = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n classNames[_i - 1] = arguments[_i];\n }\n if (className) {\n var fullList = __spreadArray(__spreadArray([], className.trim().split(\" \"), true), classNames, true);\n for (var i = 0; i < fullList.length; i++)\n this.element.classList.remove(fullList[i]);\n }\n return this;\n };\n DomElementBuilder.prototype.toggleClass = function (className, force) {\n if (force === void 0) { force = undefined; }\n if (className) {\n this.element.classList.toggle(className, force);\n }\n return this;\n };\n DomElementBuilder.prototype.on = function (eventType, listener) {\n var eventTypes = eventType.split(' ');\n for (var i = 0; i < eventTypes.length; i++) {\n this.element.addEventListener(eventTypes[i], listener);\n }\n return this;\n };\n DomElementBuilder.prototype.off = function (eventType, listener) {\n var eventTypes = eventType.split(' ');\n for (var i = 0; i < eventTypes.length; i++) {\n this.element.removeEventListener(eventTypes[i], listener);\n }\n return this;\n };\n DomElementBuilder.prototype.setStyle = function (styleId, styleValue) {\n this.element.style.setProperty(styleId, styleValue);\n return this;\n };\n DomElementBuilder.prototype.removeStyle = function (styleId) {\n this.element.style.removeProperty(styleId);\n return this;\n };\n DomElementBuilder.prototype.text = function (text) {\n this.element.innerText = text;\n return this;\n };\n DomElementBuilder.prototype.html = function (html) {\n this.element.innerHTML = html;\n return this;\n };\n DomElementBuilder.prototype.clear = function () {\n var oldElem = this.element;\n this.element = document.createElement(this.element.tagName);\n oldElem.replaceWith(this.element);\n };\n DomElementBuilder.prototype.addText = function (text) {\n var textEl = document.createTextNode(text);\n this.element.appendChild(textEl);\n return this;\n };\n DomElementBuilder.prototype.addHtml = function (html) {\n this.element.innerHTML += html;\n return this;\n };\n DomElementBuilder.prototype.toDOM = function () {\n return this.element;\n };\n DomElementBuilder.prototype.appendTo = function (parent) {\n if (parent) {\n parent.appendChild(this.element);\n }\n return this;\n };\n return DomElementBuilder;\n}());\nexport { DomElementBuilder };\nvar DomTextAreaElementBuilder = /** @class */ (function (_super) {\n __extends(DomTextAreaElementBuilder, _super);\n function DomTextAreaElementBuilder(element, parent) {\n var _this = this;\n if (element) {\n _this = _super.call(this, element, parent) || this;\n }\n else {\n _this = _super.call(this, \"textarea\", parent) || this;\n }\n return _this;\n }\n DomTextAreaElementBuilder.prototype.name = function (value) {\n this.element.name = value;\n return this;\n };\n DomTextAreaElementBuilder.prototype.rows = function (rows) {\n this.element.rows = rows;\n return this;\n };\n DomTextAreaElementBuilder.prototype.cols = function (cols) {\n this.element.cols = cols;\n return this;\n };\n DomTextAreaElementBuilder.prototype.value = function (value) {\n this.element.value = value;\n return this;\n };\n return DomTextAreaElementBuilder;\n}(DomElementBuilder));\nexport { DomTextAreaElementBuilder };\nvar DomInputElementBuilder = /** @class */ (function (_super) {\n __extends(DomInputElementBuilder, _super);\n function DomInputElementBuilder(element, parent) {\n var _this = this;\n if (element) {\n _this = _super.call(this, element, parent) || this;\n }\n else {\n _this = _super.call(this, \"input\", parent) || this;\n }\n return _this;\n }\n DomInputElementBuilder.prototype.name = function (value) {\n this.element.name = value;\n return this;\n };\n DomInputElementBuilder.prototype.type = function (value) {\n this.element.type = value;\n return this;\n };\n DomInputElementBuilder.prototype.size = function (value) {\n this.element.size = value;\n return this;\n };\n DomInputElementBuilder.prototype.value = function (value) {\n if (value instanceof Date) {\n this.element.valueAsDate = value;\n }\n else if (typeof value === \"number\") {\n this.element.valueAsNumber = value;\n }\n else {\n this.element.value = value;\n }\n return this;\n };\n DomInputElementBuilder.prototype.mask = function (maskPattern) {\n mask(this.element, maskPattern);\n return this;\n };\n return DomInputElementBuilder;\n}(DomElementBuilder));\nexport { DomInputElementBuilder };\nvar DomSelectElementBuilder = /** @class */ (function (_super) {\n __extends(DomSelectElementBuilder, _super);\n function DomSelectElementBuilder(element, parent) {\n var _this = this;\n if (element) {\n _this = _super.call(this, element, parent) || this;\n }\n else {\n _this = _super.call(this, \"select\", parent) || this;\n }\n return _this;\n }\n DomSelectElementBuilder.prototype.addOption = function (value) {\n var option = document.createElement('option');\n if (typeof value === \"string\") {\n option.value = value;\n option.innerHTML = value;\n }\n else {\n option.value = value.value;\n option.innerHTML = value.title || value.value;\n option.selected = value.selected || false;\n }\n this.element.appendChild(option);\n return this;\n };\n DomSelectElementBuilder.prototype.value = function (value) {\n this.element.value = value;\n return this;\n };\n return DomSelectElementBuilder;\n}(DomElementBuilder));\nexport { DomSelectElementBuilder };\nexport function domel(tag, parent) {\n if (tag === \"div\" || tag instanceof HTMLDivElement) {\n return new DomElementBuilder(tag, parent);\n }\n if (tag === \"span\" || tag instanceof HTMLSpanElement) {\n return new DomElementBuilder(tag, parent);\n }\n else if (tag === \"a\" || tag instanceof HTMLAnchorElement) {\n return new DomElementBuilder(tag, parent);\n }\n else if (tag === \"button\" || tag instanceof HTMLButtonElement) {\n return new DomElementBuilder(tag, parent);\n }\n else if (tag === \"img\" || tag instanceof HTMLImageElement) {\n return new DomElementBuilder(tag, parent);\n }\n else if (tag === \"input\" || tag instanceof HTMLInputElement) {\n return new DomInputElementBuilder(tag instanceof HTMLInputElement ? tag : null, parent);\n }\n else if (tag === \"textarea\" || tag instanceof HTMLTextAreaElement) {\n return new DomTextAreaElementBuilder(tag instanceof HTMLTextAreaElement ? tag : null, parent);\n }\n else if (tag === \"select\" || tag instanceof HTMLSelectElement) {\n return new DomSelectElementBuilder(tag instanceof HTMLSelectElement ? tag : null, parent);\n }\n return new DomElementBuilder(tag, parent);\n}\n//# sourceMappingURL=dom_elem_builder.js.map","export function mask(input, maskPattern) {\n var d = { 9: '[0-9]', a: '[a-z]' };\n var mask = maskPattern.split('');\n var keyDownHandler = function (e) {\n // backspace key or delete key\n if (e.keyCode === 8 || e.keyCode === 46) {\n e.preventDefault();\n var mskd = [];\n var startSelection = input.selectionStart;\n if (startSelection == 0)\n return;\n var selection = startSelection;\n var onlyLodash = true;\n for (var index = mask.length - 1; index >= 0; index--) {\n var el = mask[index];\n if (d[el]) {\n var t = new RegExp(d[el], 'i').test(input.value.charAt(index));\n if (t && index != startSelection - 1) {\n onlyLodash = false;\n }\n if (index === startSelection - 1)\n selection--;\n mskd.push(t && index != startSelection - 1\n ? input.value.charAt(index)\n : '_');\n }\n else {\n if (index === selection - 1)\n selection--;\n if (startSelection - 1 === index)\n startSelection--;\n mskd.push(el);\n }\n }\n input.value = !onlyLodash ? mskd.reverse().join('') : '';\n input.selectionStart = input.selectionEnd = selection < 0 ? 0 : selection;\n var event_1 = document.createEvent('Event');\n event_1.initEvent('input', true, true);\n input.dispatchEvent(event_1);\n }\n };\n var keyPressHandler = function (e) {\n var char = String.fromCharCode(e.charCode);\n if (char) {\n e.preventDefault();\n var mskd_1 = [];\n var selectionStart_1 = input.selectionStart;\n var selection_1 = selectionStart_1;\n mask.forEach(function (el, index) {\n if (d[el]) {\n var ch = (index != selectionStart_1)\n ? input.value.charAt(index)\n : char;\n var t = new RegExp(d[el], 'i').test(ch);\n mskd_1.push(t ? ch : '_');\n if (t && selectionStart_1 === index)\n selection_1++;\n }\n else {\n mskd_1.push(el);\n if (selection_1 === index)\n selection_1++;\n if (selectionStart_1 === index)\n selectionStart_1++;\n }\n });\n input.value = mskd_1.join('');\n input.selectionStart = input.selectionEnd = selection_1;\n var event_2 = document.createEvent('Event');\n event_2.initEvent('input', true, true);\n input.dispatchEvent(event_2);\n }\n };\n var inputHandler = function (e) {\n if (e.type === 'focus' && input.value !== '')\n return;\n var mskd = [];\n var startSelection = input.selectionStart;\n mask.forEach(function (el, index) {\n if (d[el]) {\n var t = new RegExp(d[el], 'i').test(input.value.charAt(index));\n mskd.push(t ? input.value.charAt(index) : '_');\n }\n else {\n mskd.push(el);\n }\n });\n input.value = mskd.join('');\n input.selectionStart = input.selectionEnd = startSelection;\n };\n input.addEventListener('keydown', keyDownHandler);\n input.addEventListener('keypress', keyPressHandler);\n input.addEventListener('input', inputHandler);\n input.addEventListener('focus', inputHandler);\n}\n//# sourceMappingURL=mask.js.map","import { utils } from '@easydata/core';\nimport { getElementAbsolutePos } from './ui-utils';\nimport { domel } from '../utils/dom_elem_builder';\nvar touchEventIsDefined = typeof TouchEvent !== 'undefined';\nexport var DropEffect;\n(function (DropEffect) {\n DropEffect[\"None\"] = \"none\";\n DropEffect[\"Allow\"] = \"allow\";\n DropEffect[\"Forbid\"] = \"forbid\";\n})(DropEffect || (DropEffect = {}));\nvar EqDragEvent = /** @class */ (function () {\n function EqDragEvent(item, dragImage, sourceEvent) {\n this.dropEffect = DropEffect.Allow;\n this.pageX = 0;\n this.pageY = 0;\n this.item = item;\n this.dragImage = dragImage;\n this.data = item.data;\n this.sourceEvent = sourceEvent;\n if (sourceEvent && sourceEvent instanceof MouseEvent) {\n this.pageX = sourceEvent.pageX,\n this.pageY = sourceEvent.pageY;\n }\n if (sourceEvent && touchEventIsDefined && sourceEvent instanceof TouchEvent\n && sourceEvent.touches[0]) {\n this.pageX = sourceEvent.touches[0].pageX,\n this.pageY = sourceEvent.touches[0].pageY;\n }\n }\n return EqDragEvent;\n}());\nexport { EqDragEvent };\nvar Position = /** @class */ (function () {\n function Position(ev) {\n if (ev && ev instanceof MouseEvent) {\n this.x = ev.pageX,\n this.y = ev.pageY;\n }\n if (ev && touchEventIsDefined && ev instanceof TouchEvent && ev.touches[0]) {\n this.x = ev.touches[0].pageX,\n this.y = ev.touches[0].pageY;\n }\n }\n return Position;\n}());\nvar DragManager = /** @class */ (function () {\n function DragManager() {\n this.delta = 5;\n this.draggableItem = null;\n this.dragImage = null;\n this.finishedSuccessfully = false;\n this.mouseDownPosition = null;\n this.containerDescriptors = [];\n this.containerDescriptorIndex = -1;\n this.dropEffect = DropEffect.None;\n this.classPrefix = 'eqjs-drop';\n this.DRAG_DISABLED_ATTR = 'drag-disabled';\n }\n DragManager.prototype.registerDraggableItem = function (descriptor) {\n var _this = this;\n var element = descriptor.element;\n if (!element) {\n throw Error(\"Element in draggle item is null or undefined\");\n }\n element.ondragstart = function () {\n return false;\n };\n var detectDragging = function (ev) {\n if (element.hasAttribute(_this.DRAG_DISABLED_ATTR)) {\n return;\n }\n ev.preventDefault();\n if (ev instanceof MouseEvent) {\n ev.stopPropagation();\n }\n var cursorPosition = new Position(ev);\n if (Math.abs(cursorPosition.x - _this.mouseDownPosition.x) > _this.delta\n || Math.abs(cursorPosition.y - _this.mouseDownPosition.y) > _this.delta) {\n startDragging(ev);\n }\n };\n var mouseMoveEventListener = function (ev) {\n _this.mouseMoveDragListener(ev);\n };\n var startDragging = function (ev) {\n ev.preventDefault();\n ev.stopPropagation();\n element.removeEventListener('mousemove', detectDragging);\n element.removeEventListener('touchmove', detectDragging);\n _this.finishedSuccessfully = false;\n if (descriptor.beforeDragStart)\n descriptor.beforeDragStart();\n _this.dragImage = domel('div')\n .setStyle('position', 'absolute')\n .setStyle('z-index', '65530')\n .toDOM();\n document.body.appendChild(_this.dragImage);\n _this.dragImage.appendChild(element.cloneNode(true));\n if (descriptor.renderer) {\n descriptor.renderer(_this.dragImage);\n }\n _this.dropEffect = DropEffect.None;\n _this.updateCusror(_this.dropEffect);\n _this.updateImageClass(_this.dropEffect);\n _this.draggableItem = {\n element: element,\n scope: descriptor.scope,\n data: descriptor.data\n };\n _this.updateDragItemPosition(ev);\n var event = new EqDragEvent(_this.draggableItem, _this.dragImage, ev);\n event.dropEffect = _this.dropEffect;\n if (descriptor.onDragStart) {\n descriptor.onDragStart(event);\n }\n if (_this.dropEffect !== event.dropEffect) {\n _this.dropEffect = event.dropEffect;\n _this.updateImageClass(_this.dropEffect);\n }\n document.addEventListener('mousemove', mouseMoveEventListener, true);\n document.addEventListener('touchmove', mouseMoveEventListener, true);\n };\n var mouseDownListener = function (ev) {\n if (touchEventIsDefined && ev instanceof TouchEvent) {\n ev.preventDefault();\n }\n _this.mouseDownPosition = new Position(ev);\n element.addEventListener('mousemove', detectDragging);\n element.addEventListener('touchmove', detectDragging);\n document.addEventListener('mouseup', mouseUpListener);\n document.addEventListener('touchend', mouseUpListener);\n };\n element.addEventListener('mousedown', mouseDownListener);\n element.addEventListener('touchstart', mouseDownListener);\n var mouseUpListener = function (ev) {\n _this.mouseDownPosition = null;\n element.removeEventListener('mousemove', detectDragging);\n element.removeEventListener('touchmove', detectDragging);\n document.removeEventListener('mousemove', mouseMoveEventListener, true);\n document.removeEventListener('touchmove', mouseMoveEventListener, true);\n if (_this.draggableItem) {\n endDraggind(ev);\n }\n };\n var endDraggind = function (ev) {\n try {\n if (_this.containerDescriptorIndex >= 0) {\n var dropContDesc = _this.containerDescriptors[_this.containerDescriptorIndex];\n var container = {\n element: dropContDesc.element,\n scopes: dropContDesc.scopes,\n data: dropContDesc.data\n };\n var event_1 = new EqDragEvent(_this.draggableItem, _this.dragImage, ev);\n try {\n if (container.scopes.indexOf(_this.draggableItem.scope) >= 0\n && _this.dropEffect === DropEffect.Allow) {\n _this.finishedSuccessfully = true;\n if (dropContDesc.onDrop) {\n dropContDesc.onDrop(container, event_1);\n }\n }\n }\n finally {\n if (dropContDesc.onDragLeave) {\n dropContDesc.onDragLeave(container, event_1);\n }\n }\n }\n }\n finally {\n try {\n var event_2 = new EqDragEvent(_this.draggableItem, _this.dragImage, ev);\n event_2.data.finishedSuccessfully = _this.finishedSuccessfully;\n if (descriptor.onDragEnd) {\n descriptor.onDragEnd(event_2);\n }\n }\n finally {\n _this.draggableItem = null;\n if (_this.dragImage && _this.dragImage.parentElement) {\n _this.dragImage.parentElement.removeChild(_this.dragImage);\n }\n _this.dragImage = null;\n _this.finishedSuccessfully = false;\n document.removeEventListener('mouseup', mouseUpListener);\n document.removeEventListener('touchend', mouseUpListener);\n }\n }\n };\n };\n DragManager.prototype.registerDropContainer = function (descriptor) {\n var element = descriptor.element;\n if (!element) {\n throw Error(\"Element in drop container is null or undefined\");\n }\n this.containerDescriptors.push(descriptor);\n };\n DragManager.prototype.removeDropContainer = function (descriptorOrSlot) {\n var descs = this.containerDescriptors\n .filter(function (desc) { return desc === descriptorOrSlot\n || desc.element == descriptorOrSlot; });\n if (descs) {\n for (var _i = 0, descs_1 = descs; _i < descs_1.length; _i++) {\n var desc = descs_1[_i];\n utils.removeArrayItem(this.containerDescriptors, desc);\n }\n }\n };\n DragManager.prototype.mouseMoveDragListener = function (ev) {\n if (ev instanceof MouseEvent) {\n ev.preventDefault();\n }\n ev.stopPropagation();\n this.updateDragItemPosition(ev);\n if (this.containerDescriptorIndex == -1) {\n for (var i = 0; i < this.containerDescriptors.length; i++) {\n var descriptor = this.containerDescriptors[i];\n if (this.detectDragEnterEvent(descriptor.element, ev)) {\n this.containerDescriptorIndex = i;\n break;\n }\n }\n if (this.containerDescriptorIndex >= 0) {\n this.dragEnterEvent(ev);\n }\n }\n else {\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\n if (this.detectDragLeaveEvent(descriptor.element, ev)) {\n this.dragLeaveEvent(ev);\n this.containerDescriptorIndex = -1;\n }\n }\n if (this.containerDescriptorIndex >= 0) {\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\n var container = {\n element: descriptor.element,\n scopes: descriptor.scopes,\n data: descriptor.data\n };\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\n var event_3 = new EqDragEvent(this.draggableItem, this.dragImage, ev);\n event_3.dropEffect = this.dropEffect;\n if (descriptor.onDragOver) {\n descriptor.onDragOver(container, event_3);\n }\n }\n }\n };\n DragManager.prototype.updateCusror = function (dropEffect) {\n switch (dropEffect) {\n case DropEffect.Allow:\n this.setCursorStyle(this.dragImage, 'grabbing');\n break;\n case DropEffect.Forbid:\n this.setCursorStyle(this.dragImage, 'no-drop');\n break;\n default:\n this.setCursorStyle(this.dragImage, 'grabbing');\n break;\n }\n };\n DragManager.prototype.updateImageClass = function (dropEffect) {\n this.dragImage.classList.remove(\"\".concat(this.classPrefix, \"-allow\"));\n this.dragImage.classList.remove(\"\".concat(this.classPrefix, \"-forbid\"));\n this.dragImage.classList.remove(\"\".concat(this.classPrefix, \"-none\"));\n switch (dropEffect) {\n case DropEffect.Allow:\n this.dragImage.classList.add(\"\".concat(this.classPrefix, \"-allow\"));\n break;\n case DropEffect.None:\n this.dragImage.classList.add(\"\".concat(this.classPrefix, \"-none\"));\n break;\n case DropEffect.Forbid:\n this.dragImage.classList.add(\"\".concat(this.classPrefix, \"-forbid\"));\n break;\n default:\n this.dragImage.classList.add(\"\".concat(this.classPrefix, \"-none\"));\n break;\n }\n };\n DragManager.prototype.setCursorStyle = function (element, cursor) {\n if (element) {\n element.style.cursor = cursor;\n for (var i = 0; i < element.children.length; i++) {\n this.setCursorStyle(element.children[i], cursor);\n }\n }\n };\n DragManager.prototype.updateDragItemPosition = function (ev) {\n if (this.dragImage) {\n var pos = new Position(ev);\n this.dragImage.style.top = (pos.y - this.dragImage.offsetHeight / 2) + 'px';\n this.dragImage.style.left = (pos.x - this.dragImage.offsetWidth / 2) + 'px';\n }\n };\n DragManager.prototype.dragEnterEvent = function (ev) {\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\n var container = {\n element: descriptor.element,\n scopes: descriptor.scopes,\n data: descriptor.data\n };\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\n var event_4 = new EqDragEvent(this.draggableItem, this.dragImage, ev);\n event_4.dropEffect = DropEffect.Allow;\n if (descriptor.onDragEnter) {\n descriptor.onDragEnter(container, event_4);\n }\n this.dropEffect = event_4.dropEffect;\n this.updateCusror(this.dropEffect);\n this.updateImageClass(this.dropEffect);\n }\n else {\n if (this.dropEffect !== DropEffect.Forbid) {\n this.dropEffect = DropEffect.None;\n this.updateCusror(this.dropEffect);\n this.updateImageClass(this.dropEffect);\n }\n }\n };\n DragManager.prototype.dragLeaveEvent = function (ev) {\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\n var container = {\n element: descriptor.element,\n scopes: descriptor.scopes,\n data: descriptor.data\n };\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\n var event_5 = new EqDragEvent(this.draggableItem, this.dragImage, ev);\n event_5.dropEffect = DropEffect.None;\n if (descriptor.onDragLeave) {\n descriptor.onDragLeave(container, event_5);\n }\n this.dropEffect = event_5.dropEffect;\n this.updateCusror(this.dropEffect);\n this.updateImageClass(this.dropEffect);\n }\n };\n DragManager.prototype.detectDragEnterEvent = function (container, ev) {\n var containerPos = getElementAbsolutePos(container);\n var pos = new Position(ev);\n if (pos.y < containerPos.y || pos.y > containerPos.y + container.offsetHeight) {\n return false;\n }\n if (pos.x < containerPos.x || pos.x > containerPos.x + container.offsetWidth) {\n return false;\n }\n return true;\n };\n DragManager.prototype.detectDragLeaveEvent = function (container, ev) {\n var containerPos = getElementAbsolutePos(container);\n var pos = new Position(ev);\n if (pos.y > containerPos.y && pos.y < containerPos.y + container.offsetHeight\n && pos.x > containerPos.x && pos.x < containerPos.x + container.offsetWidth) {\n return false;\n }\n return true;\n };\n return DragManager;\n}());\nexport { DragManager };\n//global variable\nexport var eqDragManager = new DragManager();\n//# sourceMappingURL=drag_manager.js.map","export var AutoResizeColumns;\n(function (AutoResizeColumns) {\n AutoResizeColumns[AutoResizeColumns[\"Always\"] = 0] = \"Always\";\n AutoResizeColumns[AutoResizeColumns[\"Once\"] = 1] = \"Once\";\n AutoResizeColumns[AutoResizeColumns[\"Never\"] = 2] = \"Never\";\n})(AutoResizeColumns || (AutoResizeColumns = {}));\n//# sourceMappingURL=easy_grid_options.js.map","import { i18n, DataType } from '@easydata/core';\nimport { GridColumnAlign } from './easy_grid_columns';\nvar cssPrefix = \"keg\";\nexport var DFMT_REGEX = /{0:(.*?)}/g;\nexport var CellRendererType;\n(function (CellRendererType) {\n CellRendererType[CellRendererType[\"STRING\"] = 1] = \"STRING\";\n CellRendererType[CellRendererType[\"NUMBER\"] = 2] = \"NUMBER\";\n CellRendererType[CellRendererType[\"DATETIME\"] = 3] = \"DATETIME\";\n CellRendererType[CellRendererType[\"BOOL\"] = 4] = \"BOOL\";\n})(CellRendererType || (CellRendererType = {}));\nvar StringCellRendererDefault = function (value, column, cellValueElement, rowElement) {\n var text = value ? value.toString().replace(/\\n/g, '\\u21B5 ') : '';\n cellValueElement.innerText = text;\n cellValueElement.title = text;\n if (column.align == GridColumnAlign.NONE) {\n cellValueElement.classList.add(\"\".concat(cssPrefix, \"-cell-value-align-left\"));\n }\n};\nvar NumberCellRendererDefault = function (value, column, cellValueElement, rowElement) {\n var strValue = (value || '').toString();\n if (typeof value == 'number') {\n if (column.dataColumn && column.dataColumn.displayFormat\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\n strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, function (_, $1) {\n return i18n.numberToStr(value, $1);\n });\n }\n else {\n strValue = value.toLocaleString();\n }\n }\n cellValueElement.innerText = strValue;\n cellValueElement.title = strValue;\n if (column.align == GridColumnAlign.NONE) {\n cellValueElement.classList.add(\"\".concat(cssPrefix, \"-cell-value-align-right\"));\n }\n};\nvar DateTimeCellRendererDefault = function (value, column, cellValueElement, rowElement) {\n var isDate = Object.prototype.toString.call(value) === '[object Date]';\n var strValue = (value || '').toString();\n if (isDate) {\n if (column.dataColumn && column.dataColumn.displayFormat\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\n strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, function (_, $1) {\n return i18n.dateTimeToStr(value, column.type, $1);\n });\n }\n else {\n var locale = i18n.getCurrentLocale();\n var timeOptions = { hour: 'numeric', minute: 'numeric', second: 'numeric' };\n switch (column.type) {\n case DataType.Date:\n strValue = value.toLocaleDateString(locale);\n break;\n case DataType.Time:\n strValue = value.toLocaleTimeString(locale, timeOptions);\n break;\n case DataType.DateTime:\n strValue = \"\".concat(value.toLocaleDateString(locale), \" \").concat(value.toLocaleTimeString(locale, timeOptions));\n break;\n }\n }\n }\n cellValueElement.innerText = strValue;\n cellValueElement.title = strValue;\n if (column.align == GridColumnAlign.NONE) {\n cellValueElement.classList.add(\"\".concat(cssPrefix, \"-cell-value-align-right\"));\n }\n};\nvar BoolCellRendererDefault = function (value, column, cellValueElement, rowElement) {\n if (column.dataColumn && column.dataColumn.displayFormat\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\n var strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, function (_, $1) {\n return i18n.booleanToStr(value, $1);\n });\n return StringCellRendererDefault(strValue, column, cellValueElement, rowElement);\n }\n else {\n cellValueElement.classList.add(\"\".concat(cssPrefix, \"-cell-value-bool\"));\n cellValueElement.classList.add(\"\".concat(cssPrefix, \"-\").concat(value ? 'cell-value-true' : 'cell-value-false'));\n }\n};\nvar GridCellRendererStore = /** @class */ (function () {\n function GridCellRendererStore(options) {\n this.renderers = {};\n this.defaultRenderers = {};\n this.registerRenderer('StringDefault', StringCellRendererDefault);\n this.setDefaultRenderer(CellRendererType.STRING, StringCellRendererDefault);\n this.registerRenderer('NumberDefault', NumberCellRendererDefault);\n this.setDefaultRenderer(CellRendererType.NUMBER, NumberCellRendererDefault);\n this.registerRenderer('DateTimeDefault', DateTimeCellRendererDefault);\n this.setDefaultRenderer(CellRendererType.DATETIME, DateTimeCellRendererDefault);\n this.registerRenderer('BoolDefault', BoolCellRendererDefault);\n this.setDefaultRenderer(CellRendererType.BOOL, BoolCellRendererDefault);\n }\n GridCellRendererStore.prototype.getDefaultRenderer = function (columnType) {\n var cellType = this.getCellType(columnType);\n return this.defaultRenderers[CellRendererType[cellType]];\n };\n GridCellRendererStore.prototype.getDefaultRendererByType = function (rendererType) {\n return this.defaultRenderers[CellRendererType[rendererType]];\n };\n GridCellRendererStore.prototype.setDefaultRenderer = function (cellType, renderer) {\n if (renderer) {\n this.defaultRenderers[CellRendererType[cellType]] = renderer;\n }\n };\n GridCellRendererStore.prototype.getRenderer = function (name) {\n return this.renderers[name];\n };\n GridCellRendererStore.prototype.registerRenderer = function (name, renderer) {\n this.renderers[name] = renderer;\n };\n GridCellRendererStore.prototype.getCellType = function (dataType) {\n switch (dataType) {\n case DataType.Autoinc:\n case DataType.Byte:\n case DataType.Word:\n case DataType.Currency:\n case DataType.Float:\n case DataType.Int32:\n case DataType.Int64:\n return CellRendererType.NUMBER;\n case DataType.Date:\n case DataType.DateTime:\n case DataType.Time:\n return CellRendererType.DATETIME;\n case DataType.Bool:\n return CellRendererType.BOOL;\n default:\n return CellRendererType.STRING;\n }\n };\n return GridCellRendererStore;\n}());\nexport { GridCellRendererStore };\n//# sourceMappingURL=easy_grid_cell_renderer.js.map","import { utils, ColumnAlignment } from '@easydata/core';\nimport { CellRendererType } from \"./easy_grid_cell_renderer\";\nvar DEFAULT_WIDTH_STRING = 250;\nvar ROW_NUM_WIDTH = 60;\nexport var GridColumnAlign;\n(function (GridColumnAlign) {\n GridColumnAlign[GridColumnAlign[\"NONE\"] = 1] = \"NONE\";\n GridColumnAlign[GridColumnAlign[\"LEFT\"] = 2] = \"LEFT\";\n GridColumnAlign[GridColumnAlign[\"CENTER\"] = 3] = \"CENTER\";\n GridColumnAlign[GridColumnAlign[\"RIGHT\"] = 4] = \"RIGHT\";\n})(GridColumnAlign || (GridColumnAlign = {}));\nfunction MapAlignment(alignment) {\n switch (alignment) {\n case ColumnAlignment.Left:\n return GridColumnAlign.LEFT;\n case ColumnAlignment.Center:\n return GridColumnAlign.CENTER;\n case ColumnAlignment.Right:\n return GridColumnAlign.RIGHT;\n default:\n return GridColumnAlign.NONE;\n }\n}\nvar GridColumn = /** @class */ (function () {\n function GridColumn(column, grid, isRowNum) {\n if (isRowNum === void 0) { isRowNum = false; }\n this._label = null;\n this._description = null;\n //public left: number;\n this.align = GridColumnAlign.NONE;\n this.isVisible = true;\n this.isRowNum = false;\n this.dataColumn = column;\n this.grid = grid;\n var widthOptions = grid.options.columnWidths || {};\n if (column) {\n if (column.style.alignment) {\n this.align = MapAlignment(column.style.alignment);\n }\n this.width = (widthOptions && widthOptions[this.type]) ? widthOptions[this.type].default : DEFAULT_WIDTH_STRING;\n this.cellRenderer = this.grid.cellRendererStore.getDefaultRenderer(column.type);\n this._description = column.description;\n }\n else if (isRowNum) {\n this.isRowNum = true;\n this.width = (widthOptions && widthOptions.rowNumColumn) ? widthOptions.rowNumColumn.default : ROW_NUM_WIDTH;\n this._label = '';\n this.cellRenderer = this.grid.cellRendererStore.getDefaultRendererByType(CellRendererType.NUMBER);\n }\n if (grid && grid.options && grid.options.onGetCellRenderer) {\n this.cellRenderer = grid.options.onGetCellRenderer(this, this.cellRenderer) || this.cellRenderer;\n }\n }\n Object.defineProperty(GridColumn.prototype, \"label\", {\n get: function () {\n return this._label ? this._label : this.isRowNum ? '' : this.dataColumn.label;\n },\n set: function (value) {\n this._label = this.label;\n },\n enumerable: false,\n configurable: true\n });\n ;\n Object.defineProperty(GridColumn.prototype, \"description\", {\n /** Get column description. */\n get: function () {\n return this._description;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(GridColumn.prototype, \"type\", {\n get: function () {\n return this.dataColumn ? this.dataColumn.type : null;\n },\n enumerable: false,\n configurable: true\n });\n return GridColumn;\n}());\nexport { GridColumn };\nvar GridColumnList = /** @class */ (function () {\n function GridColumnList(columnList, grid) {\n this.items = [];\n this.grid = grid;\n this.sync(columnList);\n }\n GridColumnList.prototype.sync = function (columnList, hasRowNumCol) {\n if (hasRowNumCol === void 0) { hasRowNumCol = true; }\n this.clear();\n var rowNumCol = new GridColumn(null, this.grid, true);\n this.add(rowNumCol);\n if (!hasRowNumCol) {\n rowNumCol.isVisible = false;\n }\n if (columnList) {\n for (var _i = 0, _a = columnList.getItems(); _i < _a.length; _i++) {\n var column = _a[_i];\n var col = new GridColumn(column, this.grid);\n if (this.grid.options.onSyncGridColumn) {\n this.grid.options.onSyncGridColumn(col);\n }\n this.add(col);\n }\n }\n };\n Object.defineProperty(GridColumnList.prototype, \"count\", {\n get: function () {\n return this.items.length;\n },\n enumerable: false,\n configurable: true\n });\n GridColumnList.prototype.add = function (col) {\n var index = this.items.length;\n this.items.push(col);\n return index;\n };\n GridColumnList.prototype.put = function (index, col) {\n if (index >= 0 && index < this.items.length) {\n this.items[index] = col;\n }\n };\n GridColumnList.prototype.move = function (col, newIndex) {\n var oldIndex = this.items.indexOf(col);\n if (oldIndex >= 0 && oldIndex != newIndex)\n utils.moveArrayItem(this.items, oldIndex, newIndex);\n };\n GridColumnList.prototype.get = function (index) {\n if (index >= 0 && index < this.items.length) {\n return this.items[index];\n }\n else {\n return null;\n }\n };\n // public getIndex(name: string) : number {\n // return this.mapper[name];\n // }\n GridColumnList.prototype.getItems = function () {\n return this.items;\n };\n GridColumnList.prototype.removeAt = function (index) {\n var col = this.get(index);\n this.items.splice(index, 1);\n //delete this.mapper[col.name];\n };\n GridColumnList.prototype.clear = function () {\n this.items = [];\n //this.mapper = {};\n };\n return GridColumnList;\n}());\nexport { GridColumnList };\n//# sourceMappingURL=easy_grid_columns.js.map","export var DialogFooterAlignment;\n(function (DialogFooterAlignment) {\n DialogFooterAlignment[DialogFooterAlignment[\"Left\"] = 1] = \"Left\";\n DialogFooterAlignment[DialogFooterAlignment[\"Center\"] = 2] = \"Center\";\n DialogFooterAlignment[DialogFooterAlignment[\"Right\"] = 3] = \"Right\";\n})(DialogFooterAlignment || (DialogFooterAlignment = {}));\n//# sourceMappingURL=dialog_service.js.map","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { EventEmitter, DataRow, utils, i18n, DataType } from '@easydata/core';\nimport { eqDragManager, DropEffect } from '../utils/drag_manager';\nimport { domel } from '../utils/dom_elem_builder';\nimport { getElementAbsolutePos, eqCssPrefix } from '../utils/ui-utils';\nimport { AutoResizeColumns } from './easy_grid_options';\nimport { GridColumnList, GridColumnAlign } from './easy_grid_columns';\nimport { GridCellRendererStore } from './easy_grid_cell_renderer';\nvar DEFAULT_ROW_HEIGHT = 36;\nvar DEFAULT_ROW_COUNT = 15;\n/** Represents a grid widget with columns rows, paging, custom rendering and more */\nvar EasyGrid = /** @class */ (function () {\n /** Creates and initializes all internal properties of the grid object */\n function EasyGrid(options) {\n this.cssPrefix = \"keg\";\n this.pagination = { page: 1, pageSize: 30, total: 0 };\n this.paginationOptions = {\n maxButtonCount: 10,\n useBootstrap: false //true\n };\n this.defaultDataGridOptions = {\n slot: null,\n dataTable: null,\n fixHeightOnFirstRender: false,\n syncGridColumns: true,\n useRowNumeration: true,\n allowDragDrop: false,\n aggregates: {\n settings: null,\n calculator: null\n },\n paging: {\n enabled: true,\n pageSize: 30,\n pageSizeItems: [20, 30, 50, 100, 200]\n },\n columnWidths: {\n autoResize: AutoResizeColumns.Always,\n stringColumns: {\n min: 100,\n max: 500,\n default: 250\n },\n numberColumns: {\n min: 60,\n default: 120\n },\n boolColumns: {\n min: 50,\n default: 80\n },\n dateColumns: {\n min: 80,\n default: 200\n },\n otherColumns: {\n min: 100,\n max: 500,\n default: 250\n },\n rowNumColumn: {\n min: 40,\n default: 60\n }\n },\n showPlusButton: false,\n viewportRowsCount: null,\n showActiveRow: true\n };\n this.rowsOnPagePromise = null;\n this.containerInitialHeight = 0;\n this.firstRender = true;\n this.prevRowTotals = null;\n this.landingIndex = -1;\n this.landingSlot = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-col-landing-slot\"))\n .addChildElement(domel('div')\n .toDOM())\n .toDOM();\n this._activeRowIndex = -1;\n if (options && options.paging) {\n options.paging = utils.assign(this.defaultDataGridOptions.paging, options.paging);\n }\n this.options = this.mergeOptions(options);\n this.processColumnWidthsOptions();\n if (!this.options.slot)\n throw Error('\"slot\" parameter is required to initialize EasyDataGrid');\n if (!this.options.dataTable)\n throw Error('\"dataTable\" parameter is required to initialize EasyDataGrid');\n this.dataTable = options.dataTable;\n this.eventEmitter = new EventEmitter(this);\n this.cellRendererStore = new GridCellRendererStore(options);\n this.columns = new GridColumnList(this.dataTable.columns, this);\n this.setSlot(this.options.slot);\n this.init(this.options);\n }\n EasyGrid.prototype.mergeOptions = function (options) {\n var colWidthOptions = utils.assignDeep({}, this.defaultDataGridOptions.columnWidths, options.columnWidths);\n var pagingOptions = utils.assignDeep({}, this.defaultDataGridOptions.paging, options.paging);\n var result = utils.assign({}, this.defaultDataGridOptions, options);\n result.columnWidths = colWidthOptions;\n result.paging = pagingOptions;\n return result;\n };\n EasyGrid.prototype.processColumnWidthsOptions = function () {\n var widthOptions = this.options.columnWidths;\n if (!widthOptions)\n return;\n //string columns\n utils.getStringDataTypes().forEach(function (dataType) {\n widthOptions[dataType] = __assign(__assign({}, widthOptions.stringColumns), widthOptions[dataType]);\n });\n //numeric columns\n utils.getNumericDataTypes().forEach(function (dataType) {\n widthOptions[dataType] = __assign(__assign({}, widthOptions.numberColumns), widthOptions[dataType]);\n });\n //bool columns\n widthOptions[DataType.Bool] = __assign(__assign({}, widthOptions.boolColumns), widthOptions[DataType.Bool]);\n //date columns\n utils.getDateDataTypes().forEach(function (dataType) {\n widthOptions[dataType] = __assign(__assign({}, widthOptions.dateColumns), widthOptions[dataType]);\n });\n //other columns\n var knownTypes = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], utils.getStringDataTypes(), true), utils.getNumericDataTypes(), true), utils.getDateDataTypes(), true), [\n DataType.Bool\n ], false);\n utils.getAllDataTypes().forEach(function (dataType) {\n if (!(dataType in knownTypes)) {\n widthOptions[dataType] = __assign(__assign({}, widthOptions.otherColumns), widthOptions[dataType]);\n }\n });\n widthOptions[DataType.Unknown] = widthOptions.otherColumns;\n };\n EasyGrid.prototype.setSlot = function (slot) {\n if (typeof slot === 'string') {\n if (slot.length) {\n if (slot[0] === '#') {\n this.slot = document.getElementById(slot.substring(1));\n }\n else if (slot[0] === '.') {\n var result = document.getElementsByClassName(slot.substring(1));\n if (result.length)\n this.slot = result[0];\n }\n else {\n throw Error('Unrecognized slot parameter ' +\n '(Must be id, class or HTMLElement): ' + slot);\n }\n }\n }\n else {\n this.slot = slot;\n }\n };\n /** Initializes grid widget according to the options passed in the parameter */\n EasyGrid.prototype.init = function (options) {\n var _this = this;\n if (options.onInit) {\n this.addEventListener('init', options.onInit);\n }\n if (options.onRowClick) {\n this.addEventListener('rowClick', options.onRowClick);\n }\n if (options.onRowDbClick) {\n this.addEventListener('rowDbClick', options.onRowDbClick);\n }\n if (options.onPlusButtonClick) {\n this.addEventListener('plusButtonClick', options.onPlusButtonClick);\n }\n if (options.onColumnChanged) {\n this.addEventListener('columnChanged', options.onColumnChanged);\n }\n if (options.onColumnDeleted) {\n this.addEventListener('columnDeleted', options.onColumnDeleted);\n }\n if (options.onColumnMoved) {\n this.addEventListener('columnMoved', options.onColumnMoved);\n }\n if (options.onPageChanged) {\n this.addEventListener('pageChanged', options.onPageChanged);\n }\n if (options.onActiveRowChanged) {\n this.addEventListener('activeRowChanged', options.onActiveRowChanged);\n }\n this.addEventListener('pageChanged', function (ev) { return _this.activeRowIndex = -1; });\n utils.assignDeep(this.paginationOptions, options.pagination);\n this.pagination.pageSize = this.options.paging.pageSize\n || this.pagination.pageSize;\n if (this.options.allowDragDrop) {\n eqDragManager.registerDropContainer({\n element: this.slot,\n scopes: [\"gridColumnMove\"],\n onDragEnter: function (_, ev) {\n _this.slot.classList.add(\"\".concat(eqCssPrefix, \"-drophover\"));\n _this.showLandingSlot(ev.pageX, ev.pageY);\n },\n onDragOver: function (_, ev) {\n _this.showLandingSlot(ev.pageX, ev.pageY);\n },\n onDragLeave: function (_, ev) {\n ev.dropEffect = DropEffect.Forbid;\n _this.slot.classList.remove(\"\".concat(eqCssPrefix, \"-drophover\"));\n _this.hideLandingSlot();\n },\n onDrop: function (_, ev) {\n _this.dataTable.columns.move(ev.data.column, _this.landingIndex);\n _this.refresh();\n _this.fireEvent({\n type: 'columnMoved',\n columnId: ev.data.column.id,\n newIndex: _this.landingIndex\n });\n }\n });\n }\n this.refresh();\n this.fireEvent('init');\n };\n /** Fires a grid event. You can pass either an event type\n * (like 'init', 'rowClick', 'pageChanged', etc )\n * or a ready-to-use grid event object\n * */\n EasyGrid.prototype.fireEvent = function (event) {\n if (typeof event === \"string\") {\n this.eventEmitter.fire(event);\n }\n else {\n this.eventEmitter.fire(event.type, event);\n }\n };\n /** Allows to set the data (represented by a EasyDataTable object)\n * or to replace the existing one associated with the grid */\n EasyGrid.prototype.setData = function (data) {\n this.dataTable = data;\n this.clear();\n this.refresh();\n };\n /** Returns the EasyDataTable object associated with the grid via `setData()` call */\n EasyGrid.prototype.getData = function () {\n return this.dataTable;\n };\n /** Gets the list of grid columns */\n EasyGrid.prototype.getColumns = function () {\n return this.columns;\n };\n /** This function is called when the grid is destroyed */\n EasyGrid.prototype.destroy = function () {\n this.slot.innerHTML = \"\";\n };\n /** Clears the current DOM object and re-renders everything from the scratch */\n EasyGrid.prototype.refresh = function () {\n this.clearDOM();\n this.render();\n };\n EasyGrid.prototype.clearDOM = function () {\n this.slot.innerHTML = '';\n };\n /** Clears all DOM object in the grid and return it to its initial state */\n EasyGrid.prototype.clear = function () {\n this.pagination.page = 1;\n this.clearDOM();\n };\n /** Renders the grid */\n EasyGrid.prototype.render = function () {\n var _this = this;\n if (!this.hasData() && !this.options.showPlusButton)\n return;\n this.containerInitialHeight = this.slot.clientHeight;\n this.rootDiv = document.createElement('div');\n this.rootDiv.style.width = '100%';\n this.rootDiv.classList.add(\"\".concat(this.cssPrefix, \"-root\"));\n this.columns.sync(this.dataTable.columns, this.options.useRowNumeration);\n this.renderHeader();\n this.rootDiv.appendChild(this.headerDiv);\n this.renderBody();\n this.rootDiv.appendChild(this.bodyDiv);\n this.renderFooter();\n this.rootDiv.appendChild(this.footerDiv);\n var gridContainer = document.createElement('div');\n gridContainer.classList.add(\"\".concat(this.cssPrefix, \"-container\"));\n gridContainer.appendChild(this.rootDiv);\n this.slot.appendChild(gridContainer);\n var needAutoResize = this.options.columnWidths.autoResize !== AutoResizeColumns.Never;\n if (this.rowsOnPagePromise) {\n this.rowsOnPagePromise\n .then(function () { return _this.updateHeight(); })\n .then(function () {\n _this.firstRender = false;\n _this.rowsOnPagePromise = null;\n });\n }\n else {\n setTimeout(function () {\n _this.updateHeight()\n .then(function () {\n _this.firstRender = false;\n if (needAutoResize) {\n _this.resizeColumns();\n }\n });\n }, 100);\n }\n };\n EasyGrid.prototype.updateHeight = function () {\n var _this = this;\n return new Promise(function (resolve) {\n if (_this.options.viewportRowsCount) {\n var firstRow = _this.bodyCellContainerDiv.firstElementChild;\n var rowHeight = firstRow ? firstRow.offsetHeight : DEFAULT_ROW_HEIGHT;\n var rowCount = _this.options.viewportRowsCount; // || DEFAULT_ROW_COUNT;\n var viewportHeight_1 = rowHeight * rowCount;\n domel(_this.bodyViewportDiv)\n .setStyle('height', \"\".concat(viewportHeight_1, \"px\"));\n setTimeout(function () {\n var sbHeight = _this.bodyViewportDiv.offsetHeight - _this.bodyViewportDiv.clientHeight;\n viewportHeight_1 = viewportHeight_1 + sbHeight;\n domel(_this.bodyViewportDiv)\n .setStyle('height', \"\".concat(viewportHeight_1, \"px\"));\n resolve();\n }, 100);\n return;\n }\n else if (_this.containerInitialHeight > 0) {\n // comment for now since it does not work in all cases\n // const bodyHeight = this.containerInitialHeight - this.headerDiv.offsetHeight - this.footerDiv.offsetHeight;\n // domel(this.bodyDiv)\n // .setStyle('height', `${bodyHeight}px`);\n }\n resolve();\n })\n .then(function () {\n if (_this.options.fixHeightOnFirstRender && _this.firstRender) {\n _this.slot.style.height = \"\".concat(_this.slot.offsetHeight, \"px\");\n }\n });\n };\n EasyGrid.prototype.getContainerWidth = function () {\n return this.columns.getItems()\n .filter(function (col) { return col.isVisible; })\n .map(function (col) { return col.width; })\n .reduce(function (sum, current) { return sum + current; });\n };\n EasyGrid.prototype.renderHeader = function () {\n var _this = this;\n this.headerDiv = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-header\"))\n .toDOM();\n this.headerViewportDiv = domel('div', this.headerDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-header-viewport\"))\n .toDOM();\n this.headerCellContainerDiv = domel('div', this.headerViewportDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-header-cell-container\"))\n .toDOM();\n this.headerRowDiv = domel('div', this.headerCellContainerDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-header-row\"))\n .toDOM();\n this.columns.getItems().forEach(function (column, index) {\n if (!column.isVisible) {\n return;\n }\n var hd = _this.renderColumnHeader(column, index);\n _this.headerRowDiv.appendChild(hd);\n if (column.isRowNum) {\n domel(hd)\n .addChildElement(_this.renderHeaderButtons());\n }\n });\n var containerWidth = this.getContainerWidth();\n domel(this.headerCellContainerDiv)\n .setStyle('width', \"\".concat(containerWidth, \"px\"));\n };\n EasyGrid.prototype.hasData = function () {\n return this.dataTable.columns.count > 0;\n };\n EasyGrid.prototype.renderColumnHeader = function (column, index) {\n var _this = this;\n var colBuilder = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-header-cell\"))\n .data('col-idx', \"\".concat(index))\n .setStyle('width', \"\".concat(column.width, \"px\"));\n if (column.dataColumn) {\n colBuilder\n .data('col-id', \"\".concat(column.dataColumn.id));\n }\n var colDiv = colBuilder.toDOM();\n domel('div', colDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-header-cell-resize\"));\n if (!column.isRowNum) {\n domel('div', colDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-header-cell-label\"))\n .text(column.label);\n }\n if (column.description) {\n domel('div', colDiv)\n .addClass('question-mark')\n .title(column.description);\n }\n if (this.options.allowDragDrop) {\n eqDragManager.registerDraggableItem({\n element: colDiv,\n scope: \"gridColumnMove\",\n data: { column: column },\n renderer: function (dragImage) {\n dragImage.innerHTML = '';\n var attrLabel = document.createElement('div');\n attrLabel.innerText = column.label;\n dragImage.classList.add(\"\".concat(_this.cssPrefix, \"-sortable-helper\"));\n dragImage.appendChild(attrLabel);\n },\n onDragStart: function (ev) {\n ev.dropEffect = DropEffect.Allow;\n }\n });\n }\n return colDiv;\n };\n EasyGrid.prototype.renderBody = function () {\n var _this = this;\n this.bodyDiv = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-body\"))\n .toDOM();\n this.bodyViewportDiv = domel('div', this.bodyDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-body-viewport\"))\n .attr('tabIndex', '0')\n .toDOM();\n this.bodyCellContainerDiv = domel('div', this.bodyViewportDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-cell-container\"))\n .toDOM();\n var showAggrs = this.canShowAggregates();\n if (this.dataTable) {\n this.showProgress();\n this.rowsOnPagePromise = this.getRowsToRender()\n .then(function (rows) {\n _this.pagination.total = _this.dataTable.getTotal();\n _this.hideProgress();\n //prevent double rendering (bad solution, we have to figure out how to avoid this behavior properly)\n _this.bodyCellContainerDiv.innerHTML = '';\n _this.prevRowTotals = null;\n var rowsToRender = 0;\n if (rows.length) {\n var groups_1 = showAggrs\n ? _this.options.aggregates.settings.getGroups()\n : [];\n rowsToRender = (rows.length < _this.pagination.pageSize)\n ? rows.length\n : _this.pagination.pageSize;\n rows.forEach(function (row, index) {\n if (showAggrs)\n _this.updateTotalsState(groups_1, row);\n //we don't actually render the last row\n if (index < rowsToRender) {\n var tr = _this.renderRow(row, index);\n _this.bodyCellContainerDiv.appendChild(tr);\n }\n });\n var showGrandTotalsOnEachPage = _this.options.aggregates && _this.options.aggregates.showGrandTotalsOnEachPage;\n if (showAggrs && (_this.isLastPage() || showGrandTotalsOnEachPage)) {\n var row = new DataRow(_this.dataTable.columns, new Array(_this.dataTable.columns.count));\n _this.updateTotalsState(groups_1, row, true);\n }\n }\n var needAutoResize = _this.options.columnWidths.autoResize !== AutoResizeColumns.Never;\n if (needAutoResize) {\n _this.resizeColumns();\n }\n else {\n var containerWidth = _this.getContainerWidth();\n domel(_this.bodyCellContainerDiv)\n .setStyle('width', \"\".concat(containerWidth, \"px\"));\n }\n return rowsToRender;\n })\n .catch(function (error) { console.error(error); return 0; });\n }\n this.bodyViewportDiv.addEventListener('scroll', function (ev) {\n domel(_this.headerViewportDiv)\n .setStyle('margin-left', \"-\".concat(_this.bodyViewportDiv.scrollLeft, \"px\"));\n });\n this.bodyViewportDiv.addEventListener('keydown', this.onViewportKeydown.bind(this));\n };\n EasyGrid.prototype.isLastPage = function () {\n if (this.dataTable.elasticChunks) {\n return this.dataTable.totalIsKnown()\n && (this.pagination.page * this.pagination.pageSize) >= this.pagination.total;\n }\n return this.pagination.page * this.pagination.pageSize >= this.pagination.total;\n };\n EasyGrid.prototype.canShowAggregates = function () {\n if (!this.options || !this.options.aggregates || !this.options.aggregates.settings)\n return false;\n var aggrSettings = this.options.aggregates.settings;\n var result = (aggrSettings.hasAggregates() || aggrSettings.hasRecordCount())\n && (aggrSettings.hasGroups() || aggrSettings.hasGrandTotals());\n return result;\n };\n EasyGrid.prototype.updateTotalsState = function (groups, newRow, isLast) {\n if (isLast === void 0) { isLast = false; }\n var aggrSettings = this.options.aggregates.settings;\n if (this.prevRowTotals && aggrSettings.hasGroups()) {\n var changeLevel = -1;\n for (var level = 1; level <= groups.length; level++) {\n var group = groups[level - 1];\n for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n if (!aggrSettings.compareValues(this.prevRowTotals.getValue(col), newRow.getValue(col))) {\n changeLevel = level;\n break;\n }\n }\n if (changeLevel !== -1)\n break;\n }\n if (changeLevel !== -1) {\n for (var level = groups.length; level >= changeLevel; level--) {\n var row = new DataRow(this.dataTable.columns, this.prevRowTotals.toArray());\n var tr = this.renderTotalsRow(level, row);\n this.bodyCellContainerDiv.appendChild(tr);\n }\n }\n }\n if (isLast && aggrSettings.hasGrandTotals() && aggrSettings.hasAggregates()) {\n var tr = this.renderTotalsRow(0, newRow);\n this.bodyCellContainerDiv.appendChild(tr);\n }\n this.prevRowTotals = newRow;\n };\n EasyGrid.prototype.applyGroupColumnTemplate = function (template, value, count) {\n var result = template.replace(/{{\\s*GroupValue\\s*}}/g, value ? \"\".concat(value) : '-');\n result = result.replace(/{{\\s*GroupCount\\s*}}/g, count ? \"\".concat(count) : '-');\n return result;\n };\n EasyGrid.prototype.renderTotalsRow = function (level, row) {\n var _this = this;\n var aggrSettings = this.options.aggregates.settings;\n var group = (level > 0)\n ? aggrSettings.getGroups()[level - 1]\n : { columns: [], aggregates: aggrSettings.getAggregates() };\n var rowBuilder = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-row\"))\n .addClass(\"\".concat(this.cssPrefix, \"-row-totals\"))\n .addClass(\"\".concat(this.cssPrefix, \"-totals-lv\").concat(level))\n .data('totals-level', \"\".concat(level))\n .attr('tabindex', '-1');\n var rowElement = rowBuilder.toDOM();\n this.columns.getItems().forEach(function (column, index) {\n if (!column.isVisible) {\n return;\n }\n var val = '';\n var colIndex = !column.isRowNum\n ? _this.dataTable.columns.getIndex(column.dataColumn.id)\n : -1;\n if (!column.isRowNum && column.dataColumn) {\n if (group.columns.indexOf(column.dataColumn.id) >= 0) {\n val = row.getValue(colIndex);\n }\n ;\n }\n if (colIndex == _this.dataTable.columns.count - 1) {\n val = '. . . . . .';\n }\n rowElement.appendChild(_this.renderCell(column, index, val, rowElement));\n });\n var aggrContainer = this.options.aggregates.calculator.getAggrContainer();\n var aggrCols = aggrSettings.getAggregates().map(function (c) { return c.colId; });\n var key = aggrSettings.buildGroupKey(group, row);\n aggrContainer.getAggregateData(level, key)\n .then(function (values) {\n for (var _i = 0, aggrCols_1 = aggrCols; _i < aggrCols_1.length; _i++) {\n var aggrColId = aggrCols_1[_i];\n row.setValue(aggrColId, values[aggrColId]);\n }\n rowElement.innerHTML = '';\n _this.columns.getItems().forEach(function (column, index) {\n if (!column.isVisible) {\n return;\n }\n var val = '';\n var colIndex = !column.isRowNum\n ? _this.dataTable.columns.getIndex(column.dataColumn.id)\n : -1;\n if (!column.isRowNum) {\n var isLastGroupColumn = false;\n if (column.dataColumn) {\n var groupColIndex = group.columns.indexOf(column.dataColumn.id);\n var aggrColIndex = aggrCols.indexOf(column.dataColumn.id);\n if (level > 0) {\n isLastGroupColumn = groupColIndex == group.columns.length - 1;\n }\n else {\n //if it's a grand total row consider first column as the last group column\n isLastGroupColumn = colIndex == 0;\n }\n if (groupColIndex >= 0 || aggrColIndex >= 0) {\n val = row.getValue(colIndex);\n }\n ;\n }\n var groupFooterTemplate = '';\n if (level > 0) {\n groupFooterTemplate = column.dataColumn.groupFooterColumnTemplate;\n //set the default template for the last grouping column\n if (!groupFooterTemplate && aggrSettings.hasRecordCount() && isLastGroupColumn) {\n groupFooterTemplate = '{{GroupValue}} ({{GroupCount}})';\n }\n }\n if (groupFooterTemplate) {\n var cellDiv_1 = _this.renderCell(column, index, val, rowElement);\n var innerCell = cellDiv_1.firstChild;\n val = innerCell.innerHTML;\n val = _this.applyGroupColumnTemplate(groupFooterTemplate, val, values[aggrSettings.COUNT_FIELD_NAME]);\n }\n }\n var cellDiv = _this.renderCell(column, index, val, rowElement);\n rowElement.appendChild(cellDiv);\n });\n })\n .catch(function (error) { return console.error(error); });\n return rowElement;\n };\n EasyGrid.prototype.onViewportKeydown = function (ev) {\n if (this.options.showActiveRow) {\n var rowCount = this.bodyCellContainerDiv.querySelectorAll(\".\".concat(this.cssPrefix, \"-row\")).length;\n var newValue = void 0;\n switch (ev.key) {\n case 'ArrowLeft':\n break;\n case 'ArrowRight':\n break;\n case 'ArrowUp':\n ev.preventDefault();\n newValue = this.activeRowIndex < 0 || this.activeRowIndex >= rowCount ? rowCount - 1 : this.activeRowIndex - 1;\n this.activeRowIndex = newValue >= 0 ? newValue : 0;\n break;\n case 'ArrowDown':\n ev.preventDefault();\n newValue = this.activeRowIndex < 0 || this.activeRowIndex >= rowCount ? 0 : this.activeRowIndex + 1;\n this.activeRowIndex = newValue < rowCount ? newValue : rowCount - 1;\n break;\n }\n }\n };\n EasyGrid.prototype.ensureRowVisibility = function (rowOrIndex) {\n var row = typeof rowOrIndex === 'number'\n ? this.getDataRow(rowOrIndex)\n : rowOrIndex;\n if (row) {\n var rowRect = row.getBoundingClientRect();\n var viewportRect = this.bodyViewportDiv.getBoundingClientRect();\n var rowTop = rowRect.top - viewportRect.top;\n var rowBottom = rowRect.bottom - viewportRect.top;\n var viewportHeight = this.bodyViewportDiv.clientHeight;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n if (rowTop > 0 &&\n rowBottom <= viewportHeight &&\n rowRect.top > 0 &&\n rowRect.bottom < windowHeight) {\n return;\n }\n if (rowTop < 0) {\n this.bodyViewportDiv.scrollTop = this.bodyViewportDiv.scrollTop + rowTop;\n }\n else if (rowBottom > viewportHeight) {\n this.bodyViewportDiv.scrollTop = this.bodyViewportDiv.scrollTop + rowBottom - viewportHeight;\n }\n rowRect = row.getBoundingClientRect();\n if (rowRect.top < 0) {\n document.documentElement.scrollTop = document.documentElement.scrollTop + rowRect.top;\n }\n else if (rowRect.bottom > windowHeight) {\n document.documentElement.scrollTop = document.documentElement.scrollTop + rowRect.bottom - windowHeight;\n }\n }\n };\n /** Returns a promise with the list of the rows to render on one page.\n * The list contains pageSize+1 row to make it possible\n * to render the totals row (if it appears to be on the edge between pages)\n */\n EasyGrid.prototype.getRowsToRender = function () {\n if (this.options.paging.enabled === false) {\n return Promise.resolve(this.dataTable.getCachedRows());\n }\n return this.dataTable.getRows({\n offset: (this.pagination.page - 1) * this.pagination.pageSize,\n limit: this.pagination.pageSize + 1\n })\n .catch(function (error) {\n console.error(error);\n return [];\n });\n };\n EasyGrid.prototype.renderFooter = function () {\n var _this = this;\n this.footerDiv = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-footer\"))\n .toDOM();\n if (this.rowsOnPagePromise) {\n this.rowsOnPagePromise.then(function (count) {\n _this.footerDiv.innerHTML = '';\n _this.footerPaginateDiv = _this.renderPageNavigator();\n _this.footerDiv.appendChild(_this.footerPaginateDiv);\n var pageInfoBlock = _this.renderPageInfoBlock(count);\n _this.footerDiv.appendChild(pageInfoBlock);\n });\n }\n };\n EasyGrid.prototype.renderPageInfoBlock = function (count) {\n var pageInfoDiv = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-page-info\"))\n .toDOM();\n var rowCount = this.dataTable.getTotal();\n if (rowCount > 0) {\n var fistPageRecordNum = count\n ? (this.pagination.page - 1) * this.pagination.pageSize + 1\n : 0;\n var lastPageRecordNum = count\n ? fistPageRecordNum + count - 1\n : 0;\n var totalStr = this.dataTable.getTotal().toString();\n if (this.dataTable.elasticChunks) {\n var count_1 = this.dataTable.getCachedCount();\n var total = this.dataTable.getTotal();\n if (count_1 !== total)\n totalStr = '?';\n }\n pageInfoDiv.innerHTML = i18n.getText('GridPageInfo')\n .replace('{FirstPageRecordNum}', \"<span>\".concat(fistPageRecordNum.toString(), \"</span>\"))\n .replace('{LastPageRecordNum}', \"<span>\".concat(lastPageRecordNum.toString(), \"</span>\"))\n .replace('{Total}', \"<span>\".concat(totalStr, \"</span>\"));\n }\n return pageInfoDiv;\n };\n EasyGrid.prototype.showProgress = function () {\n };\n EasyGrid.prototype.hideProgress = function () {\n };\n EasyGrid.prototype.getLocalIndexByGlobal = function (index) {\n if (this.pagination) {\n return index % this.pagination.pageSize;\n }\n else {\n return index;\n }\n };\n EasyGrid.prototype.getGlobalIndexByLocal = function (index) {\n if (this.pagination) {\n return (this.pagination.page - 1) * this.pagination.pageSize + index;\n }\n else {\n return index;\n }\n };\n EasyGrid.prototype.renderRow = function (row, index) {\n var _this = this;\n var indexGlobal = this.getGlobalIndexByLocal(index);\n var rowBuilder = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-row\"))\n .addClass(\"\".concat(this.cssPrefix, \"-row-\").concat(index % 2 == 1 ? 'odd' : 'even'))\n .data('row-idx', \"\".concat(indexGlobal))\n .attr('tabindex', '-1')\n .on('click', function (ev) {\n _this.activeRowIndex = index;\n _this.fireEvent({\n type: 'rowClick',\n row: row,\n rowIndex: index,\n sourceEvent: ev\n });\n })\n .on('dblclick', function (ev) {\n _this.fireEvent({\n type: 'rowDbClick',\n row: row,\n rowIndex: index,\n sourceEvent: ev\n });\n });\n if (index == 0) {\n rowBuilder.addClass(\"\".concat(this.cssPrefix, \"-row-first\"));\n }\n var rowElement = rowBuilder.toDOM();\n if (this.options.showActiveRow && index == this.activeRowIndex) {\n rowBuilder.addClass(\"\".concat(this.cssPrefix, \"-row-active\"));\n }\n this.columns.getItems().forEach(function (column, index) {\n if (!column.isVisible) {\n return;\n }\n var colindex = column.isRowNum ? -1 : _this.dataTable.columns.getIndex(column.dataColumn.id);\n var val = column.isRowNum ? indexGlobal + 1 : row.getValue(colindex);\n rowElement.appendChild(_this.renderCell(column, index, val, rowElement));\n });\n return rowElement;\n };\n EasyGrid.prototype.renderCell = function (column, colIndex, value, rowElement) {\n var builder = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-cell\"))\n .data('col-idx', \"\".concat(colIndex))\n .attr('tabindex', '-1')\n .setStyle('width', \"\".concat(column.width, \"px\"));\n if (column.align == GridColumnAlign.LEFT) {\n builder.addClass(\"\".concat(this.cssPrefix, \"-cell-align-left\"));\n }\n else if (column.align == GridColumnAlign.RIGHT) {\n builder.addClass(\"\".concat(this.cssPrefix, \"-cell-align-right\"));\n }\n else if (column.align == GridColumnAlign.CENTER) {\n builder.addClass(\"\".concat(this.cssPrefix, \"-cell-align-center\"));\n }\n var cellElement = builder.toDOM();\n var valueCell = cellElement.appendChild(domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-cell-value\"))\n .toDOM());\n if (column.cellRenderer) {\n column.cellRenderer(value, column, valueCell, rowElement);\n }\n return cellElement;\n };\n /** Sets current grid pages (if paging is used) */\n EasyGrid.prototype.setPage = function (page) {\n this.pagination.page = page;\n this.fireEvent({ type: \"pageChanged\", page: page });\n this.refresh();\n this.bodyViewportDiv.focus();\n };\n EasyGrid.prototype.renderPageNavigator = function () {\n var _this = this;\n var paginateDiv = document.createElement('div');\n paginateDiv.className = \"\".concat(this.cssPrefix, \"-pagination-wrapper\");\n var rowCount = this.dataTable.getTotal();\n if (this.options.paging && this.options.paging.enabled && rowCount > 0) {\n var prefix_1 = this.paginationOptions.useBootstrap ? '' : \"\".concat(this.cssPrefix, \"-\");\n var buttonClickHandler_1 = function (ev) {\n var element = ev.target;\n if (element.hasAttribute('data-page')) {\n var page = parseInt(element.getAttribute('data-page'));\n _this.setPage(page);\n }\n };\n var renderPageCell = function (pageIndex, content, disabled, extreme, active) {\n var li = document.createElement('li');\n li.className = \"\".concat(prefix_1, \"page-item\");\n if (!extreme) {\n if (active) {\n li.className += ' active';\n }\n var a_1 = document.createElement('a');\n a_1.setAttribute('href', 'javascript:void(0)');\n a_1.innerHTML = content || pageIndex.toString();\n a_1.setAttribute(\"data-page\", \"\".concat(pageIndex));\n a_1.className = \"\".concat(prefix_1, \"page-link\");\n a_1.addEventListener(\"click\", buttonClickHandler_1);\n li.appendChild(a_1);\n return li;\n }\n var a = document.createElement('span');\n a.setAttribute('aria-hidden', 'true');\n a.className = \"\".concat(prefix_1, \"page-link\");\n if (disabled) {\n li.className += ' disabled';\n }\n else {\n if (_this.paginationOptions.useBootstrap) {\n a = document.createElement('a');\n a.setAttribute('href', 'javascript:void(0)');\n a.setAttribute(\"data-page\", \"\".concat(pageIndex));\n }\n else {\n var newA = document.createElement('a');\n newA.setAttribute('href', 'javascript:void(0)');\n newA.setAttribute('data-page', \"\".concat(pageIndex));\n a = newA;\n }\n a.className = \"\".concat(prefix_1, \"page-link\");\n a.addEventListener(\"click\", buttonClickHandler_1);\n }\n a.innerHTML = content;\n li.appendChild(a);\n return li;\n };\n if (this.dataTable.elasticChunks) {\n var pageIndex = this.pagination.page || 1;\n var ul = document.createElement('ul');\n ul.className = \"\".concat(prefix_1, \"pagination\");\n var cell = renderPageCell(pageIndex - 1, '&laquo;', pageIndex == 1, true, false);\n ul.appendChild(cell);\n cell = renderPageCell(pageIndex + 1, '&raquo;', this.isLastPage(), true, false);\n ul.appendChild(cell);\n paginateDiv.appendChild(ul);\n }\n else {\n if (this.pagination.total > this.pagination.pageSize) {\n var pageIndex = this.pagination.page || 1;\n var pageCount = Math.ceil(this.pagination.total / this.pagination.pageSize) || 1;\n var maxButtonCount = this.paginationOptions.maxButtonCount || 10;\n var zeroBasedIndex = pageIndex - 1;\n var firstPageIndex = zeroBasedIndex - (zeroBasedIndex % maxButtonCount) + 1;\n var lastPageIndex = firstPageIndex + maxButtonCount - 1;\n if (lastPageIndex > pageCount) {\n lastPageIndex = pageCount;\n }\n var ul = document.createElement('ul');\n ul.className = \"\".concat(prefix_1, \"pagination\");\n var cell = renderPageCell(firstPageIndex - 1, '&laquo;', firstPageIndex == 1, true, false);\n ul.appendChild(cell);\n for (var i = firstPageIndex; i <= lastPageIndex; i++) {\n cell = renderPageCell(i, i.toString(), false, false, i == pageIndex);\n ul.appendChild(cell);\n }\n cell = renderPageCell(lastPageIndex + 1, '&raquo;', lastPageIndex == pageCount, true, false);\n ul.appendChild(cell);\n paginateDiv.appendChild(ul);\n }\n }\n if (this.options.paging.allowPageSizeChange) {\n var selectChangeHandler = function (ev) {\n var newValue = parseInt(ev.target.value);\n _this.pagination.pageSize = newValue;\n _this.pagination.page = 1;\n _this.refresh();\n };\n var pageSizes = document.createElement('div');\n pageSizes.className = \"\".concat(this.cssPrefix, \"-page-sizes\");\n var selectSize = document.createElement('div');\n selectSize.className = \"kfrm-select \".concat(this.cssPrefix, \"-page-sizes-select\");\n pageSizes.appendChild(selectSize);\n var sel_1 = document.createElement('select');\n var selOptions = this.options.paging.pageSizeItems || [];\n var selSet = new Set(selOptions);\n selSet.add(this.options.paging.pageSize || 20);\n Array.from(selSet).forEach(function (el) {\n var option = document.createElement(\"option\");\n option.value = el.toString();\n option.text = el.toString();\n sel_1.appendChild(option);\n });\n sel_1.value = (this.pagination.pageSize || 20).toString();\n selectSize.appendChild(sel_1);\n sel_1.addEventListener('change', selectChangeHandler);\n var labelDiv = document.createElement('div');\n labelDiv.className = \"\".concat(this.cssPrefix, \"-page-sizes-label\");\n pageSizes.appendChild(labelDiv);\n var label = document.createElement('span');\n label.innerText = i18n.getText('GridItemsPerPage');\n labelDiv.appendChild(label);\n paginateDiv.appendChild(pageSizes);\n }\n }\n return paginateDiv;\n };\n EasyGrid.prototype.addEventListener = function (eventType, handler) {\n return this.eventEmitter.subscribe(eventType, function (event) { return handler(event.data); });\n };\n EasyGrid.prototype.removeEventListener = function (eventType, handlerId) {\n this.eventEmitter.unsubscribe(eventType, handlerId);\n };\n EasyGrid.prototype.renderHeaderButtons = function () {\n var _this = this;\n if (this.options.showPlusButton) {\n return domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-header-btn-plus\"))\n .title(this.options.plusButtonTitle || 'Add')\n .addChild('a', function (builder) { return builder\n .attr('href', 'javascript:void(0)')\n .on('click', function (e) {\n e.preventDefault();\n _this.fireEvent({\n type: 'plusButtonClick',\n sourceEvent: e\n });\n }); })\n .toDOM();\n }\n return domel('span')\n .addText('#')\n .toDOM();\n };\n EasyGrid.prototype.showLandingSlot = function (pageX, pageY) {\n var colElems = this.headerRowDiv.querySelectorAll(\"[class*=\".concat(this.cssPrefix, \"-table-col]\"));\n var cols = [];\n for (var i = 1; i < colElems.length; i++) {\n var rowElem = colElems[i];\n if (rowElem.style.display === 'none')\n continue;\n cols.push(rowElem);\n }\n if (cols.length === 0) {\n this.landingIndex = 0;\n this.headerRowDiv.appendChild(this.landingSlot);\n return;\n }\n var landingPos = getElementAbsolutePos(this.landingSlot);\n if (pageX >= landingPos.x && pageX <= landingPos.x + this.landingSlot.offsetWidth) {\n return;\n }\n var newLandingIndex = this.landingIndex;\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\n var col = cols_1[_i];\n var colPos = getElementAbsolutePos(col);\n var width = col.offsetWidth;\n if (pageX > colPos.x && pageX < colPos.x + width) {\n // -1 as we don't need to count add button here\n newLandingIndex = parseInt(col.getAttribute('data-col-idx')) - 1;\n }\n }\n if (newLandingIndex != this.landingIndex) {\n this.landingIndex = newLandingIndex;\n if (this.landingIndex < cols.length) {\n this.headerRowDiv.insertBefore(this.landingSlot, cols[this.landingIndex]);\n }\n else {\n this.headerRowDiv.appendChild(this.landingSlot);\n }\n }\n };\n EasyGrid.prototype.hideLandingSlot = function () {\n var _this = this;\n this.landingIndex = -1;\n setTimeout(function () {\n if (_this.landingSlot.parentElement) {\n _this.landingSlot.parentElement.removeChild(_this.landingSlot);\n }\n }, 10);\n };\n Object.defineProperty(EasyGrid.prototype, \"activeRowIndex\", {\n get: function () {\n return this._activeRowIndex;\n },\n set: function (value) {\n if (value !== this._activeRowIndex) {\n var oldValue = this._activeRowIndex;\n this._activeRowIndex = value;\n this.updateActiveRow();\n this.fireEvent({\n type: 'activeRowChanged',\n oldValue: oldValue,\n newValue: this.activeRowIndex,\n rowIndex: this.getGlobalIndexByLocal(this.activeRowIndex)\n });\n }\n },\n enumerable: false,\n configurable: true\n });\n EasyGrid.prototype.updateActiveRow = function () {\n var _this = this;\n if (this.options.showActiveRow) {\n var rows = this.bodyCellContainerDiv.querySelectorAll(\"[class*=\".concat(this.cssPrefix, \"-row-active]\"));\n rows.forEach(function (el) { el.classList.remove(\"\".concat(_this.cssPrefix, \"-row-active\")); });\n var activeRow = this.getActiveRow();\n if (activeRow) {\n activeRow.classList.add(\"\".concat(this.cssPrefix, \"-row-active\"));\n this.ensureRowVisibility(this.activeRowIndex);\n }\n }\n };\n EasyGrid.prototype.getActiveRow = function () {\n return this.getDataRow(this.activeRowIndex);\n };\n EasyGrid.prototype.getDataRow = function (index) {\n var rows = Array.from(this.bodyCellContainerDiv.querySelectorAll(\".\".concat(this.cssPrefix, \"-row:not(.\").concat(this.cssPrefix, \"-row-totals)\")));\n if (index >= 0 && index < rows.length)\n return rows[index];\n return null;\n };\n /** Makes the grid focused for keyboard events */\n EasyGrid.prototype.focus = function () {\n this.bodyViewportDiv.focus();\n };\n /** Resizes columns according to the data they represent */\n EasyGrid.prototype.resizeColumns = function () {\n if (this.options.columnWidths.autoResize === AutoResizeColumns.Never)\n return;\n var containerWidth = this.bodyCellContainerDiv.style.width;\n this.bodyCellContainerDiv.style.visibility = 'hidden';\n this.bodyCellContainerDiv.style.width = '1px';\n //this.headerRowDiv.style.visibility = 'hidden';\n this.headerRowDiv.style.width = '1px';\n var sumWidth = 0;\n var columns = this.columns.getItems();\n var headerCells = this.headerCellContainerDiv.querySelectorAll(\".\".concat(this.cssPrefix, \"-header-cell\"));\n var headerIdx = 0;\n var _loop_1 = function (idx) {\n var column = columns[idx];\n if (!column.isVisible)\n return \"continue\";\n var calculatedWidth = this_1.options.columnWidths.autoResize !== AutoResizeColumns.Always && column.dataColumn\n ? column.dataColumn.calculatedWidth\n : 0;\n var cellValues = this_1.bodyCellContainerDiv.querySelectorAll(\".\".concat(this_1.cssPrefix, \"-cell[data-col-idx=\\\"\").concat(idx, \"\\\"] > .\").concat(this_1.cssPrefix, \"-cell-value\"));\n var maxWidth = 0;\n if (calculatedWidth > 0) {\n sumWidth += calculatedWidth;\n column.width = calculatedWidth;\n cellValues.forEach(function (value) {\n value.parentElement.style.width = \"\".concat(calculatedWidth, \"px\");\n });\n headerCells[headerIdx].style.width = \"\".concat(calculatedWidth, \"px\");\n }\n else {\n if (cellValues.length == 0) {\n headerCells[headerIdx].style.width = null;\n headerCells[headerIdx].style.whiteSpace = 'nowrap';\n }\n maxWidth = headerCells[headerIdx].offsetWidth;\n if (cellValues.length > 0) {\n cellValues.forEach(function (value) {\n value.parentElement.style.width = null;\n var width = value.parentElement.offsetWidth;\n if (width > maxWidth) {\n maxWidth = width;\n }\n });\n maxWidth += 3;\n var maxOption = column.isRowNum\n ? this_1.options.columnWidths.rowNumColumn.max || 500\n : this_1.options.columnWidths[column.dataColumn.type].max || 2000;\n var minOption = column.isRowNum\n ? this_1.options.columnWidths.rowNumColumn.min || 0\n : this_1.options.columnWidths[column.dataColumn.type].min || 20;\n if (maxWidth > maxOption) {\n maxWidth = maxOption;\n }\n if (maxWidth < minOption) {\n maxWidth = minOption;\n }\n if (utils.isNumericType(column.type)) {\n //increase the calculated width in 1.3 times for numeric columns\n maxWidth = Math.round(maxWidth * 1.3);\n }\n sumWidth += maxWidth;\n column.width = maxWidth;\n cellValues.forEach(function (value) {\n value.parentElement.style.width = \"\".concat(maxWidth, \"px\");\n });\n headerCells[headerIdx].style.width = \"\".concat(maxWidth, \"px\");\n if (column.dataColumn) {\n column.dataColumn.calculatedWidth = maxWidth;\n }\n }\n else {\n sumWidth += maxWidth;\n }\n }\n headerIdx++;\n };\n var this_1 = this;\n for (var idx = 0; idx < this.columns.count; idx++) {\n _loop_1(idx);\n }\n if (sumWidth > 0) {\n this.bodyCellContainerDiv.style.width = \"\".concat(sumWidth, \"px\");\n this.headerCellContainerDiv.style.width = \"\".concat(sumWidth, \"px\");\n }\n else {\n this.bodyCellContainerDiv.style.width = containerWidth;\n this.headerCellContainerDiv.style.width = containerWidth;\n }\n this.bodyCellContainerDiv.style.visibility = null;\n this.headerRowDiv.removeAttribute('style');\n };\n return EasyGrid;\n}());\nexport { EasyGrid };\n//# sourceMappingURL=easy_grid.js.map","var Calendar = /** @class */ (function () {\n function Calendar(slot, options) {\n this.slot = slot;\n this.options = options || {};\n if (!this.options.yearRange) {\n this.options.yearRange = 'c-10:c+10';\n }\n }\n Object.defineProperty(Calendar.prototype, \"cssPrefix\", {\n get: function () {\n return 'kdtp-cal';\n },\n enumerable: false,\n configurable: true\n });\n Calendar.prototype.setDate = function (date) {\n this.currentDate = new Date(date);\n };\n Calendar.prototype.getDate = function () {\n return new Date(this.currentDate);\n };\n Calendar.prototype.dateChanged = function (apply) {\n if (this.options.onDateChanged) {\n this.options.onDateChanged(this.currentDate, apply);\n }\n };\n return Calendar;\n}());\nexport { Calendar };\n//# sourceMappingURL=calendar.js.map","import { getElementAbsolutePos } from '../utils/ui-utils';\nvar DateTimePicker = /** @class */ (function () {\n function DateTimePicker(options) {\n this.calendar = null;\n this.timePicker = null;\n this.options = options;\n this.render();\n }\n Object.defineProperty(DateTimePicker.prototype, \"cssPrefix\", {\n get: function () {\n return 'kdtp';\n },\n enumerable: false,\n configurable: true\n });\n DateTimePicker.prototype.setDateTime = function (dateTime) {\n this.currentDateTime = new Date(dateTime);\n if (this.calendar) {\n this.calendar.setDate(this.currentDateTime);\n }\n if (this.timePicker) {\n this.timePicker.setTime(this.currentDateTime);\n }\n };\n DateTimePicker.prototype.getDateTime = function () {\n return new Date(this.currentDateTime);\n };\n DateTimePicker.prototype.render = function () {\n var _this = this;\n if (this.options.showCalendar) {\n this.calendar = this.createCalendar({\n yearRange: this.options.yearRange,\n showDateTimeInput: this.options.showDateTimeInput,\n timePickerIsUsed: this.options.showTimePicker,\n oneClickDateSelection: this.options.oneClickDateSelection,\n onDateChanged: function (date, apply) {\n _this.currentDateTime = date;\n if (_this.timePicker) {\n _this.timePicker.setTime(_this.currentDateTime);\n }\n if (_this.options.showTimePicker) {\n _this.dateTimeChanged();\n }\n if (apply) {\n _this.apply(_this.currentDateTime);\n }\n }\n });\n if (this.calendar)\n this.calendar.render();\n }\n if (this.options.showTimePicker) {\n this.timePicker = this.createTimePicker({\n onTimeChanged: function (time) {\n _this.currentDateTime.setHours(time.getHours());\n _this.currentDateTime.setMinutes(time.getMinutes());\n if (_this.calendar) {\n _this.calendar.setDate(_this.currentDateTime);\n }\n _this.dateTimeChanged();\n }\n });\n if (this.timePicker)\n this.timePicker.render();\n }\n this.setDateTime(new Date());\n };\n DateTimePicker.prototype.createCalendar = function (options) {\n return null;\n };\n DateTimePicker.prototype.createTimePicker = function (options) {\n return null;\n };\n DateTimePicker.prototype.show = function (anchor) {\n if (this.options.beforeShow) {\n this.options.beforeShow();\n }\n var pos = getElementAbsolutePos(anchor || document.body);\n this.slot.style.top = pos.y + anchor.clientHeight + 'px';\n this.slot.style.left = pos.x + 'px';\n };\n DateTimePicker.prototype.apply = function (date) {\n if (this.options.onApply) {\n this.options.onApply(date);\n }\n this.destroy();\n };\n DateTimePicker.prototype.cancel = function () {\n if (this.options.onCancel) {\n this.options.onCancel();\n }\n this.destroy();\n };\n DateTimePicker.prototype.destroy = function () {\n if (this.slot && this.slot.parentElement) {\n this.slot.parentElement.removeChild(this.slot);\n }\n };\n DateTimePicker.prototype.dateTimeChanged = function () {\n if (this.options.onDateTimeChanged) {\n this.options.onDateTimeChanged(this.currentDateTime);\n }\n };\n return DateTimePicker;\n}());\nexport { DateTimePicker };\n//# sourceMappingURL=date_time_picker.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { i18n, utils as dataUtils } from '@easydata/core';\nimport { domel } from '../utils/dom_elem_builder';\nimport { Calendar } from './calendar';\nvar DefaultCalendar = /** @class */ (function (_super) {\n __extends(DefaultCalendar, _super);\n function DefaultCalendar(slot, options) {\n var _this = _super.call(this, slot, options) || this;\n _this.daysOfWeek = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n _this.months = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n _this.calendarBody = null;\n _this.isManualInputChanging = false;\n for (var i = 0; i < _this.daysOfWeek.length; i++) {\n _this.daysOfWeek[i] = i18n.getShortWeekDayName(i + 1);\n }\n for (var i = 0; i < _this.months.length; i++) {\n _this.months[i] = i18n.getLongMonthName(i + 1);\n }\n return _this;\n }\n DefaultCalendar.prototype.setDate = function (date) {\n _super.prototype.setDate.call(this, date);\n this.selectedMonth = this.currentDate.getMonth();\n this.selectedYear = this.currentDate.getFullYear();\n this.rerenderMonth();\n };\n DefaultCalendar.prototype.render = function () {\n var _this = this;\n var header = domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-header\"));\n if (this.options.showDateTimeInput) {\n header\n .addChildElement(this.renderManualDateInput());\n }\n else {\n header\n .addChild('span', function (builder) { return _this.headerTextElem = builder.toDOM(); });\n }\n domel(this.slot)\n .addChildElement(this.renderCalendarButtons());\n this.calendarBody = domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-body\"))\n .toDOM();\n };\n DefaultCalendar.prototype.getInputDateFormat = function () {\n var settings = i18n.getLocaleSettings();\n return (this.options.timePickerIsUsed)\n ? \"\".concat(settings.editDateFormat, \" \").concat(settings.editTimeFormat)\n : settings.editDateFormat;\n };\n DefaultCalendar.prototype.renderManualDateInput = function () {\n var _this = this;\n var format = this.getInputDateFormat();\n var builder = domel('input')\n .attr('placeholder', format)\n .addClass(\"\".concat(this.cssPrefix, \"-header-input\"));\n builder\n .mask(format.replace('yyyy', '9999')\n .replace('MM', '99')\n .replace('dd', '99')\n .replace('HH', '99')\n .replace('mm', '99')\n .replace('ss', '99'))\n .on('input', function (ev) {\n builder.removeClass('error');\n try {\n _this.isManualInputChanging = true;\n var newDate = dataUtils.strToDateTime(_this.manualInputElem.value, format);\n _this.currentDate = newDate;\n _this.jump(_this.currentDate.getFullYear(), _this.currentDate.getMonth());\n _this.dateChanged(false);\n }\n catch (e) {\n builder.addClass('error');\n }\n finally {\n _this.isManualInputChanging = false;\n }\n })\n .on('keydown', function (ev) {\n if (ev.keyCode === 13) {\n ev.preventDefault();\n ev.stopPropagation();\n if (_this.manualInputElem.className.indexOf('error') < 0\n && !_this.isManualInputChanging)\n _this.dateChanged(true);\n }\n })\n .on('focus', function () {\n setTimeout(function () {\n _this.manualInputElem.selectionStart = 0;\n _this.manualInputElem.selectionEnd = 0;\n }, 50);\n });\n this.manualInputElem = builder.toDOM();\n return this.manualInputElem;\n };\n DefaultCalendar.prototype.updateDisplayedDateValue = function () {\n if (this.manualInputElem) {\n if (!this.isManualInputChanging) {\n var format = this.getInputDateFormat();\n this.manualInputElem.value = dataUtils.dateTimeToStr(this.currentDate, format);\n this.manualInputElem.focus();\n }\n }\n else if (this.headerTextElem) {\n var locale = i18n.getCurrentLocale();\n this.headerTextElem.innerText = this.currentDate.toLocaleString(locale == 'en' ? undefined : locale, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n }\n };\n DefaultCalendar.prototype.renderCalendarButtons = function () {\n var _this = this;\n var builder = domel('nav')\n .addClass(\"\".concat(this.cssPrefix, \"-nav\"))\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-nav-prev\"))\n .on('click', function () {\n _this.prev();\n })\n .addChild('span', function (builder) { return builder.html('&lsaquo;'); }); })\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-nav-selectors\"))\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-nav-month\"))\n .addChild('select', function (builder) {\n builder\n .on('change', function () {\n _this.jump(_this.selectedYear, parseInt(_this.selectMonthElem.value));\n });\n var _loop_1 = function (i) {\n builder.addChild('option', function (builder) { return builder\n .attr('value', i.toString())\n .text(_this.months[i]); });\n };\n for (var i = 0; i < _this.months.length; i++) {\n _loop_1(i);\n }\n _this.selectMonthElem = builder.toDOM();\n }); })\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-nav-year\"))\n .addChild('select', function (builder) { return _this.selectYearElem = builder\n .on('change', function () {\n _this.jump(parseInt(_this.selectYearElem.value), _this.selectedMonth);\n })\n .toDOM(); }); }); })\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-nav-next\"))\n .on('click', function () {\n _this.next();\n })\n .addChild('span', function (builder) { return builder.html('&rsaquo;'); }); });\n return builder.toDOM();\n };\n DefaultCalendar.prototype.prev = function () {\n this.selectedYear = (this.selectedMonth === 0) ? this.selectedYear - 1 : this.selectedYear;\n this.selectedMonth = (this.selectedMonth === 0) ? 11 : this.selectedMonth - 1;\n this.rerenderMonth();\n };\n DefaultCalendar.prototype.next = function () {\n this.selectedYear = (this.selectedMonth === 11) ? this.selectedYear + 1 : this.selectedYear;\n this.selectedMonth = (this.selectedMonth + 1) % 12;\n this.rerenderMonth();\n };\n DefaultCalendar.prototype.rerenderSelectYear = function () {\n var match = /c-(\\d*):c\\+(\\d*)/g.exec(this.options.yearRange);\n var minusYear = 0;\n var plusYear = 1;\n if (match !== null) {\n minusYear = parseInt(match[1]);\n plusYear = parseInt(match[2]);\n }\n this.selectYearElem.innerHTML = '';\n for (var i = 0; i <= minusYear + plusYear; i++) {\n var op = document.createElement(\"option\");\n var year = this.selectedYear - minusYear + i;\n op.value = year.toString();\n op.innerText = year.toString();\n this.selectYearElem.appendChild(op);\n }\n };\n DefaultCalendar.prototype.jump = function (year, month) {\n this.selectedYear = year;\n this.selectedMonth = month;\n this.rerenderMonth();\n };\n DefaultCalendar.prototype.rerenderMonth = function () {\n var _this = this;\n //header text\n this.updateDisplayedDateValue();\n this.rerenderSelectYear();\n var firstDay = (new Date(this.selectedYear, this.selectedMonth)).getDay();\n var daysInMonth = new Date(this.selectedYear, this.selectedMonth + 1, 0).getDate();\n this.calendarBody.innerHTML = \"\";\n this.selectYearElem.value = this.selectedYear.toString();\n this.selectMonthElem.value = this.selectedMonth.toString();\n this.daysOfWeek.forEach(function (day, idx) {\n domel('div', _this.calendarBody)\n .addClass(\"\".concat(_this.cssPrefix, \"-weekday\"))\n .addClass(idx == 0 || idx == 6 ? \"\".concat(_this.cssPrefix, \"-weekend\") : '')\n .text(day);\n });\n // Add empty cells before first day\n for (var i = 0; i < firstDay; i++) {\n domel('div', this.calendarBody)\n .addClass(\"\".concat(this.cssPrefix, \"-day-empty\"));\n }\n // Add all month days\n var today = new Date();\n for (var day = 1; day <= daysInMonth; day++) {\n var builder = domel('div', this.calendarBody)\n .addClass(\"\".concat(this.cssPrefix, \"-day\"))\n .attr('data-date', day.toString())\n .text(day.toString())\n .on('click', function (e) {\n _this.currentDate.setFullYear(_this.selectedYear);\n _this.currentDate.setMonth(_this.selectedMonth);\n _this.currentDate.setDate(parseInt(e.target.getAttribute('data-date')));\n _this.dateChanged(_this.options.oneClickDateSelection);\n });\n if (day === today.getDate() && this.selectedYear === today.getFullYear() && this.selectedMonth === today.getMonth()) {\n builder.addClass(\"\".concat(this.cssPrefix, \"-day-current\"));\n }\n if (day === this.currentDate.getDate() && this.selectedYear === this.currentDate.getFullYear() && this.selectedMonth === this.currentDate.getMonth()) {\n builder.addClass(\"\".concat(this.cssPrefix, \"-day-selected\"));\n }\n var dayOfWeek = (firstDay + day - 1) % 7;\n if (dayOfWeek == 0 || dayOfWeek == 6) {\n builder.addClass(\"\".concat(this.cssPrefix, \"-weekend\"));\n }\n }\n // Add empty cells after last day\n var cellsDrawnInLastRow = (firstDay + daysInMonth) % 7;\n var cellsToDraw = cellsDrawnInLastRow == 0 ? 0 : 7 - cellsDrawnInLastRow;\n for (var i = 0; i < cellsToDraw; i++) {\n domel('div', this.calendarBody)\n .addClass(\"\".concat(this.cssPrefix, \"-day-empty\"));\n }\n };\n DefaultCalendar.prototype.dateChanged = function (apply) {\n _super.prototype.dateChanged.call(this, apply);\n this.rerenderMonth();\n };\n return DefaultCalendar;\n}(Calendar));\nexport { DefaultCalendar };\n//# sourceMappingURL=default_calendar.js.map","var TimePicker = /** @class */ (function () {\n function TimePicker(slot, options) {\n this.slot = slot;\n this.options = options || {};\n }\n Object.defineProperty(TimePicker.prototype, \"cssPrefix\", {\n get: function () {\n return 'kdtp-tp';\n },\n enumerable: false,\n configurable: true\n });\n TimePicker.prototype.setTime = function (time) {\n this.currentTime = new Date(time);\n };\n TimePicker.prototype.getTime = function () {\n return new Date(this.currentTime);\n };\n TimePicker.prototype.timeChanged = function () {\n if (this.options.onTimeChanged) {\n this.options.onTimeChanged(this.currentTime);\n }\n };\n return TimePicker;\n}());\nexport { TimePicker };\n//# sourceMappingURL=time_picker.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { i18n } from '@easydata/core';\nimport { domel } from '../utils/dom_elem_builder';\nimport { TimePicker } from './time_picker';\nvar DefaultTimePicker = /** @class */ (function (_super) {\n __extends(DefaultTimePicker, _super);\n function DefaultTimePicker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DefaultTimePicker.prototype.setTime = function (time) {\n _super.prototype.setTime.call(this, time);\n this.updateDisplayedTime();\n this.hoursInput.valueAsNumber = time.getHours();\n this.minutesInput.valueAsNumber = time.getMinutes();\n };\n DefaultTimePicker.prototype.render = function () {\n var _this = this;\n domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-time\"))\n .addChild('span', function (builder) { return _this.timeText = builder.toDOM(); })\n .toDOM();\n var slidersBuilder = domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-sliders\"));\n slidersBuilder\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-time-row\"))\n .title('Hours')\n .addChild('input', function (builder) { return _this.hoursInput = builder\n .addClass(\"\".concat(_this.cssPrefix, \"-input-hours\"))\n .type('range')\n .attr('min', '0')\n .attr('max', '23')\n .attr('step', '1')\n .on('input', function (e) {\n _this.currentTime.setHours(_this.hoursInput.valueAsNumber);\n _this.updateDisplayedTime();\n _this.timeChanged();\n })\n .toDOM(); }); });\n slidersBuilder\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-time-row\"))\n .title('Minutes')\n .addChild('input', function (builder) { return _this.minutesInput = builder\n .addClass(\"\".concat(_this.cssPrefix, \"-input-minutes\"))\n .type('range')\n .attr('min', '0')\n .attr('max', '59')\n .attr('step', '1')\n .on('input', function (e) {\n _this.currentTime.setMinutes(_this.minutesInput.valueAsNumber);\n _this.updateDisplayedTime();\n _this.timeChanged();\n })\n .toDOM(); }); });\n return this.slot;\n };\n DefaultTimePicker.prototype.updateDisplayedTime = function () {\n var locale = i18n.getCurrentLocale();\n var timeToDraw = this.currentTime.toLocaleString(locale == 'en' ? undefined : locale, {\n hour: \"numeric\",\n minute: \"numeric\"\n });\n this.timeText.innerText = timeToDraw;\n };\n return DefaultTimePicker;\n}(TimePicker));\nexport { DefaultTimePicker };\n//# sourceMappingURL=default_time_picker.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { i18n } from '@easydata/core';\nimport { domel } from '../utils/dom_elem_builder';\nimport { DateTimePicker } from './date_time_picker';\nimport { DefaultCalendar } from './default_calendar';\nimport { DefaultTimePicker } from './default_time_picker';\nimport { getElementAbsolutePos } from '../utils/ui-utils';\nvar DefaultDateTimePicker = /** @class */ (function (_super) {\n __extends(DefaultDateTimePicker, _super);\n function DefaultDateTimePicker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DefaultDateTimePicker.prototype.render = function () {\n var _this = this;\n var sb = domel('div', document.body)\n .addClass(\"\".concat(this.cssPrefix))\n .attr('tabIndex', '0')\n .setStyle('position', 'absolute')\n .setStyle('top', '-1000px')\n .setStyle('left', '-1000px')\n .on('keydown', function (ev) {\n if (ev.keyCode === 27) { // ESC is pressed\n _this.cancel();\n }\n else if (ev.keyCode === 13) { // Enter is pressed\n _this.apply(_this.getDateTime());\n }\n return false;\n });\n if (this.options.zIndex) {\n sb.setStyle('z-index', \"\".concat(this.options.zIndex));\n }\n this.slot = sb.toDOM();\n _super.prototype.render.call(this);\n this.renderButtons();\n this.globalMouseDownHandler = function (e) {\n var event = window.event || e;\n var o = event.srcElement || event.target;\n var isOutside = !_this.slot.contains(event.target);\n if (isOutside) {\n document.removeEventListener('mousedown', _this.globalMouseDownHandler, true);\n _this.cancel();\n }\n return true;\n };\n };\n DefaultDateTimePicker.prototype.renderButtons = function () {\n var _this = this;\n var builder = domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-buttons\"))\n .addChild('button', function (b) { return _this.nowButton = b\n .addClass(\"\".concat(_this.cssPrefix, \"-button \").concat(_this.cssPrefix, \"-button-now\"))\n .text(i18n.getText('ButtonNow'))\n .on('click', function () {\n _this.setDateTime(new Date());\n _this.dateTimeChanged();\n return false;\n })\n .toDOM(); });\n if (this.options.showTimePicker || !this.options.oneClickDateSelection) {\n builder.addChild('button', function (b) { return _this.submitButton = b\n .addClass(\"\".concat(_this.cssPrefix, \"-button \").concat(_this.cssPrefix, \"-button-apply\"))\n .text(i18n.getText('ButtonApply'))\n .on('click', function () {\n _this.apply(_this.getDateTime());\n return false;\n })\n .toDOM(); });\n }\n builder.addChild('button', function (b) { return _this.submitButton = b\n .addClass(\"\".concat(_this.cssPrefix, \"-button \").concat(_this.cssPrefix, \"-button-cancel\"))\n .text(i18n.getText('ButtonCancel'))\n .on('click', function () {\n _this.cancel();\n return false;\n })\n .toDOM(); });\n };\n DefaultDateTimePicker.prototype.createCalendar = function (options) {\n this.calendarSlot =\n domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-cal\"))\n .toDOM();\n return new DefaultCalendar(this.calendarSlot, options);\n };\n DefaultDateTimePicker.prototype.createTimePicker = function (options) {\n this.timePickerSlot =\n domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-tp\"))\n .toDOM();\n return new DefaultTimePicker(this.timePickerSlot, options);\n };\n DefaultDateTimePicker.prototype.show = function (anchor) {\n var _this = this;\n if (this.options.showDateTimeInput) {\n if (this.options.beforeShow) {\n this.options.beforeShow();\n }\n var anchorPos = getElementAbsolutePos(anchor || document.body);\n var parentPos = getElementAbsolutePos(anchor ? anchor.parentElement || anchor : document.body);\n this.slot.style.top = parentPos.y + 'px';\n this.slot.style.left = anchorPos.x + 'px';\n }\n else {\n _super.prototype.show.call(this, anchor);\n this.slot.focus();\n }\n setTimeout(function () {\n document.addEventListener('mousedown', _this.globalMouseDownHandler, true);\n }, 1);\n };\n return DefaultDateTimePicker;\n}(DateTimePicker));\nexport { DefaultDateTimePicker };\n//# sourceMappingURL=default_date_time_picker.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { i18n, utils, liquid } from '@easydata/core';\nimport { DialogFooterAlignment } from './dialog_service';\nimport { domel } from '../utils/dom_elem_builder';\nvar cssPrefix = \"kdlg\";\nexport var DefaultDialogService = /** @class */ (function () {\n function DefaultDialogService() {\n }\n DefaultDialogService.prototype.openConfirm = function (title, content, callback) {\n var _this = this;\n var template = \"<div id=\\\"\".concat(cssPrefix, \"-dialog-confirm\\\">\").concat(content, \"</div>\");\n var options = {\n title: title,\n closable: false,\n submitable: true,\n cancelable: true,\n body: template\n };\n if (callback) {\n options.onSubmit = function () {\n callback(true);\n };\n options.onCancel = function () {\n callback(false);\n };\n this.open(options);\n return;\n }\n return new Promise(function (resolve) {\n options.onSubmit = function () {\n resolve(true);\n };\n options.onCancel = function () {\n resolve(false);\n };\n _this.open(options);\n });\n };\n DefaultDialogService.prototype.openPrompt = function (title, content, defVal, callback) {\n var _this = this;\n var template = \"<div id=\\\"\".concat(cssPrefix, \"-dialog-form\\\" class=\\\"kfrm-form\\\">\\n <div class=\\\"kfrm-fields label-above\\\">\\n <label for=\\\"\").concat(cssPrefix, \"-dialog-form-input\\\" id=\\\"\").concat(cssPrefix, \"-dialog-form-content\\\">\").concat(content, \"</label>\\n <input type=\\\"text\\\" name=\\\"\").concat(cssPrefix, \"-dialog-form-input\\\" id=\\\"\").concat(cssPrefix, \"-dialog-form-input\\\" />\\n </div>\\n </div>\");\n var options = {\n title: title,\n submitable: true,\n closable: true,\n cancelable: true,\n submitOnEnter: true,\n body: template,\n arrangeParents: false,\n beforeOpen: function () {\n var input = document.getElementById(\"\".concat(cssPrefix, \"-dialog-form-input\"));\n if (defVal) {\n input.value = defVal;\n }\n input.focus();\n }\n };\n var processInput = function (callback) {\n var input = document.getElementById(\"\".concat(cssPrefix, \"-dialog-form-input\"));\n var result = input.value;\n if (result && result.replace(/\\s/g, '').length > 0) {\n callback(result);\n return true;\n }\n input.classList.add('eqjs-invalid');\n return false;\n };\n if (callback) {\n options.onSubmit = function () {\n return processInput(callback);\n };\n options.onCancel = function () {\n callback(\"\");\n };\n this.open(options);\n return;\n }\n return new Promise(function (resolve) {\n options.onSubmit = function () {\n return processInput(resolve);\n };\n options.onCancel = function () {\n resolve(\"\");\n };\n _this.open(options);\n });\n };\n DefaultDialogService.prototype.open = function (options, data) {\n var _this = this;\n var dialog = new DefaultDialog(options, data);\n var onDestroy = options.onDestroy;\n options.onDestroy = function (dlg) {\n _this.untrack(dlg);\n onDestroy && onDestroy(dlg);\n };\n dialog.open();\n this.track(dialog);\n return dialog;\n };\n DefaultDialogService.prototype.createSet = function (options) {\n return new DefaultDialogSet(options, this);\n };\n DefaultDialogService.prototype.untrack = function (dlg) {\n var index = DefaultDialogService.openDialogs.indexOf(dlg);\n if (index >= 0) {\n DefaultDialogService.openDialogs.splice(index, 1);\n }\n };\n DefaultDialogService.prototype.track = function (dlg) {\n DefaultDialogService.openDialogs.push(dlg);\n };\n DefaultDialogService.prototype.openProgress = function (options) {\n var _this = this;\n var dialog = new DefaultProgressDialog(options);\n var onDestroy = options.onDestroy;\n options.onDestroy = function (dlg) {\n _this.untrack(dlg);\n onDestroy && onDestroy(dlg);\n };\n dialog.open();\n this.track(dialog);\n return dialog;\n };\n DefaultDialogService.prototype.getAllDialogs = function () {\n return Array.from(DefaultDialogService.openDialogs);\n };\n DefaultDialogService.prototype.closeAllDialogs = function () {\n for (var _i = 0, _a = Array.from(DefaultDialogService.openDialogs); _i < _a.length; _i++) {\n var dialog = _a[_i];\n dialog.close();\n }\n };\n DefaultDialogService.openDialogs = [];\n return DefaultDialogService;\n}());\nvar DefaultDialog = /** @class */ (function () {\n function DefaultDialog(options, data) {\n var _this = this;\n this.options = options;\n this.submitHandler = function (token) {\n if (_this.options.onSubmit && _this.options.onSubmit(_this, token) === false) {\n return false;\n }\n _this.destroy();\n return true;\n };\n this.cancelHandler = function () {\n if (_this.options.onCancel) {\n _this.options.onCancel(_this);\n }\n _this.destroy();\n };\n this.keydownHandler = function (ev) {\n if (ev.keyCode == 13 && _this.isActiveDialog()) {\n ev.preventDefault();\n ev.stopPropagation();\n if (_this.submitHandler()) {\n window.removeEventListener('keydown', _this.keydownHandler, false);\n return false;\n }\n }\n return true;\n };\n this.dialogId = utils.generateId('dlg');\n this.data = data;\n this.slot =\n domel('div', document.body)\n .attr('tab-index', '-1')\n .data('dialog-id', this.dialogId)\n .addClass(\"\".concat(cssPrefix, \"-modal\"), 'is-active')\n .focus()\n .addChild('div', function (b) { return b\n .addClass('kdlg-modal-background'); })\n .addChild('div', function (b) { return _this.windowElement = b\n .addClass(\"\".concat(cssPrefix, \"-modal-window\"))\n .addChild('header', function (b) {\n _this.headerElement = b\n .addClass(\"\".concat(cssPrefix, \"-header\"))\n .addChild('p', function (b) { return b\n .addClass(\"\".concat(cssPrefix, \"-header-title\"))\n .addText(options.title); })\n .toDOM();\n if (options.closable !== false)\n b.addChild('button', function (b) { return b\n .addClass(\"\".concat(cssPrefix, \"-modal-close\"))\n .on('click', function () {\n _this.cancelHandler();\n })\n .focus(); });\n })\n .addChild('div', function (b) {\n b.addClass(\"\".concat(cssPrefix, \"-alert-container\"));\n _this.alertElement = b.toDOM();\n })\n .addChild('section', function (b) {\n _this.bodyElement = b\n .addClass(\"\".concat(cssPrefix, \"-body\"))\n .toDOM();\n if (typeof options.body === 'string') {\n var html = liquid.renderLiquidTemplate(options.body, data);\n b.addHtml(html);\n }\n else {\n b.addChildElement(options.body);\n }\n })\n .addChild('footer', function (b) {\n var alignClass = null;\n if (options.footerAlignment && options.footerAlignment == DialogFooterAlignment.Center) {\n alignClass = 'align-center';\n }\n else {\n alignClass = 'align-right';\n }\n _this.footerElement = b\n .addClass(\"\".concat(cssPrefix, \"-footer\"))\n .toDOM();\n b.addClass(alignClass);\n if (options.submitable === false)\n return;\n b.addChild('button', function (bb) {\n bb.id(_this.dialogId + '-btn-submit')\n .addClass('kfrm-button', 'is-info')\n .addText(options.submitButtonText || i18n.getText('ButtonOK'));\n if (options.recaptchaSiteKey) {\n bb.data('sitekey', options.recaptchaSiteKey);\n bb.addClass('g-recaptcha');\n bb.on('click', function (e) {\n if (grecaptcha) {\n grecaptcha.ready(function () {\n grecaptcha.execute(options.recaptchaSiteKey, { action: 'submit' })\n .then(function (token) {\n _this.submitHandler(token);\n });\n });\n }\n else {\n _this.submitHandler();\n }\n });\n }\n else {\n bb.on('click', function (e) {\n _this.submitHandler();\n });\n }\n bb.focus();\n });\n if (options.cancelable !== false)\n b.addChild('button', function (bb) { return bb\n .id(_this.dialogId + '-btn-cancel')\n .addClass('kfrm-button')\n .addText(options.cancelButtonText || i18n.getText('ButtonCancel'))\n .on('click', function (e) {\n _this.cancelHandler();\n }); });\n })\n .toDOM(); })\n .toDOM();\n }\n DefaultDialog.prototype.getData = function () {\n return this.data;\n };\n DefaultDialog.prototype.getRootElement = function () {\n return this.slot;\n };\n DefaultDialog.prototype.getSubmitButtonElement = function () {\n return document.getElementById(this.dialogId + '-btn-submit');\n };\n DefaultDialog.prototype.getCancelButtonElement = function () {\n return document.getElementById(this.dialogId + '-btn-cancel');\n };\n DefaultDialog.prototype.open = function () {\n var _this = this;\n if (this.options.beforeOpen) {\n this.options.beforeOpen(this);\n }\n domel(this.slot).show();\n if (this.options.arrangeParents) {\n this.arrangeParents(true);\n }\n var windowDiv = this.slot\n .querySelector(\".\".concat(cssPrefix, \"-modal-window\"));\n if (this.options.height) {\n windowDiv.style.height = typeof this.options.height === 'string'\n ? this.options.height\n : \"\".concat(this.options.height, \"px\");\n }\n if (this.options.width) {\n windowDiv.style.width = typeof this.options.width === 'string'\n ? this.options.width\n : \"\".concat(this.options.width, \"px\");\n }\n if (this.options.submitOnEnter) {\n window.addEventListener('keydown', this.keydownHandler, false);\n }\n //clear alert on change in any input element \n this.slot.querySelectorAll('input')\n .forEach(function (element) {\n return element.addEventListener('input', function () {\n _this.clearAlert();\n if (_this.options.onInput) {\n _this.options.onInput(_this);\n }\n });\n });\n if (this.options.onShow) {\n this.options.onShow(this);\n }\n };\n DefaultDialog.prototype.submit = function () {\n this.submitHandler();\n };\n DefaultDialog.prototype.cancel = function () {\n this.cancelHandler();\n };\n DefaultDialog.prototype.close = function () {\n this.destroy();\n };\n DefaultDialog.prototype.disableButtons = function () {\n var buttons = this.slot.querySelectorAll('button');\n buttons.forEach(function (button) { return button.disabled = true; });\n };\n DefaultDialog.prototype.enableButtons = function () {\n var buttons = this.slot.querySelectorAll('button');\n buttons.forEach(function (button) { return button.disabled = false; });\n };\n DefaultDialog.prototype.showAlert = function (text, reason, replace) {\n var alert = domel('div')\n .addClass(\"\".concat(cssPrefix, \"-alert \").concat(reason || ''))\n .addChild('span', function (b) { return b\n .addClass(\"\".concat(cssPrefix, \"-alert-closebtn\"))\n .text('×')\n .on('click', function (ev) {\n var alert = ev.target.parentElement;\n alert.parentElement.removeChild(alert);\n }); })\n .addText(text)\n .toDOM();\n if (replace === true) {\n this.clearAlert();\n }\n this.alertElement.appendChild(alert);\n };\n DefaultDialog.prototype.clearAlert = function () {\n this.alertElement.innerHTML = '';\n };\n DefaultDialog.prototype.destroy = function () {\n var elem = document.querySelectorAll(\"[data-dialog-id=\\\"\".concat(this.dialogId, \"\\\"]\"));\n if (elem.length <= 0)\n return;\n if (this.options.arrangeParents) {\n this.arrangeParents(false);\n }\n document.body.removeChild(this.slot);\n if (this.options.submitOnEnter) {\n window.removeEventListener('keydown', this.keydownHandler, false);\n }\n if (this.options.onDestroy) {\n this.options.onDestroy(this);\n }\n };\n DefaultDialog.prototype.isActiveDialog = function () {\n var windowDivs = document.documentElement.querySelectorAll('.kdlg-modal');\n return windowDivs[windowDivs.length - 1] === this.slot;\n };\n DefaultDialog.prototype.arrangeParents = function (turnOn) {\n var windowDivs = document.documentElement.querySelectorAll('.kdlg-modal-window');\n for (var i = 0; i < windowDivs.length - 1; i++) {\n if (turnOn) {\n var offset = i == 0 ? 20 : i * 40 + 20;\n domel(windowDivs[i])\n .setStyle('margin-top', \"\".concat(offset, \"px\"))\n .setStyle('margin-left', \"\".concat(offset, \"px\"));\n }\n else {\n domel(windowDivs[i])\n .removeStyle('margin-top')\n .removeStyle('margin-left');\n }\n }\n };\n return DefaultDialog;\n}());\nexport { DefaultDialog };\nvar DefaultProgressDialog = /** @class */ (function (_super) {\n __extends(DefaultProgressDialog, _super);\n function DefaultProgressDialog(options, data) {\n var _this = this;\n var contentElement;\n var progressElement;\n var body = domel('div')\n .addChild('div', function (b) { return contentElement = b\n .text(options.content || '')\n .toDOM(); })\n .addChild('div', function (b) {\n b\n .addClass(\"\".concat(cssPrefix, \"-progress-line\"))\n .addChild('div', function (b) {\n progressElement = b\n .addClass('fill')\n .toDOM();\n if (options.determinated) {\n b.setStyle('width', '0%');\n }\n else {\n b.addClass('indeterminate');\n }\n });\n })\n .toDOM();\n _this = _super.call(this, {\n title: options.title,\n body: body,\n beforeOpen: options.beforeOpen,\n onSubmit: options.onSubmit,\n width: options.width,\n height: options.height,\n submitable: false,\n cancelable: false,\n closable: false,\n onDestroy: options.onDestroy\n }, data) || this;\n _this.contentElement = contentElement;\n _this.progressElement = progressElement;\n return _this;\n }\n DefaultProgressDialog.prototype.updateContent = function (content) {\n this.contentElement.innerText = content;\n };\n DefaultProgressDialog.prototype.updateProgress = function (progress) {\n var _this = this;\n progress = this.in01(progress);\n this.progressElement.style.width = \"\".concat(progress * 100, \"%\");\n if (progress === 1) {\n // postpone for 0.5s for smooth closing\n setTimeout(function () {\n _this.submit();\n }, 500);\n }\n };\n DefaultProgressDialog.prototype.in01 = function (num) {\n if (num > 1)\n return 1;\n if (num < 0)\n return 0;\n return num;\n };\n return DefaultProgressDialog;\n}(DefaultDialog));\nexport { DefaultProgressDialog };\nvar DefaultDialogSet = /** @class */ (function () {\n function DefaultDialogSet(options, dialogService) {\n this.options = options;\n this.dialogService = dialogService;\n this.currentDialog = null;\n this.currentIndex = 0;\n this.options = options;\n this.dialogService = dialogService;\n }\n DefaultDialogSet.prototype.getCurrent = function () {\n return this.currentDialog;\n };\n DefaultDialogSet.prototype.openNext = function (data) {\n return this.open(this.currentIndex + 1, data);\n };\n DefaultDialogSet.prototype.openPrev = function (data) {\n return this.open(this.currentIndex - 1, data);\n };\n DefaultDialogSet.prototype.open = function (page, data) {\n if (page < 0) {\n this.currentIndex = 0;\n }\n else if (page >= this.options.length) {\n this.currentIndex = this.options.length - 1;\n }\n else {\n this.currentIndex = page;\n }\n if (this.currentDialog) {\n try {\n this.currentDialog.close();\n }\n catch (e) { }\n }\n var dlgOptions = this.options[this.currentIndex];\n this.currentDialog = this.dialogService.open(dlgOptions, data);\n return this.currentDialog;\n };\n DefaultDialogSet.prototype.close = function () {\n if (this.currentDialog) {\n this.currentDialog.close();\n this.currentDialog = null;\n }\n };\n return DefaultDialogSet;\n}());\nexport { DefaultDialogSet };\n//# sourceMappingURL=default_dialog_service.js.map","import { i18n } from '@easydata/core';\nfunction addEasyDataUITexts() {\n i18n.updateDefaultTexts({\n GridPageInfo: '{FirstPageRecordNum} - {LastPageRecordNum} of {Total} records',\n GridItemsPerPage: 'items per page',\n ButtonOK: \"OK\",\n ButtonCancel: \"Cancel\",\n ButtonApply: 'Apply',\n ButtonNow: 'Now',\n LblTotal: 'Total'\n });\n}\naddEasyDataUITexts();\n//# sourceMappingURL=text_resources.js.map","// grid\nexport * from './grid/easy_grid';\nexport * from './grid/easy_grid_events';\nexport * from './grid/easy_grid_options';\nexport * from './grid/easy_grid_columns';\nexport * from './grid/easy_grid_cell_renderer';\n//datetimepicker\nexport * from './datetimepicker/calendar';\nexport * from './datetimepicker/date_time_picker';\nexport * from './datetimepicker/date_time_picker_options';\nexport * from './datetimepicker/default_calendar';\nexport * from './datetimepicker/default_date_time_picker';\nexport * from './datetimepicker/default_time_picker';\nexport * from './datetimepicker/time_picker';\n// utils\nexport * from './utils/browser_utils';\nexport * from './utils/dom_elem_builder';\nexport * from './utils/drag_manager';\nexport * from './utils/mask';\nexport * from './utils/ui-utils';\n//dialogs\nexport * from './dialogs/default_dialog_service';\nexport * from './dialogs/dialog_service';\nimport './i18n/text_resources';\nimport { DefaultDialogService } from './dialogs/default_dialog_service';\n// export dialogs to use outside of context as global\nvar dialogs = new DefaultDialogService();\nexport { dialogs };\n//# sourceMappingURL=public_api.js.map","import { i18n } from '@easydata/core';\r\nimport { DataType } from '@easydata/core';\r\n\r\nconst internalDateFormat = 'yyyy-MM-dd';\r\nconst internalTimeFormat = 'HH:mm';\r\n\r\nexport const getInternalDateTimeFormat = (dtype: DataType): string => {\r\n if (dtype == DataType.Date)\r\n return internalDateFormat;\r\n\r\n if (dtype == DataType.Time)\r\n return internalTimeFormat;\r\n\r\n return `${internalDateFormat}T${internalTimeFormat}`;\r\n}\r\n\r\nexport const getEditDateTimeFormat = (dtype: DataType): string => {\r\n const settings = i18n.getLocaleSettings();\r\n if (dtype == DataType.Date)\r\n return settings.editDateFormat;\r\n\r\n if (dtype == DataType.Time)\r\n return settings.editTimeFormat;\r\n\r\n return `${settings.editDateFormat} ${settings.editTimeFormat}`;\r\n}\r\n\r\nexport const setLocation = (path: string) => {\r\n const state = window.history.state;\r\n history.pushState(state, document.title, path)\r\n window.dispatchEvent(new Event('ed_set_location'));\r\n}","import { MetaEntityAttr } from '@easydata/core';\r\n\r\nexport interface ValidationResult {\r\n successed: boolean;\r\n messages?: string[];\r\n}\r\n\r\nexport abstract class Validator {\r\n\r\n public name: string;\r\n\r\n public abstract validate(attr: MetaEntityAttr, value: any): ValidationResult;\r\n \r\n}","import { MetaEntityAttr, i18n, utils as dataUtils } from '@easydata/core';\r\nimport { ValidationResult, Validator } from './validator';\r\n\r\nimport { getEditDateTimeFormat } from '../utils/utils';\r\n\r\nexport class DateTimeValidator extends Validator {\r\n\r\n constructor() {\r\n super();\r\n this.name = 'DateTime';\r\n }\r\n\r\n public validate(attr: MetaEntityAttr, value: any): ValidationResult {\r\n\r\n if (!dataUtils.IsDefinedAndNotNull(value) || value == '')\r\n return { successed: true };\r\n\r\n if (dataUtils.getDateDataTypes().indexOf(attr.dataType) >= 0) {\r\n try {\r\n const editFormat = getEditDateTimeFormat(attr.dataType);\r\n const newDate = dataUtils.strToDateTime(value, editFormat);\r\n }\r\n catch {\r\n return {\r\n successed: false,\r\n messages: [i18n.getText('DateTimeError')]\r\n }\r\n }\r\n }\r\n\r\n \r\n return { successed: true };\r\n }\r\n}","import { \r\n DataType, utils as dataUtils, \r\n MetaEntityAttr, \r\n} from '@easydata/core';\r\n\r\nimport { domel } from '@easydata/ui';\r\n\r\nimport { DataContext } from '../main/data_context';\r\n\r\nimport { ValidationResult, Validator } from '../validators/validator';\r\n\r\nimport * as crudUtils from '../utils/utils';\r\nimport { DateTimeValidator } from '../validators/datetime_validator';\r\n\r\nexport class EntityEditForm {\r\n private errorsDiv: HTMLElement;\r\n\r\n private html: HTMLElement;\r\n\r\n constructor(private context: DataContext) { \r\n }\r\n\r\n private validators: Validator[] = [ new DateTimeValidator() ];\r\n\r\n public getHtml() {\r\n return this.html;\r\n }\r\n\r\n private setHtmlInt(html: HTMLElement) {\r\n this.html = html;\r\n this.errorsDiv = this.html.querySelector('.errors-block');\r\n }\r\n\r\n public validate(): boolean {\r\n this.clearErrors();\r\n\r\n const inputs = Array.from(this.html.querySelectorAll<HTMLInputElement | HTMLSelectElement>('input, select'));\r\n let isValid = true;\r\n for(const input of inputs) {\r\n const attr = this.context.getMetaData().getAttributeById(input.name);\r\n\r\n if (input.type === 'checkbox')\r\n continue;\r\n\r\n const result = this.validateValue(attr, input.value);\r\n if (!result.successed) {\r\n if (isValid) {\r\n domel(this.errorsDiv)\r\n .addChild('ul');\r\n }\r\n\r\n isValid = false;\r\n\r\n for(const message of result.messages) {\r\n this.errorsDiv.firstElementChild.innerHTML += `<li>${attr.caption}: ${message}</li>`;\r\n }\r\n }\r\n \r\n this.markInputValid(input, result.successed);\r\n }\r\n\r\n return isValid;\r\n }\r\n\r\n public getData(): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n const filePromises: Promise<any>[] = [];\r\n const inputs = Array.from(this.html\r\n .querySelectorAll<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>('input, select, textarea'));\r\n\r\n let obj = {};\r\n for (const input of inputs) {\r\n const property = input.name.substring(input.name.lastIndexOf('.') + 1);\r\n const attr = this.context.getMetaData().getAttributeById(input.name);\r\n\r\n if (input.type === 'checkbox') {\r\n obj[property] = (input as HTMLInputElement).checked;\r\n }\r\n else if (input.type === 'file') {\r\n filePromises.push(this.fileToBase64((input as HTMLInputElement).files[0])\r\n .then(content => obj[property] = content));\r\n }\r\n else {\r\n obj[property] = this.mapValue(attr.dataType, input.value);\r\n }\r\n }\r\n\r\n Promise.all(filePromises)\r\n .then(() => resolve(obj))\r\n .catch((e) => reject(e));\r\n });\r\n }\r\n\r\n private fileToBase64(file: File): Promise<string> {\r\n return new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => {\r\n const result = reader.result.toString();\r\n resolve(result.substring(result.indexOf(',') + 1));\r\n } \r\n reader.onerror = error => reject(error);\r\n })\r\n }\r\n\r\n public useValidator(...validator: Validator[]) {\r\n this.useValidators(validator);\r\n }\r\n\r\n public useValidators(validators: Validator[]) {\r\n this.validators = this.validators.concat(validators);\r\n }\r\n\r\n private mapValue(type: DataType, value: string) {\r\n if (dataUtils.getDateDataTypes().indexOf(type) >= 0) {\r\n if (type !== DataType.Time && value && value.length) {\r\n const editFormat = crudUtils.getEditDateTimeFormat(type);\r\n const internalFormat = crudUtils.getInternalDateTimeFormat(type);\r\n\r\n const date = dataUtils.strToDateTime(value, editFormat);\r\n return dataUtils.dateTimeToStr(date, internalFormat)\r\n } \r\n\r\n return value && value.length ? value : null;\r\n }\r\n\r\n if (dataUtils.isIntType(type))\r\n return parseInt(value);\r\n\r\n if (dataUtils.isNumericType(type))\r\n return parseFloat(value);\r\n\r\n return value;\r\n }\r\n\r\n private clearErrors() {\r\n this.errorsDiv.innerHTML = '';\r\n\r\n this.html.querySelectorAll('input, select').forEach(el => {\r\n el.classList.remove('is-valid');\r\n el.classList.remove('is-invalid');\r\n });\r\n }\r\n\r\n private markInputValid(input: HTMLElement, valid: boolean) {\r\n input.classList.add(valid ? 'is-valid' : 'is-invalid');\r\n }\r\n\r\n private validateValue(attr: MetaEntityAttr, value: any): ValidationResult {\r\n const result = { successed: true, messages: []}\r\n for(const validator of this.validators) {\r\n const res = validator.validate(attr, value);\r\n if (!res.successed) {\r\n result.successed = false;\r\n result.messages = result.messages.concat(res.messages);\r\n }\r\n }\r\n\r\n return result;\r\n } \r\n}\r\n","import { i18n, utils as dataUtils } from '@easydata/core';\r\nimport { \r\n browserUtils, CellRendererType,\r\n domel, EasyGrid, \r\n GridCellRenderer, GridColumn, DFMT_REGEX\r\n} from '@easydata/ui';\r\nimport { DataFilter } from '../filter/data_filter';\r\n\r\nexport interface TextFilterWidgetOptions {\r\n focus?: boolean,\r\n instantMode?: boolean;\r\n instantTimeout?: number\r\n}\r\n\r\nexport class TextFilterWidget {\r\n private options = {\r\n focus: false,\r\n instantMode: false,\r\n instantTimeout: 1000\r\n }\r\n\r\n constructor(\r\n private slot: HTMLElement, \r\n private grid: EasyGrid, \r\n private filter: DataFilter,\r\n options?: TextFilterWidgetOptions) {\r\n\r\n this.options = dataUtils.assignDeep(this.options, options || {});\r\n\r\n const stringDefRenderer = this.grid.cellRendererStore\r\n .getDefaultRendererByType(CellRendererType.STRING);\r\n this.grid.cellRendererStore\r\n .setDefaultRenderer(CellRendererType.STRING, (value, column, cellElement, rowElement) => \r\n this.highlightCellRenderer(stringDefRenderer, value, column, cellElement, rowElement));\r\n\r\n const numDefRenderer = this.grid.cellRendererStore\r\n .getDefaultRendererByType(CellRendererType.NUMBER);\r\n this.grid.cellRendererStore\r\n .setDefaultRenderer(CellRendererType.NUMBER, (value, column, cellElement, rowElement) => \r\n this.highlightCellRenderer(numDefRenderer, value, column, cellElement, rowElement));\r\n\r\n this.render();\r\n }\r\n\r\n private filterInput: HTMLInputElement;\r\n\r\n private render() { \r\n const horizClass = browserUtils.IsIE() \r\n ? 'kfrm-fields-ie is-horizontal' \r\n : 'kfrm-fields is-horizontal';\r\n\r\n const isEdgeOrIE = browserUtils.IsIE() || browserUtils.IsEdge();\r\n \r\n domel(this.slot)\r\n .addClass(horizClass)\r\n .addChild('div', b => {\r\n b\r\n .addClass('control')\r\n .addChild('input', b => { \r\n this.filterInput = b.toDOM();\r\n b \r\n .attr('placeholder', i18n.getText('SearchInputPlaceholder'))\r\n .type('text')\r\n\r\n b.on('keydown', this.inputKeydownHandler.bind(this))\r\n\r\n if (this.options.instantMode) {\r\n b.on('keyup', this.inputKeyupHandler.bind(this));\r\n }\r\n });\r\n\r\n if (!isEdgeOrIE) {\r\n b \r\n .addClass('has-icons-right')\r\n .addChild('span', b => {\r\n b\r\n .addClass('icon')\r\n .addClass('is-right')\r\n .addClass('is-clickable')\r\n .html('&#x1F5D9;')\r\n .on('click', this.clearButtonClickHander.bind(this));\r\n });\r\n }\r\n });\r\n\r\n if (!this.options.instantMode) {\r\n domel(this.slot)\r\n .addChild('button', b => b\r\n .addClass('kfrm-button')\r\n .addText(i18n.getText('SearchBtn'))\r\n .on('click', this.searchButtonClickHandler.bind(this))\r\n );\r\n }\r\n\r\n if (this.options.focus) {\r\n this.filterInput.focus();\r\n }\r\n }\r\n\r\n private applyFilterTimeout: any;\r\n\r\n private inputKeydownHandler(ev: Event) {\r\n if ((ev as KeyboardEvent).keyCode == 13) {\r\n this.applyFilter(true);\r\n }\r\n }\r\n\r\n private inputKeyupHandler() {\r\n if (this.applyFilterTimeout) {\r\n clearTimeout(this.applyFilterTimeout);\r\n }\r\n\r\n this.applyFilterTimeout = setTimeout(() => {\r\n this.applyFilter(true);\r\n }, this.options.instantTimeout);\r\n }\r\n\r\n private clearButtonClickHander() {\r\n this.filterInput.value = '';\r\n this.filterInput.focus();\r\n\r\n this.applyFilter(true);\r\n }\r\n\r\n private searchButtonClickHandler() {\r\n this.applyFilter(true);\r\n }\r\n\r\n public applyFilter(checkChange : boolean) : boolean {\r\n if (this.applyFilterTimeout) {\r\n clearTimeout(this.applyFilterTimeout);\r\n }\r\n\r\n const filterValue = this.filter.getValue();\r\n if (!checkChange || filterValue != this.filterInput.value) {\r\n this.filter.apply(this.filterInput.value)\r\n .then(data => {\r\n this.grid.setData(data);\r\n });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private highlightCellRenderer(defaultRenderer: GridCellRenderer, value: any, column: GridColumn, cellElement: HTMLElement, rowElement: HTMLElement) { \r\n if (dataUtils.isNumericType(column.type) \r\n || dataUtils.getStringDataTypes().indexOf(column.type) >= 0) \r\n {\r\n if (value) {\r\n if (column.dataColumn && column.dataColumn.displayFormat\r\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\r\n value = column.dataColumn.displayFormat.replace(DFMT_REGEX, (_, $1) => {\r\n return i18n.numberToStr(value, $1);\r\n });\r\n }\r\n else {\r\n value = value.toLocaleString();\r\n }\r\n\r\n \r\n const result = this.highlightText(value.toString());\r\n if (result instanceof HTMLElement) {\r\n cellElement.title = value;\r\n cellElement.appendChild(result);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n defaultRenderer(value, column, cellElement, rowElement);\r\n }\r\n\r\n private highlightText(content: string): HTMLElement | string{\r\n const normalizedContent = content.toLowerCase();\r\n const filterValue = this.filter.getValue().toString();\r\n if (filterValue && filterValue.length > 0 && content && content.length > 0) {\r\n \r\n const indexInMas = [];\r\n const words = filterValue.split('||').map(w => w.trim().toLowerCase());\r\n for(let i = 0; i < words.length; i++) {\r\n let pos = 0;\r\n const lowerWord = words[i];\r\n if (!lowerWord.length)\r\n continue;\r\n if (lowerWord === normalizedContent) {\r\n const highlightSpan = document.createElement('span');\r\n highlightSpan.style.backgroundColor = 'yellow';\r\n highlightSpan.innerText = content;\r\n \r\n return highlightSpan;\r\n }\r\n while (pos < content.length - 1) {\r\n const index = normalizedContent.indexOf(lowerWord, pos);\r\n if (index >= 0) {\r\n indexInMas.push({index: index, length: words[i].length});\r\n pos = index + lowerWord.length;\r\n } else {\r\n pos++;\r\n }\r\n }\r\n }\r\n \r\n if (indexInMas.length > 0) {\r\n \r\n //sort array item by index\r\n indexInMas.sort((item1, item2) => {\r\n \r\n if (item1.index > item2.index) {\r\n return 1;\r\n } \r\n else if (item1.index == item2.index2) {\r\n return 0;\r\n } \r\n else {\r\n return -1;\r\n }\r\n \r\n });\r\n \r\n //remove intersecting gaps\r\n for(let i = 0; i < indexInMas.length - 1;) {\r\n const delta = indexInMas[i + 1].index - (indexInMas[i].index + indexInMas[i].length);\r\n if (delta < 0) {\r\n const addDelta = indexInMas[i + 1].length + delta;\r\n if (addDelta > 0) {\r\n indexInMas[i].length += addDelta;\r\n }\r\n indexInMas.splice(i + 1, 1);\r\n } else {\r\n i++;\r\n }\r\n }\r\n \r\n const div = document.createElement('div');\r\n for (let i = 0; i < indexInMas.length; i++) {\r\n if (i === 0) {\r\n const text = document.createTextNode(content.substring(0, indexInMas[i].index));\r\n div.appendChild(text);\r\n }\r\n \r\n const highlightSpan = document.createElement('span');\r\n highlightSpan.style.backgroundColor = 'yellow';\r\n highlightSpan.innerText = content.substring(indexInMas[i].index,\r\n indexInMas[i].index + indexInMas[i].length)\r\n \r\n div.appendChild(highlightSpan);\r\n\r\n const text = (i < indexInMas.length - 1) \r\n ? document.createTextNode(content.substring(indexInMas[i].index\r\n + indexInMas[i].length, indexInMas[i + 1].index))\r\n : document.createTextNode(content.substring(indexInMas[i].index\r\n + indexInMas[i].length));\r\n\r\n div.appendChild(text);\r\n }\r\n \r\n return div;\r\n }\r\n }\r\n\r\n return content;\r\n }\r\n}","import { \r\n DataRow, DataType, EasyDataTable, \r\n EditorTag, EntityAttrKind, i18n, \r\n MetaEntityAttr, utils as dataUtils,\r\n ValueEditor\r\n} from '@easydata/core';\r\n\r\nimport { \r\n browserUtils, DateTimePickerOptions, \r\n DefaultDateTimePicker, DefaultDialogService, \r\n domel, DomElementBuilder, EasyGrid \r\n} from '@easydata/ui';\r\n\r\nimport * as crudUtils from '../utils/utils';\r\n\r\nimport { DataContext } from '../main/data_context';\r\nimport { EntityEditForm } from './entity_edit_form';\r\nimport { TextFilterWidget } from '../widgets/text_filter_widget';\r\n\r\nconst isIE = browserUtils.IsIE();\r\n\r\nexport type FormBuildParams = {\r\n values?: DataRow,\r\n isEditForm?: boolean;\r\n};\r\n\r\nexport class EntityEditFormBuilder {\r\n private form: EntityEditForm;\r\n\r\n constructor(private context: DataContext, private params?: FormBuildParams) {\r\n this.params = params || {};\r\n this.reset();\r\n }\r\n\r\n public reset() {\r\n this.form = new EntityEditForm(this.context);\r\n }\r\n\r\n private setupLookupField(parent: HTMLElement, attr: MetaEntityAttr, readOnly: boolean, value: any): void {\r\n const lookupEntity = this.context.getMetaData().getRootEntity()\r\n .subEntities.filter(ent => ent.id == attr.lookupEntity)[0];\r\n const dataAttr = this.context.getMetaData().getAttributeById(attr.dataAttr);\r\n\r\n if (!dataAttr) return;\r\n\r\n readOnly = readOnly || !dataAttr.isEditable;\r\n\r\n value = this.params.values\r\n ? this.params.values.getValue(dataAttr.id)\r\n : undefined;\r\n\r\n const horizClass = isIE\r\n ? 'kfrm-fields-ie is-horizontal'\r\n : 'kfrm-fields is-horizontal';\r\n\r\n let inputEl: HTMLInputElement;\r\n domel(parent)\r\n .addChild('div', b => {\r\n b\r\n .addClass(horizClass)\r\n .addChild('input', b => {\r\n inputEl = b.toDOM();\r\n b.attr('readonly', '');\r\n\r\n b.name(dataAttr.id)\r\n b.type(this.resolveInputType(dataAttr.dataType));\r\n\r\n b.value(dataUtils.IsDefinedAndNotNull(value)\r\n ? value.toString() : '');\r\n });\r\n\r\n if (!readOnly)\r\n b.addChild('button', b => b\r\n .addClass('kfrm-button')\r\n .attr('title', i18n.getText('NavigationBtnTitle'))\r\n .addText('...')\r\n .on('click', (ev) => {\r\n const lookupTable = new EasyDataTable({\r\n loader: {\r\n loadChunk: (chunkParams) => this.context.getDataLoader()\r\n .loadChunk({ ...chunkParams, id: lookupEntity.id } as any)\r\n }\r\n });\r\n\r\n this.context.getDataLoader()\r\n .loadChunk({ offset: 0, limit: 1000, needTotal: true, sourceId: lookupEntity.id } as any)\r\n .then(data => {\r\n for (const col of data.table.columns.getItems()) {\r\n const attrs = lookupEntity.attributes.filter(attr =>\r\n attr.id == col.id && (attr.isPrimaryKey || attr.showInLookup));\r\n\r\n if (attrs.length) {\r\n lookupTable.columns.add(col);\r\n }\r\n }\r\n\r\n lookupTable.setTotal(data.total);\r\n\r\n for (const row of data.table.getCachedRows()) {\r\n lookupTable.addRow(row);\r\n }\r\n\r\n const ds = new DefaultDialogService();\r\n let gridSlot: HTMLElement = null;\r\n\r\n let selectedSlot: HTMLElement = null;\r\n\r\n let widgetSlot: HTMLElement;\r\n const slot = domel('div')\r\n .addClass(`kfrm-form`)\r\n .addChild('div', b => b\r\n .addClass(`kfrm-field`)\r\n .addChild('label', b => b\r\n .addText(i18n.getText('LookupSelectedItem'))\r\n .toDOM()\r\n )\r\n .addChild('div', b => selectedSlot = b\r\n .addText('None')\r\n .toDOM()\r\n )\r\n )\r\n .addChild('div', b => widgetSlot = b.toDOM())\r\n .addChild('div', b => b\r\n .addClass('kfrm-control')\r\n .addChild('div', b => gridSlot = b.toDOM())\r\n )\r\n .toDOM();\r\n\r\n let selectedValue = inputEl.value;\r\n\r\n const getValue = (row: DataRow | any, colId: string) => {\r\n\r\n if (row instanceof DataRow) {\r\n return row.getValue(colId);\r\n }\r\n\r\n const property = colId.substring(colId.lastIndexOf('.') + 1);\r\n return row[property]\r\n }\r\n\r\n const updateSelectedValue = (row: DataRow | any) => {\r\n selectedSlot.innerHTML = lookupTable.columns\r\n .getItems()\r\n .map(col => {\r\n return `<b>${col.label}:</b> ${getValue(row, col.id)}`\r\n })\r\n .join(', ');\r\n }\r\n\r\n if (selectedValue) {\r\n const attr = lookupEntity.getFirstPrimaryAttr();\r\n const key = attr.id.substring(attr.id.lastIndexOf('.') + 1);\r\n this.context.fetchRecord({[key]: selectedValue}, lookupEntity.id)\r\n .then(data => {\r\n if (data.entity) {\r\n updateSelectedValue(data.entity);\r\n }\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n });\r\n }\r\n\r\n const lookupGrid = new EasyGrid({\r\n slot: gridSlot,\r\n dataTable: lookupTable,\r\n fixHeightOnFirstRender: true,\r\n paging: {\r\n pageSize: 10\r\n },\r\n onActiveRowChanged: (ev) => {\r\n lookupGrid.getData().getRow(ev.rowIndex)\r\n .then((row) => {\r\n selectedValue = row.getValue(attr.lookupDataAttr);\r\n updateSelectedValue(row);\r\n });\r\n }\r\n });\r\n\r\n ds.open({\r\n title: i18n.getText('LookupDlgCaption')\r\n .replace('{entity}', lookupEntity.caption),\r\n body: slot,\r\n arrangeParents: true,\r\n beforeOpen: () => {\r\n const dataFilter = this.context.createFilter(lookupEntity.id, lookupGrid.getData(), true);\r\n new TextFilterWidget(widgetSlot, lookupGrid, dataFilter,\r\n { instantMode: true, focus: true });\r\n },\r\n onSubmit: () => {\r\n inputEl.value = selectedValue;\r\n return true;\r\n },\r\n onDestroy: () => {\r\n lookupGrid.destroy();\r\n // return focus on button\r\n b.toDOM().focus();\r\n }\r\n });\r\n });\r\n })\r\n );\r\n });\r\n }\r\n\r\n private setupDateTimeField(parent: HTMLElement, attr: MetaEntityAttr, value: any, readOnly: boolean, hidden: boolean) {\r\n const horizClass = isIE\r\n ? 'kfrm-fields-ie is-horizontal'\r\n : 'kfrm-fields is-horizontal';\r\n\r\n const editFormat = crudUtils.getEditDateTimeFormat(attr.dataType);\r\n\r\n let inputEl: HTMLInputElement;\r\n let btnEl: HTMLButtonElement;\r\n\r\n const mask = editFormat\r\n .replace('yyyy', '9999')\r\n .replace('MM', '99')\r\n .replace('dd', '99')\r\n .replace('HH', '99')\r\n .replace('mm', '99')\r\n .replace('ss', '99')\r\n\r\n domel(parent)\r\n .addChild('div', b => {\r\n b\r\n .addClass(horizClass)\r\n .addChild('input', b => {\r\n inputEl = b.toDOM();\r\n\r\n b.name(attr.id)\r\n b.type(hidden ? 'hidden' : this.resolveInputType(attr.dataType));\r\n\r\n if (readOnly) {\r\n b.attr('readonly', '');\r\n }\r\n else {\r\n b.mask(mask)\r\n b.on('keypress', (ev) => this.applySumbit(ev as KeyboardEvent))\r\n .on('input', ev => {\r\n b.removeClass('is-invalid');\r\n try {\r\n const newDate = dataUtils.strToDateTime(inputEl.value, editFormat);\r\n }\r\n catch (e) {\r\n b.addClass('is-invalid');\r\n }\r\n finally {\r\n\r\n }\r\n })\r\n .on('blur', ev => {\r\n if (inputEl.value === mask.replace(/[9]/g, '_')) {\r\n inputEl.value = '';\r\n }\r\n });\r\n }\r\n\r\n b.value((dataUtils.IsDefinedAndNotNull(value)\r\n ? dataUtils.dateTimeToStr(value, editFormat)\r\n : ''))\r\n });\r\n\r\n if (!readOnly)\r\n b.addChild('button', b => btnEl = b\r\n .addClass('kfrm-button')\r\n .attr('title', i18n.getText(attr.dataType !== DataType.Time\r\n ? 'CalendarBtnTitle'\r\n : 'TimerBtnTitle'))\r\n .addChild('i', b => b.addClass(attr.dataType !== DataType.Time\r\n ? 'ed-calendar-icon'\r\n : 'ed-timer-icon'))\r\n .on('click', (ev) => {\r\n\r\n let value: Date;\r\n try {\r\n value = inputEl.value.length\r\n ? attr.dataType !== DataType.Time\r\n ? dataUtils.strToDateTime(inputEl.value, editFormat)\r\n : dataUtils.strToTime(inputEl.value)\r\n : new Date(new Date().setSeconds(0));\r\n }\r\n catch {\r\n value = new Date(new Date().setSeconds(0));\r\n }\r\n\r\n const pickerOptions: DateTimePickerOptions = {\r\n zIndex: 9999999999,\r\n showCalendar: attr.dataType !== DataType.Time,\r\n showTimePicker: attr.dataType !== DataType.Date,\r\n onApply: (dateTime: Date) => {\r\n dateTime.setSeconds(0);\r\n dateTime.setMilliseconds(0);\r\n\r\n inputEl.value = dataUtils.dateTimeToStr(dateTime, editFormat);\r\n\r\n }\r\n };\r\n\r\n const dtp = new DefaultDateTimePicker(pickerOptions);\r\n dtp.setDateTime(value);\r\n dtp.show(ev.target as HTMLElement);\r\n\r\n }).toDOM()\r\n );\r\n });\r\n }\r\n\r\n private setupListField(parent: HTMLElement, attr: MetaEntityAttr, value: any, values: any, readOnly: boolean) {\r\n domel(parent)\r\n .addChild('div', b => b\r\n .addClass('kfrm-select full-width')\r\n .addChild('select', b => {\r\n if (readOnly)\r\n b.attr('readonly', '');\r\n b.attr('name', attr.id)\r\n b.on('keypress', (ev) => this.applySumbit(ev as KeyboardEvent))\r\n if (values) {\r\n for (let i = 0; i < values.length; i++) {\r\n const val = values[i];\r\n b.addOption({\r\n value: val.id,\r\n title: val.text,\r\n selected: i === 0\r\n });\r\n }\r\n }\r\n b.value(value);\r\n })\r\n );\r\n }\r\n\r\n private setupFileField(parent: HTMLElement, attr: MetaEntityAttr, readOnly: boolean, accept: string) {\r\n domel(parent)\r\n .addChild('input', b => {\r\n if (readOnly)\r\n b.attr('readonly', '');\r\n\r\n b.name(attr.id)\r\n .type(this.resolveInputType(attr.dataType));\r\n\r\n b.attr('accept', accept);\r\n });\r\n }\r\n\r\n private setupTextField(parent: HTMLElement, attr: MetaEntityAttr, value: any, readOnly: boolean, hidden : boolean) {\r\n domel(parent)\r\n .addChild('input', b => {\r\n if (readOnly) {\r\n b.attr('readonly', '');\r\n }\r\n b.type(hidden ? 'hidden' : this.resolveInputType(attr.dataType));\r\n\r\n b.name(attr.id)\r\n .type(this.resolveInputType(attr.dataType));\r\n\r\n if (attr.dataType == DataType.Bool) {\r\n if (value)\r\n b.attr('checked', '');\r\n } \r\n else {\r\n b.on('keypress', (ev) => this.applySumbit(ev as KeyboardEvent))\r\n .value(dataUtils.IsDefinedAndNotNull(value)\r\n ? value.toString()\r\n : '');\r\n }\r\n });\r\n }\r\n\r\n private setupTextArea(parent: HTMLElement, attr: MetaEntityAttr, value: any, readOnly: boolean) {\r\n // feature: modify size in value editor ??\r\n domel(parent)\r\n .addChild('textarea', b => {\r\n if (readOnly)\r\n b.attr('readonly', '');\r\n \r\n b.attr('name', attr.id)\r\n b.setStyle('height', `120px`)\r\n b.value(dataUtils.IsDefinedAndNotNull(value)\r\n ? value.toString()\r\n : '');\r\n });\r\n }\r\n\r\n private addFormField(parent: HTMLElement, attr: MetaEntityAttr) {\r\n const value = (this.params.values && attr.kind !== EntityAttrKind.Lookup)\r\n ? this.params.values.getValue(attr.id)\r\n : !this.params.isEditForm\r\n ? attr.defaultValue\r\n : undefined;\r\n\r\n const editor = this.resolveEditor(attr);\r\n\r\n const readOnly = this.params.isEditForm && (attr.isPrimaryKey || !attr.isEditable);\r\n const required = !attr.isNullable;\r\n \r\n if (isIE) {\r\n parent = domel('div', parent)\r\n .addClass('kfrm-field-ie')\r\n .toDOM();\r\n }\r\n\r\n domel(parent)\r\n .addChild('label', b => {\r\n b.attr('for', attr.id);\r\n b.addHtml(`${attr.caption} ${required ? '<sup style=\"color: red\">*</sup>' : ''}: `);\r\n\r\n if (attr.description) {\r\n b.addChild('div', b => b\r\n .attr('title', attr.description)\r\n .addClass('question-mark')\r\n .setStyle('vertical-align', 'middle')\r\n .setStyle('display', 'inline-block')\r\n );\r\n }\r\n });\r\n \r\n const hidden = attr.isPrimaryKey;\r\n \r\n if (attr.kind === EntityAttrKind.Lookup) {\r\n this.setupLookupField(parent, attr, readOnly, value);\r\n return;\r\n }\r\n\r\n switch (editor.tag) {\r\n case EditorTag.DateTime:\r\n this.setupDateTimeField(parent, attr, value, readOnly, hidden);\r\n break;\r\n\r\n case EditorTag.List:\r\n this.setupListField(parent, attr, value, editor.values, readOnly);\r\n break;\r\n\r\n case EditorTag.File:\r\n this.setupFileField(parent, attr, readOnly, editor.accept);\r\n break;\r\n\r\n case EditorTag.Edit:\r\n default:\r\n if (editor.multiline) {\r\n this.setupTextArea(parent, attr, value, readOnly);\r\n }\r\n else {\r\n this.setupTextField(parent, attr, value, readOnly, hidden);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private resolveInputType(dataType: DataType): string {\r\n if (dataType === DataType.Bool)\r\n return 'checkbox';\r\n\r\n if (dataType === DataType.Blob)\r\n return 'file';\r\n\r\n return 'text';\r\n }\r\n\r\n private resolveEditor(attr: MetaEntityAttr): ValueEditor {\r\n let editor = attr.defaultEditor || new ValueEditor();\r\n if (editor.tag == EditorTag.Unknown) {\r\n if (dataUtils.getDateDataTypes().indexOf(attr.dataType) >= 0) {\r\n editor.tag = EditorTag.DateTime;\r\n }\r\n else {\r\n editor.tag = EditorTag.Edit;\r\n }\r\n }\r\n\r\n return editor;\r\n }\r\n\r\n private applySumbit(ev: KeyboardEvent): boolean {\r\n if (ev.keyCode === 13) {\r\n this.sumbitCallback && this.sumbitCallback();\r\n return false;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private sumbitCallback: () => void;\r\n\r\n public onSubmit(sumbitCallback: () => void) {\r\n this.sumbitCallback = sumbitCallback;\r\n return this;\r\n }\r\n\r\n public build(): EntityEditForm {\r\n let fb: DomElementBuilder<HTMLDivElement>;\r\n const formHtml =\r\n domel('div')\r\n .addClass('kfrm-form')\r\n .addChild('div', b => b\r\n .addClass(`errors-block`)\r\n .toDOM()\r\n )\r\n .addChild('div', b => {\r\n b.addClass(`${isIE\r\n ? 'kfrm-fields-ie col-ie-1-4 label-align-right'\r\n : 'kfrm-fields col-a-1 label-align-right'}`);\r\n\r\n fb = b;\r\n })\r\n .toDOM();\r\n\r\n this.form['setHtmlInt'](formHtml);\r\n\r\n for (const attr of this.context.getActiveEntity().attributes) { \r\n if (!this.params.isEditForm && !attr.showOnCreate)\r\n continue;\r\n\r\n if (!attr.isPrimaryKey && this.params.isEditForm && !attr.showOnEdit) {\r\n continue;\r\n }\r\n\r\n this.addFormField(fb.toDOM(), attr)\r\n }\r\n\r\n return this.form;\r\n }\r\n}","export class ProgressBar {\r\n\r\n constructor(private slot: HTMLElement) {\r\n this.hide();\r\n this.slot.classList.add('ed-progress-bar');\r\n }\r\n\r\n public show() {\r\n this.slot.style.removeProperty('display');\r\n }\r\n\r\n public hide() {\r\n this.slot.style.display = 'none';\r\n }\r\n}","import { \r\n DataChunkDescriptor, \r\n DataLoader, EasyDataTable \r\n} from '@easydata/core';\r\n\r\nimport { DataContext } from './data_context';\r\n\r\nexport class EasyDataServerLoader implements DataLoader {\r\n constructor(protected context: DataContext) {\r\n\r\n }\r\n\r\n loadChunk(params: DataChunkDescriptor | any) {\r\n const url = this.context.resolveEndpoint('FetchDataset', \r\n { sourceId: params.sourceId || this.context.getActiveEntity().id });\r\n delete params.sourceId;\r\n\r\n this.context.startProcess();\r\n const http = this.context.getHttpClient();\r\n return http.post(url, params)\r\n .then((result) => {\r\n\r\n const dataTable = new EasyDataTable({\r\n chunkSize: 1000\r\n });\r\n\r\n const resultSet = result.resultSet;\r\n for(const col of resultSet.cols) {\r\n dataTable.columns.add(col);\r\n }\r\n\r\n for(const row of resultSet.rows) {\r\n dataTable.addRow(row);\r\n }\r\n \r\n let totalRecords = 0;\r\n if (result.meta && result.meta.totalRecords) {\r\n totalRecords = result.meta.totalRecords; \r\n }\r\n\r\n return {\r\n table: dataTable,\r\n total: totalRecords,\r\n hasNext: !params.needTotal \r\n || params.offset + params.limit < totalRecords\r\n }\r\n \r\n })\r\n .finally(() => {\r\n this.context.endProcess();\r\n });\r\n }\r\n\r\n}","import { \r\n HttpClient, MetaData,\r\n MetaEntity, combinePath, \r\n EasyDataTable, EasyDataTableOptions,\r\n DataLoader\r\n} from '@easydata/core';\r\nimport { DataFilter } from '../filter/data_filter';\r\nimport { TextDataFilter } from '../filter/text_data_filter';\r\n\r\nimport { EasyDataServerLoader } from './easy_data_server_loader';\r\n\r\ntype EasyDataEndpointKey = \r\n 'GetMetaData' |\r\n 'FetchDataset' | \r\n 'FetchRecord' |\r\n 'CreateRecord' |\r\n 'UpdateRecord' |\r\n 'DeleteRecord' ;\r\n\r\n\r\ninterface CompoundRecordKey { \r\n [key: string]: string \r\n}\r\n \r\nexport interface EasyDataContextOptions {\r\n metaDataId?: string;\r\n endpoint?: string;\r\n dataTable?: EasyDataTableOptions,\r\n onProcessStart?: () => void;\r\n onProcessEnd?: () => void;\r\n}\r\n\r\nexport class DataContext {\r\n private endpoints: Map<string, string> = new Map<string, string>();\r\n\r\n private http: HttpClient;\r\n\r\n private model: MetaData;\r\n\r\n private data: EasyDataTable;\r\n\r\n private dataLoader: EasyDataServerLoader;\r\n\r\n private activeEntity: MetaEntity;\r\n\r\n private options: EasyDataContextOptions;\r\n\r\n constructor(options?: EasyDataContextOptions) {\r\n this.options = options || {};\r\n\r\n this.http = new HttpClient();\r\n this.model = new MetaData();\r\n this.model.id = options.metaDataId || '__default';\r\n\r\n this.dataLoader = new EasyDataServerLoader(this);\r\n const dataTableOptions = {\r\n loader: this.dataLoader,\r\n ...options.dataTable\r\n };\r\n\r\n this.data = new EasyDataTable(dataTableOptions);\r\n\r\n this.setDefaultEndpoints(this.options.endpoint || '/api/easydata');\r\n }\r\n\r\n public getActiveEntity() {\r\n return this.activeEntity;\r\n }\r\n\r\n public setActiveSource(entityId: string) {\r\n this.activeEntity = this.model.getRootEntity().subEntities\r\n .filter(e => e.id == entityId)[0];\r\n }\r\n\r\n public getMetaData(): MetaData {\r\n return this.model;\r\n }\r\n\r\n public getData() {\r\n return this.data;\r\n }\r\n\r\n public getDataLoader(): DataLoader {\r\n return this.dataLoader;\r\n }\r\n\r\n public createFilter(): DataFilter\r\n public createFilter(sourceId: string, data: EasyDataTable, isLookup?: boolean): DataFilter\r\n public createFilter(sourceId?: string, data?: EasyDataTable, isLookup?: boolean): DataFilter {\r\n return new TextDataFilter(\r\n this.dataLoader, \r\n data || this.getData(), \r\n sourceId || this.activeEntity.id, \r\n isLookup);\r\n }\r\n\r\n public loadMetaData(): Promise<MetaData> {\r\n const url = this.resolveEndpoint('GetMetaData');\r\n this.startProcess();\r\n return this.http.get(url) \r\n .then(result => {\r\n if (result.model) {\r\n this.model.loadFromData(result.model);\r\n }\r\n\r\n return this.model;\r\n })\r\n .catch(error => { \r\n console.error(`Error: ${error.message}. Source: ${error.sourceError}`);\r\n return null;\r\n })\r\n .finally(() => {\r\n this.endProcess();\r\n });\r\n }\r\n\r\n public getHttpClient() {\r\n return this.http;\r\n }\r\n\r\n public fetchDataset() {\r\n this.data.clear();\r\n return this.dataLoader.loadChunk({offset: 0, limit: this.data.chunkSize, needTotal: true})\r\n .then(result => { \r\n for(const col of result.table.columns.getItems()) {\r\n this.data.columns.add(col);\r\n }\r\n\r\n this.data.setTotal(result.total);\r\n\r\n for(const row of result.table.getCachedRows()) {\r\n this.data.addRow(row);\r\n }\r\n\r\n return this.data;\r\n })\r\n }\r\n\r\n public fetchRecord(keys : CompoundRecordKey, sourceId?: string) {\r\n const url = this.resolveEndpoint('FetchRecord', { sourceId: sourceId || this.activeEntity.id });\r\n \r\n this.startProcess();\r\n return this.http.get(url, { queryParams: keys})\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public createRecord(obj: any, sourceId?: string) {\r\n const url = this.resolveEndpoint('CreateRecord', \r\n { sourceId: sourceId || this.activeEntity.id });\r\n\r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json' })\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public updateRecord(obj: any, sourceId?: string) {\r\n const url = this.resolveEndpoint('UpdateRecord', { sourceId: sourceId || this.activeEntity.id });\r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json' })\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public deleteRecord(obj: any, sourceId?: string) {\r\n const url = this.resolveEndpoint('DeleteRecord', { sourceId: sourceId || this.activeEntity.id });\r\n\r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json'})\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public setEndpoint(key: EasyDataEndpointKey, value: string) : void\r\n public setEndpoint(key: EasyDataEndpointKey | string, value: string) : void {\r\n this.endpoints.set(key, value);\r\n }\r\n\r\n public setEnpointIfNotExist(key: EasyDataEndpointKey, value: string): void\r\n public setEnpointIfNotExist(key: EasyDataEndpointKey | string, value: string): void {\r\n if (!this.endpoints.has(key))\r\n this.endpoints.set(key, value);\r\n }\r\n\r\n private endpointVarsRegex = /\\{.*?\\}/g;\r\n\r\n public resolveEndpoint(endpointKey: EasyDataEndpointKey, options?: any): string \r\n public resolveEndpoint(endpointKey: EasyDataEndpointKey | string, options?: any) : string {\r\n options = options || {};\r\n\r\n let result = this.endpoints.get(endpointKey);\r\n if (!result) {\r\n throw endpointKey + ' endpoint is not defined'; \r\n }\r\n\r\n let matches = result.match(this.endpointVarsRegex);\r\n if (matches) {\r\n for (let match of matches) {\r\n let opt = match.substring(1, match.length - 1);\r\n let optVal = options[opt];\r\n if (!optVal) {\r\n if (opt == 'modelId') {\r\n optVal = this.model.getId();\r\n }\r\n else if (opt == 'sourceId') {\r\n optVal = this.activeEntity.id;\r\n }\r\n else {\r\n throw `Parameter [${opt}] is not defined`;\r\n }\r\n }\r\n \r\n result = result.replace(match, optVal);\r\n }\r\n }\r\n \r\n return result;\r\n }\r\n\r\n public startProcess() {\r\n if (this.options.onProcessStart)\r\n this.options.onProcessStart();\r\n }\r\n\r\n public endProcess() {\r\n if (this.options.onProcessEnd)\r\n this.options.onProcessEnd();\r\n }\r\n\r\n private setDefaultEndpoints(endpointBase : string) {\r\n this.setEnpointIfNotExist('GetMetaData', combinePath(endpointBase, 'models/{modelId}'));\r\n this.setEnpointIfNotExist('FetchDataset', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/fetch'));\r\n this.setEnpointIfNotExist('FetchRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/fetch'));\r\n this.setEnpointIfNotExist('CreateRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/create'));\r\n this.setEnpointIfNotExist('UpdateRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/update'));\r\n this.setEnpointIfNotExist('DeleteRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/delete'));\r\n }\r\n}","import { MetaEntityAttr, i18n, utils as dataUtils } from '@easydata/core';\r\nimport { ValidationResult, Validator } from './validator';\r\n\r\nexport class TypeValidator extends Validator {\r\n\r\n constructor() {\r\n super();\r\n this.name = 'Type';\r\n }\r\n\r\n public validate(attr: MetaEntityAttr, value: any): ValidationResult {\r\n \r\n if (!dataUtils.IsDefinedAndNotNull(value) || value == '')\r\n return { successed: true };\r\n\r\n if (dataUtils.isNumericType(attr.dataType)) {\r\n if (!dataUtils.isNumeric(value))\r\n return { \r\n successed: false, \r\n messages: [ i18n.getText('NumberError') ]\r\n };\r\n\r\n\r\n if (dataUtils.isIntType(attr.dataType) \r\n && !Number.isInteger(Number.parseFloat(value))) {\r\n return {\r\n successed: false,\r\n messages: [ i18n.getText('IntNumberError') ]\r\n }\r\n }\r\n }\r\n\r\n return { successed: true };\r\n }\r\n}","import { MetaEntityAttr, i18n, utils as dataUtils } from '@easydata/core';\r\nimport { ValidationResult, Validator } from \"./validator\";\r\n\r\nexport class RequiredValidator extends Validator {\r\n\r\n constructor() {\r\n super();\r\n this.name = 'Required';\r\n }\r\n\r\n public validate(attr: MetaEntityAttr, value: any): ValidationResult {\r\n \r\n if (!attr.isNullable && (\r\n !dataUtils.IsDefinedAndNotNull(value)\r\n || value === ''))\r\n\r\n return {\r\n successed: false,\r\n messages: [ i18n.getText('RequiredError') ]\r\n }\r\n\r\n return { successed: true };\r\n }\r\n}","import { DataRow, i18n, utils as dataUtils } from '@easydata/core';\r\n\r\nimport { \r\n DefaultDialogService, \r\n DialogService, domel, EasyGrid, \r\n GridCellRenderer, GridColumn, RowClickEvent \r\n} from '@easydata/ui';\r\n\r\nimport { EntityEditFormBuilder } from '../form/entity_form_builder';\r\nimport { TextFilterWidget } from '../widgets/text_filter_widget';\r\n\r\nimport { DataContext } from '../main/data_context';\r\nimport { RequiredValidator } from '../validators/required_validator';\r\nimport { TypeValidator } from '../validators/type_validator';\r\nimport { Validator } from '../validators/validator';\r\nimport { EasyDataViewOptions } from './options';\r\nimport { setLocation } from '../utils/utils';\r\n\r\nexport class EntityDataView {\r\n private options: EasyDataViewOptions = {\r\n showFilterBox: true,\r\n showBackToEntities: true\r\n }\r\n\r\n private dlg: DialogService;\r\n\r\n private grid: EasyGrid;\r\n\r\n private filterWidget : TextFilterWidget;\r\n\r\n private defaultValidators: Validator[] = [ new RequiredValidator(), new TypeValidator()];\r\n\r\n constructor (\r\n private slot: HTMLElement, \r\n private context: DataContext, \r\n private basePath: string,\r\n options: EasyDataViewOptions) \r\n {\r\n this.options = dataUtils.assignDeep(this.options, options || {});\r\n\r\n this.dlg = new DefaultDialogService();\r\n\r\n const ent = this.context.getActiveEntity();\r\n if (!ent) {\r\n throw \"Can't find active entity for \" + window.location.pathname;\r\n }\r\n \r\n this.slot.innerHTML += `<h1>${ent.captionPlural || ent.caption}</h1>`;\r\n if (this.options.showBackToEntities) {\r\n domel(this.slot)\r\n .addChild('a', b => b\r\n .attr('href', 'javascript:void(0)')\r\n .text(`← ${i18n.getText('BackToEntities')}`)\r\n .on('click', (e) => {\r\n e.preventDefault();\r\n setLocation(this.basePath);\r\n })\r\n );\r\n }\r\n\r\n this.renderGrid();\r\n }\r\n\r\n private syncGridColumnHandler(column: GridColumn) {\r\n if (column.dataColumn) {\r\n const attr = this.context.getMetaData().getAttributeById(column.dataColumn.id);\r\n if (attr) {\r\n column.isVisible = attr.showOnView;\r\n }\r\n }\r\n }\r\n\r\n private renderGrid() {\r\n this.context.fetchDataset()\r\n .then(result => {\r\n const gridSlot = document.createElement('div');\r\n this.slot.appendChild(gridSlot);\r\n gridSlot.id = 'Grid';\r\n this.grid = new EasyGrid(dataUtils.assignDeep({\r\n slot: gridSlot,\r\n dataTable: result,\r\n paging: {\r\n pageSize: 15,\r\n allowPageSizeChange: true,\r\n pageSizeItems: [15, 30, 50, 100, 200]\r\n },\r\n showPlusButton: this.context.getActiveEntity().isEditable,\r\n plusButtonTitle: i18n.getText('AddRecordBtnTitle'),\r\n showActiveRow: false,\r\n onPlusButtonClick: this.addClickHandler.bind(this),\r\n onGetCellRenderer: this.manageCellRenderer.bind(this),\r\n onRowDbClick: this.rowDbClickHandler.bind(this),\r\n onSyncGridColumn: this.syncGridColumnHandler.bind(this)\r\n }, this.options.grid || {}));\r\n\r\n if (this.options.showFilterBox) {\r\n let filterWidgetSlot: HTMLElement;\r\n const filterBarDiv = domel('div')\r\n .addClass(`kfrm-form`)\r\n .setStyle('margin', '10px 0px')\r\n .addChild('div', b => \r\n filterWidgetSlot = b.toDOM()\r\n ).toDOM();\r\n \r\n this.slot.insertBefore(filterBarDiv, gridSlot);\r\n \r\n const dataFilter = this.context.createFilter();\r\n this.filterWidget = new TextFilterWidget(filterWidgetSlot, this.grid, dataFilter); \r\n }\r\n });\r\n }\r\n\r\n private manageCellRenderer(column: GridColumn, defaultRenderer: GridCellRenderer) {\r\n if (column.isRowNum) {\r\n column.width = 110;\r\n return (value: any, column: GridColumn, cell: HTMLElement, rowEl: HTMLElement) => {\r\n const b = domel('div', cell)\r\n .addClass(`keg-cell-value`);\r\n \r\n if (this.context.getActiveEntity().isEditable) {\r\n b.addChild('a', b => b\r\n .attr('href', 'javascript:void(0)')\r\n .text(i18n.getText('EditBtn'))\r\n .on('click', (ev) => this.editClickHandler(ev as MouseEvent, \r\n parseInt(rowEl.getAttribute('data-row-idx'))))\r\n )\r\n .addChild('span', b => b.text(' | '))\r\n .addChild('a', b => b\r\n .attr('href', 'javascript:void(0)')\r\n .text(i18n.getText('DeleteBtn'))\r\n .on('click', (ev) => \r\n this.deleteClickHandler(ev as MouseEvent, \r\n parseInt(rowEl.getAttribute('data-row-idx'))))\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private addClickHandler() {\r\n const activeEntity = this.context.getActiveEntity();\r\n const form = new EntityEditFormBuilder(this.context)\r\n .onSubmit(() => dlg.submit())\r\n .build();\r\n\r\n form.useValidators(this.defaultValidators);\r\n\r\n const dlg = this.dlg.open({\r\n title: i18n.getText('AddDlgCaption')\r\n .replace('{entity}', activeEntity.caption),\r\n body: form.getHtml(),\r\n onSubmit: () => {\r\n if (!form.validate())\r\n return false;\r\n \r\n form.getData()\r\n .then(obj => this.context.createRecord(obj))\r\n .then(() => {\r\n return this.refreshData();\r\n })\r\n .catch((error) => {\r\n this.processError(error);\r\n });\r\n }\r\n });\r\n }\r\n\r\n private editClickHandler(ev: MouseEvent, rowIndex: number) {\r\n this.grid.getData().getRow(rowIndex)\r\n .then(row => {\r\n if (row) {\r\n this.showEditForm(row);\r\n }\r\n })\r\n }\r\n\r\n private showEditForm(row: DataRow) {\r\n const activeEntity = this.context.getActiveEntity();\r\n\r\n const form = new EntityEditFormBuilder(this.context, { isEditForm: true, values: row })\r\n .onSubmit(() => dlg.submit())\r\n .build();\r\n \r\n form.useValidators(this.defaultValidators);\r\n\r\n const dlg = this.dlg.open({\r\n title: i18n.getText('EditDlgCaption')\r\n .replace('{entity}', activeEntity.caption),\r\n body: form.getHtml(),\r\n onSubmit: () => {\r\n if (!form.validate())\r\n return false;\r\n\r\n form.getData()\r\n .then(obj => this.context.updateRecord(obj))\r\n .then(() => { \r\n return this.refreshData();\r\n }) \r\n .catch((error) => {\r\n this.processError(error);\r\n });\r\n }\r\n })\r\n }\r\n\r\n private rowDbClickHandler(ev: RowClickEvent) {\r\n if (this.context.getActiveEntity().isEditable) {\r\n this.showEditForm(ev.row);\r\n }\r\n }\r\n\r\n private deleteClickHandler(ev: MouseEvent, rowIndex: number) {\r\n this.grid.getData().getRow(rowIndex)\r\n .then(row => {\r\n if (row) {\r\n const activeEntity = this.context.getActiveEntity();\r\n const keyAttrs = activeEntity.getPrimaryAttrs();\r\n const keyVals = keyAttrs.map(attr => row.getValue(attr.id));\r\n const keys = keyAttrs.reduce((val, attr, index) => { \r\n const property = attr.id.substring(attr.id.lastIndexOf('.') + 1);\r\n val[property] = keyVals[index];\r\n return val; \r\n }, {});\r\n this.dlg.openConfirm(\r\n i18n.getText('DeleteDlgCaption')\r\n .replace('{entity}', activeEntity.caption), \r\n i18n.getText('DeleteDlgMessage')\r\n .replace('{recordId}', Object.keys(keys)\r\n .map(key => `${key}:${keys[key]}`).join(';')), \r\n )\r\n .then((result) => {\r\n if (result) {\r\n this.context.deleteRecord(keys)\r\n .then(() => {\r\n return this.refreshData();\r\n })\r\n .catch((error) => {\r\n this.processError(error);\r\n });\r\n }\r\n })\r\n }\r\n });\r\n }\r\n\r\n private processError(error) {\r\n this.dlg.open({\r\n title: 'Ooops, something went wrong',\r\n body: error.message,\r\n closable: true,\r\n cancelable: false\r\n });\r\n }\r\n\r\n private refreshData(): Promise<void> {\r\n return this.context.fetchDataset()\r\n .then(() => {\r\n let processed = false;\r\n if (this.filterWidget) { \r\n processed = this.filterWidget.applyFilter(false);\r\n }\r\n\r\n if (!processed) {\r\n this.grid.refresh();\r\n }\r\n });\r\n }\r\n}","import { i18n, MetaData } from '@easydata/core';\r\nimport { domel } from '@easydata/ui';\r\nimport { setLocation } from '../utils/utils';\r\nimport { DataContext } from '../main/data_context';\r\n\r\nexport class RootDataView {\r\n private metaData: MetaData;\r\n\r\n constructor (\r\n private slot: HTMLElement, \r\n private context: DataContext, \r\n private basePath: string) {\r\n\r\n this.metaData = this.context.getMetaData();\r\n this.slot.innerHTML += `<h1>${i18n.getText('RootViewTitle')}</h1>`;\r\n\r\n this.renderEntitySelector();\r\n }\r\n\r\n private renderEntitySelector() {\r\n const entities = this.metaData.getRootEntity().subEntities;\r\n if (this.slot) {\r\n domel(this.slot)\r\n .addChild('div', b => b\r\n .addClass('ed-root')\r\n .addChild('div', b => b\r\n .addClass('ed-menu-description')\r\n .addText(i18n.getText(!this.metaData.isEmpty() ? 'EntityMenuDesc' : 'ModelIsEmpty'))\r\n )\r\n .addChild('ul', b => {\r\n b.addClass('ed-entity-menu');\r\n entities.forEach(ent => {\r\n b.addChild('li', b => {\r\n b.addClass('ed-entity-item')\r\n .on('click', () => {\r\n setLocation(`${this.basePath}/${decodeURIComponent(ent.id)}`);\r\n })\r\n .addChild('div', b => {\r\n b.addClass('ed-entity-item-caption')\r\n .addText(ent.captionPlural || ent.caption);\r\n });\r\n\r\n if (ent.description) {\r\n b.addChild('div', b => {\r\n b.addClass('ed-entity-item-descr')\r\n .addText(`${ent.description}`);\r\n });\r\n }\r\n });\r\n });\r\n })\r\n );\r\n }\r\n }\r\n}","import { utils as dataUtils } from '@easydata/core';\r\n\r\nimport { ProgressBar } from '../widgets/progress_bar';\r\nimport { DataContext } from '../main/data_context';\r\nimport { EntityDataView } from './entity_data_view';\r\nimport { EasyDataViewDispatcherOptions } from './options';\r\nimport { RootDataView } from './root_data_view';\r\n\r\nexport class EasyDataViewDispatcher {\r\n private context: DataContext;\r\n private basePath: string;\r\n\r\n private container: HTMLElement;\r\n\r\n private options: EasyDataViewDispatcherOptions = {\r\n container: '#EasyDataContainer',\r\n basePath: 'easydata' \r\n };\r\n\r\n constructor(options?: EasyDataViewDispatcherOptions) {\r\n this.options = dataUtils.assign(this.options, options || {});\r\n\r\n if (this.options.rootEntity) {\r\n this.options.showBackToEntities = false;\r\n this.basePath = '/';\r\n }\r\n else {\r\n this.basePath = this.normalizeBasePath(this.options.basePath);\r\n }\r\n\r\n this.setContainer(this.options.container);\r\n\r\n const progressBarSlot = document.createElement('div');\r\n const bar = new ProgressBar(progressBarSlot); \r\n \r\n const parent = this.container.parentElement;\r\n parent.insertBefore(progressBarSlot, parent.firstElementChild);\r\n \r\n this.context = new DataContext({\r\n endpoint: this.options.endpoint,\r\n dataTable: this.options.dataTable,\r\n onProcessStart: () => bar.show(),\r\n onProcessEnd: () => bar.hide()\r\n });\r\n\r\n }\r\n \r\n private normalizeBasePath(basePath: string): string {\r\n basePath = this.trimSlashes(basePath);\r\n const fullPath = decodeURIComponent(window.location.pathname);\r\n const idx = fullPath.toLocaleLowerCase().indexOf(basePath);\r\n return idx >= 0 ? fullPath.substring(0, idx + basePath.length) : '/';\r\n }\r\n\r\n private trimSlashes(path: string): string {\r\n return path.replace(/^\\/|\\/$/g, '')\r\n }\r\n\r\n private setContainer(container: HTMLElement | string) {\r\n if (!container) {\r\n throw 'Container is undefined';\r\n }\r\n\r\n if (typeof container === 'string') {\r\n if (container.length){\r\n if (container[0] === '.') {\r\n const result = document.getElementsByClassName(container.substring(1));\r\n if (result.length) \r\n this.container = result[0] as HTMLElement;\r\n }\r\n else {\r\n if (container[0] === '#') {\r\n container = container.substring(1);\r\n }\r\n this.container = document.getElementById(container);\r\n }\r\n if (!this.container) {\r\n throw Error('Unrecognized `container` parameter: ' + container + '\\n' \r\n + 'It must be an element ID, a class name (starting with .) or an HTMLElement object itself.');\r\n }\r\n }\r\n }\r\n else {\r\n this.container = container;\r\n }\r\n }\r\n\r\n private getActiveSourceId(): string | null {\r\n if (this.options.rootEntity) \r\n return this.options.rootEntity;\r\n\r\n const path = decodeURIComponent(window.location.pathname);\r\n const idIndex = this.basePath.length + 1;\r\n return idIndex < path.length ? path.substring(idIndex) : null;\r\n }\r\n\r\n run(): Promise<void> { \r\n this.attach();\r\n\r\n return this.context.loadMetaData()\r\n .then(() => {\r\n this.setActiveView();\r\n })\r\n .catch(error => console.error(error))\r\n }\r\n\r\n private setActiveView() {\r\n this.clear();\r\n\r\n const sourceId = this.getActiveSourceId();\r\n if (sourceId) {\r\n this.context.setActiveSource(sourceId);\r\n window['EDView'] = new EntityDataView(this.container, this.context,\r\n this.basePath, this.options);\r\n }\r\n else {\r\n window['EDView'] = new RootDataView(this.container, this.context, this.basePath);\r\n }\r\n }\r\n\r\n private clear() {\r\n this.container.innerHTML = '';\r\n this.context.getData().clear();\r\n }\r\n\r\n private onSetLocation = () => {\r\n this.setActiveView();\r\n }\r\n\r\n private attach = () => {\r\n window.addEventListener('ed_set_location', this.onSetLocation);\r\n window.addEventListener('popstate', this.onSetLocation);\r\n }\r\n\r\n detach() {\r\n window.removeEventListener('ed_set_location', this.onSetLocation);\r\n window.removeEventListener('popstate', this.onSetLocation);\r\n }\r\n}","import { i18n } from '@easydata/core';\r\n\r\n\r\nfunction addEasyDataCRUDTexts() {\r\n i18n.updateDefaultTexts({\r\n RequiredError: 'Value is required.',\r\n NumberError: 'Value should be a number',\r\n IntNumberError: 'Value should be an integer number',\r\n DateTimeError: 'Invalid date or time value',\r\n LookupSelectedItem: 'Selected item: ',\r\n LookupDlgCaption: 'Select {entity}',\r\n None: 'None',\r\n NavigationBtnTitle: 'Navigation values',\r\n CalendarBtnTitle: 'Open calendar',\r\n TimerBtnTitle: 'Open timer',\r\n AddBtnTitle: 'Add',\r\n AddRecordBtnTitle: 'Add record',\r\n EditBtn: 'Edit',\r\n DeleteBtn: 'Delete',\r\n SelectLink: '[ select ]',\r\n AddDlgCaption: 'Create {entity}',\r\n EditDlgCaption: 'Edit {entity}',\r\n DeleteDlgCaption: 'Delete {entity}',\r\n DeleteDlgMessage: 'Are you sure you want to remove this record: {{recordId}}?',\r\n EntityMenuDesc: 'Click on an entity to view/edit its content',\r\n BackToEntities: 'Back to entities',\r\n SearchBtn: 'Search',\r\n SearchInputPlaceholder: 'Search...',\r\n RootViewTitle: 'Entities',\r\n ModelIsEmpty: 'No entity was found.'\r\n });\r\n}\r\n\r\naddEasyDataCRUDTexts();"],"names":["root","factory","exports","module","define","amd","self","browserUtils","_isFirefox","_isIE","IsIE","ua","navigator","userAgent","indexOf","IsEdge","eval","IsFirefox","toLowerCase","_detectedIsMobileMode","_isMobileMode","undefined","detectIsMobileMode","oldValue","isMobileMode","window","matchMedia","matches","newValue","mobileModeChangeHandler","setIsMobileMode","value","onMobileModeChanged","callback","getMobileCssClass","addEventListener","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","d","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","DataType","EntityAttrKind","HttpMethod","EditorTag","i18n","utils","HttpRequest","xhr","descriptor","this","method","url","headers","queryParams","data","setHeader","name","setQueryParam","getXMLHttpRequest","getResponseHeaders","readyState","HEADERS_RECEIVED","headerMap","_i","arr_1","getAllResponseHeaders","trim","split","length","parts","header","shift","join","open","_this","UNSENT","keys","encodeURI","map","param","setRequestHeader","abort","currentLocale","englishUSLocaleSettings","shortDateFormat","longDateFormat","editDateFormat","shortTimeFormat","editTimeFormat","longTimeFormat","shortMonthNames","longMonthNames","shortWeekDayNames","longWeekDayNames","decimalSeparator","currency","defaultLocale","localeId","englishName","displayName","texts","ButtonOK","ButtonCancel","Yes","No","True","False","settings","allLocales","mappers","mapInfo","info","mappers_1","mapper","getCurrentLocale","setCurrentLocale","newLocale","assignDeep","getLocaleSettings","updateLocaleSettings","settingsToUpdate","updateLocaleInfo","localeData","localeInfoToUpdate","loadBrowserLocaleSettings","now","dateStr","timeStr","dateFormat","timeFormat","lang","language","Date","toLocaleDateString","year","month","day","toLocaleTimeString","hour","minute","second","replace","buildShortDateTimeFormat","dataType","format","localeSettings","Time","buildLongDateTimeFormat","addMapper","push","getLocales","result","locale","sort","a","b","setLocale","l","console","warn","getText","args","arguments","textsObj","resText","argLength","i","getOneLocaleSetting","getShortMonthName","monthNum","getLongMonthName","getShortWeekDayName","dayNum","toString","getLongWeekDayName","updateLocaleTexts","error","updateDefaultTexts","addLocale","localeInfo","resetLocales","dateTimeToStr","dateTime","DateTime","numberToStr","number","type","charAt","toUpperCase","cachedSequenceFormats","values_2","filter","v","values_1","Number","parseInt","forEach","index","values","formatWithSequence","slice","toLocaleString","digits","style","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","getNumberFormatOptions","mask","ch","reverse","convertWithMask","Math","trunc","booleanToStr","bool","concat","getAllDataTypes","item","getDateDataTypes","getStringDataTypes","String","Memo","FixedChar","_numericTypes","Byte","Word","Int32","Int64","Float","Currency","Autoinc","getNumericDataTypes","_intTypes","assignDeepCore","hashSet","target","sources","sources_1","source","sourceVal","has","Array","isArray","createArrayFrom","set","create","getPrototypeOf","collection","collection_1","assign","WeakMap","getIfDefined","defaultValue","IsDefinedAndNotNull","copyArrayTo","collection1","collection2","len1","len2","findItemById","array","id","arrLength","idx","findItemIndexById","indexOfArrayItem","arr","len","moveArrayItem","index1","index2","splice","removeArrayItem","insertArrayItem","fillArray","start","end","relativeStart","k","max","min","relativeEnd","final","shiftToFitWindow","absLeft","width","body","document","getElementsByTagName","winWidth","innerWidth","documentElement","clientWidth","absRight","isObject","val","isNumericType","dtype","isIntType","isNumeric","isNaN","parseFloat","isFinite","areCompatibleDataTypes","type1","type2","Unknown","isPropSet","propName","symbols","squeeze","str","maxlen","step","nextIndex","getRandomInt","floor","random","safeParseInt","res","generateId","prefix","prfx","pml","ptt","squeezeMoniker","randCharPart","randInt","targetBase","buffer","rest","intToNumBase","getTime","strToDateTime","normalizedValue","formatItems","dateItems","monthIndex","dayIndex","yearIndex","hourIndex","minutesIndex","secondsIndex","today","getFullYear","getMonth","getDate","getDaysInMonth","_a","strToTime","timeItems","DT_FORMAT_RGEX","date","yearStr","getHours","getMinutes","getSeconds","hour12","isPm","yyyy","yy","substring","MMMM","MMM","MM","M","dd","HH","H","hh","h","tt","mm","ss","match","$1","extendStatics","ColumnAlignment","HttpActionResult","request","promise","getPromise","getRequest","then","onfulfilled","onrejected","catch","finally","onfinally","__extends","setPrototypeOf","__proto__","p","TypeError","__","constructor","__assign","t","s","n","apply","HttpResponseError","_super","status","message","Error","HttpClient","defaultHeaders","customPayload","_responseBody","configurable","options","send","Get","post","Post","put","Put","delete","Delete","contentType","XMLHttpRequest","desc","beforeEachRequest","onRequest","dataToSend","JSON","stringify","Promise","resolve","reject","responseType","onerror","responseText","onreadystatechange","responseContentType","getResponseHeader","responseObj","response","parse","onResponse","decodeArrayBuffer","uintArray","reader","FileReader","onloadend","DONE","readAsText","Blob","MetaEntity","parent","isEditable","caption","description","attributes","subEntities","loadFromData","model","dto","captionPlural","namePlur","ied","ents","newEntity","createEntity","attrs","newAttr","createEntityAttr","scan","processAttribute","processEntity","opts","stop","internalProcessEntity","entity","attrCount","attr","subEntityCount","getFirstPrimaryAttr","getPrimaryAttrs","isPrimaryKey","MetaEntityAttr","size","isForeignKey","isNullable","showOnView","showOnCreate","showOnEdit","showInLookup","lookupAttr","expr","kind","Data","cptn","ipk","ifk","lattr","lookupEntity","lent","dataAttr","dattr","lookupDataAttr","ldattr","isDataType","defVal","nul","ivis","sov","soc","soe","sil","displayFormat","dfmt","udata","userData","edtr","defaultEditor","getEditorById","createValueEditor","ValueEditor","tag","resType","defValue","defval","rtype","accept","multiline","subType","getValueText","text","_b","_c","MetaData","mainEntity","rootEntity","displayFormats","Map","getMainEntity","loadFromJSON","stringJson","version","vers","editors","newEditor","entroot","dtypeStr","formats","getDisplayFormats","getDisplayFormatsForType","getDefaultFormat","f","isdef","setData","isEmpty","getId","getName","getRootEntity","editorId","editor","getAttributeById","attrId","getEntityAttrById","checkAttrProperty","attribute","listByEntityWithFilter","filterFunc","ent","entIdx","newEnt","items","isEntity","attrIdx","listByEntity","resultEntities","resultAttributes","newOpts","includeRootData","sortCheck","sortEntities","attrPlacement","clear","addDefaultValueEditors","addOrUpdateValueEditor","ve","getEntitiesTree","getEntitiesTreeWithFilter","getFullEntityPathByAttr","sep","getEntityPathByAttr","entityCaption","entityText","getAttributeText","attrText","entityPath","RegExp","runThroughEntities","getFirstAttributeByFilter","AggregationSettings","colStore","aggregates","groups","useGrandTotals","useRecordCount","_caseSensitiveGroups","COUNT_FIELD_NAME","updateCompareProc","compareValues","strictCompare","caseInsensitiveCompare","addGroup","cols","columns","getColumnIds","from","to","validateColumns","hasColumnsInUse","addAggregateColumn","colIndexOrId","funcId","colId","validateAggregate","addGrandTotals","addCounts","getGroups","grp","getInternalGroups","lastGroup","getAggregates","hasAggregates","hasGroups","hasGrandTotals","hasRecordCount","drop","caseSensitiveGroups","c","aggr","needAggrCalculation","saveToData","ugt","urc","csg","buildGroupKey","group","row","caseInsensitive","keyVal","getValue","value1","value2","liquid","DataColumn","label","originAttrId","isAggr","groupFooterColumnTemplate","gfct","calculatedWidth","DataColumnList","_dateColumnIdx","add","colOrDesc","col","updateDateColumnIdx","getItems","count","move","newIndex","oldIndex","getIndex","getDateColumnIndexes","removeAt","removeDate","DataRow","toArray","colIdOrIndex","RangeError","setValue","EasyDataTable","_chunkSize","_elasticChunks","cachedRows","total","loader","needTotal","isInMemory","chunkSize","elasticChunks","inMemory","_columns","onUpdate","colDesc","rows","rowData","createRow","addRow","getRows","params","fromIndex","pageSize","page","offset","limit","endIndex","loadChunk","table","getCachedRows","getCachedCount","fireUpdated","getRow","getTotal","setTotal","dataOrRow","dateIdx","column","mapDate","rowOrValues","newRow","dateIdx_1","cachedTotal","totalIsKnown","EasyGuid","newGuid","EventEmitter","silentMode","events","subscribe","eventType","event","getEventRecByType","eventCallback","eventCallbacks","unsubscribe","callbackId","fire","postpone","force","eventRec","eqevent_1","emitAllFunc","setTimeout","enterSilentMode","exitSilentMode","isSilent","event_1","combinePath","path1","path2","renderLiquidTemplate","template","vars","liquidVarRegexp","x","NaN","ceil","sourceTable","sourceId","isLookup","filterValue","justServerSide","applyCore","class","filters","lookup","filteredTable","applyInMemoryFilter","words","w","suitableColumns","hasEnterance","normalized","word","getElementAbsolutePos","element","y","position","box","defaultBoundingClientRect","top","right","bottom","left","height","getBoundingClientRect","docElem","scollPos","pageYOffset","scrollTop","pageXOffset","scrollLeft","getScrollPos","clientTop","clientLeft","round","eqCssPrefix","__spreadArray","pack","ar","DomElementBuilder","createElement","parentElement","appendChild","addChild","childBuilder","builder","domel","addChildElement","attrValue","setAttribute","focus","title","dataId","dataValue","removeAttribute","show","removeStyle","hide","toHide","setStyle","visible","isVisible","offsetWidth","offsetHeight","getClientRects","addClass","className","classNames","fullList","classList","removeClass","remove","toggleClass","toggle","on","listener","eventTypes","off","removeEventListener","styleId","styleValue","setProperty","removeProperty","innerText","html","innerHTML","oldElem","tagName","replaceWith","addText","textEl","createTextNode","addHtml","toDOM","appendTo","DomTextAreaElementBuilder","DomInputElementBuilder","valueAsDate","valueAsNumber","maskPattern","input","inputHandler","e","mskd","startSelection","selectionStart","el","test","selectionEnd","keyCode","preventDefault","selection","onlyLodash","createEvent","initEvent","dispatchEvent","char","fromCharCode","charCode","mskd_1","selectionStart_1","selection_1","event_2","DomSelectElementBuilder","addOption","option","selected","HTMLDivElement","HTMLSpanElement","HTMLAnchorElement","HTMLButtonElement","HTMLImageElement","HTMLInputElement","HTMLTextAreaElement","HTMLSelectElement","DropEffect","touchEventIsDefined","TouchEvent","AutoResizeColumns","EqDragEvent","dragImage","sourceEvent","dropEffect","Allow","pageX","pageY","MouseEvent","touches","Position","ev","eqDragManager","DragManager","delta","draggableItem","finishedSuccessfully","mouseDownPosition","containerDescriptors","containerDescriptorIndex","None","classPrefix","DRAG_DISABLED_ATTR","registerDraggableItem","ondragstart","detectDragging","hasAttribute","stopPropagation","cursorPosition","abs","startDragging","mouseMoveEventListener","mouseMoveDragListener","beforeDragStart","cloneNode","renderer","updateCusror","updateImageClass","scope","updateDragItemPosition","onDragStart","mouseDownListener","mouseUpListener","endDraggind","dropContDesc","container","scopes","onDrop","onDragLeave","onDragEnd","removeChild","registerDropContainer","removeDropContainer","descriptorOrSlot","descs","descs_1","detectDragEnterEvent","dragEnterEvent","detectDragLeaveEvent","dragLeaveEvent","event_3","onDragOver","setCursorStyle","Forbid","cursor","children","pos","event_4","onDragEnter","event_5","containerPos","CellRendererType","cssPrefix","DFMT_REGEX","GridColumnAlign","StringCellRendererDefault","cellValueElement","rowElement","align","NONE","NumberCellRendererDefault","strValue","dataColumn","_","DateTimeCellRendererDefault","isDate","timeOptions","BoolCellRendererDefault","GridCellRendererStore","renderers","defaultRenderers","registerRenderer","setDefaultRenderer","STRING","NUMBER","DATETIME","BOOL","getDefaultRenderer","columnType","cellType","getCellType","getDefaultRendererByType","rendererType","getRenderer","Bool","DialogFooterAlignment","GridColumn","grid","isRowNum","_label","_description","widthOptions","columnWidths","alignment","Left","LEFT","Center","CENTER","Right","RIGHT","MapAlignment","default","cellRenderer","cellRendererStore","rowNumColumn","onGetCellRenderer","GridColumnList","columnList","sync","hasRowNumCol","rowNumCol","onSyncGridColumn","EasyGrid","pagination","paginationOptions","maxButtonCount","useBootstrap","defaultDataGridOptions","slot","dataTable","fixHeightOnFirstRender","syncGridColumns","useRowNumeration","allowDragDrop","calculator","paging","enabled","pageSizeItems","autoResize","Always","stringColumns","numberColumns","boolColumns","dateColumns","otherColumns","showPlusButton","viewportRowsCount","showActiveRow","rowsOnPagePromise","containerInitialHeight","firstRender","prevRowTotals","landingIndex","landingSlot","_activeRowIndex","mergeOptions","processColumnWidthsOptions","eventEmitter","setSlot","init","colWidthOptions","pagingOptions","knownTypes","getElementById","getElementsByClassName","onInit","onRowClick","onRowDbClick","onPlusButtonClick","onColumnChanged","onColumnDeleted","onColumnMoved","onPageChanged","onActiveRowChanged","activeRowIndex","showLandingSlot","hideLandingSlot","refresh","fireEvent","columnId","getData","getColumns","destroy","clearDOM","render","hasData","clientHeight","rootDiv","renderHeader","headerDiv","renderBody","bodyDiv","renderFooter","footerDiv","gridContainer","needAutoResize","Never","updateHeight","resizeColumns","firstRow","bodyCellContainerDiv","firstElementChild","viewportHeight_1","bodyViewportDiv","sbHeight","getContainerWidth","reduce","sum","current","headerViewportDiv","headerCellContainerDiv","headerRowDiv","hd","renderColumnHeader","renderHeaderButtons","containerWidth","colBuilder","colDiv","attrLabel","showAggrs","canShowAggregates","showProgress","getRowsToRender","hideProgress","rowsToRender","groups_1","updateTotalsState","tr","renderRow","showGrandTotalsOnEachPage","isLastPage","onViewportKeydown","bind","aggrSettings","isLast","changeLevel","level","renderTotalsRow","applyGroupColumnTemplate","colIndex","renderCell","aggrContainer","getAggrContainer","aggrCols","getAggregateData","aggrCols_1","aggrColId","isLastGroupColumn","groupColIndex","aggrColIndex","groupFooterTemplate","firstChild","cellDiv","rowCount","querySelectorAll","ensureRowVisibility","rowOrIndex","getDataRow","rowRect","viewportRect","rowTop","rowBottom","viewportHeight","windowHeight","innerHeight","footerPaginateDiv","renderPageNavigator","pageInfoBlock","renderPageInfoBlock","pageInfoDiv","fistPageRecordNum","lastPageRecordNum","totalStr","getLocalIndexByGlobal","getGlobalIndexByLocal","indexGlobal","rowBuilder","rowIndex","colindex","cellElement","valueCell","setPage","paginateDiv","prefix_1","buttonClickHandler_1","getAttribute","renderPageCell","pageIndex","content","disabled","extreme","active","li","a_1","newA","ul","cell","pageCount","zeroBasedIndex","firstPageIndex","lastPageIndex","allowPageSizeChange","pageSizes","selectSize","sel_1","selOptions","selSet","Set","labelDiv","handler","handlerId","plusButtonTitle","colElems","rowElem","display","landingPos","newLandingIndex","cols_1","colPos","insertBefore","updateActiveRow","activeRow","getActiveRow","visibility","sumWidth","headerCells","headerIdx","_loop_1","this_1","cellValues","maxWidth","whiteSpace","maxOption","minOption","Calendar","yearRange","setDate","currentDate","dateChanged","onDateChanged","DateTimePicker","calendar","timePicker","setDateTime","currentDateTime","setTime","getDateTime","showCalendar","createCalendar","showDateTimeInput","timePickerIsUsed","showTimePicker","oneClickDateSelection","dateTimeChanged","createTimePicker","onTimeChanged","time","setHours","setMinutes","anchor","beforeShow","onApply","cancel","onCancel","onDateTimeChanged","DefaultCalendar","daysOfWeek","months","calendarBody","isManualInputChanging","selectedMonth","selectedYear","rerenderMonth","renderManualDateInput","headerTextElem","renderCalendarButtons","getInputDateFormat","newDate","manualInputElem","jump","updateDisplayedDateValue","prev","selectMonthElem","selectYearElem","next","rerenderSelectYear","exec","minusYear","plusYear","op","firstDay","getDay","daysInMonth","setFullYear","setMonth","dayOfWeek","cellsDrawnInLastRow","cellsToDraw","TimePicker","currentTime","timeChanged","DefaultTimePicker","updateDisplayedTime","hoursInput","minutesInput","timeText","slidersBuilder","timeToDraw","DefaultDateTimePicker","sb","zIndex","renderButtons","globalMouseDownHandler","srcElement","contains","nowButton","submitButton","calendarSlot","timePickerSlot","anchorPos","parentPos","DefaultDialogService","openConfirm","closable","submitable","cancelable","onSubmit","openPrompt","submitOnEnter","arrangeParents","beforeOpen","processInput","dialog","DefaultDialog","onDestroy","dlg","untrack","track","createSet","DefaultDialogSet","openDialogs","openProgress","DefaultProgressDialog","getAllDialogs","closeAllDialogs","close","submitHandler","token","cancelHandler","keydownHandler","isActiveDialog","dialogId","windowElement","headerElement","alertElement","bodyElement","alignClass","footerAlignment","footerElement","bb","submitButtonText","recaptchaSiteKey","grecaptcha","ready","execute","action","cancelButtonText","getRootElement","getSubmitButtonElement","getCancelButtonElement","windowDiv","querySelector","clearAlert","onInput","onShow","submit","disableButtons","button","enableButtons","showAlert","reason","alert","windowDivs","turnOn","contentElement","progressElement","determinated","updateContent","updateProgress","progress","in01","num","dialogService","currentDialog","currentIndex","getCurrent","openNext","openPrev","dlgOptions","GridPageInfo","GridItemsPerPage","ButtonApply","ButtonNow","LblTotal","internalDateFormat","internalTimeFormat","getEditDateTimeFormat","setLocation","path","state","history","pushState","Event","validate","successed","editFormat","messages","Validator","context","validators","DateTimeValidator","getHtml","setHtmlInt","errorsDiv","clearErrors","isValid","getMetaData","validateValue","markInputValid","filePromises","inputs","property","lastIndexOf","checked","fileToBase64","files","mapValue","all","file","readAsDataURL","onload","useValidator","useValidators","validator","internalFormat","valid","instantMode","instantTimeout","stringDefRenderer","highlightCellRenderer","numDefRenderer","horizClass","isEdgeOrIE","filterInput","inputKeydownHandler","inputKeyupHandler","clearButtonClickHander","searchButtonClickHandler","applyFilter","applyFilterTimeout","clearTimeout","checkChange","defaultRenderer","highlightText","HTMLElement","normalizedContent","indexInMas","lowerWord","highlightSpan","backgroundColor","item1","item2","addDelta","div","isIE","reset","form","EntityEditForm","setupLookupField","readOnly","inputEl","resolveInputType","lookupTable","chunkParams","getDataLoader","widgetSlot","ds","gridSlot","selectedSlot","selectedValue","updateSelectedValue","fetchRecord","lookupGrid","dataFilter","createFilter","TextFilterWidget","setupDateTimeField","hidden","applySumbit","setSeconds","pickerOptions","setMilliseconds","dtp","setupListField","setupFileField","setupTextField","setupTextArea","addFormField","Lookup","isEditForm","resolveEditor","required","sumbitCallback","build","fb","formHtml","getActiveEntity","resolveEndpoint","startProcess","getHttpClient","resultSet","totalRecords","meta","hasNext","endProcess","endpoints","endpointVarsRegex","http","metaDataId","dataLoader","EasyDataServerLoader","dataTableOptions","setDefaultEndpoints","endpoint","activeEntity","setActiveSource","entityId","TextDataFilter","loadMetaData","sourceError","fetchDataset","createRecord","updateRecord","deleteRecord","setEndpoint","setEnpointIfNotExist","endpointKey","opt","optVal","onProcessStart","onProcessEnd","endpointBase","isInteger","basePath","showFilterBox","showBackToEntities","defaultValidators","RequiredValidator","TypeValidator","location","pathname","renderGrid","syncGridColumnHandler","addClickHandler","manageCellRenderer","rowDbClickHandler","filterBarDiv","filterWidget","rowEl","editClickHandler","deleteClickHandler","EntityEditFormBuilder","refreshData","processError","showEditForm","keyAttrs","processed","metaData","renderEntitySelector","entities","decodeURIComponent","onSetLocation","setActiveView","attach","normalizeBasePath","setContainer","progressBarSlot","bar","ProgressBar","DataContext","trimSlashes","fullPath","toLocaleLowerCase","getActiveSourceId","idIndex","run","EntityDataView","RootDataView","detach","RequiredError","NumberError","IntNumberError","DateTimeError","LookupSelectedItem","LookupDlgCaption","NavigationBtnTitle","CalendarBtnTitle","TimerBtnTitle","AddBtnTitle","AddRecordBtnTitle","EditBtn","DeleteBtn","SelectLink","AddDlgCaption","EditDlgCaption","DeleteDlgCaption","DeleteDlgMessage","EntityMenuDesc","BackToEntities","SearchBtn","SearchInputPlaceholder","RootViewTitle","ModelIsEmpty"],"sourceRoot":""}