@easyquery/enterprise 7.2.3 → 7.2.4-rc01
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/eq.enterprise.js +31948 -33488
- package/dist/browser/eq.enterprise.js.map +1 -1
- package/dist/browser/eq.enterprise.min.js +1 -10
- package/dist/browser/eq.enterprise.min.js.map +1 -1
- package/dist/bundles/easyquery.enterprise.js +8069 -8062
- package/dist/bundles/easyquery.enterprise.js.map +1 -1
- package/dist/bundles/easyquery.enterprise.min.js +1 -1
- package/dist/bundles/easyquery.enterprise.min.js.map +1 -1
- package/dist/lib/data/data_table_aggr_calculator.d.ts +47 -47
- package/dist/lib/data/data_table_aggr_calculator.js +163 -163
- package/dist/lib/data/eqs_aggr_calculator.d.ts +14 -14
- package/dist/lib/data/eqs_aggr_calculator.js +172 -172
- package/dist/lib/data/eqs_aggr_calculator.js.map +1 -1
- package/dist/lib/dm/model_ex.d.ts +9 -9
- package/dist/lib/dm/model_ex.js +151 -149
- package/dist/lib/dm/model_ex.js.map +1 -1
- package/dist/lib/extensions.d.ts +26 -26
- package/dist/lib/extensions.js +120 -120
- package/dist/lib/license/lc-dialog.d.ts +19 -19
- package/dist/lib/license/lc-dialog.js +310 -310
- package/dist/lib/license/lc-dialog.js.map +1 -1
- package/dist/lib/main/eqs_query_storage.d.ts +11 -11
- package/dist/lib/main/eqs_query_storage.js +105 -105
- package/dist/lib/public_api.d.ts +7 -7
- package/dist/lib/public_api.js +7 -7
- package/dist/lib/query/condition_ex.d.ts +14 -14
- package/dist/lib/query/condition_ex.js +97 -95
- package/dist/lib/query/condition_ex.js.map +1 -1
- package/dist/lib/query/query_column_ex.d.ts +13 -13
- package/dist/lib/query/query_column_ex.js +57 -55
- package/dist/lib/query/query_column_ex.js.map +1 -1
- package/dist/lib/query/query_ex.d.ts +15 -15
- package/dist/lib/query/query_ex.js +75 -73
- package/dist/lib/query/query_ex.js.map +1 -1
- package/dist/lib/utils/lcv.d.ts +4 -4
- package/dist/lib/utils/lcv.js +101 -101
- package/dist/lib/utils/lcv.js.map +1 -1
- package/package.json +16 -16
- package/webpack.config.js +8 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack://easyqueryEnterprise/webpack/universalModuleDefinition","webpack://easyqueryEnterprise/webpack/bootstrap","webpack://easyqueryEnterprise/external \"easyqueryCore\"","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/utils/browser_utils.js","webpack://easyqueryEnterprise/./src/utils/lcv.ts","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/types/data_type.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/types/entity_attr_kind.js","webpack://easyqueryEnterprise/./src/query/condition_ex.ts","webpack://easyqueryEnterprise/./src/query/query_column_ex.ts","webpack://easyqueryEnterprise/./src/query/query_ex.ts","webpack://easyqueryEnterprise/./src/main/eqs_query_storage.ts","webpack://easyqueryEnterprise/./src/dm/model_ex.ts","webpack://easyqueryEnterprise/./src/data/data_table_aggr_calculator.ts","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/types/editor_tag.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/http/http_method.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/http/http_request.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/i18n/i18n.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/utils/utils.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/utils/string_utils.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/http/http_action_result.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/data/data_column.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/http/http_client.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/meta/meta_entity.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/meta/value_editor.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/data/aggr_settings.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/meta/meta_data.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/utils/liquid.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/data/data_row.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/data/easy_data_table.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/utils/easy_guid.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/event/event_emitter.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/i18n/load_default_locale_settings.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/core/dist/lib/public_api.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/utils/ui-utils.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/utils/dom_elem_builder.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/utils/mask.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/utils/drag_manager.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_options.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_cell_renderer.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_columns.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/dialogs/dialog_service.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/calendar.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/date_time_picker.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_calendar.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/time_picker.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_time_picker.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_date_time_picker.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/dialogs/default_dialog_service.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/i18n/text_resources.js","webpack://easyqueryEnterprise/c:/azuredevops-agents/korzhdev/_work/5/s/easydata/easydata.js/packs/ui/dist/lib/public_api.js","webpack://easyqueryEnterprise/./src/license/lc-dialog.ts","webpack://easyqueryEnterprise/./src/extensions.ts","webpack://easyqueryEnterprise/./src/data/eqs_aggr_calculator.ts"],"names":["root","factory","exports","module","require","define","amd","window","__WEBPACK_EXTERNAL_MODULE__0__","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","magics","Math","trunc","x","isNaN","NaN","floor","ceil","__kt","ck","length","infoBytes","str","binary_string","replace","atob","urlatob","len","bytes","Uint8Array","charCodeAt","_bs","slice","part2","ism","edc","t36","encChar","majVer","eds","val","tokens","pow","f36","substring","ed","Date","Number","parseInt","now","getTime","error","this","b","String","fromCharCode","result","DataType","EntityAttrKind","readOnly","parameterized","inJoin","isReadOnly","getParent","setReadOnly","conditions","forEach","cond","isParameterized","setParameterized","isInJoin","setInJoin","loadFromData","model","data","conds","newCond","query","createCondition","push","setParent","saveToData","obj","tag","Group","colData","isEx","createSubQuery","QueryEx","Simple","createColumn","justsorted","addConditionGroup","descriptor","addChildCondition","parent","getRootCondition","lType","linking","linkType","All","Any","group","getModel","attr","getFirstUICAttr","op","getDefaultOperatorForAttr","createSimpleConditionObject","addCondition","addExtraConditionGroup","extraConditions","context","init","newQuery","options","getQuery","modelId","getId","queryId","setId","setName","description","setDescription","requestData","toJSONData","url","resolveEndpoint","getServices","getHttpClient","post","then","responseData","getQueryList","queries","Promise","reject","message","loadQuery","saveQuery","put","removeQuery","delete","getPromise","buildQueryPath","mainEntity","entities","getEntitiesInQuery","Error","tree","entity","contains","path","findPath","addPathToTree","setParents","pathAdded","childs","child","findLink","newNode","addChild","node","entityFrom","entityTo","curPath","curStep","nextStep","passedEntities","pathFound","checkPath","endPoint","getLinksByEntity","link","entity2","newPath","Array","concat","createQuery","levelsTotals","prevRow","aggrContainer","getAggrContainer","initObjects","aggrSettings","getAggregationSettings","groups","getGroups","aggregates","getAggregates","aggrColIds","map","a","colId","aggrCols","resultTable","columns","getItems","filter","col","id","createColumnAggregatesObject","sum","min","MAX_VALUE","max","MIN_VALUE","calculate","clear","maxLevel","levelNumber","levelIndex","levelTotals","count","resetLevelTotals","allRows","getCachedRows","row","processDataRow","flushLevelTotals","hasGrandTotals","resolve","rowTotals","aggrCol","levelIndexChanged","checkLevelChange","updateLevelTotals","groupIndex","getValue","prevValue","compareValues","groupKey","buildGroupKey","groupTotals","aggr","columnTotals","applyAggrFunc","funcId","hasRecordCount","COUNT_FIELD_NAME","updateAggregateData","needRecalculation","reset","HttpMethod","EditorTag","HttpRequest","xhr","method","headers","queryParams","setHeader","setQueryParam","getXMLHttpRequest","getResponseHeaders","readyState","HEADERS_RECEIVED","headerMap","_i","arr_1","getAllResponseHeaders","trim","split","parts","header","shift","join","open","_this","UNSENT","keys","encodeURI","param","setRequestHeader","abort","repeatString","times","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","dateStr","timeStr","dateFormat","timeFormat","lang","language","toLocaleDateString","year","month","day","toLocaleTimeString","hour","minute","second","buildShortDateTimeFormat","dataType","format","localeSettings","Time","buildLongDateTimeFormat","addMapper","getLocales","locale","sort","setLocale","console","warn","getText","args","arguments","textsObj","resText","argLength","getOneLocaleSetting","getShortMonthName","monthNum","getLongMonthName","getShortWeekDayName","dayNum","toString","getLongWeekDayName","updateLocaleTexts","updateDefaultTexts","addLocale","localeInfo","resetLocales","dateTimeToStr","dateTime","DateTime","numberToStr","number","type","charAt","toUpperCase","cachedSequenceFormats","values_2","v","values_1","index","values","formatWithSequence","toLocaleString","digits","style","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","getNumberFormatOptions","mask","ch","reverse","convertWithMask","booleanToStr","bool","utils","getAllDataTypes","item","getDateDataTypes","getStringDataTypes","Memo","FixedChar","_numericTypes","Byte","Word","Int32","Int64","Float","Currency","Autoinc","getNumericDataTypes","_intTypes","assignDeepCore","hashSet","target","sources","sources_1","source","sourceVal","has","isArray","createArrayFrom","set","getPrototypeOf","collection","collection_1","assign","WeakMap","getIfDefined","defaultValue","IsDefinedAndNotNull","copyArrayTo","collection1","collection2","len1","len2","findItemById","array","arrLength","idx","findItemIndexById","indexOfArrayItem","arr","moveArrayItem","index1","index2","splice","removeArrayItem","insertArrayItem","fillArray","start","end","relativeStart","k","relativeEnd","final","shiftToFitWindow","absLeft","width","body","document","getElementsByTagName","winWidth","innerWidth","documentElement","clientWidth","absRight","isObject","isNumericType","dtype","isIntType","isNumeric","parseFloat","isFinite","areCompatibleDataTypes","type1","type2","Unknown","isPropSet","propName","symbols","squeeze","maxlen","step","nextIndex","replaceAtString","substr","getRandomInt","random","safeParseInt","res","generateId","prefix","prfx","pml","ptt","squeezeMoniker","randValue","maxSymbolIndex","targetBase","buffer","rest","intToNum36","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","MMMM","MMM","MM","M","dd","HH","H","hh","h","tt","mm","ss","match","$1","ColumnAlignment","HttpActionResult","request","promise","getRequest","onfulfilled","onrejected","catch","finally","onfinally","extendStatics","setPrototypeOf","__proto__","__","constructor","__assign","apply","HttpResponseError","_super","status","HttpClient","defaultHeaders","customPayload","_responseBody","configurable","send","Get","Post","Put","Delete","contentType","XMLHttpRequest","desc","beforeEachRequest","onRequest","dataToSend","JSON","stringify","responseType","onerror","responseText","onreadystatechange","responseContentType","getResponseHeader","responseObj","response","parse","onResponse","decodeArrayBuffer","uintArray","reader","FileReader","onloadend","DONE","readAsText","Blob","MetaEntity","isEditable","caption","attributes","subEntities","dto","captionPlural","namePlur","ied","ents","newEntity","createEntity","attrs","newAttr","createEntityAttr","scan","processAttribute","processEntity","opts","stop","internalProcessEntity","attrCount","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","resType","defValue","defval","rtype","accept","multiline","subType","getValueText","text","_b","_c","MetaData","rootEntity","displayFormats","Map","getMainEntity","loadFromJSON","stringJson","version","vers","editors","newEditor","entroot","dtypeStr","formats","getDisplayFormats","getDisplayFormatsForType","getDefaultFormat","f","isdef","setData","isEmpty","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","addDefaultValueEditors","addOrUpdateValueEditor","ve","getEntitiesTree","getEntitiesTreeWithFilter","getFullEntityPathByAttr","sep","getEntityPathByAttr","entityCaption","entityText","getAttributeText","attrText","entityPath","RegExp","runThroughEntities","getFirstAttributeByFilter","AggregationSettings","colStore","useGrandTotals","useRecordCount","_caseSensitiveGroups","updateCompareProc","strictCompare","caseInsensitiveCompare","addGroup","cols","getColumnIds","from","to","validateColumns","hasColumnsInUse","addAggregateColumn","colIndexOrId","validateAggregate","addGrandTotals","addCounts","grp","getInternalGroups","lastGroup","hasAggregates","hasGroups","drop","caseSensitiveGroups","needAggrCalculation","ugt","urc","csg","caseInsensitive","keyVal","value1","value2","liquid","label","originAttrId","isAggr","groupFooterColumnTemplate","gfct","calculatedWidth","DataColumnList","_dateColumnIdx","add","colOrDesc","updateDateColumnIdx","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","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","getElementAbsolutePos","element","y","position","box","defaultBoundingClientRect","top","right","bottom","left","height","getBoundingClientRect","docElem","scollPos","pageYOffset","scrollTop","pageXOffset","scrollLeft","getScrollPos","clientTop","clientLeft","round","__spreadArrays","il","j","jl","DomElementBuilder","createElement","parentElement","appendChild","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","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","DFMT_REGEX","GridColumnAlign","StringCellRendererDefault","cellValueElement","rowElement","align","NONE","cssPrefix","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","Calendar","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","colWidthOptions","pagingOptions","knownTypes","getElementById","getElementsByClassName","onInit","onRowClick","onRowDbClick","onPlusButtonClick","onColumnChanged","onColumnDeleted","onColumnMoved","onPageChanged","onActiveRowChanged","activeRowIndex","eqCssPrefix","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","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","isLast","changeLevel","level","renderTotalsRow","applyGroupColumnTemplate","colIndex","renderCell","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","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","firstDay","getDay","daysInMonth","setFullYear","setMonth","dayOfWeek","cellsDrawnInLastRow","cellsToDraw","TimePicker","currentTime","timeChanged","DefaultTimePicker","updateDisplayedTime","hoursInput","minutesInput","timeText","slidersBuilder","timeToDraw","DefaultDateTimePicker","sb","zIndex","renderButtons","globalMouseDownHandler","srcElement","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","strIsEmpty","trialDiv","baseLicApiUrl","http","dialogSet","buildStartPage","validateForm","startPageOnSubmit","buildCodePage","codePageOnSubmit","buildSuccessPage","buildFailurePage","dialog1","emailInput","isValidForm","form","codeInput","addInputField","parentBuilder","inputOptions","required","controlsPanelBuilder","formBuilder","outerHTML","nameInput","authEmail","authName","combinePath","email","ptag","backendInfo","apptype","authCode","getBaseEndpoint","hideTrialWM","parentNode","setLicenseKeyEndpoint","endpoint","useEnterprise","keyOrInitCallback","func","services","registerDataModelResolver","registerQueryResolver","registerQueryStorageResolver","EqServerQueryStorage","registerAggregatesCalculator","color","textAlign","opacity","font","transition","eq","lineHeight","korzh","marginLeft","trialOnly","fontSize","fontWeight","createTrialWM","lcv","buttonTitle","buttonUrl","footer","location","href","showNoLicenseAlert","useBackend","backendType","appType","throwError","sourceError","_needRecalculation","levelPromises","changeColumnType","AggregateFunction","queryCols","setHidden","customSqlExpr","CustomSql","sql","baseAttrId","processLevel","groupName","resultObtainedCallback","resultObtained","errorOccurredCallback","errorOccurred","all","fetcher","getDataFetcher","fetchOptions","aux","debugMode","debug","fetchData","resultSet","levelData","buildLevelData","setAggregateData","keyColumns","valueColumns","keyCol","valueCol"],"mappings":"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","file":"easyquery.enterprise.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"easyqueryCore\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"easyqueryEnterprise\", [\"easyqueryCore\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"easyqueryEnterprise\"] = factory(require(\"easyqueryCore\"));\n\telse\n\t\troot[\"easyqueryEnterprise\"] = factory(root[\"easyqueryCore\"]);\n})(window, function(__WEBPACK_EXTERNAL_MODULE__0__) {\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 = 2);\n","module.exports = __WEBPACK_EXTERNAL_MODULE__0__;","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","\r\nconst majVer = 7;\r\nconst minVer = 2;\r\n\r\nconst magics = [45, 128, 231];\r\n\r\nMath.trunc = 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\nexport const lcv = {\r\n __kt: 0,\r\n ck: function (key?: string) {\r\n\r\n if (!key || !key.length) {\r\n this.__kt = -3;\r\n return;\r\n }\r\n\r\n try {\r\n var part1 = key.slice(0, key.length - 12);\r\n var infoBytes = _bs(part1);\r\n var part2 = key.slice(key.length - 12);\r\n \r\n let ism = false;\r\n for(const magic of magics) {\r\n var edc = t36(magic);\r\n\r\n if (part2[0] === edc[0] && part2[2] === edc[1]) {\r\n ism = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!ism) {\r\n lcv.__kt = -1;\r\n }\r\n \r\n var idx = minVer % 4;\r\n var shift = majVer + minVer;\r\n if (part2[6 + idx] != encChar(shift, 19)) {\r\n lcv.__kt = -2;\r\n return;\r\n }\r\n \r\n if (part2[1] != encChar(infoBytes[3])) {\r\n return;\r\n }\r\n \r\n lcv.__kt = part2[3] != encChar(infoBytes[5]) ? 2 : 3;\r\n\r\n if (lcv.__kt === 2) {\r\n var eds = `${f36(part2.substring(4, 6) + part2.substring(10))}`;\r\n var ed = new Date(\r\n 2000 + Number.parseInt(eds.substring(0, 2)), \r\n Number.parseInt(eds.substring(2, 4)) - 1,\r\n Number.parseInt(eds.substring(4)),\r\n 0, 0, 0, 0);\r\n\r\n if (Date.now() > ed.getTime()) {\r\n lcv.__kt = 1;\r\n } \r\n }\r\n }\r\n catch(error) {\r\n } \r\n }\r\n}\r\n\r\nfunction encChar(x: number, b = 20) {\r\n return String.fromCharCode(65 + x % b);\r\n}\r\n\r\nfunction _bs(str: string) {\r\n var binary_string = urlatob(str);\r\n var len = binary_string.length;\r\n var bytes = new Uint8Array(len);\r\n for (var i = 0; i < len; i++) {\r\n bytes[i] = binary_string.charCodeAt(i);\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction urlatob(str: string) {\r\n var s = str;\r\n s = s.replace(/-/g, '+'); \r\n s = s.replace(/_/g, '/'); \r\n switch (s.length % 4)\r\n {\r\n case 0:\r\n break; \r\n case 2:\r\n s += \"==\";\r\n break;\r\n case 3:\r\n s += \"=\";\r\n break;\r\n }\r\n\r\n return window.atob(s);\r\n}\r\n\r\nconst tokens = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\r\n\r\nfunction t36(val) {\r\n var result = \"\";\r\n\r\n while (val > 0) {\r\n result = tokens[val % tokens.length] + result;\r\n val /= tokens.length;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction f36(val) {\r\n var d = 0;\r\n\r\n for (var i = 0; i < val.length; ++i)\r\n d += tokens.indexOf(val[i]) * Math.pow(tokens.length, val.length - i - 1);\r\n\r\n return d;\r\n}","/** 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","import { Condition, DataModel, CondTag } from \"@easyquery/core\";\r\n\r\nimport { lcv } from '../utils/lcv';\r\n\r\nexport class ConditionEx extends Condition {\r\n\r\n private readOnly : boolean = false;\r\n\r\n public isReadOnly(): boolean {\r\n return this.readOnly || (this.getParent() && this.getParent().isReadOnly());\r\n }\r\n\r\n public setReadOnly(value: boolean) {\r\n this.readOnly = value || (this.getParent() && this.getParent().isReadOnly());\r\n this.conditions && this.conditions.forEach((cond: Condition) => {\r\n cond.setReadOnly(value);\r\n })\r\n }\r\n\r\n private parameterized = false;\r\n \r\n public isParameterized(): boolean {\r\n return this.parameterized;\r\n }\r\n\r\n public setParameterized(value : boolean) {\r\n this.parameterized = value;\r\n }\r\n\r\n\r\n private inJoin : boolean = false;\r\n\r\n public isInJoin(): boolean {\r\n return this.inJoin;\r\n }\r\n\r\n public setInJoin(value : boolean) { \r\n this.inJoin = value; \r\n }\r\n\r\n public loadFromData(model: DataModel, data: any) {\r\n super.loadFromData(model, data);\r\n\r\n if (lcv.__kt <= 1)\r\n return;\r\n\r\n if (typeof data.readOnly !== 'undefined') {\r\n this.setReadOnly(data.readOnly);\r\n }\r\n\r\n if (typeof data.inJoin !== 'undefined') {\r\n this.setInJoin(data.inJoin);\r\n }\r\n\r\n if (typeof data.parameterized !== 'undefined') {\r\n this.setParameterized(data.parameterized)\r\n }\r\n \r\n //if condition group\r\n //this.linkType = data.linking;\r\n if (data.conds) {\r\n for (let i = 0; i < data.conds.length; i++) {\r\n let newCond = this.query.createCondition();\r\n newCond.loadFromData(model, data.conds[i]);\r\n this.conditions.push(newCond);\r\n newCond.setParent(this);\r\n }\r\n }\r\n }\r\n\r\n public saveToData(): any {\r\n\r\n let obj = super.saveToData();\r\n\r\n if (lcv.__kt <= 1)\r\n return obj;\r\n\r\n if (this.isReadOnly()) {\r\n obj.readOnly = this.isReadOnly();\r\n }\r\n\r\n if (this.isParameterized()) {\r\n obj.parameterized = this.isParameterized();\r\n }\r\n\r\n if (this.isInJoin()) {\r\n obj.inJoin = this.isInJoin();\r\n }\r\n\r\n if (this.tag == CondTag.Group){\r\n //if condition group\r\n //obj.linking = this.linkType;\r\n obj.conds = [];\r\n for (let i = 0; i < this.conditions.length; i++) {\r\n obj.conds.push(this.conditions[i].saveToData());\r\n } \r\n }\r\n\r\n return obj;\r\n }\r\n}","import { QueryColumn, DataModel } from \"@easyquery/core\";\r\n\r\nimport { lcv } from '../utils/lcv';\r\n\r\nexport class QueryColumnEx extends QueryColumn {\r\n\r\n private readOnly : boolean = false;\r\n\r\n public isReadOnly(): boolean {\r\n return this.readOnly;\r\n }\r\n\r\n public setReadOnly(value: boolean) {\r\n this.readOnly = value;\r\n }\r\n\r\n /**\r\n * Loads column from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param colData The JSON representation object.\r\n */\r\n public loadFromData(model: DataModel, colData: any) {\r\n super.loadFromData(model, colData);\r\n\r\n if (lcv.__kt <= 2)\r\n return;\r\n\r\n if (colData) {\r\n if (typeof colData.readOnly != 'undefined') {\r\n this.readOnly = colData.readOnly;\r\n }\r\n }\r\n }\r\n\r\n public saveToData(): any {\r\n\r\n let colData = super.saveToData();\r\n\r\n if (lcv.__kt <= 2)\r\n return colData;\r\n\r\n if (this.isReadOnly()) {\r\n colData.readOnly = this.isReadOnly();\r\n }\r\n\r\n return colData;\r\n }\r\n}","import { \r\n Query, DataModel, \r\n CondTag, ConditionGroupDescriptor, \r\n Condition, LinkType, QueryColumn \r\n} from '@easyquery/core';\r\n\r\nimport { ConditionEx } from './condition_ex';\r\nimport { QueryColumnEx } from './query_column_ex';\r\n\r\nimport { lcv } from '../utils/lcv';\r\n\r\n\r\nexport class QueryEx extends Query {\r\n\r\n constructor(model : DataModel) {\r\n super(model);\r\n }\r\n \r\n public isEx() : boolean {\r\n return lcv.__kt > 1;\r\n }\r\n\r\n public createSubQuery() : Query {\r\n return new QueryEx(this.model);\r\n }\r\n\r\n public createCondition(tag = CondTag.Simple): Condition {\r\n \r\n if (lcv.__kt <= 1)\r\n return super.createCondition(tag);\r\n\r\n return new ConditionEx(this, tag)\r\n }\r\n\r\n public createColumn(justsorted = false): QueryColumn {\r\n\r\n if (lcv.__kt <= 1)\r\n return super.createColumn(justsorted);\r\n\r\n return new QueryColumnEx(this, justsorted);\r\n }\r\n\r\n\r\n /**\r\n * Adds a condition group - a group of simple conditions (predicates) linked by AND or OR\r\n * @param descriptor The descriptor of the new condition group.\r\n * @returns The new search condition.\r\n */\r\n public addConditionGroup(descriptor: ConditionGroupDescriptor, addChildCondition: boolean = true): Condition { \r\n\r\n if (lcv.__kt <= 1)\r\n return super.addConditionGroup(descriptor, addChildCondition);\r\n\r\n let parent = descriptor.parent as Condition || this.getRootCondition();\r\n\r\n let lType = descriptor.linking || (parent.linkType === LinkType.All ? LinkType.Any : LinkType.All);\r\n let group = this.createCondition(CondTag.Group);\r\n group.linkType = lType;\r\n\r\n if (addChildCondition) {\r\n let model = this.getModel();\r\n let attr = model.getFirstUICAttr();\r\n let op = model.getDefaultOperatorForAttr(attr);\r\n let cond = this.createSimpleConditionObject(attr, op, \"\")\r\n group.addCondition(cond);\r\n }\r\n\r\n parent.addCondition(group);\r\n return group;\r\n }\r\n\r\n public addExtraConditionGroup(descriptor: ConditionGroupDescriptor, addChildCondition: boolean = true): Condition { \r\n descriptor.parent = descriptor.parent || this.extraConditions;\r\n \r\n if (lcv.__kt <= 1)\r\n return super.addExtraConditionGroup(descriptor, addChildCondition);\r\n\r\n return this.addConditionGroup(descriptor);\r\n }\r\n}\r\n","import { \r\n QueryStorage, QueryListItem,\r\n EqContext, QueryData, NewQueryOptions, GetQueryListOptions, \r\n LoadQueryOptions, SaveQueryOptions, RemoveQueryOptions\r\n} from '@easyquery/core';\r\n\r\nexport class EqServerQueryStorage implements QueryStorage {\r\n\r\n constructor(protected context: EqContext) {\r\n }\r\n\r\n public init() {\r\n }\r\n\r\n public newQuery(options?: NewQueryOptions): Promise<QueryData> {\r\n options = options || {};\r\n\r\n const query = options.query || this.context.getQuery();\r\n const model = this.context.getModel();\r\n const modelId = options.modelId || (model ? model.getId() : \"\");\r\n \r\n if (options.queryId) {\r\n query.setId(options.queryId);\r\n }\r\n\r\n if (options.name) {\r\n query.setName(options.name);\r\n }\r\n\r\n if (options.description) {\r\n query.setDescription(options.description);\r\n }\r\n\r\n let requestData = {\r\n 'query': query.toJSONData()\r\n };\r\n\r\n if (options.data) {\r\n requestData['data'] = options.data;\r\n }\r\n\r\n const url = this.context.resolveEndpoint('NewQuery', { modelId: modelId })\r\n const http = this.context.getServices().getHttpClient();\r\n\r\n return http.post(url, requestData)\r\n .then((responseData) => {\r\n return responseData.query;\r\n }); \r\n }\r\n\r\n public getQueryList(options?: GetQueryListOptions): Promise<QueryListItem[]> {\r\n options = options || {};\r\n\r\n const modelId = options.modelId || this.context.getModel().getId();\r\n\r\n const url = this.context.resolveEndpoint('GetQueryList', { modelId: modelId });\r\n const http = this.context.getServices().getHttpClient();\r\n\r\n return http.get(url)\r\n .then((responseData) => {\r\n if (!responseData.queries) {\r\n return Promise.reject({\r\n message: 'Wrong response format'\r\n });\r\n } \r\n\r\n return responseData.queries;\r\n });\r\n }\r\n\r\n public loadQuery(options?: LoadQueryOptions): Promise<QueryData> {\r\n options = options || {};\r\n\r\n const model = this.context.getModel();\r\n const query = this.context.getQuery();\r\n\r\n const modelId = options.modelId || model.getId();\r\n const queryId = options.queryId || query.getId();\r\n\r\n const url = this.context.resolveEndpoint('GetQuery', { modelId: modelId, queryId: queryId });\r\n const http = this.context.getServices().getHttpClient();\r\n\r\n return http.get(url)\r\n .then((responseData) => {\r\n return responseData.query;\r\n });\r\n }\r\n\r\n public saveQuery(options?: SaveQueryOptions): Promise<QueryData> {\r\n options = options || {};\r\n\r\n const query = options.query || this.context.getQuery();\r\n const queryId = options.queryId || query.getId();\r\n if (options.queryId) {\r\n query.setId(options.queryId);\r\n }\r\n \r\n const modelId = options.modelId || query.getModel().getId();\r\n\r\n if (options.queryId) {\r\n query.setId(options.queryId);\r\n } \r\n\r\n let requestData = {\r\n 'query': query.toJSONData()\r\n };\r\n\r\n if (options.data) {\r\n requestData['data'] = options.data;\r\n }\r\n\r\n const url = this.context.resolveEndpoint('SaveQuery', { modelId: modelId, queryId: queryId });\r\n const http = this.context.getServices().getHttpClient();\r\n\r\n return http.put(url, requestData)\r\n .then((responseData) => {\r\n return responseData.query;\r\n });\r\n }\r\n\r\n public removeQuery(options?: RemoveQueryOptions): Promise<void> {\r\n options = options || {};\r\n\r\n const context = this.context;\r\n const query = context.getQuery();\r\n\r\n const modelId = options.modelId || query.getModel().getId();\r\n const queryId = options.queryId || query.getId();\r\n\r\n let requestData = {\r\n 'modelId': modelId,\r\n 'queryId': queryId\r\n };\r\n\r\n if (options.data) {\r\n requestData['data'] = options.data;\r\n }\r\n\r\n const url = this.context.resolveEndpoint('RemoveQuery', \r\n { modelId: modelId, queryId: queryId });\r\n const http = this.context.getServices().getHttpClient();\r\n\r\n return http.delete(url, requestData).getPromise();\r\n }\r\n}","import { DataModel, Query, Tree, Entity } from \"@easyquery/core\"\r\nimport { QueryEx } from \"../query/query_ex\";\r\nimport { lcv } from \"../utils/lcv\";\r\n\r\nexport class DataModelEx extends DataModel {\r\n\r\n\r\n public buildQueryPath(query: Query): Tree<Entity> {\r\n\r\n if (lcv.__kt <= 1)\r\n return super.buildQueryPath(query);\r\n \r\n if (this.mainEntity)\r\n return super.buildQueryPath(query);\r\n\r\n const entities = this.getEntitiesInQuery(query);\r\n if (entities.length == 0) {\r\n throw Error(\"Cannon build path. Path is empty\");\r\n }\r\n\r\n let tree = new Tree(entities[0]);\r\n \r\n for(let i = 1; i < entities.length; i++) {\r\n const entity = entities[i];\r\n if (tree.contains(entity)) {\r\n continue;\r\n }\r\n\r\n let path = this.findPath(tree.value, entity);\r\n if (path != null) {\r\n //Add path to tree\r\n tree = this.addPathToTree(tree, \r\n (path[0] === tree.value) ? path.slice(1) : path);\r\n }\r\n else {\r\n throw Error(\"Unable to build query. Cannot build path.\");\r\n }\r\n }\r\n\r\n tree.setParents();\r\n\r\n return tree;\r\n }\r\n\r\n private addPathToTree(tree: Tree<Entity>, path: Entity[]): Tree<Entity> {\r\n \r\n if (path.length == 0) {\r\n return;\r\n }\r\n\r\n let pathAdded = false;\r\n for(let child of tree.childs) {\r\n if (child.value === path[0]) {\r\n pathAdded = true;\r\n if (path.length > 1)\r\n child = this.addPathToTree(child, path.slice(1));\r\n break;\r\n }\r\n }\r\n\r\n if (!pathAdded) {\r\n let link = this.findLink(tree.value, path[0]);\r\n if (link) {\r\n let newNode = new Tree(path[0]);\r\n tree.addChild(newNode);\r\n if (path.length > 1)\r\n newNode = this.addPathToTree(newNode, path.slice(1));\r\n }\r\n else if (!tree.parent) {\r\n let node = new Tree(tree);\r\n tree = new Tree(path[0]);\r\n tree.addChild(node);\r\n if (path.length > 1)\r\n tree = this.addPathToTree(tree, path.slice(1));\r\n } else {\r\n throw Error(\"Unable to build query. Cannot build path.\");\r\n }\r\n }\r\n\r\n return tree;\r\n }\r\n\r\n\r\n private findPath(entityFrom: Entity, entityTo: Entity): Entity[] | null {\r\n\r\n let curPath: Entity[] = [];\r\n\r\n let curStep: Array<Array<Entity>> = []\r\n let nextStep: Array<Array<Entity>> = [];\r\n let passedEntities: Array<Entity> = [];\r\n\r\n let pathFound = false;\r\n curPath.push(entityFrom);\r\n curStep.push(curPath);\r\n passedEntities.push(entityFrom);\r\n\r\n while (!pathFound) {\r\n nextStep = [];\r\n for(let path of curStep) {\r\n pathFound = this.checkPath(path, entityTo, nextStep, passedEntities);\r\n if (pathFound) {\r\n path.push(entityTo);\r\n curPath = path;\r\n break;\r\n }\r\n }\r\n\r\n curStep = [];\r\n if (!pathFound) {\r\n if (nextStep.length == 0)\r\n return null;\r\n\r\n //copy nextStep to curStep\r\n for (let path of nextStep)\r\n curStep.push(path);\r\n }\r\n\r\n }\r\n\r\n return curPath;\r\n }\r\n\r\n private checkPath(path: Entity[], entityTo: Entity, nextStep: Array<Array<Entity>>, passedEntities: Entity[]): boolean {\r\n const endPoint = path[path.length - 1];\r\n const entityLinks = this.getLinksByEntity(endPoint);\r\n for (let link of entityLinks) {\r\n let entity2: Entity = null;\r\n if (link.entityFrom == endPoint) {\r\n entity2 = link.entityTo;\r\n } \r\n else {\r\n entity2 = link.entityFrom;\r\n }\r\n \r\n if (entity2 == entityTo) { //if reach the destination\r\n nextStep = [];\r\n return true;\r\n }\r\n\r\n //if destination is not reached yet we add current node (entity2) to the path and proceed\r\n if (path.indexOf(entity2) < 0 && passedEntities.indexOf(entity2) < 0) { //to prevent cycling\r\n passedEntities.push(entity2);\r\n let newPath = new Array<Entity>();\r\n newPath = newPath.concat(path);\r\n newPath.push(entity2);\r\n nextStep.push(newPath);\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public createQuery(): QueryEx {\r\n return new QueryEx(this);\r\n }\r\n}","import { \r\n AggregatesCalculator, AggregatesContainer, AggregationSettings,\r\n AggrCalculationError, AggrCalculationOptions, GroupTotals,\r\n DataGroup,\r\n EasyDataTable, DataColumn, DataRow, AggregateColumn\r\n} from '@easydata/core';\r\n\r\nimport { \r\n EqContext, ExprTag, \r\n Query, EqAggregatesContainer, FetchDataOptions, Expression \r\n} from '@easyquery/core';\r\n\r\n\r\ninterface ColumnAggregates {\r\n sum: number;\r\n min: number;\r\n max: number;\r\n}\r\n\r\ninterface ColumnsWithAggregates {\r\n [columnId: string]: ColumnAggregates;\r\n}\r\n\r\n\r\ninterface RowAggregates {\r\n count: number;\r\n columns: ColumnsWithAggregates;\r\n}\r\n\r\nexport class DataTableAggregatesCalculator implements AggregatesCalculator {\r\n private aggrContainer: EqAggregatesContainer;\r\n private aggrSettings : AggregationSettings;\r\n private groups: DataGroup[];\r\n private aggregates: AggregateColumn[];\r\n private aggrColIds: string[];\r\n private aggrCols: DataColumn[];\r\n\r\n //stores current totals by level (group) number\r\n private levelsTotals: RowAggregates[] = [];\r\n\r\n constructor(protected context: EqContext) {\r\n this.aggrContainer = new EqAggregatesContainer(context);\r\n }\r\n\r\n getAggrContainer(): AggregatesContainer {\r\n return this.aggrContainer;\r\n }\r\n\r\n protected initObjects() {\r\n this.aggrSettings = this.context.getQuery().getAggregationSettings();\r\n this.groups = this.aggrSettings.getGroups();\r\n this.aggregates = this.aggrSettings.getAggregates();\r\n this.aggrColIds = this.aggrSettings.getAggregates().map(a => a.colId);\r\n this.aggrCols = this.context.resultTable.columns.getItems()\r\n .filter(col => this.aggrColIds.indexOf(col.id) >= 0);\r\n\r\n this.levelsTotals = []; \r\n this.prevRow = null; \r\n }\r\n\r\n private createColumnAggregatesObject() : ColumnAggregates {\r\n return {\r\n sum: 0,\r\n min: Number.MAX_VALUE,\r\n max: Number.MIN_VALUE\r\n };\r\n }\r\n\r\n calculate(options?: AggrCalculationOptions): Promise<void> {\r\n this.initObjects();\r\n this.aggrContainer.clear();\r\n\r\n options = options || { };\r\n options.maxLevel = options.maxLevel >= 0 \r\n ? options.maxLevel : 0;\r\n\r\n var levelNumber = this.groups.length + 1; //number of groups plus grand totals\r\n\r\n for (let levelIndex = 0; levelIndex < levelNumber; levelIndex++) {\r\n let levelTotals = { count : 0, columns: {} };\r\n this.resetLevelTotals(levelTotals);\r\n this.levelsTotals.push(levelTotals);\r\n }\r\n\r\n const allRows = this.context.resultTable.getCachedRows();\r\n\r\n if (allRows.length > 0) {\r\n for (const row of allRows) {\r\n this.processDataRow(row);\r\n }\r\n \r\n //flusing the totals for all group levels\r\n for (let levelIndex = 1; levelIndex < levelNumber; levelIndex++) {\r\n this.flushLevelTotals(levelIndex); \r\n }\r\n \r\n //flusing the grand totals (if they are turned on)\r\n if (this.aggrSettings.hasGrandTotals()) {\r\n this.flushLevelTotals(0);\r\n } \r\n }\r\n \r\n return Promise.resolve();\r\n }\r\n\r\n protected resetLevelTotals(rowTotals : RowAggregates) {\r\n for (const aggrCol of this.aggrCols) {\r\n rowTotals.columns[aggrCol.id] = this.createColumnAggregatesObject();\r\n }\r\n rowTotals.count = 0;\r\n }\r\n\r\n private prevRow: DataRow = null;\r\n\r\n protected processDataRow(row: DataRow) : void {\r\n const levelIndexChanged = this.checkLevelChange(row);\r\n if (levelIndexChanged >= 0) {\r\n for (let levelIndex = levelIndexChanged; levelIndex < this.levelsTotals.length; levelIndex++) {\r\n this.flushLevelTotals(levelIndex); \r\n } \r\n }\r\n\r\n if (this.aggrSettings.hasGrandTotals()) {\r\n this.updateLevelTotals(0, row);\r\n }\r\n\r\n let levelIndex = 1;\r\n for (const group of this.groups) {\r\n this.updateLevelTotals(levelIndex, row);\r\n levelIndex++;\r\n }\r\n\r\n this.prevRow = row;\r\n }\r\n\r\n /** Checks if the values in group columns were changed \r\n and return the level number they were */\r\n protected checkLevelChange(row : DataRow) : number {\r\n if (this.prevRow == null) return -1;\r\n \r\n for (let groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\r\n var group = this.groups[groupIndex];\r\n for (const colId of group.columns) {\r\n const value = row.getValue(colId);\r\n const prevValue = this.prevRow.getValue(colId);\r\n if (!this.aggrSettings.compareValues(prevValue, value)) {\r\n return groupIndex + 1;\r\n }\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n /** Saves the current values in levelData for the specified level to AggregateContainer\r\n and then reset the data row for that level\r\n */\r\n protected flushLevelTotals(levelIndex: number) : void {\r\n let levelTotals = this.levelsTotals[levelIndex];\r\n\r\n const group = levelIndex > 0 ? this.groups[levelIndex - 1] : null;\r\n\r\n let groupKey = this.aggrSettings.buildGroupKey(group, this.prevRow);\r\n\r\n var groupTotals = {};\r\n\r\n for (const aggr of this.aggregates) {\r\n const columnTotals = levelTotals.columns[aggr.colId];\r\n groupTotals[aggr.colId] = this.applyAggrFunc(aggr.funcId, columnTotals, levelTotals);\r\n }\r\n\r\n if (this.aggrSettings.hasRecordCount()) {\r\n groupTotals[this.aggrSettings.COUNT_FIELD_NAME] = levelTotals.count;\r\n }\r\n \r\n this.aggrContainer.updateAggregateData(levelIndex, groupKey, groupTotals);\r\n\r\n this.resetLevelTotals(levelTotals);\r\n }\r\n\r\n protected applyAggrFunc(funcId: string, columnTotals: ColumnAggregates, levelTotals: RowAggregates) : Number {\r\n switch (funcId) {\r\n case \"SUM\":\r\n return columnTotals.sum;\r\n case \"AVG\":\r\n return columnTotals.sum / levelTotals.count;\r\n case \"COUNT\":\r\n case \"CNTDST\":\r\n return levelTotals.count;\r\n case \"MIN\":\r\n return columnTotals.min;\r\n case \"MAX\":\r\n return columnTotals.max;\r\n }\r\n }\r\n\r\n /** Updates the totals by values in the current DataRow \r\n * and according to the specified aggregate \r\n */\r\n protected updateLevelTotals(levelIndex: number, row : DataRow) {\r\n const levelTotals = this.levelsTotals[levelIndex];\r\n levelTotals.count += 1;\r\n for (const aggr of this.aggregates) {\r\n const value = row.getValue(aggr.colId);\r\n const columnTotals = levelTotals.columns[aggr.colId];\r\n\r\n columnTotals.sum += value;\r\n if (value < columnTotals.min) {\r\n columnTotals.min = value;\r\n }\r\n\r\n if (value > columnTotals.max) {\r\n columnTotals.max = value;\r\n }\r\n }\r\n }\r\n\r\n needRecalculation(): boolean {\r\n return true;\r\n }\r\n\r\n reset(): void {\r\n }\r\n}","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","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","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 { 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","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","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","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 { 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, '«', pageIndex == 1, true, false);\r\n ul.appendChild(cell);\r\n cell = renderPageCell(pageIndex + 1, '»', 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, '«', 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, '»', 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('‹'); }); })\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('›'); }); });\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 { HttpClient } from '@easydata/core';\r\nimport { domel, DomElementBuilder, DefaultDialogService, dialogs, Dialog, DialogOptions, DialogSet } from '@easydata/ui';\r\nimport { EqContext, equtils } from '@easyquery/core';\r\n\r\nfunction strIsEmpty(str: string) {\r\n if (str) {\r\n return str.trim() === '';\r\n }\r\n else \r\n return true;\r\n}\r\n\r\n\r\nconst baseLicApiUrl = 'https://korzh.com/api/license';\r\n//const baseLicApiUrl = 'https://localhost:44301/api/license';\r\nconst eqVersion = '7.2';\r\n\r\nexport class LCDialog {\r\n private dialogSet: DialogSet;\r\n private http: HttpClient;\r\n private context: EqContext;\r\n\r\n constructor(context: EqContext) {\r\n this.http = new HttpClient();\r\n this.context = context;\r\n }\r\n\r\n public show() {\r\n const dialogService = new DefaultDialogService();\r\n\r\n this.dialogSet = dialogService.createSet([\r\n {\r\n closable: false,\r\n cancelable: false,\r\n submitOnEnter: true,\r\n title: 'No license key for EasyQuery',\r\n body: this.buildStartPage(),\r\n submitButtonText: 'Submit',\r\n onInput: this.validateForm.bind(this),\r\n onSubmit: this.startPageOnSubmit.bind(this) \r\n },\r\n {\r\n closable: false,\r\n cancelable: false,\r\n submitOnEnter: true,\r\n title: 'Please check your inbox',\r\n body: this.buildCodePage(),\r\n submitButtonText: 'Get License Key',\r\n onInput: this.validateForm.bind(this),\r\n onSubmit: this.codePageOnSubmit.bind(this)\r\n },\r\n {\r\n closable: false,\r\n cancelable: false,\r\n submitable: false,\r\n title: 'Success', \r\n body: this.buildSuccessPage()\r\n },\r\n {\r\n closable: false,\r\n cancelable: false,\r\n submitable: false,\r\n title: 'Failure', \r\n body: this.buildFailurePage()\r\n },\r\n ]);\r\n \r\n const dialog1 = this.dialogSet.open(0);\r\n //dialog1.getRootElement();\r\n \r\n setTimeout(() => {\r\n this.validateForm(dialog1);\r\n \r\n const emailInput = document.getElementById('eqAuthEmail') as HTMLInputElement;\r\n if (emailInput) {\r\n emailInput.focus();\r\n }\r\n }, 200);\r\n }\r\n\r\n protected isValidForm(form : HTMLElement) {\r\n const emailInput = form.querySelector('#eqAuthEmail') as HTMLInputElement; //form.querySelector('[name=\"email\"]') as HTMLInputElement; \r\n if (emailInput) { \r\n return !strIsEmpty(emailInput.value) &&\r\n emailInput.value\r\n .toLowerCase()\r\n .match(\r\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\r\n )\r\n }\r\n \r\n const codeInput = form.querySelector('#eqAuthCode') as HTMLInputElement; //form.querySelector('[name=\"code\"]') as HTMLInputElement;\r\n if (codeInput) { \r\n return !strIsEmpty(codeInput.value) &&\r\n !isNaN(+codeInput.value) &&\r\n codeInput.value == codeInput.value.trim() &&\r\n codeInput.value.length === 6;\r\n }\r\n \r\n return true;\r\n }\r\n\r\n protected validateForm(dialog : Dialog) : void {\r\n const submitButton = dialog.getSubmitButtonElement();\r\n submitButton.disabled = !this.isValidForm(dialog.getRootElement());\r\n }\r\n \r\n protected addInputField(parentBuilder:DomElementBuilder<HTMLDivElement>, inputOptions: any) : void {\r\n parentBuilder\r\n .addChild('label', b => b\r\n .attr('for', inputOptions.id)\r\n .addHtml(`${inputOptions.label} ${inputOptions.required ? '<sup style=\"color: red\">*</sup>' : ''}: `)\r\n )\r\n .addChild('input', b => {\r\n b.id(inputOptions.id);\r\n b.name(inputOptions.name || inputOptions.id);\r\n b.type(inputOptions.type || 'text');\r\n if (typeof(inputOptions.value) !== 'undefined') {\r\n b.value(inputOptions.value); \r\n }\r\n if (inputOptions.onInput) {\r\n b.on('input', inputOptions.onInput);\r\n }\r\n });\r\n }\r\n \r\n \r\n protected buildStartPage() : HTMLDivElement {\r\n let form : HTMLDivElement;\r\n let controlsPanelBuilder: DomElementBuilder<HTMLDivElement>;\r\n const formBuilder = domel('div');\r\n \r\n formBuilder.addChild('div', b => b\r\n .html('<div style=\"font-size:1.2em\">The EasyQuery license key is either absent, invalid or was issued for a different version of the library.</div>' +\r\n '<div style=\"font-size:1.2em\">Please fill out the form to obtain a valid trial license key.</div>')\r\n );\r\n \r\n formBuilder\r\n .addClass('kfrm-form')\r\n .addChild('div', b => {\r\n controlsPanelBuilder = b;\r\n b.addClass('kfrm-fields label-above');\r\n b.addClass('kfrm-break-20');\r\n });\r\n \r\n this.addInputField(controlsPanelBuilder, {\r\n id: 'eqAuthEmail',\r\n name: 'email',\r\n label: 'Email',\r\n required: true\r\n });\r\n \r\n this.addInputField(controlsPanelBuilder, {\r\n id: 'eqAuthName',\r\n name: 'contactName',\r\n label: 'Name (optional)',\r\n required: false\r\n });\r\n \r\n formBuilder.addChild('div', b => b\r\n .html('<div style=\"margin-top:20px;font-size:0.9em\">* By clicking Submit, you agree with Korzh.com <a href=\"https://korzh.com/terms-of-use\">Terms of use</a>' +\r\n ' and <a href=\"https://korzh.com/privacy\">Privacy policy</a>.</div>' +\r\n '<div style=\"font-size:0.9em\">You also agree to receive email messages from Korzh.com. This consent may be revoked at any time.</div>')\r\n );\r\n\r\n form = formBuilder.toDOM();\r\n return form;\r\n }\r\n \r\n protected buildCodePage() : string {\r\n let form : HTMLDivElement;\r\n let controlsPanelBuilder: DomElementBuilder<HTMLDivElement>;\r\n const formBuilder = domel('div');\r\n \r\n formBuilder.addChild('div', b => b\r\n .html('<div style=\"font-size:1.2em\">We sent a confirmation code to <strong>{{email}}</strong>.</div>' +\r\n '<div style=\"font-size:1.2em\">Please find it in the email and enter to the text box below</div>')\r\n );\r\n \r\n formBuilder\r\n .addClass('kfrm-form')\r\n .addChild('div', b => {\r\n controlsPanelBuilder = b;\r\n b.addClass('kfrm-fields label-above');\r\n b.addClass('kfrm-break-20');\r\n });\r\n \r\n this.addInputField(controlsPanelBuilder, {\r\n id: 'eqAuthCode',\r\n name: 'code',\r\n label: 'Confirmation code',\r\n required: true\r\n });\r\n\r\n formBuilder.addChild('div', b => b\r\n .html('<div style=\"margin-top:20px;font-size:0.9em\">NB: Don\\'t forget to check your SPAM folder ' +\r\n 'if the message does not arrive within the next 5 minutes, and mark it as \"Not Spam\" if it\\'s found there.</div>')\r\n );\r\n\r\n form = formBuilder.toDOM();\r\n return form.outerHTML;\r\n }\r\n \r\n protected buildSuccessPage() : HTMLDivElement {\r\n let form : HTMLDivElement;\r\n const formBuilder = domel('div');\r\n \r\n formBuilder.addChild('div', b => b\r\n .html('<div style=\"font-size:1.2em\">You have successfully completed the registration process.</div>' +\r\n '<div style=\"font-size:1.2em\">Please restart your web application to get the key applied.</div>')\r\n );\r\n \r\n form = formBuilder.toDOM();\r\n return form;\r\n } \r\n\r\n protected buildFailurePage() : string {\r\n let form : HTMLDivElement;\r\n const formBuilder = domel('div');\r\n \r\n formBuilder.addChild('div', b => b\r\n .html('{{message}}')\r\n );\r\n \r\n form = formBuilder.toDOM();\r\n return form.outerHTML;\r\n } \r\n\r\n protected startPageOnSubmit(dlg: Dialog) {\r\n const emailInput = document.getElementById('eqAuthEmail') as HTMLInputElement;\r\n const nameInput = document.getElementById('eqAuthName') as HTMLInputElement;\r\n const authEmail = emailInput.value;\r\n const authName = nameInput.value;\r\n\r\n dlg.disableButtons();\r\n\r\n this.http.post(\r\n equtils.combinePath(baseLicApiUrl, 'get-code'),\r\n { \r\n email: authEmail, \r\n name: authName,\r\n data: { \r\n ptag: this.context.backendInfo.type,\r\n apptype: this.context.backendInfo.subType,\r\n } \r\n }, \r\n { dataType: 'json' }\r\n )\r\n .then(result => {\r\n if (result.status !== 0) {\r\n throw new Error(result.message);\r\n }\r\n const dlg = this.dialogSet.openNext({email: authEmail});\r\n setTimeout(() => {\r\n this.validateForm(dlg);\r\n const codeInput = document.getElementById('eqAuthCode') as HTMLInputElement;\r\n if (codeInput) {\r\n codeInput.focus();\r\n }\r\n }, 200);\r\n })\r\n .catch(error => {\r\n dlg.showAlert(error.message, \"error\", true);\r\n dlg.enableButtons();\r\n });\r\n\r\n return false;\r\n }\r\n\r\n protected codePageOnSubmit(dlg: Dialog) {\r\n const codeInput = document.getElementById('eqAuthCode') as HTMLInputElement;\r\n const authCode = codeInput.value;\r\n\r\n dlg.disableButtons();\r\n\r\n this.http.post(\r\n equtils.combinePath(baseLicApiUrl, 'get-key'),\r\n { \r\n token: authCode, \r\n ptag: this.context.backendInfo.type,\r\n version: eqVersion\r\n }, \r\n { dataType: 'json' }\r\n )\r\n .then(result => {\r\n switch (result.status) {\r\n case 0: \r\n const url = equtils.combinePath(this.context.getBaseEndpoint(), 'lck');\r\n\r\n this.http.post(\r\n url, \r\n {\r\n version: eqVersion, \r\n key: result.key \r\n }, \r\n { dataType: 'json' }\r\n )\r\n .then(_ => this.dialogSet.openNext());\r\n break;\r\n case 2: \r\n this.dialogSet.open(3, {\r\n message: '<div style=\"font-size:1.2em\">Your trial license for EasyQuery has expired.</div>' +\r\n '<div style=\"font-size:1.2em\">Please <a href=\"https://korzh.com/support\">contact us</a> if you want to extend the trial period.</div>'\r\n })\r\n break;\r\n case 3: \r\n this.dialogSet.open(3, {\r\n message: '<div style=\"font-size:1.2em\">Your purchased license for EasyQuery has expired.</div>' +\r\n '<div style=\"font-size:1.2em\">You need to <a href=\"https://korzh.com/account\">renew the subscription</a> to get a valid license.</div>'\r\n })\r\n break;\r\n default: \r\n throw new Error(result.message);\r\n }\r\n })\r\n .catch(error => {\r\n dlg.showAlert(error.message, \"error\", true);\r\n dlg.enableButtons();\r\n });\r\n\r\n return false;\r\n }\r\n}\r\n\r\n\r\nexport function showNoLicenseAlert(lcv : any) {\r\n\tlet title, body, buttonTitle, buttonUrl;\r\n\r\n\tswitch(lcv.__kt) {\r\n\t\tcase 1:\r\n\t\t\ttitle = 'EasyQuery trial has expired';\r\n\t\t\tbody = `Your trial period for EasyQuery has expired. \r\n\tYou can send a request to <a href=\"https://korzh.com/account\">extend your trial</a> or <a href=\"https://korzh.com/easyquery/licensing\">buy a license</a> to get rid of all limitations.`\r\n\t\t\tbuttonTitle = 'Buy a license';\r\n\t\t\tbuttonUrl = 'https://korzh.com/easyquery/licensing'\r\n\t\t\tbreak;\r\n\r\n\t\tcase -3:\r\n\t\t\ttitle = 'No license key for EasyQuery';\r\n\t\t\tbody = `Please <a href=\"https://korzh.com/easyquery#get-started\">register for a trial</a> \r\n\tor <a href=\"https://korzh.com/easyquery/licensing\">purchase a license</a> to get a proper product key. <br />\r\n\tIf you already have a key, please follow <a href=\"https://korzh.com/easyquery/docs/getting-started/product-key\">this guide</a> to apply it.`\r\n\t\t\tbuttonTitle = 'Register trial';\r\n\t\t\tbuttonUrl = 'https://korzh.com/easyquery#get-started'\r\n\t\t\tbreak;\r\n\t\t\r\n\t\tdefault:\r\n\t\t\ttitle = `Invalid key for EasyQuery!`;\r\n\t\t\tbody = `The EasyQuery product key is either invalid or was issued for a different version of the library.\r\n The version you are using now is 7.2,\r\n\tso please <a href=\"https://korzh.com/account\">login to your account</a> to get a proper key for version 7.2.`\t\r\n\t\t\tbuttonTitle = 'Get key';\r\n\t\t\tbuttonUrl = 'https://korzh.com/account'\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tconst ds = new DefaultDialogService();\r\n\tconst dlg = ds.open({\r\n\t\tclosable: false,\r\n\t\tcancelable: false,\r\n\t\tsubmitable: false,\r\n\t\ttitle: title,\r\n\t\tbody: body\r\n\t});\r\n\r\n\tconst footer = dlg.getRootElement().querySelector('footer');\r\n\tdomel(footer)\r\n\t\t.removeClass('align-right')\r\n\t\t.setStyle('justify-content', 'center')\r\n\t\t.addChild('button', b => b\r\n\t\t\t.addClass('kfrm-button', 'is-info')\r\n\t\t\t.addText(buttonTitle)\r\n\t\t\t.on('click', (e) => {\r\n\t\t\t\twindow.location.href = buttonUrl;\r\n\t\t\t})\r\n\t\t);\r\n\tif (lcv.__kt == 1) {\r\n\t\tdomel(footer)\r\n\t\t\t.addChild('button', b => b\r\n\t\t\t\t.addClass('kfrm-button')\r\n\t\t\t\t.addText('Extend trial')\r\n\t\t\t\t.on('click', (e) => {\r\n\t\t\t\t\twindow.location.href = 'https://korzh.com/account';\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t}\r\n}\r\n","import { EqContext, equtils } from '@easyquery/core';\r\n\r\nimport { DefaultDialogService, domel } from '@easydata/ui';\r\n\r\nimport { QueryEx } from './query/query_ex';\r\nimport { EqServerQueryStorage } from './main/eqs_query_storage';\r\nimport { DataModelEx } from './dm/model_ex';\r\n\r\nimport { lcv } from './utils/lcv';\r\nimport { DataTableAggregatesCalculator } from './data/data_table_aggr_calculator';\r\nimport { LCDialog, showNoLicenseAlert } from './license/lc-dialog';\r\n\r\ndeclare module '@easyquery/core/dist/lib/main/context' {\r\n interface EqContext {\r\n\t\t/** \r\n\t\t* Sets the endpoint for getting the license key.\r\n\t\t* @deprecated This method is deprecated and will be ignored. Starting version 7.0.0\r\n\t\t* endpoint set for EasyQuery actions will be used via adding '.lck'\r\n\t\t*/\r\n\t\tsetLicenseKeyEndpoint(this: EqContext, endpoint: string) : void;\r\n\r\n\t\t/** \r\n\t\t* Extension method that activates `Enterprise` functionality\r\n\t\t* @param keyOrInitCallback The license key or a callback wich is called after\r\n\t\t* loading the license key from the back-end.\r\n\t\t* If the callback function is called useEnterprise will try to get the license key from {base}/lck endpoint\r\n\t\t*\r\n\t\t* @example\r\n\t\t* context.useEnterprise('license key')\r\n\t\t* //or\r\n\t\t* context.useEnterprise(() => {\r\n\t\t* //further logic\r\n\t\t*\tview.init(options);\r\n\t\t* });\r\n\t\t*/\r\n\t\tuseEnterprise(this: EqContext, keyOrInitCallback: string | (() => void)): void;\r\n }\r\n}\r\n\r\nEqContext.prototype.setLicenseKeyEndpoint = function(this: EqContext, endpoint : string) {\r\n\tconsole.warn('This method is deprecated and will be ignored.\\n ' \r\n\t\t\t\t+ 'The main EasyQuery endpoint (set via useEndpoint() function) is used to get the license since version 7.0.\\n '\r\n\t\t\t\t+ 'So, you can simply remove this function call');\r\n}\r\n\r\nEqContext.prototype.useEnterprise = function(this: EqContext, keyOrInitCallback: string | (() => void)) {\r\n\tconst func = (key: string, showAlert: boolean) => {\r\n\t\tlcv.ck(key);\r\n\r\n\t\tif (lcv.__kt > 1) {\r\n\t\t\tconst services = this.getServices();\r\n\t\t\tservices.registerDataModelResolver(context => new DataModelEx());\r\n\t\t\tservices.registerQueryResolver(context => new QueryEx(context.getModel()));\r\n\t\t\tservices.registerQueryStorageResolver(context => new EqServerQueryStorage(context));\r\n\t\t\tservices.registerAggregatesCalculator(context => new DataTableAggregatesCalculator(context));\r\n\r\n\t\t\tif (lcv.__kt === 2) {\r\n\t\t\t\tconsole.warn('EasyQuery.JS is working in the TRIAL MODE!\\n' \r\n\t\t\t\t\t\t\t\t+ 'Please order a license (https://korzh.com/eq) to get a proper product key.');\r\n\t\t\t\tcreateTrialWM();\r\n\t\t\t\tsetTimeout(() => {\t\r\n\t\t\t\t\tshowTrialWM();\r\n\t\t\t\t\tsetTimeout(hideTrialWM, 6000)\r\n\t\t\t\t}, 3000);\r\n\t\t\t}\r\n\t\t} \r\n\t\telse {\r\n\t\t\tif (showAlert) {\r\n\t\t\t\tshowNoLicenseAlert(lcv);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tconst lcd = new LCDialog(this);\r\n\t\t\t\tlcd.show();\t\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tif (typeof(keyOrInitCallback) === \"string\") {\r\n\t\tfunc(keyOrInitCallback, true);\r\n\t} \r\n\telse if (typeof(keyOrInitCallback) === \"function\") {\r\n\t\tconst http = this.getServices().getHttpClient();\r\n\t\tlet url = equtils.combinePath(this.getBaseEndpoint(), 'lck2')\r\n\t\thttp.get<LicenseKeyResponse>(url)\r\n\t\t\t.then(result => { \r\n\t\t\t\tfunc(result.key.split(\"\").reverse().join(\"\"), false);\r\n\t\t\t\tthis.useBackend({\r\n\t\t\t\t\ttype: result.backendType,\r\n\t\t\t\t\tsubType: result.appType\r\n\t\t\t\t});\r\n\t\t\t\tkeyOrInitCallback(); \r\n\t\t\t})\r\n\t\t\t.catch(error => {\r\n\t\t\t\turl = equtils.combinePath(this.getBaseEndpoint(), 'lck')\r\n\t\t\t\thttp.get<string>(url)\r\n\t\t\t\t\t.then(result => { \r\n\t\t\t\t\t\tfunc(result.split(\"\").reverse().join(\"\"), false);\r\n\t\t\t\t\t\tkeyOrInitCallback(); \r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(error => this.throwError({\r\n\t\t\t\t\t\taction: \"LCK\",\r\n\t\t\t\t\t\tsourceError: error\r\n\t\t\t\t\t}));\r\n\t\t\t})\r\n\t} \r\n\telse {\r\n\t\tthrow new Error(\"Wrong type of 'keyOrInitCallback' parameter. It must be a string with a license key or a callback function.\");\r\n\t}\r\n}\r\n\r\nlet trialDiv: HTMLDivElement;\r\n\r\nfunction createTrialWM() {\r\n\t// we can rewrite it using shadow dom\r\n\t// to make it impossible to hide using JS :)\r\n\ttrialDiv = document.createElement(\"div\");\r\n\ttrialDiv.style.position = \"fixed\";\r\n\ttrialDiv.style.bottom = \"0\";\r\n\ttrialDiv.style.right = \"-400px\";\r\n\ttrialDiv.style.width = \"400px\";\r\n\ttrialDiv.style.height = \"100px\";\r\n\ttrialDiv.style.color = \"grey\";\r\n\ttrialDiv.style.textAlign = \"center\";\r\n\ttrialDiv.style.opacity = \"0.7\";\r\n\ttrialDiv.style.font = \"bold 1em Trebuchet MS, Tahoma, Verdana, Geneva, Arial, Helvetica, sans-serif\";\r\n\ttrialDiv.style.transition = \"right 3s ease-out\";\r\n\r\n\tconst header = document.createElement(\"div\");\r\n\t\tconst eq = document.createElement(\"span\");\r\n\t\teq.innerText = \"EasyQuery\";\r\n\t\teq.style.color = \"#3A94D4\";\r\n\t\teq.style.lineHeight = \"50px\";\r\n\t\theader.appendChild(eq);\r\n\r\n\t\tconst korzh = document.createElement(\"span\");\r\n\t\tkorzh.innerText = \"by Korzh.com\";\r\n\t\tkorzh.style.marginLeft = \"10px\";\r\n\t\theader.appendChild(korzh);\r\n\r\n\ttrialDiv.appendChild(header);\r\n\r\n\tconst trialOnly = document.createElement(\"div\");\r\n\ttrialOnly.innerText = \"FOR TRIAL USE ONLY\";\r\n\ttrialOnly.style.fontSize = \"1.2em\";\r\n\ttrialOnly.style.fontWeight = \"1000\";\r\n\ttrialDiv.appendChild(trialOnly);\r\n\r\n\tdocument.body.appendChild(trialDiv);\r\n}\r\n\r\nfunction showTrialWM() {\r\n\tif (trialDiv) {\r\n\t\ttrialDiv.style.right = \"0\";\r\n\t}\r\n}\r\n\r\nfunction hideTrialWM() {\r\n\tif (trialDiv) {\r\n\t\ttrialDiv.style.right = \"-400px\";\r\n\t\tsetTimeout(() => {\r\n\t\t\ttrialDiv.parentNode.removeChild(trialDiv);\r\n\t\t}, 5000)\r\n\t}\r\n}\r\n\r\ninterface LicenseKeyResponse {\r\n\tkey : string;\r\n\tbackendType?: string;\r\n\tappType?: string;\r\n}","import { \r\n AggregatesCalculator, AggregatesContainer, \r\n AggrCalculationError, AggrCalculationOptions, GroupTotals,\r\n EasyDataTable\r\n} from '@easydata/core';\r\n\r\nimport { \r\n EqContext, ExprTag, \r\n Query, EqAggregatesContainer, FetchDataOptions, Expression \r\n} from '@easyquery/core';\r\n\r\ninterface ProcessLevelOptions {\r\n query: Query;\r\n level: number;\r\n groupName?: string;\r\n resultObtainedCallback?: (result?: any, level?: number) => void;\r\n errorOccurredCallback?: (error: AggrCalculationError) => void;\r\n}\r\n\r\nexport class EqServerAggregatesCalculator implements AggregatesCalculator {\r\n constructor(protected context: EqContext) {\r\n this.aggrContainer = new EqAggregatesContainer(context);\r\n }\r\n\r\n private aggrContainer: EqAggregatesContainer;\r\n\r\n getAggrContainer(): AggregatesContainer {\r\n return this.aggrContainer;\r\n }\r\n\r\n calculate(options?: AggrCalculationOptions): Promise<void> {\r\n this._needRecalculation = false;\r\n this.aggrContainer.clear();\r\n\r\n options = options || { };\r\n options.maxLevel = options.maxLevel >= 0 \r\n ? options.maxLevel : 0;\r\n\r\n const levelPromises: Array<Promise<void>> = []; \r\n const query = this.context.createQuery();\r\n query.loadFromData(this.context.getQuery().toJSONData());\r\n \r\n const settings = this.context.getQuery().getAggregationSettings();\r\n const aggregates = settings.getAggregates();\r\n const aggrColIds = settings.getAggregates().map(a => a.colId);\r\n const aggrCols = query.getColumns()\r\n .filter(col => aggrColIds.indexOf(col.id) >= 0);\r\n\r\n for (const col of aggrCols) {\r\n query.changeColumnType(col, ExprTag.AggregateFunction, \r\n { funcId: aggregates.filter(a => a.colId == col.id)[0].funcId });\r\n }\r\n\r\n //get all non-aggregate columns\r\n const queryCols = query.getColumns()\r\n .filter(c => c.expr.tag !== ExprTag.AggregateFunction);\r\n\r\n for (const col of queryCols) {\r\n col.setHidden(true);\r\n }\r\n\r\n if (settings.hasRecordCount()) {\r\n const col = query.createColumn();\r\n col.caption = settings.COUNT_FIELD_NAME;\r\n col['_id'] = settings.COUNT_FIELD_NAME;\r\n const sqlText = 'COUNT(*)';\r\n \r\n const customSqlExpr = new Expression(col);\r\n customSqlExpr.tag = ExprTag.CustomSql;\r\n customSqlExpr.sql = sqlText;\r\n customSqlExpr.baseAttrId = null;\r\n col.expr = customSqlExpr;\r\n\r\n query.getColumns().push(col);\r\n }\r\n\r\n if (settings.hasGrandTotals()) {\r\n levelPromises.push(this.processLevel({\r\n query: query,\r\n level: 0,\r\n groupName: 'Grand Totals', \r\n resultObtainedCallback: options.resultObtained,\r\n errorOccurredCallback: options.errorOccurred\r\n }));\r\n }\r\n\r\n const groups = settings.getGroups();\r\n for (let level = 1; level <= groups.length; level++) {\r\n const group = groups[level - 1];\r\n \r\n for (const col of queryCols) {\r\n col.setHidden(group.columns.indexOf(col.id) < 0);\r\n }\r\n\r\n levelPromises.push(this.processLevel({\r\n query: query,\r\n level: level,\r\n groupName: group.name, \r\n resultObtainedCallback: options.resultObtained,\r\n errorOccurredCallback: options.errorOccurred\r\n }));\r\n }\r\n \r\n return Promise.all(levelPromises)\r\n .then(() => { \r\n return;\r\n })\r\n .catch((error) => console.error(error));\r\n }\r\n\r\n private processLevel(options: ProcessLevelOptions): Promise<void> {\r\n const fetcher = this.context.getServices()\r\n .getDataFetcher();\r\n\r\n let fetchOptions : FetchDataOptions = {\r\n aux: true,\r\n query: options.query\r\n };\r\n\r\n if (this.context.debugMode) {\r\n fetchOptions.debug = `Fetching group data. Group: '${options.groupName}', level: ${options.level}`;\r\n }\r\n\r\n const resultPromise = fetcher.fetchData(fetchOptions)\r\n .then((result) => {\r\n const dataTable = new EasyDataTable({\r\n elasticChunks:true\r\n });\r\n \r\n const resultSet = result.resultSet;\r\n\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 const levelData = this.buildLevelData(options.level, dataTable);\r\n this.aggrContainer.setAggregateData(options.level, levelData);\r\n\r\n if (options.resultObtainedCallback) {\r\n options.resultObtainedCallback(result, options.level);\r\n }\r\n }) \r\n .catch((error: Error) => { \r\n if (options.errorOccurredCallback) {\r\n options.errorOccurredCallback({...error, level: options.level });\r\n }\r\n });\r\n\r\n return resultPromise;\r\n }\r\n\r\n private buildLevelData(level: number, dataTable: EasyDataTable): Map<string, GroupTotals> {\r\n const aggrSettings = this.context.getQuery().getAggregationSettings();\r\n \r\n const keyColumns = level > 0\r\n ? aggrSettings.getGroups()[level - 1].columns\r\n : [];\r\n\r\n const valueColumns = aggrSettings.getAggregates().map(a => a.colId);\r\n\r\n if (aggrSettings.hasRecordCount()) {\r\n valueColumns.push(aggrSettings.COUNT_FIELD_NAME);\r\n }\r\n\r\n const data = new Map();\r\n\r\n for (const row of dataTable.getCachedRows()) {\r\n const key: any = {};\r\n const value: GroupTotals = {};\r\n\r\n for (const keyCol of keyColumns) {\r\n const colIdx = dataTable.columns.getIndex(keyCol);\r\n if (colIdx >= 0) {\r\n let keyVal = row.getValue(keyCol);\r\n if (!aggrSettings.caseSensitiveGroups && typeof(keyVal) === 'string') {\r\n keyVal = keyVal.toLowerCase();\r\n }\r\n key[keyCol] = keyVal;\r\n }\r\n }\r\n\r\n for (const valueCol of valueColumns) {\r\n value[valueCol] = row.getValue(valueCol)\r\n }\r\n\r\n data.set(JSON.stringify(key), value);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n private _needRecalculation = true;\r\n\r\n needRecalculation(): boolean {\r\n return this._needRecalculation;\r\n }\r\n\r\n reset(): void {\r\n this._needRecalculation = true;\r\n }\r\n}"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"easyquery.enterprise.min.js","mappings":"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","sources":["webpack://easyqueryEnterprise/webpack/universalModuleDefinition","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/utils/browser_utils.js","webpack://easyqueryEnterprise/external umd \"easyqueryCore\"","webpack://easyqueryEnterprise/webpack/bootstrap","webpack://easyqueryEnterprise/webpack/runtime/define property getters","webpack://easyqueryEnterprise/webpack/runtime/hasOwnProperty shorthand","webpack://easyqueryEnterprise/webpack/runtime/make namespace object","webpack://easyqueryEnterprise/./src/utils/lcv.ts","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/types/data_type.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/types/entity_attr_kind.js","webpack://easyqueryEnterprise/./src/query/condition_ex.ts","webpack://easyqueryEnterprise/./src/query/query_column_ex.ts","webpack://easyqueryEnterprise/./src/query/query_ex.ts","webpack://easyqueryEnterprise/./src/main/eqs_query_storage.ts","webpack://easyqueryEnterprise/./src/dm/model_ex.ts","webpack://easyqueryEnterprise/./src/data/data_table_aggr_calculator.ts","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/types/editor_tag.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/http/http_method.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/http/http_request.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/i18n/i18n.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/utils/utils.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/utils/string_utils.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/http/http_action_result.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/data/data_column.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/http/http_client.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/meta/meta_entity.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/meta/value_editor.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/data/aggr_settings.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/meta/meta_data.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/utils/liquid.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/data/data_row.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/data/easy_data_table.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/utils/easy_guid.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/event/event_emitter.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/i18n/load_default_locale_settings.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/core/dist/lib/public_api.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/utils/ui-utils.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/utils/dom_elem_builder.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/utils/mask.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/utils/drag_manager.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_options.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_cell_renderer.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_columns.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/dialogs/dialog_service.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/datetimepicker/calendar.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/datetimepicker/date_time_picker.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_calendar.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/datetimepicker/time_picker.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_time_picker.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_date_time_picker.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/dialogs/default_dialog_service.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/i18n/text_resources.js","webpack://easyqueryEnterprise/../../easydata/easydata.js/packs/ui/dist/lib/public_api.js","webpack://easyqueryEnterprise/./src/license/lc-dialog.ts","webpack://easyqueryEnterprise/./src/extensions.ts","webpack://easyqueryEnterprise/./src/data/eqs_aggr_calculator.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"easyqueryCore\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"easyqueryEnterprise\", [\"easyqueryCore\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"easyqueryEnterprise\"] = factory(require(\"easyqueryCore\"));\n\telse\n\t\troot[\"easyqueryEnterprise\"] = factory(root[\"easyqueryCore\"]);\n})(self, (__WEBPACK_EXTERNAL_MODULE__388__) => {\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","module.exports = __WEBPACK_EXTERNAL_MODULE__388__;","// 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};","\r\nconst majVer = 7;\r\nconst minVer = 2;\r\n\r\nconst magics = [45, 128, 231];\r\n\r\nMath.trunc = 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\nexport const lcv = {\r\n __kt: 0,\r\n ck: function (key?: string) {\r\n\r\n if (!key || !key.length) {\r\n this.__kt = -3;\r\n return;\r\n }\r\n\r\n try {\r\n var part1 = key.slice(0, key.length - 12);\r\n var infoBytes = _bs(part1);\r\n var part2 = key.slice(key.length - 12);\r\n \r\n let ism = false;\r\n for(const magic of magics) {\r\n var edc = t36(magic);\r\n\r\n if (part2[0] === edc[0] && part2[2] === edc[1]) {\r\n ism = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!ism) {\r\n lcv.__kt = -1;\r\n }\r\n \r\n var idx = minVer % 4;\r\n var shift = majVer + minVer;\r\n if (part2[6 + idx] != encChar(shift, 19)) {\r\n lcv.__kt = -2;\r\n return;\r\n }\r\n \r\n if (part2[1] != encChar(infoBytes[3])) {\r\n return;\r\n }\r\n \r\n lcv.__kt = part2[3] != encChar(infoBytes[5]) ? 2 : 3;\r\n\r\n if (lcv.__kt === 2) {\r\n var eds = `${f36(part2.substring(4, 6) + part2.substring(10))}`;\r\n var ed = new Date(\r\n 2000 + Number.parseInt(eds.substring(0, 2)), \r\n Number.parseInt(eds.substring(2, 4)) - 1,\r\n Number.parseInt(eds.substring(4)),\r\n 0, 0, 0, 0);\r\n\r\n if (Date.now() > ed.getTime()) {\r\n lcv.__kt = 1;\r\n } \r\n }\r\n }\r\n catch(error) {\r\n } \r\n }\r\n}\r\n\r\nfunction encChar(x: number, b = 20) {\r\n return String.fromCharCode(65 + x % b);\r\n}\r\n\r\nfunction _bs(str: string) {\r\n var binary_string = urlatob(str);\r\n var len = binary_string.length;\r\n var bytes = new Uint8Array(len);\r\n for (var i = 0; i < len; i++) {\r\n bytes[i] = binary_string.charCodeAt(i);\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction urlatob(str: string) {\r\n var s = str;\r\n s = s.replace(/-/g, '+'); \r\n s = s.replace(/_/g, '/'); \r\n switch (s.length % 4)\r\n {\r\n case 0:\r\n break; \r\n case 2:\r\n s += \"==\";\r\n break;\r\n case 3:\r\n s += \"=\";\r\n break;\r\n }\r\n\r\n return window.atob(s);\r\n}\r\n\r\nconst tokens = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\r\n\r\nfunction t36(val) {\r\n var result = \"\";\r\n\r\n while (val > 0) {\r\n result = tokens[val % tokens.length] + result;\r\n val /= tokens.length;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction f36(val) {\r\n var d = 0;\r\n\r\n for (var i = 0; i < val.length; ++i)\r\n d += tokens.indexOf(val[i]) * Math.pow(tokens.length, val.length - i - 1);\r\n\r\n return d;\r\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","import { Condition, DataModel, CondTag } from \"@easyquery/core\";\r\n\r\nimport { lcv } from '../utils/lcv';\r\n\r\nexport class ConditionEx extends Condition {\r\n\r\n private readOnly : boolean = false;\r\n\r\n public isReadOnly(): boolean {\r\n return this.readOnly || (this.getParent() && this.getParent().isReadOnly());\r\n }\r\n\r\n public setReadOnly(value: boolean) {\r\n this.readOnly = value || (this.getParent() && this.getParent().isReadOnly());\r\n this.conditions && this.conditions.forEach((cond: Condition) => {\r\n cond.setReadOnly(value);\r\n })\r\n }\r\n\r\n private parameterized = false;\r\n \r\n public isParameterized(): boolean {\r\n return this.parameterized;\r\n }\r\n\r\n public setParameterized(value : boolean) {\r\n this.parameterized = value;\r\n }\r\n\r\n\r\n private inJoin : boolean = false;\r\n\r\n public isInJoin(): boolean {\r\n return this.inJoin;\r\n }\r\n\r\n public setInJoin(value : boolean) { \r\n this.inJoin = value; \r\n }\r\n\r\n public loadFromData(model: DataModel, data: any) {\r\n super.loadFromData(model, data);\r\n\r\n if (lcv.__kt <= 1)\r\n return;\r\n\r\n if (typeof data.readOnly !== 'undefined') {\r\n this.setReadOnly(data.readOnly);\r\n }\r\n\r\n if (typeof data.inJoin !== 'undefined') {\r\n this.setInJoin(data.inJoin);\r\n }\r\n\r\n if (typeof data.parameterized !== 'undefined') {\r\n this.setParameterized(data.parameterized)\r\n }\r\n \r\n //if condition group\r\n //this.linkType = data.linking;\r\n if (data.conds) {\r\n for (let i = 0; i < data.conds.length; i++) {\r\n let newCond = this.query.createCondition();\r\n newCond.loadFromData(model, data.conds[i]);\r\n this.conditions.push(newCond);\r\n newCond.setParent(this);\r\n }\r\n }\r\n }\r\n\r\n public saveToData(): any {\r\n\r\n let obj = super.saveToData();\r\n\r\n if (lcv.__kt <= 1)\r\n return obj;\r\n\r\n if (this.isReadOnly()) {\r\n obj.readOnly = this.isReadOnly();\r\n }\r\n\r\n if (this.isParameterized()) {\r\n obj.parameterized = this.isParameterized();\r\n }\r\n\r\n if (this.isInJoin()) {\r\n obj.inJoin = this.isInJoin();\r\n }\r\n\r\n if (this.tag == CondTag.Group){\r\n //if condition group\r\n //obj.linking = this.linkType;\r\n obj.conds = [];\r\n for (let i = 0; i < this.conditions.length; i++) {\r\n obj.conds.push(this.conditions[i].saveToData());\r\n } \r\n }\r\n\r\n return obj;\r\n }\r\n}","import { QueryColumn, DataModel } from \"@easyquery/core\";\r\n\r\nimport { lcv } from '../utils/lcv';\r\n\r\nexport class QueryColumnEx extends QueryColumn {\r\n\r\n private readOnly : boolean = false;\r\n\r\n public isReadOnly(): boolean {\r\n return this.readOnly;\r\n }\r\n\r\n public setReadOnly(value: boolean) {\r\n this.readOnly = value;\r\n }\r\n\r\n /**\r\n * Loads column from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param colData The JSON representation object.\r\n */\r\n public loadFromData(model: DataModel, colData: any) {\r\n super.loadFromData(model, colData);\r\n\r\n if (lcv.__kt <= 2)\r\n return;\r\n\r\n if (colData) {\r\n if (typeof colData.readOnly != 'undefined') {\r\n this.readOnly = colData.readOnly;\r\n }\r\n }\r\n }\r\n\r\n public saveToData(): any {\r\n\r\n let colData = super.saveToData();\r\n\r\n if (lcv.__kt <= 2)\r\n return colData;\r\n\r\n if (this.isReadOnly()) {\r\n colData.readOnly = this.isReadOnly();\r\n }\r\n\r\n return colData;\r\n }\r\n}","import { \r\n Query, DataModel, \r\n CondTag, ConditionGroupDescriptor, \r\n Condition, LinkType, QueryColumn \r\n} from '@easyquery/core';\r\n\r\nimport { ConditionEx } from './condition_ex';\r\nimport { QueryColumnEx } from './query_column_ex';\r\n\r\nimport { lcv } from '../utils/lcv';\r\n\r\n\r\nexport class QueryEx extends Query {\r\n\r\n constructor(model : DataModel) {\r\n super(model);\r\n }\r\n \r\n public isEx() : boolean {\r\n return lcv.__kt > 1;\r\n }\r\n\r\n public createSubQuery() : Query {\r\n return new QueryEx(this.model);\r\n }\r\n\r\n public createCondition(tag = CondTag.Simple): Condition {\r\n \r\n if (lcv.__kt <= 1)\r\n return super.createCondition(tag);\r\n\r\n return new ConditionEx(this, tag)\r\n }\r\n\r\n public createColumn(justsorted = false): QueryColumn {\r\n\r\n if (lcv.__kt <= 1)\r\n return super.createColumn(justsorted);\r\n\r\n return new QueryColumnEx(this, justsorted);\r\n }\r\n\r\n\r\n /**\r\n * Adds a condition group - a group of simple conditions (predicates) linked by AND or OR\r\n * @param descriptor The descriptor of the new condition group.\r\n * @returns The new search condition.\r\n */\r\n public addConditionGroup(descriptor: ConditionGroupDescriptor, addChildCondition: boolean = true): Condition { \r\n\r\n if (lcv.__kt <= 1)\r\n return super.addConditionGroup(descriptor, addChildCondition);\r\n\r\n let parent = descriptor.parent as Condition || this.getRootCondition();\r\n\r\n let lType = descriptor.linking || (parent.linkType === LinkType.All ? LinkType.Any : LinkType.All);\r\n let group = this.createCondition(CondTag.Group);\r\n group.linkType = lType;\r\n\r\n if (addChildCondition) {\r\n let model = this.getModel();\r\n let attr = model.getFirstUICAttr();\r\n let op = model.getDefaultOperatorForAttr(attr);\r\n let cond = this.createSimpleConditionObject(attr, op, \"\")\r\n group.addCondition(cond);\r\n }\r\n\r\n parent.addCondition(group);\r\n return group;\r\n }\r\n\r\n public addExtraConditionGroup(descriptor: ConditionGroupDescriptor, addChildCondition: boolean = true): Condition { \r\n descriptor.parent = descriptor.parent || this.extraConditions;\r\n \r\n if (lcv.__kt <= 1)\r\n return super.addExtraConditionGroup(descriptor, addChildCondition);\r\n\r\n return this.addConditionGroup(descriptor);\r\n }\r\n}\r\n","import { \r\n QueryStorage, QueryListItem,\r\n EqContext, QueryData, NewQueryOptions, GetQueryListOptions, \r\n LoadQueryOptions, SaveQueryOptions, RemoveQueryOptions\r\n} from '@easyquery/core';\r\n\r\nexport class EqServerQueryStorage implements QueryStorage {\r\n\r\n constructor(protected context: EqContext) {\r\n }\r\n\r\n public init() {\r\n }\r\n\r\n public newQuery(options?: NewQueryOptions): Promise<QueryData> {\r\n options = options || {};\r\n\r\n const query = options.query || this.context.getQuery();\r\n const model = this.context.getModel();\r\n const modelId = options.modelId || (model ? model.getId() : \"\");\r\n \r\n if (options.queryId) {\r\n query.setId(options.queryId);\r\n }\r\n\r\n if (options.name) {\r\n query.setName(options.name);\r\n }\r\n\r\n if (options.description) {\r\n query.setDescription(options.description);\r\n }\r\n\r\n let requestData = {\r\n 'query': query.toJSONData()\r\n };\r\n\r\n if (options.data) {\r\n requestData['data'] = options.data;\r\n }\r\n\r\n const url = this.context.resolveEndpoint('NewQuery', { modelId: modelId })\r\n const http = this.context.getServices().getHttpClient();\r\n\r\n return http.post(url, requestData)\r\n .then((responseData) => {\r\n return responseData.query;\r\n }); \r\n }\r\n\r\n public getQueryList(options?: GetQueryListOptions): Promise<QueryListItem[]> {\r\n options = options || {};\r\n\r\n const modelId = options.modelId || this.context.getModel().getId();\r\n\r\n const url = this.context.resolveEndpoint('GetQueryList', { modelId: modelId });\r\n const http = this.context.getServices().getHttpClient();\r\n\r\n return http.get(url)\r\n .then((responseData) => {\r\n if (!responseData.queries) {\r\n return Promise.reject({\r\n message: 'Wrong response format'\r\n });\r\n } \r\n\r\n return responseData.queries;\r\n });\r\n }\r\n\r\n public loadQuery(options?: LoadQueryOptions): Promise<QueryData> {\r\n options = options || {};\r\n\r\n const model = this.context.getModel();\r\n const query = this.context.getQuery();\r\n\r\n const modelId = options.modelId || model.getId();\r\n const queryId = options.queryId || query.getId();\r\n\r\n const url = this.context.resolveEndpoint('GetQuery', { modelId: modelId, queryId: queryId });\r\n const http = this.context.getServices().getHttpClient();\r\n\r\n return http.get(url)\r\n .then((responseData) => {\r\n return responseData.query;\r\n });\r\n }\r\n\r\n public saveQuery(options?: SaveQueryOptions): Promise<QueryData> {\r\n options = options || {};\r\n\r\n const query = options.query || this.context.getQuery();\r\n const queryId = options.queryId || query.getId();\r\n if (options.queryId) {\r\n query.setId(options.queryId);\r\n }\r\n \r\n const modelId = options.modelId || query.getModel().getId();\r\n\r\n if (options.queryId) {\r\n query.setId(options.queryId);\r\n } \r\n\r\n let requestData = {\r\n 'query': query.toJSONData()\r\n };\r\n\r\n if (options.data) {\r\n requestData['data'] = options.data;\r\n }\r\n\r\n const url = this.context.resolveEndpoint('SaveQuery', { modelId: modelId, queryId: queryId });\r\n const http = this.context.getServices().getHttpClient();\r\n\r\n return http.put(url, requestData)\r\n .then((responseData) => {\r\n return responseData.query;\r\n });\r\n }\r\n\r\n public removeQuery(options?: RemoveQueryOptions): Promise<void> {\r\n options = options || {};\r\n\r\n const context = this.context;\r\n const query = context.getQuery();\r\n\r\n const modelId = options.modelId || query.getModel().getId();\r\n const queryId = options.queryId || query.getId();\r\n\r\n let requestData = {\r\n 'modelId': modelId,\r\n 'queryId': queryId\r\n };\r\n\r\n if (options.data) {\r\n requestData['data'] = options.data;\r\n }\r\n\r\n const url = this.context.resolveEndpoint('RemoveQuery', \r\n { modelId: modelId, queryId: queryId });\r\n const http = this.context.getServices().getHttpClient();\r\n\r\n return http.delete(url, requestData).getPromise();\r\n }\r\n}","import { DataModel, Query, Tree, Entity } from \"@easyquery/core\"\r\nimport { QueryEx } from \"../query/query_ex\";\r\nimport { lcv } from \"../utils/lcv\";\r\n\r\nexport class DataModelEx extends DataModel {\r\n\r\n\r\n public buildQueryPath(query: Query): Tree<Entity> {\r\n\r\n if (lcv.__kt <= 1)\r\n return super.buildQueryPath(query);\r\n \r\n if (this.mainEntity)\r\n return super.buildQueryPath(query);\r\n\r\n const entities = this.getEntitiesInQuery(query);\r\n if (entities.length == 0) {\r\n throw Error(\"Cannon build path. Path is empty\");\r\n }\r\n\r\n let tree = new Tree(entities[0]);\r\n \r\n for(let i = 1; i < entities.length; i++) {\r\n const entity = entities[i];\r\n if (tree.contains(entity)) {\r\n continue;\r\n }\r\n\r\n let path = this.findPath(tree.value, entity);\r\n if (path != null) {\r\n //Add path to tree\r\n tree = this.addPathToTree(tree, \r\n (path[0] === tree.value) ? path.slice(1) : path);\r\n }\r\n else {\r\n throw Error(\"Unable to build query. Cannot build path.\");\r\n }\r\n }\r\n\r\n tree.setParents();\r\n\r\n return tree;\r\n }\r\n\r\n private addPathToTree(tree: Tree<Entity>, path: Entity[]): Tree<Entity> {\r\n \r\n if (path.length == 0) {\r\n return;\r\n }\r\n\r\n let pathAdded = false;\r\n for(let child of tree.childs) {\r\n if (child.value === path[0]) {\r\n pathAdded = true;\r\n if (path.length > 1)\r\n child = this.addPathToTree(child, path.slice(1));\r\n break;\r\n }\r\n }\r\n\r\n if (!pathAdded) {\r\n let link = this.findLink(tree.value, path[0]);\r\n if (link) {\r\n let newNode = new Tree(path[0]);\r\n tree.addChild(newNode);\r\n if (path.length > 1)\r\n newNode = this.addPathToTree(newNode, path.slice(1));\r\n }\r\n else if (!tree.parent) {\r\n let node = new Tree(tree);\r\n tree = new Tree(path[0]);\r\n tree.addChild(node);\r\n if (path.length > 1)\r\n tree = this.addPathToTree(tree, path.slice(1));\r\n } else {\r\n throw Error(\"Unable to build query. Cannot build path.\");\r\n }\r\n }\r\n\r\n return tree;\r\n }\r\n\r\n\r\n private findPath(entityFrom: Entity, entityTo: Entity): Entity[] | null {\r\n\r\n let curPath: Entity[] = [];\r\n\r\n let curStep: Array<Array<Entity>> = []\r\n let nextStep: Array<Array<Entity>> = [];\r\n let passedEntities: Array<Entity> = [];\r\n\r\n let pathFound = false;\r\n curPath.push(entityFrom);\r\n curStep.push(curPath);\r\n passedEntities.push(entityFrom);\r\n\r\n while (!pathFound) {\r\n nextStep = [];\r\n for(let path of curStep) {\r\n pathFound = this.checkPath(path, entityTo, nextStep, passedEntities);\r\n if (pathFound) {\r\n path.push(entityTo);\r\n curPath = path;\r\n break;\r\n }\r\n }\r\n\r\n curStep = [];\r\n if (!pathFound) {\r\n if (nextStep.length == 0)\r\n return null;\r\n\r\n //copy nextStep to curStep\r\n for (let path of nextStep)\r\n curStep.push(path);\r\n }\r\n\r\n }\r\n\r\n return curPath;\r\n }\r\n\r\n private checkPath(path: Entity[], entityTo: Entity, nextStep: Array<Array<Entity>>, passedEntities: Entity[]): boolean {\r\n const endPoint = path[path.length - 1];\r\n const entityLinks = this.getLinksByEntity(endPoint);\r\n for (let link of entityLinks) {\r\n let entity2: Entity = null;\r\n if (link.entityFrom == endPoint) {\r\n entity2 = link.entityTo;\r\n } \r\n else {\r\n entity2 = link.entityFrom;\r\n }\r\n \r\n if (entity2 == entityTo) { //if reach the destination\r\n nextStep = [];\r\n return true;\r\n }\r\n\r\n //if destination is not reached yet we add current node (entity2) to the path and proceed\r\n if (path.indexOf(entity2) < 0 && passedEntities.indexOf(entity2) < 0) { //to prevent cycling\r\n passedEntities.push(entity2);\r\n let newPath = new Array<Entity>();\r\n newPath = newPath.concat(path);\r\n newPath.push(entity2);\r\n nextStep.push(newPath);\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public createQuery(): QueryEx {\r\n return new QueryEx(this);\r\n }\r\n}","import { \r\n AggregatesCalculator, AggregatesContainer, AggregationSettings,\r\n AggrCalculationError, AggrCalculationOptions, GroupTotals,\r\n DataGroup,\r\n EasyDataTable, DataColumn, DataRow, AggregateColumn\r\n} from '@easydata/core';\r\n\r\nimport { \r\n EqContext, ExprTag, \r\n Query, EqAggregatesContainer, FetchDataOptions, Expression \r\n} from '@easyquery/core';\r\n\r\n\r\ninterface ColumnAggregates {\r\n sum: number;\r\n min: number;\r\n max: number;\r\n}\r\n\r\ninterface ColumnsWithAggregates {\r\n [columnId: string]: ColumnAggregates;\r\n}\r\n\r\n\r\ninterface RowAggregates {\r\n count: number;\r\n columns: ColumnsWithAggregates;\r\n}\r\n\r\nexport class DataTableAggregatesCalculator implements AggregatesCalculator {\r\n private aggrContainer: EqAggregatesContainer;\r\n private aggrSettings : AggregationSettings;\r\n private groups: DataGroup[];\r\n private aggregates: AggregateColumn[];\r\n private aggrColIds: string[];\r\n private aggrCols: DataColumn[];\r\n\r\n //stores current totals by level (group) number\r\n private levelsTotals: RowAggregates[] = [];\r\n\r\n constructor(protected context: EqContext) {\r\n this.aggrContainer = new EqAggregatesContainer(context);\r\n }\r\n\r\n getAggrContainer(): AggregatesContainer {\r\n return this.aggrContainer;\r\n }\r\n\r\n protected initObjects() {\r\n this.aggrSettings = this.context.getQuery().getAggregationSettings();\r\n this.groups = this.aggrSettings.getGroups();\r\n this.aggregates = this.aggrSettings.getAggregates();\r\n this.aggrColIds = this.aggrSettings.getAggregates().map(a => a.colId);\r\n this.aggrCols = this.context.resultTable.columns.getItems()\r\n .filter(col => this.aggrColIds.indexOf(col.id) >= 0);\r\n\r\n this.levelsTotals = []; \r\n this.prevRow = null; \r\n }\r\n\r\n private createColumnAggregatesObject() : ColumnAggregates {\r\n return {\r\n sum: 0,\r\n min: Number.MAX_VALUE,\r\n max: Number.MIN_VALUE\r\n };\r\n }\r\n\r\n calculate(options?: AggrCalculationOptions): Promise<void> {\r\n this.initObjects();\r\n this.aggrContainer.clear();\r\n\r\n options = options || { };\r\n options.maxLevel = options.maxLevel >= 0 \r\n ? options.maxLevel : 0;\r\n\r\n var levelNumber = this.groups.length + 1; //number of groups plus grand totals\r\n\r\n for (let levelIndex = 0; levelIndex < levelNumber; levelIndex++) {\r\n let levelTotals = { count : 0, columns: {} };\r\n this.resetLevelTotals(levelTotals);\r\n this.levelsTotals.push(levelTotals);\r\n }\r\n\r\n const allRows = this.context.resultTable.getCachedRows();\r\n\r\n if (allRows.length > 0) {\r\n for (const row of allRows) {\r\n this.processDataRow(row);\r\n }\r\n \r\n //flusing the totals for all group levels\r\n for (let levelIndex = 1; levelIndex < levelNumber; levelIndex++) {\r\n this.flushLevelTotals(levelIndex); \r\n }\r\n \r\n //flusing the grand totals (if they are turned on)\r\n if (this.aggrSettings.hasGrandTotals()) {\r\n this.flushLevelTotals(0);\r\n } \r\n }\r\n \r\n return Promise.resolve();\r\n }\r\n\r\n protected resetLevelTotals(rowTotals : RowAggregates) {\r\n for (const aggrCol of this.aggrCols) {\r\n rowTotals.columns[aggrCol.id] = this.createColumnAggregatesObject();\r\n }\r\n rowTotals.count = 0;\r\n }\r\n\r\n private prevRow: DataRow = null;\r\n\r\n protected processDataRow(row: DataRow) : void {\r\n const levelIndexChanged = this.checkLevelChange(row);\r\n if (levelIndexChanged >= 0) {\r\n for (let levelIndex = levelIndexChanged; levelIndex < this.levelsTotals.length; levelIndex++) {\r\n this.flushLevelTotals(levelIndex); \r\n } \r\n }\r\n\r\n if (this.aggrSettings.hasGrandTotals()) {\r\n this.updateLevelTotals(0, row);\r\n }\r\n\r\n let levelIndex = 1;\r\n for (const group of this.groups) {\r\n this.updateLevelTotals(levelIndex, row);\r\n levelIndex++;\r\n }\r\n\r\n this.prevRow = row;\r\n }\r\n\r\n /** Checks if the values in group columns were changed \r\n and return the level number they were */\r\n protected checkLevelChange(row : DataRow) : number {\r\n if (this.prevRow == null) return -1;\r\n \r\n for (let groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\r\n var group = this.groups[groupIndex];\r\n for (const colId of group.columns) {\r\n const value = row.getValue(colId);\r\n const prevValue = this.prevRow.getValue(colId);\r\n if (!this.aggrSettings.compareValues(prevValue, value)) {\r\n return groupIndex + 1;\r\n }\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n /** Saves the current values in levelData for the specified level to AggregateContainer\r\n and then reset the data row for that level\r\n */\r\n protected flushLevelTotals(levelIndex: number) : void {\r\n let levelTotals = this.levelsTotals[levelIndex];\r\n\r\n const group = levelIndex > 0 ? this.groups[levelIndex - 1] : null;\r\n\r\n let groupKey = this.aggrSettings.buildGroupKey(group, this.prevRow);\r\n\r\n var groupTotals = {};\r\n\r\n for (const aggr of this.aggregates) {\r\n const columnTotals = levelTotals.columns[aggr.colId];\r\n groupTotals[aggr.colId] = this.applyAggrFunc(aggr.funcId, columnTotals, levelTotals);\r\n }\r\n\r\n if (this.aggrSettings.hasRecordCount()) {\r\n groupTotals[this.aggrSettings.COUNT_FIELD_NAME] = levelTotals.count;\r\n }\r\n \r\n this.aggrContainer.updateAggregateData(levelIndex, groupKey, groupTotals);\r\n\r\n this.resetLevelTotals(levelTotals);\r\n }\r\n\r\n protected applyAggrFunc(funcId: string, columnTotals: ColumnAggregates, levelTotals: RowAggregates) : Number {\r\n switch (funcId) {\r\n case \"SUM\":\r\n return columnTotals.sum;\r\n case \"AVG\":\r\n return columnTotals.sum / levelTotals.count;\r\n case \"COUNT\":\r\n case \"CNTDST\":\r\n return levelTotals.count;\r\n case \"MIN\":\r\n return columnTotals.min;\r\n case \"MAX\":\r\n return columnTotals.max;\r\n }\r\n }\r\n\r\n /** Updates the totals by values in the current DataRow \r\n * and according to the specified aggregate \r\n */\r\n protected updateLevelTotals(levelIndex: number, row : DataRow) {\r\n const levelTotals = this.levelsTotals[levelIndex];\r\n levelTotals.count += 1;\r\n for (const aggr of this.aggregates) {\r\n const value = row.getValue(aggr.colId);\r\n const columnTotals = levelTotals.columns[aggr.colId];\r\n\r\n columnTotals.sum += value;\r\n if (value < columnTotals.min) {\r\n columnTotals.min = value;\r\n }\r\n\r\n if (value > columnTotals.max) {\r\n columnTotals.max = value;\r\n }\r\n }\r\n }\r\n\r\n needRecalculation(): boolean {\r\n return true;\r\n }\r\n\r\n reset(): void {\r\n }\r\n}","export var EditorTag = {\n /** Unknown tag value */\n Unknown: \"Unknown\",\n /** Edit tag value */\n Edit: \"EDIT\",\n /** DateTime tag value */\n DateTime: \"DATETIME\",\n /** List tag value */\n List: \"LIST\",\n /** CustomList tag value */\n CustomList: \"CUSTOMLIST\",\n /** File tag value */\n File: \"FILE\"\n};\n//# sourceMappingURL=editor_tag.js.map","export var HttpMethod;\n(function (HttpMethod) {\n HttpMethod[\"Trace\"] = \"TRACE\";\n HttpMethod[\"Options\"] = \"OPTIONS\";\n HttpMethod[\"Get\"] = \"GET\";\n HttpMethod[\"Put\"] = \"PUT\";\n HttpMethod[\"Post\"] = \"POST\";\n HttpMethod[\"Delete\"] = \"DELETE\";\n})(HttpMethod || (HttpMethod = {}));\n//# sourceMappingURL=http_method.js.map","var HttpRequest = /** @class */ (function () {\n function HttpRequest(xhr, descriptor) {\n this.xhr = xhr;\n this.method = descriptor.method;\n this.url = descriptor.url;\n this.headers = descriptor.headers;\n this.queryParams = descriptor.queryParams;\n this.data = descriptor.data;\n }\n HttpRequest.prototype.setHeader = function (name, value) {\n this.headers[name] = value;\n };\n HttpRequest.prototype.setQueryParam = function (name, value) {\n this.queryParams[name] = value;\n };\n HttpRequest.prototype.getXMLHttpRequest = function () {\n return this.xhr;\n };\n HttpRequest.prototype.getResponseHeaders = function () {\n if (this.xhr.readyState == this.xhr.HEADERS_RECEIVED) {\n var headers = this.xhr.getAllResponseHeaders();\n var arr = headers.trim().split(/[\\r\\n]+/);\n // Create a map of header names to values\n var headerMap = {};\n for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) {\n var line = arr_1[_i];\n var parts = line.split(': ');\n var header = parts.shift();\n var value = parts.join(': ');\n headerMap[header] = value;\n }\n return headerMap;\n }\n return {};\n };\n HttpRequest.prototype.open = function () {\n var _this = this;\n if (this.xhr.readyState !== this.xhr.UNSENT)\n return;\n var url = this.url;\n if (this.queryParams && Object.keys(this.queryParams).length > 0) {\n url += encodeURI('?' + Object.keys(this.queryParams)\n .map(function (param) { return param + '=' + _this.queryParams[param]; })\n .join('&'));\n }\n this.xhr.open(this.method, url, true);\n this.xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n for (var header in this.headers) {\n this.xhr.setRequestHeader(header, this.headers[header]);\n }\n };\n HttpRequest.prototype.abort = function () {\n this.xhr.abort();\n };\n return HttpRequest;\n}());\nexport { HttpRequest };\n//# sourceMappingURL=http_request.js.map","import { DataType } from '../types/data_type';\nimport { utils } from '../utils/utils';\n/**\n * Contains internatialization functionality.\n */\nexport var i18n;\n(function (i18n) {\n var englishUSLocaleSettings = {\n shortDateFormat: 'MM/dd/yyyy',\n longDateFormat: 'dd MMM, yyyy',\n editDateFormat: 'MM/dd/yyyy',\n shortTimeFormat: 'HH:mm',\n editTimeFormat: 'HH:mm',\n longTimeFormat: 'HH:mm:ss',\n shortMonthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n longMonthNames: ['January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'],\n shortWeekDayNames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n longWeekDayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n decimalSeparator: '.',\n currency: 'USD'\n };\n var defaultLocale = {\n localeId: 'en-US',\n englishName: 'English',\n displayName: 'English',\n texts: {\n ButtonOK: 'OK',\n ButtonCancel: 'Cancel',\n Yes: 'Yes',\n No: 'No',\n True: 'True',\n False: 'False'\n },\n settings: englishUSLocaleSettings\n };\n var allLocales = {\n 'en-US': defaultLocale\n };\n var currentLocale;\n var mappers = [];\n function mapInfo(info) {\n for (var _i = 0, mappers_1 = mappers; _i < mappers_1.length; _i++) {\n var mapper = mappers_1[_i];\n mapper(info);\n }\n }\n function addMapper(mapper) {\n mappers.push(mapper);\n }\n i18n.addMapper = addMapper;\n /**\n * Gets added locales with their names.\n * @returns The locales.\n */\n function getLocales() {\n var result = [];\n for (var locale in allLocales) {\n result.push({\n locale: locale,\n englishName: allLocales[locale].englishName,\n displayName: allLocales[locale].displayName\n });\n }\n return result.sort(function (a, b) {\n if (a.englishName > b.englishName) {\n return 1;\n }\n else if (a.englishName === b.englishName) {\n return 0;\n }\n return -1;\n });\n }\n i18n.getLocales = getLocales;\n /**\n * Gets the current locale ID.\n * @returns The locale.\n */\n function getCurrentLocale() {\n return currentLocale.localeId;\n }\n i18n.getCurrentLocale = getCurrentLocale;\n /**\n * Sets the curent locale.\n * @deprecated Use setCurrentLocale instead\n * @param l The locale.\n */\n function setLocale(l) {\n console.warn('This method is deprecated. Use setCurrentLocale instead');\n setCurrentLocale(l);\n }\n i18n.setLocale = setLocale;\n /**\n * Sets the curent locale.\n * @param localeId The locale.\n */\n function setCurrentLocale(localeId) {\n var newLocale = allLocales[localeId];\n if (newLocale) {\n utils.assignDeep(currentLocale, newLocale);\n }\n else {\n currentLocale.englishName = localeId;\n currentLocale.displayName = localeId;\n currentLocale.texts = utils.assignDeep({}, defaultLocale.texts);\n }\n currentLocale.localeId = localeId;\n }\n i18n.setCurrentLocale = setCurrentLocale;\n /**\n * Returns localized text by the key defined in parameter.\n * Here we get the text of the resource string assigned to CmdClickToAddCondition key:\n *\n ```\n const text = i18n.getText('CmdClickToAddCondition')\n ```\n * @param args The keys of the resource string.\n * @returns Text of the resource defined by key or null if the key is not found\n *\n */\n function getText() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var textsObj = currentLocale.texts;\n var resText = '';\n if (args && args.length) {\n var argLength = args.length;\n for (var i = 0; i < argLength; i++) {\n resText = textsObj[args[i]];\n if (typeof resText === 'object') {\n textsObj = resText;\n }\n else {\n break;\n }\n }\n }\n return resText;\n }\n i18n.getText = getText;\n function getLocaleSettings() {\n return currentLocale.settings;\n }\n i18n.getLocaleSettings = getLocaleSettings;\n function getOneLocaleSetting(key) {\n return currentLocale.settings[key];\n }\n i18n.getOneLocaleSetting = getOneLocaleSetting;\n function getShortMonthName(monthNum) {\n var settings = getLocaleSettings();\n if (monthNum > 0 && monthNum < 13) {\n return settings.shortMonthNames[monthNum - 1];\n }\n else {\n throw 'Wrong month number: ' + monthNum;\n }\n }\n i18n.getShortMonthName = getShortMonthName;\n function getLongMonthName(monthNum) {\n var settings = getLocaleSettings();\n if (monthNum > 0 && monthNum < 13) {\n return settings.longMonthNames[monthNum - 1];\n }\n else {\n throw 'Wrong month number: ' + monthNum;\n }\n }\n i18n.getLongMonthName = getLongMonthName;\n function getShortWeekDayName(dayNum) {\n var settings = getLocaleSettings();\n if (dayNum > 0 && dayNum < 8) {\n return settings.shortWeekDayNames.length >= dayNum\n ? settings.shortWeekDayNames[dayNum - 1]\n : dayNum.toString();\n }\n else {\n throw 'Wrong month number: ' + dayNum;\n }\n }\n i18n.getShortWeekDayName = getShortWeekDayName;\n function getLongWeekDayName(dayNum) {\n var settings = getLocaleSettings();\n if (dayNum > 0 && dayNum < 8) {\n return settings.longWeekDayNames.length >= dayNum\n ? settings.longWeekDayNames[dayNum - 1]\n : dayNum.toString();\n }\n else {\n throw 'Wrong month number: ' + dayNum;\n }\n }\n i18n.getLongWeekDayName = getLongWeekDayName;\n /**\n * Updates the locale settings (date/time formats, separators, etc) for the specified locale.\n * @param settingsToUpdate a LocaleSettings object\n */\n function updateLocaleSettings(settingsToUpdate) {\n if (!currentLocale.settings) {\n currentLocale.settings = utils.assignDeep({}, englishUSLocaleSettings);\n }\n currentLocale.settings = utils.assignDeep(currentLocale.settings, settingsToUpdate);\n }\n i18n.updateLocaleSettings = updateLocaleSettings;\n /**\n * Updates the texts for the current locale\n * @param texts A plain JS object that contains textual resources\n */\n function updateLocaleTexts(texts) {\n if (typeof texts !== 'object') {\n console.error('Wrong parameter type in updateLocaleTexts function call.' +\n 'The first parameter (localeId) is not necessary. Use updateLocaleTexts(texts) instead');\n return;\n }\n mapInfo({ localeId: currentLocale.localeId, texts: texts });\n utils.assignDeep(currentLocale.texts, texts);\n }\n i18n.updateLocaleTexts = updateLocaleTexts;\n function updateDefaultTexts(texts) {\n for (var localeId in allLocales) {\n var locale = allLocales[localeId];\n locale.texts = utils.assignDeep({}, texts, locale.texts);\n }\n currentLocale.texts = utils.assignDeep({}, texts, currentLocale.texts);\n }\n i18n.updateDefaultTexts = updateDefaultTexts;\n /**\n * Updates the information for the specified locale.\n * @param localeId The locale ID (like 'en', 'de', 'uk', etc).\n * If the locale does exist yet - it will be added\n * @param localeInfo a LocaleInfo object that contains the locale settings and textual resources\n */\n function updateLocaleInfo(localeId, localeData) {\n mapInfo(localeData);\n var localeInfoToUpdate = currentLocale;\n if (localeId) {\n if (!localeData.localeId) {\n localeData.localeId = localeId;\n }\n localeInfoToUpdate = allLocales[localeId];\n if (!localeInfoToUpdate) {\n localeInfoToUpdate = utils.assignDeep({}, defaultLocale);\n allLocales[localeId] = localeInfoToUpdate;\n }\n }\n utils.assignDeep(localeInfoToUpdate, localeData);\n }\n i18n.updateLocaleInfo = updateLocaleInfo;\n /**\n * Adds the locale.\n * @param localeId The locale ID (like 'en', 'de', 'uk', etc).\n * If the locale does exist yet - it will be created\n * @param localeInfo - a LocaleInfo object that contains the locale settings and textual resources\n */\n function addLocale(localeId, localeInfo) {\n updateLocaleInfo(localeId, localeInfo);\n }\n i18n.addLocale = addLocale;\n /**\n * Overwrites some locale settings (date/time formats) with the formats used in browser's current language\n */\n function determineSettingsByLocale(localeId) {\n var now = new Date(2020, 5, 7, 19, 34, 56, 88);\n var dateOptions = { year: 'numeric', month: 'numeric', day: 'numeric' };\n var timeOptions = { hour: 'numeric', minute: 'numeric', second: 'numeric' };\n var dateStr = now.toLocaleDateString(localeId, dateOptions);\n var timeStr = now.toLocaleTimeString(localeId, timeOptions);\n var dateFormat = dateStr\n .replace('07', 'dd')\n .replace('7', 'd')\n .replace('06', 'MM')\n .replace('6', 'M')\n .replace('2020', 'yyyy')\n .replace('20', 'yy');\n var timeFormat = timeStr\n .replace('19', 'HH')\n .replace('07', 'hh')\n .replace('7', 'h')\n .replace('34', 'mm')\n .replace('56', 'ss')\n .replace('PM', 'tt');\n if (!currentLocale.settings) {\n currentLocale.settings = {};\n }\n var localeSettings = {\n shortDateFormat: dateFormat,\n shortTimeFormat: timeFormat\n };\n updateLocaleSettings(localeSettings);\n }\n function loadBrowserLocaleSettings() {\n var lang = typeof navigator === 'object' ? navigator.language : undefined;\n determineSettingsByLocale(lang);\n }\n function resetLocales() {\n if (!currentLocale) {\n currentLocale = utils.assignDeep({}, defaultLocale);\n loadBrowserLocaleSettings();\n }\n }\n i18n.resetLocales = resetLocales;\n function dateTimeToStr(dateTime, dataType, format) {\n if (format) {\n if (format == 'd') {\n format = buildShortDateTimeFormat(DataType.Date);\n }\n else if (format == 'D') {\n format = buildLongDateTimeFormat(DataType.Date);\n }\n else if (format == 'f') {\n format = buildShortDateTimeFormat(DataType.DateTime);\n }\n else if (format == 'F') {\n format = buildLongDateTimeFormat(DataType.DateTime);\n }\n }\n else {\n format = buildShortDateTimeFormat(dataType);\n }\n return utils.dateTimeToStr(dateTime, format);\n }\n i18n.dateTimeToStr = dateTimeToStr;\n function buildShortDateTimeFormat(dataType) {\n var localeSettings = getLocaleSettings();\n var format;\n switch (dataType) {\n case DataType.Date:\n format = localeSettings.shortDateFormat;\n break;\n case DataType.Time:\n format = localeSettings.shortTimeFormat;\n break;\n default:\n format = localeSettings.shortDateFormat + ' ' + localeSettings.shortTimeFormat;\n break;\n }\n return format;\n }\n function buildLongDateTimeFormat(dataType) {\n var localeSettings = getLocaleSettings();\n var format;\n switch (dataType) {\n case DataType.Date:\n format = localeSettings.longDateFormat;\n break;\n case DataType.Time:\n format = localeSettings.longTimeFormat;\n break;\n default:\n format = localeSettings.longDateFormat + ' ' + localeSettings.longTimeFormat;\n break;\n }\n return format;\n }\n function numberToStr(number, format) {\n if (format && format.length > 0) {\n var type = format.charAt(0).toUpperCase();\n if (type === 'S') {\n return formatWithSequence(number, format.slice(1));\n }\n else if (['D', 'F', 'C'].indexOf(type) >= 0) {\n var locale = getCurrentLocale();\n return number.toLocaleString(locale, getNumberFormatOptions(format));\n }\n else {\n return convertWithMask(Math.trunc(number), format);\n }\n }\n var localeSettings = getLocaleSettings();\n return utils.numberToStr(number, localeSettings.decimalSeparator);\n }\n i18n.numberToStr = numberToStr;\n function booleanToStr(bool, format) {\n if (format && format.length > 0) {\n var type = format.charAt(0).toUpperCase();\n if (type === 'S') {\n var values = format.slice(1).split('|');\n if (values.length > 1) {\n var value = values[(bool) ? 1 : 0];\n return i18n.getText(value) || value;\n }\n }\n }\n return \"\".concat(bool);\n }\n i18n.booleanToStr = booleanToStr;\n var cachedSequenceFormats = {};\n function formatWithSequence(number, format) {\n if (!cachedSequenceFormats[format]) {\n // parse and save in cache format values \n var values_2 = format.split('|')\n .filter(function (v) { return v.length > 0; })\n .map(function (v) { return v.split('='); });\n cachedSequenceFormats[format] = {};\n if (values_2.length > 0) {\n if (values_2[0].length > 1) {\n for (var _i = 0, values_1 = values_2; _i < values_1.length; _i++) {\n var value = values_1[_i];\n cachedSequenceFormats[format][Number.parseInt(value[1])] = value[0];\n }\n }\n else {\n values_2.forEach(function (value, index) {\n cachedSequenceFormats[format][index] = value[0];\n });\n }\n }\n }\n var values = cachedSequenceFormats[format];\n if (values[number] !== undefined) {\n var value = values[number];\n return i18n.getText(value) || value;\n }\n return number.toString();\n }\n function convertWithMask(number, mask) {\n var value = number.toString();\n var result = '';\n var index = value.length - 1;\n for (var i = mask.length - 1; i >= 0; i--) {\n var ch = mask.charAt(i);\n if (ch === '#' || ch === '0') {\n if (index >= 0) {\n result += value.charAt(index);\n index--;\n }\n else {\n if (ch === '0') {\n result += 0;\n }\n }\n }\n else {\n result += ch;\n }\n }\n return result.split('').reverse().join('');\n }\n function getNumberFormatOptions(format) {\n var localeSettings = getLocaleSettings();\n var type = format[0].toUpperCase();\n var digits = (format.length > 1)\n ? Number.parseInt(format.slice(1))\n : type == 'D' ? 1 : 2;\n switch (type) {\n case 'D':\n return {\n style: 'decimal',\n useGrouping: false,\n minimumIntegerDigits: digits\n };\n case 'C':\n return {\n style: 'currency',\n currency: localeSettings.currency,\n minimumFractionDigits: digits\n };\n default:\n return {\n style: 'decimal',\n minimumFractionDigits: digits,\n maximumFractionDigits: digits\n };\n }\n }\n})(i18n || (i18n = {}));\n//# sourceMappingURL=i18n.js.map","import * as strf from './string_utils';\nimport { DataType } from '../types/data_type';\nimport { i18n } from '../i18n/i18n';\nexport var utils;\n(function (utils) {\n function getAllDataTypes() {\n return Object.values(DataType).filter(function (item) { return typeof item === \"number\"; });\n }\n utils.getAllDataTypes = getAllDataTypes;\n function getDateDataTypes() {\n return [DataType.Time, DataType.Date, DataType.DateTime];\n }\n utils.getDateDataTypes = getDateDataTypes;\n function getStringDataTypes() {\n return [DataType.String, DataType.Memo, DataType.FixedChar];\n }\n utils.getStringDataTypes = getStringDataTypes;\n var _numericTypes = [DataType.Byte, DataType.Word, DataType.Int32,\n DataType.Int64, DataType.Float, DataType.Currency, DataType.Autoinc];\n function getNumericDataTypes() {\n return _numericTypes;\n }\n utils.getNumericDataTypes = getNumericDataTypes;\n var _intTypes = [DataType.Byte, DataType.Word, DataType.Int32, DataType.Int64, DataType.Autoinc];\n //-------------- object functions -------------------\n /**\n * Copy the content of all objests passed in `args` parameters into `target`\n * and returns the result\n * NB: This function copies only the first level properties.\n * For a deep copy please use `assignDeep`\n * @param target - the target object\n * @param args - an array of the source objects\n */\n function assign(target) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n for (var i = 0; i < args.length; i++) {\n var source = args[i];\n if (source) {\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n target[key] = source[key];\n }\n }\n }\n }\n return target;\n }\n utils.assign = assign;\n /**\n * Copy the content of all objests passed in `args` parameters into `target`\n * and returns the result\n * NB: This function make a deep copy -\n * so `assignDeep` will be called recursively for all object properties\n * on the first level.\n * @param target - the target object\n * @param sources - an array of the source objects\n */\n function assignDeep(target) {\n var sources = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sources[_i - 1] = arguments[_i];\n }\n return assignDeepCore(new WeakMap(), target, sources);\n }\n utils.assignDeep = assignDeep;\n function assignDeepCore(hashSet, target, sources) {\n if (!target) {\n target = {};\n }\n for (var _i = 0, sources_1 = sources; _i < sources_1.length; _i++) {\n var source = sources_1[_i];\n if (source) {\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n var sourceVal = source[key];\n if (sourceVal !== null && typeof sourceVal === 'object') {\n if (hashSet.has(sourceVal)) {\n target[key] = hashSet.get(sourceVal);\n }\n else {\n if (Array.isArray(sourceVal)) {\n target[key] = createArrayFrom(sourceVal);\n hashSet.set(sourceVal, target[key]);\n }\n else {\n if (typeof target[key] == 'undefined' || target[key] == null) {\n target[key] = Object.create(Object.getPrototypeOf(sourceVal));\n }\n hashSet.set(sourceVal, target[key]);\n assignDeepCore(hashSet, target[key], [sourceVal]);\n }\n }\n }\n else {\n target[key] = sourceVal;\n }\n }\n }\n }\n }\n return target;\n }\n function getIfDefined(value, defaultValue) {\n return (typeof value !== 'undefined') ? value : defaultValue;\n }\n utils.getIfDefined = getIfDefined;\n function IsDefinedAndNotNull(value) {\n return typeof value !== 'undefined' && value !== null;\n }\n utils.IsDefinedAndNotNull = IsDefinedAndNotNull;\n function copyArrayTo(collection1, collection2) {\n var len1 = collection1.length;\n var len2 = collection2.length;\n for (var i = 0; i < len1 && i < len2; i++) {\n collection2[i] = collection1[i];\n }\n }\n utils.copyArrayTo = copyArrayTo;\n function createArrayFrom(collection) {\n var result = [];\n for (var _i = 0, collection_1 = collection; _i < collection_1.length; _i++) {\n var item = collection_1[_i];\n result.push(item);\n }\n return result;\n }\n utils.createArrayFrom = createArrayFrom;\n /**\n * Searches an array of the objects which implement ItemWithId by ID\n * Returs the found object or null.\n * @param array\n * @param id\n */\n function findItemById(array, id) {\n var arrLength = array.length;\n for (var idx = 0; idx < arrLength; idx++) {\n if (array[idx].id === id)\n return array[idx];\n }\n return null;\n }\n utils.findItemById = findItemById;\n function findItemIndexById(array, id) {\n var arrLength = array.length;\n for (var idx = 0; idx < arrLength; idx++) {\n if (array[idx].id === id)\n return idx;\n }\n return -1;\n }\n utils.findItemIndexById = findItemIndexById;\n /**\n * Searches an array of the objects which implement ItemWithId by ID\n * Returs the index of the found element, or -1 if nothing was found.\n * @param array\n * @param id\n */\n function indexOfArrayItem(arr, item) {\n if (arr.indexOf) {\n return arr.indexOf(item);\n }\n else {\n var len = arr.length;\n for (var i = 0; i < len; i++) {\n if (item == arr[i]) {\n return i;\n }\n }\n return -1;\n }\n }\n utils.indexOfArrayItem = indexOfArrayItem;\n /**\n * Moves an item in some array to a new position\n * @param array\n * @param index1\n * @param index2\n */\n function moveArrayItem(array, index1, index2) {\n if (index1 >= array.length) {\n throw 'Index out of bounds: ' + index1;\n }\n if (index2 >= array.length) {\n index2 = array.length - 1;\n }\n var item = array.splice(index1, 1)[0];\n array.splice(index2, 0, item);\n }\n utils.moveArrayItem = moveArrayItem;\n /**\n * Searches for a particular item in the array are removes that item if found.\n * @param arr\n * @param value\n */\n function removeArrayItem(arr, value) {\n var index = arr.indexOf(value);\n if (index != -1) {\n return arr.splice(index, 1)[0];\n }\n }\n utils.removeArrayItem = removeArrayItem;\n function insertArrayItem(arr, index, value) {\n arr.splice(index, 0, value);\n }\n utils.insertArrayItem = insertArrayItem;\n function fillArray(arr, value, start, end) {\n if (start === void 0) { start = 0; }\n var len = arr.length >>> 0;\n var relativeStart = start >> 0;\n var k = relativeStart < 0 ?\n Math.max(len + relativeStart, 0) :\n Math.min(relativeStart, len);\n var relativeEnd = end === undefined ?\n len : end >> 0;\n var final = relativeEnd < 0 ?\n Math.max(len + relativeEnd, 0) :\n Math.min(relativeEnd, len);\n while (k < final) {\n arr[k] = value;\n k++;\n }\n return arr;\n }\n utils.fillArray = fillArray;\n //------------ DOM utils ------------\n /**\n * Calculates the shift on which we need to move our element horizontally\n * to find current window\n * @param absLeft\n * @param width\n */\n function shiftToFitWindow(absLeft, width) {\n var body = document.getElementsByTagName('body')[0];\n var winWidth = window.innerWidth || document.documentElement.clientWidth || body.clientWidth;\n var absRight = absLeft + width;\n var shift = 0;\n if (absRight > winWidth) {\n shift = winWidth - absRight - 10;\n if (absLeft + shift < 0) {\n shift = 10 - absLeft;\n }\n }\n return shift;\n }\n utils.shiftToFitWindow = shiftToFitWindow;\n /**\n * Returns `true` if the value passed in the parameter is an object\n * @param val\n */\n function isObject(val) {\n if (val === null) {\n return false;\n }\n return ((typeof val === 'function') || (typeof val === 'object'));\n }\n utils.isObject = isObject;\n /**\n * Returns `true` if the `DataType` value passed in the parameter\n * represents some numeric type\n * @param dtype\n */\n function isNumericType(dtype) {\n var index = _numericTypes.indexOf(dtype);\n return (index >= 0);\n }\n utils.isNumericType = isNumericType;\n /**\n * Returns `true` if the `DataType` value passed in the parameter\n * represents some numeric type\n * @param dtype\n */\n function isIntType(dtype) {\n var index = _intTypes.indexOf(dtype);\n return (index >= 0);\n }\n utils.isIntType = isIntType;\n /**\n * Returns `true` if the value passed in the parameter is an a numeric value\n * @param val\n */\n function isNumeric(val) {\n return !isNaN(parseFloat(val)) && isFinite(val);\n }\n utils.isNumeric = isNumeric;\n /**\n * Returns `true` if two data types passed in parameters\n * are compatible - so it's safe to copy the values between\n * two expressions with these two types\n * @param type1\n * @param type2\n */\n function areCompatibleDataTypes(type1, type2) {\n return typeof type1 == \"undefined\" || typeof type2 == \"undefined\" || type1 == DataType.Unknown || type2 == DataType.Unknown\n || (type1 == type2) || (type1 == DataType.Date && type2 == DataType.DateTime)\n || (type1 == DataType.DateTime && type2 == DataType.Date);\n }\n utils.areCompatibleDataTypes = areCompatibleDataTypes;\n /**\n * Returns `true` if the property with named `propName`\n * in the object `obj` has some value\n * @param obj\n * @param propName\n */\n function isPropSet(obj, propName) {\n return obj[propName] || obj[propName.toLowerCase()] || obj[propName.toUpperCase()];\n }\n utils.isPropSet = isPropSet;\n //-------------- ID generator -----------\n var prefixIdLen = 4;\n var symbols = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n var magicTicks = 636712160627685350;\n /**\n * Generates an unique ID\n */\n function generateId(prefix) {\n if (!prefix) {\n prefix = 'easy';\n }\n var prfx = (prefix.length > prefixIdLen) ? squeezeMoniker(prefix, prefixIdLen) : prefix;\n if (prfx && prfx.length > 0) {\n prfx += \"-\";\n }\n //adding 2 random symbols\n var randValue = strf.repeatString(\"\", 2);\n ;\n var maxSymbolIndex = symbols.length - 1;\n randValue = replaceAtString(randValue, 0, symbols[getRandomInt(0, maxSymbolIndex)]);\n randValue = replaceAtString(randValue, 1, symbols[getRandomInt(0, maxSymbolIndex)]);\n //generating main ID part (64-base representation of the current value of the time ticks)\n var ticksNum64 = intToNum36(getNowTicks() - magicTicks);\n return prfx + randValue + ticksNum64;\n }\n utils.generateId = generateId;\n function intToNum36(value) {\n var targetBase = 36;\n var i = 14;\n var buffer = strf.repeatString(\"\", i);\n var rest = value;\n do {\n buffer = replaceAtString(buffer, i--, symbols[rest % targetBase]);\n rest = Math.floor(rest /= targetBase);\n } while (rest > 0);\n return strf.reverseString(buffer.trim());\n }\n function squeezeMoniker(str, maxlen) {\n var parts = str.split('-');\n var pml = 1;\n var ptt = maxlen;\n if (parts.length < maxlen) {\n pml = maxlen / parts.length;\n ptt = parts.length;\n }\n var result = \"\";\n for (var i = 0; i < ptt; i++) {\n result += squeeze(parts[i], pml);\n }\n return result;\n }\n function squeeze(str, maxlen) {\n var len = str.length;\n if (len > maxlen) {\n var step = len / maxlen;\n var result = \"\";\n result += str[0];\n var nextIndex = step;\n var ch = void 0;\n for (var i = 1; i < len; i++) {\n ch = str[i];\n if (i + 1 > nextIndex) {\n result += ch;\n nextIndex += step;\n }\n }\n return result;\n }\n else {\n return str;\n }\n }\n function replaceAtString(str, index, value) {\n return str.substr(0, index) + value + str.substr(index + value.length);\n }\n function getRandomInt(min, max) {\n return Math.floor(Math.random() * (max - min)) + min;\n }\n function getNowTicks() {\n return (621355968e9 + (new Date()).getTime() * 1e4);\n }\n function safeParseInt(str) {\n var res = parseInt(str);\n if (isNaN(res))\n throw \"\\\"\".concat(str, \"\\\" is not a valid number\");\n return res;\n }\n function getDaysInMonth(month, year) {\n return new Date(year, month + 1, 0).getDate();\n }\n // ------------- date/time functions -------------------\n // TO DO: improve to process all datetime cases\n function strToDateTime(value, format) {\n if (!value || value.length == 0)\n return new Date();\n var normalizedValue = value.replace(/[^a-zA-Z0-9_]/g, '-');\n var normalizedFormat = format.replace(/[^a-zA-Z0-9_]/g, '-');\n var formatItems = normalizedFormat.split('-');\n var dateItems = normalizedValue.split('-');\n var monthIndex = formatItems.indexOf(\"MM\");\n var dayIndex = formatItems.indexOf(\"dd\");\n var yearIndex = formatItems.indexOf(\"yyyy\");\n var hourIndex = formatItems.indexOf(\"HH\");\n var minutesIndex = formatItems.indexOf(\"mm\");\n var secondsIndex = formatItems.indexOf(\"ss\");\n var today = new Date();\n try {\n var year = yearIndex > -1 && yearIndex < dateItems.length\n ? safeParseInt(dateItems[yearIndex])\n : today.getFullYear();\n var month = monthIndex > -1 && monthIndex < dateItems.length\n ? safeParseInt(dateItems[monthIndex]) - 1\n : today.getMonth() - 1;\n if (month > 11)\n throw '';\n var day = dayIndex > -1 && dayIndex < dateItems.length\n ? safeParseInt(dateItems[dayIndex])\n : today.getDate();\n if (day > getDaysInMonth(month, year))\n throw '';\n var hour = hourIndex > -1 && hourIndex < dateItems.length\n ? safeParseInt(dateItems[hourIndex])\n : 0;\n if (hour > 23)\n throw '';\n var minute = minutesIndex > -1 && minutesIndex < dateItems.length\n ? safeParseInt(dateItems[minutesIndex])\n : 0;\n if (minute > 59)\n throw '';\n var second = secondsIndex > -1 && secondsIndex < dateItems.length\n ? safeParseInt(dateItems[secondsIndex])\n : 0;\n if (second > 59)\n throw '';\n return new Date(year, month, day, hour, minute, second);\n }\n catch (_a) {\n throw \"\".concat(value, \" is not a valid date.\");\n }\n }\n utils.strToDateTime = strToDateTime;\n function strToTime(str) {\n var timeItems = str.split(':');\n try {\n var hour = timeItems.length > 0 ? safeParseInt(timeItems[0]) : 0;\n if (hour > 23)\n throw '';\n var minute = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0;\n if (minute > 59)\n throw '';\n var second = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0;\n if (second > 59)\n throw '';\n return new Date(0, 0, 0, hour, minute, second);\n }\n catch (_a) {\n throw \"\".concat(str, \" is not a valid time.\");\n }\n }\n utils.strToTime = strToTime;\n var DT_FORMAT_RGEX = /\\[([^\\]]+)]|y{2,4}|M{1,4}|d{1,2}|H{1,2}|h{1,2}|m{2}|s{2}|t{2}/g;\n /**\n * Returns string representation of the date/time value according to the custom format (second parameter)\n * The format is compatible with the one used in .NET: https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings\n * @param date\n * @param format\n */\n function dateTimeToStr(date, format) {\n var year = date.getFullYear();\n var yearStr = year.toString();\n var month = date.getMonth() + 1;\n var day = date.getDate();\n var hour = date.getHours();\n var minute = date.getMinutes();\n var second = date.getSeconds();\n var hour12 = hour % 12 || 12; //the remainder of the division by 12. Or 12 if it's 0\n var isPm = hour > 11;\n var matches = {\n yyyy: yearStr,\n yy: yearStr.substring(yearStr.length - 2),\n MMMM: i18n.getLongMonthName(month),\n MMM: i18n.getShortMonthName(month),\n MM: (month < 10) ? '0' + month : month.toString(),\n M: month.toString(),\n dd: (day < 10) ? '0' + day : day.toString(),\n d: day.toString(),\n HH: (hour < 10) ? '0' + hour : hour.toString(),\n H: hour.toString(),\n hh: (hour12 < 10) ? '0' + hour12 : hour12.toString(),\n h: hour12.toString(),\n tt: isPm ? 'PM' : 'AM',\n mm: (minute < 10) ? '0' + minute : minute.toString(),\n ss: (second < 10) ? '0' + second : second.toString()\n };\n return format.replace(DT_FORMAT_RGEX, function (match, $1) {\n return $1 || matches[match];\n });\n }\n utils.dateTimeToStr = dateTimeToStr;\n /**\n * Converts a numeric value to the string taking into the account the decimal separator\n * @param value - the number to convert\n * @param decimalSeparator - the symbol that represents decimal separator. If not specified the function gets the one from the current locale settings.\n */\n function numberToStr(number, decimalSeparator) {\n decimalSeparator = decimalSeparator || i18n.getLocaleSettings().decimalSeparator;\n return number.toString().replace('.', decimalSeparator);\n }\n utils.numberToStr = numberToStr;\n})(utils || (utils = {}));\n//# sourceMappingURL=utils.js.map","export function repeatString(str, times) {\n var result = \"\";\n for (var i = 0; i < times; i++) {\n result += str;\n }\n return result;\n}\nexport function reverseString(str) {\n return str.split(\"\").reverse().join(\"\");\n}\nexport function strEndsWith(str, symbol) {\n return str && str.lastIndexOf(symbol) == (str.length - symbol.length);\n}\n/**\n * Adds two paths and returns the result\n * Correctly processes leading and trailing slashes\n * @param path1\n * @param path2\n */\nexport function combinePath(path1, path2) {\n var result = path1;\n if (result != null && result.length > 0) {\n if (result.charAt(result.length - 1) != '/')\n result += \"/\";\n result += path2;\n }\n else {\n result = path2;\n }\n return result;\n}\n//# sourceMappingURL=string_utils.js.map","var HttpActionResult = /** @class */ (function () {\n function HttpActionResult(request, promise) {\n this.request = request;\n this.promise = promise;\n }\n HttpActionResult.prototype.getPromise = function () {\n return this.promise;\n };\n HttpActionResult.prototype.getRequest = function () {\n return this.request;\n };\n HttpActionResult.prototype.then = function (onfulfilled, onrejected) {\n return this.promise.then(onfulfilled, onrejected);\n };\n HttpActionResult.prototype.catch = function (onrejected) {\n return this.promise.catch(onrejected);\n };\n HttpActionResult.prototype.finally = function (onfinally) {\n return this.promise.finally(onfinally);\n };\n return HttpActionResult;\n}());\nexport { HttpActionResult };\n//# sourceMappingURL=http_action_result.js.map","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","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 { 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","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","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","export var liquid;\n(function (liquid) {\n function renderLiquidTemplate(template, vars) {\n var result = template;\n if (vars) {\n for (var v in vars) {\n var liquidVarRegexp = new RegExp('\\{\\{' + v + '\\}\\}', 'g');\n result = result.replace(liquidVarRegexp, vars[v]);\n }\n }\n return result;\n }\n liquid.renderLiquidTemplate = renderLiquidTemplate;\n})(liquid || (liquid = {}));\n//# sourceMappingURL=liquid.js.map","var DataRow = /** @class */ (function () {\n function DataRow(columns, values) {\n this.columns = columns;\n this.values = values;\n }\n DataRow.prototype.toArray = function () {\n return Array.from(this.values);\n };\n DataRow.prototype.size = function () {\n return this.values.length;\n };\n DataRow.prototype.getValue = function (colIdOrIndex) {\n var index;\n if (typeof colIdOrIndex === \"string\") {\n index = this.columns.getIndex(colIdOrIndex);\n if (index === undefined) {\n throw new RangeError(\"No column with id '\".concat(colIdOrIndex, \"'\"));\n }\n }\n else {\n index = colIdOrIndex;\n }\n if (index >= this.values.length)\n throw new RangeError(\"Out of range: \" + index);\n return this.values[index];\n };\n DataRow.prototype.setValue = function (colIdOrIndex, value) {\n var index;\n if (typeof colIdOrIndex === \"string\") {\n index = this.columns.getIndex(colIdOrIndex);\n if (index === undefined) {\n throw new RangeError(\"No column with id '\".concat(colIdOrIndex, \"'\"));\n }\n }\n else {\n index = colIdOrIndex;\n }\n if (index >= this.values.length)\n throw new RangeError(\"Out of range: \" + index);\n this.values[index] = value;\n };\n return DataRow;\n}());\nexport { DataRow };\n//# sourceMappingURL=data_row.js.map","import { DataColumnList } from './data_column';\nimport { DataRow } from './data_row';\nimport { DataType } from '../types/data_type';\nimport { utils } from '../utils/utils';\nvar EasyDataTable = /** @class */ (function () {\n function EasyDataTable(options) {\n this._chunkSize = 1000;\n this._elasticChunks = false;\n this.cachedRows = [];\n this.total = 0;\n this.loader = null;\n this.needTotal = true;\n this.isInMemory = false;\n options = options || {};\n this._chunkSize = options.chunkSize || this._chunkSize;\n this._elasticChunks = options.elasticChunks || this._elasticChunks;\n this.loader = options.loader;\n if (typeof options.inMemory !== 'undefined') {\n this.isInMemory = options.inMemory;\n }\n if (this.isInMemory) {\n this.needTotal = false;\n }\n this._columns = new DataColumnList();\n this.onUpdate = options.onUpdate;\n if (options.columns) {\n for (var _i = 0, _a = options.columns; _i < _a.length; _i++) {\n var colDesc = _a[_i];\n this._columns.add(colDesc);\n }\n }\n if (options.rows) {\n for (var _b = 0, _c = options.rows; _b < _c.length; _b++) {\n var rowData = _c[_b];\n var row = this.createRow(rowData);\n this.addRow(row);\n }\n }\n this.needTotal = !this._elasticChunks;\n }\n Object.defineProperty(EasyDataTable.prototype, \"columns\", {\n get: function () {\n return this._columns;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(EasyDataTable.prototype, \"chunkSize\", {\n get: function () {\n return this._chunkSize;\n },\n set: function (value) {\n this._chunkSize = value;\n this.total = 0;\n this.needTotal = !this.elasticChunks;\n this.cachedRows = [];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(EasyDataTable.prototype, \"elasticChunks\", {\n get: function () {\n return this._elasticChunks;\n },\n set: function (value) {\n this._elasticChunks = value;\n this.total = 0;\n this.needTotal = !this.elasticChunks;\n this.cachedRows = [];\n },\n enumerable: false,\n configurable: true\n });\n EasyDataTable.prototype.getRows = function (params) {\n var _this = this;\n var fromIndex = 0, count = this._chunkSize;\n if (params) {\n if ('page' in params) {\n fromIndex = params.pageSize * (params.page - 1);\n count = params.pageSize;\n }\n else {\n fromIndex = params.offset;\n count = params.limit;\n }\n }\n var endIndex = fromIndex + count; //the first index of the next page\n //if we don't calculate total on this request\n if (!this.needTotal && !this.elasticChunks) {\n if (fromIndex >= this.total) {\n return Promise.resolve([]);\n }\n if (endIndex > this.total) {\n endIndex = this.total;\n }\n }\n if (this.isInMemory && endIndex > this.cachedRows.length) {\n endIndex = this.cachedRows.length;\n }\n var allChunksCached = endIndex <= this.cachedRows.length;\n if (allChunksCached) {\n return Promise.resolve(this.cachedRows.slice(fromIndex, endIndex));\n }\n //if loader is not defined\n if (!this.loader) {\n throw \"Loader is not defined. Can't get the rows from \".concat(fromIndex, \" to \").concat(endIndex);\n }\n // we need total only for the first request\n var needTotal = this.needTotal;\n if (this.needTotal) {\n this.needTotal = false;\n }\n var offset = this.cachedRows.length;\n var limit = endIndex - offset;\n if (limit < this._chunkSize) {\n limit = this._chunkSize;\n }\n var resultPromise = this.loader.loadChunk({\n offset: offset,\n limit: limit,\n needTotal: needTotal\n })\n .then(function (result) {\n if (needTotal) {\n _this.total = result.total;\n }\n Array.prototype.push.apply(_this.cachedRows, result.table.getCachedRows());\n if (endIndex > _this.cachedRows.length) {\n endIndex = _this.cachedRows.length;\n }\n if (_this.elasticChunks) {\n var count_1 = result.table.getCachedCount();\n if (count_1 < limit) {\n _this.total = _this.cachedRows.length;\n }\n }\n _this.fireUpdated();\n return _this.cachedRows.slice(fromIndex, endIndex);\n });\n return resultPromise;\n };\n EasyDataTable.prototype.getRow = function (index) {\n return this.getRows({ offset: index, limit: 1 })\n .then(function (rows) { return rows.length > 0 ? rows[0] : null; });\n };\n EasyDataTable.prototype.getTotal = function () {\n return this.total;\n };\n EasyDataTable.prototype.setTotal = function (total) {\n this.total = total;\n this.needTotal = false;\n };\n EasyDataTable.prototype.getCachedCount = function () {\n return this.cachedRows.length;\n };\n EasyDataTable.prototype.clear = function () {\n this.columns.clear();\n this.cachedRows = [];\n this.total = 0;\n this.needTotal = !this._elasticChunks;\n this.fireUpdated();\n };\n EasyDataTable.prototype.createRow = function (dataOrRow) {\n var _this = this;\n var dateIdx = this._columns.getDateColumnIndexes();\n var values = new Array(this._columns.count);\n var getValue = dataOrRow instanceof DataRow\n ? function (colId) { return dataOrRow.getValue(colId); }\n : function (colId) { return dataOrRow[colId]; };\n if (dataOrRow) {\n this.columns.getItems().forEach(function (column) {\n var value = getValue(column.id);\n var index = _this.columns.getIndex(column.id);\n values[index] = (dateIdx.indexOf(index) >= 0)\n ? _this.mapDate(value, column.type)\n : value;\n });\n }\n return new DataRow(this._columns, values);\n };\n EasyDataTable.prototype.mapDate = function (value, dtype) {\n if (value) {\n var result = new Date(value);\n if (isNaN(result.getTime())\n && dtype == DataType.Time) {\n result = utils.strToTime(value);\n }\n return result;\n }\n return null;\n };\n EasyDataTable.prototype.addRow = function (rowOrValues) {\n var newRow;\n if (Array.isArray(rowOrValues)) {\n var values = rowOrValues;\n var dateIdx = this._columns.getDateColumnIndexes();\n if (dateIdx.length > 0) {\n for (var _i = 0, dateIdx_1 = dateIdx; _i < dateIdx_1.length; _i++) {\n var idx = dateIdx_1[_i];\n if (values[idx]) {\n values[idx] = this.mapDate(values[idx], this._columns.get(idx).type);\n }\n }\n }\n newRow = new DataRow(this._columns, values);\n }\n else {\n newRow = this.createRow(rowOrValues);\n }\n this.cachedRows.push(newRow);\n var cachedTotal = this.getCachedCount();\n if (cachedTotal > this.total) {\n this.total = cachedTotal;\n }\n return newRow;\n };\n EasyDataTable.prototype.getCachedRows = function () {\n return this.cachedRows;\n };\n EasyDataTable.prototype.totalIsKnown = function () {\n if (this.elasticChunks) {\n var count = this.getCachedCount();\n return count === this.total;\n }\n return !this.needTotal;\n };\n EasyDataTable.prototype.fireUpdated = function () {\n if (this.onUpdate) {\n this.onUpdate(this);\n }\n };\n return EasyDataTable;\n}());\nexport { EasyDataTable };\n//# sourceMappingURL=easy_data_table.js.map","/**\n * EasyData representation of GUID.\n */\nvar EasyGuid = /** @class */ (function () {\n function EasyGuid() {\n }\n /**\n * Generates new GUID.\n * @returns The string representation of GUID.\n */\n EasyGuid.newGuid = function () {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n return EasyGuid;\n}());\nexport { EasyGuid };\n//# sourceMappingURL=easy_guid.js.map","import { EasyGuid } from '../utils/easy_guid';\n/**\n * The representation of event emitter.\n */\nvar EventEmitter = /** @class */ (function () {\n /**\n * The default constructor.\n * @param source The source.\n */\n function EventEmitter(source) {\n this.silentMode = 0;\n this.events = new Array();\n this.source = source;\n }\n /**\n * Subscries to the event.\n * @param eventType The event type.\n * @param callback The callback.\n * @returns The subscribtion ID.\n */\n EventEmitter.prototype.subscribe = function (eventType, callback) {\n var event = this.getEventRecByType(eventType);\n var eventCallback = {\n id: EasyGuid.newGuid(),\n callback: callback\n };\n if (event) {\n event.eventCallbacks.push(eventCallback);\n }\n else {\n event = {\n type: eventType,\n eventCallbacks: new Array(eventCallback)\n };\n this.events.push(event);\n }\n return eventCallback.id;\n };\n /**\n * Unsubsribes from the event.\n * @param eventType The event type.\n * @param callbackId The subscribtion ID.\n */\n EventEmitter.prototype.unsubscribe = function (eventType, callbackId) {\n var event = this.getEventRecByType(eventType);\n if (event) {\n var index = -1;\n for (index = 0; index < event.eventCallbacks.length; index++) {\n if (event.eventCallbacks[index].id === callbackId) {\n break;\n }\n }\n if (index >= 0) {\n event.eventCallbacks.splice(index, 1);\n }\n }\n };\n /**\n * Fires the event.\n * @param eventType The event type.\n * @param data The event data.\n * @param postpone The postpone.\n * @param force To fire force. If value is `true`, ignores silent mode.\n */\n EventEmitter.prototype.fire = function (eventType, data, postpone, force) {\n if (postpone === void 0) { postpone = 0; }\n if (force === void 0) { force = false; }\n if (this.silentMode && !force) {\n return;\n }\n var eventRec = this.getEventRecByType(eventType);\n if (eventRec) {\n var eqevent_1 = {\n type: eventType,\n source: this.source,\n data: data\n };\n var emitAllFunc = function () {\n for (var _i = 0, _a = eventRec.eventCallbacks; _i < _a.length; _i++) {\n var callback = _a[_i];\n callback.callback(eqevent_1);\n }\n };\n if (postpone > 0) {\n setTimeout(emitAllFunc, postpone);\n }\n else {\n emitAllFunc();\n }\n }\n };\n /**\n * Enters to silent mode.\n */\n EventEmitter.prototype.enterSilentMode = function () {\n this.silentMode++;\n };\n /**\n * Exits from silent mode.\n */\n EventEmitter.prototype.exitSilentMode = function () {\n if (this.silentMode) {\n this.silentMode--;\n }\n };\n /**\n * Checks if emitter is in silent mode.\n * @return `true`, if silent mode is enable.\n */\n EventEmitter.prototype.isSilent = function () {\n return this.silentMode > 0;\n };\n EventEmitter.prototype.getEventRecByType = function (eventType) {\n for (var _i = 0, _a = this.events; _i < _a.length; _i++) {\n var event_1 = _a[_i];\n if (event_1.type == eventType) {\n return event_1;\n }\n }\n return null;\n };\n return EventEmitter;\n}());\nexport { EventEmitter };\n//# sourceMappingURL=event_emitter.js.map","import { i18n } from './i18n';\ni18n.resetLocales();\n//# sourceMappingURL=load_default_locale_settings.js.map","//types\nexport * from './types/data_type';\nexport * from './types/entity_attr_kind';\nexport * from './types/editor_tag';\n//http\nexport * from './http/http_method';\nexport * from './http/http_request';\nexport * from './http/http_client';\n//meta data dto\nexport * from './meta/dto/meta_data_dto';\nexport * from './meta/dto/meta_entity_dto';\nexport * from './meta/dto/value_editor_dto';\n//meta data\nexport * from './meta/meta_data';\nexport * from './meta/meta_entity';\nexport * from './meta/value_editor';\n//data\nexport * from './data/aggr_structures';\nexport * from './data/aggr_settings';\nexport * from './data/data_column';\nexport * from './data/data_loader';\nexport * from './data/data_row';\nexport * from './data/easy_data_table';\n//event\nexport * from './event/event_emitter';\n//i18n\nexport * from './i18n/i18n';\n//utils\nexport * from './utils/easy_guid';\nexport * from './utils/string_utils';\nexport * from './utils/utils';\nexport * from './utils/liquid';\nimport './i18n/load_default_locale_settings';\nif (typeof Object.values !== 'function') {\n Object.values = function (obj) {\n return Object.keys(obj).map(function (key) { return obj[key]; });\n };\n}\nif (typeof Math.trunc !== 'function') {\n Math.trunc = function (x) {\n if (isNaN(x)) {\n return NaN;\n }\n if (x > 0) {\n return Math.floor(x);\n }\n return Math.ceil(x);\n };\n}\n//# sourceMappingURL=public_api.js.map","import { browserUtils } from './browser_utils';\n/**\n * Wraps all the elements inside \"parent\" by \"wrapper\" element\n * @param parent The element to add wrapper to.\n * @param wrapper The element that will wrap child elements.\n */\nexport function wrapInner(parent, wrapper) {\n parent.appendChild(wrapper);\n while (parent.firstChild !== wrapper) {\n wrapper.appendChild(parent.firstChild);\n }\n}\n/**\n * Creates ands adds a new [[HTMLElement]] to \"parent\"\n * @param parent The element to add new element to.\n * @param tag Html tag of the new element.\n * @param options The options. In particular, options.cssClass sets the new element class.\n * @returns New element.\n */\nexport function addElement(parent, tag, options) {\n var element = document.createElement(tag);\n var opts = options || {};\n if (opts.cssClass) {\n element.className = opts.cssClass;\n }\n parent.appendChild(element);\n return element;\n}\n/**\n * Adds css class to the html element.\n * @param element The element to add css class to.\n * @param className The name of the css class to be added.\n */\nexport function addCssClass(element, className) {\n element.className = (element.className)\n ? element.className + ' ' + className\n : className;\n}\n/**\n * Hides the html element.\n * @param element The element to be hidden.\n */\nexport function hideElement(element) {\n element.style.display = 'none';\n}\n/**\n * Shows the html element.\n * @param element The element to be shown.\n * @param display The value of \"display\" style to be set. Default value is \"block\".\n */\nexport function showElement(element, display) {\n if (!display) {\n display = '';\n }\n element.style.display = display;\n}\n/**\n * Hides the \"first\" element and shows the \"second\".\n * @param first The element to be hidden.\n * @param second The element to be shown.\n * @param options The options. The following options are applied:\n * - display - the value of \"display\" style to be set. Default value is \"block\"\n * - duration - the duration of fading in and out\n * - complete - the callback to be called when toggle is complete\n */\nexport function toggleVisibility(first, second, options) {\n if (!options) {\n options = {};\n }\n if (!options.display) {\n options.display = '';\n }\n if (!options.duration) {\n options.duration = 200;\n }\n //TODO: later we need to make it fading in and out\n hideElement(first);\n showElement(second, options.display);\n if (options.complete) {\n options.complete();\n }\n}\n/**\n * Checks if element is visible\n * @param element The element to check.\n * @returns `true` if visible, otherwise - `false`.\n */\nexport function isVisible(element) {\n return element.style.display != 'none'\n && element.offsetWidth != 0\n && element.offsetHeight != 0;\n}\nexport function createBrowserEvent(eventName) {\n var event;\n if (typeof (Event) === 'function') {\n event = new Event(eventName);\n }\n else {\n event = document.createEvent('Event');\n event.initEvent(eventName, true, true);\n }\n return event;\n}\nexport function getViewportSize() {\n var width = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\n var height = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);\n return {\n width: width,\n height: height\n };\n}\nexport function getDocSize() {\n if (browserUtils.IsIE())\n return getWinSize();\n var width = Math.max(document.documentElement.clientWidth, document.body.clientWidth || 0);\n var height = Math.max(document.documentElement.clientHeight, document.body.clientHeight || 0);\n return {\n width: width,\n height: height\n };\n}\nexport function getScrollPos() {\n var body = document.body;\n var docElem = document.documentElement;\n return {\n top: window.pageYOffset || docElem.scrollTop || body.scrollTop,\n left: window.pageXOffset || docElem.scrollLeft || body.scrollLeft\n };\n}\nexport function getElementAbsolutePos(element) {\n var res = { x: 0, y: 0 };\n if (element !== null) {\n var position = offset(element);\n res = { x: position.left, y: position.top };\n }\n return res;\n}\nfunction offset(element) {\n var defaultBoundingClientRect = { top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 };\n var box;\n try {\n box = element.getBoundingClientRect();\n }\n catch (_a) {\n box = defaultBoundingClientRect;\n }\n var body = document.body;\n var docElem = document.documentElement;\n var scollPos = getScrollPos();\n var scrollTop = scollPos.top;\n var scrollLeft = scollPos.left;\n var clientTop = docElem.clientTop || body.clientTop || 0;\n var clientLeft = docElem.clientLeft || body.clientLeft || 0;\n var top = box.top + scrollTop - clientTop;\n var left = box.left + scrollLeft - clientLeft;\n return { top: Math.round(top), left: Math.round(left) };\n}\nexport function getWinSize() {\n return {\n width: window.innerWidth,\n height: window.innerHeight\n };\n}\nexport function slideDown(target, duration, callback) {\n target.style.removeProperty('display');\n var display = window.getComputedStyle(target).display;\n if (display === 'none')\n display = 'block';\n target.style.display = display;\n var height = target.offsetHeight;\n target.style.overflow = 'hidden';\n target.style.height = 0 + 'px';\n target.style.paddingTop = 0 + 'px';\n target.style.paddingBottom = 0 + 'px';\n target.style.marginTop = 0 + 'px';\n target.style.marginBottom = 0 + 'px';\n target.offsetHeight;\n target.style.boxSizing = 'border-box';\n target.style.transitionProperty = \"height, margin, padding\";\n target.style.transitionDuration = duration + 'ms';\n target.style.height = height + 'px';\n target.style.removeProperty('padding-top');\n target.style.removeProperty('padding-bottom');\n target.style.removeProperty('margin-top');\n target.style.removeProperty('margin-bottom');\n window.setTimeout(function () {\n target.style.removeProperty('height');\n target.style.removeProperty('overflow');\n target.style.removeProperty('transition-duration');\n target.style.removeProperty('transition-property');\n target.style.removeProperty('box-sizing');\n if (callback) {\n callback();\n }\n }, duration);\n}\nexport function slideUp(target, duration, callback) {\n target.style.transitionProperty = 'height, margin, padding';\n target.style.transitionDuration = duration + 'ms';\n target.style.boxSizing = 'border-box';\n target.style.height = target.offsetHeight + 'px';\n target.offsetHeight;\n target.style.overflow = 'hidden';\n target.style.height = 0 + 'px';\n target.style.paddingTop = 0 + 'px';\n target.style.paddingBottom = 0 + 'px';\n target.style.marginTop = 0 + 'px';\n target.style.marginBottom = 0 + 'px';\n window.setTimeout(function () {\n target.style.display = 'none';\n target.style.removeProperty('height');\n target.style.removeProperty('padding-top');\n target.style.removeProperty('padding-bottom');\n target.style.removeProperty('margin-top');\n target.style.removeProperty('margin-bottom');\n target.style.removeProperty('overflow');\n target.style.removeProperty('transition-duration');\n target.style.removeProperty('transition-property');\n target.style.removeProperty('box-sizing');\n if (callback) {\n callback();\n }\n }, duration);\n}\nexport var eqCssPrefix = 'eqjs';\nexport var eqCssMobile = 'eqjs-mobile';\n//# sourceMappingURL=ui-utils.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { mask } from './mask';\nvar DomElementBuilder = /** @class */ (function () {\n function DomElementBuilder(tag, parent) {\n if (typeof tag === \"string\") {\n this.element = document.createElement(tag);\n }\n else {\n this.element = tag;\n }\n if (parent && this.element.parentElement !== parent) {\n parent.appendChild(this.element);\n }\n }\n DomElementBuilder.prototype.addChild = function (tag, childBuilder) {\n var builder = domel(tag, this.element);\n if (childBuilder) {\n childBuilder(builder);\n }\n return this;\n };\n DomElementBuilder.prototype.addChildElement = function (element) {\n if (element) {\n this.element.appendChild(element);\n }\n return this;\n };\n DomElementBuilder.prototype.attr = function (attrId, attrValue) {\n this.element.setAttribute(attrId, attrValue);\n return this;\n };\n DomElementBuilder.prototype.id = function (value) {\n return this.attr(\"id\", value);\n };\n DomElementBuilder.prototype.focus = function () {\n this.element.focus();\n return this;\n };\n DomElementBuilder.prototype.title = function (value) {\n return this.attr('title', value);\n };\n DomElementBuilder.prototype.data = function (dataId, dataValue) {\n if (dataValue === void 0) { dataValue = null; }\n if (dataValue === null) {\n this.element.removeAttribute('data-' + dataId);\n return this;\n }\n else {\n return this.attr('data-' + dataId, dataValue);\n }\n };\n DomElementBuilder.prototype.show = function () {\n return this.removeStyle('display');\n };\n DomElementBuilder.prototype.hide = function (toHide) {\n if (toHide === void 0) { toHide = true; }\n return (toHide) ? this.setStyle('display', 'none') : this;\n };\n DomElementBuilder.prototype.visible = function (isVisible) {\n if (isVisible === void 0) { isVisible = true; }\n return isVisible ? this.setStyle('visibility', 'visible') : this.setStyle('visibility', 'hidden');\n };\n DomElementBuilder.prototype.isVisible = function () {\n return !!(this.element.offsetWidth || this.element.offsetHeight || this.element.getClientRects().length);\n };\n DomElementBuilder.prototype.addClass = function (className) {\n var classNames = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n classNames[_i - 1] = arguments[_i];\n }\n if (className) {\n var fullList = __spreadArray(__spreadArray([], className.trim().split(\" \"), true), classNames, true);\n for (var i = 0; i < fullList.length; i++)\n this.element.classList.add(fullList[i]);\n }\n return this;\n };\n DomElementBuilder.prototype.removeClass = function (className) {\n var classNames = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n classNames[_i - 1] = arguments[_i];\n }\n if (className) {\n var fullList = __spreadArray(__spreadArray([], className.trim().split(\" \"), true), classNames, true);\n for (var i = 0; i < fullList.length; i++)\n this.element.classList.remove(fullList[i]);\n }\n return this;\n };\n DomElementBuilder.prototype.toggleClass = function (className, force) {\n if (force === void 0) { force = undefined; }\n if (className) {\n this.element.classList.toggle(className, force);\n }\n return this;\n };\n DomElementBuilder.prototype.on = function (eventType, listener) {\n var eventTypes = eventType.split(' ');\n for (var i = 0; i < eventTypes.length; i++) {\n this.element.addEventListener(eventTypes[i], listener);\n }\n return this;\n };\n DomElementBuilder.prototype.off = function (eventType, listener) {\n var eventTypes = eventType.split(' ');\n for (var i = 0; i < eventTypes.length; i++) {\n this.element.removeEventListener(eventTypes[i], listener);\n }\n return this;\n };\n DomElementBuilder.prototype.setStyle = function (styleId, styleValue) {\n this.element.style.setProperty(styleId, styleValue);\n return this;\n };\n DomElementBuilder.prototype.removeStyle = function (styleId) {\n this.element.style.removeProperty(styleId);\n return this;\n };\n DomElementBuilder.prototype.text = function (text) {\n this.element.innerText = text;\n return this;\n };\n DomElementBuilder.prototype.html = function (html) {\n this.element.innerHTML = html;\n return this;\n };\n DomElementBuilder.prototype.clear = function () {\n var oldElem = this.element;\n this.element = document.createElement(this.element.tagName);\n oldElem.replaceWith(this.element);\n };\n DomElementBuilder.prototype.addText = function (text) {\n var textEl = document.createTextNode(text);\n this.element.appendChild(textEl);\n return this;\n };\n DomElementBuilder.prototype.addHtml = function (html) {\n this.element.innerHTML += html;\n return this;\n };\n DomElementBuilder.prototype.toDOM = function () {\n return this.element;\n };\n DomElementBuilder.prototype.appendTo = function (parent) {\n if (parent) {\n parent.appendChild(this.element);\n }\n return this;\n };\n return DomElementBuilder;\n}());\nexport { DomElementBuilder };\nvar DomTextAreaElementBuilder = /** @class */ (function (_super) {\n __extends(DomTextAreaElementBuilder, _super);\n function DomTextAreaElementBuilder(element, parent) {\n var _this = this;\n if (element) {\n _this = _super.call(this, element, parent) || this;\n }\n else {\n _this = _super.call(this, \"textarea\", parent) || this;\n }\n return _this;\n }\n DomTextAreaElementBuilder.prototype.name = function (value) {\n this.element.name = value;\n return this;\n };\n DomTextAreaElementBuilder.prototype.rows = function (rows) {\n this.element.rows = rows;\n return this;\n };\n DomTextAreaElementBuilder.prototype.cols = function (cols) {\n this.element.cols = cols;\n return this;\n };\n DomTextAreaElementBuilder.prototype.value = function (value) {\n this.element.value = value;\n return this;\n };\n return DomTextAreaElementBuilder;\n}(DomElementBuilder));\nexport { DomTextAreaElementBuilder };\nvar DomInputElementBuilder = /** @class */ (function (_super) {\n __extends(DomInputElementBuilder, _super);\n function DomInputElementBuilder(element, parent) {\n var _this = this;\n if (element) {\n _this = _super.call(this, element, parent) || this;\n }\n else {\n _this = _super.call(this, \"input\", parent) || this;\n }\n return _this;\n }\n DomInputElementBuilder.prototype.name = function (value) {\n this.element.name = value;\n return this;\n };\n DomInputElementBuilder.prototype.type = function (value) {\n this.element.type = value;\n return this;\n };\n DomInputElementBuilder.prototype.size = function (value) {\n this.element.size = value;\n return this;\n };\n DomInputElementBuilder.prototype.value = function (value) {\n if (value instanceof Date) {\n this.element.valueAsDate = value;\n }\n else if (typeof value === \"number\") {\n this.element.valueAsNumber = value;\n }\n else {\n this.element.value = value;\n }\n return this;\n };\n DomInputElementBuilder.prototype.mask = function (maskPattern) {\n mask(this.element, maskPattern);\n return this;\n };\n return DomInputElementBuilder;\n}(DomElementBuilder));\nexport { DomInputElementBuilder };\nvar DomSelectElementBuilder = /** @class */ (function (_super) {\n __extends(DomSelectElementBuilder, _super);\n function DomSelectElementBuilder(element, parent) {\n var _this = this;\n if (element) {\n _this = _super.call(this, element, parent) || this;\n }\n else {\n _this = _super.call(this, \"select\", parent) || this;\n }\n return _this;\n }\n DomSelectElementBuilder.prototype.addOption = function (value) {\n var option = document.createElement('option');\n if (typeof value === \"string\") {\n option.value = value;\n option.innerHTML = value;\n }\n else {\n option.value = value.value;\n option.innerHTML = value.title || value.value;\n option.selected = value.selected || false;\n }\n this.element.appendChild(option);\n return this;\n };\n DomSelectElementBuilder.prototype.value = function (value) {\n this.element.value = value;\n return this;\n };\n return DomSelectElementBuilder;\n}(DomElementBuilder));\nexport { DomSelectElementBuilder };\nexport function domel(tag, parent) {\n if (tag === \"div\" || tag instanceof HTMLDivElement) {\n return new DomElementBuilder(tag, parent);\n }\n if (tag === \"span\" || tag instanceof HTMLSpanElement) {\n return new DomElementBuilder(tag, parent);\n }\n else if (tag === \"a\" || tag instanceof HTMLAnchorElement) {\n return new DomElementBuilder(tag, parent);\n }\n else if (tag === \"button\" || tag instanceof HTMLButtonElement) {\n return new DomElementBuilder(tag, parent);\n }\n else if (tag === \"img\" || tag instanceof HTMLImageElement) {\n return new DomElementBuilder(tag, parent);\n }\n else if (tag === \"input\" || tag instanceof HTMLInputElement) {\n return new DomInputElementBuilder(tag instanceof HTMLInputElement ? tag : null, parent);\n }\n else if (tag === \"textarea\" || tag instanceof HTMLTextAreaElement) {\n return new DomTextAreaElementBuilder(tag instanceof HTMLTextAreaElement ? tag : null, parent);\n }\n else if (tag === \"select\" || tag instanceof HTMLSelectElement) {\n return new DomSelectElementBuilder(tag instanceof HTMLSelectElement ? tag : null, parent);\n }\n return new DomElementBuilder(tag, parent);\n}\n//# sourceMappingURL=dom_elem_builder.js.map","export function mask(input, maskPattern) {\n var d = { 9: '[0-9]', a: '[a-z]' };\n var mask = maskPattern.split('');\n var keyDownHandler = function (e) {\n // backspace key or delete key\n if (e.keyCode === 8 || e.keyCode === 46) {\n e.preventDefault();\n var mskd = [];\n var startSelection = input.selectionStart;\n if (startSelection == 0)\n return;\n var selection = startSelection;\n var onlyLodash = true;\n for (var index = mask.length - 1; index >= 0; index--) {\n var el = mask[index];\n if (d[el]) {\n var t = new RegExp(d[el], 'i').test(input.value.charAt(index));\n if (t && index != startSelection - 1) {\n onlyLodash = false;\n }\n if (index === startSelection - 1)\n selection--;\n mskd.push(t && index != startSelection - 1\n ? input.value.charAt(index)\n : '_');\n }\n else {\n if (index === selection - 1)\n selection--;\n if (startSelection - 1 === index)\n startSelection--;\n mskd.push(el);\n }\n }\n input.value = !onlyLodash ? mskd.reverse().join('') : '';\n input.selectionStart = input.selectionEnd = selection < 0 ? 0 : selection;\n var event_1 = document.createEvent('Event');\n event_1.initEvent('input', true, true);\n input.dispatchEvent(event_1);\n }\n };\n var keyPressHandler = function (e) {\n var char = String.fromCharCode(e.charCode);\n if (char) {\n e.preventDefault();\n var mskd_1 = [];\n var selectionStart_1 = input.selectionStart;\n var selection_1 = selectionStart_1;\n mask.forEach(function (el, index) {\n if (d[el]) {\n var ch = (index != selectionStart_1)\n ? input.value.charAt(index)\n : char;\n var t = new RegExp(d[el], 'i').test(ch);\n mskd_1.push(t ? ch : '_');\n if (t && selectionStart_1 === index)\n selection_1++;\n }\n else {\n mskd_1.push(el);\n if (selection_1 === index)\n selection_1++;\n if (selectionStart_1 === index)\n selectionStart_1++;\n }\n });\n input.value = mskd_1.join('');\n input.selectionStart = input.selectionEnd = selection_1;\n var event_2 = document.createEvent('Event');\n event_2.initEvent('input', true, true);\n input.dispatchEvent(event_2);\n }\n };\n var inputHandler = function (e) {\n if (e.type === 'focus' && input.value !== '')\n return;\n var mskd = [];\n var startSelection = input.selectionStart;\n mask.forEach(function (el, index) {\n if (d[el]) {\n var t = new RegExp(d[el], 'i').test(input.value.charAt(index));\n mskd.push(t ? input.value.charAt(index) : '_');\n }\n else {\n mskd.push(el);\n }\n });\n input.value = mskd.join('');\n input.selectionStart = input.selectionEnd = startSelection;\n };\n input.addEventListener('keydown', keyDownHandler);\n input.addEventListener('keypress', keyPressHandler);\n input.addEventListener('input', inputHandler);\n input.addEventListener('focus', inputHandler);\n}\n//# sourceMappingURL=mask.js.map","import { utils } from '@easydata/core';\nimport { getElementAbsolutePos } from './ui-utils';\nimport { domel } from '../utils/dom_elem_builder';\nvar touchEventIsDefined = typeof TouchEvent !== 'undefined';\nexport var DropEffect;\n(function (DropEffect) {\n DropEffect[\"None\"] = \"none\";\n DropEffect[\"Allow\"] = \"allow\";\n DropEffect[\"Forbid\"] = \"forbid\";\n})(DropEffect || (DropEffect = {}));\nvar EqDragEvent = /** @class */ (function () {\n function EqDragEvent(item, dragImage, sourceEvent) {\n this.dropEffect = DropEffect.Allow;\n this.pageX = 0;\n this.pageY = 0;\n this.item = item;\n this.dragImage = dragImage;\n this.data = item.data;\n this.sourceEvent = sourceEvent;\n if (sourceEvent && sourceEvent instanceof MouseEvent) {\n this.pageX = sourceEvent.pageX,\n this.pageY = sourceEvent.pageY;\n }\n if (sourceEvent && touchEventIsDefined && sourceEvent instanceof TouchEvent\n && sourceEvent.touches[0]) {\n this.pageX = sourceEvent.touches[0].pageX,\n this.pageY = sourceEvent.touches[0].pageY;\n }\n }\n return EqDragEvent;\n}());\nexport { EqDragEvent };\nvar Position = /** @class */ (function () {\n function Position(ev) {\n if (ev && ev instanceof MouseEvent) {\n this.x = ev.pageX,\n this.y = ev.pageY;\n }\n if (ev && touchEventIsDefined && ev instanceof TouchEvent && ev.touches[0]) {\n this.x = ev.touches[0].pageX,\n this.y = ev.touches[0].pageY;\n }\n }\n return Position;\n}());\nvar DragManager = /** @class */ (function () {\n function DragManager() {\n this.delta = 5;\n this.draggableItem = null;\n this.dragImage = null;\n this.finishedSuccessfully = false;\n this.mouseDownPosition = null;\n this.containerDescriptors = [];\n this.containerDescriptorIndex = -1;\n this.dropEffect = DropEffect.None;\n this.classPrefix = 'eqjs-drop';\n this.DRAG_DISABLED_ATTR = 'drag-disabled';\n }\n DragManager.prototype.registerDraggableItem = function (descriptor) {\n var _this = this;\n var element = descriptor.element;\n if (!element) {\n throw Error(\"Element in draggle item is null or undefined\");\n }\n element.ondragstart = function () {\n return false;\n };\n var detectDragging = function (ev) {\n if (element.hasAttribute(_this.DRAG_DISABLED_ATTR)) {\n return;\n }\n ev.preventDefault();\n if (ev instanceof MouseEvent) {\n ev.stopPropagation();\n }\n var cursorPosition = new Position(ev);\n if (Math.abs(cursorPosition.x - _this.mouseDownPosition.x) > _this.delta\n || Math.abs(cursorPosition.y - _this.mouseDownPosition.y) > _this.delta) {\n startDragging(ev);\n }\n };\n var mouseMoveEventListener = function (ev) {\n _this.mouseMoveDragListener(ev);\n };\n var startDragging = function (ev) {\n ev.preventDefault();\n ev.stopPropagation();\n element.removeEventListener('mousemove', detectDragging);\n element.removeEventListener('touchmove', detectDragging);\n _this.finishedSuccessfully = false;\n if (descriptor.beforeDragStart)\n descriptor.beforeDragStart();\n _this.dragImage = domel('div')\n .setStyle('position', 'absolute')\n .setStyle('z-index', '65530')\n .toDOM();\n document.body.appendChild(_this.dragImage);\n _this.dragImage.appendChild(element.cloneNode(true));\n if (descriptor.renderer) {\n descriptor.renderer(_this.dragImage);\n }\n _this.dropEffect = DropEffect.None;\n _this.updateCusror(_this.dropEffect);\n _this.updateImageClass(_this.dropEffect);\n _this.draggableItem = {\n element: element,\n scope: descriptor.scope,\n data: descriptor.data\n };\n _this.updateDragItemPosition(ev);\n var event = new EqDragEvent(_this.draggableItem, _this.dragImage, ev);\n event.dropEffect = _this.dropEffect;\n if (descriptor.onDragStart) {\n descriptor.onDragStart(event);\n }\n if (_this.dropEffect !== event.dropEffect) {\n _this.dropEffect = event.dropEffect;\n _this.updateImageClass(_this.dropEffect);\n }\n document.addEventListener('mousemove', mouseMoveEventListener, true);\n document.addEventListener('touchmove', mouseMoveEventListener, true);\n };\n var mouseDownListener = function (ev) {\n if (touchEventIsDefined && ev instanceof TouchEvent) {\n ev.preventDefault();\n }\n _this.mouseDownPosition = new Position(ev);\n element.addEventListener('mousemove', detectDragging);\n element.addEventListener('touchmove', detectDragging);\n document.addEventListener('mouseup', mouseUpListener);\n document.addEventListener('touchend', mouseUpListener);\n };\n element.addEventListener('mousedown', mouseDownListener);\n element.addEventListener('touchstart', mouseDownListener);\n var mouseUpListener = function (ev) {\n _this.mouseDownPosition = null;\n element.removeEventListener('mousemove', detectDragging);\n element.removeEventListener('touchmove', detectDragging);\n document.removeEventListener('mousemove', mouseMoveEventListener, true);\n document.removeEventListener('touchmove', mouseMoveEventListener, true);\n if (_this.draggableItem) {\n endDraggind(ev);\n }\n };\n var endDraggind = function (ev) {\n try {\n if (_this.containerDescriptorIndex >= 0) {\n var dropContDesc = _this.containerDescriptors[_this.containerDescriptorIndex];\n var container = {\n element: dropContDesc.element,\n scopes: dropContDesc.scopes,\n data: dropContDesc.data\n };\n var event_1 = new EqDragEvent(_this.draggableItem, _this.dragImage, ev);\n try {\n if (container.scopes.indexOf(_this.draggableItem.scope) >= 0\n && _this.dropEffect === DropEffect.Allow) {\n _this.finishedSuccessfully = true;\n if (dropContDesc.onDrop) {\n dropContDesc.onDrop(container, event_1);\n }\n }\n }\n finally {\n if (dropContDesc.onDragLeave) {\n dropContDesc.onDragLeave(container, event_1);\n }\n }\n }\n }\n finally {\n try {\n var event_2 = new EqDragEvent(_this.draggableItem, _this.dragImage, ev);\n event_2.data.finishedSuccessfully = _this.finishedSuccessfully;\n if (descriptor.onDragEnd) {\n descriptor.onDragEnd(event_2);\n }\n }\n finally {\n _this.draggableItem = null;\n if (_this.dragImage && _this.dragImage.parentElement) {\n _this.dragImage.parentElement.removeChild(_this.dragImage);\n }\n _this.dragImage = null;\n _this.finishedSuccessfully = false;\n document.removeEventListener('mouseup', mouseUpListener);\n document.removeEventListener('touchend', mouseUpListener);\n }\n }\n };\n };\n DragManager.prototype.registerDropContainer = function (descriptor) {\n var element = descriptor.element;\n if (!element) {\n throw Error(\"Element in drop container is null or undefined\");\n }\n this.containerDescriptors.push(descriptor);\n };\n DragManager.prototype.removeDropContainer = function (descriptorOrSlot) {\n var descs = this.containerDescriptors\n .filter(function (desc) { return desc === descriptorOrSlot\n || desc.element == descriptorOrSlot; });\n if (descs) {\n for (var _i = 0, descs_1 = descs; _i < descs_1.length; _i++) {\n var desc = descs_1[_i];\n utils.removeArrayItem(this.containerDescriptors, desc);\n }\n }\n };\n DragManager.prototype.mouseMoveDragListener = function (ev) {\n if (ev instanceof MouseEvent) {\n ev.preventDefault();\n }\n ev.stopPropagation();\n this.updateDragItemPosition(ev);\n if (this.containerDescriptorIndex == -1) {\n for (var i = 0; i < this.containerDescriptors.length; i++) {\n var descriptor = this.containerDescriptors[i];\n if (this.detectDragEnterEvent(descriptor.element, ev)) {\n this.containerDescriptorIndex = i;\n break;\n }\n }\n if (this.containerDescriptorIndex >= 0) {\n this.dragEnterEvent(ev);\n }\n }\n else {\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\n if (this.detectDragLeaveEvent(descriptor.element, ev)) {\n this.dragLeaveEvent(ev);\n this.containerDescriptorIndex = -1;\n }\n }\n if (this.containerDescriptorIndex >= 0) {\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\n var container = {\n element: descriptor.element,\n scopes: descriptor.scopes,\n data: descriptor.data\n };\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\n var event_3 = new EqDragEvent(this.draggableItem, this.dragImage, ev);\n event_3.dropEffect = this.dropEffect;\n if (descriptor.onDragOver) {\n descriptor.onDragOver(container, event_3);\n }\n }\n }\n };\n DragManager.prototype.updateCusror = function (dropEffect) {\n switch (dropEffect) {\n case DropEffect.Allow:\n this.setCursorStyle(this.dragImage, 'grabbing');\n break;\n case DropEffect.Forbid:\n this.setCursorStyle(this.dragImage, 'no-drop');\n break;\n default:\n this.setCursorStyle(this.dragImage, 'grabbing');\n break;\n }\n };\n DragManager.prototype.updateImageClass = function (dropEffect) {\n this.dragImage.classList.remove(\"\".concat(this.classPrefix, \"-allow\"));\n this.dragImage.classList.remove(\"\".concat(this.classPrefix, \"-forbid\"));\n this.dragImage.classList.remove(\"\".concat(this.classPrefix, \"-none\"));\n switch (dropEffect) {\n case DropEffect.Allow:\n this.dragImage.classList.add(\"\".concat(this.classPrefix, \"-allow\"));\n break;\n case DropEffect.None:\n this.dragImage.classList.add(\"\".concat(this.classPrefix, \"-none\"));\n break;\n case DropEffect.Forbid:\n this.dragImage.classList.add(\"\".concat(this.classPrefix, \"-forbid\"));\n break;\n default:\n this.dragImage.classList.add(\"\".concat(this.classPrefix, \"-none\"));\n break;\n }\n };\n DragManager.prototype.setCursorStyle = function (element, cursor) {\n if (element) {\n element.style.cursor = cursor;\n for (var i = 0; i < element.children.length; i++) {\n this.setCursorStyle(element.children[i], cursor);\n }\n }\n };\n DragManager.prototype.updateDragItemPosition = function (ev) {\n if (this.dragImage) {\n var pos = new Position(ev);\n this.dragImage.style.top = (pos.y - this.dragImage.offsetHeight / 2) + 'px';\n this.dragImage.style.left = (pos.x - this.dragImage.offsetWidth / 2) + 'px';\n }\n };\n DragManager.prototype.dragEnterEvent = function (ev) {\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\n var container = {\n element: descriptor.element,\n scopes: descriptor.scopes,\n data: descriptor.data\n };\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\n var event_4 = new EqDragEvent(this.draggableItem, this.dragImage, ev);\n event_4.dropEffect = DropEffect.Allow;\n if (descriptor.onDragEnter) {\n descriptor.onDragEnter(container, event_4);\n }\n this.dropEffect = event_4.dropEffect;\n this.updateCusror(this.dropEffect);\n this.updateImageClass(this.dropEffect);\n }\n else {\n if (this.dropEffect !== DropEffect.Forbid) {\n this.dropEffect = DropEffect.None;\n this.updateCusror(this.dropEffect);\n this.updateImageClass(this.dropEffect);\n }\n }\n };\n DragManager.prototype.dragLeaveEvent = function (ev) {\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\n var container = {\n element: descriptor.element,\n scopes: descriptor.scopes,\n data: descriptor.data\n };\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\n var event_5 = new EqDragEvent(this.draggableItem, this.dragImage, ev);\n event_5.dropEffect = DropEffect.None;\n if (descriptor.onDragLeave) {\n descriptor.onDragLeave(container, event_5);\n }\n this.dropEffect = event_5.dropEffect;\n this.updateCusror(this.dropEffect);\n this.updateImageClass(this.dropEffect);\n }\n };\n DragManager.prototype.detectDragEnterEvent = function (container, ev) {\n var containerPos = getElementAbsolutePos(container);\n var pos = new Position(ev);\n if (pos.y < containerPos.y || pos.y > containerPos.y + container.offsetHeight) {\n return false;\n }\n if (pos.x < containerPos.x || pos.x > containerPos.x + container.offsetWidth) {\n return false;\n }\n return true;\n };\n DragManager.prototype.detectDragLeaveEvent = function (container, ev) {\n var containerPos = getElementAbsolutePos(container);\n var pos = new Position(ev);\n if (pos.y > containerPos.y && pos.y < containerPos.y + container.offsetHeight\n && pos.x > containerPos.x && pos.x < containerPos.x + container.offsetWidth) {\n return false;\n }\n return true;\n };\n return DragManager;\n}());\nexport { DragManager };\n//global variable\nexport var eqDragManager = new DragManager();\n//# sourceMappingURL=drag_manager.js.map","export var AutoResizeColumns;\n(function (AutoResizeColumns) {\n AutoResizeColumns[AutoResizeColumns[\"Always\"] = 0] = \"Always\";\n AutoResizeColumns[AutoResizeColumns[\"Once\"] = 1] = \"Once\";\n AutoResizeColumns[AutoResizeColumns[\"Never\"] = 2] = \"Never\";\n})(AutoResizeColumns || (AutoResizeColumns = {}));\n//# sourceMappingURL=easy_grid_options.js.map","import { i18n, DataType } from '@easydata/core';\nimport { GridColumnAlign } from './easy_grid_columns';\nvar cssPrefix = \"keg\";\nexport var DFMT_REGEX = /{0:(.*?)}/g;\nexport var CellRendererType;\n(function (CellRendererType) {\n CellRendererType[CellRendererType[\"STRING\"] = 1] = \"STRING\";\n CellRendererType[CellRendererType[\"NUMBER\"] = 2] = \"NUMBER\";\n CellRendererType[CellRendererType[\"DATETIME\"] = 3] = \"DATETIME\";\n CellRendererType[CellRendererType[\"BOOL\"] = 4] = \"BOOL\";\n})(CellRendererType || (CellRendererType = {}));\nvar StringCellRendererDefault = function (value, column, cellValueElement, rowElement) {\n var text = value ? value.toString().replace(/\\n/g, '\\u21B5 ') : '';\n cellValueElement.innerText = text;\n cellValueElement.title = text;\n if (column.align == GridColumnAlign.NONE) {\n cellValueElement.classList.add(\"\".concat(cssPrefix, \"-cell-value-align-left\"));\n }\n};\nvar NumberCellRendererDefault = function (value, column, cellValueElement, rowElement) {\n var strValue = (value || '').toString();\n if (typeof value == 'number') {\n if (column.dataColumn && column.dataColumn.displayFormat\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\n strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, function (_, $1) {\n return i18n.numberToStr(value, $1);\n });\n }\n else {\n strValue = value.toLocaleString();\n }\n }\n cellValueElement.innerText = strValue;\n cellValueElement.title = strValue;\n if (column.align == GridColumnAlign.NONE) {\n cellValueElement.classList.add(\"\".concat(cssPrefix, \"-cell-value-align-right\"));\n }\n};\nvar DateTimeCellRendererDefault = function (value, column, cellValueElement, rowElement) {\n var isDate = Object.prototype.toString.call(value) === '[object Date]';\n var strValue = (value || '').toString();\n if (isDate) {\n if (column.dataColumn && column.dataColumn.displayFormat\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\n strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, function (_, $1) {\n return i18n.dateTimeToStr(value, column.type, $1);\n });\n }\n else {\n var locale = i18n.getCurrentLocale();\n var timeOptions = { hour: 'numeric', minute: 'numeric', second: 'numeric' };\n switch (column.type) {\n case DataType.Date:\n strValue = value.toLocaleDateString(locale);\n break;\n case DataType.Time:\n strValue = value.toLocaleTimeString(locale, timeOptions);\n break;\n case DataType.DateTime:\n strValue = \"\".concat(value.toLocaleDateString(locale), \" \").concat(value.toLocaleTimeString(locale, timeOptions));\n break;\n }\n }\n }\n cellValueElement.innerText = strValue;\n cellValueElement.title = strValue;\n if (column.align == GridColumnAlign.NONE) {\n cellValueElement.classList.add(\"\".concat(cssPrefix, \"-cell-value-align-right\"));\n }\n};\nvar BoolCellRendererDefault = function (value, column, cellValueElement, rowElement) {\n if (column.dataColumn && column.dataColumn.displayFormat\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\n var strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, function (_, $1) {\n return i18n.booleanToStr(value, $1);\n });\n return StringCellRendererDefault(strValue, column, cellValueElement, rowElement);\n }\n else {\n cellValueElement.classList.add(\"\".concat(cssPrefix, \"-cell-value-bool\"));\n cellValueElement.classList.add(\"\".concat(cssPrefix, \"-\").concat(value ? 'cell-value-true' : 'cell-value-false'));\n }\n};\nvar GridCellRendererStore = /** @class */ (function () {\n function GridCellRendererStore(options) {\n this.renderers = {};\n this.defaultRenderers = {};\n this.registerRenderer('StringDefault', StringCellRendererDefault);\n this.setDefaultRenderer(CellRendererType.STRING, StringCellRendererDefault);\n this.registerRenderer('NumberDefault', NumberCellRendererDefault);\n this.setDefaultRenderer(CellRendererType.NUMBER, NumberCellRendererDefault);\n this.registerRenderer('DateTimeDefault', DateTimeCellRendererDefault);\n this.setDefaultRenderer(CellRendererType.DATETIME, DateTimeCellRendererDefault);\n this.registerRenderer('BoolDefault', BoolCellRendererDefault);\n this.setDefaultRenderer(CellRendererType.BOOL, BoolCellRendererDefault);\n }\n GridCellRendererStore.prototype.getDefaultRenderer = function (columnType) {\n var cellType = this.getCellType(columnType);\n return this.defaultRenderers[CellRendererType[cellType]];\n };\n GridCellRendererStore.prototype.getDefaultRendererByType = function (rendererType) {\n return this.defaultRenderers[CellRendererType[rendererType]];\n };\n GridCellRendererStore.prototype.setDefaultRenderer = function (cellType, renderer) {\n if (renderer) {\n this.defaultRenderers[CellRendererType[cellType]] = renderer;\n }\n };\n GridCellRendererStore.prototype.getRenderer = function (name) {\n return this.renderers[name];\n };\n GridCellRendererStore.prototype.registerRenderer = function (name, renderer) {\n this.renderers[name] = renderer;\n };\n GridCellRendererStore.prototype.getCellType = function (dataType) {\n switch (dataType) {\n case DataType.Autoinc:\n case DataType.Byte:\n case DataType.Word:\n case DataType.Currency:\n case DataType.Float:\n case DataType.Int32:\n case DataType.Int64:\n return CellRendererType.NUMBER;\n case DataType.Date:\n case DataType.DateTime:\n case DataType.Time:\n return CellRendererType.DATETIME;\n case DataType.Bool:\n return CellRendererType.BOOL;\n default:\n return CellRendererType.STRING;\n }\n };\n return GridCellRendererStore;\n}());\nexport { GridCellRendererStore };\n//# sourceMappingURL=easy_grid_cell_renderer.js.map","import { utils, ColumnAlignment } from '@easydata/core';\nimport { CellRendererType } from \"./easy_grid_cell_renderer\";\nvar DEFAULT_WIDTH_STRING = 250;\nvar ROW_NUM_WIDTH = 60;\nexport var GridColumnAlign;\n(function (GridColumnAlign) {\n GridColumnAlign[GridColumnAlign[\"NONE\"] = 1] = \"NONE\";\n GridColumnAlign[GridColumnAlign[\"LEFT\"] = 2] = \"LEFT\";\n GridColumnAlign[GridColumnAlign[\"CENTER\"] = 3] = \"CENTER\";\n GridColumnAlign[GridColumnAlign[\"RIGHT\"] = 4] = \"RIGHT\";\n})(GridColumnAlign || (GridColumnAlign = {}));\nfunction MapAlignment(alignment) {\n switch (alignment) {\n case ColumnAlignment.Left:\n return GridColumnAlign.LEFT;\n case ColumnAlignment.Center:\n return GridColumnAlign.CENTER;\n case ColumnAlignment.Right:\n return GridColumnAlign.RIGHT;\n default:\n return GridColumnAlign.NONE;\n }\n}\nvar GridColumn = /** @class */ (function () {\n function GridColumn(column, grid, isRowNum) {\n if (isRowNum === void 0) { isRowNum = false; }\n this._label = null;\n this._description = null;\n //public left: number;\n this.align = GridColumnAlign.NONE;\n this.isVisible = true;\n this.isRowNum = false;\n this.dataColumn = column;\n this.grid = grid;\n var widthOptions = grid.options.columnWidths || {};\n if (column) {\n if (column.style.alignment) {\n this.align = MapAlignment(column.style.alignment);\n }\n this.width = (widthOptions && widthOptions[this.type]) ? widthOptions[this.type].default : DEFAULT_WIDTH_STRING;\n this.cellRenderer = this.grid.cellRendererStore.getDefaultRenderer(column.type);\n this._description = column.description;\n }\n else if (isRowNum) {\n this.isRowNum = true;\n this.width = (widthOptions && widthOptions.rowNumColumn) ? widthOptions.rowNumColumn.default : ROW_NUM_WIDTH;\n this._label = '';\n this.cellRenderer = this.grid.cellRendererStore.getDefaultRendererByType(CellRendererType.NUMBER);\n }\n if (grid && grid.options && grid.options.onGetCellRenderer) {\n this.cellRenderer = grid.options.onGetCellRenderer(this, this.cellRenderer) || this.cellRenderer;\n }\n }\n Object.defineProperty(GridColumn.prototype, \"label\", {\n get: function () {\n return this._label ? this._label : this.isRowNum ? '' : this.dataColumn.label;\n },\n set: function (value) {\n this._label = this.label;\n },\n enumerable: false,\n configurable: true\n });\n ;\n Object.defineProperty(GridColumn.prototype, \"description\", {\n /** Get column description. */\n get: function () {\n return this._description;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(GridColumn.prototype, \"type\", {\n get: function () {\n return this.dataColumn ? this.dataColumn.type : null;\n },\n enumerable: false,\n configurable: true\n });\n return GridColumn;\n}());\nexport { GridColumn };\nvar GridColumnList = /** @class */ (function () {\n function GridColumnList(columnList, grid) {\n this.items = [];\n this.grid = grid;\n this.sync(columnList);\n }\n GridColumnList.prototype.sync = function (columnList, hasRowNumCol) {\n if (hasRowNumCol === void 0) { hasRowNumCol = true; }\n this.clear();\n var rowNumCol = new GridColumn(null, this.grid, true);\n this.add(rowNumCol);\n if (!hasRowNumCol) {\n rowNumCol.isVisible = false;\n }\n if (columnList) {\n for (var _i = 0, _a = columnList.getItems(); _i < _a.length; _i++) {\n var column = _a[_i];\n var col = new GridColumn(column, this.grid);\n if (this.grid.options.onSyncGridColumn) {\n this.grid.options.onSyncGridColumn(col);\n }\n this.add(col);\n }\n }\n };\n Object.defineProperty(GridColumnList.prototype, \"count\", {\n get: function () {\n return this.items.length;\n },\n enumerable: false,\n configurable: true\n });\n GridColumnList.prototype.add = function (col) {\n var index = this.items.length;\n this.items.push(col);\n return index;\n };\n GridColumnList.prototype.put = function (index, col) {\n if (index >= 0 && index < this.items.length) {\n this.items[index] = col;\n }\n };\n GridColumnList.prototype.move = function (col, newIndex) {\n var oldIndex = this.items.indexOf(col);\n if (oldIndex >= 0 && oldIndex != newIndex)\n utils.moveArrayItem(this.items, oldIndex, newIndex);\n };\n GridColumnList.prototype.get = function (index) {\n if (index >= 0 && index < this.items.length) {\n return this.items[index];\n }\n else {\n return null;\n }\n };\n // public getIndex(name: string) : number {\n // return this.mapper[name];\n // }\n GridColumnList.prototype.getItems = function () {\n return this.items;\n };\n GridColumnList.prototype.removeAt = function (index) {\n var col = this.get(index);\n this.items.splice(index, 1);\n //delete this.mapper[col.name];\n };\n GridColumnList.prototype.clear = function () {\n this.items = [];\n //this.mapper = {};\n };\n return GridColumnList;\n}());\nexport { GridColumnList };\n//# sourceMappingURL=easy_grid_columns.js.map","export var DialogFooterAlignment;\n(function (DialogFooterAlignment) {\n DialogFooterAlignment[DialogFooterAlignment[\"Left\"] = 1] = \"Left\";\n DialogFooterAlignment[DialogFooterAlignment[\"Center\"] = 2] = \"Center\";\n DialogFooterAlignment[DialogFooterAlignment[\"Right\"] = 3] = \"Right\";\n})(DialogFooterAlignment || (DialogFooterAlignment = {}));\n//# sourceMappingURL=dialog_service.js.map","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { EventEmitter, DataRow, utils, i18n, DataType } from '@easydata/core';\nimport { eqDragManager, DropEffect } from '../utils/drag_manager';\nimport { domel } from '../utils/dom_elem_builder';\nimport { getElementAbsolutePos, eqCssPrefix } from '../utils/ui-utils';\nimport { AutoResizeColumns } from './easy_grid_options';\nimport { GridColumnList, GridColumnAlign } from './easy_grid_columns';\nimport { GridCellRendererStore } from './easy_grid_cell_renderer';\nvar DEFAULT_ROW_HEIGHT = 36;\nvar DEFAULT_ROW_COUNT = 15;\n/** Represents a grid widget with columns rows, paging, custom rendering and more */\nvar EasyGrid = /** @class */ (function () {\n /** Creates and initializes all internal properties of the grid object */\n function EasyGrid(options) {\n this.cssPrefix = \"keg\";\n this.pagination = { page: 1, pageSize: 30, total: 0 };\n this.paginationOptions = {\n maxButtonCount: 10,\n useBootstrap: false //true\n };\n this.defaultDataGridOptions = {\n slot: null,\n dataTable: null,\n fixHeightOnFirstRender: false,\n syncGridColumns: true,\n useRowNumeration: true,\n allowDragDrop: false,\n aggregates: {\n settings: null,\n calculator: null\n },\n paging: {\n enabled: true,\n pageSize: 30,\n pageSizeItems: [20, 30, 50, 100, 200]\n },\n columnWidths: {\n autoResize: AutoResizeColumns.Always,\n stringColumns: {\n min: 100,\n max: 500,\n default: 250\n },\n numberColumns: {\n min: 60,\n default: 120\n },\n boolColumns: {\n min: 50,\n default: 80\n },\n dateColumns: {\n min: 80,\n default: 200\n },\n otherColumns: {\n min: 100,\n max: 500,\n default: 250\n },\n rowNumColumn: {\n min: 40,\n default: 60\n }\n },\n showPlusButton: false,\n viewportRowsCount: null,\n showActiveRow: true\n };\n this.rowsOnPagePromise = null;\n this.containerInitialHeight = 0;\n this.firstRender = true;\n this.prevRowTotals = null;\n this.landingIndex = -1;\n this.landingSlot = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-col-landing-slot\"))\n .addChildElement(domel('div')\n .toDOM())\n .toDOM();\n this._activeRowIndex = -1;\n if (options && options.paging) {\n options.paging = utils.assign(this.defaultDataGridOptions.paging, options.paging);\n }\n this.options = this.mergeOptions(options);\n this.processColumnWidthsOptions();\n if (!this.options.slot)\n throw Error('\"slot\" parameter is required to initialize EasyDataGrid');\n if (!this.options.dataTable)\n throw Error('\"dataTable\" parameter is required to initialize EasyDataGrid');\n this.dataTable = options.dataTable;\n this.eventEmitter = new EventEmitter(this);\n this.cellRendererStore = new GridCellRendererStore(options);\n this.columns = new GridColumnList(this.dataTable.columns, this);\n this.setSlot(this.options.slot);\n this.init(this.options);\n }\n EasyGrid.prototype.mergeOptions = function (options) {\n var colWidthOptions = utils.assignDeep({}, this.defaultDataGridOptions.columnWidths, options.columnWidths);\n var pagingOptions = utils.assignDeep({}, this.defaultDataGridOptions.paging, options.paging);\n var result = utils.assign({}, this.defaultDataGridOptions, options);\n result.columnWidths = colWidthOptions;\n result.paging = pagingOptions;\n return result;\n };\n EasyGrid.prototype.processColumnWidthsOptions = function () {\n var widthOptions = this.options.columnWidths;\n if (!widthOptions)\n return;\n //string columns\n utils.getStringDataTypes().forEach(function (dataType) {\n widthOptions[dataType] = __assign(__assign({}, widthOptions.stringColumns), widthOptions[dataType]);\n });\n //numeric columns\n utils.getNumericDataTypes().forEach(function (dataType) {\n widthOptions[dataType] = __assign(__assign({}, widthOptions.numberColumns), widthOptions[dataType]);\n });\n //bool columns\n widthOptions[DataType.Bool] = __assign(__assign({}, widthOptions.boolColumns), widthOptions[DataType.Bool]);\n //date columns\n utils.getDateDataTypes().forEach(function (dataType) {\n widthOptions[dataType] = __assign(__assign({}, widthOptions.dateColumns), widthOptions[dataType]);\n });\n //other columns\n var knownTypes = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], utils.getStringDataTypes(), true), utils.getNumericDataTypes(), true), utils.getDateDataTypes(), true), [\n DataType.Bool\n ], false);\n utils.getAllDataTypes().forEach(function (dataType) {\n if (!(dataType in knownTypes)) {\n widthOptions[dataType] = __assign(__assign({}, widthOptions.otherColumns), widthOptions[dataType]);\n }\n });\n widthOptions[DataType.Unknown] = widthOptions.otherColumns;\n };\n EasyGrid.prototype.setSlot = function (slot) {\n if (typeof slot === 'string') {\n if (slot.length) {\n if (slot[0] === '#') {\n this.slot = document.getElementById(slot.substring(1));\n }\n else if (slot[0] === '.') {\n var result = document.getElementsByClassName(slot.substring(1));\n if (result.length)\n this.slot = result[0];\n }\n else {\n throw Error('Unrecognized slot parameter ' +\n '(Must be id, class or HTMLElement): ' + slot);\n }\n }\n }\n else {\n this.slot = slot;\n }\n };\n /** Initializes grid widget according to the options passed in the parameter */\n EasyGrid.prototype.init = function (options) {\n var _this = this;\n if (options.onInit) {\n this.addEventListener('init', options.onInit);\n }\n if (options.onRowClick) {\n this.addEventListener('rowClick', options.onRowClick);\n }\n if (options.onRowDbClick) {\n this.addEventListener('rowDbClick', options.onRowDbClick);\n }\n if (options.onPlusButtonClick) {\n this.addEventListener('plusButtonClick', options.onPlusButtonClick);\n }\n if (options.onColumnChanged) {\n this.addEventListener('columnChanged', options.onColumnChanged);\n }\n if (options.onColumnDeleted) {\n this.addEventListener('columnDeleted', options.onColumnDeleted);\n }\n if (options.onColumnMoved) {\n this.addEventListener('columnMoved', options.onColumnMoved);\n }\n if (options.onPageChanged) {\n this.addEventListener('pageChanged', options.onPageChanged);\n }\n if (options.onActiveRowChanged) {\n this.addEventListener('activeRowChanged', options.onActiveRowChanged);\n }\n this.addEventListener('pageChanged', function (ev) { return _this.activeRowIndex = -1; });\n utils.assignDeep(this.paginationOptions, options.pagination);\n this.pagination.pageSize = this.options.paging.pageSize\n || this.pagination.pageSize;\n if (this.options.allowDragDrop) {\n eqDragManager.registerDropContainer({\n element: this.slot,\n scopes: [\"gridColumnMove\"],\n onDragEnter: function (_, ev) {\n _this.slot.classList.add(\"\".concat(eqCssPrefix, \"-drophover\"));\n _this.showLandingSlot(ev.pageX, ev.pageY);\n },\n onDragOver: function (_, ev) {\n _this.showLandingSlot(ev.pageX, ev.pageY);\n },\n onDragLeave: function (_, ev) {\n ev.dropEffect = DropEffect.Forbid;\n _this.slot.classList.remove(\"\".concat(eqCssPrefix, \"-drophover\"));\n _this.hideLandingSlot();\n },\n onDrop: function (_, ev) {\n _this.dataTable.columns.move(ev.data.column, _this.landingIndex);\n _this.refresh();\n _this.fireEvent({\n type: 'columnMoved',\n columnId: ev.data.column.id,\n newIndex: _this.landingIndex\n });\n }\n });\n }\n this.refresh();\n this.fireEvent('init');\n };\n /** Fires a grid event. You can pass either an event type\n * (like 'init', 'rowClick', 'pageChanged', etc )\n * or a ready-to-use grid event object\n * */\n EasyGrid.prototype.fireEvent = function (event) {\n if (typeof event === \"string\") {\n this.eventEmitter.fire(event);\n }\n else {\n this.eventEmitter.fire(event.type, event);\n }\n };\n /** Allows to set the data (represented by a EasyDataTable object)\n * or to replace the existing one associated with the grid */\n EasyGrid.prototype.setData = function (data) {\n this.dataTable = data;\n this.clear();\n this.refresh();\n };\n /** Returns the EasyDataTable object associated with the grid via `setData()` call */\n EasyGrid.prototype.getData = function () {\n return this.dataTable;\n };\n /** Gets the list of grid columns */\n EasyGrid.prototype.getColumns = function () {\n return this.columns;\n };\n /** This function is called when the grid is destroyed */\n EasyGrid.prototype.destroy = function () {\n this.slot.innerHTML = \"\";\n };\n /** Clears the current DOM object and re-renders everything from the scratch */\n EasyGrid.prototype.refresh = function () {\n this.clearDOM();\n this.render();\n };\n EasyGrid.prototype.clearDOM = function () {\n this.slot.innerHTML = '';\n };\n /** Clears all DOM object in the grid and return it to its initial state */\n EasyGrid.prototype.clear = function () {\n this.pagination.page = 1;\n this.clearDOM();\n };\n /** Renders the grid */\n EasyGrid.prototype.render = function () {\n var _this = this;\n if (!this.hasData() && !this.options.showPlusButton)\n return;\n this.containerInitialHeight = this.slot.clientHeight;\n this.rootDiv = document.createElement('div');\n this.rootDiv.style.width = '100%';\n this.rootDiv.classList.add(\"\".concat(this.cssPrefix, \"-root\"));\n this.columns.sync(this.dataTable.columns, this.options.useRowNumeration);\n this.renderHeader();\n this.rootDiv.appendChild(this.headerDiv);\n this.renderBody();\n this.rootDiv.appendChild(this.bodyDiv);\n this.renderFooter();\n this.rootDiv.appendChild(this.footerDiv);\n var gridContainer = document.createElement('div');\n gridContainer.classList.add(\"\".concat(this.cssPrefix, \"-container\"));\n gridContainer.appendChild(this.rootDiv);\n this.slot.appendChild(gridContainer);\n var needAutoResize = this.options.columnWidths.autoResize !== AutoResizeColumns.Never;\n if (this.rowsOnPagePromise) {\n this.rowsOnPagePromise\n .then(function () { return _this.updateHeight(); })\n .then(function () {\n _this.firstRender = false;\n _this.rowsOnPagePromise = null;\n });\n }\n else {\n setTimeout(function () {\n _this.updateHeight()\n .then(function () {\n _this.firstRender = false;\n if (needAutoResize) {\n _this.resizeColumns();\n }\n });\n }, 100);\n }\n };\n EasyGrid.prototype.updateHeight = function () {\n var _this = this;\n return new Promise(function (resolve) {\n if (_this.options.viewportRowsCount) {\n var firstRow = _this.bodyCellContainerDiv.firstElementChild;\n var rowHeight = firstRow ? firstRow.offsetHeight : DEFAULT_ROW_HEIGHT;\n var rowCount = _this.options.viewportRowsCount; // || DEFAULT_ROW_COUNT;\n var viewportHeight_1 = rowHeight * rowCount;\n domel(_this.bodyViewportDiv)\n .setStyle('height', \"\".concat(viewportHeight_1, \"px\"));\n setTimeout(function () {\n var sbHeight = _this.bodyViewportDiv.offsetHeight - _this.bodyViewportDiv.clientHeight;\n viewportHeight_1 = viewportHeight_1 + sbHeight;\n domel(_this.bodyViewportDiv)\n .setStyle('height', \"\".concat(viewportHeight_1, \"px\"));\n resolve();\n }, 100);\n return;\n }\n else if (_this.containerInitialHeight > 0) {\n // comment for now since it does not work in all cases\n // const bodyHeight = this.containerInitialHeight - this.headerDiv.offsetHeight - this.footerDiv.offsetHeight;\n // domel(this.bodyDiv)\n // .setStyle('height', `${bodyHeight}px`);\n }\n resolve();\n })\n .then(function () {\n if (_this.options.fixHeightOnFirstRender && _this.firstRender) {\n _this.slot.style.height = \"\".concat(_this.slot.offsetHeight, \"px\");\n }\n });\n };\n EasyGrid.prototype.getContainerWidth = function () {\n return this.columns.getItems()\n .filter(function (col) { return col.isVisible; })\n .map(function (col) { return col.width; })\n .reduce(function (sum, current) { return sum + current; });\n };\n EasyGrid.prototype.renderHeader = function () {\n var _this = this;\n this.headerDiv = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-header\"))\n .toDOM();\n this.headerViewportDiv = domel('div', this.headerDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-header-viewport\"))\n .toDOM();\n this.headerCellContainerDiv = domel('div', this.headerViewportDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-header-cell-container\"))\n .toDOM();\n this.headerRowDiv = domel('div', this.headerCellContainerDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-header-row\"))\n .toDOM();\n this.columns.getItems().forEach(function (column, index) {\n if (!column.isVisible) {\n return;\n }\n var hd = _this.renderColumnHeader(column, index);\n _this.headerRowDiv.appendChild(hd);\n if (column.isRowNum) {\n domel(hd)\n .addChildElement(_this.renderHeaderButtons());\n }\n });\n var containerWidth = this.getContainerWidth();\n domel(this.headerCellContainerDiv)\n .setStyle('width', \"\".concat(containerWidth, \"px\"));\n };\n EasyGrid.prototype.hasData = function () {\n return this.dataTable.columns.count > 0;\n };\n EasyGrid.prototype.renderColumnHeader = function (column, index) {\n var _this = this;\n var colBuilder = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-header-cell\"))\n .data('col-idx', \"\".concat(index))\n .setStyle('width', \"\".concat(column.width, \"px\"));\n if (column.dataColumn) {\n colBuilder\n .data('col-id', \"\".concat(column.dataColumn.id));\n }\n var colDiv = colBuilder.toDOM();\n domel('div', colDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-header-cell-resize\"));\n if (!column.isRowNum) {\n domel('div', colDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-header-cell-label\"))\n .text(column.label);\n }\n if (column.description) {\n domel('div', colDiv)\n .addClass('question-mark')\n .title(column.description);\n }\n if (this.options.allowDragDrop) {\n eqDragManager.registerDraggableItem({\n element: colDiv,\n scope: \"gridColumnMove\",\n data: { column: column },\n renderer: function (dragImage) {\n dragImage.innerHTML = '';\n var attrLabel = document.createElement('div');\n attrLabel.innerText = column.label;\n dragImage.classList.add(\"\".concat(_this.cssPrefix, \"-sortable-helper\"));\n dragImage.appendChild(attrLabel);\n },\n onDragStart: function (ev) {\n ev.dropEffect = DropEffect.Allow;\n }\n });\n }\n return colDiv;\n };\n EasyGrid.prototype.renderBody = function () {\n var _this = this;\n this.bodyDiv = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-body\"))\n .toDOM();\n this.bodyViewportDiv = domel('div', this.bodyDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-body-viewport\"))\n .attr('tabIndex', '0')\n .toDOM();\n this.bodyCellContainerDiv = domel('div', this.bodyViewportDiv)\n .addClass(\"\".concat(this.cssPrefix, \"-cell-container\"))\n .toDOM();\n var showAggrs = this.canShowAggregates();\n if (this.dataTable) {\n this.showProgress();\n this.rowsOnPagePromise = this.getRowsToRender()\n .then(function (rows) {\n _this.pagination.total = _this.dataTable.getTotal();\n _this.hideProgress();\n //prevent double rendering (bad solution, we have to figure out how to avoid this behavior properly)\n _this.bodyCellContainerDiv.innerHTML = '';\n _this.prevRowTotals = null;\n var rowsToRender = 0;\n if (rows.length) {\n var groups_1 = showAggrs\n ? _this.options.aggregates.settings.getGroups()\n : [];\n rowsToRender = (rows.length < _this.pagination.pageSize)\n ? rows.length\n : _this.pagination.pageSize;\n rows.forEach(function (row, index) {\n if (showAggrs)\n _this.updateTotalsState(groups_1, row);\n //we don't actually render the last row\n if (index < rowsToRender) {\n var tr = _this.renderRow(row, index);\n _this.bodyCellContainerDiv.appendChild(tr);\n }\n });\n var showGrandTotalsOnEachPage = _this.options.aggregates && _this.options.aggregates.showGrandTotalsOnEachPage;\n if (showAggrs && (_this.isLastPage() || showGrandTotalsOnEachPage)) {\n var row = new DataRow(_this.dataTable.columns, new Array(_this.dataTable.columns.count));\n _this.updateTotalsState(groups_1, row, true);\n }\n }\n var needAutoResize = _this.options.columnWidths.autoResize !== AutoResizeColumns.Never;\n if (needAutoResize) {\n _this.resizeColumns();\n }\n else {\n var containerWidth = _this.getContainerWidth();\n domel(_this.bodyCellContainerDiv)\n .setStyle('width', \"\".concat(containerWidth, \"px\"));\n }\n return rowsToRender;\n })\n .catch(function (error) { console.error(error); return 0; });\n }\n this.bodyViewportDiv.addEventListener('scroll', function (ev) {\n domel(_this.headerViewportDiv)\n .setStyle('margin-left', \"-\".concat(_this.bodyViewportDiv.scrollLeft, \"px\"));\n });\n this.bodyViewportDiv.addEventListener('keydown', this.onViewportKeydown.bind(this));\n };\n EasyGrid.prototype.isLastPage = function () {\n if (this.dataTable.elasticChunks) {\n return this.dataTable.totalIsKnown()\n && (this.pagination.page * this.pagination.pageSize) >= this.pagination.total;\n }\n return this.pagination.page * this.pagination.pageSize >= this.pagination.total;\n };\n EasyGrid.prototype.canShowAggregates = function () {\n if (!this.options || !this.options.aggregates || !this.options.aggregates.settings)\n return false;\n var aggrSettings = this.options.aggregates.settings;\n var result = (aggrSettings.hasAggregates() || aggrSettings.hasRecordCount())\n && (aggrSettings.hasGroups() || aggrSettings.hasGrandTotals());\n return result;\n };\n EasyGrid.prototype.updateTotalsState = function (groups, newRow, isLast) {\n if (isLast === void 0) { isLast = false; }\n var aggrSettings = this.options.aggregates.settings;\n if (this.prevRowTotals && aggrSettings.hasGroups()) {\n var changeLevel = -1;\n for (var level = 1; level <= groups.length; level++) {\n var group = groups[level - 1];\n for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n if (!aggrSettings.compareValues(this.prevRowTotals.getValue(col), newRow.getValue(col))) {\n changeLevel = level;\n break;\n }\n }\n if (changeLevel !== -1)\n break;\n }\n if (changeLevel !== -1) {\n for (var level = groups.length; level >= changeLevel; level--) {\n var row = new DataRow(this.dataTable.columns, this.prevRowTotals.toArray());\n var tr = this.renderTotalsRow(level, row);\n this.bodyCellContainerDiv.appendChild(tr);\n }\n }\n }\n if (isLast && aggrSettings.hasGrandTotals() && aggrSettings.hasAggregates()) {\n var tr = this.renderTotalsRow(0, newRow);\n this.bodyCellContainerDiv.appendChild(tr);\n }\n this.prevRowTotals = newRow;\n };\n EasyGrid.prototype.applyGroupColumnTemplate = function (template, value, count) {\n var result = template.replace(/{{\\s*GroupValue\\s*}}/g, value ? \"\".concat(value) : '-');\n result = result.replace(/{{\\s*GroupCount\\s*}}/g, count ? \"\".concat(count) : '-');\n return result;\n };\n EasyGrid.prototype.renderTotalsRow = function (level, row) {\n var _this = this;\n var aggrSettings = this.options.aggregates.settings;\n var group = (level > 0)\n ? aggrSettings.getGroups()[level - 1]\n : { columns: [], aggregates: aggrSettings.getAggregates() };\n var rowBuilder = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-row\"))\n .addClass(\"\".concat(this.cssPrefix, \"-row-totals\"))\n .addClass(\"\".concat(this.cssPrefix, \"-totals-lv\").concat(level))\n .data('totals-level', \"\".concat(level))\n .attr('tabindex', '-1');\n var rowElement = rowBuilder.toDOM();\n this.columns.getItems().forEach(function (column, index) {\n if (!column.isVisible) {\n return;\n }\n var val = '';\n var colIndex = !column.isRowNum\n ? _this.dataTable.columns.getIndex(column.dataColumn.id)\n : -1;\n if (!column.isRowNum && column.dataColumn) {\n if (group.columns.indexOf(column.dataColumn.id) >= 0) {\n val = row.getValue(colIndex);\n }\n ;\n }\n if (colIndex == _this.dataTable.columns.count - 1) {\n val = '. . . . . .';\n }\n rowElement.appendChild(_this.renderCell(column, index, val, rowElement));\n });\n var aggrContainer = this.options.aggregates.calculator.getAggrContainer();\n var aggrCols = aggrSettings.getAggregates().map(function (c) { return c.colId; });\n var key = aggrSettings.buildGroupKey(group, row);\n aggrContainer.getAggregateData(level, key)\n .then(function (values) {\n for (var _i = 0, aggrCols_1 = aggrCols; _i < aggrCols_1.length; _i++) {\n var aggrColId = aggrCols_1[_i];\n row.setValue(aggrColId, values[aggrColId]);\n }\n rowElement.innerHTML = '';\n _this.columns.getItems().forEach(function (column, index) {\n if (!column.isVisible) {\n return;\n }\n var val = '';\n var colIndex = !column.isRowNum\n ? _this.dataTable.columns.getIndex(column.dataColumn.id)\n : -1;\n if (!column.isRowNum) {\n var isLastGroupColumn = false;\n if (column.dataColumn) {\n var groupColIndex = group.columns.indexOf(column.dataColumn.id);\n var aggrColIndex = aggrCols.indexOf(column.dataColumn.id);\n if (level > 0) {\n isLastGroupColumn = groupColIndex == group.columns.length - 1;\n }\n else {\n //if it's a grand total row consider first column as the last group column\n isLastGroupColumn = colIndex == 0;\n }\n if (groupColIndex >= 0 || aggrColIndex >= 0) {\n val = row.getValue(colIndex);\n }\n ;\n }\n var groupFooterTemplate = '';\n if (level > 0) {\n groupFooterTemplate = column.dataColumn.groupFooterColumnTemplate;\n //set the default template for the last grouping column\n if (!groupFooterTemplate && aggrSettings.hasRecordCount() && isLastGroupColumn) {\n groupFooterTemplate = '{{GroupValue}} ({{GroupCount}})';\n }\n }\n if (groupFooterTemplate) {\n var cellDiv_1 = _this.renderCell(column, index, val, rowElement);\n var innerCell = cellDiv_1.firstChild;\n val = innerCell.innerHTML;\n val = _this.applyGroupColumnTemplate(groupFooterTemplate, val, values[aggrSettings.COUNT_FIELD_NAME]);\n }\n }\n var cellDiv = _this.renderCell(column, index, val, rowElement);\n rowElement.appendChild(cellDiv);\n });\n })\n .catch(function (error) { return console.error(error); });\n return rowElement;\n };\n EasyGrid.prototype.onViewportKeydown = function (ev) {\n if (this.options.showActiveRow) {\n var rowCount = this.bodyCellContainerDiv.querySelectorAll(\".\".concat(this.cssPrefix, \"-row\")).length;\n var newValue = void 0;\n switch (ev.key) {\n case 'ArrowLeft':\n break;\n case 'ArrowRight':\n break;\n case 'ArrowUp':\n ev.preventDefault();\n newValue = this.activeRowIndex < 0 || this.activeRowIndex >= rowCount ? rowCount - 1 : this.activeRowIndex - 1;\n this.activeRowIndex = newValue >= 0 ? newValue : 0;\n break;\n case 'ArrowDown':\n ev.preventDefault();\n newValue = this.activeRowIndex < 0 || this.activeRowIndex >= rowCount ? 0 : this.activeRowIndex + 1;\n this.activeRowIndex = newValue < rowCount ? newValue : rowCount - 1;\n break;\n }\n }\n };\n EasyGrid.prototype.ensureRowVisibility = function (rowOrIndex) {\n var row = typeof rowOrIndex === 'number'\n ? this.getDataRow(rowOrIndex)\n : rowOrIndex;\n if (row) {\n var rowRect = row.getBoundingClientRect();\n var viewportRect = this.bodyViewportDiv.getBoundingClientRect();\n var rowTop = rowRect.top - viewportRect.top;\n var rowBottom = rowRect.bottom - viewportRect.top;\n var viewportHeight = this.bodyViewportDiv.clientHeight;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n if (rowTop > 0 &&\n rowBottom <= viewportHeight &&\n rowRect.top > 0 &&\n rowRect.bottom < windowHeight) {\n return;\n }\n if (rowTop < 0) {\n this.bodyViewportDiv.scrollTop = this.bodyViewportDiv.scrollTop + rowTop;\n }\n else if (rowBottom > viewportHeight) {\n this.bodyViewportDiv.scrollTop = this.bodyViewportDiv.scrollTop + rowBottom - viewportHeight;\n }\n rowRect = row.getBoundingClientRect();\n if (rowRect.top < 0) {\n document.documentElement.scrollTop = document.documentElement.scrollTop + rowRect.top;\n }\n else if (rowRect.bottom > windowHeight) {\n document.documentElement.scrollTop = document.documentElement.scrollTop + rowRect.bottom - windowHeight;\n }\n }\n };\n /** Returns a promise with the list of the rows to render on one page.\n * The list contains pageSize+1 row to make it possible\n * to render the totals row (if it appears to be on the edge between pages)\n */\n EasyGrid.prototype.getRowsToRender = function () {\n if (this.options.paging.enabled === false) {\n return Promise.resolve(this.dataTable.getCachedRows());\n }\n return this.dataTable.getRows({\n offset: (this.pagination.page - 1) * this.pagination.pageSize,\n limit: this.pagination.pageSize + 1\n })\n .catch(function (error) {\n console.error(error);\n return [];\n });\n };\n EasyGrid.prototype.renderFooter = function () {\n var _this = this;\n this.footerDiv = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-footer\"))\n .toDOM();\n if (this.rowsOnPagePromise) {\n this.rowsOnPagePromise.then(function (count) {\n _this.footerDiv.innerHTML = '';\n _this.footerPaginateDiv = _this.renderPageNavigator();\n _this.footerDiv.appendChild(_this.footerPaginateDiv);\n var pageInfoBlock = _this.renderPageInfoBlock(count);\n _this.footerDiv.appendChild(pageInfoBlock);\n });\n }\n };\n EasyGrid.prototype.renderPageInfoBlock = function (count) {\n var pageInfoDiv = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-page-info\"))\n .toDOM();\n var rowCount = this.dataTable.getTotal();\n if (rowCount > 0) {\n var fistPageRecordNum = count\n ? (this.pagination.page - 1) * this.pagination.pageSize + 1\n : 0;\n var lastPageRecordNum = count\n ? fistPageRecordNum + count - 1\n : 0;\n var totalStr = this.dataTable.getTotal().toString();\n if (this.dataTable.elasticChunks) {\n var count_1 = this.dataTable.getCachedCount();\n var total = this.dataTable.getTotal();\n if (count_1 !== total)\n totalStr = '?';\n }\n pageInfoDiv.innerHTML = i18n.getText('GridPageInfo')\n .replace('{FirstPageRecordNum}', \"<span>\".concat(fistPageRecordNum.toString(), \"</span>\"))\n .replace('{LastPageRecordNum}', \"<span>\".concat(lastPageRecordNum.toString(), \"</span>\"))\n .replace('{Total}', \"<span>\".concat(totalStr, \"</span>\"));\n }\n return pageInfoDiv;\n };\n EasyGrid.prototype.showProgress = function () {\n };\n EasyGrid.prototype.hideProgress = function () {\n };\n EasyGrid.prototype.getLocalIndexByGlobal = function (index) {\n if (this.pagination) {\n return index % this.pagination.pageSize;\n }\n else {\n return index;\n }\n };\n EasyGrid.prototype.getGlobalIndexByLocal = function (index) {\n if (this.pagination) {\n return (this.pagination.page - 1) * this.pagination.pageSize + index;\n }\n else {\n return index;\n }\n };\n EasyGrid.prototype.renderRow = function (row, index) {\n var _this = this;\n var indexGlobal = this.getGlobalIndexByLocal(index);\n var rowBuilder = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-row\"))\n .addClass(\"\".concat(this.cssPrefix, \"-row-\").concat(index % 2 == 1 ? 'odd' : 'even'))\n .data('row-idx', \"\".concat(indexGlobal))\n .attr('tabindex', '-1')\n .on('click', function (ev) {\n _this.activeRowIndex = index;\n _this.fireEvent({\n type: 'rowClick',\n row: row,\n rowIndex: index,\n sourceEvent: ev\n });\n })\n .on('dblclick', function (ev) {\n _this.fireEvent({\n type: 'rowDbClick',\n row: row,\n rowIndex: index,\n sourceEvent: ev\n });\n });\n if (index == 0) {\n rowBuilder.addClass(\"\".concat(this.cssPrefix, \"-row-first\"));\n }\n var rowElement = rowBuilder.toDOM();\n if (this.options.showActiveRow && index == this.activeRowIndex) {\n rowBuilder.addClass(\"\".concat(this.cssPrefix, \"-row-active\"));\n }\n this.columns.getItems().forEach(function (column, index) {\n if (!column.isVisible) {\n return;\n }\n var colindex = column.isRowNum ? -1 : _this.dataTable.columns.getIndex(column.dataColumn.id);\n var val = column.isRowNum ? indexGlobal + 1 : row.getValue(colindex);\n rowElement.appendChild(_this.renderCell(column, index, val, rowElement));\n });\n return rowElement;\n };\n EasyGrid.prototype.renderCell = function (column, colIndex, value, rowElement) {\n var builder = domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-cell\"))\n .data('col-idx', \"\".concat(colIndex))\n .attr('tabindex', '-1')\n .setStyle('width', \"\".concat(column.width, \"px\"));\n if (column.align == GridColumnAlign.LEFT) {\n builder.addClass(\"\".concat(this.cssPrefix, \"-cell-align-left\"));\n }\n else if (column.align == GridColumnAlign.RIGHT) {\n builder.addClass(\"\".concat(this.cssPrefix, \"-cell-align-right\"));\n }\n else if (column.align == GridColumnAlign.CENTER) {\n builder.addClass(\"\".concat(this.cssPrefix, \"-cell-align-center\"));\n }\n var cellElement = builder.toDOM();\n var valueCell = cellElement.appendChild(domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-cell-value\"))\n .toDOM());\n if (column.cellRenderer) {\n column.cellRenderer(value, column, valueCell, rowElement);\n }\n return cellElement;\n };\n /** Sets current grid pages (if paging is used) */\n EasyGrid.prototype.setPage = function (page) {\n this.pagination.page = page;\n this.fireEvent({ type: \"pageChanged\", page: page });\n this.refresh();\n this.bodyViewportDiv.focus();\n };\n EasyGrid.prototype.renderPageNavigator = function () {\n var _this = this;\n var paginateDiv = document.createElement('div');\n paginateDiv.className = \"\".concat(this.cssPrefix, \"-pagination-wrapper\");\n var rowCount = this.dataTable.getTotal();\n if (this.options.paging && this.options.paging.enabled && rowCount > 0) {\n var prefix_1 = this.paginationOptions.useBootstrap ? '' : \"\".concat(this.cssPrefix, \"-\");\n var buttonClickHandler_1 = function (ev) {\n var element = ev.target;\n if (element.hasAttribute('data-page')) {\n var page = parseInt(element.getAttribute('data-page'));\n _this.setPage(page);\n }\n };\n var renderPageCell = function (pageIndex, content, disabled, extreme, active) {\n var li = document.createElement('li');\n li.className = \"\".concat(prefix_1, \"page-item\");\n if (!extreme) {\n if (active) {\n li.className += ' active';\n }\n var a_1 = document.createElement('a');\n a_1.setAttribute('href', 'javascript:void(0)');\n a_1.innerHTML = content || pageIndex.toString();\n a_1.setAttribute(\"data-page\", \"\".concat(pageIndex));\n a_1.className = \"\".concat(prefix_1, \"page-link\");\n a_1.addEventListener(\"click\", buttonClickHandler_1);\n li.appendChild(a_1);\n return li;\n }\n var a = document.createElement('span');\n a.setAttribute('aria-hidden', 'true');\n a.className = \"\".concat(prefix_1, \"page-link\");\n if (disabled) {\n li.className += ' disabled';\n }\n else {\n if (_this.paginationOptions.useBootstrap) {\n a = document.createElement('a');\n a.setAttribute('href', 'javascript:void(0)');\n a.setAttribute(\"data-page\", \"\".concat(pageIndex));\n }\n else {\n var newA = document.createElement('a');\n newA.setAttribute('href', 'javascript:void(0)');\n newA.setAttribute('data-page', \"\".concat(pageIndex));\n a = newA;\n }\n a.className = \"\".concat(prefix_1, \"page-link\");\n a.addEventListener(\"click\", buttonClickHandler_1);\n }\n a.innerHTML = content;\n li.appendChild(a);\n return li;\n };\n if (this.dataTable.elasticChunks) {\n var pageIndex = this.pagination.page || 1;\n var ul = document.createElement('ul');\n ul.className = \"\".concat(prefix_1, \"pagination\");\n var cell = renderPageCell(pageIndex - 1, '«', pageIndex == 1, true, false);\n ul.appendChild(cell);\n cell = renderPageCell(pageIndex + 1, '»', this.isLastPage(), true, false);\n ul.appendChild(cell);\n paginateDiv.appendChild(ul);\n }\n else {\n if (this.pagination.total > this.pagination.pageSize) {\n var pageIndex = this.pagination.page || 1;\n var pageCount = Math.ceil(this.pagination.total / this.pagination.pageSize) || 1;\n var maxButtonCount = this.paginationOptions.maxButtonCount || 10;\n var zeroBasedIndex = pageIndex - 1;\n var firstPageIndex = zeroBasedIndex - (zeroBasedIndex % maxButtonCount) + 1;\n var lastPageIndex = firstPageIndex + maxButtonCount - 1;\n if (lastPageIndex > pageCount) {\n lastPageIndex = pageCount;\n }\n var ul = document.createElement('ul');\n ul.className = \"\".concat(prefix_1, \"pagination\");\n var cell = renderPageCell(firstPageIndex - 1, '«', firstPageIndex == 1, true, false);\n ul.appendChild(cell);\n for (var i = firstPageIndex; i <= lastPageIndex; i++) {\n cell = renderPageCell(i, i.toString(), false, false, i == pageIndex);\n ul.appendChild(cell);\n }\n cell = renderPageCell(lastPageIndex + 1, '»', lastPageIndex == pageCount, true, false);\n ul.appendChild(cell);\n paginateDiv.appendChild(ul);\n }\n }\n if (this.options.paging.allowPageSizeChange) {\n var selectChangeHandler = function (ev) {\n var newValue = parseInt(ev.target.value);\n _this.pagination.pageSize = newValue;\n _this.pagination.page = 1;\n _this.refresh();\n };\n var pageSizes = document.createElement('div');\n pageSizes.className = \"\".concat(this.cssPrefix, \"-page-sizes\");\n var selectSize = document.createElement('div');\n selectSize.className = \"kfrm-select \".concat(this.cssPrefix, \"-page-sizes-select\");\n pageSizes.appendChild(selectSize);\n var sel_1 = document.createElement('select');\n var selOptions = this.options.paging.pageSizeItems || [];\n var selSet = new Set(selOptions);\n selSet.add(this.options.paging.pageSize || 20);\n Array.from(selSet).forEach(function (el) {\n var option = document.createElement(\"option\");\n option.value = el.toString();\n option.text = el.toString();\n sel_1.appendChild(option);\n });\n sel_1.value = (this.pagination.pageSize || 20).toString();\n selectSize.appendChild(sel_1);\n sel_1.addEventListener('change', selectChangeHandler);\n var labelDiv = document.createElement('div');\n labelDiv.className = \"\".concat(this.cssPrefix, \"-page-sizes-label\");\n pageSizes.appendChild(labelDiv);\n var label = document.createElement('span');\n label.innerText = i18n.getText('GridItemsPerPage');\n labelDiv.appendChild(label);\n paginateDiv.appendChild(pageSizes);\n }\n }\n return paginateDiv;\n };\n EasyGrid.prototype.addEventListener = function (eventType, handler) {\n return this.eventEmitter.subscribe(eventType, function (event) { return handler(event.data); });\n };\n EasyGrid.prototype.removeEventListener = function (eventType, handlerId) {\n this.eventEmitter.unsubscribe(eventType, handlerId);\n };\n EasyGrid.prototype.renderHeaderButtons = function () {\n var _this = this;\n if (this.options.showPlusButton) {\n return domel('div')\n .addClass(\"\".concat(this.cssPrefix, \"-header-btn-plus\"))\n .title(this.options.plusButtonTitle || 'Add')\n .addChild('a', function (builder) { return builder\n .attr('href', 'javascript:void(0)')\n .on('click', function (e) {\n e.preventDefault();\n _this.fireEvent({\n type: 'plusButtonClick',\n sourceEvent: e\n });\n }); })\n .toDOM();\n }\n return domel('span')\n .addText('#')\n .toDOM();\n };\n EasyGrid.prototype.showLandingSlot = function (pageX, pageY) {\n var colElems = this.headerRowDiv.querySelectorAll(\"[class*=\".concat(this.cssPrefix, \"-table-col]\"));\n var cols = [];\n for (var i = 1; i < colElems.length; i++) {\n var rowElem = colElems[i];\n if (rowElem.style.display === 'none')\n continue;\n cols.push(rowElem);\n }\n if (cols.length === 0) {\n this.landingIndex = 0;\n this.headerRowDiv.appendChild(this.landingSlot);\n return;\n }\n var landingPos = getElementAbsolutePos(this.landingSlot);\n if (pageX >= landingPos.x && pageX <= landingPos.x + this.landingSlot.offsetWidth) {\n return;\n }\n var newLandingIndex = this.landingIndex;\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\n var col = cols_1[_i];\n var colPos = getElementAbsolutePos(col);\n var width = col.offsetWidth;\n if (pageX > colPos.x && pageX < colPos.x + width) {\n // -1 as we don't need to count add button here\n newLandingIndex = parseInt(col.getAttribute('data-col-idx')) - 1;\n }\n }\n if (newLandingIndex != this.landingIndex) {\n this.landingIndex = newLandingIndex;\n if (this.landingIndex < cols.length) {\n this.headerRowDiv.insertBefore(this.landingSlot, cols[this.landingIndex]);\n }\n else {\n this.headerRowDiv.appendChild(this.landingSlot);\n }\n }\n };\n EasyGrid.prototype.hideLandingSlot = function () {\n var _this = this;\n this.landingIndex = -1;\n setTimeout(function () {\n if (_this.landingSlot.parentElement) {\n _this.landingSlot.parentElement.removeChild(_this.landingSlot);\n }\n }, 10);\n };\n Object.defineProperty(EasyGrid.prototype, \"activeRowIndex\", {\n get: function () {\n return this._activeRowIndex;\n },\n set: function (value) {\n if (value !== this._activeRowIndex) {\n var oldValue = this._activeRowIndex;\n this._activeRowIndex = value;\n this.updateActiveRow();\n this.fireEvent({\n type: 'activeRowChanged',\n oldValue: oldValue,\n newValue: this.activeRowIndex,\n rowIndex: this.getGlobalIndexByLocal(this.activeRowIndex)\n });\n }\n },\n enumerable: false,\n configurable: true\n });\n EasyGrid.prototype.updateActiveRow = function () {\n var _this = this;\n if (this.options.showActiveRow) {\n var rows = this.bodyCellContainerDiv.querySelectorAll(\"[class*=\".concat(this.cssPrefix, \"-row-active]\"));\n rows.forEach(function (el) { el.classList.remove(\"\".concat(_this.cssPrefix, \"-row-active\")); });\n var activeRow = this.getActiveRow();\n if (activeRow) {\n activeRow.classList.add(\"\".concat(this.cssPrefix, \"-row-active\"));\n this.ensureRowVisibility(this.activeRowIndex);\n }\n }\n };\n EasyGrid.prototype.getActiveRow = function () {\n return this.getDataRow(this.activeRowIndex);\n };\n EasyGrid.prototype.getDataRow = function (index) {\n var rows = Array.from(this.bodyCellContainerDiv.querySelectorAll(\".\".concat(this.cssPrefix, \"-row:not(.\").concat(this.cssPrefix, \"-row-totals)\")));\n if (index >= 0 && index < rows.length)\n return rows[index];\n return null;\n };\n /** Makes the grid focused for keyboard events */\n EasyGrid.prototype.focus = function () {\n this.bodyViewportDiv.focus();\n };\n /** Resizes columns according to the data they represent */\n EasyGrid.prototype.resizeColumns = function () {\n if (this.options.columnWidths.autoResize === AutoResizeColumns.Never)\n return;\n var containerWidth = this.bodyCellContainerDiv.style.width;\n this.bodyCellContainerDiv.style.visibility = 'hidden';\n this.bodyCellContainerDiv.style.width = '1px';\n //this.headerRowDiv.style.visibility = 'hidden';\n this.headerRowDiv.style.width = '1px';\n var sumWidth = 0;\n var columns = this.columns.getItems();\n var headerCells = this.headerCellContainerDiv.querySelectorAll(\".\".concat(this.cssPrefix, \"-header-cell\"));\n var headerIdx = 0;\n var _loop_1 = function (idx) {\n var column = columns[idx];\n if (!column.isVisible)\n return \"continue\";\n var calculatedWidth = this_1.options.columnWidths.autoResize !== AutoResizeColumns.Always && column.dataColumn\n ? column.dataColumn.calculatedWidth\n : 0;\n var cellValues = this_1.bodyCellContainerDiv.querySelectorAll(\".\".concat(this_1.cssPrefix, \"-cell[data-col-idx=\\\"\").concat(idx, \"\\\"] > .\").concat(this_1.cssPrefix, \"-cell-value\"));\n var maxWidth = 0;\n if (calculatedWidth > 0) {\n sumWidth += calculatedWidth;\n column.width = calculatedWidth;\n cellValues.forEach(function (value) {\n value.parentElement.style.width = \"\".concat(calculatedWidth, \"px\");\n });\n headerCells[headerIdx].style.width = \"\".concat(calculatedWidth, \"px\");\n }\n else {\n if (cellValues.length == 0) {\n headerCells[headerIdx].style.width = null;\n headerCells[headerIdx].style.whiteSpace = 'nowrap';\n }\n maxWidth = headerCells[headerIdx].offsetWidth;\n if (cellValues.length > 0) {\n cellValues.forEach(function (value) {\n value.parentElement.style.width = null;\n var width = value.parentElement.offsetWidth;\n if (width > maxWidth) {\n maxWidth = width;\n }\n });\n maxWidth += 3;\n var maxOption = column.isRowNum\n ? this_1.options.columnWidths.rowNumColumn.max || 500\n : this_1.options.columnWidths[column.dataColumn.type].max || 2000;\n var minOption = column.isRowNum\n ? this_1.options.columnWidths.rowNumColumn.min || 0\n : this_1.options.columnWidths[column.dataColumn.type].min || 20;\n if (maxWidth > maxOption) {\n maxWidth = maxOption;\n }\n if (maxWidth < minOption) {\n maxWidth = minOption;\n }\n if (utils.isNumericType(column.type)) {\n //increase the calculated width in 1.3 times for numeric columns\n maxWidth = Math.round(maxWidth * 1.3);\n }\n sumWidth += maxWidth;\n column.width = maxWidth;\n cellValues.forEach(function (value) {\n value.parentElement.style.width = \"\".concat(maxWidth, \"px\");\n });\n headerCells[headerIdx].style.width = \"\".concat(maxWidth, \"px\");\n if (column.dataColumn) {\n column.dataColumn.calculatedWidth = maxWidth;\n }\n }\n else {\n sumWidth += maxWidth;\n }\n }\n headerIdx++;\n };\n var this_1 = this;\n for (var idx = 0; idx < this.columns.count; idx++) {\n _loop_1(idx);\n }\n if (sumWidth > 0) {\n this.bodyCellContainerDiv.style.width = \"\".concat(sumWidth, \"px\");\n this.headerCellContainerDiv.style.width = \"\".concat(sumWidth, \"px\");\n }\n else {\n this.bodyCellContainerDiv.style.width = containerWidth;\n this.headerCellContainerDiv.style.width = containerWidth;\n }\n this.bodyCellContainerDiv.style.visibility = null;\n this.headerRowDiv.removeAttribute('style');\n };\n return EasyGrid;\n}());\nexport { EasyGrid };\n//# sourceMappingURL=easy_grid.js.map","var Calendar = /** @class */ (function () {\n function Calendar(slot, options) {\n this.slot = slot;\n this.options = options || {};\n if (!this.options.yearRange) {\n this.options.yearRange = 'c-10:c+10';\n }\n }\n Object.defineProperty(Calendar.prototype, \"cssPrefix\", {\n get: function () {\n return 'kdtp-cal';\n },\n enumerable: false,\n configurable: true\n });\n Calendar.prototype.setDate = function (date) {\n this.currentDate = new Date(date);\n };\n Calendar.prototype.getDate = function () {\n return new Date(this.currentDate);\n };\n Calendar.prototype.dateChanged = function (apply) {\n if (this.options.onDateChanged) {\n this.options.onDateChanged(this.currentDate, apply);\n }\n };\n return Calendar;\n}());\nexport { Calendar };\n//# sourceMappingURL=calendar.js.map","import { getElementAbsolutePos } from '../utils/ui-utils';\nvar DateTimePicker = /** @class */ (function () {\n function DateTimePicker(options) {\n this.calendar = null;\n this.timePicker = null;\n this.options = options;\n this.render();\n }\n Object.defineProperty(DateTimePicker.prototype, \"cssPrefix\", {\n get: function () {\n return 'kdtp';\n },\n enumerable: false,\n configurable: true\n });\n DateTimePicker.prototype.setDateTime = function (dateTime) {\n this.currentDateTime = new Date(dateTime);\n if (this.calendar) {\n this.calendar.setDate(this.currentDateTime);\n }\n if (this.timePicker) {\n this.timePicker.setTime(this.currentDateTime);\n }\n };\n DateTimePicker.prototype.getDateTime = function () {\n return new Date(this.currentDateTime);\n };\n DateTimePicker.prototype.render = function () {\n var _this = this;\n if (this.options.showCalendar) {\n this.calendar = this.createCalendar({\n yearRange: this.options.yearRange,\n showDateTimeInput: this.options.showDateTimeInput,\n timePickerIsUsed: this.options.showTimePicker,\n oneClickDateSelection: this.options.oneClickDateSelection,\n onDateChanged: function (date, apply) {\n _this.currentDateTime = date;\n if (_this.timePicker) {\n _this.timePicker.setTime(_this.currentDateTime);\n }\n if (_this.options.showTimePicker) {\n _this.dateTimeChanged();\n }\n if (apply) {\n _this.apply(_this.currentDateTime);\n }\n }\n });\n if (this.calendar)\n this.calendar.render();\n }\n if (this.options.showTimePicker) {\n this.timePicker = this.createTimePicker({\n onTimeChanged: function (time) {\n _this.currentDateTime.setHours(time.getHours());\n _this.currentDateTime.setMinutes(time.getMinutes());\n if (_this.calendar) {\n _this.calendar.setDate(_this.currentDateTime);\n }\n _this.dateTimeChanged();\n }\n });\n if (this.timePicker)\n this.timePicker.render();\n }\n this.setDateTime(new Date());\n };\n DateTimePicker.prototype.createCalendar = function (options) {\n return null;\n };\n DateTimePicker.prototype.createTimePicker = function (options) {\n return null;\n };\n DateTimePicker.prototype.show = function (anchor) {\n if (this.options.beforeShow) {\n this.options.beforeShow();\n }\n var pos = getElementAbsolutePos(anchor || document.body);\n this.slot.style.top = pos.y + anchor.clientHeight + 'px';\n this.slot.style.left = pos.x + 'px';\n };\n DateTimePicker.prototype.apply = function (date) {\n if (this.options.onApply) {\n this.options.onApply(date);\n }\n this.destroy();\n };\n DateTimePicker.prototype.cancel = function () {\n if (this.options.onCancel) {\n this.options.onCancel();\n }\n this.destroy();\n };\n DateTimePicker.prototype.destroy = function () {\n if (this.slot && this.slot.parentElement) {\n this.slot.parentElement.removeChild(this.slot);\n }\n };\n DateTimePicker.prototype.dateTimeChanged = function () {\n if (this.options.onDateTimeChanged) {\n this.options.onDateTimeChanged(this.currentDateTime);\n }\n };\n return DateTimePicker;\n}());\nexport { DateTimePicker };\n//# sourceMappingURL=date_time_picker.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { i18n, utils as dataUtils } from '@easydata/core';\nimport { domel } from '../utils/dom_elem_builder';\nimport { Calendar } from './calendar';\nvar DefaultCalendar = /** @class */ (function (_super) {\n __extends(DefaultCalendar, _super);\n function DefaultCalendar(slot, options) {\n var _this = _super.call(this, slot, options) || this;\n _this.daysOfWeek = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n _this.months = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n _this.calendarBody = null;\n _this.isManualInputChanging = false;\n for (var i = 0; i < _this.daysOfWeek.length; i++) {\n _this.daysOfWeek[i] = i18n.getShortWeekDayName(i + 1);\n }\n for (var i = 0; i < _this.months.length; i++) {\n _this.months[i] = i18n.getLongMonthName(i + 1);\n }\n return _this;\n }\n DefaultCalendar.prototype.setDate = function (date) {\n _super.prototype.setDate.call(this, date);\n this.selectedMonth = this.currentDate.getMonth();\n this.selectedYear = this.currentDate.getFullYear();\n this.rerenderMonth();\n };\n DefaultCalendar.prototype.render = function () {\n var _this = this;\n var header = domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-header\"));\n if (this.options.showDateTimeInput) {\n header\n .addChildElement(this.renderManualDateInput());\n }\n else {\n header\n .addChild('span', function (builder) { return _this.headerTextElem = builder.toDOM(); });\n }\n domel(this.slot)\n .addChildElement(this.renderCalendarButtons());\n this.calendarBody = domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-body\"))\n .toDOM();\n };\n DefaultCalendar.prototype.getInputDateFormat = function () {\n var settings = i18n.getLocaleSettings();\n return (this.options.timePickerIsUsed)\n ? \"\".concat(settings.editDateFormat, \" \").concat(settings.editTimeFormat)\n : settings.editDateFormat;\n };\n DefaultCalendar.prototype.renderManualDateInput = function () {\n var _this = this;\n var format = this.getInputDateFormat();\n var builder = domel('input')\n .attr('placeholder', format)\n .addClass(\"\".concat(this.cssPrefix, \"-header-input\"));\n builder\n .mask(format.replace('yyyy', '9999')\n .replace('MM', '99')\n .replace('dd', '99')\n .replace('HH', '99')\n .replace('mm', '99')\n .replace('ss', '99'))\n .on('input', function (ev) {\n builder.removeClass('error');\n try {\n _this.isManualInputChanging = true;\n var newDate = dataUtils.strToDateTime(_this.manualInputElem.value, format);\n _this.currentDate = newDate;\n _this.jump(_this.currentDate.getFullYear(), _this.currentDate.getMonth());\n _this.dateChanged(false);\n }\n catch (e) {\n builder.addClass('error');\n }\n finally {\n _this.isManualInputChanging = false;\n }\n })\n .on('keydown', function (ev) {\n if (ev.keyCode === 13) {\n ev.preventDefault();\n ev.stopPropagation();\n if (_this.manualInputElem.className.indexOf('error') < 0\n && !_this.isManualInputChanging)\n _this.dateChanged(true);\n }\n })\n .on('focus', function () {\n setTimeout(function () {\n _this.manualInputElem.selectionStart = 0;\n _this.manualInputElem.selectionEnd = 0;\n }, 50);\n });\n this.manualInputElem = builder.toDOM();\n return this.manualInputElem;\n };\n DefaultCalendar.prototype.updateDisplayedDateValue = function () {\n if (this.manualInputElem) {\n if (!this.isManualInputChanging) {\n var format = this.getInputDateFormat();\n this.manualInputElem.value = dataUtils.dateTimeToStr(this.currentDate, format);\n this.manualInputElem.focus();\n }\n }\n else if (this.headerTextElem) {\n var locale = i18n.getCurrentLocale();\n this.headerTextElem.innerText = this.currentDate.toLocaleString(locale == 'en' ? undefined : locale, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n }\n };\n DefaultCalendar.prototype.renderCalendarButtons = function () {\n var _this = this;\n var builder = domel('nav')\n .addClass(\"\".concat(this.cssPrefix, \"-nav\"))\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-nav-prev\"))\n .on('click', function () {\n _this.prev();\n })\n .addChild('span', function (builder) { return builder.html('‹'); }); })\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-nav-selectors\"))\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-nav-month\"))\n .addChild('select', function (builder) {\n builder\n .on('change', function () {\n _this.jump(_this.selectedYear, parseInt(_this.selectMonthElem.value));\n });\n var _loop_1 = function (i) {\n builder.addChild('option', function (builder) { return builder\n .attr('value', i.toString())\n .text(_this.months[i]); });\n };\n for (var i = 0; i < _this.months.length; i++) {\n _loop_1(i);\n }\n _this.selectMonthElem = builder.toDOM();\n }); })\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-nav-year\"))\n .addChild('select', function (builder) { return _this.selectYearElem = builder\n .on('change', function () {\n _this.jump(parseInt(_this.selectYearElem.value), _this.selectedMonth);\n })\n .toDOM(); }); }); })\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-nav-next\"))\n .on('click', function () {\n _this.next();\n })\n .addChild('span', function (builder) { return builder.html('›'); }); });\n return builder.toDOM();\n };\n DefaultCalendar.prototype.prev = function () {\n this.selectedYear = (this.selectedMonth === 0) ? this.selectedYear - 1 : this.selectedYear;\n this.selectedMonth = (this.selectedMonth === 0) ? 11 : this.selectedMonth - 1;\n this.rerenderMonth();\n };\n DefaultCalendar.prototype.next = function () {\n this.selectedYear = (this.selectedMonth === 11) ? this.selectedYear + 1 : this.selectedYear;\n this.selectedMonth = (this.selectedMonth + 1) % 12;\n this.rerenderMonth();\n };\n DefaultCalendar.prototype.rerenderSelectYear = function () {\n var match = /c-(\\d*):c\\+(\\d*)/g.exec(this.options.yearRange);\n var minusYear = 0;\n var plusYear = 1;\n if (match !== null) {\n minusYear = parseInt(match[1]);\n plusYear = parseInt(match[2]);\n }\n this.selectYearElem.innerHTML = '';\n for (var i = 0; i <= minusYear + plusYear; i++) {\n var op = document.createElement(\"option\");\n var year = this.selectedYear - minusYear + i;\n op.value = year.toString();\n op.innerText = year.toString();\n this.selectYearElem.appendChild(op);\n }\n };\n DefaultCalendar.prototype.jump = function (year, month) {\n this.selectedYear = year;\n this.selectedMonth = month;\n this.rerenderMonth();\n };\n DefaultCalendar.prototype.rerenderMonth = function () {\n var _this = this;\n //header text\n this.updateDisplayedDateValue();\n this.rerenderSelectYear();\n var firstDay = (new Date(this.selectedYear, this.selectedMonth)).getDay();\n var daysInMonth = new Date(this.selectedYear, this.selectedMonth + 1, 0).getDate();\n this.calendarBody.innerHTML = \"\";\n this.selectYearElem.value = this.selectedYear.toString();\n this.selectMonthElem.value = this.selectedMonth.toString();\n this.daysOfWeek.forEach(function (day, idx) {\n domel('div', _this.calendarBody)\n .addClass(\"\".concat(_this.cssPrefix, \"-weekday\"))\n .addClass(idx == 0 || idx == 6 ? \"\".concat(_this.cssPrefix, \"-weekend\") : '')\n .text(day);\n });\n // Add empty cells before first day\n for (var i = 0; i < firstDay; i++) {\n domel('div', this.calendarBody)\n .addClass(\"\".concat(this.cssPrefix, \"-day-empty\"));\n }\n // Add all month days\n var today = new Date();\n for (var day = 1; day <= daysInMonth; day++) {\n var builder = domel('div', this.calendarBody)\n .addClass(\"\".concat(this.cssPrefix, \"-day\"))\n .attr('data-date', day.toString())\n .text(day.toString())\n .on('click', function (e) {\n _this.currentDate.setFullYear(_this.selectedYear);\n _this.currentDate.setMonth(_this.selectedMonth);\n _this.currentDate.setDate(parseInt(e.target.getAttribute('data-date')));\n _this.dateChanged(_this.options.oneClickDateSelection);\n });\n if (day === today.getDate() && this.selectedYear === today.getFullYear() && this.selectedMonth === today.getMonth()) {\n builder.addClass(\"\".concat(this.cssPrefix, \"-day-current\"));\n }\n if (day === this.currentDate.getDate() && this.selectedYear === this.currentDate.getFullYear() && this.selectedMonth === this.currentDate.getMonth()) {\n builder.addClass(\"\".concat(this.cssPrefix, \"-day-selected\"));\n }\n var dayOfWeek = (firstDay + day - 1) % 7;\n if (dayOfWeek == 0 || dayOfWeek == 6) {\n builder.addClass(\"\".concat(this.cssPrefix, \"-weekend\"));\n }\n }\n // Add empty cells after last day\n var cellsDrawnInLastRow = (firstDay + daysInMonth) % 7;\n var cellsToDraw = cellsDrawnInLastRow == 0 ? 0 : 7 - cellsDrawnInLastRow;\n for (var i = 0; i < cellsToDraw; i++) {\n domel('div', this.calendarBody)\n .addClass(\"\".concat(this.cssPrefix, \"-day-empty\"));\n }\n };\n DefaultCalendar.prototype.dateChanged = function (apply) {\n _super.prototype.dateChanged.call(this, apply);\n this.rerenderMonth();\n };\n return DefaultCalendar;\n}(Calendar));\nexport { DefaultCalendar };\n//# sourceMappingURL=default_calendar.js.map","var TimePicker = /** @class */ (function () {\n function TimePicker(slot, options) {\n this.slot = slot;\n this.options = options || {};\n }\n Object.defineProperty(TimePicker.prototype, \"cssPrefix\", {\n get: function () {\n return 'kdtp-tp';\n },\n enumerable: false,\n configurable: true\n });\n TimePicker.prototype.setTime = function (time) {\n this.currentTime = new Date(time);\n };\n TimePicker.prototype.getTime = function () {\n return new Date(this.currentTime);\n };\n TimePicker.prototype.timeChanged = function () {\n if (this.options.onTimeChanged) {\n this.options.onTimeChanged(this.currentTime);\n }\n };\n return TimePicker;\n}());\nexport { TimePicker };\n//# sourceMappingURL=time_picker.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { i18n } from '@easydata/core';\nimport { domel } from '../utils/dom_elem_builder';\nimport { TimePicker } from './time_picker';\nvar DefaultTimePicker = /** @class */ (function (_super) {\n __extends(DefaultTimePicker, _super);\n function DefaultTimePicker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DefaultTimePicker.prototype.setTime = function (time) {\n _super.prototype.setTime.call(this, time);\n this.updateDisplayedTime();\n this.hoursInput.valueAsNumber = time.getHours();\n this.minutesInput.valueAsNumber = time.getMinutes();\n };\n DefaultTimePicker.prototype.render = function () {\n var _this = this;\n domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-time\"))\n .addChild('span', function (builder) { return _this.timeText = builder.toDOM(); })\n .toDOM();\n var slidersBuilder = domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-sliders\"));\n slidersBuilder\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-time-row\"))\n .title('Hours')\n .addChild('input', function (builder) { return _this.hoursInput = builder\n .addClass(\"\".concat(_this.cssPrefix, \"-input-hours\"))\n .type('range')\n .attr('min', '0')\n .attr('max', '23')\n .attr('step', '1')\n .on('input', function (e) {\n _this.currentTime.setHours(_this.hoursInput.valueAsNumber);\n _this.updateDisplayedTime();\n _this.timeChanged();\n })\n .toDOM(); }); });\n slidersBuilder\n .addChild('div', function (builder) { return builder\n .addClass(\"\".concat(_this.cssPrefix, \"-time-row\"))\n .title('Minutes')\n .addChild('input', function (builder) { return _this.minutesInput = builder\n .addClass(\"\".concat(_this.cssPrefix, \"-input-minutes\"))\n .type('range')\n .attr('min', '0')\n .attr('max', '59')\n .attr('step', '1')\n .on('input', function (e) {\n _this.currentTime.setMinutes(_this.minutesInput.valueAsNumber);\n _this.updateDisplayedTime();\n _this.timeChanged();\n })\n .toDOM(); }); });\n return this.slot;\n };\n DefaultTimePicker.prototype.updateDisplayedTime = function () {\n var locale = i18n.getCurrentLocale();\n var timeToDraw = this.currentTime.toLocaleString(locale == 'en' ? undefined : locale, {\n hour: \"numeric\",\n minute: \"numeric\"\n });\n this.timeText.innerText = timeToDraw;\n };\n return DefaultTimePicker;\n}(TimePicker));\nexport { DefaultTimePicker };\n//# sourceMappingURL=default_time_picker.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { i18n } from '@easydata/core';\nimport { domel } from '../utils/dom_elem_builder';\nimport { DateTimePicker } from './date_time_picker';\nimport { DefaultCalendar } from './default_calendar';\nimport { DefaultTimePicker } from './default_time_picker';\nimport { getElementAbsolutePos } from '../utils/ui-utils';\nvar DefaultDateTimePicker = /** @class */ (function (_super) {\n __extends(DefaultDateTimePicker, _super);\n function DefaultDateTimePicker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DefaultDateTimePicker.prototype.render = function () {\n var _this = this;\n var sb = domel('div', document.body)\n .addClass(\"\".concat(this.cssPrefix))\n .attr('tabIndex', '0')\n .setStyle('position', 'absolute')\n .setStyle('top', '-1000px')\n .setStyle('left', '-1000px')\n .on('keydown', function (ev) {\n if (ev.keyCode === 27) { // ESC is pressed\n _this.cancel();\n }\n else if (ev.keyCode === 13) { // Enter is pressed\n _this.apply(_this.getDateTime());\n }\n return false;\n });\n if (this.options.zIndex) {\n sb.setStyle('z-index', \"\".concat(this.options.zIndex));\n }\n this.slot = sb.toDOM();\n _super.prototype.render.call(this);\n this.renderButtons();\n this.globalMouseDownHandler = function (e) {\n var event = window.event || e;\n var o = event.srcElement || event.target;\n var isOutside = !_this.slot.contains(event.target);\n if (isOutside) {\n document.removeEventListener('mousedown', _this.globalMouseDownHandler, true);\n _this.cancel();\n }\n return true;\n };\n };\n DefaultDateTimePicker.prototype.renderButtons = function () {\n var _this = this;\n var builder = domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-buttons\"))\n .addChild('button', function (b) { return _this.nowButton = b\n .addClass(\"\".concat(_this.cssPrefix, \"-button \").concat(_this.cssPrefix, \"-button-now\"))\n .text(i18n.getText('ButtonNow'))\n .on('click', function () {\n _this.setDateTime(new Date());\n _this.dateTimeChanged();\n return false;\n })\n .toDOM(); });\n if (this.options.showTimePicker || !this.options.oneClickDateSelection) {\n builder.addChild('button', function (b) { return _this.submitButton = b\n .addClass(\"\".concat(_this.cssPrefix, \"-button \").concat(_this.cssPrefix, \"-button-apply\"))\n .text(i18n.getText('ButtonApply'))\n .on('click', function () {\n _this.apply(_this.getDateTime());\n return false;\n })\n .toDOM(); });\n }\n builder.addChild('button', function (b) { return _this.submitButton = b\n .addClass(\"\".concat(_this.cssPrefix, \"-button \").concat(_this.cssPrefix, \"-button-cancel\"))\n .text(i18n.getText('ButtonCancel'))\n .on('click', function () {\n _this.cancel();\n return false;\n })\n .toDOM(); });\n };\n DefaultDateTimePicker.prototype.createCalendar = function (options) {\n this.calendarSlot =\n domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-cal\"))\n .toDOM();\n return new DefaultCalendar(this.calendarSlot, options);\n };\n DefaultDateTimePicker.prototype.createTimePicker = function (options) {\n this.timePickerSlot =\n domel('div', this.slot)\n .addClass(\"\".concat(this.cssPrefix, \"-tp\"))\n .toDOM();\n return new DefaultTimePicker(this.timePickerSlot, options);\n };\n DefaultDateTimePicker.prototype.show = function (anchor) {\n var _this = this;\n if (this.options.showDateTimeInput) {\n if (this.options.beforeShow) {\n this.options.beforeShow();\n }\n var anchorPos = getElementAbsolutePos(anchor || document.body);\n var parentPos = getElementAbsolutePos(anchor ? anchor.parentElement || anchor : document.body);\n this.slot.style.top = parentPos.y + 'px';\n this.slot.style.left = anchorPos.x + 'px';\n }\n else {\n _super.prototype.show.call(this, anchor);\n this.slot.focus();\n }\n setTimeout(function () {\n document.addEventListener('mousedown', _this.globalMouseDownHandler, true);\n }, 1);\n };\n return DefaultDateTimePicker;\n}(DateTimePicker));\nexport { DefaultDateTimePicker };\n//# sourceMappingURL=default_date_time_picker.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { i18n, utils, liquid } from '@easydata/core';\nimport { DialogFooterAlignment } from './dialog_service';\nimport { domel } from '../utils/dom_elem_builder';\nvar cssPrefix = \"kdlg\";\nexport var DefaultDialogService = /** @class */ (function () {\n function DefaultDialogService() {\n }\n DefaultDialogService.prototype.openConfirm = function (title, content, callback) {\n var _this = this;\n var template = \"<div id=\\\"\".concat(cssPrefix, \"-dialog-confirm\\\">\").concat(content, \"</div>\");\n var options = {\n title: title,\n closable: false,\n submitable: true,\n cancelable: true,\n body: template\n };\n if (callback) {\n options.onSubmit = function () {\n callback(true);\n };\n options.onCancel = function () {\n callback(false);\n };\n this.open(options);\n return;\n }\n return new Promise(function (resolve) {\n options.onSubmit = function () {\n resolve(true);\n };\n options.onCancel = function () {\n resolve(false);\n };\n _this.open(options);\n });\n };\n DefaultDialogService.prototype.openPrompt = function (title, content, defVal, callback) {\n var _this = this;\n var template = \"<div id=\\\"\".concat(cssPrefix, \"-dialog-form\\\" class=\\\"kfrm-form\\\">\\n <div class=\\\"kfrm-fields label-above\\\">\\n <label for=\\\"\").concat(cssPrefix, \"-dialog-form-input\\\" id=\\\"\").concat(cssPrefix, \"-dialog-form-content\\\">\").concat(content, \"</label>\\n <input type=\\\"text\\\" name=\\\"\").concat(cssPrefix, \"-dialog-form-input\\\" id=\\\"\").concat(cssPrefix, \"-dialog-form-input\\\" />\\n </div>\\n </div>\");\n var options = {\n title: title,\n submitable: true,\n closable: true,\n cancelable: true,\n submitOnEnter: true,\n body: template,\n arrangeParents: false,\n beforeOpen: function () {\n var input = document.getElementById(\"\".concat(cssPrefix, \"-dialog-form-input\"));\n if (defVal) {\n input.value = defVal;\n }\n input.focus();\n }\n };\n var processInput = function (callback) {\n var input = document.getElementById(\"\".concat(cssPrefix, \"-dialog-form-input\"));\n var result = input.value;\n if (result && result.replace(/\\s/g, '').length > 0) {\n callback(result);\n return true;\n }\n input.classList.add('eqjs-invalid');\n return false;\n };\n if (callback) {\n options.onSubmit = function () {\n return processInput(callback);\n };\n options.onCancel = function () {\n callback(\"\");\n };\n this.open(options);\n return;\n }\n return new Promise(function (resolve) {\n options.onSubmit = function () {\n return processInput(resolve);\n };\n options.onCancel = function () {\n resolve(\"\");\n };\n _this.open(options);\n });\n };\n DefaultDialogService.prototype.open = function (options, data) {\n var _this = this;\n var dialog = new DefaultDialog(options, data);\n var onDestroy = options.onDestroy;\n options.onDestroy = function (dlg) {\n _this.untrack(dlg);\n onDestroy && onDestroy(dlg);\n };\n dialog.open();\n this.track(dialog);\n return dialog;\n };\n DefaultDialogService.prototype.createSet = function (options) {\n return new DefaultDialogSet(options, this);\n };\n DefaultDialogService.prototype.untrack = function (dlg) {\n var index = DefaultDialogService.openDialogs.indexOf(dlg);\n if (index >= 0) {\n DefaultDialogService.openDialogs.splice(index, 1);\n }\n };\n DefaultDialogService.prototype.track = function (dlg) {\n DefaultDialogService.openDialogs.push(dlg);\n };\n DefaultDialogService.prototype.openProgress = function (options) {\n var _this = this;\n var dialog = new DefaultProgressDialog(options);\n var onDestroy = options.onDestroy;\n options.onDestroy = function (dlg) {\n _this.untrack(dlg);\n onDestroy && onDestroy(dlg);\n };\n dialog.open();\n this.track(dialog);\n return dialog;\n };\n DefaultDialogService.prototype.getAllDialogs = function () {\n return Array.from(DefaultDialogService.openDialogs);\n };\n DefaultDialogService.prototype.closeAllDialogs = function () {\n for (var _i = 0, _a = Array.from(DefaultDialogService.openDialogs); _i < _a.length; _i++) {\n var dialog = _a[_i];\n dialog.close();\n }\n };\n DefaultDialogService.openDialogs = [];\n return DefaultDialogService;\n}());\nvar DefaultDialog = /** @class */ (function () {\n function DefaultDialog(options, data) {\n var _this = this;\n this.options = options;\n this.submitHandler = function (token) {\n if (_this.options.onSubmit && _this.options.onSubmit(_this, token) === false) {\n return false;\n }\n _this.destroy();\n return true;\n };\n this.cancelHandler = function () {\n if (_this.options.onCancel) {\n _this.options.onCancel(_this);\n }\n _this.destroy();\n };\n this.keydownHandler = function (ev) {\n if (ev.keyCode == 13 && _this.isActiveDialog()) {\n ev.preventDefault();\n ev.stopPropagation();\n if (_this.submitHandler()) {\n window.removeEventListener('keydown', _this.keydownHandler, false);\n return false;\n }\n }\n return true;\n };\n this.dialogId = utils.generateId('dlg');\n this.data = data;\n this.slot =\n domel('div', document.body)\n .attr('tab-index', '-1')\n .data('dialog-id', this.dialogId)\n .addClass(\"\".concat(cssPrefix, \"-modal\"), 'is-active')\n .focus()\n .addChild('div', function (b) { return b\n .addClass('kdlg-modal-background'); })\n .addChild('div', function (b) { return _this.windowElement = b\n .addClass(\"\".concat(cssPrefix, \"-modal-window\"))\n .addChild('header', function (b) {\n _this.headerElement = b\n .addClass(\"\".concat(cssPrefix, \"-header\"))\n .addChild('p', function (b) { return b\n .addClass(\"\".concat(cssPrefix, \"-header-title\"))\n .addText(options.title); })\n .toDOM();\n if (options.closable !== false)\n b.addChild('button', function (b) { return b\n .addClass(\"\".concat(cssPrefix, \"-modal-close\"))\n .on('click', function () {\n _this.cancelHandler();\n })\n .focus(); });\n })\n .addChild('div', function (b) {\n b.addClass(\"\".concat(cssPrefix, \"-alert-container\"));\n _this.alertElement = b.toDOM();\n })\n .addChild('section', function (b) {\n _this.bodyElement = b\n .addClass(\"\".concat(cssPrefix, \"-body\"))\n .toDOM();\n if (typeof options.body === 'string') {\n var html = liquid.renderLiquidTemplate(options.body, data);\n b.addHtml(html);\n }\n else {\n b.addChildElement(options.body);\n }\n })\n .addChild('footer', function (b) {\n var alignClass = null;\n if (options.footerAlignment && options.footerAlignment == DialogFooterAlignment.Center) {\n alignClass = 'align-center';\n }\n else {\n alignClass = 'align-right';\n }\n _this.footerElement = b\n .addClass(\"\".concat(cssPrefix, \"-footer\"))\n .toDOM();\n b.addClass(alignClass);\n if (options.submitable === false)\n return;\n b.addChild('button', function (bb) {\n bb.id(_this.dialogId + '-btn-submit')\n .addClass('kfrm-button', 'is-info')\n .addText(options.submitButtonText || i18n.getText('ButtonOK'));\n if (options.recaptchaSiteKey) {\n bb.data('sitekey', options.recaptchaSiteKey);\n bb.addClass('g-recaptcha');\n bb.on('click', function (e) {\n if (grecaptcha) {\n grecaptcha.ready(function () {\n grecaptcha.execute(options.recaptchaSiteKey, { action: 'submit' })\n .then(function (token) {\n _this.submitHandler(token);\n });\n });\n }\n else {\n _this.submitHandler();\n }\n });\n }\n else {\n bb.on('click', function (e) {\n _this.submitHandler();\n });\n }\n bb.focus();\n });\n if (options.cancelable !== false)\n b.addChild('button', function (bb) { return bb\n .id(_this.dialogId + '-btn-cancel')\n .addClass('kfrm-button')\n .addText(options.cancelButtonText || i18n.getText('ButtonCancel'))\n .on('click', function (e) {\n _this.cancelHandler();\n }); });\n })\n .toDOM(); })\n .toDOM();\n }\n DefaultDialog.prototype.getData = function () {\n return this.data;\n };\n DefaultDialog.prototype.getRootElement = function () {\n return this.slot;\n };\n DefaultDialog.prototype.getSubmitButtonElement = function () {\n return document.getElementById(this.dialogId + '-btn-submit');\n };\n DefaultDialog.prototype.getCancelButtonElement = function () {\n return document.getElementById(this.dialogId + '-btn-cancel');\n };\n DefaultDialog.prototype.open = function () {\n var _this = this;\n if (this.options.beforeOpen) {\n this.options.beforeOpen(this);\n }\n domel(this.slot).show();\n if (this.options.arrangeParents) {\n this.arrangeParents(true);\n }\n var windowDiv = this.slot\n .querySelector(\".\".concat(cssPrefix, \"-modal-window\"));\n if (this.options.height) {\n windowDiv.style.height = typeof this.options.height === 'string'\n ? this.options.height\n : \"\".concat(this.options.height, \"px\");\n }\n if (this.options.width) {\n windowDiv.style.width = typeof this.options.width === 'string'\n ? this.options.width\n : \"\".concat(this.options.width, \"px\");\n }\n if (this.options.submitOnEnter) {\n window.addEventListener('keydown', this.keydownHandler, false);\n }\n //clear alert on change in any input element \n this.slot.querySelectorAll('input')\n .forEach(function (element) {\n return element.addEventListener('input', function () {\n _this.clearAlert();\n if (_this.options.onInput) {\n _this.options.onInput(_this);\n }\n });\n });\n if (this.options.onShow) {\n this.options.onShow(this);\n }\n };\n DefaultDialog.prototype.submit = function () {\n this.submitHandler();\n };\n DefaultDialog.prototype.cancel = function () {\n this.cancelHandler();\n };\n DefaultDialog.prototype.close = function () {\n this.destroy();\n };\n DefaultDialog.prototype.disableButtons = function () {\n var buttons = this.slot.querySelectorAll('button');\n buttons.forEach(function (button) { return button.disabled = true; });\n };\n DefaultDialog.prototype.enableButtons = function () {\n var buttons = this.slot.querySelectorAll('button');\n buttons.forEach(function (button) { return button.disabled = false; });\n };\n DefaultDialog.prototype.showAlert = function (text, reason, replace) {\n var alert = domel('div')\n .addClass(\"\".concat(cssPrefix, \"-alert \").concat(reason || ''))\n .addChild('span', function (b) { return b\n .addClass(\"\".concat(cssPrefix, \"-alert-closebtn\"))\n .text('×')\n .on('click', function (ev) {\n var alert = ev.target.parentElement;\n alert.parentElement.removeChild(alert);\n }); })\n .addText(text)\n .toDOM();\n if (replace === true) {\n this.clearAlert();\n }\n this.alertElement.appendChild(alert);\n };\n DefaultDialog.prototype.clearAlert = function () {\n this.alertElement.innerHTML = '';\n };\n DefaultDialog.prototype.destroy = function () {\n var elem = document.querySelectorAll(\"[data-dialog-id=\\\"\".concat(this.dialogId, \"\\\"]\"));\n if (elem.length <= 0)\n return;\n if (this.options.arrangeParents) {\n this.arrangeParents(false);\n }\n document.body.removeChild(this.slot);\n if (this.options.submitOnEnter) {\n window.removeEventListener('keydown', this.keydownHandler, false);\n }\n if (this.options.onDestroy) {\n this.options.onDestroy(this);\n }\n };\n DefaultDialog.prototype.isActiveDialog = function () {\n var windowDivs = document.documentElement.querySelectorAll('.kdlg-modal');\n return windowDivs[windowDivs.length - 1] === this.slot;\n };\n DefaultDialog.prototype.arrangeParents = function (turnOn) {\n var windowDivs = document.documentElement.querySelectorAll('.kdlg-modal-window');\n for (var i = 0; i < windowDivs.length - 1; i++) {\n if (turnOn) {\n var offset = i == 0 ? 20 : i * 40 + 20;\n domel(windowDivs[i])\n .setStyle('margin-top', \"\".concat(offset, \"px\"))\n .setStyle('margin-left', \"\".concat(offset, \"px\"));\n }\n else {\n domel(windowDivs[i])\n .removeStyle('margin-top')\n .removeStyle('margin-left');\n }\n }\n };\n return DefaultDialog;\n}());\nexport { DefaultDialog };\nvar DefaultProgressDialog = /** @class */ (function (_super) {\n __extends(DefaultProgressDialog, _super);\n function DefaultProgressDialog(options, data) {\n var _this = this;\n var contentElement;\n var progressElement;\n var body = domel('div')\n .addChild('div', function (b) { return contentElement = b\n .text(options.content || '')\n .toDOM(); })\n .addChild('div', function (b) {\n b\n .addClass(\"\".concat(cssPrefix, \"-progress-line\"))\n .addChild('div', function (b) {\n progressElement = b\n .addClass('fill')\n .toDOM();\n if (options.determinated) {\n b.setStyle('width', '0%');\n }\n else {\n b.addClass('indeterminate');\n }\n });\n })\n .toDOM();\n _this = _super.call(this, {\n title: options.title,\n body: body,\n beforeOpen: options.beforeOpen,\n onSubmit: options.onSubmit,\n width: options.width,\n height: options.height,\n submitable: false,\n cancelable: false,\n closable: false,\n onDestroy: options.onDestroy\n }, data) || this;\n _this.contentElement = contentElement;\n _this.progressElement = progressElement;\n return _this;\n }\n DefaultProgressDialog.prototype.updateContent = function (content) {\n this.contentElement.innerText = content;\n };\n DefaultProgressDialog.prototype.updateProgress = function (progress) {\n var _this = this;\n progress = this.in01(progress);\n this.progressElement.style.width = \"\".concat(progress * 100, \"%\");\n if (progress === 1) {\n // postpone for 0.5s for smooth closing\n setTimeout(function () {\n _this.submit();\n }, 500);\n }\n };\n DefaultProgressDialog.prototype.in01 = function (num) {\n if (num > 1)\n return 1;\n if (num < 0)\n return 0;\n return num;\n };\n return DefaultProgressDialog;\n}(DefaultDialog));\nexport { DefaultProgressDialog };\nvar DefaultDialogSet = /** @class */ (function () {\n function DefaultDialogSet(options, dialogService) {\n this.options = options;\n this.dialogService = dialogService;\n this.currentDialog = null;\n this.currentIndex = 0;\n this.options = options;\n this.dialogService = dialogService;\n }\n DefaultDialogSet.prototype.getCurrent = function () {\n return this.currentDialog;\n };\n DefaultDialogSet.prototype.openNext = function (data) {\n return this.open(this.currentIndex + 1, data);\n };\n DefaultDialogSet.prototype.openPrev = function (data) {\n return this.open(this.currentIndex - 1, data);\n };\n DefaultDialogSet.prototype.open = function (page, data) {\n if (page < 0) {\n this.currentIndex = 0;\n }\n else if (page >= this.options.length) {\n this.currentIndex = this.options.length - 1;\n }\n else {\n this.currentIndex = page;\n }\n if (this.currentDialog) {\n try {\n this.currentDialog.close();\n }\n catch (e) { }\n }\n var dlgOptions = this.options[this.currentIndex];\n this.currentDialog = this.dialogService.open(dlgOptions, data);\n return this.currentDialog;\n };\n DefaultDialogSet.prototype.close = function () {\n if (this.currentDialog) {\n this.currentDialog.close();\n this.currentDialog = null;\n }\n };\n return DefaultDialogSet;\n}());\nexport { DefaultDialogSet };\n//# sourceMappingURL=default_dialog_service.js.map","import { i18n } from '@easydata/core';\nfunction addEasyDataUITexts() {\n i18n.updateDefaultTexts({\n GridPageInfo: '{FirstPageRecordNum} - {LastPageRecordNum} of {Total} records',\n GridItemsPerPage: 'items per page',\n ButtonOK: \"OK\",\n ButtonCancel: \"Cancel\",\n ButtonApply: 'Apply',\n ButtonNow: 'Now',\n LblTotal: 'Total'\n });\n}\naddEasyDataUITexts();\n//# sourceMappingURL=text_resources.js.map","// grid\nexport * from './grid/easy_grid';\nexport * from './grid/easy_grid_events';\nexport * from './grid/easy_grid_options';\nexport * from './grid/easy_grid_columns';\nexport * from './grid/easy_grid_cell_renderer';\n//datetimepicker\nexport * from './datetimepicker/calendar';\nexport * from './datetimepicker/date_time_picker';\nexport * from './datetimepicker/date_time_picker_options';\nexport * from './datetimepicker/default_calendar';\nexport * from './datetimepicker/default_date_time_picker';\nexport * from './datetimepicker/default_time_picker';\nexport * from './datetimepicker/time_picker';\n// utils\nexport * from './utils/browser_utils';\nexport * from './utils/dom_elem_builder';\nexport * from './utils/drag_manager';\nexport * from './utils/mask';\nexport * from './utils/ui-utils';\n//dialogs\nexport * from './dialogs/default_dialog_service';\nexport * from './dialogs/dialog_service';\nimport './i18n/text_resources';\nimport { DefaultDialogService } from './dialogs/default_dialog_service';\n// export dialogs to use outside of context as global\nvar dialogs = new DefaultDialogService();\nexport { dialogs };\n//# sourceMappingURL=public_api.js.map","import { HttpClient } from '@easydata/core';\r\nimport { domel, DomElementBuilder, DefaultDialogService, dialogs, Dialog, DialogOptions, DialogSet } from '@easydata/ui';\r\nimport { EqContext, equtils } from '@easyquery/core';\r\n\r\nfunction strIsEmpty(str: string) {\r\n if (str) {\r\n return str.trim() === '';\r\n }\r\n else \r\n return true;\r\n}\r\n\r\n\r\nconst baseLicApiUrl = 'https://korzh.com/api/license';\r\n//const baseLicApiUrl = 'https://localhost:44301/api/license';\r\nconst eqVersion = '7.2';\r\n\r\nexport class LCDialog {\r\n private dialogSet: DialogSet;\r\n private http: HttpClient;\r\n private context: EqContext;\r\n\r\n constructor(context: EqContext) {\r\n this.http = new HttpClient();\r\n this.context = context;\r\n }\r\n\r\n public show() {\r\n const dialogService = new DefaultDialogService();\r\n\r\n this.dialogSet = dialogService.createSet([\r\n {\r\n closable: false,\r\n cancelable: false,\r\n submitOnEnter: true,\r\n title: 'No license key for EasyQuery',\r\n body: this.buildStartPage(),\r\n submitButtonText: 'Submit',\r\n onInput: this.validateForm.bind(this),\r\n onSubmit: this.startPageOnSubmit.bind(this) \r\n },\r\n {\r\n closable: false,\r\n cancelable: false,\r\n submitOnEnter: true,\r\n title: 'Please check your inbox',\r\n body: this.buildCodePage(),\r\n submitButtonText: 'Get License Key',\r\n onInput: this.validateForm.bind(this),\r\n onSubmit: this.codePageOnSubmit.bind(this)\r\n },\r\n {\r\n closable: false,\r\n cancelable: false,\r\n submitable: false,\r\n title: 'Success', \r\n body: this.buildSuccessPage()\r\n },\r\n {\r\n closable: false,\r\n cancelable: false,\r\n submitable: false,\r\n title: 'Failure', \r\n body: this.buildFailurePage()\r\n },\r\n ]);\r\n \r\n const dialog1 = this.dialogSet.open(0);\r\n //dialog1.getRootElement();\r\n \r\n setTimeout(() => {\r\n this.validateForm(dialog1);\r\n \r\n const emailInput = document.getElementById('eqAuthEmail') as HTMLInputElement;\r\n if (emailInput) {\r\n emailInput.focus();\r\n }\r\n }, 200);\r\n }\r\n\r\n protected isValidForm(form : HTMLElement) {\r\n const emailInput = form.querySelector('#eqAuthEmail') as HTMLInputElement; //form.querySelector('[name=\"email\"]') as HTMLInputElement; \r\n if (emailInput) { \r\n return !strIsEmpty(emailInput.value) &&\r\n emailInput.value\r\n .toLowerCase()\r\n .match(\r\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\r\n )\r\n }\r\n \r\n const codeInput = form.querySelector('#eqAuthCode') as HTMLInputElement; //form.querySelector('[name=\"code\"]') as HTMLInputElement;\r\n if (codeInput) { \r\n return !strIsEmpty(codeInput.value) &&\r\n !isNaN(+codeInput.value) &&\r\n codeInput.value == codeInput.value.trim() &&\r\n codeInput.value.length === 6;\r\n }\r\n \r\n return true;\r\n }\r\n\r\n protected validateForm(dialog : Dialog) : void {\r\n const submitButton = dialog.getSubmitButtonElement();\r\n submitButton.disabled = !this.isValidForm(dialog.getRootElement());\r\n }\r\n \r\n protected addInputField(parentBuilder:DomElementBuilder<HTMLDivElement>, inputOptions: any) : void {\r\n parentBuilder\r\n .addChild('label', b => b\r\n .attr('for', inputOptions.id)\r\n .addHtml(`${inputOptions.label} ${inputOptions.required ? '<sup style=\"color: red\">*</sup>' : ''}: `)\r\n )\r\n .addChild('input', b => {\r\n b.id(inputOptions.id);\r\n b.name(inputOptions.name || inputOptions.id);\r\n b.type(inputOptions.type || 'text');\r\n if (typeof(inputOptions.value) !== 'undefined') {\r\n b.value(inputOptions.value); \r\n }\r\n if (inputOptions.onInput) {\r\n b.on('input', inputOptions.onInput);\r\n }\r\n });\r\n }\r\n \r\n \r\n protected buildStartPage() : HTMLDivElement {\r\n let form : HTMLDivElement;\r\n let controlsPanelBuilder: DomElementBuilder<HTMLDivElement>;\r\n const formBuilder = domel('div');\r\n \r\n formBuilder.addChild('div', b => b\r\n .html('<div style=\"font-size:1.2em\">The EasyQuery license key is either absent, invalid or was issued for a different version of the library.</div>' +\r\n '<div style=\"font-size:1.2em\">Please fill out the form to obtain a valid trial license key.</div>')\r\n );\r\n \r\n formBuilder\r\n .addClass('kfrm-form')\r\n .addChild('div', b => {\r\n controlsPanelBuilder = b;\r\n b.addClass('kfrm-fields label-above');\r\n b.addClass('kfrm-break-20');\r\n });\r\n \r\n this.addInputField(controlsPanelBuilder, {\r\n id: 'eqAuthEmail',\r\n name: 'email',\r\n label: 'Email',\r\n required: true\r\n });\r\n \r\n this.addInputField(controlsPanelBuilder, {\r\n id: 'eqAuthName',\r\n name: 'contactName',\r\n label: 'Name (optional)',\r\n required: false\r\n });\r\n \r\n formBuilder.addChild('div', b => b\r\n .html('<div style=\"margin-top:20px;font-size:0.9em\">* By clicking Submit, you agree with Korzh.com <a href=\"https://korzh.com/terms-of-use\">Terms of use</a>' +\r\n ' and <a href=\"https://korzh.com/privacy\">Privacy policy</a>.</div>' +\r\n '<div style=\"font-size:0.9em\">You also agree to receive email messages from Korzh.com. This consent may be revoked at any time.</div>')\r\n );\r\n\r\n form = formBuilder.toDOM();\r\n return form;\r\n }\r\n \r\n protected buildCodePage() : string {\r\n let form : HTMLDivElement;\r\n let controlsPanelBuilder: DomElementBuilder<HTMLDivElement>;\r\n const formBuilder = domel('div');\r\n \r\n formBuilder.addChild('div', b => b\r\n .html('<div style=\"font-size:1.2em\">We sent a confirmation code to <strong>{{email}}</strong>.</div>' +\r\n '<div style=\"font-size:1.2em\">Please find it in the email and enter to the text box below</div>')\r\n );\r\n \r\n formBuilder\r\n .addClass('kfrm-form')\r\n .addChild('div', b => {\r\n controlsPanelBuilder = b;\r\n b.addClass('kfrm-fields label-above');\r\n b.addClass('kfrm-break-20');\r\n });\r\n \r\n this.addInputField(controlsPanelBuilder, {\r\n id: 'eqAuthCode',\r\n name: 'code',\r\n label: 'Confirmation code',\r\n required: true\r\n });\r\n\r\n formBuilder.addChild('div', b => b\r\n .html('<div style=\"margin-top:20px;font-size:0.9em\">NB: Don\\'t forget to check your SPAM folder ' +\r\n 'if the message does not arrive within the next 5 minutes, and mark it as \"Not Spam\" if it\\'s found there.</div>')\r\n );\r\n\r\n form = formBuilder.toDOM();\r\n return form.outerHTML;\r\n }\r\n \r\n protected buildSuccessPage() : HTMLDivElement {\r\n let form : HTMLDivElement;\r\n const formBuilder = domel('div');\r\n \r\n formBuilder.addChild('div', b => b\r\n .html('<div style=\"font-size:1.2em\">You have successfully completed the registration process.</div>' +\r\n '<div style=\"font-size:1.2em\">Please restart your web application to get the key applied.</div>')\r\n );\r\n \r\n form = formBuilder.toDOM();\r\n return form;\r\n } \r\n\r\n protected buildFailurePage() : string {\r\n let form : HTMLDivElement;\r\n const formBuilder = domel('div');\r\n \r\n formBuilder.addChild('div', b => b\r\n .html('{{message}}')\r\n );\r\n \r\n form = formBuilder.toDOM();\r\n return form.outerHTML;\r\n } \r\n\r\n protected startPageOnSubmit(dlg: Dialog) {\r\n const emailInput = document.getElementById('eqAuthEmail') as HTMLInputElement;\r\n const nameInput = document.getElementById('eqAuthName') as HTMLInputElement;\r\n const authEmail = emailInput.value;\r\n const authName = nameInput.value;\r\n\r\n dlg.disableButtons();\r\n\r\n this.http.post(\r\n equtils.combinePath(baseLicApiUrl, 'get-code'),\r\n { \r\n email: authEmail, \r\n name: authName,\r\n data: { \r\n ptag: this.context.backendInfo.type,\r\n apptype: this.context.backendInfo.subType,\r\n } \r\n }, \r\n { dataType: 'json' }\r\n )\r\n .then(result => {\r\n if (result.status !== 0) {\r\n throw new Error(result.message);\r\n }\r\n const dlg = this.dialogSet.openNext({email: authEmail});\r\n setTimeout(() => {\r\n this.validateForm(dlg);\r\n const codeInput = document.getElementById('eqAuthCode') as HTMLInputElement;\r\n if (codeInput) {\r\n codeInput.focus();\r\n }\r\n }, 200);\r\n })\r\n .catch(error => {\r\n dlg.showAlert(error.message, \"error\", true);\r\n dlg.enableButtons();\r\n });\r\n\r\n return false;\r\n }\r\n\r\n protected codePageOnSubmit(dlg: Dialog) {\r\n const codeInput = document.getElementById('eqAuthCode') as HTMLInputElement;\r\n const authCode = codeInput.value;\r\n\r\n dlg.disableButtons();\r\n\r\n this.http.post(\r\n equtils.combinePath(baseLicApiUrl, 'get-key'),\r\n { \r\n token: authCode, \r\n ptag: this.context.backendInfo.type,\r\n version: eqVersion\r\n }, \r\n { dataType: 'json' }\r\n )\r\n .then(result => {\r\n switch (result.status) {\r\n case 0: \r\n const url = equtils.combinePath(this.context.getBaseEndpoint(), 'lck');\r\n\r\n this.http.post(\r\n url, \r\n {\r\n version: eqVersion, \r\n key: result.key \r\n }, \r\n { dataType: 'json' }\r\n )\r\n .then(_ => this.dialogSet.openNext());\r\n break;\r\n case 2: \r\n this.dialogSet.open(3, {\r\n message: '<div style=\"font-size:1.2em\">Your trial license for EasyQuery has expired.</div>' +\r\n '<div style=\"font-size:1.2em\">Please <a href=\"https://korzh.com/support\">contact us</a> if you want to extend the trial period.</div>'\r\n })\r\n break;\r\n case 3: \r\n this.dialogSet.open(3, {\r\n message: '<div style=\"font-size:1.2em\">Your purchased license for EasyQuery has expired.</div>' +\r\n '<div style=\"font-size:1.2em\">You need to <a href=\"https://korzh.com/account\">renew the subscription</a> to get a valid license.</div>'\r\n })\r\n break;\r\n default: \r\n throw new Error(result.message);\r\n }\r\n })\r\n .catch(error => {\r\n dlg.showAlert(error.message, \"error\", true);\r\n dlg.enableButtons();\r\n });\r\n\r\n return false;\r\n }\r\n}\r\n\r\n\r\nexport function showNoLicenseAlert(lcv : any) {\r\n\tlet title, body, buttonTitle, buttonUrl;\r\n\r\n\tswitch(lcv.__kt) {\r\n\t\tcase 1:\r\n\t\t\ttitle = 'EasyQuery trial has expired';\r\n\t\t\tbody = `Your trial period for EasyQuery has expired. \r\n\tYou can send a request to <a href=\"https://korzh.com/account\">extend your trial</a> or <a href=\"https://korzh.com/easyquery/licensing\">buy a license</a> to get rid of all limitations.`\r\n\t\t\tbuttonTitle = 'Buy a license';\r\n\t\t\tbuttonUrl = 'https://korzh.com/easyquery/licensing'\r\n\t\t\tbreak;\r\n\r\n\t\tcase -3:\r\n\t\t\ttitle = 'No license key for EasyQuery';\r\n\t\t\tbody = `Please <a href=\"https://korzh.com/easyquery#get-started\">register for a trial</a> \r\n\tor <a href=\"https://korzh.com/easyquery/licensing\">purchase a license</a> to get a proper product key. <br />\r\n\tIf you already have a key, please follow <a href=\"https://korzh.com/easyquery/docs/getting-started/product-key\">this guide</a> to apply it.`\r\n\t\t\tbuttonTitle = 'Register trial';\r\n\t\t\tbuttonUrl = 'https://korzh.com/easyquery#get-started'\r\n\t\t\tbreak;\r\n\t\t\r\n\t\tdefault:\r\n\t\t\ttitle = `Invalid key for EasyQuery!`;\r\n\t\t\tbody = `The EasyQuery product key is either invalid or was issued for a different version of the library.\r\n The version you are using now is 7.2,\r\n\tso please <a href=\"https://korzh.com/account\">login to your account</a> to get a proper key for version 7.2.`\t\r\n\t\t\tbuttonTitle = 'Get key';\r\n\t\t\tbuttonUrl = 'https://korzh.com/account'\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tconst ds = new DefaultDialogService();\r\n\tconst dlg = ds.open({\r\n\t\tclosable: false,\r\n\t\tcancelable: false,\r\n\t\tsubmitable: false,\r\n\t\ttitle: title,\r\n\t\tbody: body\r\n\t});\r\n\r\n\tconst footer = dlg.getRootElement().querySelector('footer');\r\n\tdomel(footer)\r\n\t\t.removeClass('align-right')\r\n\t\t.setStyle('justify-content', 'center')\r\n\t\t.addChild('button', b => b\r\n\t\t\t.addClass('kfrm-button', 'is-info')\r\n\t\t\t.addText(buttonTitle)\r\n\t\t\t.on('click', (e) => {\r\n\t\t\t\twindow.location.href = buttonUrl;\r\n\t\t\t})\r\n\t\t);\r\n\tif (lcv.__kt == 1) {\r\n\t\tdomel(footer)\r\n\t\t\t.addChild('button', b => b\r\n\t\t\t\t.addClass('kfrm-button')\r\n\t\t\t\t.addText('Extend trial')\r\n\t\t\t\t.on('click', (e) => {\r\n\t\t\t\t\twindow.location.href = 'https://korzh.com/account';\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t}\r\n}\r\n","import { EqContext, equtils } from '@easyquery/core';\r\n\r\nimport { DefaultDialogService, domel } from '@easydata/ui';\r\n\r\nimport { QueryEx } from './query/query_ex';\r\nimport { EqServerQueryStorage } from './main/eqs_query_storage';\r\nimport { DataModelEx } from './dm/model_ex';\r\n\r\nimport { lcv } from './utils/lcv';\r\nimport { DataTableAggregatesCalculator } from './data/data_table_aggr_calculator';\r\nimport { LCDialog, showNoLicenseAlert } from './license/lc-dialog';\r\n\r\ndeclare module '@easyquery/core/dist/lib/main/context' {\r\n interface EqContext {\r\n\t\t/** \r\n\t\t* Sets the endpoint for getting the license key.\r\n\t\t* @deprecated This method is deprecated and will be ignored. Starting version 7.0.0\r\n\t\t* endpoint set for EasyQuery actions will be used via adding '.lck'\r\n\t\t*/\r\n\t\tsetLicenseKeyEndpoint(this: EqContext, endpoint: string) : void;\r\n\r\n\t\t/** \r\n\t\t* Extension method that activates `Enterprise` functionality\r\n\t\t* @param keyOrInitCallback The license key or a callback wich is called after\r\n\t\t* loading the license key from the back-end.\r\n\t\t* If the callback function is called useEnterprise will try to get the license key from {base}/lck endpoint\r\n\t\t*\r\n\t\t* @example\r\n\t\t* context.useEnterprise('license key')\r\n\t\t* //or\r\n\t\t* context.useEnterprise(() => {\r\n\t\t* //further logic\r\n\t\t*\tview.init(options);\r\n\t\t* });\r\n\t\t*/\r\n\t\tuseEnterprise(this: EqContext, keyOrInitCallback: string | (() => void)): void;\r\n }\r\n}\r\n\r\nEqContext.prototype.setLicenseKeyEndpoint = function(this: EqContext, endpoint : string) {\r\n\tconsole.warn('This method is deprecated and will be ignored.\\n ' \r\n\t\t\t\t+ 'The main EasyQuery endpoint (set via useEndpoint() function) is used to get the license since version 7.0.\\n '\r\n\t\t\t\t+ 'So, you can simply remove this function call');\r\n}\r\n\r\nEqContext.prototype.useEnterprise = function(this: EqContext, keyOrInitCallback: string | (() => void)) {\r\n\tconst func = (key: string, showAlert: boolean) => {\r\n\t\tlcv.ck(key);\r\n\r\n\t\tif (lcv.__kt > 1) {\r\n\t\t\tconst services = this.getServices();\r\n\t\t\tservices.registerDataModelResolver(context => new DataModelEx());\r\n\t\t\tservices.registerQueryResolver(context => new QueryEx(context.getModel()));\r\n\t\t\tservices.registerQueryStorageResolver(context => new EqServerQueryStorage(context));\r\n\t\t\tservices.registerAggregatesCalculator(context => new DataTableAggregatesCalculator(context));\r\n\r\n\t\t\tif (lcv.__kt === 2) {\r\n\t\t\t\tconsole.warn('EasyQuery.JS is working in the TRIAL MODE!\\n' \r\n\t\t\t\t\t\t\t\t+ 'Please order a license (https://korzh.com/eq) to get a proper product key.');\r\n\t\t\t\tcreateTrialWM();\r\n\t\t\t\tsetTimeout(() => {\t\r\n\t\t\t\t\tshowTrialWM();\r\n\t\t\t\t\tsetTimeout(hideTrialWM, 6000)\r\n\t\t\t\t}, 3000);\r\n\t\t\t}\r\n\t\t} \r\n\t\telse {\r\n\t\t\tif (showAlert) {\r\n\t\t\t\tshowNoLicenseAlert(lcv);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tconst lcd = new LCDialog(this);\r\n\t\t\t\tlcd.show();\t\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tif (typeof(keyOrInitCallback) === \"string\") {\r\n\t\tfunc(keyOrInitCallback, true);\r\n\t} \r\n\telse if (typeof(keyOrInitCallback) === \"function\") {\r\n\t\tconst http = this.getServices().getHttpClient();\r\n\t\tlet url = equtils.combinePath(this.getBaseEndpoint(), 'lck2')\r\n\t\thttp.get<LicenseKeyResponse>(url)\r\n\t\t\t.then(result => { \r\n\t\t\t\tfunc(result.key.split(\"\").reverse().join(\"\"), false);\r\n\t\t\t\tthis.useBackend({\r\n\t\t\t\t\ttype: result.backendType,\r\n\t\t\t\t\tsubType: result.appType\r\n\t\t\t\t});\r\n\t\t\t\tkeyOrInitCallback(); \r\n\t\t\t})\r\n\t\t\t.catch(error => {\r\n\t\t\t\turl = equtils.combinePath(this.getBaseEndpoint(), 'lck')\r\n\t\t\t\thttp.get<string>(url)\r\n\t\t\t\t\t.then(result => { \r\n\t\t\t\t\t\tfunc(result.split(\"\").reverse().join(\"\"), false);\r\n\t\t\t\t\t\tkeyOrInitCallback(); \r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(error => this.throwError({\r\n\t\t\t\t\t\taction: \"LCK\",\r\n\t\t\t\t\t\tsourceError: error\r\n\t\t\t\t\t}));\r\n\t\t\t})\r\n\t} \r\n\telse {\r\n\t\tthrow new Error(\"Wrong type of 'keyOrInitCallback' parameter. It must be a string with a license key or a callback function.\");\r\n\t}\r\n}\r\n\r\nlet trialDiv: HTMLDivElement;\r\n\r\nfunction createTrialWM() {\r\n\t// we can rewrite it using shadow dom\r\n\t// to make it impossible to hide using JS :)\r\n\ttrialDiv = document.createElement(\"div\");\r\n\ttrialDiv.style.position = \"fixed\";\r\n\ttrialDiv.style.bottom = \"0\";\r\n\ttrialDiv.style.right = \"-400px\";\r\n\ttrialDiv.style.width = \"400px\";\r\n\ttrialDiv.style.height = \"100px\";\r\n\ttrialDiv.style.color = \"grey\";\r\n\ttrialDiv.style.textAlign = \"center\";\r\n\ttrialDiv.style.opacity = \"0.7\";\r\n\ttrialDiv.style.font = \"bold 1em Trebuchet MS, Tahoma, Verdana, Geneva, Arial, Helvetica, sans-serif\";\r\n\ttrialDiv.style.transition = \"right 3s ease-out\";\r\n\r\n\tconst header = document.createElement(\"div\");\r\n\t\tconst eq = document.createElement(\"span\");\r\n\t\teq.innerText = \"EasyQuery\";\r\n\t\teq.style.color = \"#3A94D4\";\r\n\t\teq.style.lineHeight = \"50px\";\r\n\t\theader.appendChild(eq);\r\n\r\n\t\tconst korzh = document.createElement(\"span\");\r\n\t\tkorzh.innerText = \"by Korzh.com\";\r\n\t\tkorzh.style.marginLeft = \"10px\";\r\n\t\theader.appendChild(korzh);\r\n\r\n\ttrialDiv.appendChild(header);\r\n\r\n\tconst trialOnly = document.createElement(\"div\");\r\n\ttrialOnly.innerText = \"FOR TRIAL USE ONLY\";\r\n\ttrialOnly.style.fontSize = \"1.2em\";\r\n\ttrialOnly.style.fontWeight = \"1000\";\r\n\ttrialDiv.appendChild(trialOnly);\r\n\r\n\tdocument.body.appendChild(trialDiv);\r\n}\r\n\r\nfunction showTrialWM() {\r\n\tif (trialDiv) {\r\n\t\ttrialDiv.style.right = \"0\";\r\n\t}\r\n}\r\n\r\nfunction hideTrialWM() {\r\n\tif (trialDiv) {\r\n\t\ttrialDiv.style.right = \"-400px\";\r\n\t\tsetTimeout(() => {\r\n\t\t\ttrialDiv.parentNode.removeChild(trialDiv);\r\n\t\t}, 5000)\r\n\t}\r\n}\r\n\r\ninterface LicenseKeyResponse {\r\n\tkey : string;\r\n\tbackendType?: string;\r\n\tappType?: string;\r\n}","import { \r\n AggregatesCalculator, AggregatesContainer, \r\n AggrCalculationError, AggrCalculationOptions, GroupTotals,\r\n EasyDataTable\r\n} from '@easydata/core';\r\n\r\nimport { \r\n EqContext, ExprTag, \r\n Query, EqAggregatesContainer, FetchDataOptions, Expression \r\n} from '@easyquery/core';\r\n\r\ninterface ProcessLevelOptions {\r\n query: Query;\r\n level: number;\r\n groupName?: string;\r\n resultObtainedCallback?: (result?: any, level?: number) => void;\r\n errorOccurredCallback?: (error: AggrCalculationError) => void;\r\n}\r\n\r\nexport class EqServerAggregatesCalculator implements AggregatesCalculator {\r\n constructor(protected context: EqContext) {\r\n this.aggrContainer = new EqAggregatesContainer(context);\r\n }\r\n\r\n private aggrContainer: EqAggregatesContainer;\r\n\r\n getAggrContainer(): AggregatesContainer {\r\n return this.aggrContainer;\r\n }\r\n\r\n calculate(options?: AggrCalculationOptions): Promise<void> {\r\n this._needRecalculation = false;\r\n this.aggrContainer.clear();\r\n\r\n options = options || { };\r\n options.maxLevel = options.maxLevel >= 0 \r\n ? options.maxLevel : 0;\r\n\r\n const levelPromises: Array<Promise<void>> = []; \r\n const query = this.context.createQuery();\r\n query.loadFromData(this.context.getQuery().toJSONData());\r\n \r\n const settings = this.context.getQuery().getAggregationSettings();\r\n const aggregates = settings.getAggregates();\r\n const aggrColIds = settings.getAggregates().map(a => a.colId);\r\n const aggrCols = query.getColumns()\r\n .filter(col => aggrColIds.indexOf(col.id) >= 0);\r\n\r\n for (const col of aggrCols) {\r\n query.changeColumnType(col, ExprTag.AggregateFunction, \r\n { funcId: aggregates.filter(a => a.colId == col.id)[0].funcId });\r\n }\r\n\r\n //get all non-aggregate columns\r\n const queryCols = query.getColumns()\r\n .filter(c => c.expr.tag !== ExprTag.AggregateFunction);\r\n\r\n for (const col of queryCols) {\r\n col.setHidden(true);\r\n }\r\n\r\n if (settings.hasRecordCount()) {\r\n const col = query.createColumn();\r\n col.caption = settings.COUNT_FIELD_NAME;\r\n col['_id'] = settings.COUNT_FIELD_NAME;\r\n const sqlText = 'COUNT(*)';\r\n \r\n const customSqlExpr = new Expression(col);\r\n customSqlExpr.tag = ExprTag.CustomSql;\r\n customSqlExpr.sql = sqlText;\r\n customSqlExpr.baseAttrId = null;\r\n col.expr = customSqlExpr;\r\n\r\n query.getColumns().push(col);\r\n }\r\n\r\n if (settings.hasGrandTotals()) {\r\n levelPromises.push(this.processLevel({\r\n query: query,\r\n level: 0,\r\n groupName: 'Grand Totals', \r\n resultObtainedCallback: options.resultObtained,\r\n errorOccurredCallback: options.errorOccurred\r\n }));\r\n }\r\n\r\n const groups = settings.getGroups();\r\n for (let level = 1; level <= groups.length; level++) {\r\n const group = groups[level - 1];\r\n \r\n for (const col of queryCols) {\r\n col.setHidden(group.columns.indexOf(col.id) < 0);\r\n }\r\n\r\n levelPromises.push(this.processLevel({\r\n query: query,\r\n level: level,\r\n groupName: group.name, \r\n resultObtainedCallback: options.resultObtained,\r\n errorOccurredCallback: options.errorOccurred\r\n }));\r\n }\r\n \r\n return Promise.all(levelPromises)\r\n .then(() => { \r\n return;\r\n })\r\n .catch((error) => console.error(error));\r\n }\r\n\r\n private processLevel(options: ProcessLevelOptions): Promise<void> {\r\n const fetcher = this.context.getServices()\r\n .getDataFetcher();\r\n\r\n let fetchOptions : FetchDataOptions = {\r\n aux: true,\r\n query: options.query\r\n };\r\n\r\n if (this.context.debugMode) {\r\n fetchOptions.debug = `Fetching group data. Group: '${options.groupName}', level: ${options.level}`;\r\n }\r\n\r\n const resultPromise = fetcher.fetchData(fetchOptions)\r\n .then((result) => {\r\n const dataTable = new EasyDataTable({\r\n elasticChunks:true\r\n });\r\n \r\n const resultSet = result.resultSet;\r\n\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 const levelData = this.buildLevelData(options.level, dataTable);\r\n this.aggrContainer.setAggregateData(options.level, levelData);\r\n\r\n if (options.resultObtainedCallback) {\r\n options.resultObtainedCallback(result, options.level);\r\n }\r\n }) \r\n .catch((error: Error) => { \r\n if (options.errorOccurredCallback) {\r\n options.errorOccurredCallback({...error, level: options.level });\r\n }\r\n });\r\n\r\n return resultPromise;\r\n }\r\n\r\n private buildLevelData(level: number, dataTable: EasyDataTable): Map<string, GroupTotals> {\r\n const aggrSettings = this.context.getQuery().getAggregationSettings();\r\n \r\n const keyColumns = level > 0\r\n ? aggrSettings.getGroups()[level - 1].columns\r\n : [];\r\n\r\n const valueColumns = aggrSettings.getAggregates().map(a => a.colId);\r\n\r\n if (aggrSettings.hasRecordCount()) {\r\n valueColumns.push(aggrSettings.COUNT_FIELD_NAME);\r\n }\r\n\r\n const data = new Map();\r\n\r\n for (const row of dataTable.getCachedRows()) {\r\n const key: any = {};\r\n const value: GroupTotals = {};\r\n\r\n for (const keyCol of keyColumns) {\r\n const colIdx = dataTable.columns.getIndex(keyCol);\r\n if (colIdx >= 0) {\r\n let keyVal = row.getValue(keyCol);\r\n if (!aggrSettings.caseSensitiveGroups && typeof(keyVal) === 'string') {\r\n keyVal = keyVal.toLowerCase();\r\n }\r\n key[keyCol] = keyVal;\r\n }\r\n }\r\n\r\n for (const valueCol of valueColumns) {\r\n value[valueCol] = row.getValue(valueCol)\r\n }\r\n\r\n data.set(JSON.stringify(key), value);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n private _needRecalculation = true;\r\n\r\n needRecalculation(): boolean {\r\n return this._needRecalculation;\r\n }\r\n\r\n reset(): void {\r\n this._needRecalculation = true;\r\n }\r\n}"],"names":["root","factory","exports","module","require","define","amd","self","__WEBPACK_EXTERNAL_MODULE__388__","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","magics","Math","trunc","x","isNaN","NaN","floor","ceil","lcv","__kt","ck","length","infoBytes","str","binary_string","s","replace","atob","urlatob","len","bytes","Uint8Array","i","charCodeAt","_bs","slice","part2","ism","edc","t36","encChar","majVer","eds","val","tokens","pow","f36","substring","ed","Date","Number","parseInt","now","getTime","error","this","b","String","fromCharCode","result","DataType","EntityAttrKind","readOnly","parameterized","inJoin","isReadOnly","getParent","setReadOnly","conditions","forEach","cond","isParameterized","setParameterized","isInJoin","setInJoin","loadFromData","model","data","conds","newCond","query","createCondition","push","setParent","saveToData","tag","CondTag","Condition","colData","QueryColumn","isEx","createSubQuery","QueryEx","ConditionEx","createColumn","justsorted","QueryColumnEx","addConditionGroup","descriptor","addChildCondition","parent","getRootCondition","lType","linking","linkType","LinkType","group","getModel","attr","getFirstUICAttr","op","getDefaultOperatorForAttr","createSimpleConditionObject","addCondition","addExtraConditionGroup","extraConditions","Query","context","init","newQuery","options","getQuery","modelId","getId","queryId","setId","name","setName","description","setDescription","requestData","toJSONData","url","resolveEndpoint","getServices","getHttpClient","post","then","responseData","getQueryList","queries","Promise","reject","message","loadQuery","saveQuery","put","removeQuery","delete","getPromise","buildQueryPath","mainEntity","entities","getEntitiesInQuery","Error","tree","Tree","entity","contains","path","findPath","addPathToTree","setParents","pathAdded","childs","child","findLink","newNode","addChild","node","entityFrom","entityTo","curPath","curStep","nextStep","passedEntities","pathFound","checkPath","endPoint","getLinksByEntity","link","entity2","newPath","Array","concat","createQuery","DataModel","levelsTotals","prevRow","aggrContainer","EqAggregatesContainer","getAggrContainer","initObjects","aggrSettings","getAggregationSettings","groups","getGroups","aggregates","getAggregates","aggrColIds","map","a","colId","aggrCols","resultTable","columns","getItems","filter","col","id","createColumnAggregatesObject","sum","min","MAX_VALUE","max","MIN_VALUE","calculate","clear","maxLevel","levelNumber","levelIndex","levelTotals","count","resetLevelTotals","allRows","getCachedRows","row","processDataRow","flushLevelTotals","hasGrandTotals","resolve","rowTotals","aggrCol","levelIndexChanged","checkLevelChange","updateLevelTotals","groupIndex","getValue","prevValue","compareValues","groupKey","buildGroupKey","groupTotals","aggr","columnTotals","applyAggrFunc","funcId","hasRecordCount","COUNT_FIELD_NAME","updateAggregateData","needRecalculation","reset","HttpMethod","EditorTag","i18n","utils","HttpRequest","xhr","method","headers","queryParams","setHeader","setQueryParam","getXMLHttpRequest","getResponseHeaders","readyState","HEADERS_RECEIVED","headerMap","_i","arr_1","getAllResponseHeaders","trim","split","parts","header","shift","join","open","_this","UNSENT","keys","encodeURI","param","setRequestHeader","abort","repeatString","times","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","dateStr","timeStr","dateFormat","timeFormat","lang","language","toLocaleDateString","year","month","day","toLocaleTimeString","hour","minute","second","buildShortDateTimeFormat","dataType","format","localeSettings","Time","buildLongDateTimeFormat","addMapper","getLocales","locale","sort","setLocale","l","console","warn","getText","args","arguments","textsObj","resText","argLength","getOneLocaleSetting","getShortMonthName","monthNum","getLongMonthName","getShortWeekDayName","dayNum","toString","getLongWeekDayName","updateLocaleTexts","updateDefaultTexts","addLocale","localeInfo","resetLocales","dateTimeToStr","dateTime","DateTime","numberToStr","number","type","charAt","toUpperCase","cachedSequenceFormats","values_2","v","values_1","index","values","formatWithSequence","toLocaleString","digits","style","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","getNumberFormatOptions","mask","ch","reverse","convertWithMask","booleanToStr","bool","getAllDataTypes","item","getDateDataTypes","getStringDataTypes","Memo","FixedChar","_numericTypes","Byte","Word","Int32","Int64","Float","Currency","Autoinc","getNumericDataTypes","_intTypes","assignDeepCore","hashSet","target","sources","sources_1","source","sourceVal","has","isArray","createArrayFrom","set","create","getPrototypeOf","collection","collection_1","assign","WeakMap","getIfDefined","defaultValue","IsDefinedAndNotNull","copyArrayTo","collection1","collection2","len1","len2","findItemById","array","arrLength","idx","findItemIndexById","indexOfArrayItem","arr","moveArrayItem","index1","index2","splice","removeArrayItem","insertArrayItem","fillArray","start","end","relativeStart","k","relativeEnd","final","shiftToFitWindow","absLeft","width","body","document","getElementsByTagName","winWidth","innerWidth","documentElement","clientWidth","absRight","isObject","isNumericType","dtype","isIntType","isNumeric","parseFloat","isFinite","areCompatibleDataTypes","type1","type2","Unknown","isPropSet","propName","symbols","squeeze","maxlen","step","nextIndex","replaceAtString","substr","getRandomInt","random","safeParseInt","res","generateId","prefix","prfx","pml","ptt","squeezeMoniker","randValue","maxSymbolIndex","targetBase","buffer","rest","intToNum36","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","MMMM","MMM","MM","M","dd","HH","H","hh","h","tt","mm","ss","match","$1","ColumnAlignment","HttpActionResult","request","promise","getRequest","onfulfilled","onrejected","catch","finally","onfinally","extendStatics","setPrototypeOf","__proto__","p","TypeError","__","constructor","__assign","t","n","apply","HttpResponseError","_super","status","HttpClient","defaultHeaders","customPayload","_responseBody","configurable","send","Get","Post","Put","Delete","contentType","XMLHttpRequest","desc","beforeEachRequest","onRequest","dataToSend","JSON","stringify","responseType","onerror","responseText","onreadystatechange","responseContentType","getResponseHeader","responseObj","response","parse","onResponse","decodeArrayBuffer","uintArray","reader","FileReader","onloadend","DONE","readAsText","Blob","MetaEntity","isEditable","caption","attributes","subEntities","dto","captionPlural","namePlur","ied","ents","newEntity","createEntity","attrs","newAttr","createEntityAttr","scan","processAttribute","processEntity","opts","stop","internalProcessEntity","attrCount","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","resType","defValue","defval","rtype","accept","multiline","subType","getValueText","text","_b","_c","MetaData","rootEntity","displayFormats","Map","getMainEntity","loadFromJSON","stringJson","version","vers","editors","newEditor","entroot","dtypeStr","formats","getDisplayFormats","getDisplayFormatsForType","getDefaultFormat","f","isdef","setData","isEmpty","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","addDefaultValueEditors","addOrUpdateValueEditor","ve","getEntitiesTree","getEntitiesTreeWithFilter","getFullEntityPathByAttr","sep","getEntityPathByAttr","entityCaption","entityText","getAttributeText","attrText","entityPath","RegExp","runThroughEntities","getFirstAttributeByFilter","AggregationSettings","colStore","useGrandTotals","useRecordCount","_caseSensitiveGroups","updateCompareProc","strictCompare","caseInsensitiveCompare","addGroup","cols","getColumnIds","from","to","validateColumns","hasColumnsInUse","addAggregateColumn","colIndexOrId","validateAggregate","addGrandTotals","addCounts","grp","getInternalGroups","lastGroup","hasAggregates","hasGroups","drop","caseSensitiveGroups","c","needAggrCalculation","ugt","urc","csg","caseInsensitive","keyVal","value1","value2","liquid","DataColumn","label","originAttrId","isAggr","groupFooterColumnTemplate","gfct","calculatedWidth","DataColumnList","_dateColumnIdx","add","colOrDesc","updateDateColumnIdx","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","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","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","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","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","Calendar","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","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","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","isLast","changeLevel","level","renderTotalsRow","applyGroupColumnTemplate","colIndex","renderCell","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","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","firstDay","getDay","daysInMonth","setFullYear","setMonth","dayOfWeek","cellsDrawnInLastRow","cellsToDraw","TimePicker","currentTime","timeChanged","DefaultTimePicker","updateDisplayedTime","hoursInput","minutesInput","timeText","slidersBuilder","timeToDraw","DefaultDateTimePicker","sb","zIndex","renderButtons","globalMouseDownHandler","srcElement","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","strIsEmpty","trialDiv","baseLicApiUrl","http","dialogSet","buildStartPage","validateForm","startPageOnSubmit","buildCodePage","codePageOnSubmit","buildSuccessPage","buildFailurePage","dialog1","emailInput","isValidForm","form","codeInput","addInputField","parentBuilder","inputOptions","required","controlsPanelBuilder","formBuilder","outerHTML","nameInput","authEmail","authName","equtils","email","ptag","backendInfo","apptype","authCode","getBaseEndpoint","hideTrialWM","parentNode","EqContext","endpoint","keyOrInitCallback","func","services","registerDataModelResolver","DataModelEx","registerQueryResolver","registerQueryStorageResolver","EqServerQueryStorage","registerAggregatesCalculator","DataTableAggregatesCalculator","color","textAlign","opacity","font","transition","eq","lineHeight","korzh","marginLeft","trialOnly","fontSize","fontWeight","createTrialWM","buttonTitle","buttonUrl","footer","location","href","showNoLicenseAlert","LCDialog","useBackend","backendType","appType","throwError","sourceError","_needRecalculation","levelPromises","changeColumnType","ExprTag","queryCols","setHidden","customSqlExpr","Expression","sql","baseAttrId","processLevel","groupName","resultObtainedCallback","resultObtained","errorOccurredCallback","errorOccurred","all","fetcher","getDataFetcher","fetchOptions","aux","debugMode","debug","fetchData","resultSet","levelData","buildLevelData","setAggregateData","keyColumns","valueColumns","keyCol","valueCol"],"sourceRoot":""}
|